fork of go-git with some jj specific features

git: worktree_commit, Fix amend commit to apply changes. Fixes #1024

+17 -16
worktree_commit.go
··· 45 45 if err != nil { 46 46 return plumbing.ZeroHash, err 47 47 } 48 - 49 - t, err := w.r.getTreeFromCommitHash(head.Hash()) 48 + headCommit, err := w.r.CommitObject(head.Hash()) 50 49 if err != nil { 51 50 return plumbing.ZeroHash, err 52 51 } 53 52 54 - treeHash = t.Hash 55 - opts.Parents = []plumbing.Hash{head.Hash()} 56 - } else { 57 - idx, err := w.r.Storer.Index() 58 - if err != nil { 59 - return plumbing.ZeroHash, err 53 + opts.Parents = nil 54 + if len(headCommit.ParentHashes) != 0 { 55 + opts.Parents = []plumbing.Hash{headCommit.ParentHashes[0]} 60 56 } 57 + } 61 58 62 - h := &buildTreeHelper{ 63 - fs: w.Filesystem, 64 - s: w.r.Storer, 65 - } 59 + idx, err := w.r.Storer.Index() 60 + if err != nil { 61 + return plumbing.ZeroHash, err 62 + } 66 63 67 - treeHash, err = h.BuildTree(idx, opts) 68 - if err != nil { 69 - return plumbing.ZeroHash, err 70 - } 64 + h := &buildTreeHelper{ 65 + fs: w.Filesystem, 66 + s: w.r.Storer, 67 + } 68 + 69 + treeHash, err = h.BuildTree(idx, opts) 70 + if err != nil { 71 + return plumbing.ZeroHash, err 71 72 } 72 73 73 74 commit, err := w.buildCommitObject(msg, opts, treeHash)
+22 -1
worktree_commit_test.go
··· 131 131 _, err = w.Commit("foo\n", &CommitOptions{Author: defaultSignature()}) 132 132 c.Assert(err, IsNil) 133 133 134 + util.WriteFile(fs, "bar", []byte("bar"), 0644) 135 + 136 + _, err = w.Add("bar") 137 + c.Assert(err, IsNil) 138 + 134 139 amendedHash, err := w.Commit("bar\n", &CommitOptions{Amend: true}) 135 140 c.Assert(err, IsNil) 136 141 137 142 headRef, err := w.r.Head() 143 + c.Assert(err, IsNil) 144 + 138 145 c.Assert(amendedHash, Equals, headRef.Hash()) 146 + 139 147 commit, err := w.r.CommitObject(headRef.Hash()) 140 148 c.Assert(err, IsNil) 141 149 c.Assert(commit.Message, Equals, "bar\n") 150 + c.Assert(commit.NumParents(), Equals, 1) 142 151 143 - assertStorageStatus(c, s.Repository, 13, 11, 11, amendedHash) 152 + stats, err := commit.Stats() 153 + c.Assert(err, IsNil) 154 + c.Assert(stats, HasLen, 2) 155 + c.Assert(stats[0], Equals, object.FileStat{ 156 + Name: "bar", 157 + Addition: 1, 158 + }) 159 + c.Assert(stats[1], Equals, object.FileStat{ 160 + Name: "foo", 161 + Addition: 1, 162 + }) 163 + 164 + assertStorageStatus(c, s.Repository, 14, 12, 11, amendedHash) 144 165 } 145 166 146 167 func (s *WorktreeSuite) TestAddAndCommitWithSkipStatus(c *C) {