Skip to content

Commit de8670d

Browse files
committed
perf: using strings.HasPrefix instead or regexp to detect if tag belongs to a projects, improved commitContainsProjectFiles
1 parent fff0776 commit de8670d

File tree

1 file changed

+11
-26
lines changed

1 file changed

+11
-26
lines changed

internal/parser/parser.go

+11-26
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,6 @@ func (p *Parser) ParseHistory(commits []*object.Commit, latestSemver *semver.Ver
246246
}
247247

248248
releaseType, ok := rulesMap[commitType]
249-
250249
if !ok {
251250
continue
252251
}
@@ -273,6 +272,7 @@ func (p *Parser) ParseHistory(commits []*object.Commit, latestSemver *semver.Ver
273272
// among all tags.
274273
func (p *Parser) FetchLatestSemverTag(repository *git.Repository, project monorepo.Project) (*object.Tag, error) {
275274
p.mu.Lock()
275+
defer p.mu.Unlock()
276276

277277
tags, err := repository.TagObjects()
278278
if err != nil {
@@ -289,15 +289,8 @@ func (p *Parser) FetchLatestSemverTag(repository *git.Repository, project monore
289289
return nil
290290
}
291291

292-
if project.Name != "" {
293-
matchProjectTagFormat, err := regexp.MatchString(fmt.Sprintf(`^%s\-.*`, project.Name), tag.Name)
294-
if err != nil {
295-
return err
296-
}
297-
298-
if !matchProjectTagFormat {
299-
return nil
300-
}
292+
if project.Name != "" && !strings.HasPrefix(tag.Name, project.Name+"-") {
293+
return nil
301294
}
302295

303296
currentSemver, err := semver.NewFromString(tag.Name)
@@ -311,11 +304,11 @@ func (p *Parser) FetchLatestSemverTag(repository *git.Repository, project monore
311304
}
312305
return nil
313306
})
307+
314308
if err != nil {
315309
return nil, fmt.Errorf("looping over tags: %w", err)
316310
}
317311

318-
p.mu.Unlock()
319312
return latestTag, nil
320313
}
321314

@@ -350,25 +343,16 @@ func (p *Parser) checkoutBranch(repository *git.Repository) error {
350343
// commitContainsProjectFiles checks if a given commit changes contain at least one file whose path belongs to the
351344
// given project's path.
352345
func commitContainsProjectFiles(commit *object.Commit, projectPath string) (bool, error) {
353-
regex, err := regexp.Compile(fmt.Sprintf("^%s", projectPath))
354-
if err != nil {
355-
return false, fmt.Errorf("compiling project's path regexp: %w", err)
356-
}
357-
358346
commitTree, err := commit.Tree()
359347
if err != nil {
360348
return false, fmt.Errorf("getting commit tree: %w", err)
361349
}
362350

363-
parentCommit := commit.Parents()
364-
parentTree := &object.Tree{}
365-
if parentCommit != nil {
366-
parent, err := parentCommit.Next()
367-
if err == nil {
368-
parentTree, err = parent.Tree()
369-
if err != nil {
370-
return false, fmt.Errorf("getting parent tree: %w", err)
371-
}
351+
var parentTree *object.Tree
352+
if parent, err := commit.Parent(0); err == nil {
353+
parentTree, err = parent.Tree()
354+
if err != nil {
355+
return false, fmt.Errorf("getting parent tree: %w", err)
372356
}
373357
}
374358

@@ -378,7 +362,8 @@ func commitContainsProjectFiles(commit *object.Commit, projectPath string) (bool
378362
}
379363

380364
for _, change := range changes {
381-
if regex.MatchString(filepath.Dir(change.To.Name)) {
365+
dir := filepath.Dir(change.To.Name)
366+
if strings.HasPrefix(dir, projectPath) {
382367
return true, nil
383368
}
384369
}

0 commit comments

Comments
 (0)