forked from tangled.org/core
Monorepo for Tangled

appview: state: fix forking across knots

anirudh.fi ae2e9431 e2dce639

verified
Changed files
+16 -6
appview
state
+16 -6
appview/state/repo.go
··· 453 453 breadcrumbs = append(breadcrumbs, []string{elem, fmt.Sprintf("%s/%s", breadcrumbs[idx][1], elem)}) 454 454 } 455 455 } 456 - 456 + 457 457 showRendered := false 458 458 renderToggle := false 459 459 ··· 461 461 renderToggle = true 462 462 showRendered = r.URL.Query().Get("code") != "true" 463 463 } 464 - 464 + 465 465 user := s.auth.GetUser(r) 466 466 s.pages.RepoBlob(w, pages.RepoBlobParams{ 467 467 LoggedInUser: user, ··· 1698 1698 1699 1699 forkName := fmt.Sprintf("%s", f.RepoName) 1700 1700 1701 + // this check is *only* to see if the forked repo name already exists 1702 + // in the user's account. 1701 1703 existingRepo, err := db.GetRepo(s.db, user.Did, f.RepoName) 1702 - if err == nil && existingRepo != nil { 1704 + if err != nil { 1705 + if errors.Is(err, sql.ErrNoRows) { 1706 + // no existing repo with this name found, we can use the name as is 1707 + } else { 1708 + log.Println("error fetching existing repo from db", err) 1709 + s.pages.Notice(w, "repo", "Failed to fork this repository. Try again later.") 1710 + return 1711 + } 1712 + } else if existingRepo != nil { 1713 + // repo with this name already exists, append random string 1703 1714 forkName = fmt.Sprintf("%s-%s", forkName, randomString(3)) 1704 1715 } 1705 - 1706 1716 secret, err := db.GetRegistrationKey(s.db, knot) 1707 1717 if err != nil { 1708 1718 s.pages.Notice(w, "repo", fmt.Sprintf("No registration key found for knot %s.", knot)) ··· 1711 1721 1712 1722 client, err := NewSignedClient(knot, secret, s.config.Dev) 1713 1723 if err != nil { 1714 - s.pages.Notice(w, "repo", "Failed to connect to knot server.") 1724 + s.pages.Notice(w, "repo", "Failed to reach knot server.") 1715 1725 return 1716 1726 } 1717 1727 ··· 1721 1731 } else { 1722 1732 uri = "https" 1723 1733 } 1724 - sourceUrl := fmt.Sprintf("%s://%s/%s/%s", uri, knot, f.OwnerDid(), f.RepoName) 1734 + sourceUrl := fmt.Sprintf("%s://%s/%s/%s", uri, f.Knot, f.OwnerDid(), f.RepoName) 1725 1735 sourceAt := f.RepoAt.String() 1726 1736 1727 1737 rkey := s.TID()