forked from tangled.org/core
Monorepo for Tangled — https://tangled.org

knotserver: better support for empty repos

- setting default-branch now works on repos that have empty default
branches
- RepoIndex now returns branch-list if available on empty repos

Changed files
+18 -17
knotserver
types
-3
knotserver/git/git.go
···
branches := []types.Branch{}
defaultBranch, err := g.FindMainBranch()
-
if err != nil {
-
return nil, fmt.Errorf("getting default branch", "error", err.Error())
-
}
_ = bi.ForEach(func(ref *plumbing.Reference) error {
b := types.Branch{}
+14 -10
knotserver/routes.go
···
gr, err := git.Open(path, ref)
if err != nil {
+
plain, err2 := git.PlainOpen(path)
+
if err2 != nil {
+
l.Error("opening repo", "error", err2.Error())
+
notFound(w)
+
return
+
}
+
branches, _ := plain.Branches()
+
log.Println(err)
+
if errors.Is(err, plumbing.ErrReferenceNotFound) {
resp := types.RepoIndexResponse{
-
IsEmpty: true,
+
IsEmpty: true,
+
Branches: branches,
}
writeJSON(w, resp)
return
···
func (h *Handle) Branches(w http.ResponseWriter, r *http.Request) {
path, _ := securejoin.SecureJoin(h.c.Repo.ScanPath, didPath(r))
-
l := h.l.With("handler", "Branches")
-
gr, err := git.Open(path, "")
+
gr, err := git.PlainOpen(path)
if err != nil {
notFound(w)
return
}
-
branches, err := gr.Branches()
-
if err != nil {
-
l.Error("getting branches", "error", err.Error())
-
writeError(w, err.Error(), http.StatusInternalServerError)
-
return
-
}
+
branches, _ := gr.Branches()
resp := types.RepoBranchesResponse{
Branches: branches,
···
return
-
gr, err := git.Open(path, "")
+
gr, err := git.PlainOpen(path)
if err != nil {
notFound(w)
return
+4 -4
types/repo.go
···
}
type TagReference struct {
-
Reference `json:"ref,omitempty"`
-
Tag *object.Tag `json:"tag,omitempty"`
-
Message string `json:"message,omitempty"`
+
Reference
+
Tag *object.Tag `json:"tag,omitempty"`
+
Message string `json:"message,omitempty"`
}
type Reference struct {
···
}
type RepoBranchResponse struct {
-
Branch Branch `json:"branch,omitempty"`
+
Branch Branch
}
type RepoDefaultBranchResponse struct {