Skip to content

Commit 912ce27

Browse files
authored
Update topics repo count when deleting repository (#10081)
1 parent b3549bb commit 912ce27

File tree

2 files changed

+27
-3
lines changed

2 files changed

+27
-3
lines changed

models/repo.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1910,6 +1910,12 @@ func DeleteRepository(doer *User, uid, repoID int64) error {
19101910
return err
19111911
}
19121912

1913+
if len(repo.Topics) > 0 {
1914+
if err = removeTopicsFromRepo(sess, repo.ID); err != nil {
1915+
return err
1916+
}
1917+
}
1918+
19131919
// FIXME: Remove repository files should be executed after transaction succeed.
19141920
repoPath := repo.repoPath(sess)
19151921
removeAllWithNotice(sess, "Delete repository files", repoPath)

models/topic.go

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,7 @@ func addTopicByNameToRepo(e Engine, repoID int64, topicName string) (*Topic, err
129129
}
130130

131131
// removeTopicFromRepo remove a topic from a repo and decrements the topic repo count
132-
func removeTopicFromRepo(repoID int64, topic *Topic, e Engine) error {
132+
func removeTopicFromRepo(e Engine, repoID int64, topic *Topic) error {
133133
topic.RepoCount--
134134
if _, err := e.ID(topic.ID).Cols("repo_count").Update(topic); err != nil {
135135
return err
@@ -145,6 +145,24 @@ func removeTopicFromRepo(repoID int64, topic *Topic, e Engine) error {
145145
return nil
146146
}
147147

148+
// removeTopicsFromRepo remove all topics from the repo and decrements respective topics repo count
149+
func removeTopicsFromRepo(e Engine, repoID int64) error {
150+
_, err := e.Where(
151+
builder.In("id",
152+
builder.Select("topic_id").From("repo_topic").Where(builder.Eq{"repo_id": repoID}),
153+
),
154+
).Cols("repo_count").SetExpr("repo_count", "repo_count-1").Update(&Topic{})
155+
if err != nil {
156+
return err
157+
}
158+
159+
if _, err = e.Delete(&RepoTopic{RepoID: repoID}); err != nil {
160+
return err
161+
}
162+
163+
return nil
164+
}
165+
148166
// FindTopicOptions represents the options when fdin topics
149167
type FindTopicOptions struct {
150168
RepoID int64
@@ -217,7 +235,7 @@ func DeleteTopic(repoID int64, topicName string) (*Topic, error) {
217235
return nil, nil
218236
}
219237

220-
err = removeTopicFromRepo(repoID, topic, x)
238+
err = removeTopicFromRepo(x, repoID, topic)
221239

222240
return topic, err
223241
}
@@ -278,7 +296,7 @@ func SaveTopics(repoID int64, topicNames ...string) error {
278296
}
279297

280298
for _, topic := range removeTopics {
281-
err := removeTopicFromRepo(repoID, topic, sess)
299+
err := removeTopicFromRepo(sess, repoID, topic)
282300
if err != nil {
283301
return err
284302
}

0 commit comments

Comments
 (0)