diff options
| author | Max Resnick <max@ofmax.li> | 2024-05-04 10:24:48 -0700 |
|---|---|---|
| committer | Max Resnick <max@ofmax.li> | 2024-05-20 21:33:57 -0700 |
| commit | b8584fec70bd6810fa2392deadc69595b3e94cfa (patch) | |
| tree | 2c2b17e06f780ad7d6ba46a0189f4faf45629fcb /internal/admin/model.go | |
| parent | 11fe503d5ea17fa3ddc4ce2308ea82b6edc7763e (diff) | |
| download | go-git-server-b8584fec70bd6810fa2392deadc69595b3e94cfa.tar.gz | |
feat: refactor of repo management
Diffstat (limited to 'internal/admin/model.go')
| -rw-r--r-- | internal/admin/model.go | 48 |
1 files changed, 29 insertions, 19 deletions
diff --git a/internal/admin/model.go b/internal/admin/model.go index ee65045..079496e 100644 --- a/internal/admin/model.go +++ b/internal/admin/model.go @@ -97,19 +97,38 @@ type ServerRepos struct { basePath string } -func loadFromGit(gitURL, filePath string) ([]byte, error) { +func loadConfigFromGit(baseDir, filePath string) ([]byte, error) { + mgmtPath := filepath.Join(baseDir, mgmtRepoName) + _, err := os.Stat(mgmtPath) + if errors.Is(err, os.ErrNotExist) { + return []byte(""), ErrMgmtRepoNotFound + } else if err != nil { + log.Fatalf("An unexpected error was encountered %s", err) + } + repoURI := fmt.Sprintf("file://%s", mgmtPath) + slog.Info("mgmt repo uri", "uri", repoURI) fs := memfs.New() storer := memory.NewStorage() - _, err := git.Clone(storer, fs, &git.CloneOptions{ - URL: gitURL, + _, err = git.Clone(storer, fs, &git.CloneOptions{ + URL: repoURI, }) if err != nil { - return []byte(""), fmt.Errorf("couldn't clone mgmt repo %w", err) + return []byte(""), fmt.Errorf("couldn't clone mgmt repo %s %w", repoURI, err) + } + files, err := fs.ReadDir("/") + if err != nil { + log.Fatal(err) + } + for _, file := range files { + fmt.Println(file) + } + file, err := fs.Open(filePath) if err != nil { return []byte(""), fmt.Errorf("couldn't open file in repo %w", err) } + defer file.Close() return io.ReadAll(file) } @@ -155,24 +174,13 @@ func loadServerConfig(mgmtRepo bool, baseDir, configPath string) (*ServerRepos, err error ) if mgmtRepo { - 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) + configBytes, err = loadConfigFromGit(baseDir, configPath) if err != nil { - // log.error - slog.Error("Failed to load config file from git", "path", configPath) return &ServerRepos{}, err } } else { configBytes, err = loadLocalFile(configPath) if err != nil { - // log.error slog.Error("Local server config couldn't be loaded") return &ServerRepos{}, err } @@ -203,13 +211,15 @@ func (s *ServerRepos) ConfigureRepos() error { } func readOnlyPaths(role, repoName string) [][]string { + // WARN this is kind of hard coded pathing... not sure that's great return [][]string{ - []string{role, fmt.Sprintf("/%s/info/refs", repoName), "GET"}, - []string{role, fmt.Sprintf("/%s/git-upload-pack", repoName), "POST"}, + {role, fmt.Sprintf("/%s/info/refs", repoName), "GET"}, + {role, fmt.Sprintf("/%s/git-upload-pack", repoName), "POST"}, } } func writePaths(role, repoName string) [][]string { - return [][]string{[]string{role, fmt.Sprintf("/%s/git-receive-pack", repoName), "POST"}} + // WARN this is kind of hard coded pathing... not sure that's great + return [][]string{{role, fmt.Sprintf("/%s/git-receive-pack", repoName), "POST"}} } // Policy generate policy for repo base on mode |