From e46dcff2767435630f9f28e4e5ea141309798801 Mon Sep 17 00:00:00 2001 From: Taras Madan Date: Wed, 28 Aug 2024 11:54:59 +0200 Subject: pkg/covermerger: optimize checkouts Every commit checkout takes >3 seconds. Let's optimize this operation to save on large merges. --- pkg/vcs/git.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'pkg/vcs/git.go') diff --git a/pkg/vcs/git.go b/pkg/vcs/git.go index 840a8592e..d1a91404c 100644 --- a/pkg/vcs/git.go +++ b/pkg/vcs/git.go @@ -619,3 +619,19 @@ func (git *git) MergeBases(firstCommit, secondCommit string) ([]*Commit, error) } return ret, nil } + +// CommitExists relies on 'git cat-file -e'. +// If object exists its exit status is 0. +// If object doesn't exist its exit status is 1 (not documented). +// Otherwise, the exit status is 128 (not documented). +func (git *git) CommitExists(commit string) (bool, error) { + _, err := git.git("cat-file", "-e", commit) + var vErr *osutil.VerboseError + if errors.As(err, &vErr) && vErr.ExitCode == 1 { + return false, nil + } + if err != nil { + return false, err + } + return true, nil +} -- cgit mrf-deployment