Skip to content

Commit

Permalink
Decrement Fork Num when converting from Fork
Browse files Browse the repository at this point in the history
When converting repositories from forks to normal the root NumFork needs to be
decremented too.

Fix go-gitea#17026

Signed-off-by: Andrew Thornton <[email protected]>
  • Loading branch information
zeripath committed Sep 13, 2021
1 parent 8af7a21 commit 05f4fc4
Show file tree
Hide file tree
Showing 3 changed files with 39 additions and 4 deletions.
6 changes: 6 additions & 0 deletions models/repo.go
Original file line number Diff line number Diff line change
Expand Up @@ -1209,6 +1209,12 @@ func IncrementRepoForkNum(ctx DBContext, repoID int64) error {
return err
}

// DecrementRepoForkNum decrement repository fork number
func DecrementRepoForkNum(ctx DBContext, repoID int64) error {
_, err := ctx.e.Exec("UPDATE `repository` SET num_forks=num_forks-1 WHERE id=?", repoID)
return err
}

// ChangeRepositoryName changes all corresponding setting from old repository name to new one.
func ChangeRepositoryName(doer *User, repo *Repository, newRepoName string) (err error) {
oldRepoName := repo.Name
Expand Down
31 changes: 31 additions & 0 deletions modules/repository/fork.go
Original file line number Diff line number Diff line change
Expand Up @@ -109,3 +109,34 @@ func ForkRepository(doer, owner *models.User, opts models.ForkRepoOptions) (_ *m

return repo, nil
}

// ConvertForkToNormalRepository convert the provided repo from a forked repo to normal repo
func ConvertForkToNormalRepository(repo *models.Repository) error {
err := models.WithTx(func(ctx models.DBContext) error {
repo, err := models.GetRepositoryByIDCtx(ctx, repo.ID)
if err != nil {
return err
}

if !repo.IsFork {
return nil
}

if err := models.DecrementRepoForkNum(ctx, repo.ForkID); err != nil {
log.Error("Unable to decrement repo fork num for old root repo %d of repository %-v whilst converting from fork. Error: %v", repo.ForkID, repo, err)
return err
}

repo.IsFork = false
repo.ForkID = 0

if err := models.UpdateRepositoryCtx(ctx, repo, false); err != nil {
log.Error("Unable to update repository %-v whilst converting from fork. Error: %v", repo, err)
return err
}

return nil
})

return err
}
6 changes: 2 additions & 4 deletions routers/web/repo/setting.go
Original file line number Diff line number Diff line change
Expand Up @@ -555,10 +555,8 @@ func SettingsPost(ctx *context.Context) {
return
}

repo.IsFork = false
repo.ForkID = 0
if err := models.UpdateRepository(repo, false); err != nil {
log.Error("Unable to update repository %-v whilst converting from fork", repo)
if err := repository.ConvertForkToNormalRepository(repo); err != nil {
log.Error("Unable to convert repository %-v from fork. Error: %v", repo, err)
ctx.ServerError("Convert Fork", err)
return
}
Expand Down

0 comments on commit 05f4fc4

Please sign in to comment.