From 51c7db9c7fefd83c0b5cc2cfc473c517ee9d07a2 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 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 --- appview/pages/templates/repo/compare/compare.html | 2 +- appview/repo/compare.go | 24 ++++++++++++++---------- appview/repo/router.go | 1 - 3 file(s) changed, 15 insertion(s)(+), 12 deletion(s)(-) diff --git a/appview/pages/templates/repo/compare/compare.html b/appview/pages/templates/repo/compare/compare.html --- 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 --- a/appview/repo/compare.go +++ b/appview/repo/compare.go @@ -116,17 +116,21 @@ diffOpts.Split = true } // 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 --- a/appview/repo/router.go +++ b/appview/repo/router.go @@ -61,7 +61,6 @@ // /compare/{ref1}...{ref2} // 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) }) -- tangled.sh