forked from tangled.org/core
Monorepo for Tangled — https://tangled.org

appview: disable forking empty repos

anirudh.fi 4fcda1a7 adc78693

verified
Changed files
+36
appview
pages
templates
fragments
state
+1
appview/pages/pages.go
···
Roles RolesInRepo
Source *db.Repo
SourceHandle string
+
DisableFork bool
}
type RolesInRepo struct {
+7
appview/pages/templates/fragments/repoActions.html
···
</span>
</div>
</button>
+
{{ if .DisableFork }}
+
<button class="btn no-underline hover:no-underline flex items-center gap-2 disabled:opacity-50 disabled:cursor-not-allowed" disabled title="Empty repositories cannot be forked">
+
{{ i "git-fork" "w-4 h-4"}}
+
fork
+
</button>
+
{{ else }}
<a class="btn no-underline hover:no-underline flex items-center gap-2" href="/{{ .FullName }}/fork">
{{ i "git-fork" "w-4 h-4"}}
fork
</a>
+
{{ end }}
</div>
{{ end }}
+28
appview/state/repo.go
···
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(),
···
IssueCount: issueCount,
PullCount: pullCount,
},
+
DisableFork: disableFork,
}
if sourceRepo != nil {