Skip to content

Commit 3af2686

Browse files
committed
wip
1 parent b20119a commit 3af2686

File tree

3 files changed

+33
-23
lines changed

3 files changed

+33
-23
lines changed

pkg/commands/git_commands/stash.go

Lines changed: 11 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
package git_commands
22

33
import (
4-
"errors"
54
"fmt"
6-
"regexp"
75
"strings"
86

97
"github.com/jesseduffield/lazygit/pkg/commands/loaders"
@@ -32,9 +30,8 @@ func (self *StashCommands) DropNewest() error {
3230
return self.cmd.New("git stash drop").Run()
3331
}
3432

35-
func (self *StashCommands) Drop(index int) (string, error) {
36-
output, _, err := self.cmd.New(fmt.Sprintf("git stash drop stash@{%d}", index)).RunWithOutputs()
37-
return output, err
33+
func (self *StashCommands) Drop(index int) error {
34+
return self.cmd.New(fmt.Sprintf("git stash drop stash@{%d}", index)).Run()
3835
}
3936

4037
func (self *StashCommands) Pop(index int) error {
@@ -58,6 +55,11 @@ func (self *StashCommands) Store(sha string, message string) error {
5855
return self.cmd.New(fmt.Sprintf("git stash store %s", self.cmd.Quote(sha))).Run()
5956
}
6057

58+
func (self *StashCommands) Sha(index int) (string, error) {
59+
sha, _, err := self.cmd.New(fmt.Sprintf("git rev-parse refs/stash@{%d}", index)).DontLog().RunWithOutputs()
60+
return strings.Trim(sha, "\r\n"), err
61+
}
62+
6163
func (self *StashCommands) ShowStashEntryCmdObj(index int) oscommands.ICmdObj {
6264
cmdStr := fmt.Sprintf("git stash show -p --stat --color=%s --unified=%d stash@{%d}", self.UserConfig.Git.Paging.ColorArg, self.UserConfig.Git.DiffContextSize, index)
6365

@@ -123,21 +125,16 @@ func (self *StashCommands) SaveStagedChanges(message string) error {
123125
}
124126

125127
func (self *StashCommands) Rename(index int, message string) error {
126-
output, err := self.Drop(index)
128+
sha, err := self.Sha(index)
127129
if err != nil {
128130
return err
129131
}
130132

131-
// `output` is in the following format:
132-
// Dropped refs/stash@{0} (f0d0f20f2f61ffd6d6bfe0752deffa38845a3edd)
133-
stashShaPattern := regexp.MustCompile(`\(([0-9a-f]+)\)`)
134-
matches := stashShaPattern.FindStringSubmatch(output)
135-
if len(matches) <= 1 {
136-
return errors.New("Output of `git stash drop` is invalid") // Usually this error does not occur
133+
if err := self.Drop(index); err != nil {
134+
return err
137135
}
138-
stashSha := matches[1]
139136

140-
err = self.Store(stashSha, message)
137+
err = self.Store(sha, message)
141138
if err != nil {
142139
return err
143140
}

pkg/commands/git_commands/stash_test.go

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,10 @@ import (
1010

1111
func TestStashDrop(t *testing.T) {
1212
runner := oscommands.NewFakeRunner(t).
13-
ExpectGitArgs([]string{"stash", "drop", "stash@{1}"}, "Dropped refs/stash@{1} (98e9cca532c37c766107093010c72e26f2c24c04)", nil)
13+
ExpectGitArgs([]string{"stash", "drop", "stash@{1}"}, "Dropped refs/stash@{1} (98e9cca532c37c766107093010c72e26f2c24c04)\n", nil)
1414
instance := buildStashCommands(commonDeps{runner: runner})
1515

16-
output, err := instance.Drop(1)
17-
assert.NoError(t, err)
18-
assert.Equal(t, "Dropped refs/stash@{1} (98e9cca532c37c766107093010c72e26f2c24c04)", output)
16+
assert.NoError(t, instance.Drop(1))
1917
runner.CheckForMissingCalls()
2018
}
2119

@@ -88,6 +86,17 @@ func TestStashStore(t *testing.T) {
8886
}
8987
}
9088

89+
func TestStashSha(t *testing.T) {
90+
runner := oscommands.NewFakeRunner(t).
91+
ExpectGitArgs([]string{"rev-parse", "refs/stash@{5}"}, "14d94495194651adfd5f070590df566c11d28243\n", nil)
92+
instance := buildStashCommands(commonDeps{runner: runner})
93+
94+
sha, err := instance.Sha(5)
95+
assert.NoError(t, err)
96+
assert.Equal(t, "14d94495194651adfd5f070590df566c11d28243", sha)
97+
runner.CheckForMissingCalls()
98+
}
99+
91100
func TestStashStashEntryCmdObj(t *testing.T) {
92101
type scenario struct {
93102
testName string
@@ -129,8 +138,9 @@ func TestStashRename(t *testing.T) {
129138
testName string
130139
index int
131140
message string
141+
expectedShaCmd []string
142+
shaResult string
132143
expectedDropCmd []string
133-
dropResult string
134144
expectedStoreCmd []string
135145
}
136146

@@ -139,16 +149,18 @@ func TestStashRename(t *testing.T) {
139149
testName: "Default case",
140150
index: 3,
141151
message: "New message",
152+
expectedShaCmd: []string{"rev-parse", "refs/stash@{3}"},
153+
shaResult: "f0d0f20f2f61ffd6d6bfe0752deffa38845a3edd\n",
142154
expectedDropCmd: []string{"stash", "drop", "stash@{3}"},
143-
dropResult: "Dropped refs/stash@{3} (f0d0f20f2f61ffd6d6bfe0752deffa38845a3edd)\n",
144155
expectedStoreCmd: []string{"stash", "store", "f0d0f20f2f61ffd6d6bfe0752deffa38845a3edd", "-m", "New message"},
145156
},
146157
{
147158
testName: "Empty message",
148159
index: 4,
149160
message: "",
161+
expectedShaCmd: []string{"rev-parse", "refs/stash@{4}"},
162+
shaResult: "f0d0f20f2f61ffd6d6bfe0752deffa38845a3edd\n",
150163
expectedDropCmd: []string{"stash", "drop", "stash@{4}"},
151-
dropResult: "Dropped refs/stash@{4} (f0d0f20f2f61ffd6d6bfe0752deffa38845a3edd)\n",
152164
expectedStoreCmd: []string{"stash", "store", "f0d0f20f2f61ffd6d6bfe0752deffa38845a3edd"},
153165
},
154166
}
@@ -157,7 +169,8 @@ func TestStashRename(t *testing.T) {
157169
s := s
158170
t.Run(s.testName, func(t *testing.T) {
159171
runner := oscommands.NewFakeRunner(t).
160-
ExpectGitArgs(s.expectedDropCmd, s.dropResult, nil).
172+
ExpectGitArgs(s.expectedShaCmd, s.shaResult, nil).
173+
ExpectGitArgs(s.expectedDropCmd, "", nil).
161174
ExpectGitArgs(s.expectedStoreCmd, "", nil)
162175
instance := buildStashCommands(commonDeps{runner: runner})
163176

pkg/gui/controllers/stash_controller.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ func (self *StashController) handleStashDrop(stashEntry *models.StashEntry) erro
128128
Prompt: self.c.Tr.SureDropStashEntry,
129129
HandleConfirm: func() error {
130130
self.c.LogAction(self.c.Tr.Actions.Stash)
131-
_, err := self.git.Stash.Drop(stashEntry.Index)
131+
err := self.git.Stash.Drop(stashEntry.Index)
132132
_ = self.c.Refresh(types.RefreshOptions{Scope: []types.RefreshableView{types.STASH}})
133133
if err != nil {
134134
return self.c.Error(err)

0 commit comments

Comments
 (0)