aboutsummaryrefslogtreecommitdiff
path: root/pkg/config
diff options
context:
space:
mode:
authorGabriel A. Giovanini <mail@gabrielgio.me>2025-02-06 23:32:18 +0100
committerGabriel A. Giovanini <mail@gabrielgio.me>2025-02-06 23:32:18 +0100
commite8265117372cf262ce7cb4f6ce3b61f19373aee6 (patch)
treeeee905d4e0697cf3cb057d9d703e26825941ec83 /pkg/config
parent77f5ad1047dc2ae72cd616dc2acc839ea38d881f (diff)
downloadcerrado-e8265117372cf262ce7cb4f6ce3b61f19373aee6.tar.gz
cerrado-e8265117372cf262ce7cb4f6ce3b61f19373aee6.tar.bz2
cerrado-e8265117372cf262ce7cb4f6ce3b61f19373aee6.zip
feat: Add configuration for ordering repo list
Now it is possible to order the list by; unordered, alphabetical and last commit both ascendent and descendent.
Diffstat (limited to 'pkg/config')
-rw-r--r--pkg/config/config.go49
1 files changed, 49 insertions, 0 deletions
diff --git a/pkg/config/config.go b/pkg/config/config.go
index 1ad5108..60a3444 100644
--- a/pkg/config/config.go
+++ b/pkg/config/config.go
@@ -4,6 +4,7 @@ import (
"errors"
"fmt"
"io"
+ "log/slog"
"os"
"path"
"path/filepath"
@@ -19,6 +20,16 @@ var (
ErrInvalidProperty = errors.New("Invalid property")
)
+type OrderBy int
+
+const (
+ Unordered OrderBy = iota
+ AlphabeticalAsc
+ AlphabeticalDesc
+ LastCommitAsc
+ LastCommitDesc
+)
+
type (
// scan represents piece of the scan from the configuration file.
@@ -36,6 +47,7 @@ type (
Passphrase string
SyntaxHighlight string
AESKey string
+ OrderBy string
Repositories []*GitRepositoryConfiguration
}
@@ -58,6 +70,7 @@ type (
passphrase []byte
aesKey []byte
syntaxHighlight string
+ orderBy OrderBy
repositories []*GitRepositoryConfiguration
}
)
@@ -80,6 +93,7 @@ func LoadConfigurationRepository(configPath string) (*ConfigurationRepository, e
repositories: config.Repositories,
rootReadme: config.RootReadme,
syntaxHighlight: config.SyntaxHighlight,
+ orderBy: parseOrderBy(config.OrderBy),
}
for _, scan := range config.Scans {
@@ -99,6 +113,10 @@ func (c *ConfigurationRepository) GetRootReadme() string {
return c.rootReadme
}
+func (c *ConfigurationRepository) GetOrderBy() OrderBy {
+ return c.orderBy
+}
+
func (c *ConfigurationRepository) GetSyntaxHighlight() string {
return c.syntaxHighlight
}
@@ -211,6 +229,11 @@ func parse(r io.Reader) (*configuration, error) {
return nil, err
}
+ err = setOrderby(block, &config.OrderBy)
+ if err != nil {
+ return nil, err
+ }
+
err = setRepositories(block, &config.Repositories)
if err != nil {
return nil, err
@@ -316,6 +339,11 @@ func setSyntaxHighlight(block scfg.Block, listenAddr *string) error {
return setString(scanDir, listenAddr)
}
+func setOrderby(block scfg.Block, orderBy *string) error {
+ scanDir := block.Get("order-by")
+ return setString(scanDir, orderBy)
+}
+
func setListenAddr(block scfg.Block, listenAddr *string) error {
scanDir := block.Get("listen-addr")
return setString(scanDir, listenAddr)
@@ -363,3 +391,24 @@ func setString(dir *scfg.Directive, field *string) error {
}
return nil
}
+
+func parseOrderBy(s string) OrderBy {
+ switch s {
+ case "":
+ return LastCommitAsc
+ case "unordered":
+ return Unordered
+ case "alphabetical-asc":
+ return AlphabeticalAsc
+ case "alphabetical-desc":
+ return AlphabeticalDesc
+ case "lastcommit-asc":
+ return LastCommitAsc
+ case "lastcommit-desc":
+ return LastCommitDesc
+ default:
+ slog.Warn("Invalid order-by using default unordered")
+ return LastCommitAsc
+
+ }
+}