Monorepo for Tangled tangled.org
766
fork

Configure Feed

Select the types of activity you want to include in your feed.

knotserver/xrpc: merge-base for combined patch in repo compare

Lewis: May this revision serve well! <lewis@tangled.org>

authored by

Lewis and committed by
Tangled
7ab5e5fc f4d9946e

+22 -3
+4
knotserver/git/cmd.go
··· 40 40 func (g *GitRepo) revParse(extraArgs ...string) ([]byte, error) { 41 41 return g.runGitCmd("rev-parse", extraArgs...) 42 42 } 43 + 44 + func (g *GitRepo) mergeBase(extraArgs ...string) ([]byte, error) { 45 + return g.runGitCmd("merge-base", extraArgs...) 46 + }
+10
knotserver/git/diff.go
··· 77 77 return &nd, nil 78 78 } 79 79 80 + func (g *GitRepo) MergeBase(a, b *object.Commit) (*object.Commit, error) { 81 + out, err := g.mergeBase(a.Hash.String(), b.Hash.String()) 82 + if err != nil { 83 + return nil, fmt.Errorf("merge-base %s %s: %w", a.Hash, b.Hash, err) 84 + } 85 + 86 + hash := plumbing.NewHash(strings.TrimSpace(string(out))) 87 + return g.r.CommitObject(hash) 88 + } 89 + 80 90 func (g *GitRepo) DiffTree(commit1, commit2 *object.Commit) (*types.DiffTree, error) { 81 91 tree1, err := commit1.Tree() 82 92 if err != nil {
+8 -3
knotserver/xrpc/repo_compare.go
··· 76 76 var combinedPatchRaw string 77 77 // we need the combined patch 78 78 if len(formatPatch) >= 2 { 79 - diffTree, err := gr.DiffTree(commit1, commit2) 79 + mergeBaseCommit, err := gr.MergeBase(commit1, commit2) 80 80 if err != nil { 81 81 x.Logger.Error("error comparing revisions", "msg", err.Error()) 82 82 } else { 83 - combinedPatch = diffTree.Diff 84 - combinedPatchRaw = diffTree.Patch 83 + diffTree, err := gr.DiffTree(mergeBaseCommit, commit2) 84 + if err != nil { 85 + x.Logger.Error("error comparing revisions", "msg", err.Error()) 86 + } else { 87 + combinedPatch = diffTree.Diff 88 + combinedPatchRaw = diffTree.Patch 89 + } 85 90 } 86 91 } 87 92