Skip to content

Commit 0a542dd

Browse files
authored
Decrement Fork Num when converting from Fork (#17035)
When converting repositories from forks to normal the root NumFork needs to be decremented too. Fix #17026 Signed-off-by: Andrew Thornton <art27@cantab.net>
1 parent 26ef180 commit 0a542dd

File tree

3 files changed

+39
-4
lines changed

3 files changed

+39
-4
lines changed

models/repo.go

+6
Original file line numberDiff line numberDiff line change
@@ -1209,6 +1209,12 @@ func IncrementRepoForkNum(ctx DBContext, repoID int64) error {
12091209
return err
12101210
}
12111211

1212+
// DecrementRepoForkNum decrement repository fork number
1213+
func DecrementRepoForkNum(ctx DBContext, repoID int64) error {
1214+
_, err := ctx.e.Exec("UPDATE `repository` SET num_forks=num_forks-1 WHERE id=?", repoID)
1215+
return err
1216+
}
1217+
12121218
// ChangeRepositoryName changes all corresponding setting from old repository name to new one.
12131219
func ChangeRepositoryName(doer *User, repo *Repository, newRepoName string) (err error) {
12141220
oldRepoName := repo.Name

modules/repository/fork.go

+31
Original file line numberDiff line numberDiff line change
@@ -132,3 +132,34 @@ func ForkRepository(doer, owner *models.User, opts models.ForkRepoOptions) (_ *m
132132

133133
return repo, nil
134134
}
135+
136+
// ConvertForkToNormalRepository convert the provided repo from a forked repo to normal repo
137+
func ConvertForkToNormalRepository(repo *models.Repository) error {
138+
err := models.WithTx(func(ctx models.DBContext) error {
139+
repo, err := models.GetRepositoryByIDCtx(ctx, repo.ID)
140+
if err != nil {
141+
return err
142+
}
143+
144+
if !repo.IsFork {
145+
return nil
146+
}
147+
148+
if err := models.DecrementRepoForkNum(ctx, repo.ForkID); err != nil {
149+
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)
150+
return err
151+
}
152+
153+
repo.IsFork = false
154+
repo.ForkID = 0
155+
156+
if err := models.UpdateRepositoryCtx(ctx, repo, false); err != nil {
157+
log.Error("Unable to update repository %-v whilst converting from fork. Error: %v", repo, err)
158+
return err
159+
}
160+
161+
return nil
162+
})
163+
164+
return err
165+
}

routers/web/repo/setting.go

+2-4
Original file line numberDiff line numberDiff line change
@@ -555,10 +555,8 @@ func SettingsPost(ctx *context.Context) {
555555
return
556556
}
557557

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

0 commit comments

Comments
 (0)