Skip to content

Commit 05f4fc4

Browse files
committed
Decrement Fork Num when converting from Fork
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 8af7a21 commit 05f4fc4

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
@@ -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

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,3 +109,34 @@ func ForkRepository(doer, owner *models.User, opts models.ForkRepoOptions) (_ *m
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
@@ -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)