Change label management to rely on independent rest calls

This commit is contained in:
Camiel de Vleeschauwer
2024-06-11 22:57:31 +12:00
committed by Manuel Rüger
parent d168ec8b14
commit 4a3a69b997
3 changed files with 135 additions and 12 deletions

65
main.go
View File

@@ -5,6 +5,7 @@ import (
"fmt"
"os"
"path/filepath"
"slices"
"strings"
"time"
@@ -522,6 +523,8 @@ func processFile(
log.Fatal(err)
}
updateLabels(err, api, target, meta)
if cCtx.Bool("edit-lock") {
log.Infof(
nil,
@@ -539,6 +542,68 @@ func processFile(
return target
}
func updateLabels(api *confluence.API, target *confluence.PageInfo, meta *mark.Meta) {
labelInfo, err := api.GetPageLabels(target, "global")
if err != nil {
log.Fatal(err)
}
log.Debug("Page Labels:")
log.Debug(labelInfo.Labels)
log.Debug("Meta Labels:")
log.Debug(meta.Labels)
delLabels := determineLabelsToRemove(labelInfo, meta)
log.Debug("Del Labels:")
log.Debug(delLabels)
addLabels := determineLabelsToAdd(meta, labelInfo)
log.Debug("Add Labels:")
log.Debug(addLabels)
if len(addLabels) > 0 {
_, err = api.AddPageLabels(target, addLabels)
if err != nil {
log.Fatal(err)
}
}
for _, label := range delLabels {
_, err = api.DeletePageLabel(target, label)
if err != nil {
log.Fatal(err)
}
}
}
// Page has label but label not in Metadata
func determineLabelsToRemove(labelInfo *confluence.LabelInfo, meta *mark.Meta) []string {
var labels []string
for _, label := range labelInfo.Labels {
if !slices.ContainsFunc(meta.Labels, func(metaLabel string) bool {
return strings.ToLower(metaLabel) == strings.ToLower(label.Name)
}) {
labels = append(labels, label.Name)
}
}
return labels
}
// Metadata has label but Page does not have it
func determineLabelsToAdd(meta *mark.Meta, labelInfo *confluence.LabelInfo) []string {
var labels []string
for _, metaLabel := range meta.Labels {
if !slices.ContainsFunc(labelInfo.Labels, func(label confluence.Label) bool {
return strings.ToLower(label.Name) == strings.ToLower(metaLabel)
}) {
labels = append(labels, metaLabel)
}
}
return labels
}
func configFilePath() string {
fp, err := os.UserConfigDir()
if err != nil {