Skip to content

Commit 0e448fb

Browse files
authored
Decrement Fork Num when converting from Fork (#17035) (#17046)
Backport #17035 When converting repositories from forks to normal the root NumFork needs to be decremented too. Fix #17026 Signed-off-by: Andrew Thornton <[email protected]>
1 parent 659b946 commit 0e448fb

File tree

3 files changed

+39
-4
lines changed

3 files changed

+39
-4
lines changed

models/repo.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1217,6 +1217,12 @@ func IncrementRepoForkNum(ctx DBContext, repoID int64) error {
12171217
return err
12181218
}
12191219

1220+
// DecrementRepoForkNum decrement repository fork number
1221+
func DecrementRepoForkNum(ctx DBContext, repoID int64) error {
1222+
_, err := ctx.e.Exec("UPDATE `repository` SET num_forks=num_forks-1 WHERE id=?", repoID)
1223+
return err
1224+
}
1225+
12201226
// ChangeRepositoryName changes all corresponding setting from old repository name to new one.
12211227
func ChangeRepositoryName(doer *User, repo *Repository, newRepoName string) (err error) {
12221228
oldRepoName := repo.Name

modules/repository/fork.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,3 +109,34 @@ func ForkRepository(doer, owner *models.User, oldRepo *models.Repository, name,
109109

110110
return repo, nil
111111
}
112+
113+
// ConvertForkToNormalRepository convert the provided repo from a forked repo to normal repo
114+
func ConvertForkToNormalRepository(repo *models.Repository) error {
115+
err := models.WithTx(func(ctx models.DBContext) error {
116+
repo, err := models.GetRepositoryByIDCtx(ctx, repo.ID)
117+
if err != nil {
118+
return err
119+
}
120+
121+
if !repo.IsFork {
122+
return nil
123+
}
124+
125+
if err := models.DecrementRepoForkNum(ctx, repo.ForkID); err != nil {
126+
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)
127+
return err
128+
}
129+
130+
repo.IsFork = false
131+
repo.ForkID = 0
132+
133+
if err := models.UpdateRepositoryCtx(ctx, repo, false); err != nil {
134+
log.Error("Unable to update repository %-v whilst converting from fork. Error: %v", repo, err)
135+
return err
136+
}
137+
138+
return nil
139+
})
140+
141+
return err
142+
}

routers/web/repo/setting.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -538,10 +538,8 @@ func SettingsPost(ctx *context.Context) {
538538
return
539539
}
540540

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

0 commit comments

Comments
 (0)