From 4cadfdc3a46b7de8141e3cf17c86afa3b503deb0 Mon Sep 17 00:00:00 2001 From: dawn Date: Sat, 18 Jul 2026 08:39:50 +0000 Subject: [PATCH] knotserver/xrpc: expose merge base in repo.compare responses Signed-off-by: dawn --- types/repo.go | 1 + knotserver/xrpc/repo_compare.go | 14 ++++++++------ 2 file(s) changed, 9 insertion(s)(+), 6 deletion(s)(-) diff --git a/types/repo.go b/types/repo.go --- a/types/repo.go +++ b/types/repo.go @@ -32,6 +32,7 @@ type RepoFormatPatchResponse struct { Rev1 string `json:"rev1,omitempty"` Rev2 string `json:"rev2,omitempty"` + MergeBase string `json:"merge_base,omitempty"` FormatPatch []FormatPatch `json:"format_patch,omitempty"` FormatPatchRaw string `json:"patch,omitempty"` CombinedPatch []*gitdiff.File `json:"combined_patch,omitempty"` diff --git a/knotserver/xrpc/repo_compare.go b/knotserver/xrpc/repo_compare.go --- a/knotserver/xrpc/repo_compare.go +++ b/knotserver/xrpc/repo_compare.go @@ -74,12 +74,13 @@ var combinedPatch []*gitdiff.File var combinedPatchRaw string - // we need the combined patch - if len(formatPatch) >= 2 { - mergeBaseCommit, err := gr.MergeBase(commit1, commit2) - if err != nil { - x.Logger.Error("error comparing revisions", "msg", err.Error()) - } else { + var mergeBase string + if mergeBaseCommit, err := gr.MergeBase(commit1, commit2); err != nil { + x.Logger.Error("error finding merge base", "msg", err.Error()) + } else { + mergeBase = mergeBaseCommit.Hash.String() + // nothing to combine with fewer than two patches + if len(formatPatch) >= 2 { diffTree, err := gr.DiffTree(mergeBaseCommit, commit2) if err != nil { x.Logger.Error("error comparing revisions", "msg", err.Error()) @@ -93,6 +94,7 @@ response := types.RepoFormatPatchResponse{ Rev1: commit1.Hash.String(), Rev2: commit2.Hash.String(), + MergeBase: mergeBase, FormatPatch: formatPatch, FormatPatchRaw: rawPatch, CombinedPatch: combinedPatch, -- tangled.sh