@@ -654,8 +654,8 @@ describe('stash drop', () => {
654654
655655 const stashList = await stash ( { fs, dir, gitdir, op : 'list' } )
656656 expect ( stashList ) . toEqual ( [
657- 'stash@{0}: stash one : 3ca31f1 initial commit' ,
658- 'stash@{1}: stash three : 3ca31f1 initial commit' ,
657+ 'stash@{0}: stash three : 3ca31f1 initial commit' ,
658+ 'stash@{1}: stash one : 3ca31f1 initial commit' ,
659659 ] )
660660 } )
661661} )
@@ -804,12 +804,72 @@ describe('stash pop', () => {
804804
805805 const stashList = await stash ( { fs, dir, gitdir, op : 'list' } )
806806 expect ( stashList ) . toEqual ( [
807- 'stash@{0}: stash one : 3ca31f1 initial commit' ,
808- 'stash@{1}: stash three : 3ca31f1 initial commit' ,
807+ 'stash@{0}: stash three : 3ca31f1 initial commit' ,
808+ 'stash@{1}: stash one : 3ca31f1 initial commit' ,
809809 ] )
810810 const aContent = await fs . read ( `${ dir } /a.txt` )
811811 expect ( aContent . toString ( ) ) . toEqual ( aNewContent ) // make sure the 2nd staged changes are applied
812812 const bContent = await fs . read ( `${ dir } /b.js` )
813813 expect ( bContent . toString ( ) ) . toEqual ( bNewContent ) // make sure the 2nd staged changes are applied
814814 } )
815815} )
816+
817+ describe ( 'stash regression #2138' , ( ) => {
818+ it ( 'should not lose stashes after stash pop followed by stash push' , async ( ) => {
819+ const { fs, dir, gitdir } = await makeFixtureStash ( 'stashRegression' )
820+ await addUserConfig ( fs , dir , gitdir )
821+
822+ // --- stash 1 ---
823+ await fs . write ( dir + '/a.txt' , 'change 1' )
824+ await stash ( { fs, dir, gitdir, message : 'stash 1' , op : 'push' } )
825+ // --- stash 2 ---
826+ await fs . write ( dir + '/a.txt' , 'change 2' )
827+ await stash ( { fs, dir, gitdir, message : 'stash 2' , op : 'push' } )
828+
829+ let stashes = await stash ( { fs, dir, gitdir, op : 'list' } )
830+ expect ( stashes . length ) . toBe ( 2 )
831+
832+ // Pop stash 2
833+ await stash ( { fs, dir, gitdir, op : 'pop' } )
834+
835+ stashes = await stash ( { fs, dir, gitdir, op : 'list' } )
836+ expect ( stashes . length ) . toBe ( 1 )
837+ // Push stash 2 again
838+ await stash ( { fs, dir, gitdir, message : 'stash 2' , op : 'push' } )
839+
840+ stashes = await stash ( { fs, dir, gitdir, op : 'list' } )
841+ expect ( stashes . length ) . toBe ( 2 )
842+ } )
843+
844+ it ( 'stash list order before and after stash drop' , async ( ) => {
845+ const { fs, dir, gitdir } = await makeFixtureStash ( 'stashRegression' )
846+ await addUserConfig ( fs , dir , gitdir )
847+
848+ // --- stash 1 ---
849+ await fs . write ( dir + '/a.txt' , 'change 1' )
850+ await stash ( { fs, dir, gitdir, message : 'stash 1' , op : 'push' } )
851+ // --- stash 2 ---
852+ await fs . write ( dir + '/a.txt' , 'change 2' )
853+ await stash ( { fs, dir, gitdir, message : 'stash 2' , op : 'push' } )
854+
855+ // --- stash 3 ---
856+ await fs . write ( dir + '/a.txt' , 'change 3' )
857+ await stash ( { fs, dir, gitdir, message : 'stash 3' , op : 'push' } )
858+
859+ let stashes = await stash ( { fs, dir, gitdir, op : 'list' } )
860+ expect ( stashes ) . toEqual ( [
861+ 'stash@{0}: stash 3: 3ca31f1 initial commit' ,
862+ 'stash@{1}: stash 2: 3ca31f1 initial commit' ,
863+ 'stash@{2}: stash 1: 3ca31f1 initial commit' ,
864+ ] )
865+
866+ // drop stash 3
867+ await stash ( { fs, dir, gitdir, op : 'drop' } )
868+
869+ stashes = await stash ( { fs, dir, gitdir, op : 'list' } )
870+ expect ( stashes ) . toEqual ( [
871+ 'stash@{0}: stash 2: 3ca31f1 initial commit' ,
872+ 'stash@{1}: stash 1: 3ca31f1 initial commit' ,
873+ ] )
874+ } )
875+ } )
0 commit comments