@@ -1634,13 +1634,14 @@ private async void StageChanges(List<Models.Change> changes, Models.Change next)
16341634 foreach ( var c in changes )
16351635 paths . Add ( c . Path ) ;
16361636
1637- for ( int i = 0 ; i < count ; i += 10 )
1637+ for ( int i = 0 ; i < count ; i += 32 )
16381638 {
1639- var step = paths . GetRange ( i , Math . Min ( 10 , count - i ) ) ;
1639+ var step = paths . GetRange ( i , Math . Min ( 32 , count - i ) ) ;
16401640 await Task . Run ( ( ) => new Commands . Add ( _repo . FullPath , step ) . Use ( log ) . Exec ( ) ) ;
16411641 }
16421642 }
16431643 log . Complete ( ) ;
1644+
16441645 _repo . MarkWorkingCopyDirtyManually ( ) ;
16451646 _repo . SetWatcherEnabled ( true ) ;
16461647 IsStaging = false ;
@@ -1664,15 +1665,26 @@ private async void UnstageChanges(List<Models.Change> changes, Models.Change nex
16641665 log . AppendLine ( "$ git update-index --index-info " ) ;
16651666 await Task . Run ( ( ) => new Commands . UnstageChangesForAmend ( _repo . FullPath , changes ) . Exec ( ) ) ;
16661667 }
1667- else if ( count == _staged . Count )
1668+ else if ( Native . OS . GitVersion >= Models . GitVersions . RESTORE_WITH_PATHSPECFILE )
16681669 {
1669- await Task . Run ( ( ) => new Commands . Restore ( _repo . FullPath , true ) . Use ( log ) . Exec ( ) ) ;
1670+ var paths = new List < string > ( ) ;
1671+ foreach ( var c in changes )
1672+ {
1673+ paths . Add ( c . Path ) ;
1674+ if ( c . Index == Models . ChangeState . Renamed )
1675+ paths . Add ( c . OriginalPath ) ;
1676+ }
1677+
1678+ var tmpFile = Path . GetTempFileName ( ) ;
1679+ File . WriteAllLines ( tmpFile , paths ) ;
1680+ await Task . Run ( ( ) => new Commands . Restore ( _repo . FullPath , tmpFile , "--staged" ) . Use ( log ) . Exec ( ) ) ;
1681+ File . Delete ( tmpFile ) ;
16701682 }
16711683 else
16721684 {
1673- for ( int i = 0 ; i < count ; i += 10 )
1685+ for ( int i = 0 ; i < count ; i += 32 )
16741686 {
1675- var step = changes . GetRange ( i , Math . Min ( 10 , count - i ) ) ;
1687+ var step = changes . GetRange ( i , Math . Min ( 32 , count - i ) ) ;
16761688 var files = new List < string > ( ) ;
16771689 foreach ( var c in step )
16781690 {
@@ -1685,6 +1697,7 @@ private async void UnstageChanges(List<Models.Change> changes, Models.Change nex
16851697 }
16861698 }
16871699 log . Complete ( ) ;
1700+
16881701 _repo . MarkWorkingCopyDirtyManually ( ) ;
16891702 _repo . SetWatcherEnabled ( true ) ;
16901703 IsUnstaging = false ;
0 commit comments