diff options
author | Máximo Cuadros <mcuadros@gmail.com> | 2017-08-02 17:45:41 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-08-02 17:45:41 +0200 |
commit | 3713791015259f9e32cfe5fee76f9c99fc43fffd (patch) | |
tree | d6b9a7b601dfbf16af7193aa22cfc849409ec4f7 /utils/merkletrie | |
parent | a0885c5fe132f109aeb7b09aa69ab138952961a6 (diff) | |
parent | 5c1a2ec798eb9b78d66b16fbbcbdc3b928d8b496 (diff) | |
download | go-git-3713791015259f9e32cfe5fee76f9c99fc43fffd.tar.gz |
Merge pull request #526 from joshbetz/fix/filename-form
Normalize filenames before comparing.
Diffstat (limited to 'utils/merkletrie')
-rw-r--r-- | utils/merkletrie/noder/path.go | 8 | ||||
-rw-r--r-- | utils/merkletrie/noder/path_test.go | 12 |
2 files changed, 18 insertions, 2 deletions
diff --git a/utils/merkletrie/noder/path.go b/utils/merkletrie/noder/path.go index 85742db..d2e2932 100644 --- a/utils/merkletrie/noder/path.go +++ b/utils/merkletrie/noder/path.go @@ -3,6 +3,8 @@ package noder import ( "bytes" "strings" + + "golang.org/x/text/unicode/norm" ) // Path values represent a noder and its ancestors. The root goes first @@ -78,7 +80,11 @@ func (p Path) Compare(other Path) int { case i == len(p): return -1 default: - cmp := strings.Compare(p[i].Name(), other[i].Name()) + form := norm.Form(norm.NFC) + this := form.String(p[i].Name()) + that := form.String(other[i].Name()) + + cmp := strings.Compare(this, that) if cmp != 0 { return cmp } 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) +} |