diff --git a/keywords.go b/keywords.go index 88220a5..ffc01ba 100644 --- a/keywords.go +++ b/keywords.go @@ -165,7 +165,7 @@ var ( BsdKeywords = []string{ "cksum", "device", - "flags", + "flags", // this one is really mostly BSD specific ... "ignore", "gid", "gname", @@ -226,6 +226,8 @@ var ( "sha512": hasherKeywordFunc("sha512digest", sha512.New), // The SHA512 message digest of the file "sha512digest": hasherKeywordFunc("sha512digest", sha512.New), // A synonym for `sha512` + "flags": flagsKeywordFunc, // NOTE: this is a noop, but here to support the presence of the "flags" keyword. + // This is not an upstreamed keyword, but used to vary from "time", as tar // archives do not store nanosecond precision. So comparing on "time" will // be only seconds level accurate. diff --git a/keywords_bsd.go b/keywords_bsd.go new file mode 100644 index 0000000..e81d5c1 --- /dev/null +++ b/keywords_bsd.go @@ -0,0 +1,15 @@ +// +build darwin freebsd netbsd openbsd + +package mtree + +import ( + "io" + "os" +) + +var ( + flagsKeywordFunc = func(path string, info os.FileInfo, r io.Reader) (string, error) { + // ideally this will pull in from here https://www.freebsd.org/cgi/man.cgi?query=chflags&sektion=2 + return "", nil + } +) diff --git a/keywords_linux.go b/keywords_linux.go index daaa9a9..bac97ad 100644 --- a/keywords_linux.go +++ b/keywords_linux.go @@ -14,6 +14,11 @@ import ( ) var ( + // this is bsd specific https://www.freebsd.org/cgi/man.cgi?query=chflags&sektion=2 + flagsKeywordFunc = func(path string, info os.FileInfo, r io.Reader) (string, error) { + return "", nil + } + unameKeywordFunc = func(path string, info os.FileInfo, r io.Reader) (string, error) { if hdr, ok := info.Sys().(*tar.Header); ok { return fmt.Sprintf("uname=%s", hdr.Uname), nil