diff --git a/appview/pages/pages.go b/appview/pages/pages.go index 44e3c29e..fc593eb8 100644 --- a/appview/pages/pages.go +++ b/appview/pages/pages.go @@ -865,6 +865,7 @@ type RepoCompareParams struct { Tags []*types.TagReference Base string Head string + AllowPull bool Active string } @@ -874,6 +875,17 @@ func (p *Pages) RepoCompare(w io.Writer, params RepoCompareParams) error { return p.executeRepo("repo/compare", w, params) } +type RepoCompareAllowPullParams struct { + LoggedInUser *oauth.User + RepoInfo repoinfo.RepoInfo + Base string + Head string +} + +func (p *Pages) RepoCompareAllowPullFragment(w io.Writer, params RepoCompareAllowPullParams) error { + return p.executePlain("repo/fragments/compareAllowPull", w, params) +} + type RepoCompareDiffParams struct { LoggedInUser *oauth.User RepoInfo repoinfo.RepoInfo diff --git a/appview/pages/templates/repo/compare.html b/appview/pages/templates/repo/compare.html index cc383fde..e6e1e30e 100644 --- a/appview/pages/templates/repo/compare.html +++ b/appview/pages/templates/repo/compare.html @@ -1,4 +1,11 @@ -{{ define "title" }}new comparison{{ end }} +{{ define "title" }} + {{ if and .Head .Base }} + comparing {{ .Base }} and + {{ .Head }} + {{ else }} + new comparison + {{ end }} +{{ end }} {{ define "repoContent" }}
@@ -104,7 +111,6 @@
- +
{{ end }} {{ define "repoAfter" }} diff --git a/appview/pages/templates/repo/fragments/compareAllowPull.html b/appview/pages/templates/repo/fragments/compareAllowPull.html new file mode 100644 index 00000000..ef3f1df7 --- /dev/null +++ b/appview/pages/templates/repo/fragments/compareAllowPull.html @@ -0,0 +1,24 @@ +{{ define "repo/fragments/compareAllowPull" }} +
+

+ This comparison can be turned into a pull request to be reviewed and + discussed. +

+ + {{ $newPullUrl := printf "/%s/pulls/new?strategy=branch&targetBranch=%s&sourceBranch=%s" .RepoInfo.FullName .Base .Head }} + + +
+ + {{ i "git-pull-request-create" "w-4 h-4" }} + create pull + + {{ i "loader-circle" "w-4 h-4 animate-spin hidden group-[.htmx-request]:inline" }} + + +
+
+{{ end }} diff --git a/appview/state/repo.go b/appview/state/repo.go index ecb5fce1..5274d61e 100644 --- a/appview/state/repo.go +++ b/appview/state/repo.go @@ -2110,6 +2110,15 @@ func (s *State) RepoCompare(w http.ResponseWriter, r *http.Request) { } } + var allowPull bool = false + if user != nil { + if slices.ContainsFunc(branches.Branches, func(branch types.Branch) bool { + return branch.Name == head || branch.Name == base + }) { + allowPull = true + } + } + s.pages.RepoCompare(w, pages.RepoCompareParams{ LoggedInUser: user, RepoInfo: f.RepoInfo(s, user), @@ -2118,6 +2127,24 @@ func (s *State) RepoCompare(w http.ResponseWriter, r *http.Request) { Tags: tags.Tags, Base: base, Head: head, + AllowPull: allowPull, + }) + +} + +func (s *State) RepoCompareAllowPullFragment(w http.ResponseWriter, r *http.Request) { + user := s.oauth.GetUser(r) + f, err := s.fullyResolvedRepo(r) + if err != nil { + log.Println("failed to get repo and knot", err) + return + } + + s.pages.RepoCompareAllowPullFragment(w, pages.RepoCompareAllowPullParams{ + Head: chi.URLParam(r, "head"), + Base: chi.URLParam(r, "base"), + RepoInfo: f.RepoInfo(s, user), + LoggedInUser: user, }) } diff --git a/appview/state/router.go b/appview/state/router.go index b0c91085..4f7ad712 100644 --- a/appview/state/router.go +++ b/appview/state/router.go @@ -127,8 +127,9 @@ func (s *State) UserRouter() http.Handler { // /compare/master...some/feature // /compare/master...example.com:another/feature <- this is a fork r.Get("/{base}/{head}", s.RepoCompare) - r.Get("/*", s.RepoCompare) r.Get("/diff/{base}/{head}", s.RepoCompareDiffFragment) + r.Get("/allow-pull/{base}/{head}", s.RepoCompareAllowPullFragment) + r.Get("/*", s.RepoCompare) }) r.Route("/pulls", func(r chi.Router) {