Optimize and unit test Issue_ReplaceLabels (#1080)

This commit is contained in:
Ethan Koenig
2017-02-27 20:35:55 -05:00
committed by Lunny Xiao
parent a201977590
commit cf80e19157
3 changed files with 57 additions and 30 deletions

View File

@ -476,31 +476,24 @@ func (issue *Issue) ReplaceLabels(labels []*Label, doer *User) (err error) {
sort.Sort(labelSorter(issue.Labels))
var toAdd, toRemove []*Label
for _, l := range labels {
var exist bool
for _, oriLabel := range issue.Labels {
if oriLabel.ID == l.ID {
exist = true
break
}
}
if !exist {
toAdd = append(toAdd, l)
}
}
for _, oriLabel := range issue.Labels {
var exist bool
for _, l := range labels {
if oriLabel.ID == l.ID {
exist = true
break
}
}
if !exist {
toRemove = append(toRemove, oriLabel)
addIndex, removeIndex := 0, 0
for addIndex < len(labels) && removeIndex < len(issue.Labels) {
addLabel := labels[addIndex]
removeLabel := issue.Labels[removeIndex]
if addLabel.ID == removeLabel.ID {
addIndex++
removeIndex++
} else if addLabel.ID < removeLabel.ID {
toAdd = append(toAdd, addLabel)
addIndex++
} else {
toRemove = append(toRemove, removeLabel)
removeIndex++
}
}
toAdd = append(toAdd, labels[addIndex:]...)
toRemove = append(toRemove, issue.Labels[removeIndex:]...)
if len(toAdd) > 0 {
if err = issue.addLabels(sess, toAdd, doer); err != nil {
@ -508,11 +501,9 @@ func (issue *Issue) ReplaceLabels(labels []*Label, doer *User) (err error) {
}
}
if len(toRemove) > 0 {
for _, l := range toRemove {
if err = issue.removeLabel(sess, doer, l); err != nil {
return fmt.Errorf("removeLabel: %v", err)
}
for _, l := range toRemove {
if err = issue.removeLabel(sess, doer, l); err != nil {
return fmt.Errorf("removeLabel: %v", err)
}
}