diff --git a/appview/pages/pages.go b/appview/pages/pages.go index a29e5c9a..94257162 100644 --- a/appview/pages/pages.go +++ b/appview/pages/pages.go @@ -233,6 +233,7 @@ type RepoInfo struct { Roles RolesInRepo Source *db.Repo SourceHandle string + DisableFork bool } type RolesInRepo struct { diff --git a/appview/pages/templates/fragments/repoActions.html b/appview/pages/templates/fragments/repoActions.html index 0361a778..7a9549a1 100644 --- a/appview/pages/templates/fragments/repoActions.html +++ b/appview/pages/templates/fragments/repoActions.html @@ -25,10 +25,17 @@ + {{ if .DisableFork }} + + {{ else }} {{ i "git-fork" "w-4 h-4"}} fork + {{ end }} {{ end }} diff --git a/appview/state/repo.go b/appview/state/repo.go index 3f35a62c..116b9993 100644 --- a/appview/state/repo.go +++ b/appview/state/repo.go @@ -831,6 +831,33 @@ func (f *FullyResolvedRepo) RepoInfo(s *State, u *auth.User) pages.RepoInfo { knot = "tangled.sh" } + var disableFork bool + us, err := NewUnsignedClient(knot, s.config.Dev) + if err != nil { + log.Printf("failed to create unsigned client for %s: %v", knot, err) + } else { + resp, err := us.Branches(f.OwnerDid(), f.RepoName) + if err != nil { + log.Printf("failed to get branches for %s/%s: %v", f.OwnerDid(), f.RepoName, err) + } else { + defer resp.Body.Close() + body, err := io.ReadAll(resp.Body) + if err != nil { + log.Printf("error reading branch response body: %v", err) + } else { + var branchesResp types.RepoBranchesResponse + if err := json.Unmarshal(body, &branchesResp); err != nil { + log.Printf("error parsing branch response: %v", err) + } else { + disableFork = false + } + + if len(branchesResp.Branches) == 0 { + disableFork = true + } + } + } + } repoInfo := pages.RepoInfo{ OwnerDid: f.OwnerDid(), OwnerHandle: f.OwnerHandle(), @@ -845,6 +872,7 @@ func (f *FullyResolvedRepo) RepoInfo(s *State, u *auth.User) pages.RepoInfo { IssueCount: issueCount, PullCount: pullCount, }, + DisableFork: disableFork, } if sourceRepo != nil {