aboutsummaryrefslogtreecommitdiffstats
path: root/utils/merkletrie
diff options
context:
space:
mode:
Diffstat (limited to 'utils/merkletrie')
-rw-r--r--utils/merkletrie/difftree.go2
-rw-r--r--utils/merkletrie/filesystem/node.go4
-rw-r--r--utils/merkletrie/filesystem/node_test.go26
-rw-r--r--utils/merkletrie/internal/fsnoder/file.go2
4 files changed, 32 insertions, 2 deletions
diff --git a/utils/merkletrie/difftree.go b/utils/merkletrie/difftree.go
index 9f5145a..8090942 100644
--- a/utils/merkletrie/difftree.go
+++ b/utils/merkletrie/difftree.go
@@ -55,7 +55,7 @@ package merkletrie
// Here is a full list of all the cases that are similar and how to
// merge them together into more general cases. Each general case
// is labeled with an uppercase letter for further reference, and it
-// is followed by the pseudocode of the checks you have to perfrom
+// is followed by the pseudocode of the checks you have to perform
// on both noders to see if you are in such a case, the actions to
// perform (i.e. what changes to output) and how to advance the
// iterators of each tree to continue the comparison process.
diff --git a/utils/merkletrie/filesystem/node.go b/utils/merkletrie/filesystem/node.go
index f9a54d7..6c91f44 100644
--- a/utils/merkletrie/filesystem/node.go
+++ b/utils/merkletrie/filesystem/node.go
@@ -108,6 +108,10 @@ func (n *node) calculateChildren() error {
continue
}
+ if file.Mode()&os.ModeSocket != 0 {
+ continue
+ }
+
c, err := n.newChildNode(file)
if err != nil {
return err
diff --git a/utils/merkletrie/filesystem/node_test.go b/utils/merkletrie/filesystem/node_test.go
index 159e63d..b76abc4 100644
--- a/utils/merkletrie/filesystem/node_test.go
+++ b/utils/merkletrie/filesystem/node_test.go
@@ -2,9 +2,12 @@ package filesystem
import (
"bytes"
+ "fmt"
"io"
+ "net"
"os"
"path"
+ "runtime"
"testing"
"github.com/go-git/go-git/v5/plumbing"
@@ -13,6 +16,7 @@ import (
"github.com/go-git/go-billy/v5"
"github.com/go-git/go-billy/v5/memfs"
+ "github.com/go-git/go-billy/v5/osfs"
. "gopkg.in/check.v1"
)
@@ -196,6 +200,28 @@ func (s *NoderSuite) TestDiffDirectory(c *C) {
c.Assert(a, Equals, merkletrie.Modify)
}
+func (s *NoderSuite) TestSocket(c *C) {
+ if runtime.GOOS == "windows" {
+ c.Skip("socket files do not exist on windows")
+ }
+
+ td, err := os.MkdirTemp("", "socket-test")
+ defer os.RemoveAll(td)
+ c.Assert(err, IsNil)
+
+ sock, err := net.ListenUnix("unix", &net.UnixAddr{Name: fmt.Sprintf("%s/socket", td), Net: "unix"})
+ c.Assert(err, IsNil)
+ defer sock.Close()
+
+ fsA := osfs.New(td)
+ WriteFile(fsA, "foo", []byte("foo"), 0644)
+
+ noder := NewRootNode(fsA, nil)
+ childs, err := noder.Children()
+ c.Assert(err, IsNil)
+ c.Assert(childs, HasLen, 1)
+}
+
func WriteFile(fs billy.Filesystem, filename string, data []byte, perm os.FileMode) error {
f, err := fs.OpenFile(filename, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, perm)
if err != nil {
diff --git a/utils/merkletrie/internal/fsnoder/file.go b/utils/merkletrie/internal/fsnoder/file.go
index 0bb908b..453efee 100644
--- a/utils/merkletrie/internal/fsnoder/file.go
+++ b/utils/merkletrie/internal/fsnoder/file.go
@@ -32,7 +32,7 @@ func newFile(name, contents string) (*file, error) {
func (f *file) Hash() []byte {
if f.hash == nil {
h := fnv.New64a()
- h.Write([]byte(f.contents)) // it nevers returns an error.
+ h.Write([]byte(f.contents)) // it never returns an error.
f.hash = h.Sum(nil)
}