aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRunxi Yu <me@runxiyu.org>2025-02-17 11:03:53 +0800
committerRunxi Yu <me@runxiyu.org>2025-02-17 11:03:53 +0800
commit894cf6f88a640c2bc796caa3c61e5b7ed787683b (patch)
tree3381b3e2aeb9d740c191edfdf670dd32ad7939c5
parentREADME.md: s/PGP/SSH/ for commit signature verification (diff)
downloadforge-894cf6f88a640c2bc796caa3c61e5b7ed787683b.tar.gz
forge-894cf6f88a640c2bc796caa3c61e5b7ed787683b.tar.zst
forge-894cf6f88a640c2bc796caa3c61e5b7ed787683b.zip
git_init.go: git_bare_init_with_default_hooks
-rw-r--r--config.go7
-rw-r--r--forge.scfg5
-rw-r--r--git_init.go28
3 files changed, 35 insertions, 5 deletions
diff --git a/config.go b/config.go
index 45550d7..13ae7e9 100644
--- a/config.go
+++ b/config.go
@@ -21,9 +21,10 @@ var config struct {
CookieExpiry int `scfg:"cookie_expiry"`
Root string `scfg:"root"`
} `scfg:"http"`
- Git struct {
- HooksSocket string `scfg:"hooks_socket"`
- } `scfg:"git"`
+ Hooks struct {
+ Socket string `scfg:"socket"`
+ Execs string `scfg:"execs"`
+ } `scfg:"hooks"`
SSH struct {
Net string `scfg:"net"`
Addr string `scfg:"addr"`
diff --git a/forge.scfg b/forge.scfg
index 492b9ac..5b3f2d7 100644
--- a/forge.scfg
+++ b/forge.scfg
@@ -21,6 +21,7 @@ db {
conn postgresql:///lindenii-forge?host=/var/run/postgresql
}
-git {
- hooks_socket /var/run/lindenii/forge/hooks.sock
+hooks {
+ socket /var/run/lindenii/forge/hooks.sock
+ execs /usr/libexec/lindenii/forge/hooks
}
diff --git a/git_init.go b/git_init.go
new file mode 100644
index 0000000..466628f
--- /dev/null
+++ b/git_init.go
@@ -0,0 +1,28 @@
+package main
+
+
+import (
+ "github.com/go-git/go-git/v5"
+ git_format_config "github.com/go-git/go-git/v5/plumbing/format/config"
+)
+
+func git_bare_init_with_default_hooks(repo_path string) (err error) {
+ repo, err := git.PlainInit(repo_path, true)
+ if err != nil {
+ return err
+ }
+
+ git_config, err := repo.Config()
+ if err != nil {
+ return err
+ }
+
+ git_config.Raw.SetOption("core", git_format_config.NoSubsection, "hooksPath", config.Hooks.Execs)
+
+ err = repo.SetConfig(git_config)
+ if err != nil {
+ return err
+ }
+
+ return nil
+}