Skip to content

Commit

Permalink
Ensure topics added using the API are added to the repository (#13285) (
Browse files Browse the repository at this point in the history
#13302)

Partial Backport #13285

Fix #12426

Signed-off-by: Andrew Thornton <art27@cantab.net>

Co-authored-by: Lauris BH <lauris@nix.lv>
  • Loading branch information
zeripath and lafriks authored Oct 26, 2020
1 parent 5178aa2 commit 3d272b8
Showing 1 changed file with 30 additions and 3 deletions.
33 changes: 30 additions & 3 deletions models/topic.go
Original file line number Diff line number Diff line change
Expand Up @@ -197,10 +197,13 @@ func FindTopics(opts *FindTopicOptions) (topics []*Topic, err error) {

// GetRepoTopicByName retrives topic from name for a repo if it exist
func GetRepoTopicByName(repoID int64, topicName string) (*Topic, error) {
return getRepoTopicByName(x, repoID, topicName)
}
func getRepoTopicByName(e Engine, repoID int64, topicName string) (*Topic, error) {
var cond = builder.NewCond()
var topic Topic
cond = cond.And(builder.Eq{"repo_topic.repo_id": repoID}).And(builder.Eq{"topic.name": topicName})
sess := x.Table("topic").Where(cond)
sess := e.Table("topic").Where(cond)
sess.Join("INNER", "repo_topic", "repo_topic.topic_id = topic.id")
has, err := sess.Get(&topic)
if has {
Expand All @@ -211,7 +214,13 @@ func GetRepoTopicByName(repoID int64, topicName string) (*Topic, error) {

// AddTopic adds a topic name to a repository (if it does not already have it)
func AddTopic(repoID int64, topicName string) (*Topic, error) {
topic, err := GetRepoTopicByName(repoID, topicName)
sess := x.NewSession()
defer sess.Close()
if err := sess.Begin(); err != nil {
return nil, err
}

topic, err := getRepoTopicByName(sess, repoID, topicName)
if err != nil {
return nil, err
}
Expand All @@ -220,7 +229,25 @@ func AddTopic(repoID int64, topicName string) (*Topic, error) {
return topic, nil
}

return addTopicByNameToRepo(x, repoID, topicName)
topic, err = addTopicByNameToRepo(sess, repoID, topicName)
if err != nil {
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 {
return nil, err
}

return topic, sess.Commit()
}

// DeleteTopic removes a topic name from a repository (if it has it)
Expand Down

0 comments on commit 3d272b8

Please sign in to comment.