@@ -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+
17741787ClassMethod SyncIrisWithRepoThroughDiff (ByRef files ) As %Status
17751788{
17761789 set key = $order (files (" " ))
0 commit comments