mirror of
https://github.com/vbatts/go-mtree.git
synced 2024-11-26 01:55:39 +00:00
Merge pull request #74 from vbatts/fix_digest_symlink
keywords: fix xattrs for broken symlinks
This commit is contained in:
commit
8c6b32c842
2 changed files with 82 additions and 0 deletions
|
@ -59,6 +59,9 @@ var (
|
||||||
}
|
}
|
||||||
return strings.Join(klist, " "), nil
|
return strings.Join(klist, " "), nil
|
||||||
}
|
}
|
||||||
|
if !info.Mode().IsRegular() && !info.Mode().IsDir() {
|
||||||
|
return "", nil
|
||||||
|
}
|
||||||
|
|
||||||
xlist, err := xattr.List(path)
|
xlist, err := xattr.List(path)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
79
keywords_linux_test.go
Normal file
79
keywords_linux_test.go
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
// +build linux
|
||||||
|
|
||||||
|
package mtree
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/vbatts/go-mtree/xattr"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestXattr(t *testing.T) {
|
||||||
|
// a bit dirty to create/destory a directory in cwd, but often /tmp is
|
||||||
|
// mounted tmpfs and doesn't support xattrs
|
||||||
|
dir, err := ioutil.TempDir(".", "test.xattrs.")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
defer os.RemoveAll(dir)
|
||||||
|
fh, err := os.Create(filepath.Join(dir, "file"))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
fh.WriteString("howdy")
|
||||||
|
fh.Sync()
|
||||||
|
if _, err := fh.Seek(0, 0); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := os.Symlink("./no/such/path", filepath.Join(dir, "symlink")); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := xattr.Set(dir, "user.test", []byte("directory")); err != nil {
|
||||||
|
t.Skip(fmt.Sprintf("skipping: %q does not support xattrs", dir))
|
||||||
|
}
|
||||||
|
if err := xattr.Set(filepath.Join(dir, "file"), "user.test", []byte("regular file")); err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
dirstat, err := os.Lstat(dir)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
// Check the directory
|
||||||
|
str, err := xattrKeywordFunc(dir, dirstat, nil)
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
if str == "" {
|
||||||
|
t.Errorf("expected a keyval; got %q", str)
|
||||||
|
}
|
||||||
|
|
||||||
|
filestat, err := fh.Stat()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
// Check the regular file
|
||||||
|
str, err = xattrKeywordFunc(filepath.Join(dir, "file"), filestat, fh)
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
if str == "" {
|
||||||
|
t.Errorf("expected a keyval; got %q", str)
|
||||||
|
}
|
||||||
|
|
||||||
|
linkstat, err := os.Lstat(filepath.Join(dir, "symlink"))
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
// Check a broken symlink
|
||||||
|
_, err = xattrKeywordFunc(filepath.Join(dir, "symlink"), linkstat, nil)
|
||||||
|
if err != nil {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue