aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--utils/merkletrie/noder/path_test.go12
-rw-r--r--worktree_test.go43
2 files changed, 54 insertions, 1 deletions
diff --git a/utils/merkletrie/noder/path_test.go b/utils/merkletrie/noder/path_test.go
index 44e3c3c..be25444 100644
--- a/utils/merkletrie/noder/path_test.go
+++ b/utils/merkletrie/noder/path_test.go
@@ -1,6 +1,9 @@
package noder
-import . "gopkg.in/check.v1"
+import (
+ "golang.org/x/text/unicode/norm"
+ . "gopkg.in/check.v1"
+)
type PathSuite struct{}
@@ -149,3 +152,10 @@ func (s *PathSuite) TestCompareMixedDepths(c *C) {
c.Assert(p1.Compare(p2), Equals, 1)
c.Assert(p2.Compare(p1), Equals, -1)
}
+
+func (s *PathSuite) TestCompareNormalization(c *C) {
+ p1 := Path([]Noder{&noderMock{name: norm.Form(norm.NFKC).String("ํŽ˜")}})
+ p2 := Path([]Noder{&noderMock{name: norm.Form(norm.NFKD).String("ํŽ˜")}})
+ c.Assert(p1.Compare(p2), Equals, 0)
+ c.Assert(p2.Compare(p1), Equals, 0)
+}
diff --git a/worktree_test.go b/worktree_test.go
index 10774a4..4be02f6 100644
--- a/worktree_test.go
+++ b/worktree_test.go
@@ -7,6 +7,8 @@ import (
"os"
"path/filepath"
+ "golang.org/x/text/unicode/norm"
+
"gopkg.in/src-d/go-git.v4/config"
"gopkg.in/src-d/go-git.v4/plumbing"
"gopkg.in/src-d/go-git.v4/plumbing/filemode"
@@ -304,6 +306,47 @@ func (s *WorktreeSuite) TestCheckoutSymlink(c *C) {
c.Assert(err, IsNil)
}
+func (s *WorktreeSuite) TestFilenameNormalization(c *C) {
+ url := c.MkDir()
+ path := fixtures.Basic().ByTag("worktree").One().Worktree().Root()
+
+ server, err := PlainClone(url, false, &CloneOptions{
+ URL: path,
+ })
+
+ filename := "ํŽ˜"
+
+ w, err := server.Worktree()
+ c.Assert(err, IsNil)
+ util.WriteFile(w.Filesystem, filename, []byte("foo"), 0755)
+ _, err = w.Add(filename)
+ c.Assert(err, IsNil)
+ _, err = w.Commit("foo", &CommitOptions{Author: defaultSignature()})
+ c.Assert(err, IsNil)
+
+ r, err := Clone(memory.NewStorage(), memfs.New(), &CloneOptions{
+ URL: url,
+ })
+
+ w, err = r.Worktree()
+ c.Assert(err, IsNil)
+
+ status, err := w.Status()
+ c.Assert(err, IsNil)
+ c.Assert(status.IsClean(), Equals, true)
+
+ err = w.Filesystem.Remove(filename)
+ c.Assert(err, IsNil)
+
+ modFilename := norm.Form(norm.NFKD).String(filename)
+ util.WriteFile(w.Filesystem, modFilename, []byte("foo"), 0755)
+ _, err = w.Add(filename)
+
+ status, err = w.Status()
+ c.Assert(err, IsNil)
+ c.Assert(status.IsClean(), Equals, true)
+}
+
func (s *WorktreeSuite) TestCheckoutSubmodule(c *C) {
url := "https://github.com/git-fixtures/submodule.git"
r := s.NewRepositoryWithEmptyWorktree(fixtures.ByURL(url).One())