diff options
author | Runxi Yu <me@runxiyu.org> | 2025-02-11 23:13:04 +0800 |
---|---|---|
committer | Runxi Yu <me@runxiyu.org> | 2025-02-11 23:15:51 +0800 |
commit | b288beea9ddc5709769997a9101f25a78e286b89 (patch) | |
tree | db548c0ca63f180b25acb6f9822ab38bc41c15d0 /handle_repo_raw.go | |
parent | style.css: Fix file content background (diff) | |
download | forge-b288beea9ddc5709769997a9101f25a78e286b89.tar.gz forge-b288beea9ddc5709769997a9101f25a78e286b89.tar.zst forge-b288beea9ddc5709769997a9101f25a78e286b89.zip |
*: Use URL params to specify commits/branches/tags
Diffstat (limited to 'handle_repo_raw.go')
-rw-r--r-- | handle_repo_raw.go | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/handle_repo_raw.go b/handle_repo_raw.go index 5693660..d3ffe3e 100644 --- a/handle_repo_raw.go +++ b/handle_repo_raw.go @@ -1,11 +1,11 @@ package main import ( + "errors" "net/http" "path" "strings" - "github.com/go-git/go-git/v5/plumbing" "github.com/go-git/go-git/v5/plumbing/object" ) @@ -13,19 +13,32 @@ func handle_repo_raw(w http.ResponseWriter, r *http.Request) { data := make(map[string]any) // TODO: Sanitize path values raw_path_spec := r.PathValue("rest") - ref_name, group_name, repo_name, path_spec := r.PathValue("ref"), r.PathValue("group_name"), r.PathValue("repo_name"), strings.TrimSuffix(raw_path_spec, "/") - data["ref"], data["group_name"], data["repo_name"], data["path_spec"] = ref_name, group_name, repo_name, path_spec + group_name, repo_name, path_spec := r.PathValue("group_name"), r.PathValue("repo_name"), strings.TrimSuffix(raw_path_spec, "/") + + ref_type, ref_name, err := get_param_ref_and_type(r) + if err != nil { + if errors.Is(err, err_no_ref_spec) { + ref_type = "head" + } else { + _, _ = w.Write([]byte("Error querying ref type: " + err.Error())) + return + } + } + + data["ref_type"], data["ref"], data["group_name"], data["repo_name"], data["path_spec"] = ref_type, ref_name, group_name, repo_name, path_spec + repo, err := open_git_repo(group_name, repo_name) if err != nil { _, _ = w.Write([]byte("Error opening repo: " + err.Error())) return } - ref, err := repo.Reference(plumbing.NewBranchReferenceName(ref_name), true) + + ref_hash, err := get_ref_hash_from_type_and_name(repo, ref_type, ref_name) if err != nil { - _, _ = w.Write([]byte("Error getting repo reference: " + err.Error())) + _, _ = w.Write([]byte("Error getting ref hash: " + err.Error())) return } - ref_hash := ref.Hash() + commit_object, err := repo.CommitObject(ref_hash) if err != nil { _, _ = w.Write([]byte("Error getting commit object: " + err.Error())) |