32bdd5b7f7c4483579a043482282a4f9183f5cc3

Author
Ayman Bagabas <ayman.bagabas@gmail.com>
Committer
Ayman Bagabas <ayman.bagabas@gmail.com>
Date

Message

feat(git): UpdateServerInfo on push

git update-server-info generates the repository's refs needed for the
git http server

Diff

 1diff --git a/internal/config/config.go b/internal/config/config.go
 2index 972fe1e4cc2efadea699d971c0bcb96df04828d2..10c9ed3607f220c601d8f585c5df1aeff94733d2 100644
 3--- a/internal/config/config.go
 4+++ b/internal/config/config.go
 5@@ -2,6 +2,7 @@ package config
 6 
 7 import (
 8 	"bytes"
 9+	"log"
10 	"strings"
11 	"sync"
12 	"text/template"
13@@ -130,6 +131,10 @@ func (cfg *Config) Reload() error {
14 	}
15 	for _, r := range cfg.Source.AllRepos() {
16 		name := r.Name()
17+		err = r.UpdateServerInfo()
18+		if err != nil {
19+			log.Printf("error updating server info for %s: %s", name, err)
20+		}
21 		pat := "README*"
22 		rp := ""
23 		for _, rr := range cfg.Repos {
24@@ -186,7 +191,7 @@ func (cfg *Config) createDefaultConfigRepo(yaml string) error {
25 	if err != nil {
26 		return err
27 	}
28-	r, err := rs.GetRepo(cn)
29+	_, err = rs.GetRepo(cn)
30 	if err == git.ErrMissingRepo {
31 		cr, err := rs.InitRepo(cn, true)
32 		if err != nil {
33@@ -234,12 +239,6 @@ func (cfg *Config) createDefaultConfigRepo(yaml string) error {
34 		if err != nil {
35 			return err
36 		}
37-		cmd := exec.Command("git", "update-server-info")
38-		cmd.Dir = filepath.Join(rs.Path, cn)
39-		err = cmd.Run()
40-		if err != nil {
41-			return err
42-		}
43 	} else if err != nil {
44 		return err
45 	}
46diff --git a/internal/config/git.go b/internal/config/git.go
47index e7f39248e5e64e9cec126e44865db02a250eb07c..9e6c8954018e2d889b1ce961fc3f854e6e73cb94 100644
48--- a/internal/config/git.go
49+++ b/internal/config/git.go
50@@ -18,6 +18,15 @@ func (cfg *Config) Push(repo string, pk ssh.PublicKey) {
51 		if cfg.Cfg.Callbacks != nil {
52 			cfg.Cfg.Callbacks.Push(repo)
53 		}
54+		r, err := cfg.Source.GetRepo(repo)
55+		if err != nil {
56+			log.Printf("error getting repo after push: %s", err)
57+			return
58+		}
59+		err = r.UpdateServerInfo()
60+		if err != nil {
61+			log.Printf("error updating server info after push: %s", err)
62+		}
63 	}()
64 }
65 
66diff --git a/internal/git/git.go b/internal/git/git.go
67index 5008477728b9e31f3d636212ca7879bc782910e4..1762d57d7dec95520b44d1871c4c611c7dd56173 100644
68--- a/internal/git/git.go
69+++ b/internal/git/git.go
70@@ -5,6 +5,7 @@ import (
71 	"errors"
72 	"log"
73 	"os"
74+	"os/exec"
75 	"path/filepath"
76 	"sort"
77 	"sync"
78@@ -385,3 +386,9 @@ func (r *Repo) LatestTree(path string) (*object.Tree, error) {
79 	return r.Tree(r.head, path)
80 }
81 
82+// UpdateServerInfo updates the server info for the repository.
83+func (r *Repo) UpdateServerInfo() error {
84+	cmd := exec.Command("git", "update-server-info")
85+	cmd.Dir = r.path
86+	return cmd.Run()
87+}