diff --git a/internal/config/config.go b/internal/config/config.go
index 687fe95..e7bb7a1 100644
--- a/internal/config/config.go
+++ b/internal/config/config.go
@@ -9,5 +9,5 @@ type Config struct {
CloneDirectory string // Repository where gir-mirror keep repository
Log log.Config
Interval int // Update interval in minute
- RepoList []git.RepoConfig
+ RepoList []git.Config
}
diff --git a/internal/constant/constants.go b/internal/constant/constants.go
new file mode 100644
index 0000000..0522e19
--- /dev/null
+++ b/internal/constant/constants.go
@@ -0,0 +1,7 @@
+package constant
+
+import "time"
+
+const (
+ HTTPTimeout = 3 * time.Second
+)
diff --git a/internal/cron/start.go b/internal/cron/start.go
index 5726785..5afe1be 100644
--- a/internal/cron/start.go
+++ b/internal/cron/start.go
@@ -18,7 +18,7 @@ func start(duration time.Duration, fn func(), name string) {
}
// Launch all repo update background tasks.
-func Launch(duration time.Duration, config []git.RepoConfig) {
+func Launch(duration time.Duration, config []git.Config) {
var counter int
for _, content := range config {
counter++
diff --git a/internal/git/config.go b/internal/git/config.go
index 0037ce2..3311511 100644
--- a/internal/git/config.go
+++ b/internal/git/config.go
@@ -1,6 +1,6 @@
package git
-type RepoConfig struct {
+type Config struct {
URL string // Source url
FullPath string // Full clone directory
Name string // Name of clone (directory name)
diff --git a/internal/git/clone.go b/internal/git/git.go
similarity index 76%
rename from internal/git/clone.go
rename to internal/git/git.go
index 8a618f4..c71e382 100644
--- a/internal/git/clone.go
+++ b/internal/git/git.go
@@ -8,11 +8,13 @@ import (
"git.gnous.eu/ada/spiegel/internal/utils"
goGit "github.com/go-git/go-git/v5"
+ "github.com/go-git/go-git/v5/plumbing/serverinfo"
"github.com/go-git/go-git/v5/plumbing/transport/ssh"
+ "github.com/go-git/go-git/v5/storage/filesystem"
"github.com/sirupsen/logrus"
)
-func StartClone(repoList []RepoConfig) {
+func StartClone(repoList []Config) {
logrus.Debug("Start first repository clone")
for _, content := range repoList {
_, err := os.Stat(content.FullPath)
@@ -22,7 +24,7 @@ func StartClone(repoList []RepoConfig) {
}
}
-func (c RepoConfig) fullClone() {
+func (c Config) fullClone() {
logrus.Debug("Clone ", c.Name, "...")
logger := logrus.New()
w := logger.Writer()
@@ -66,9 +68,14 @@ func (c RepoConfig) fullClone() {
if err != nil {
logrus.Error(err)
}
+
+ err = c.UpdateInfo()
+ if err != nil {
+ logrus.Error(err)
+ }
}
-func (c RepoConfig) Update() {
+func (c Config) Update() {
repo, err := goGit.PlainOpen(c.FullPath)
if err != nil {
logrus.Error(err)
@@ -117,4 +124,23 @@ func (c RepoConfig) Update() {
logrus.Error(err)
}
}
+
+ err = c.UpdateInfo()
+ if err != nil {
+ logrus.Error(err)
+ }
+}
+
+func (c Config) UpdateInfo() error {
+ r, err := goGit.PlainOpen(c.FullPath)
+ if err != nil {
+ return err
+ }
+
+ err = serverinfo.UpdateServerInfo(r.Storer, r.Storer.(*filesystem.Storage).Filesystem()) //nolint: forcetypeassert
+ if err != nil {
+ return err
+ }
+
+ return nil
}
diff --git a/internal/router/init.go b/internal/router/init.go
new file mode 100644
index 0000000..2f2fb8b
--- /dev/null
+++ b/internal/router/init.go
@@ -0,0 +1,29 @@
+package router
+
+import (
+ "net/http"
+
+ "git.gnous.eu/ada/spiegel/internal/constant"
+ "github.com/sirupsen/logrus"
+)
+
+type Config struct {
+ Listen string
+ Archive string
+}
+
+func (c Config) Router() {
+ mux := http.NewServeMux()
+ fs := http.FileServer(http.Dir(c.Archive))
+ mux.Handle("/git/", http.StripPrefix("/git/", fs))
+
+ server := &http.Server{
+ Addr: c.Listen,
+ Handler: mux,
+ ReadHeaderTimeout: constant.HTTPTimeout,
+ }
+
+ logrus.Info("HTTP listen on :5000")
+
+ logrus.Fatal(server.ListenAndServe())
+}
diff --git a/main.go b/main.go
index 6fccab8..2c0d127 100644
--- a/main.go
+++ b/main.go
@@ -9,6 +9,7 @@ import (
"git.gnous.eu/ada/spiegel/internal/config"
"git.gnous.eu/ada/spiegel/internal/cron"
"git.gnous.eu/ada/spiegel/internal/git"
+ "git.gnous.eu/ada/spiegel/internal/router"
"github.com/sirupsen/logrus"
)
@@ -38,6 +39,9 @@ func main() {
logrus.Info("Config loaded")
logrus.Debug("Config: ", initConfig)
+ routerConfig := router.Config{Listen: ":3000", Archive: initConfig.CloneDirectory}
+ go routerConfig.Router()
+
git.StartClone(initConfig.RepoList)
duration := time.Duration(initConfig.Interval) * time.Minute