forked from tangled.org/core
this repo has no description

appview: state: fix forking across knots

anirudh.fi ae2e9431 e2dce639

verified
Changed files
+16 -6
appview
state
+16 -6
appview/state/repo.go
···
breadcrumbs = append(breadcrumbs, []string{elem, fmt.Sprintf("%s/%s", breadcrumbs[idx][1], elem)})
}
}
-
+
showRendered := false
renderToggle := false
···
renderToggle = true
showRendered = r.URL.Query().Get("code") != "true"
}
-
+
user := s.auth.GetUser(r)
s.pages.RepoBlob(w, pages.RepoBlobParams{
LoggedInUser: user,
···
forkName := fmt.Sprintf("%s", f.RepoName)
+
// this check is *only* to see if the forked repo name already exists
+
// in the user's account.
existingRepo, err := db.GetRepo(s.db, user.Did, f.RepoName)
-
if err == nil && existingRepo != nil {
+
if err != nil {
+
if errors.Is(err, sql.ErrNoRows) {
+
// no existing repo with this name found, we can use the name as is
+
} else {
+
log.Println("error fetching existing repo from db", err)
+
s.pages.Notice(w, "repo", "Failed to fork this repository. Try again later.")
+
return
+
}
+
} else if existingRepo != nil {
+
// repo with this name already exists, append random string
forkName = fmt.Sprintf("%s-%s", forkName, randomString(3))
-
secret, err := db.GetRegistrationKey(s.db, knot)
if err != nil {
s.pages.Notice(w, "repo", fmt.Sprintf("No registration key found for knot %s.", knot))
···
client, err := NewSignedClient(knot, secret, s.config.Dev)
if err != nil {
-
s.pages.Notice(w, "repo", "Failed to connect to knot server.")
+
s.pages.Notice(w, "repo", "Failed to reach knot server.")
return
···
} else {
uri = "https"
-
sourceUrl := fmt.Sprintf("%s://%s/%s/%s", uri, knot, f.OwnerDid(), f.RepoName)
+
sourceUrl := fmt.Sprintf("%s://%s/%s/%s", uri, f.Knot, f.OwnerDid(), f.RepoName)
sourceAt := f.RepoAt.String()
rkey := s.TID()