Skip to content

Commit c6752f8

Browse files
committed
fix: sync rebase properly with diff
1 parent c82de15 commit c6752f8

File tree

2 files changed

+41
-27
lines changed

2 files changed

+41
-27
lines changed

cls/SourceControl/Git/Util/ProductionConflictResolver.cls

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,12 +90,13 @@ Method Resolve() [ Private ]
9090
if (code '= 0) {
9191
$$$ThrowStatus($$$ERROR($$$GeneralError,"git commit reported failure"))
9292
}
93+
9394
set code = ##class(SourceControl.Git.Utils).RunGitWithArgs(.errStream, .outStream, "rebase", "--continue")
9495
if (code '= 0) {
9596
$$$ThrowStatus($$$ERROR($$$GeneralError,"git rebase --continue reported failure"))
9697
}
9798

98-
Set ..resolved = 1
99+
set ..resolved = 1
99100
}
100101

101102
/// Non-private to support unit testing

cls/SourceControl/Git/Utils.cls

Lines changed: 39 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -436,6 +436,9 @@ ClassMethod MergeDefaultRemoteBranch(Output alert As %String = "") As %Boolean
436436
do ..RunGitWithArgs(.errStream, .outStream, "fetch", "origin", defaultMergeBranch_":"_defaultMergeBranch)
437437
do ..PrintStreams(errStream, outStream)
438438

439+
do ..RunGitWithArgs(,.outStream, "rev-parse", defaultMergeBranch)
440+
set startSha = outStream.ReadLine()
441+
439442
// Start a transaction so code changes can be rolled back
440443
set initTLevel = $TLevel
441444
try {
@@ -461,7 +464,11 @@ ClassMethod MergeDefaultRemoteBranch(Output alert As %String = "") As %Boolean
461464
while $TLevel > initTLevel {
462465
TROLLBACK 1
463466
}
464-
if 'rebased {
467+
if rebased {
468+
do ##class(SourceControl.Git.Utils).RunGitWithArgs(.errStream, .outStream, "diff", startSha, "HEAD", "--name-status")
469+
do ##class(SourceControl.Git.Utils).ParseDiffStream(outStream,,.finalFileSet)
470+
do ##class(SourceControl.Git.Utils).SyncIrisWithRepoThroughDiff(.finalFileSet)
471+
} else {
465472
do ..RunGitCommand("rebase",.errStream, .outStream,"--abort")
466473
do ..PrintStreams(errStream, outStream)
467474
set alert = "WARNING: Remote branch '"_defaultMergeBranch_"' could not be merged due to conflicts. Changes have been pushed to '"_..GetCurrentBranch()_"' and must be resolved in your git remote. See log for more details."
@@ -1668,29 +1675,7 @@ ClassMethod RunGitCommandWithInput(command As %String, inFile As %String = "", O
16681675
do ..RunGitCommand("fetch", .errorStream, .outputStream)
16691676
kill errorStream, outputStream
16701677
do ##class(SourceControl.Git.Utils).RunGitCommandWithInput("diff",,.errorStream,.outputStream, diffBase_$Case(diffCompare,"":"",:"..")_diffCompare, "--name-status")
1671-
while (outputStream.AtEnd = 0) {
1672-
set file = outputStream.ReadLine()
1673-
set modification = ##class(SourceControl.Git.Modification).%New()
1674-
set modification.changeType = $piece(file, $c(9), 1)
1675-
1676-
set modification.externalName = $zstrip($piece(file, $c(9), 2),"<W")
1677-
if $extract(modification.changeType) = "R" {
1678-
set modification.changeType = "D"
1679-
set modification.internalName = ##class(SourceControl.Git.Utils).NameToInternalName(modification.externalName,,0)
1680-
set files($increment(files)) = modification
1681-
set modification = ##class(SourceControl.Git.Modification).%New()
1682-
set modification.changeType = "A"
1683-
set modification.internalName = ""
1684-
set modification.externalName = $zstrip($piece(file, $c(9), 3),"<W")
1685-
} elseif (modification.changeType '= "A"){
1686-
set modification.internalName = ##class(SourceControl.Git.Utils).NameToInternalName(modification.externalName,,0)
1687-
} else {
1688-
set modification.internalName = ""
1689-
}
1690-
set files($increment(files)) = modification
1691-
write !, ?4, modification.changeType, ?4, modification.internalName, ?4 , modification.externalName
1692-
}
1693-
1678+
do ..ParseDiffStream(outputStream,,.files)
16941679
}
16951680

16961681
set outLog = ##class(%Library.File).TempFilename()
@@ -1735,8 +1720,8 @@ ClassMethod SyncIrisWithRepoThroughCommand(ByRef outStream) As %Status
17351720
set deletedFiles = ""
17361721
set addedFiles = ""
17371722
set files = ""
1723+
do outStream.Rewind()
17381724
while (outStream.AtEnd = 0) {
1739-
17401725
set line = outStream.ReadLine()
17411726
set lineStart = $piece(line, " ", 2)
17421727
if (lineStart = "delete") || (lineStart = "create") {
@@ -1759,7 +1744,6 @@ ClassMethod SyncIrisWithRepoThroughCommand(ByRef outStream) As %Status
17591744
set deletedFiles = $extract(deletedFiles, 2, *)
17601745
set addedFiles = $extract(addedFiles, 2, *)
17611746

1762-
17631747
if (deletedFiles '= ""){
17641748
set sc = ##class(SourceControl.Git.Utils).RemoveFromServerSideSourceControl(deletedFiles)
17651749
}
@@ -1771,6 +1755,35 @@ ClassMethod SyncIrisWithRepoThroughCommand(ByRef outStream) As %Status
17711755
quit ##class(SourceControl.Git.PullEventHandler).ForModifications(.files)
17721756
}
17731757

1758+
ClassMethod ParseDiffStream(stream As %Stream.Object, verbose As %Boolean = 1, Output files)
1759+
{
1760+
kill files
1761+
while (stream.AtEnd = 0) {
1762+
set file = stream.ReadLine()
1763+
set modification = ##class(SourceControl.Git.Modification).%New()
1764+
set modification.changeType = $piece(file, $c(9), 1)
1765+
1766+
set modification.externalName = $zstrip($piece(file, $c(9), 2),"<W")
1767+
if $extract(modification.changeType) = "R" {
1768+
set modification.changeType = "D"
1769+
set modification.internalName = ##class(SourceControl.Git.Utils).NameToInternalName(modification.externalName,,0)
1770+
set files($increment(files)) = modification
1771+
set modification = ##class(SourceControl.Git.Modification).%New()
1772+
set modification.changeType = "A"
1773+
set modification.internalName = ""
1774+
set modification.externalName = $zstrip($piece(file, $c(9), 3),"<W")
1775+
} elseif (modification.changeType '= "A"){
1776+
set modification.internalName = ##class(SourceControl.Git.Utils).NameToInternalName(modification.externalName,,0)
1777+
} else {
1778+
set modification.internalName = ""
1779+
}
1780+
set files($increment(files)) = modification
1781+
if verbose {
1782+
write !, " ", modification.changeType, " ", modification.internalName, " ", modification.externalName
1783+
}
1784+
}
1785+
}
1786+
17741787
ClassMethod SyncIrisWithRepoThroughDiff(ByRef files) As %Status
17751788
{
17761789
set key = $order(files(""))

0 commit comments

Comments
 (0)