diff options
author | Daniel Moch <daniel@danielmoch.com> | 2023-11-24 12:29:45 -0500 |
---|---|---|
committer | Daniel Moch <daniel@danielmoch.com> | 2023-11-27 19:36:37 -0500 |
commit | aebf868d2a557384539cf91476d21901ab378643 (patch) | |
tree | f4d0ef4af91cf439c9020408179dd7e22f05c9c1 /plumbing | |
parent | fecea417bfc18648757a1bde30ca384548b55197 (diff) | |
download | go-git-aebf868d2a557384539cf91476d21901ab378643.tar.gz |
plumbing: object, enable renames in getFileStatsFromFilePatches
Diff has handled renames by default since 2020. This change sets Name
for the renamed file in a manner similar to diffstat.
Diffstat (limited to 'plumbing')
-rw-r--r-- | plumbing/object/patch.go | 4 | ||||
-rw-r--r-- | plumbing/object/patch_stats_test.go | 54 |
2 files changed, 56 insertions, 2 deletions
diff --git a/plumbing/object/patch.go b/plumbing/object/patch.go index 06bc35b..dd8fef4 100644 --- a/plumbing/object/patch.go +++ b/plumbing/object/patch.go @@ -317,8 +317,8 @@ func getFileStatsFromFilePatches(filePatches []fdiff.FilePatch) FileStats { // File is deleted. cs.Name = from.Path() } else if from.Path() != to.Path() { - // File is renamed. Not supported. - // cs.Name = fmt.Sprintf("%s => %s", from.Path(), to.Path()) + // File is renamed. + cs.Name = fmt.Sprintf("%s => %s", from.Path(), to.Path()) } else { cs.Name = from.Path() } diff --git a/plumbing/object/patch_stats_test.go b/plumbing/object/patch_stats_test.go new file mode 100644 index 0000000..f393c30 --- /dev/null +++ b/plumbing/object/patch_stats_test.go @@ -0,0 +1,54 @@ +package object_test + +import ( + "time" + + "github.com/go-git/go-billy/v5/memfs" + "github.com/go-git/go-billy/v5/util" + "github.com/go-git/go-git/v5" + "github.com/go-git/go-git/v5/plumbing/object" + "github.com/go-git/go-git/v5/storage/memory" + + fixtures "github.com/go-git/go-git-fixtures/v4" + . "gopkg.in/check.v1" +) + +type PatchStatsSuite struct { + fixtures.Suite +} + +var _ = Suite(&PatchStatsSuite{}) + +func (s *PatchStatsSuite) TestStatsWithRename(c *C) { + cm := &git.CommitOptions{ + Author: &object.Signature{Name: "Foo", Email: "foo@example.local", When: time.Now()}, + } + + fs := memfs.New() + r, err := git.Init(memory.NewStorage(), fs) + c.Assert(err, IsNil) + + w, err := r.Worktree() + c.Assert(err, IsNil) + + util.WriteFile(fs, "foo", []byte("foo\nbar\n"), 0644) + + _, err = w.Add("foo") + c.Assert(err, IsNil) + + _, err = w.Commit("foo\n", cm) + c.Assert(err, IsNil) + + _, err = w.Move("foo", "bar") + c.Assert(err, IsNil) + + hash, err := w.Commit("rename foo to bar", cm) + c.Assert(err, IsNil) + + commit, err := r.CommitObject(hash) + c.Assert(err, IsNil) + + fileStats, err := commit.Stats() + c.Assert(err, IsNil) + c.Assert(fileStats[0].Name, Equals, "foo => bar") +} |