···
"tangled.sh/tangled.sh/core/appview/pages/markup"
"tangled.sh/tangled.sh/core/appview/pages/repoinfo"
"tangled.sh/tangled.sh/core/appview/pagination"
28
+
"tangled.sh/tangled.sh/core/knotserver"
"tangled.sh/tangled.sh/core/types"
"github.com/bluesky-social/indigo/atproto/data"
···
user := s.oauth.GetUser(r)
repoInfo := f.RepoInfo(s, user)
127
+
forkInfo, err := GetForkInfo(repoInfo, s, f, us, w, user)
129
+
log.Printf("Failed to fetch fork information: %v", err)
133
+
s.pages.RepoIndexPage(w, pages.RepoIndexParams{
134
+
LoggedInUser: user,
135
+
RepoInfo: repoInfo,
137
+
RepoIndexResponse: result,
138
+
CommitsTrunc: commitsTrunc,
139
+
TagsTrunc: tagsTrunc,
140
+
ForkInfo: *forkInfo,
141
+
BranchesTrunc: branchesTrunc,
142
+
EmailToDidOrHandle: EmailToDidOrHandle(s, emails),
148
+
repoInfo repoinfo.RepoInfo,
150
+
f *FullyResolvedRepo,
151
+
us *knotclient.UnsignedClient,
152
+
w http.ResponseWriter,
154
+
) (*pages.ForkInfo, error) {
155
+
forkInfo := pages.ForkInfo{
156
+
IsFork: repoInfo.Source != nil,
157
+
Status: pages.UpToDate,
secret, err := db.GetRegistrationKey(s.db, f.Knot)
log.Printf("failed to get registration key for %s: %s", f.Knot, err)
s.pages.Notice(w, "resubmit-error", "Failed to create pull request. Try again later.")
132
-
// update the hidden tracking branch to latest
166
+
if !forkInfo.IsFork {
167
+
forkInfo.IsFork = false
168
+
return &forkInfo, nil
171
+
resp, err := us.Branches(repoInfo.Source.Did, repoInfo.Source.Name)
173
+
log.Println("failed to reach knotserver", err)
177
+
body, err := io.ReadAll(resp.Body)
179
+
log.Printf("Error reading forkResponse forkBody: %v", err)
183
+
var result types.RepoBranchesResponse
184
+
err = json.Unmarshal(body, &result)
186
+
log.Println("failed to parse forkResponse:", err)
190
+
var contains = false
191
+
for _, branch := range result.Branches {
192
+
if branch.Name == f.Ref {
198
+
if contains == false {
199
+
forkInfo.Status = pages.MissingBranch
200
+
return &forkInfo, nil
signedClient, err := knotclient.NewSignedClient(f.Knot, secret, s.config.Core.Dev)
log.Printf("failed to create signed client for %s: %s", f.Knot, err)
136
-
s.pages.Notice(w, "resubmit-error", "Failed to create pull request. Try again later.")
newHiddenRefResp, err := signedClient.NewHiddenRef(user.Did, repoInfo.Name, f.Ref, f.Ref)
if err != nil || newHiddenRefResp.StatusCode != http.StatusNoContent {
log.Printf("failed to update tracking branch: %s", err)
142
-
s.pages.Notice(w, "resubmit-error", "Failed to create pull request. Try again later.")
hiddenRef := fmt.Sprintf("hidden/%s/%s", f.Ref, f.Ref)
comparison, err := us.Compare(user.Did, repoInfo.Name, f.Ref, hiddenRef)
148
-
log.Printf("failed to compare branches: %s", err)
149
-
s.pages.Notice(w, "resubmit-error", err.Error())
218
+
log.Printf("failed to compare branches '%s' and '%s': %s", f.Ref, hiddenRef, err)
222
+
if len(comparison.FormatPatch) == 0 {
223
+
return &forkInfo, nil
226
+
var isAncestor types.AncestorCheckResponse
227
+
forkSyncableResp, err := signedClient.RepoForkSyncable(user.Did, string(f.RepoAt), repoInfo.Name, f.Ref, hiddenRef)
229
+
log.Printf("failed to check if fork is syncable: %s", err)
151
-
log.Println(comparison)
153
-
s.pages.RepoIndexPage(w, pages.RepoIndexParams{
154
-
LoggedInUser: user,
155
-
RepoInfo: repoInfo,
157
-
RepoIndexResponse: result,
158
-
CommitsTrunc: commitsTrunc,
159
-
TagsTrunc: tagsTrunc,
160
-
BranchesTrunc: branchesTrunc,
161
-
EmailToDidOrHandle: EmailToDidOrHandle(s, emails),
233
+
if err := json.NewDecoder(forkSyncableResp.Body).Decode(&isAncestor); err != nil {
234
+
log.Printf("failed to decode 'isAncestor': %s", err)
238
+
if isAncestor.IsAncestor {
239
+
forkInfo.Status = pages.FastForwardable
241
+
forkInfo.Status = pages.Conflict
244
+
return &forkInfo, nil
func (s *State) RepoLog(w http.ResponseWriter, r *http.Request) {