aboutsummaryrefslogtreecommitdiff
path: root/internal/admin/model.go
diff options
context:
space:
mode:
authorMax Resnick <max@ofmax.li>2024-03-19 22:38:28 -0700
committerMax Resnick <max@ofmax.li>2024-03-23 21:31:46 -0700
commitd82129052e1c99a61abce7c34ea83f508737eeb9 (patch)
treee8998eb745d8bc62f44155c7a9233542947b07e7 /internal/admin/model.go
parent20090584fba4f893ea7e6a13057615a3ac2bc9c4 (diff)
downloadgo-git-server-d82129052e1c99a61abce7c34ea83f508737eeb9.tar.gz
feat: handle a fresh start using a mgmt repo
Diffstat (limited to '')
-rw-r--r--internal/admin/model.go48
1 files changed, 39 insertions, 9 deletions
diff --git a/internal/admin/model.go b/internal/admin/model.go
index 2b97c5a..8618d69 100644
--- a/internal/admin/model.go
+++ b/internal/admin/model.go
@@ -30,6 +30,29 @@ const (
GitExportMagic = "git-daemon-export-ok"
// GitWebExportMagic magic filename for web repos
GitWebExportMagic = "git-web-export-ok"
+ mgmtRepoName = "mgmt.git"
+)
+
+var (
+ ErrMgmtRepoNotFound = errors.New("mgmt repo does not exist")
+
+ defaultRepo = &GitRepo{
+ Name: "mgmt",
+ Public: false,
+ Permissions: []*Permission{
+ {
+ Role: "admin",
+ Mode: 1,
+ },
+ },
+ }
+ defaultServerConfig = &ServerRepos{
+ Name: "default config",
+ Version: "v1alpha1",
+ Repos: []*GitRepo{
+ defaultRepo,
+ },
+ }
)
// Action composite type for modes
@@ -81,13 +104,13 @@ func loadFromGit(gitURL, filePath string) ([]byte, error) {
})
if err != nil {
// log.error
- fmt.Printf("coudln't clone mgmt repo %s", err)
- return []byte(""), errors.New("coudln't clone mgmt repo")
+ fmt.Printf("couldn't clone mgmt repo %s", err)
+ return []byte(""), errors.New("couldn't clone mgmt repo")
}
file, err := fs.Open(filePath)
if err != nil {
fmt.Printf("Failed to open gitserver config %s", err)
- return []byte(""), errors.New("coudln't open git config file from mgmt repo")
+ return []byte(""), errors.New("couldn't open git config file from mgmt repo")
}
defer file.Close()
return io.ReadAll(file)
@@ -115,7 +138,14 @@ func loadServerConfig(mgmtRepo bool, baseDir, configPath string) (*ServerRepos,
err error
)
if mgmtRepo {
- repoURI := filepath.Join("file:///", baseDir, "mgmt.git")
+ mgmtPath := filepath.Join(baseDir, mgmtRepoName)
+ _, err := os.Stat(mgmtPath)
+ if errors.Is(err, os.ErrNotExist) {
+ return &ServerRepos{}, ErrMgmtRepoNotFound
+ } else if err != nil {
+ log.Fatalf("An unexpected error was encountered %s", err)
+ }
+ repoURI := filepath.Join("file:///", mgmtPath)
configBytes, err = loadFromGit(repoURI, configPath)
if err != nil {
// log.error
@@ -207,7 +237,7 @@ func (r *GitRepo) ReconcileRepo(basePath string) {
f, err := os.Create(okExport)
f.Close()
if err != nil {
- log.Fatalf("%s coudln't be created %s", GitExportMagic, err)
+ log.Fatalf("%s couldn't be created %s", GitExportMagic, err)
}
}
r.ConfigureExport(repoBase)
@@ -222,7 +252,7 @@ func (r *GitRepo) ConfigureExport(repoBase string) {
okExport := filepath.Join(repoBase, GitWebExportMagic)
_, err := os.Create(okExport)
if err != nil {
- log.Fatalf("%s coudln't be created %s", GitWebExportMagic, err)
+ log.Fatalf("%s couldn't be created %s", GitWebExportMagic, err)
}
}
@@ -231,14 +261,14 @@ func (r *GitWeb) ReconcileGitConf(repoBase string) {
confPath := filepath.Join(repoBase, "config")
cfg, err := ini.Load(confPath)
if err != nil {
- log.Fatalf("Coudln't read gitconfig %s", err)
+ log.Fatalf("couldn't read gitconfig %s", err)
}
// check if empty, delete
if (GitWeb{} == *r) {
if cfg.HasSection("gitweb") {
cfg.DeleteSection("gitweb")
if err := cfg.SaveTo(confPath); err != nil {
- log.Fatalf("Coudln't save gitconfig %s", err)
+ log.Fatalf("couldn't save gitconfig %s", err)
}
}
return
@@ -249,6 +279,6 @@ func (r *GitWeb) ReconcileGitConf(repoBase string) {
section.Key("url").SetValue(r.URL)
section.Key("category").SetValue(r.Category)
if err := cfg.SaveTo(confPath); err != nil {
- log.Fatalf("Coudln't save gitconfig %s", err)
+ log.Fatalf("couldn't save gitconfig %s", err)
}
}