<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://purl.org/rss/1.0/" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:syn="http://purl.org/rss/1.0/modules/syndication/" xmlns:admin="http://webns.net/mvcb/">
  <channel rdf:about="http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel">
    <title>gmane.comp.version-control.mercurial.devel</title>
    <link>http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel</link>
    <description/>
    <syn:updatePeriod>hourly</syn:updatePeriod>
    <syn:updateFrequency>1</syn:updateFrequency>
    <syn:updateBase>1901-01-01T00:00+00:00</syn:updateBase>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50568"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50567"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50566"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50565"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50564"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50563"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50562"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50561"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50560"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50559"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50558"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50557"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50556"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50555"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50554"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50553"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50552"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50551"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50550"/>
        <rdf:li rdf:resource="http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50549"/>
      </rdf:Seq>
    </items>
    <image rdf:resource="http://gmane.org/img/gmane-25t.png"/>
    <textinput rdf:resource=""/>
  </channel>
  <image rdf:about="http://gmane.org/img/gmane-25t.png">
    <title>Gmane</title>
    <url>http://gmane.org/img/gmane-25t.png</url>
    <link>http://gmane.org</link>
  </image>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50568">
    <title>Re: [PATCH RFC] revset: add pattern matching to 'tag' revsetexpression</title>
    <link>http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50568</link>
    <description>&lt;pre&gt;
My inclination: support regexes only via some in-string syntax. At least
initially.

Be warned that people will immediately want this facility for branches,
bookmarks, usernames, etc. I don't really like the idea of adding a
parameter to all of those.




fnmatch says:

    fnmatch(FILENAME, PATTERN) matches according to the local
convention.

So that's out: we don't want to vary based on local filename
conventions. fnmatchcase is better, but doesn't support the {} syntax we
support elsewhere, so will mean bug reports.

And yes, Mercurial's fnmatch is too closely wed to files. Only glob: and
re: are appropriate here, the rest will cause pain.


Certainly expected for globs. For regexes, anchoring to the start of
line is a less common default. Compare to these, all unanchored:

    "keyword(string)"
      Search commit message, user name, and names of changed files for string.
      The match is case-insensitive.

    "grep(regex)"
      Like "keyword(string)" but accepts a regex. Use "grep(r'...')" to ensur&lt;/pre&gt;</description>
    <dc:creator>Matt Mackall</dc:creator>
    <dc:date>2012-05-25T22:09:50</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50567">
    <title>[PATCH RFC] revset: add pattern matching to 'tag' revset expression</title>
    <link>http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50567</link>
    <description>&lt;pre&gt;# HG changeset patch
# User Simon King &amp;lt;simon&amp;lt; at &amp;gt;simonking.org.uk&amp;gt;
# Date 1337980885 -3600
# Node ID acd9d3574a98a80e9db12b89a6f338d1541f3a1d
# Parent  2ac08d8b21aa7b6e0a062afed5a3f357ccef67f9
revset: add pattern matching to 'tag' revset expression

The 'tag' revset expression now takes an optional second parameter, which
is either 're' or 'glob'. When one of these is supplied, the tag name is
treated as a pattern, and any tags which match the pattern will be returned
from the expression.

Outstanding questions:

1. Is an optional parameter the right way to support this? Would it be better
   to have a separate expression, or use 're:' and 'glob:' prefixes on the
   tag name parameter instead?

2. Is it OK to use the python fnmatch module for glob patterns? Mercurial's
   match module seems much more geared towards filename matching; even the
   _globre function treats path separators specially.

3. Patterns must match from the start of the tag name. I think this would be
   the least surprising behaviour, but &lt;/pre&gt;</description>
    <dc:creator>Simon King</dc:creator>
    <dc:date>2012-05-25T21:23:02</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50566">
    <title>Re: [PATCH 0 of 9 RFC] manage filename normalization policy perrepository</title>
    <link>http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50566</link>
    <description>&lt;pre&gt;
What happens if:

a) a Mac user adds a file NFD(X)
b) that same user mentions that file in another file Y as NFD(X)
c) a Linux or Windows[1] -tool- tries to locate the file listed in Y but
Mercurial has helpfully transformed it to NFC(X) on check-out

Answer: neither Linux nor Windows will treat NFC(X) and NFD(X) as the
same file. And we won't renormalize the _contents_ of file Y, so
renormalizing the filename _introduces_ a mismatch. So.. it breaks. And
breaks here means "mysteriously stops compiling", "mysteriously gives
404s", "mysteriously crashes our mission-critical infrastructure".

Compare that with "user gets extremely annoyed by filenames he can read
and click on but can't type".[2]

This is another manifestation of the makefile problem: filenames
referred to inside other files MUST agree with what TOOLS see on the
filesystem for the tools to work.

Fundamentally, we can't force a Mac user to make Y reference NFC(X)
rather than NFD(X). Nor can we even detect it! So we can't prevent them
from makin&lt;/pre&gt;</description>
    <dc:creator>Matt Mackall</dc:creator>
    <dc:date>2012-05-25T21:06:28</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50565">
    <title>Re: RFC: safe pattern matching for problematic encoding</title>
    <link>http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50565</link>
    <description>&lt;pre&gt;

Try to decode an NFD string into any byte encoding other than UTF-8. Not
even Python 3 does this right. Hurray for Unicode.

&lt;/pre&gt;</description>
    <dc:creator>Matt Mackall</dc:creator>
    <dc:date>2012-05-25T18:52:00</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50564">
    <title>Re: RFC: safe pattern matching for problematic encoding</title>
    <link>http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50564</link>
    <description>&lt;pre&gt;
Trolling is when you knowingly do something that's annoying and is
likely to provoke a frustrated response. You should well know that I am
sick to death of this topic, ergo you are a troll. Being a sincere troll
doesn't make me love you more.


You've mistaken the example for the principle. It's not about makefiles,
per se, it's about the existence of large ecosystems of tools that are
intentionally encoding agnostic. It affects everything from compilers to
web servers to typesetters.


Now try it with GNU Make from msys. I just did. Works a treat on both
changesets. Also works on Linux and Mac. As it obviously will _with any
tool that hasn't drunk the UTF-16 Kool Aid_.

And thus you've proved my point.

a) important toolchains exist that work JUST FINE across platforms with
the existing encoding strategy
b) changing that strategy will cause a REGRESSION and is therefore off
the table
c) having standard tools like GNU make work trumps human legibility:
software that doesn't compile but that you can still re&lt;/pre&gt;</description>
    <dc:creator>Matt Mackall</dc:creator>
    <dc:date>2012-05-25T18:50:23</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50563">
    <title>Re: [PATCH v3] parsers: add a C function to pack the dirstate</title>
    <link>http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50563</link>
    <description>&lt;pre&gt;

Thanks for digging into this. I'll send out an updated patch with this
fixed up later.
&lt;/pre&gt;</description>
    <dc:creator>Bryan O'Sullivan</dc:creator>
    <dc:date>2012-05-25T16:47:01</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50562">
    <title>Re: [PATCH] dispatch: tolerate non-standard version strings intuplever()</title>
    <link>http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50562</link>
    <description>&lt;pre&gt;
Fixes http://bz.selenic.com/show_bug.cgi?id=3470
&lt;/pre&gt;</description>
    <dc:creator>Adrian Buehlmann</dc:creator>
    <dc:date>2012-05-25T16:14:18</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50561">
    <title>[Bug 3471] New: keyword extension: commit --amend not supported</title>
    <link>http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50561</link>
    <description>&lt;pre&gt;http://bz.selenic.com/show_bug.cgi?id=3471

          Priority: normal
            Bug ID: 3471
                CC: mercurial-devel&amp;lt; at &amp;gt;selenic.com
          Assignee: blacktrash&amp;lt; at &amp;gt;gmx.net
           Summary: keyword extension: commit --amend not supported
          Severity: bug
    Classification: Unclassified
                OS: All
          Reporter: blacktrash&amp;lt; at &amp;gt;gmx.net
          Hardware: All
            Status: UNCONFIRMED
           Version: 2.2.1
         Component: Mercurial
           Product: Mercurial

Currently commit --amend does not update the keywords.

Patch in preparation.

Aside: "Mercurial" core seems a too general component for this bug, but I could
not find a way to create a new component. Perhaps I'm not entitled to do so.

&lt;/pre&gt;</description>
    <dc:creator>bugzilla-daemon&lt; at &gt;bz.selenic.com</dc:creator>
    <dc:date>2012-05-25T11:42:40</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50560">
    <title>[Bug 3470] New: crash in dispatch.py when trying to report an error</title>
    <link>http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50560</link>
    <description>&lt;pre&gt;http://bz.selenic.com/show_bug.cgi?id=3470

          Priority: normal
            Bug ID: 3470
                CC: mercurial-devel&amp;lt; at &amp;gt;selenic.com
          Assignee: bugzilla&amp;lt; at &amp;gt;selenic.com
           Summary: crash in dispatch.py when trying to report an error
          Severity: bug
    Classification: Unclassified
                OS: All
          Reporter: bos&amp;lt; at &amp;gt;serpentine.com
          Hardware: All
            Status: UNCONFIRMED
           Version: 2.2.1
         Component: Mercurial
           Product: Mercurial

Augie's new "identify third-party extensions as sources of tracebacks" code
prevents Mercurial from printing a traceback.

http://selenic.com/repo/hg/rev/1c9f58a6c8f1

Here's what I get instead:

Traceback (most recent call last):
  File "/home/bryano/hg/hg/hg", line 38, in &amp;lt;module&amp;gt;
    mercurial.dispatch.run()
  File "/home/bryano/hg/hg/mercurial/dispatch.py", line 28, in run
    sys.exit((dispatch(request(sys.argv[1:])) or 0) &amp;amp; 255)
  File "/home/bryano/hg/hg/mercurial/dispatch.py", line 65, in d&lt;/pre&gt;</description>
    <dc:creator>bugzilla-daemon&lt; at &gt;bz.selenic.com</dc:creator>
    <dc:date>2012-05-24T22:24:37</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50559">
    <title>[PATCH 2 of 9 RFC] normfn: convert filenames at reading/writingmanifest from/into storage</title>
    <link>http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50559</link>
    <description>&lt;pre&gt;# HG changeset patch
# User FUJIWARA Katsunori &amp;lt;foozy&amp;lt; at &amp;gt;lares.dti.ne.jp&amp;gt;
# Date 1337957587 -32400
# Node ID a9aa18f59d106b4607cc74cc13b5eaf734a5bef8
# Parent  7488bcab8351aaaa0e8fbc4e98911fea225e8b38
normfn: convert filenames at reading/writing manifest from/into storage

with this patch, manifest metadata contains:

  - filenames normalized in "global style" (= "fnfromlocal()"-ed),
    in storage layer

  - filenames normalized in "local style" (= "fnfromlocal()"-ed),
    in memory layer

On MacOS environment, each functions are expected to work:

  - as same as "normalize('NFC')" for "fnfromlocal()", and
  - as same as "normalize('NFD')" for "fntolocal()"

these are enabled, only when normfn extension is enabled and
normalization style is configured as NFC.

diff -r 7488bcab8351 -r a9aa18f59d10 mercurial/bundlerepo.py
--- a/mercurial/bundlerepo.pyFri May 25 23:53:07 2012 +0900
+++ b/mercurial/bundlerepo.pyFri May 25 23:53:07 2012 +0900
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -152,8 +152,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
                               linkmapper)
 
 class&lt;/pre&gt;</description>
    <dc:creator>FUJIWARA Katsunori</dc:creator>
    <dc:date>2012-05-25T15:00:51</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50558">
    <title>[PATCH 8 of 9 RFC] normfn: introduce normfn extension to managefilename normalization policy per repository</title>
    <link>http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50558</link>
    <description>&lt;pre&gt;# HG changeset patch
# User FUJIWARA Katsunori &amp;lt;foozy&amp;lt; at &amp;gt;lares.dti.ne.jp&amp;gt;
# Date 1337957587 -32400
# Node ID 69cdf8af32ac0098c86d8f64832f027f3fb6f939
# Parent  3b83b592a5b4289ecb65cf9b26225bce20162ada
normfn: introduce normfn extension to manage filename normalization policy per repository

now, this just enables normalization functisons, only when:

  - hg runs on MacOS environment, and
  - '[normfn] type' value in '.hgnormfn' is set as 'NFC'

diff -r 3b83b592a5b4 -r 69cdf8af32ac hgext/normfn.py
--- /dev/nullThu Jan 01 00:00:00 1970 +0000
+++ b/hgext/normfn.pyFri May 25 23:53:07 2012 +0900
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -0,0 +1,161 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
+# normfn.py - unify the normalization type for filenames in the history
+#
+# Copyright (C) 2012 FUJIWARA Katsunori &amp;lt;foozy&amp;lt; at &amp;gt;lares.dti.ne.jp&amp;gt;
+#
+# This software may be used and distributed according to the terms of the
+# GNU General Public License version 2 or any later version.
+
+'''unify the normalization type for filenames in the history
+
+Example of ``.hgnormfn`` file::
+
+    [normalize]
+    type&lt;/pre&gt;</description>
    <dc:creator>FUJIWARA Katsunori</dc:creator>
    <dc:date>2012-05-25T15:00:57</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50557">
    <title>[PATCH 9 of 9 RFC] normfn: add pseudo normalization style "lower forlocal, upper for global"(llug)</title>
    <link>http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50557</link>
    <description>&lt;pre&gt;# HG changeset patch
# User FUJIWARA Katsunori &amp;lt;foozy&amp;lt; at &amp;gt;lares.dti.ne.jp&amp;gt;
# Date 1337957587 -32400
# Node ID c4c71e6ce07e46b88f4569f82d5cb7cd61d6b135
# Parent  69cdf8af32ac0098c86d8f64832f027f3fb6f939
normfn: add pseudo normalization style "lower for local, upper for global"(llug)

**** THIS IS JUST TO TEST PORTABLY ****

when debug-normfn extension is enabled, you can chose "llug"("lower
for local, upper for global") normalization style for "[normfn] type"
in '.hgnormfn' configuration file.

this allows you to test normalization functions even on other than
MacOS(HFS+) environment.

of course, you must not use upper case letters for filenames in the
repository where this extension is enabled and "[normfn] type" in
'.hgnormfn' is configured as "llug".

diff -r 69cdf8af32ac -r c4c71e6ce07e hgext/debug-normfn.py
--- /dev/nullThu Jan 01 00:00:00 1970 +0000
+++ b/hgext/debug-normfn.pyFri May 25 23:53:07 2012 +0900
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -0,0 +1,38 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
+from mercurial import extensions, util
+import sys
+
+def fntolocal(ui, s):
+    u&lt;/pre&gt;</description>
    <dc:creator>FUJIWARA Katsunori</dc:creator>
    <dc:date>2012-05-25T15:00:58</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50556">
    <title>[PATCH 3 of 9 RFC] normfn: normalize paths to filelog in global style</title>
    <link>http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50556</link>
    <description>&lt;pre&gt;# HG changeset patch
# User FUJIWARA Katsunori &amp;lt;foozy&amp;lt; at &amp;gt;lares.dti.ne.jp&amp;gt;
# Date 1337957587 -32400
# Node ID 4a676979c48890516e28b82505d64f8fe9c710bd
# Parent  a9aa18f59d106b4607cc74cc13b5eaf734a5bef8
normfn: normalize paths to filelog in global style

For portability of repository itself, paths to filelog should be
normalized in "global style".

diff -r a9aa18f59d10 -r 4a676979c488 hgext/keyword.py
--- a/hgext/keyword.pyFri May 25 23:53:07 2012 +0900
+++ b/hgext/keyword.pyFri May 25 23:53:07 2012 +0900
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -565,6 +565,9 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
         def file(self, f):
             if f[0] == '/':
                 f = f[1:]
+            fnfromlocal = getattr(self, 'fnfromlocal', None)
+            if fnfromlocal:
+                f = fnfromlocal(f)
             return kwfilelog(self.sopener, kwt, f)
 
         def wread(self, filename):
diff -r a9aa18f59d10 -r 4a676979c488 mercurial/bundlerepo.py
--- a/mercurial/bundlerepo.pyFri May 25 23:53:07 2012 +0900
+++ b/mercurial/bundlerepo.pyFri May 25 23:53:07 2012 +0900
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -260,6 +&lt;/pre&gt;</description>
    <dc:creator>FUJIWARA Katsunori</dc:creator>
    <dc:date>2012-05-25T15:00:52</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50555">
    <title>[PATCH 4 of 9 RFC] normfn: normalize paths in bundle file in globalstyle</title>
    <link>http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50555</link>
    <description>&lt;pre&gt;# HG changeset patch
# User FUJIWARA Katsunori &amp;lt;foozy&amp;lt; at &amp;gt;lares.dti.ne.jp&amp;gt;
# Date 1337957587 -32400
# Node ID c5352f1484a660a1c17cc7267173fad33e4a29bd
# Parent  4a676979c48890516e28b82505d64f8fe9c710bd
normfn: normalize paths in bundle file in global style

mercurial implementation embeds pathes in on-memory-objects
(e.g. manifest, context, and so on) into bundle as it is.

they are normalized in "local style", so should be normalized in
"global style" to create portable bundle.

diff -r 4a676979c488 -r c5352f1484a6 mercurial/localrepo.py
--- a/mercurial/localrepo.pyFri May 25 23:53:07 2012 +0900
+++ b/mercurial/localrepo.pyFri May 25 23:53:07 2012 +0900
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1895,6 +1895,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
         else:
             reorder = util.parsebool(reorder)
 
+        fnfromlocal = getattr(self, 'fnfromlocal', lambda x: x)
+
         def gengroup():
             # Create a changenode group generator that will call our functions
             # back to lookup the owning changenode and collect information.
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -1927,7 +1929,7 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
     &lt;/pre&gt;</description>
    <dc:creator>FUJIWARA Katsunori</dc:creator>
    <dc:date>2012-05-25T15:00:53</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50554">
    <title>[PATCH 1 of 9 RFC] normfn: convert filenames at reading/writingchangelog metadata from/into storage</title>
    <link>http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50554</link>
    <description>&lt;pre&gt;# HG changeset patch
# User FUJIWARA Katsunori &amp;lt;foozy&amp;lt; at &amp;gt;lares.dti.ne.jp&amp;gt;
# Date 1337957587 -32400
# Node ID 7488bcab8351aaaa0e8fbc4e98911fea225e8b38
# Parent  2ac08d8b21aa7b6e0a062afed5a3f357ccef67f9
normfn: convert filenames at reading/writing changelog metadata from/into storage

with this patch, changelog metadata contains:

  - filenames normalized in "global style" (= "fnfromlocal()"-ed),
    in storage layer

  - filenames normalized in "local style" (= "fnfromlocal()"-ed),
    in memory layer

On MacOS environment, each functions are expected to work:

  - as same as "normalize('NFC')" for "fnfromlocal()", and
  - as same as "normalize('NFD')" for "fntolocal()"

these are enabled, only when normfn extension is enabled and
normalization style is configured as NFC.

diff -r 2ac08d8b21aa -r 7488bcab8351 mercurial/bundlerepo.py
--- a/mercurial/bundlerepo.pyTue May 22 14:37:20 2012 -0500
+++ b/mercurial/bundlerepo.pyFri May 25 23:53:07 2012 +0900
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -145,8 +145,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
         raise NotImplementedError
 
 cl&lt;/pre&gt;</description>
    <dc:creator>FUJIWARA Katsunori</dc:creator>
    <dc:date>2012-05-25T15:00:50</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50553">
    <title>[PATCH 0 of 9 RFC] manage filename normalization policy per repository</title>
    <link>http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50553</link>
    <description>&lt;pre&gt;this patch series allows users to manage filename normalization policy
per repository

this is just for the base of discussion, and tested a little: clone,
bundle/unbundle, archive, diff, export/import.... simply.

basic concepts of this patch series are:

  (1) management of filename normalization are configured like as EOL
      extension:

      - tracked configuration file ".hgnormfn" chooses type of
        normalization (NFC/NFD/none) for data storing

      - filenames are checked at commit/update/merge and so on as like
        case-folding collision detection, according to the configured
        normalization type

        this can prevent users on Linux/Windows from adding files:

          - normalized in the type other than configured one, or
          - colliding against ones normalized in another type

        # this feature is not yet implemented in my patches

  (2) in storage layer and external representation, filenames are
      normalized in chosen style (= "global style"), for portability&lt;/pre&gt;</description>
    <dc:creator>FUJIWARA Katsunori</dc:creator>
    <dc:date>2012-05-25T15:00:49</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50552">
    <title>[PATCH 7 of 9 RFC] normfn: normalize paths for subrepo in global style</title>
    <link>http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50552</link>
    <description>&lt;pre&gt;# HG changeset patch
# User FUJIWARA Katsunori &amp;lt;foozy&amp;lt; at &amp;gt;lares.dti.ne.jp&amp;gt;
# Date 1337957587 -32400
# Node ID 3b83b592a5b4289ecb65cf9b26225bce20162ada
# Parent  c65c6da434ee4fbcc8176ba98773a30b1213042d
normfn: normalize paths for subrepo in global style

mercurial implementation uses paths in on-memory-objects
(e.g. manifest, context, and so on) for subrepo operatons as the path
prefix: diff and archive, now

they are normalized in "local style", so should be normalized in
"global style" to create portable external representations.

diff -r c65c6da434ee -r 3b83b592a5b4 mercurial/subrepo.py
--- a/mercurial/subrepo.pyFri May 25 23:53:07 2012 +0900
+++ b/mercurial/subrepo.pyFri May 25 23:53:07 2012 +0900
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -271,7 +271,8 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
     state = ctx.substate[path]
     if state[2] not in types:
         raise util.Abort(_('unknown subrepo type %s') % state[2])
-    return types[state[2]](ctx, path, state[:2])
+    fnfromlocal = getattr(ctx._repo, 'fnfromlocal', lambda x: x)
+    return types[state[2]](ctx, path, fnfromloc&lt;/pre&gt;</description>
    <dc:creator>FUJIWARA Katsunori</dc:creator>
    <dc:date>2012-05-25T15:00:56</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50551">
    <title>[PATCH 6 of 9 RFC] normfn: normalize paths in archives in global style</title>
    <link>http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50551</link>
    <description>&lt;pre&gt;# HG changeset patch
# User FUJIWARA Katsunori &amp;lt;foozy&amp;lt; at &amp;gt;lares.dti.ne.jp&amp;gt;
# Date 1337957587 -32400
# Node ID c65c6da434ee4fbcc8176ba98773a30b1213042d
# Parent  23e14c6bf89de2af9fd09c6683137b00ff353c8d
normfn: normalize paths in archives in global style

mercurial implementation embeds paths in on-memory-objects
(e.g. manifest, context, and so on) into archives as it is.

they are normalized in "local style", so should be normalized in
"global style" to create portable archives.

diff -r 23e14c6bf89d -r c65c6da434ee mercurial/archival.py
--- a/mercurial/archival.pyFri May 25 23:53:07 2012 +0900
+++ b/mercurial/archival.pyFri May 25 23:53:07 2012 +0900
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -233,12 +233,14 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
     else:
         prefix = tidyprefix(dest, kind, prefix)
 
+    fnfromlocal = getattr(repo, 'fnfromlocal', lambda x: x)
     def write(name, mode, islink, getdata):
         if matchfn and not matchfn(name):
             return
         data = getdata()
         if decode:
             data = repo.wwritedata(name, data)
+        name = fn&lt;/pre&gt;</description>
    <dc:creator>FUJIWARA Katsunori</dc:creator>
    <dc:date>2012-05-25T15:00:55</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50550">
    <title>[PATCH 5 of 9 RFC] normfn: normalize paths in patches in global style</title>
    <link>http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50550</link>
    <description>&lt;pre&gt;# HG changeset patch
# User FUJIWARA Katsunori &amp;lt;foozy&amp;lt; at &amp;gt;lares.dti.ne.jp&amp;gt;
# Date 1337957587 -32400
# Node ID 23e14c6bf89de2af9fd09c6683137b00ff353c8d
# Parent  c5352f1484a660a1c17cc7267173fad33e4a29bd
normfn: normalize paths in patches in global style

mercurial implementation embeds paths in on-memory-objects
(e.g. manifest, context, and so on) into pathes as it is.

they are normalized in "local style", so should be normalized in
"global style" to create portable patches: this also affects output of
"hg export".

diff -r c5352f1484a6 -r 23e14c6bf89d mercurial/patch.py
--- a/mercurial/patch.pyFri May 25 23:53:07 2012 +0900
+++ b/mercurial/patch.pyFri May 25 23:53:07 2012 +0900
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -465,19 +465,23 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
         self.removed = set()
         self.changed = set()
         self.copied = []
+        self.fntolocal = getattr(repo, 'fntolocal', lambda x: x)
 
     def _checkknown(self, fname):
         if self.repo.dirstate[fname] == '?' and self.exists(fname):
             raise PatchError(_('cannot patch %s: file is&lt;/pre&gt;</description>
    <dc:creator>FUJIWARA Katsunori</dc:creator>
    <dc:date>2012-05-25T15:00:54</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50549">
    <title>Re: [PATCH] localrepo: Add locking to _branchtags around_writebrancache</title>
    <link>http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50549</link>
    <description>&lt;pre&gt;Great point about the pointlessness of write locking when the data read is
outside the lock.
My goal was to prevent something like 'hg heads' from racing to update the
branchheads cache versus some other command like
'hg commit', resulting in a very out-of-date cache and a cache that is
potentially corrupt in the sense that we won't detect it is invalid.

I think you're right that to do this right, the read code path really
needs to be inside the lock as well.

I was using wlock (despite the comment) because I thought wlock is what
protects the branchheads cache.

I'll rework this diff.
Josh


On 5/25/12 7:46 AM, "Mads" &amp;lt;mads&amp;lt; at &amp;gt;kiilerich.com&amp;gt; wrote:


&lt;/pre&gt;</description>
    <dc:creator>Joshua Redstone</dc:creator>
    <dc:date>2012-05-25T14:31:26</dc:date>
  </item>
  <item rdf:about="http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50548">
    <title>[PATCH RFC] update: skip bookmarked heads when running a bare "hgupdate"</title>
    <link>http://permalink.gmane.org/gmane.comp.version-control.mercurial.devel/50548</link>
    <description>&lt;pre&gt;# HG changeset patch
# User Angel Ezquerra &amp;lt;angel.ezquerra&amp;lt; at &amp;gt;gmail.com&amp;gt;
# Date 1337955724 -7200
# Node ID cb06046e10797e569bed05850318068f4a5d535c
# Parent  2ac08d8b21aa7b6e0a062afed5a3f357ccef67f9
update: skip bookmarked heads when running a bare "hg update"

When running a bare "hg update" without specifying a revision, we used to
update to the tip of the current branch, even if it were bookmarked. This is
inconvenient when using bookmarks for feature branches, since pulling new
bookmarks will make "hg update" update to those bookmarked "feature branches".

This patch changes this behavior. "hg update" will look for the tipmost head of
the current branch that is not bookmarked. If none is found the old behavior is
used (i.e. we will update to the tip of the current branch).

This is missing tests and possibly a comment on the update command help.

diff --git a/mercurial/merge.py b/mercurial/merge.py
--- a/mercurial/merge.py
+++ b/mercurial/merge.py
&amp;lt; at &amp;gt;&amp;lt; at &amp;gt; -527,9 +527,18 &amp;lt; at &amp;gt;&amp;lt; at &amp;gt;
     try:
         wc = repo[None]
    &lt;/pre&gt;</description>
    <dc:creator>Angel Ezquerra</dc:creator>
    <dc:date>2012-05-25T14:25:31</dc:date>
  </item>
  <textinput rdf:about="http://search.gmane.org/?group=$group=gmane.comp.version-control.mercurial.devel">
    <title>Search Engine</title>
    <description>Search the mailing list at Gmane</description>
    <name>query</name>
    <link>http://search.gmane.org/?group=$group=gmane.comp.version-control.mercurial.devel</link>
  </textinput>
</rdf:RDF>

