mirror of
https://github.com/vbatts/go-mtree.git
synced 2025-10-04 12:31:00 +00:00
compare: export official way to modify InodeDelta.Diff
At the moment, filtering out keyword changes from an InodeDelta after doing Compare is a little complicated and error-prone. The simplest solution is to allow for callers to access a pointer to the underlying slice so it can be modified properly. The filtering logic in the gomtree command-line implicitly depends on the behaviour of InodeDelta.Diff -- DiffPtr would be a far more appropriate replacement. Signed-off-by: Aleksa Sarai <cyphar@cyphar.com>
This commit is contained in:
parent
d02f298ad4
commit
02df712987
2 changed files with 20 additions and 13 deletions
|
@ -6,6 +6,7 @@ import (
|
|||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"slices"
|
||||
"strings"
|
||||
|
||||
cli "github.com/urfave/cli/v2"
|
||||
|
@ -463,19 +464,14 @@ loop:
|
|||
}
|
||||
|
||||
// Only filter out the size keyword.
|
||||
// NOTE: This currently takes advantage of the fact the
|
||||
// diff.Diff() returns the actual slice to diff.keys.
|
||||
keys := diff.Diff()
|
||||
for idx, k := range keys {
|
||||
// Delete the key if it's "size". Unfortunately in Go you
|
||||
// can't delete from a slice without reassigning it. So we
|
||||
// just overwrite it with the last value.
|
||||
if k.Name() == "size" {
|
||||
if len(keys) < 2 {
|
||||
continue loop
|
||||
}
|
||||
keys[idx] = keys[len(keys)-1]
|
||||
}
|
||||
keys := diff.DiffPtr()
|
||||
*keys = slices.DeleteFunc(*keys, func(kd mtree.KeyDelta) bool {
|
||||
return kd.Name() == "size"
|
||||
})
|
||||
// If there are no key deltas left after filtering, the entry
|
||||
// should be filtered out entirely.
|
||||
if len(*keys) == 0 {
|
||||
continue loop
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue