forked from TrueCloudLab/restic
Snapshot: Add AddTags()
and RemoveTags()
Both prevent duplicate tags.
This commit is contained in:
parent
f6a258b4a8
commit
208edaa3d1
2 changed files with 40 additions and 28 deletions
|
@ -62,40 +62,18 @@ func changeTags(repo *repository.Repository, snapshotID restic.ID, setTags, addT
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(setTags) != 0 {
|
if len(setTags) != 0 {
|
||||||
// Setting the tag to an empty string really means no more tags.
|
// Setting the tag to an empty string really means no tags.
|
||||||
if len(setTags) == 1 && setTags[0] == "" {
|
if len(setTags) == 1 && setTags[0] == "" {
|
||||||
setTags = nil
|
setTags = nil
|
||||||
}
|
}
|
||||||
sn.Tags = setTags
|
sn.Tags = setTags
|
||||||
changed = true
|
changed = true
|
||||||
} else {
|
} else {
|
||||||
for _, add := range addTags {
|
changed = sn.AddTags(addTags)
|
||||||
found := false
|
if sn.RemoveTags(removeTags) {
|
||||||
for _, tag := range sn.Tags {
|
|
||||||
if tag == add {
|
|
||||||
found = true
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if !found {
|
|
||||||
sn.Tags = append(sn.Tags, add)
|
|
||||||
changed = true
|
changed = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for _, remove := range removeTags {
|
|
||||||
for i, tag := range sn.Tags {
|
|
||||||
if tag == remove {
|
|
||||||
// https://github.com/golang/go/wiki/SliceTricks
|
|
||||||
sn.Tags[i] = sn.Tags[len(sn.Tags)-1]
|
|
||||||
sn.Tags[len(sn.Tags)-1] = ""
|
|
||||||
sn.Tags = sn.Tags[:len(sn.Tags)-1]
|
|
||||||
|
|
||||||
changed = true
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if changed {
|
if changed {
|
||||||
// Save the new snapshot.
|
// Save the new snapshot.
|
||||||
|
|
|
@ -73,8 +73,7 @@ func LoadAllSnapshots(repo Repository) (snapshots []*Snapshot, err error) {
|
||||||
|
|
||||||
snapshots = append(snapshots, sn)
|
snapshots = append(snapshots, sn)
|
||||||
}
|
}
|
||||||
|
return
|
||||||
return snapshots, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (sn Snapshot) String() string {
|
func (sn Snapshot) String() string {
|
||||||
|
@ -99,6 +98,41 @@ func (sn *Snapshot) fillUserInfo() error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AddTags adds the given tags to the snapshots tags, preventing duplicates.
|
||||||
|
// It returns true if any changes were made.
|
||||||
|
func (sn *Snapshot) AddTags(addTags []string) (changed bool) {
|
||||||
|
nextTag:
|
||||||
|
for _, add := range addTags {
|
||||||
|
for _, tag := range sn.Tags {
|
||||||
|
if tag == add {
|
||||||
|
continue nextTag
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sn.Tags = append(sn.Tags, add)
|
||||||
|
changed = true
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// RemoveTags removes the given tags from the snapshots tags and
|
||||||
|
// returns true if any changes were made.
|
||||||
|
func (sn *Snapshot) RemoveTags(removeTags []string) (changed bool) {
|
||||||
|
for _, remove := range removeTags {
|
||||||
|
for i, tag := range sn.Tags {
|
||||||
|
if tag == remove {
|
||||||
|
// https://github.com/golang/go/wiki/SliceTricks
|
||||||
|
sn.Tags[i] = sn.Tags[len(sn.Tags)-1]
|
||||||
|
sn.Tags[len(sn.Tags)-1] = ""
|
||||||
|
sn.Tags = sn.Tags[:len(sn.Tags)-1]
|
||||||
|
|
||||||
|
changed = true
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// HasTags returns true if the snapshot has all the tags.
|
// HasTags returns true if the snapshot has all the tags.
|
||||||
func (sn *Snapshot) HasTags(tags []string) bool {
|
func (sn *Snapshot) HasTags(tags []string) bool {
|
||||||
nextTag:
|
nextTag:
|
||||||
|
|
Loading…
Reference in a new issue