appview: Update New PR Page #490

The compare forks option dropdown now shows repos in which you are a collaborator on instead of just repos you own.

Changed files
+22 -14
appview
db
pages
templates
repo
pulls
+8 -5
appview/db/repos.go
···
var repos []Repo
rows, err := e.Query(
-
`select did, name, knot, rkey, description, created, source
-
from repos
-
where did = ? and source is not null and source != ''
-
order by created desc`,
-
did,
+
`select distinct r.did, r.name, r.knot, r.rkey, r.description, r.created, r.source
+
from repos r
+
left join collaborators c on r.at_uri = c.repo_at
+
where (r.did = ? or c.subject_did = ?)
+
and r.source is not null
+
and r.source != ''
+
order by r.created desc`,
+
did, did,
)
if err != nil {
return nil, err
+2 -2
appview/pages/templates/repo/pulls/fragments/pullCompareForks.html
···
>
<option disabled selected>select a fork</option>
{{ range .Forks }}
-
<option value="{{ .Name }}" {{ if eq .Name $.Selected }}selected{{ end }} class="py-1">
-
{{ .Name }}
+
<option value="{{ .Did }}/{{ .Name }}" {{ if eq .Name $.Selected }}selected{{ end }} class="py-1">
+
{{ .Did | resolve }}/{{ .Name }}
</option>
{{ end }}
</select>
+1 -1
appview/pages/templates/repo/pulls/fragments/pullHeader.html
···
{{ $icon = "git-merge" }}
{{ end }}
-
{{ $owner := resolve .Pull.OwnerDid }}
+
{{ $owner := resolve .Pull.PullSource.Repo.Did }}
<section class="mt-2">
<div class="flex items-center gap-2">
<div
+11 -6
appview/pulls/pulls.go
···
}
func (s *Pulls) handleForkBasedPull(w http.ResponseWriter, r *http.Request, f *reporesolver.ResolvedRepo, user *oauth.User, forkRepo string, title, body, targetBranch, sourceBranch string, isStacked bool) {
-
fork, err := db.GetForkByDid(s.db, user.Did, forkRepo)
+
repoString := strings.SplitN(forkRepo, "/", 2)
+
forkOwnerDid := repoString[0]
+
repoName := repoString[1]
+
fork, err := db.GetForkByDid(s.db, forkOwnerDid, repoName)
if errors.Is(err, sql.ErrNoRows) {
s.pages.Notice(w, "pull", "No such fork.")
return
···
return
}
-
resp, err := sc.NewHiddenRef(user.Did, fork.Name, sourceBranch, targetBranch)
+
resp, err := sc.NewHiddenRef(fork.Did, fork.Name, sourceBranch, targetBranch)
if err != nil {
log.Println("failed to create hidden ref:", err, resp.StatusCode)
s.pages.Notice(w, "pull", "Failed to create pull request. Try again later.")
···
// hiddenRef: hidden/feature-1/main (on repo-fork)
// targetBranch: main (on repo-1)
// sourceBranch: feature-1 (on repo-fork)
-
comparison, err := us.Compare(user.Did, fork.Name, hiddenRef, sourceBranch)
+
comparison, err := us.Compare(fork.Did, fork.Name, hiddenRef, sourceBranch)
if err != nil {
log.Println("failed to compare across branches", err)
s.pages.Notice(w, "pull", err.Error())
···
forkVal := r.URL.Query().Get("fork")
-
+
repoString := strings.SplitN(forkVal, "/", 2)
+
forkOwnerDid := repoString[0]
+
forkName := repoString[1]
// fork repo
-
repo, err := db.GetRepo(s.db, user.Did, forkVal)
+
repo, err := db.GetRepo(s.db, forkOwnerDid, forkName)
if err != nil {
log.Println("failed to get repo", user.Did, forkVal)
return
···
return
-
sourceResult, err := sourceBranchesClient.Branches(user.Did, repo.Name)
+
sourceResult, err := sourceBranchesClient.Branches(forkOwnerDid, repo.Name)
if err != nil {
log.Println("failed to reach knotserver for source branches", err)
return