Skip to content

Commit

Permalink
Decrement Fork Num when converting from Fork (go-gitea#17035)
Browse files Browse the repository at this point in the history
Backport go-gitea#17035

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 14, 2021
1 parent 659b946 commit b11aff4
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 @@ -1217,6 +1217,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, oldRepo *models.Repository, name,

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 @@ -538,10 +538,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 b11aff4

Please sign in to comment.