Skip to content

Commit

Permalink
Fix topics deleted via API not being deleted in org page (go-gitea#24825
Browse files Browse the repository at this point in the history
)

The topics are saved in the `repo_topic` table.
They are also saved directly in the `repository` table.

Before this PR, only `AddTopic` and `SaveTopics` made sure the `topics`
field in the `repository` table was synced with the `repo_topic` table.

This PR makes sure `GenerateTopics` and `DeleteTopic`
also sync the `topics` in the repository table.

`RemoveTopicsFromRepo` doesn't need to sync the data
as it is only used to delete a repository.

Fixes go-gitea#24820
  • Loading branch information
yardenshoham authored and GiteaBot committed May 21, 2023
1 parent b369ed5 commit 7daa356
Showing 1 changed file with 25 additions and 20 deletions.
45 changes: 25 additions & 20 deletions models/repo/topic.go
Original file line number Diff line number Diff line change
Expand Up @@ -253,16 +253,7 @@ func AddTopic(repoID int64, topicName string) (*Topic, error) {
return nil, err
}

topicNames := make([]string, 0, 25)
if err := sess.Select("name").Table("topic").
Join("INNER", "repo_topic", "repo_topic.topic_id = topic.id").
Where("repo_topic.repo_id = ?", repoID).Desc("topic.repo_count").Find(&topicNames); err != nil {
return nil, err
}

if _, err := sess.ID(repoID).Cols("topics").Update(&Repository{
Topics: topicNames,
}); err != nil {
if err = syncTopicsInRepository(sess, repoID); err != nil {
return nil, err
}

Expand All @@ -281,6 +272,11 @@ func DeleteTopic(repoID int64, topicName string) (*Topic, error) {
}

err = removeTopicFromRepo(db.DefaultContext, repoID, topic)
if err != nil {
return nil, err
}

err = syncTopicsInRepository(db.GetEngine(db.DefaultContext), repoID)

return topic, err
}
Expand Down Expand Up @@ -347,16 +343,7 @@ func SaveTopics(repoID int64, topicNames ...string) error {
}
}

topicNames = make([]string, 0, 25)
if err := sess.Table("topic").Cols("name").
Join("INNER", "repo_topic", "repo_topic.topic_id = topic.id").
Where("repo_topic.repo_id = ?", repoID).Desc("topic.repo_count").Find(&topicNames); err != nil {
return err
}

if _, err := sess.ID(repoID).Cols("topics").Update(&Repository{
Topics: topicNames,
}); err != nil {
if err := syncTopicsInRepository(sess, repoID); err != nil {
return err
}

Expand All @@ -370,5 +357,23 @@ func GenerateTopics(ctx context.Context, templateRepo, generateRepo *Repository)
return err
}
}

return syncTopicsInRepository(db.GetEngine(ctx), generateRepo.ID)
}

// syncTopicsInRepository makes sure topics in the topics table are copied into the topics field of the repository
func syncTopicsInRepository(sess db.Engine, repoID int64) error {
topicNames := make([]string, 0, 25)
if err := sess.Table("topic").Cols("name").
Join("INNER", "repo_topic", "repo_topic.topic_id = topic.id").
Where("repo_topic.repo_id = ?", repoID).Desc("topic.repo_count").Find(&topicNames); err != nil {
return err
}

if _, err := sess.ID(repoID).Cols("topics").Update(&Repository{
Topics: topicNames,
}); err != nil {
return err
}
return nil
}

0 comments on commit 7daa356

Please sign in to comment.