From 22b8146127db9a2391ba4e0451bf7073b75b04be Mon Sep 17 00:00:00 2001 From: oppiliappan Date: Thu, 20 Nov 2025 05:02:56 +0000 Subject: [PATCH] appview/repo: allow compare URLs to not be path escaped Change-Id: zwwnppvnssrxxypmmptkrprwzszlpntp this changes the routing logic slightly to allow non-path escaped refs in compare urls that use the `...` syntax: previously only this worked: /compare/master/sl%2Fuvpzuszrulvq /compare/master...sl%2Fuvpzuszrulvq with this patch: /compare/master/sl%2Fuvpzuszrulvq /compare/master...sl%2Fuvpzuszrulvq /compare/master...sl/uvpzuszrulvq (new) Signed-off-by: oppiliappan --- .../pages/templates/repo/compare/compare.html | 2 +- appview/repo/compare.go | 24 +++++++++++-------- appview/repo/router.go | 1 - 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/appview/pages/templates/repo/compare/compare.html b/appview/pages/templates/repo/compare/compare.html index d8380954..b273b360 100644 --- a/appview/pages/templates/repo/compare/compare.html +++ b/appview/pages/templates/repo/compare/compare.html @@ -17,7 +17,7 @@ {{ end }} {{ define "mainLayout" }} -
+
{{ block "contentLayout" . }} {{ block "content" . }}{{ end }} {{ end }} diff --git a/appview/repo/compare.go b/appview/repo/compare.go index 6139ae9d..b0b85d3e 100644 --- a/appview/repo/compare.go +++ b/appview/repo/compare.go @@ -116,17 +116,21 @@ func (rp *Repo) Compare(w http.ResponseWriter, r *http.Request) { } // if user is navigating to one of - // /compare/{base}/{head} // /compare/{base}...{head} - base := chi.URLParam(r, "base") - head := chi.URLParam(r, "head") - if base == "" && head == "" { - rest := chi.URLParam(r, "*") // master...feature/xyz - parts := strings.SplitN(rest, "...", 2) - if len(parts) == 2 { - base = parts[0] - head = parts[1] - } + // /compare/{base}/{head} + var base, head string + rest := chi.URLParam(r, "*") + + var parts []string + if strings.Contains(rest, "...") { + parts = strings.SplitN(rest, "...", 2) + } else if strings.Contains(rest, "/") { + parts = strings.SplitN(rest, "/", 2) + } + + if len(parts) == 2 { + base = parts[0] + head = parts[1] } base, _ = url.PathUnescape(base) diff --git a/appview/repo/router.go b/appview/repo/router.go index b5def882..1667ae58 100644 --- a/appview/repo/router.go +++ b/appview/repo/router.go @@ -61,7 +61,6 @@ func (rp *Repo) Router(mw *middleware.Middleware) http.Handler { // for example: // /compare/master...some/feature // /compare/master...example.com:another/feature <- this is a fork - r.Get("/{base}/{head}", rp.Compare) r.Get("/*", rp.Compare) }) -- 2.43.0