diff options
author | onee-only <kimww0306@gmail.com> | 2024-04-11 19:47:01 +0900 |
---|---|---|
committer | onee-only <kimww0306@gmail.com> | 2024-04-11 19:47:01 +0900 |
commit | 66592e82ac5b729f19c6411c699b3ada85ef68bd (patch) | |
tree | df314f6b73579a21bd03bf6e1cb83037f82d1f77 /worktree_commit.go | |
parent | 3f77e6f0292bdabb6368a42ef0f5fa925ed42f60 (diff) | |
download | go-git-66592e82ac5b729f19c6411c699b3ada85ef68bd.tar.gz |
git: worktree_commit, Modify checking empty commit. Fixes #723
Diffstat (limited to 'worktree_commit.go')
-rw-r--r-- | worktree_commit.go | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/worktree_commit.go b/worktree_commit.go index f62054b..2faf6f0 100644 --- a/worktree_commit.go +++ b/worktree_commit.go @@ -38,8 +38,6 @@ func (w *Worktree) Commit(msg string, opts *CommitOptions) (plumbing.Hash, error } } - var treeHash plumbing.Hash - if opts.Amend { head, err := w.r.Head() if err != nil { @@ -61,16 +59,34 @@ func (w *Worktree) Commit(msg string, opts *CommitOptions) (plumbing.Hash, error return plumbing.ZeroHash, err } + // First handle the case of the first commit in the repository being empty. + if len(opts.Parents) == 0 && len(idx.Entries) == 0 && !opts.AllowEmptyCommits { + return plumbing.ZeroHash, ErrEmptyCommit + } + h := &buildTreeHelper{ fs: w.Filesystem, s: w.r.Storer, } - treeHash, err = h.BuildTree(idx, opts) + treeHash, err := h.BuildTree(idx, opts) if err != nil { return plumbing.ZeroHash, err } + previousTree := plumbing.ZeroHash + if len(opts.Parents) > 0 { + parentCommit, err := w.r.CommitObject(opts.Parents[0]) + if err != nil { + return plumbing.ZeroHash, err + } + previousTree = parentCommit.TreeHash + } + + if treeHash == previousTree && !opts.AllowEmptyCommits { + return plumbing.ZeroHash, ErrEmptyCommit + } + commit, err := w.buildCommitObject(msg, opts, treeHash) if err != nil { return plumbing.ZeroHash, err @@ -175,10 +191,6 @@ type buildTreeHelper struct { // BuildTree builds the tree objects and push its to the storer, the hash // of the root tree is returned. func (h *buildTreeHelper) BuildTree(idx *index.Index, opts *CommitOptions) (plumbing.Hash, error) { - if len(idx.Entries) == 0 && (opts == nil || !opts.AllowEmptyCommits) { - return plumbing.ZeroHash, ErrEmptyCommit - } - const rootNode = "" h.trees = map[string]*object.Tree{rootNode: {}} h.entries = map[string]*object.TreeEntry{} |