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" }}
-
+
{{ 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 }}
+
+
+
+
+{{ 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) {