+1
appview/pages/pages.go
+1
appview/pages/pages.go
+7
appview/pages/templates/fragments/repoActions.html
+7
appview/pages/templates/fragments/repoActions.html
···
25
25
</span>
26
26
</div>
27
27
</button>
28
+
{{ if .DisableFork }}
29
+
<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">
30
+
{{ i "git-fork" "w-4 h-4"}}
31
+
fork
32
+
</button>
33
+
{{ else }}
28
34
<a class="btn no-underline hover:no-underline flex items-center gap-2" href="/{{ .FullName }}/fork">
29
35
{{ i "git-fork" "w-4 h-4"}}
30
36
fork
31
37
</a>
38
+
{{ end }}
32
39
</div>
33
40
{{ end }}
34
41
+28
appview/state/repo.go
+28
appview/state/repo.go
···
831
831
knot = "tangled.sh"
832
832
}
833
833
834
+
var disableFork bool
835
+
us, err := NewUnsignedClient(knot, s.config.Dev)
836
+
if err != nil {
837
+
log.Printf("failed to create unsigned client for %s: %v", knot, err)
838
+
} else {
839
+
resp, err := us.Branches(f.OwnerDid(), f.RepoName)
840
+
if err != nil {
841
+
log.Printf("failed to get branches for %s/%s: %v", f.OwnerDid(), f.RepoName, err)
842
+
} else {
843
+
defer resp.Body.Close()
844
+
body, err := io.ReadAll(resp.Body)
845
+
if err != nil {
846
+
log.Printf("error reading branch response body: %v", err)
847
+
} else {
848
+
var branchesResp types.RepoBranchesResponse
849
+
if err := json.Unmarshal(body, &branchesResp); err != nil {
850
+
log.Printf("error parsing branch response: %v", err)
851
+
} else {
852
+
disableFork = false
853
+
}
854
+
855
+
if len(branchesResp.Branches) == 0 {
856
+
disableFork = true
857
+
}
858
+
}
859
+
}
860
+
}
834
861
repoInfo := pages.RepoInfo{
835
862
OwnerDid: f.OwnerDid(),
836
863
OwnerHandle: f.OwnerHandle(),
···
845
872
IssueCount: issueCount,
846
873
PullCount: pullCount,
847
874
},
875
+
DisableFork: disableFork,
848
876
}
849
877
850
878
if sourceRepo != nil {