# HG changeset patch # User Matt Mackall # Date 1427836454 18000 # Node ID 9fbda55c68d77d0c026d458ac228e9f98c62d64f # Parent e235b5dc5cf9b084a4ca5c3fb29e4ccc66fa9bab# Parent 2bb13f2b778c0675811171c932762a381b022443 merge with stable diff -r e235b5dc5cf9 -r 9fbda55c68d7 mercurial/dirstate.py --- a/mercurial/dirstate.py Sun Mar 29 19:47:16 2015 -0700 +++ b/mercurial/dirstate.py Tue Mar 31 16:14:14 2015 -0500 @@ -677,7 +677,7 @@ results[nf] = None if matchedir: matchedir(nf) - foundadd(nf) + foundadd((nf, ff)) elif kind == regkind or kind == lnkkind: results[nf] = st else: @@ -753,15 +753,16 @@ results, work, dirsnotfound = self._walkexplicit(match, subrepos) skipstep3 = skipstep3 and not (work or dirsnotfound) - work = [d for d in work if not dirignore(d)] + work = [d for d in work if not dirignore(d[0])] wadd = work.append # step 2: visit subdirectories while work: - nd = work.pop() + nd, d = work.pop() skip = None if nd == '.': nd = '' + d = '' else: skip = '.hg' try: @@ -776,22 +777,24 @@ # even though f might be a directory, we're only interested # in comparing it to files currently in the dmap -- # therefore normalizefile is enough + f = d and (d + "/" + f) or f nf = normalizefile(nd and (nd + "/" + f) or f, True, True) else: nf = nd and (nd + "/" + f) or f + f = nf if nf not in results: if kind == dirkind: if not ignore(nf): if matchtdir: matchtdir(nf) - wadd(nf) + wadd((nf, f)) if nf in dmap and (matchalways or matchfn(nf)): results[nf] = None elif kind == regkind or kind == lnkkind: if nf in dmap: if matchalways or matchfn(nf): results[nf] = st - elif (matchalways or matchfn(nf)) and not ignore(nf): + elif (matchalways or matchfn(f)) and not ignore(nf): results[nf] = st elif nf in dmap and (matchalways or matchfn(nf)): results[nf] = None diff -r e235b5dc5cf9 -r 9fbda55c68d7 mercurial/help/config.txt --- a/mercurial/help/config.txt Sun Mar 29 19:47:16 2015 -0700 +++ b/mercurial/help/config.txt Tue Mar 31 16:14:14 2015 -0500 @@ -1391,13 +1391,13 @@ format. Defaults to showing the hash, tags, branches, bookmarks, author, and the first line of the commit description. - You have to pay attention to encodings of managed files, if you - use non-ASCII characters in tags, branches, bookmarks, author - and/or commit descriptions. At template expansion, non-ASCII - characters use the encoding specified by ``--encoding`` global - option, ``HGENCODING`` or other locale setting environment - variables. The difference of encoding between merged file and - conflict markers causes serious problem. + If you use non-ASCII characters in names for tags, branches, bookmarks, + authors, and/or commit descriptions, you must pay attention to encodings of + managed files. At template expansion, non-ASCII characters use the encoding + specified by the ``--encoding`` global option, ``HGENCODING`` or other + environment variables that govern your locale. If the encoding of the merge + markers is different from the encoding of the merged files, + serious problems may occur. ``portablefilenames`` Check for portable filenames. Can be ``warn``, ``ignore`` or ``abort``. diff -r e235b5dc5cf9 -r 9fbda55c68d7 tests/test-add.t --- a/tests/test-add.t Sun Mar 29 19:47:16 2015 -0700 +++ b/tests/test-add.t Tue Mar 31 16:14:14 2015 -0500 @@ -169,4 +169,16 @@ $ cat d file d +Test that adding a directory doesn't require case matching (issue4578) +#if icasefs + $ mkdir -p CapsDir1/CapsDir + $ echo abc > CapsDir1/CapsDir/AbC.txt + $ mkdir CapsDir1/CapsDir/SubDir + $ echo def > CapsDir1/CapsDir/SubDir/Def.txt + + $ hg add -v capsdir1/capsdir + adding CapsDir1/CapsDir/AbC.txt (glob) + adding CapsDir1/CapsDir/SubDir/Def.txt (glob) +#endif + $ cd ..