Skip to content

Commit dad0e3a

Browse files
authored
Merge pull request #31 from rogpeppe/017-fix-undo-bug
gohack undo: restore old replace comment correctly
2 parents 2a6a2af + 32c38d0 commit dad0e3a

File tree

3 files changed

+57
-3
lines changed

3 files changed

+57
-3
lines changed

Diff for: cmdundo.go

+6-3
Original file line numberDiff line numberDiff line change
@@ -74,14 +74,17 @@ func cmdUndo1(modules []string) error {
7474
prevReplace := splitWasComment(comments.Suffix[0].Token)
7575
if prevReplace != nil && prevReplace.Old.Path == r.Old.Path {
7676
// We're popping the old replace statement.
77-
if !r.Syntax.InBlock {
78-
// When we're not in a block, we don't need the "replace" token.
77+
if r.Syntax.InBlock {
78+
// When we're in a block, we don't need the "replace" token.
7979
prevReplace.Syntax.Token = prevReplace.Syntax.Token[1:]
8080
}
8181
// Preserve any before and after comments.
8282
prevReplace.Syntax.Before = r.Syntax.Before
8383
prevReplace.Syntax.After = r.Syntax.After
84-
*r = *prevReplace
84+
r.Old = prevReplace.Old
85+
r.New = prevReplace.New
86+
r.Syntax.Comments.Suffix = prevReplace.Syntax.Comments.Suffix
87+
r.Syntax.Token = prevReplace.Syntax.Token
8588
} else {
8689
// It's not a "was" comment. Just remove it (after this loop so we don't
8790
// interfere with the current range statement).

Diff for: testdata/undo-hack-inblock.txt

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
cd repo
2+
gohack undo
3+
stdout 'dropped gopkg.in/errgo.v2'
4+
5+
grep '^\tgopkg.in/errgo.v2 => github.com/rogpeppe/test2/arble v0.0.0-20181008213029-f6022c873160$' go.mod
6+
7+
-- repo/main.go --
8+
package main
9+
import _ "gopkg.in/errgo.v2"
10+
11+
-- repo/go.mod --
12+
module example.com/repo
13+
14+
require (
15+
gopkg.in/errgo.v2 v2.1.0
16+
rsc.io/sampler v1.3.0
17+
)
18+
19+
replace (
20+
rsc.io/sampler v1.3.0 => rsc.io/sampler v1.2.1
21+
gopkg.in/errgo.v2 => ../foo // was gopkg.in/errgo.v2 => github.com/rogpeppe/test2/arble v0.0.0-20181008213029-f6022c873160
22+
)
23+
24+
-- foo/foo.go --
25+
package foo
26+
27+
-- foo/go.mod --
28+
module example.com/foo
29+

Diff for: testdata/undo-hack.txt

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
cd repo
2+
gohack undo
3+
stdout 'dropped gopkg.in/errgo.v2'
4+
5+
grep '^replace gopkg.in/errgo.v2 => github.com/rogpeppe/test2/arble v0.0.0-20181008213029-f6022c873160$' go.mod
6+
7+
-- repo/main.go --
8+
package main
9+
import _ "gopkg.in/errgo.v2"
10+
11+
-- repo/go.mod --
12+
module example.com/repo
13+
14+
require gopkg.in/errgo.v2 v2.1.0
15+
16+
replace gopkg.in/errgo.v2 => ../foo // was gopkg.in/errgo.v2 => github.com/rogpeppe/test2/arble v0.0.0-20181008213029-f6022c873160
17+
18+
-- foo/foo.go --
19+
package foo
20+
21+
-- foo/go.mod --
22+
module example.com/foo

0 commit comments

Comments
 (0)