aboutsummaryrefslogtreecommitdiff
path: root/repository/open_config.go
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-04 12:52:14 +0800
committerGravatar Runxi Yu2026-03-04 12:52:14 +0800
commitf9f60fcda1e75ddf9ed34ee5997c5cfbe3388e96 (patch)
treec80bdf5b8a50936f00a79ef750bc70932bf033b7 /repository/open_config.go
parentobjectstore/mix: Separate (diff)
signatureNo signature
repository: Split
Diffstat (limited to 'repository/open_config.go')
-rw-r--r--repository/open_config.go39
1 files changed, 39 insertions, 0 deletions
diff --git a/repository/open_config.go b/repository/open_config.go
new file mode 100644
index 00000000..fcc9793c
--- /dev/null
+++ b/repository/open_config.go
@@ -0,0 +1,39 @@
+package repository
+
+import (
+ "fmt"
+ "os"
+
+ "codeberg.org/lindenii/furgit/config"
+ "codeberg.org/lindenii/furgit/objectid"
+)
+
+func parseRepositoryConfig(root *os.Root) (*config.Config, error) {
+ configFile, err := root.Open("config")
+ if err != nil {
+ return nil, fmt.Errorf("repository: open config: %w", err)
+ }
+
+ defer func() { _ = configFile.Close() }()
+
+ cfg, err := config.ParseConfig(configFile)
+ if err != nil {
+ return nil, fmt.Errorf("repository: parse config: %w", err)
+ }
+
+ return cfg, nil
+}
+
+func detectObjectAlgorithm(cfg *config.Config) (objectid.Algorithm, error) {
+ algoName := cfg.Lookup("extensions", "", "objectformat").Value
+ if algoName == "" {
+ algoName = objectid.AlgorithmSHA1.String()
+ }
+
+ algo, ok := objectid.ParseAlgorithm(algoName)
+ if !ok {
+ return objectid.AlgorithmUnknown, fmt.Errorf("repository: unsupported object format %q", algoName)
+ }
+
+ return algo, nil
+}