diff --git a/appview/state/repo.go b/appview/state/repo.go index 0753c64..908c2a2 100644 --- a/appview/state/repo.go +++ b/appview/state/repo.go @@ -1698,15 +1698,21 @@ func (s *State) ForkRepo(w http.ResponseWriter, r *http.Request) { forkName := fmt.Sprintf("%s", f.RepoName) - existingRepo, err := db.GetRepo(s.db, f.OwnerDid(), f.RepoName) - if err == nil && existingRepo != nil { + // 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 { + 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)) - } else if err != nil { - log.Println("error fetching existing repo from db", err) - s.pages.Notice(w, "repo", "Failed to fork this repository. Try again later.") - return } - 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)) @@ -1725,7 +1731,7 @@ func (s *State) ForkRepo(w http.ResponseWriter, r *http.Request) { } else { uri = "https" } - sourceUrl := fmt.Sprintf("%s://%s/%s/%s", uri, existingRepo.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()