// Munge is the workhorse the will actually make updates to the PR func (p *PathLabelMunger) Munge(obj *github.MungeObject) { if !obj.IsPR() { return } files, err := obj.ListFiles() if err != nil { return } needsLabels := sets.NewString() for _, f := range files { for _, lm := range p.labelMap { if lm.regexp.MatchString(*f.Filename) { needsLabels.Insert(lm.label) } } } // This is all labels on the issue that the path munger controls hasLabels := obj.LabelSet().Intersection(p.allLabels) missingLabels := needsLabels.Difference(hasLabels) if missingLabels.Len() != 0 { obj.AddLabels(needsLabels.List()) } extraLabels := hasLabels.Difference(needsLabels) for _, label := range extraLabels.List() { creator := obj.LabelCreator(label) if creator == botName { obj.RemoveLabel(label) } } }