From 7454670b0a516d3d71e4e40999a3c352c34ebca9 Mon Sep 17 00:00:00 2001 From: Jakob Borg Date: Wed, 11 Jun 2014 17:51:31 +0200 Subject: [PATCH] Drop and warn about non-normalized file names on Linux/Windows (fixes #329) --- integration/test.sh | 17 +++++++++++++---- scanner/walk.go | 6 ++++++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/integration/test.sh b/integration/test.sh index 647bd951..5f9abc53 100755 --- a/integration/test.sh +++ b/integration/test.sh @@ -21,6 +21,15 @@ start() { done } +clean() { + if [[ $(uname -s) == "Linux" ]] ; then + grep -v utf8-nfd + else + cat + fi +} + + testConvergence() { while true ; do sleep 5 @@ -38,13 +47,13 @@ testConvergence() { done echo "Verifying..." - cat md5-? | sort | uniq > md5-tot - cat md5-12-? | sort | uniq > md5-12-tot - cat md5-23-? | sort | uniq > md5-23-tot + cat md5-? | sort | clean | uniq > md5-tot + cat md5-12-? | sort | clean | uniq > md5-12-tot + cat md5-23-? | sort | clean | uniq > md5-23-tot for i in 1 2 3 12-1 12-2 23-2 23-3; do pushd "s$i" >/dev/null - ../md5r -l | sort > ../md5-$i + ../md5r -l | sort | clean > ../md5-$i popd >/dev/null done diff --git a/scanner/walk.go b/scanner/walk.go index d2d3223e..1be907a3 100644 --- a/scanner/walk.go +++ b/scanner/walk.go @@ -13,6 +13,7 @@ import ( "runtime" "strings" "time" + "code.google.com/p/go.text/unicode/norm" "github.com/calmh/syncthing/lamport" "github.com/calmh/syncthing/protocol" @@ -159,6 +160,11 @@ func (w *Walker) walkAndHashFiles(res *[]File, ign map[string][]string) filepath return nil } + if (runtime.GOOS == "linux" || runtime.GOOS == "windows") && !norm.NFC.IsNormalString(rn) { + l.Warnf("File %q contains non-NFC UTF-8 sequences and cannot be synced. Consider renaming.", rn) + return nil + } + if info.Mode().IsDir() { if w.CurrentFiler != nil { cf := w.CurrentFiler.CurrentFile(rn)