aboutsummaryrefslogtreecommitdiff
path: root/http_server.go
diff options
context:
space:
mode:
authorRunxi Yu <me@runxiyu.org>2025-02-14 08:48:07 +0800
committerRunxi Yu <me@runxiyu.org>2025-02-14 08:48:07 +0800
commite347064abe3ce4c90fbad23d36e5d61a149e2389 (patch)
treeb587b82f918800b6ea457ece60d778b39a92dbe1 /http_server.go
parentREADME.md: Add details in features supported by git repos (diff)
downloadforge-e347064abe3ce4c90fbad23d36e5d61a149e2389.tar.gz
forge-e347064abe3ce4c90fbad23d36e5d61a149e2389.tar.zst
forge-e347064abe3ce4c90fbad23d36e5d61a149e2389.zip
http_*: Refactor to reduce duplication
Diffstat (limited to 'http_server.go')
-rw-r--r--http_server.go16
1 files changed, 14 insertions, 2 deletions
diff --git a/http_server.go b/http_server.go
index 3804df7..6626ae4 100644
--- a/http_server.go
+++ b/http_server.go
@@ -113,6 +113,15 @@ func (router *http_router_t) ServeHTTP(w http.ResponseWriter, r *http.Request) {
switch module_type {
case "repos":
params["repo_name"] = module_name
+ params["ref_type"], params["ref_name"], err = get_param_ref_and_type(r)
+ if err != nil {
+ if errors.Is(err, err_no_ref_spec) {
+ params["ref_type"] = ""
+ } else {
+ http.Error(w, "Error querying ref type: "+err.Error(), http.StatusInternalServerError)
+ return
+ }
+ }
// TODO: subgroups
if non_empty_last_segments_len == separator_index+3 {
if !dir_mode {
@@ -133,15 +142,18 @@ func (router *http_router_t) ServeHTTP(w http.ResponseWriter, r *http.Request) {
params["rest"] = strings.Join(segments[separator_index+4:], "/")
handle_repo_raw(w, r, params)
case "log":
- if non_empty_last_segments_len != separator_index+5 {
+ if non_empty_last_segments_len > separator_index+5 {
http.Error(w, "Too many parameters", http.StatusBadRequest)
return
+ } else if non_empty_last_segments_len < separator_index+5 {
+ http.Error(w, "Insufficient parameters", http.StatusBadRequest)
+ return
}
if dir_mode {
http.Redirect(w, r, strings.TrimSuffix(r.URL.Path, "/"), http.StatusSeeOther)
return
}
- params["ref"] = segments[separator_index+4]
+ params["ref_name"] = segments[separator_index+4]
handle_repo_log(w, r, params)
case "commit":
if dir_mode {