From 9cd0e4467855d5e2761e4449bfbf2780c367d546 Mon Sep 17 00:00:00 2001
From: Boming Zhang <bomingzh@sjtu.edu.cn>
Date: Sat, 12 Oct 2024 06:57:01 -0400
Subject: [PATCH] refactor(cmd/joj3): split parse msg & parse conf file

---
 cmd/joj3/conf/conf.go | 12 +++---------
 cmd/joj3/main.go      |  9 ++++++++-
 2 files changed, 11 insertions(+), 10 deletions(-)

diff --git a/cmd/joj3/conf/conf.go b/cmd/joj3/conf/conf.go
index 87f9878..9c3cd13 100644
--- a/cmd/joj3/conf/conf.go
+++ b/cmd/joj3/conf/conf.go
@@ -144,7 +144,7 @@ func parseConventionalCommit(commit string) (*ConventionalCommit, error) {
 	return cc, nil
 }
 
-func parseConfFile(path string) (conf Conf, err error) {
+func ParseConfFile(path string) (conf Conf, err error) {
 	d := &multiconfig.DefaultLoader{}
 	d.Loader = multiconfig.MultiLoader(
 		&multiconfig.TagLoader{},
@@ -191,7 +191,7 @@ func parseConfFile(path string) (conf Conf, err error) {
 	return
 }
 
-func ParseMsg(confRoot, confName, msg string) (conf Conf, group string, err error) {
+func ParseMsg(confRoot, confName, msg string) (confPath, group string, err error) {
 	slog.Info("parse msg", "msg", msg)
 	conventionalCommit, err := parseConventionalCommit(msg)
 	if err != nil {
@@ -199,7 +199,7 @@ func ParseMsg(confRoot, confName, msg string) (conf Conf, group string, err erro
 	}
 	slog.Info("conventional commit", "commit", conventionalCommit)
 	confRoot = filepath.Clean(confRoot)
-	confPath := filepath.Clean(fmt.Sprintf("%s/%s/%s",
+	confPath = filepath.Clean(fmt.Sprintf("%s/%s/%s",
 		confRoot, conventionalCommit.Scope, confName))
 	relPath, err := filepath.Rel(confRoot, confPath)
 	if err != nil {
@@ -209,11 +209,6 @@ func ParseMsg(confRoot, confName, msg string) (conf Conf, group string, err erro
 		err = fmt.Errorf("invalid scope as path: %s", conventionalCommit.Scope)
 		return
 	}
-	slog.Info("try to load conf", "path", confPath)
-	conf, err = parseConfFile(confPath)
-	if err != nil {
-		return
-	}
 	groupKeywords := []string{"joj"}
 	for _, groupKeyword := range groupKeywords {
 		if strings.Contains(
@@ -222,7 +217,6 @@ func ParseMsg(confRoot, confName, msg string) (conf Conf, group string, err erro
 			break
 		}
 	}
-	slog.Debug("conf loaded", "conf", conf)
 	return
 }
 
diff --git a/cmd/joj3/main.go b/cmd/joj3/main.go
index ed18f0d..a1d4610 100644
--- a/cmd/joj3/main.go
+++ b/cmd/joj3/main.go
@@ -45,7 +45,7 @@ func mainImpl() error {
 			return err
 		}
 	}
-	confObj, group, err := conf.ParseMsg(confRoot, confName, msg)
+	confPath, group, err := conf.ParseMsg(confRoot, confName, msg)
 	if err != nil {
 		slog.Error("parse msg", "error", err)
 		validScopes, scopeErr := conf.ListValidScopes(
@@ -58,6 +58,13 @@ func mainImpl() error {
 			"valid scopes", validScopes)
 		return err
 	}
+	slog.Info("try to load conf", "path", confPath)
+	confObj, err := conf.ParseConfFile(confPath)
+	if err != nil {
+		slog.Error("parse conf", "error", err)
+		return err
+	}
+	slog.Debug("conf loaded", "conf", confObj)
 	if err := setupSlog(confObj.LogPath); err != nil { // after conf is loaded
 		slog.Error("setup slog", "error", err)
 		return err