From 3817c3b7626e6a33624024a5eade041263641bb9 Mon Sep 17 00:00:00 2001 From: isc-hwojnick Date: Thu, 20 Jun 2024 15:12:02 -0400 Subject: [PATCH 1/6] started code for merging from default branch --- cls/SourceControl/Git/Settings.cls | 4 ++++ cls/SourceControl/Git/Utils.cls | 17 +++++++++++++++++ csp/gitprojectsettings.csp | 9 ++++++++- 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/cls/SourceControl/Git/Settings.cls b/cls/SourceControl/Git/Settings.cls index 84ecc99e..3ac96028 100644 --- a/cls/SourceControl/Git/Settings.cls +++ b/cls/SourceControl/Git/Settings.cls @@ -41,6 +41,9 @@ Property userBasicMode As %String [ InitialExpression = {##class(SourceControl.G /// The system's default mode. If true, the system defaults to basic mode Property systemBasicMode As %Boolean [ InitialExpression = {##class(SourceControl.Git.Utils).SystemBasicMode()} ]; +/// In Basic mode, Sync will merge changes from this remote branch +Property defaultMergeBranch As %String [ InitialExpression = {##class(SourceControl.Git.Utils).DefaultMergeBranch()} ]; + Property Mappings [ MultiDimensional ]; Method %OnNew() As %Status @@ -93,6 +96,7 @@ Method %Save() As %Status set @storage@("settings","percentClassReplace") = ..percentClassReplace set @storage@("settings","settingsUIReadOnly") = ..settingsUIReadOnly set @storage@("settings", "mappedItemsReadOnly") = ..mappedItemsReadOnly + set @storage@("settings", "defaultMergeBranch") = ..defaultMergeBranch set @storage@("settings", "basicMode") = ..systemBasicMode if ..basicMode = "system" { kill @storage@("settings", "user", $username, "basicMode") diff --git a/cls/SourceControl/Git/Utils.cls b/cls/SourceControl/Git/Utils.cls index 196f1e71..f9d9b0c5 100644 --- a/cls/SourceControl/Git/Utils.cls +++ b/cls/SourceControl/Git/Utils.cls @@ -128,6 +128,11 @@ ClassMethod SystemBasicMode() As %Boolean quit $get(@..#Storage@("settings", "basicMode"), 0) } +ClassMethod DefaultMergeBranch() As %String +{ + quit $get(@..#Storage@("settings", "defaultMergeBranch"), "") +} + ClassMethod MappedItemsReadOnly() As %Boolean { quit $get(@..#Storage@("settings", "mappedItemsReadOnly"), 1) @@ -379,6 +384,17 @@ ClassMethod StageAddedFiles() } } +/// Merges the files from the configured branch as part of the Sync operation +ClassMethod MergeDefaultRemoteBranch() +{ + set settings = ##class(SourceControl.Git.Settings).%New() + set defaultMergeBranch = settings.defaultMergeBranch + if defaultMergeBranch '= "" { + do ..RunGitWithArgs(.errStream, .outStream, "rebase", defaultMergeBranch) + do ..PrintStreams(errStream, outStream) + } +} + /// Converts the DynamicArray into a list and calls the SourceControl.Git.Change RemoveUncommitted method on the newly created list ClassMethod ClearUncommitted(filesWithActions) As %Status { @@ -403,6 +419,7 @@ ClassMethod Sync(Msg As %String) As %Status } else { do ..Fetch() do ..Pull() + do ..DefaultMergeBranch() do ..SyncCommit(Msg) do ..Push() } diff --git a/csp/gitprojectsettings.csp b/csp/gitprojectsettings.csp index e3b44965..50e91655 100644 --- a/csp/gitprojectsettings.csp +++ b/csp/gitprojectsettings.csp @@ -80,7 +80,7 @@ body { set $Property(settings,param) = $Get(%request.Data(param,1)) } if ('settings.settingsUIReadOnly) { - for param="gitBinPath","namespaceTemp","privateKeyFile","pullEventClass","percentClassReplace" { + for param="gitBinPath","namespaceTemp","privateKeyFile","pullEventClass","percentClassReplace", "defaultMergeBranch" { set $Property(settings,param) = $Get(%request.Data(param,1)) } @@ -308,6 +308,13 @@ body { + +
+ +
+ +
+
From b3580fb2731784f2464882f44284c4e185e395d5 Mon Sep 17 00:00:00 2001 From: isc-hwojnick Date: Mon, 24 Jun 2024 09:40:53 -0400 Subject: [PATCH 2/6] commiting before checkout another branch --- cls/SourceControl/Git/Utils.cls | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cls/SourceControl/Git/Utils.cls b/cls/SourceControl/Git/Utils.cls index f9d9b0c5..64135ff5 100644 --- a/cls/SourceControl/Git/Utils.cls +++ b/cls/SourceControl/Git/Utils.cls @@ -419,7 +419,7 @@ ClassMethod Sync(Msg As %String) As %Status } else { do ..Fetch() do ..Pull() - do ..DefaultMergeBranch() + do ..MergeDefaultMergeBranch() do ..SyncCommit(Msg) do ..Push() } From d407e35eeb8d46c79e92070660496e1334197720 Mon Sep 17 00:00:00 2001 From: isc-hwojnick Date: Mon, 24 Jun 2024 13:43:20 -0400 Subject: [PATCH 3/6] now commits before merge/rebase --- cls/SourceControl/Git/Utils.cls | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cls/SourceControl/Git/Utils.cls b/cls/SourceControl/Git/Utils.cls index 64135ff5..99a84037 100644 --- a/cls/SourceControl/Git/Utils.cls +++ b/cls/SourceControl/Git/Utils.cls @@ -419,8 +419,8 @@ ClassMethod Sync(Msg As %String) As %Status } else { do ..Fetch() do ..Pull() - do ..MergeDefaultMergeBranch() do ..SyncCommit(Msg) + do ..MergeDefaultRemoteBranch() do ..Push() } From 1b3401be1253bfbf048fdf6385b6a7ec4133b81f Mon Sep 17 00:00:00 2001 From: isc-hwojnick Date: Tue, 25 Jun 2024 08:49:07 -0400 Subject: [PATCH 4/6] now pushes before merge --- cls/SourceControl/Git/Utils.cls | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/cls/SourceControl/Git/Utils.cls b/cls/SourceControl/Git/Utils.cls index 99a84037..f80d2374 100644 --- a/cls/SourceControl/Git/Utils.cls +++ b/cls/SourceControl/Git/Utils.cls @@ -420,8 +420,9 @@ ClassMethod Sync(Msg As %String) As %Status do ..Fetch() do ..Pull() do ..SyncCommit(Msg) - do ..MergeDefaultRemoteBranch() do ..Push() + do ..MergeDefaultRemoteBranch() + } quit $$$OK From 9cd630839df08c109adbec10beb559789f6a90ff Mon Sep 17 00:00:00 2001 From: isc-hwojnick Date: Tue, 25 Jun 2024 09:43:45 -0400 Subject: [PATCH 5/6] new branch option in basic mode comes from default merge branch --- CHANGELOG.md | 2 ++ cls/SourceControl/Git/Extension.cls | 1 + cls/SourceControl/Git/Utils.cls | 10 ++++++++++ 3 files changed, 13 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index dc070595..67239fab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,6 +17,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Now skips files belonging to other git enabled packages in `##class(SourceControl.Git.Change).RefreshUncommitted()` (#347) - Added a new "Branch" parameter to `##class(SourceControl.Git.PullEventHandler)` (#351) - Command-line utility to do a baseline export of items in a namespace +- 'New Branch' menu option in basic now will create new branches from the configured default merge branch +- Merging back with the default merge branch is now a part of the basic mode's Sync flow ## [2.3.1] - 2024-04-30 diff --git a/cls/SourceControl/Git/Extension.cls b/cls/SourceControl/Git/Extension.cls index 9ef4a125..d62bed75 100644 --- a/cls/SourceControl/Git/Extension.cls +++ b/cls/SourceControl/Git/Extension.cls @@ -125,6 +125,7 @@ Method OnSourceMenuItem(name As %String, ByRef Enabled As %String, ByRef Display set Enabled = $CASE(name, "Status": 1, "GitWebUI" : 1, + "NewBranch": 1, "Sync": 1, "": 1, :-1 diff --git a/cls/SourceControl/Git/Utils.cls b/cls/SourceControl/Git/Utils.cls index f80d2374..d546a241 100644 --- a/cls/SourceControl/Git/Utils.cls +++ b/cls/SourceControl/Git/Utils.cls @@ -340,6 +340,16 @@ ClassMethod Commit(InternalName As %String, Message As %String = "example commit ClassMethod NewBranch(newBranchName As %String) As %Status { + set settings = ##class(SourceControl.Git.Settings).%New() + if (settings.basicMode) && (settings.defaultMergeBranch '= ""){ + do ..RunGitWithArgs(.errStream, .outStream, "checkout", settings.defaultMergeBranch) + do ..PrintStreams(errStream, outStream) + kill errStream, outStream + do ..RunGitWithArgs(.errStream, .outStream, "pull") + do ..PrintStreams(errStream, outStream) + kill errStream, outStream + } + do ..RunGitWithArgs(.errStream, .outStream, "checkout", "-b", newBranchName) do ..PrintStreams(errStream, outStream) quit $$$OK From fee5a7fc37d79f571fd335fcc34daf5a06462c4c Mon Sep 17 00:00:00 2001 From: isc-hwojnick Date: Tue, 25 Jun 2024 10:17:58 -0400 Subject: [PATCH 6/6] now pushes before and after merge --- cls/SourceControl/Git/Utils.cls | 1 + 1 file changed, 1 insertion(+) diff --git a/cls/SourceControl/Git/Utils.cls b/cls/SourceControl/Git/Utils.cls index d546a241..5ed3bf0b 100644 --- a/cls/SourceControl/Git/Utils.cls +++ b/cls/SourceControl/Git/Utils.cls @@ -432,6 +432,7 @@ ClassMethod Sync(Msg As %String) As %Status do ..SyncCommit(Msg) do ..Push() do ..MergeDefaultRemoteBranch() + do ..Push() }