Drop and warn about non-normalized file names on Linux/Windows (fixes #329)

This commit is contained in:
Jakob Borg 2014-06-11 17:51:31 +02:00
parent e63596681d
commit 7454670b0a
2 changed files with 19 additions and 4 deletions

View File

@ -21,6 +21,15 @@ start() {
done done
} }
clean() {
if [[ $(uname -s) == "Linux" ]] ; then
grep -v utf8-nfd
else
cat
fi
}
testConvergence() { testConvergence() {
while true ; do while true ; do
sleep 5 sleep 5
@ -38,13 +47,13 @@ testConvergence() {
done done
echo "Verifying..." echo "Verifying..."
cat md5-? | sort | uniq > md5-tot cat md5-? | sort | clean | uniq > md5-tot
cat md5-12-? | sort | uniq > md5-12-tot cat md5-12-? | sort | clean | uniq > md5-12-tot
cat md5-23-? | sort | uniq > md5-23-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 for i in 1 2 3 12-1 12-2 23-2 23-3; do
pushd "s$i" >/dev/null pushd "s$i" >/dev/null
../md5r -l | sort > ../md5-$i ../md5r -l | sort | clean > ../md5-$i
popd >/dev/null popd >/dev/null
done done

View File

@ -13,6 +13,7 @@ import (
"runtime" "runtime"
"strings" "strings"
"time" "time"
"code.google.com/p/go.text/unicode/norm"
"github.com/calmh/syncthing/lamport" "github.com/calmh/syncthing/lamport"
"github.com/calmh/syncthing/protocol" "github.com/calmh/syncthing/protocol"
@ -159,6 +160,11 @@ func (w *Walker) walkAndHashFiles(res *[]File, ign map[string][]string) filepath
return nil 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 info.Mode().IsDir() {
if w.CurrentFiler != nil { if w.CurrentFiler != nil {
cf := w.CurrentFiler.CurrentFile(rn) cf := w.CurrentFiler.CurrentFile(rn)