walk: directory is expected to be walked. A file is not.

Fixes: #166

Signed-off-by: Vincent Batts <vbatts@hashbangbash.com>
This commit is contained in:
Vincent Batts 2022-04-23 13:35:52 -04:00
parent b9356e6843
commit 5d7f6c36e0
Signed by: vbatts
GPG Key ID: 10937E57733F1362
2 changed files with 27 additions and 0 deletions

22
test/cli/0011.sh Normal file
View File

@ -0,0 +1,22 @@
#!/bin/bash
set -e
name=$(basename $0)
root="$(dirname $(dirname $(dirname $0)))"
gomtree=$(go run ${root}/test/realpath/main.go ${root}/gomtree)
t=$(mktemp -d /tmp/go-mtree.XXXXXX)
echo "[${name}] Running in ${t}"
## testing comparing two files
pushd ${root}
mkdir -p ${t}/
touch ${t}/foo
## can not walk a file. We're expecting a directory.
## https://github.com/vbatts/go-mtree/issues/166
! ${gomtree} -c -K uname,uid,gname,gid,type,nlink,link,mode,flags,xattr,xattrs,size,time,sha256 -p ${t}/foo
popd
rm -rf ${t}

View File

@ -33,6 +33,11 @@ func Walk(root string, excludes []ExcludeFunc, keywords []Keyword, fsEval FsEval
if fsEval == nil {
fsEval = DefaultFsEval{}
}
if info, err := os.Stat(root); err == nil {
if !info.IsDir() {
return nil, fmt.Errorf("%s: Not a directory", filepath.Base(root))
}
}
creator := dhCreator{DH: &DirectoryHierarchy{}, fs: fsEval}
// insert signature and metadata comments first (user, machine, tree, date)
for _, e := range signatureEntries(root) {