From b4d69ec4544981ebd6ac2ef4eb7140fa88dd65d4 Mon Sep 17 00:00:00 2001 From: na-Itms Date: Tue, 25 Jun 2024 23:23:45 +0200 Subject: [PATCH] Handle raw bracketted commit references. --- importer/revisionMapper.go | 14 ++++++++++++++ importer/revisionMapper_test.go | 14 ++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/importer/revisionMapper.go b/importer/revisionMapper.go index 42ada3a..ba75c3a 100644 --- a/importer/revisionMapper.go +++ b/importer/revisionMapper.go @@ -10,6 +10,7 @@ var ( revisionRangeRegexp = regexp.MustCompile(`(^|[^\w]\s*)(r\d+)-(?:r)?(\d+)`) revisionRegexp = regexp.MustCompile(`(^|[^\w]\s*)(r\d+)`) changesetRegexp = regexp.MustCompile(`In (?:\[\d+\])?changeset:"?(\d+)"?:`) + bracketLinkRegexp = regexp.MustCompile(`\[(\d+)\]`) ) func mapRevision(in string, revisionMap map[string]string) string { @@ -56,6 +57,18 @@ func mapChangeset(in string, revisionMap map[string]string) string { }) } +func mapBracketLink(in string, revisionMap map[string]string) string { + return bracketLinkRegexp.ReplaceAllStringFunc(in, func(match string) string { + svnRef := bracketLinkRegexp.ReplaceAllString(match, `r$1`) + if gitRef, found := revisionMap[svnRef]; found == true && gitRef != "" { + return gitRef + } else { + log.Warn("No matching commit for svn revision '%s'", svnRef) + } + return match + }) +} + func MapRevisions(in string, revisionMap map[string]string) string { if revisionMap == nil { return in @@ -64,6 +77,7 @@ func MapRevisions(in string, revisionMap map[string]string) string { out := mapRevisionRange(in, revisionMap) out = mapRevision(out, revisionMap) out = mapChangeset(out, revisionMap) + out = mapBracketLink(out, revisionMap) // Must be done after mapChangeset which may include a bracketted number return out } diff --git a/importer/revisionMapper_test.go b/importer/revisionMapper_test.go index e477bc4..f3ff428 100644 --- a/importer/revisionMapper_test.go +++ b/importer/revisionMapper_test.go @@ -74,6 +74,20 @@ func TestMapRange(t *testing.T) { } } +func TestMapBrackettedCommit(t *testing.T) { + revisionMap := map[string]string{ + "r4485": "deadf00d", + } + input := `In [4485]:` + expected := `In deadf00d:` + + result := importer.MapRevisions(input, revisionMap) + + if result != expected { + t.Errorf("Expected '%s' but got '%s'", expected, result) + } +} + func TestMapCommitReference(t *testing.T) { revisionMap := map[string]string{ "r4485": "deadf00d",