support categories
This commit is contained in:
parent
3c1b8007b6
commit
ac0983a896
|
@ -18,7 +18,12 @@ func (d *deps) InfoRefs(w http.ResponseWriter, r *http.Request) {
|
||||||
name := flow.Param(r.Context(), "name")
|
name := flow.Param(r.Context(), "name")
|
||||||
name = filepath.Clean(name)
|
name = filepath.Clean(name)
|
||||||
|
|
||||||
repo := filepath.Join(d.c.Repo.ScanPath, name)
|
repo := d.c.Repo.ScanPath
|
||||||
|
category := flow.Param(r.Context(), "category")
|
||||||
|
if category != "" {
|
||||||
|
repo = filepath.Join(repo, category)
|
||||||
|
}
|
||||||
|
repo = filepath.Join(repo, name)
|
||||||
|
|
||||||
w.Header().Set("content-type", "application/x-git-upload-pack-advertisement")
|
w.Header().Set("content-type", "application/x-git-upload-pack-advertisement")
|
||||||
|
|
||||||
|
@ -33,11 +38,17 @@ func (d *deps) InfoRefs(w http.ResponseWriter, r *http.Request) {
|
||||||
loader := server.NewFilesystemLoader(billyfs)
|
loader := server.NewFilesystemLoader(billyfs)
|
||||||
srv := server.NewServer(loader)
|
srv := server.NewServer(loader)
|
||||||
session, err := srv.NewUploadPackSession(ep, nil)
|
session, err := srv.NewUploadPackSession(ep, nil)
|
||||||
|
if err != nil {
|
||||||
|
billyfs := osfs.New(repo + ".git")
|
||||||
|
loader := server.NewFilesystemLoader(billyfs)
|
||||||
|
srv := server.NewServer(loader)
|
||||||
|
session, err = srv.NewUploadPackSession(ep, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
http.Error(w, err.Error(), 500)
|
http.Error(w, err.Error(), 500)
|
||||||
log.Printf("git: %s", err)
|
log.Printf("git: %s", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ar, err := session.AdvertisedReferencesContext(r.Context())
|
ar, err := session.AdvertisedReferencesContext(r.Context())
|
||||||
if errors.Is(err, transport.ErrRepositoryNotFound) {
|
if errors.Is(err, transport.ErrRepositoryNotFound) {
|
||||||
|
@ -64,7 +75,12 @@ func (d *deps) UploadPack(w http.ResponseWriter, r *http.Request) {
|
||||||
name := flow.Param(r.Context(), "name")
|
name := flow.Param(r.Context(), "name")
|
||||||
name = filepath.Clean(name)
|
name = filepath.Clean(name)
|
||||||
|
|
||||||
repo := filepath.Join(d.c.Repo.ScanPath, name)
|
repo := d.c.Repo.ScanPath
|
||||||
|
category := flow.Param(r.Context(), "category")
|
||||||
|
if category != "" {
|
||||||
|
repo = filepath.Join(repo, category)
|
||||||
|
}
|
||||||
|
repo = filepath.Join(repo, name)
|
||||||
|
|
||||||
w.Header().Set("content-type", "application/x-git-upload-pack-result")
|
w.Header().Set("content-type", "application/x-git-upload-pack-result")
|
||||||
|
|
||||||
|
@ -87,11 +103,17 @@ func (d *deps) UploadPack(w http.ResponseWriter, r *http.Request) {
|
||||||
loader := server.NewFilesystemLoader(billyfs)
|
loader := server.NewFilesystemLoader(billyfs)
|
||||||
svr := server.NewServer(loader)
|
svr := server.NewServer(loader)
|
||||||
session, err := svr.NewUploadPackSession(ep, nil)
|
session, err := svr.NewUploadPackSession(ep, nil)
|
||||||
|
if err != nil {
|
||||||
|
billyfs := osfs.New(repo + ".git")
|
||||||
|
loader := server.NewFilesystemLoader(billyfs)
|
||||||
|
svr := server.NewServer(loader)
|
||||||
|
session, err = svr.NewUploadPackSession(ep, nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
http.Error(w, err.Error(), 500)
|
http.Error(w, err.Error(), 500)
|
||||||
log.Printf("git: %s", err)
|
log.Printf("git: %s", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
res, err := session.UploadPack(r.Context(), upr)
|
res, err := session.UploadPack(r.Context(), upr)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -39,6 +39,13 @@ func Handlers(c *config.Config) *flow.Mux {
|
||||||
|
|
||||||
mux.HandleFunc("/", d.Index, "GET")
|
mux.HandleFunc("/", d.Index, "GET")
|
||||||
mux.HandleFunc("/static/:file", d.ServeStatic, "GET")
|
mux.HandleFunc("/static/:file", d.ServeStatic, "GET")
|
||||||
|
mux.HandleFunc("/:category/:name", d.Multiplex, "GET", "POST")
|
||||||
|
mux.HandleFunc("/:category/:name/tree/:ref/...", d.RepoTree, "GET")
|
||||||
|
mux.HandleFunc("/:category/:name/blob/:ref/...", d.FileContent, "GET")
|
||||||
|
mux.HandleFunc("/:category/:name/log/:ref", d.Log, "GET")
|
||||||
|
mux.HandleFunc("/:category/:name/commit/:ref", d.Diff, "GET")
|
||||||
|
mux.HandleFunc("/:category/:name/refs", d.Refs, "GET")
|
||||||
|
mux.HandleFunc("/:category/:name/...", d.Multiplex, "GET", "POST")
|
||||||
mux.HandleFunc("/:name", d.Multiplex, "GET", "POST")
|
mux.HandleFunc("/:name", d.Multiplex, "GET", "POST")
|
||||||
mux.HandleFunc("/:name/tree/:ref/...", d.RepoTree, "GET")
|
mux.HandleFunc("/:name/tree/:ref/...", d.RepoTree, "GET")
|
||||||
mux.HandleFunc("/:name/blob/:ref/...", d.FileContent, "GET")
|
mux.HandleFunc("/:name/blob/:ref/...", d.FileContent, "GET")
|
||||||
|
|
|
@ -159,13 +159,23 @@ func (d *deps) RepoIndex(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
name = filepath.Clean(name)
|
name = filepath.Clean(name)
|
||||||
path := filepath.Join(d.c.Repo.ScanPath, name)
|
path := d.c.Repo.ScanPath
|
||||||
|
category := flow.Param(r.Context(), "category")
|
||||||
|
if category != "" {
|
||||||
|
path = filepath.Join(path, category)
|
||||||
|
log.Println(category)
|
||||||
|
}
|
||||||
|
path = filepath.Join(path, name)
|
||||||
|
log.Println(path)
|
||||||
|
|
||||||
gr, err := git.Open(path, "")
|
gr, err := git.Open(path, "")
|
||||||
|
if err != nil {
|
||||||
|
gr, err = git.Open(path+".git", "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
d.Write404(w)
|
d.Write404(w)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
commits, err := gr.Commits()
|
commits, err := gr.Commits()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -242,12 +252,20 @@ func (d *deps) RepoTree(w http.ResponseWriter, r *http.Request) {
|
||||||
ref := flow.Param(r.Context(), "ref")
|
ref := flow.Param(r.Context(), "ref")
|
||||||
|
|
||||||
name = filepath.Clean(name)
|
name = filepath.Clean(name)
|
||||||
path := filepath.Join(d.c.Repo.ScanPath, name)
|
path := d.c.Repo.ScanPath
|
||||||
|
category := flow.Param(r.Context(), "category")
|
||||||
|
if category != "" {
|
||||||
|
path = filepath.Join(path, category)
|
||||||
|
}
|
||||||
|
path = filepath.Join(path, name)
|
||||||
gr, err := git.Open(path, ref)
|
gr, err := git.Open(path, ref)
|
||||||
|
if err != nil {
|
||||||
|
gr, err = git.Open(path+".git", ref)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
d.Write404(w)
|
d.Write404(w)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
files, err := gr.FileTree(treePath)
|
files, err := gr.FileTree(treePath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -277,12 +295,20 @@ func (d *deps) FileContent(w http.ResponseWriter, r *http.Request) {
|
||||||
ref := flow.Param(r.Context(), "ref")
|
ref := flow.Param(r.Context(), "ref")
|
||||||
|
|
||||||
name = filepath.Clean(name)
|
name = filepath.Clean(name)
|
||||||
path := filepath.Join(d.c.Repo.ScanPath, name)
|
path := d.c.Repo.ScanPath
|
||||||
|
category := flow.Param(r.Context(), "category")
|
||||||
|
if category != "" {
|
||||||
|
path = filepath.Join(path, category)
|
||||||
|
}
|
||||||
|
path = filepath.Join(path, name)
|
||||||
gr, err := git.Open(path, ref)
|
gr, err := git.Open(path, ref)
|
||||||
|
if err != nil {
|
||||||
|
gr, err = git.Open(path+".git", ref)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
d.Write404(w)
|
d.Write404(w)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
contents, err := gr.FileContent(treePath)
|
contents, err := gr.FileContent(treePath)
|
||||||
data := make(map[string]any)
|
data := make(map[string]any)
|
||||||
|
@ -303,12 +329,20 @@ func (d *deps) Log(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
ref := flow.Param(r.Context(), "ref")
|
ref := flow.Param(r.Context(), "ref")
|
||||||
|
|
||||||
path := filepath.Join(d.c.Repo.ScanPath, name)
|
path := d.c.Repo.ScanPath
|
||||||
|
category := flow.Param(r.Context(), "category")
|
||||||
|
if category != "" {
|
||||||
|
path = filepath.Join(path, category)
|
||||||
|
}
|
||||||
|
path = filepath.Join(path, name)
|
||||||
gr, err := git.Open(path, ref)
|
gr, err := git.Open(path, ref)
|
||||||
|
if err != nil {
|
||||||
|
gr, err = git.Open(path+".git", ref)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
d.Write404(w)
|
d.Write404(w)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
commits, err := gr.Commits()
|
commits, err := gr.Commits()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -342,12 +376,20 @@ func (d *deps) Diff(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
ref := flow.Param(r.Context(), "ref")
|
ref := flow.Param(r.Context(), "ref")
|
||||||
|
|
||||||
path := filepath.Join(d.c.Repo.ScanPath, name)
|
path := d.c.Repo.ScanPath
|
||||||
|
category := flow.Param(r.Context(), "category")
|
||||||
|
if category != "" {
|
||||||
|
path = filepath.Join(path, category)
|
||||||
|
}
|
||||||
|
path = filepath.Join(path, name)
|
||||||
gr, err := git.Open(path, ref)
|
gr, err := git.Open(path, ref)
|
||||||
|
if err != nil {
|
||||||
|
gr, err = git.Open(path+".git", ref)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
d.Write404(w)
|
d.Write404(w)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
diff, err := gr.Diff()
|
diff, err := gr.Diff()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -382,12 +424,20 @@ func (d *deps) Refs(w http.ResponseWriter, r *http.Request) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
path := filepath.Join(d.c.Repo.ScanPath, name)
|
path := d.c.Repo.ScanPath
|
||||||
|
category := flow.Param(r.Context(), "category")
|
||||||
|
if category != "" {
|
||||||
|
path = filepath.Join(path, category)
|
||||||
|
}
|
||||||
|
path = filepath.Join(path, name)
|
||||||
gr, err := git.Open(path, "")
|
gr, err := git.Open(path, "")
|
||||||
|
if err != nil {
|
||||||
|
gr, err = git.Open(path+".git", "")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
d.Write404(w)
|
d.Write404(w)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
tags, err := gr.Tags()
|
tags, err := gr.Tags()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Loading…
Reference in New Issue