aboutsummaryrefslogtreecommitdiff
path: root/repository
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-07 18:09:20 +0800
committerGravatar Runxi Yu2026-03-07 18:17:54 +0800
commite667c3c52a535ee67fe895bb0240fbad6e920087 (patch)
tree0815f7cc9b2c4a06d00722bce4c3ac57c515288b /repository
parentreceivepack: Connect protocol with service (diff)
signatureNo signature
refstore/files: Accept timeout instead of reading from config
And split things up again.
Diffstat (limited to 'repository')
-rw-r--r--repository/open.go2
-rw-r--r--repository/refs.go5
-rw-r--r--repository/refs_timeout.go16
3 files changed, 20 insertions, 3 deletions
diff --git a/repository/open.go b/repository/open.go
index 3789cc43..f1bff5da 100644
--- a/repository/open.go
+++ b/repository/open.go
@@ -36,7 +36,7 @@ func Open(root *os.Root) (repo *Repository, err error) {
repo.objects = objects
repo.objectsLooseForWritingOnly = objectsLooseForWritingOnly
- refs, err := openRefStore(root, algo)
+ refs, err := openRefStore(root, algo, detectPackedRefsTimeout(cfg))
if err != nil {
return nil, err
}
diff --git a/repository/refs.go b/repository/refs.go
index 7c978ed3..a695252d 100644
--- a/repository/refs.go
+++ b/repository/refs.go
@@ -3,6 +3,7 @@ package repository
import (
"fmt"
"os"
+ "time"
"codeberg.org/lindenii/furgit/objectid"
"codeberg.org/lindenii/furgit/refstore"
@@ -10,13 +11,13 @@ import (
)
//nolint:ireturn
-func openRefStore(root *os.Root, algo objectid.Algorithm) (out refstore.ReadingStore, err error) {
+func openRefStore(root *os.Root, algo objectid.Algorithm, packedRefsTimeout time.Duration) (out refstore.ReadingStore, err error) {
refRoot, err := root.OpenRoot(".")
if err != nil {
return nil, fmt.Errorf("repository: open root for refs: %w", err)
}
- store, err := reffiles.New(refRoot, algo)
+ store, err := reffiles.New(refRoot, algo, packedRefsTimeout)
if err != nil {
_ = refRoot.Close()
diff --git a/repository/refs_timeout.go b/repository/refs_timeout.go
new file mode 100644
index 00000000..275613ba
--- /dev/null
+++ b/repository/refs_timeout.go
@@ -0,0 +1,16 @@
+package repository
+
+import (
+ "time"
+
+ "codeberg.org/lindenii/furgit/config"
+)
+
+func detectPackedRefsTimeout(cfg *config.Config) time.Duration {
+ timeoutValue, err := cfg.Lookup("core", "", "packedrefstimeout").Int()
+ if err != nil {
+ return time.Second
+ }
+
+ return time.Duration(timeoutValue) * time.Millisecond
+}