knotserver: git: remove MergeBase calculation #231

merged
opened by oppi.li targeting master from push-ovrqrxnpvroz

the rev-list approach to building format-patch internally performs merge-base calculations.

Signed-off-by: oppiliappan me@oppi.li

Changed files
+3 -34
knotserver
types
+1 -24
knotserver/git/diff.go
···
return stdout.String(), &formatPatch[0], nil
}
-
func (g *GitRepo) MergeBase(commit1, commit2 *object.Commit) (*object.Commit, error) {
-
isAncestor, err := commit1.IsAncestor(commit2)
-
if err != nil {
-
return nil, err
-
}
-
-
if isAncestor {
-
return commit1, nil
-
}
-
-
mergeBase, err := commit1.MergeBase(commit2)
-
if err != nil {
-
return nil, err
-
}
-
-
if len(mergeBase) == 0 {
-
return nil, fmt.Errorf("failed to find a merge-base")
-
}
-
-
return mergeBase[0], nil
-
}
-
func (g *GitRepo) ResolveRevision(revStr string) (*object.Commit, error) {
rev, err := g.r.ResolveRevision(plumbing.Revision(revStr))
if err != nil {
···
if err != nil {
continue
}
-
commits = append(commits, obj)
}
···
}
func (g *GitRepo) FormatPatch(base, commit2 *object.Commit) (string, []types.FormatPatch, error) {
-
// get list of commits between commir2 and base
commits, err := g.commitsBetween(commit2, base)
if err != nil {
return "", nil, fmt.Errorf("failed to get commits: %w", err)
···
return stdout.String(), &formatPatch[0], nil
}
func (g *GitRepo) ResolveRevision(revStr string) (*object.Commit, error) {
rev, err := g.r.ResolveRevision(plumbing.Revision(revStr))
if err != nil {
···
if err != nil {
continue
}
commits = append(commits, obj)
}
···
}
func (g *GitRepo) FormatPatch(base, commit2 *object.Commit) (string, []types.FormatPatch, error) {
+
// get list of commits between commit2 and base
commits, err := g.commitsBetween(commit2, base)
if err != nil {
return "", nil, fmt.Errorf("failed to get commits: %w", err)
+1 -9
knotserver/routes.go
···
return
}
-
mergeBase, err := gr.MergeBase(commit1, commit2)
-
if err != nil {
-
l.Error("failed to find merge-base", "msg", err.Error())
-
writeError(w, "failed to calculate diff", http.StatusBadRequest)
-
return
-
}
-
-
rawPatch, formatPatch, err := gr.FormatPatch(mergeBase, commit2)
if err != nil {
l.Error("error comparing revisions", "msg", err.Error())
writeError(w, "error comparing revisions", http.StatusBadRequest)
···
Rev1: commit1.Hash.String(),
Rev2: commit2.Hash.String(),
FormatPatch: formatPatch,
-
MergeBase: mergeBase.Hash.String(),
Patch: rawPatch,
})
return
···
return
}
+
rawPatch, formatPatch, err := gr.FormatPatch(commit1, commit2)
if err != nil {
l.Error("error comparing revisions", "msg", err.Error())
writeError(w, "error comparing revisions", http.StatusBadRequest)
···
Rev1: commit1.Hash.String(),
Rev2: commit2.Hash.String(),
FormatPatch: formatPatch,
Patch: rawPatch,
})
return
+1 -1
types/repo.go
···
Rev1 string `json:"rev1,omitempty"`
Rev2 string `json:"rev2,omitempty"`
FormatPatch []FormatPatch `json:"format_patch,omitempty"`
-
MergeBase string `json:"merge_base,omitempty"`
Patch string `json:"patch,omitempty"`
}
···
Rev1 string `json:"rev1,omitempty"`
Rev2 string `json:"rev2,omitempty"`
FormatPatch []FormatPatch `json:"format_patch,omitempty"`
+
MergeBase string `json:"merge_base,omitempty"` // deprecated
Patch string `json:"patch,omitempty"`
}