From 1065a3c4c420a13c98ddc89d57b2fd67620607b6 Mon Sep 17 00:00:00 2001
From: dannylongeuay <dannylongeuay@yahoo.com>
Date: Sat, 27 Apr 2024 14:12:13 -0700
Subject: [PATCH] refactor(*): :recycle: more robust log order config

---
 pkg/provider/git.go      |  36 +++++++++++++++++++++++-------------
 pkg/provider/git_test.go |   2 +-
 test/gitea/gitea.db      | Bin 1257472 -> 1363968 bytes
 3 files changed, 24 insertions(+), 14 deletions(-)

diff --git a/pkg/provider/git.go b/pkg/provider/git.go
index 873da07..d3adc04 100644
--- a/pkg/provider/git.go
+++ b/pkg/provider/git.go
@@ -22,16 +22,17 @@ import (
 var PVERSION = "dev"
 
 type Repository struct {
-	defaultBranch         string
-	taggerName            string
-	taggerEmail           string
-	remoteName            string
-	auth                  transport.AuthMethod
-	repo                  *git.Repository
-	pushOptions           map[string]string
-	orderLogsByCommitTime bool
+	defaultBranch string
+	taggerName    string
+	taggerEmail   string
+	remoteName    string
+	auth          transport.AuthMethod
+	repo          *git.Repository
+	pushOptions   map[string]string
+	logOrder      git.LogOrder
 }
 
+//gocyclo:ignore
 func (repo *Repository) Init(config map[string]string) error {
 	repo.defaultBranch = config["default_branch"]
 	if repo.defaultBranch == "" {
@@ -79,6 +80,19 @@ func (repo *Repository) Init(config map[string]string) error {
 		}
 	}
 
+	switch config["log_order"] {
+	case "ctime":
+		repo.logOrder = git.LogOrderCommitterTime
+	case "dfs":
+		repo.logOrder = git.LogOrderDFS
+	case "dfs_post":
+		repo.logOrder = git.LogOrderDFSPost
+	case "bfs": // intentionally correcting to bfs instead of the bsf typo
+		repo.logOrder = git.LogOrderBSF
+	default:
+		repo.logOrder = git.LogOrderDefault
+	}
+
 	gitPath := config["git_path"]
 	if gitPath == "" {
 		gitPath = "."
@@ -108,13 +122,9 @@ func (repo *Repository) GetCommits(fromSha, toSha string) ([]*semrel.RawCommit,
 		return nil, err
 	}
 
-	logOrder := git.LogOrderDefault
-	if repo.orderLogsByCommitTime {
-		logOrder = git.LogOrderCommitterTime
-	}
 	commits, err := repo.repo.Log(&git.LogOptions{
 		From:  *toHash,
-		Order: logOrder,
+		Order: repo.logOrder,
 	})
 	if err != nil {
 		return nil, err
diff --git a/pkg/provider/git_test.go b/pkg/provider/git_test.go
index 8e9f66d..16ad0ef 100644
--- a/pkg/provider/git_test.go
+++ b/pkg/provider/git_test.go
@@ -226,7 +226,7 @@ func getCommitsNoFFMergeCTime(t *testing.T) {
 	dir, err := os.MkdirTemp("", "provider-git")
 	require.NoError(err)
 	repo, err := cloneRepo(dir, "http://localhost:3000/test/no_ff_merge.git")
-	repo.orderLogsByCommitTime = true
+	repo.logOrder = git.LogOrderCommitterTime
 	require.NoError(err)
 	releases, err := repo.GetReleases("")
 	require.NoError(err)
diff --git a/test/gitea/gitea.db b/test/gitea/gitea.db
index 8d64b0bfaf4c8abdff24e96735ddd259677ac6a0..3c7f933d3c86ee938e383fb5ddc905a25611fa0e 100644
GIT binary patch
delta 28501
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
Oz~UQ8qO74XYXSh+@&7dd

delta 2912
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
J<Ge)^3;;lBocsU)

-- 
GitLab