Hello community,

here is the log from the commit of package mercurial for openSUSE:Factory 
checked in at 2014-12-22 12:54:25
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/mercurial (Old)
 and      /work/SRC/openSUSE:Factory/.mercurial.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "mercurial"

Changes:
--------
--- /work/SRC/openSUSE:Factory/mercurial/mercurial.changes      2014-12-17 
19:15:03.000000000 +0100
+++ /work/SRC/openSUSE:Factory/.mercurial.new/mercurial.changes 2014-12-22 
12:53:03.000000000 +0100
@@ -1,0 +2,17 @@
+Fri Dec 19 08:06:30 UTC 2014 - [email protected]
+
+- update to v3.2.3
+  * context: stop setting None for modified or added nodes
+  * darwin: omit ignorable codepoints when normcase()ing a file path
+  * encoding: add hfsignoreclean to clean out HFS-ignored characters
+  * largefiles: don't actually remove largefiles in an addremove dry run
+  * log: fix log -f slow path to actually follow history
+  * log: fix log revset instability
+  * manifest: disallow setting the node id of an entry to None
+  * pathauditor: check for Windows shortname aliases
+  * pathauditor: check for codepoints ignored on OS X
+  * rebase: ignore negative state when updating back to original wc parent
+  * update: add tests for untracked local file
+  * update: don't overwrite untracked ignored files on update
+
+-------------------------------------------------------------------

Old:
----
  mercurial-3.2.2.tar.gz

New:
----
  mercurial-3.2.3.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ mercurial.spec ++++++
--- /var/tmp/diff_new_pack.4dZ19Q/_old  2014-12-22 12:53:04.000000000 +0100
+++ /var/tmp/diff_new_pack.4dZ19Q/_new  2014-12-22 12:53:04.000000000 +0100
@@ -17,7 +17,7 @@
 
 
 Name:           mercurial
-Version:        3.2.2
+Version:        3.2.3
 Release:        0
 Summary:        Scalable Distributed SCM
 License:        GPL-2.0+

++++++ mercurial-3.2.2.tar.gz -> mercurial-3.2.3.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.2.2/.hgsigs new/mercurial-3.2.3/.hgsigs
--- old/mercurial-3.2.2/.hgsigs 2014-12-02 01:39:20.000000000 +0100
+++ new/mercurial-3.2.3/.hgsigs 2014-12-18 21:59:29.000000000 +0100
@@ -97,3 +97,4 @@
 7f8d16af8cae246fa5a48e723d48d58b015aed94 0 
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
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.2.2/.hgtags new/mercurial-3.2.3/.hgtags
--- old/mercurial-3.2.2/.hgtags 2014-12-02 01:39:20.000000000 +0100
+++ new/mercurial-3.2.3/.hgtags 2014-12-18 21:59:29.000000000 +0100
@@ -110,3 +110,4 @@
 7f8d16af8cae246fa5a48e723d48d58b015aed94 3.2-rc
 ced632394371a36953ce4d394f86278ae51a2aae 3.2
 643c58303fb0ec020907af28b9e486be299ba043 3.2.1
+902554884335e5ca3661d63be9978eb4aec3f68a 3.2.2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.2.2/PKG-INFO new/mercurial-3.2.3/PKG-INFO
--- old/mercurial-3.2.2/PKG-INFO        2014-12-02 01:39:31.000000000 +0100
+++ new/mercurial-3.2.3/PKG-INFO        2014-12-18 21:59:40.000000000 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: mercurial
-Version: 3.2.2
+Version: 3.2.3
 Summary: Fast scalable distributed SCM (revision control, version control) 
system
 Home-page: http://mercurial.selenic.com/
 Author: Matt Mackall and many others
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.2.2/hgext/largefiles/overrides.py 
new/mercurial-3.2.3/hgext/largefiles/overrides.py
--- old/mercurial-3.2.2/hgext/largefiles/overrides.py   2014-12-02 
01:39:13.000000000 +0100
+++ new/mercurial-3.2.3/hgext/largefiles/overrides.py   2014-12-18 
21:59:22.000000000 +0100
@@ -189,8 +189,15 @@
                 # are removing the file.
                 if isaddremove:
                     ui.status(_('removing %s\n') % f)
-                util.unlinkpath(repo.wjoin(f), ignoremissing=True)
-            lfdirstate.remove(f)
+
+            if not opts.get('dry_run'):
+                if not after:
+                    util.unlinkpath(repo.wjoin(f), ignoremissing=True)
+                lfdirstate.remove(f)
+
+        if opts.get('dry_run'):
+            return result
+
         lfdirstate.write()
         remove = [lfutil.standin(f) for f in remove]
         # If this is being called by addremove, let the original addremove
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.2.2/hgext/rebase.py 
new/mercurial-3.2.3/hgext/rebase.py
--- old/mercurial-3.2.2/hgext/rebase.py 2014-12-02 01:39:13.000000000 +0100
+++ new/mercurial-3.2.3/hgext/rebase.py 2014-12-18 21:59:22.000000000 +0100
@@ -449,6 +449,9 @@
         # restore original working directory
         # (we do this before stripping)
         newwd = state.get(originalwd, originalwd)
+        if newwd < 0:
+            # original directory is a parent of rebase set root or ignored
+            newwd = originalwd
         if newwd not in [c.rev() for c in repo[None].parents()]:
             ui.note(_("update back to initial working directory parent\n"))
             hg.updaterepo(repo, newwd, False)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.2.2/i18n/ja.po 
new/mercurial-3.2.3/i18n/ja.po
--- old/mercurial-3.2.2/i18n/ja.po      2014-12-02 01:39:13.000000000 +0100
+++ new/mercurial-3.2.3/i18n/ja.po      2014-12-18 21:59:22.000000000 +0100
@@ -149,8 +149,8 @@
 msgstr ""
 "Project-Id-Version: Mercurial\n"
 "Report-Msgid-Bugs-To: <[email protected]>\n"
-"POT-Creation-Date: 2014-11-01 17:00+0900\n"
-"PO-Revision-Date: 2014-11-01 17:57+0900\n"
+"POT-Creation-Date: 2014-11-29 14:13+0900\n"
+"PO-Revision-Date: 2014-11-29 14:23+0900\n"
 "Last-Translator: Japanese translation team <[email protected]>\n"
 "Language-Team: Japanese\n"
 "Language: ja\n"
@@ -12292,6 +12292,9 @@
 msgid "free the working state lock (DANGEROUS)"
 msgstr "作業領域の排他の解放 (危険)"
 
+msgid "[OPTION]..."
+msgstr "[OPTION]..."
+
 msgid "show or modify state of locks"
 msgstr "排他状況の表示又は変更"
 
@@ -12508,9 +12511,6 @@
 msgid "sort by saved mtime"
 msgstr "記録された mtime 情報で整列"
 
-msgid "[OPTION]..."
-msgstr "[OPTION]..."
-
 msgid "show the contents of the current dirstate"
 msgstr "現時点の dirstate 内容の表示"
 
@@ -13857,8 +13857,8 @@
 msgid "[-P] [-f] [[-r] REV]"
 msgstr "[-P] [-f] [[-r] REV]"
 
-msgid "merge working directory with another revision"
-msgstr "作業領域の内容と他のリビジョンのマージ"
+msgid "merge another revision into working directory"
+msgstr "他リビジョンを作業領域にマージ"
 
 msgid ""
 "    The current working directory is updated with all changes made in\n"
@@ -19640,12 +19640,12 @@
 
 msgid ""
 "``reportoldssl``\n"
-"    Warn if an SSL certificate is unable to be due to using Python\n"
+"    Warn if an SSL certificate is unable to be used due to using Python\n"
 "    2.5 or earlier. True or False. Default is True."
 msgstr ""
 "``reportoldssl``\n"
 "    Python 2.5 以前の使用により、 SSL 証明書の処理ができない場合の、\n"
-"    警告表示を指定する真偽値。 デフォルト値: True"
+"    警告表示の有無を指定する真偽値。 デフォルト値: True"
 
 msgid ""
 "``report_untrusted``\n"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.2.2/i18n/pt_BR.po 
new/mercurial-3.2.3/i18n/pt_BR.po
--- old/mercurial-3.2.2/i18n/pt_BR.po   2014-12-02 01:39:13.000000000 +0100
+++ new/mercurial-3.2.3/i18n/pt_BR.po   2014-12-18 21:59:22.000000000 +0100
@@ -12497,6 +12497,9 @@
 msgid "free the working state lock (DANGEROUS)"
 msgstr "libera o lock do working state (PERIGOSO)"
 
+msgid "[OPTION]..."
+msgstr "[OPÇÃO]..."
+
 msgid "show or modify state of locks"
 msgstr "mostra ou modifica o estado dos locks"
 
@@ -12722,9 +12725,6 @@
 msgid "sort by saved mtime"
 msgstr "ordena por mtime armazenado"
 
-msgid "[OPTION]..."
-msgstr "[OPÇÃO]..."
-
 msgid "show the contents of the current dirstate"
 msgstr "mostra o conteúdo do dirstate atual"
 
@@ -14130,8 +14130,8 @@
 msgid "[-P] [-f] [[-r] REV]"
 msgstr "[-P] [-f] [[-r] REV]"
 
-msgid "merge working directory with another revision"
-msgstr "mescla o diretório de trabalho com outra revisão"
+msgid "merge another revision into working directory"
+msgstr "mescla uma outra revisão com o diretório de trabalho"
 
 msgid ""
 "    The current working directory is updated with all changes made in\n"
@@ -20039,7 +20039,7 @@
 
 msgid ""
 "``reportoldssl``\n"
-"    Warn if an SSL certificate is unable to be due to using Python\n"
+"    Warn if an SSL certificate is unable to be used due to using Python\n"
 "    2.5 or earlier. True or False. Default is True."
 msgstr ""
 "``reportoldssl``\n"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.2.2/mercurial/__version__.py 
new/mercurial-3.2.3/mercurial/__version__.py
--- old/mercurial-3.2.2/mercurial/__version__.py        2014-12-02 
01:39:29.000000000 +0100
+++ new/mercurial-3.2.3/mercurial/__version__.py        2014-12-18 
21:59:38.000000000 +0100
@@ -1,2 +1,2 @@
 # this file is autogenerated by setup.py
-version = "3.2.2"
+version = "3.2.3"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.2.2/mercurial/cmdutil.py 
new/mercurial-3.2.3/mercurial/cmdutil.py
--- old/mercurial-3.2.2/mercurial/cmdutil.py    2014-12-02 01:39:13.000000000 
+0100
+++ new/mercurial-3.2.3/mercurial/cmdutil.py    2014-12-18 21:59:22.000000000 
+0100
@@ -1745,6 +1745,9 @@
             else:
                 slowpath = False
 
+    fpats = ('_patsfollow', '_patsfollowfirst')
+    fnopats = (('_ancestors', '_fancestors'),
+               ('_descendants', '_fdescendants'))
     if slowpath:
         # See walkchangerevs() slow path.
         #
@@ -1763,11 +1766,10 @@
             matchargs.append('x:' + p)
         matchargs = ','.join(('%r' % p) for p in matchargs)
         opts['_matchfiles'] = matchargs
+        if follow:
+            opts[fnopats[0][followfirst]] = '.'
     else:
         if follow:
-            fpats = ('_patsfollow', '_patsfollowfirst')
-            fnopats = (('_ancestors', '_fancestors'),
-                       ('_descendants', '_fdescendants'))
             if pats:
                 # follow() revset interprets its file argument as a
                 # manifest entry, so use match.files(), not pats.
@@ -1793,7 +1795,7 @@
                 filematcher = lambda rev: match
 
     expr = []
-    for op, val in opts.iteritems():
+    for op, val in sorted(opts.iteritems()):
         if not val:
             continue
         if op not in opt2revset:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.2.2/mercurial/context.py 
new/mercurial-3.2.3/mercurial/context.py
--- old/mercurial-3.2.2/mercurial/context.py    2014-12-02 01:39:13.000000000 
+0100
+++ new/mercurial-3.2.3/mercurial/context.py    2014-12-18 21:59:22.000000000 
+0100
@@ -17,6 +17,11 @@
 
 propertycache = util.propertycache
 
+# Phony node value to stand-in for new files in some uses of
+# manifests. Manifests support 21-byte hashes for nodes which are
+# dirty in the working copy.
+_newnode = '!' * 21
+
 class basectx(object):
     """A basectx object represents the common logic for its children:
     changectx: read-only context that is already present in the repo,
@@ -128,7 +133,7 @@
                 if (fn not in deletedset and
                     ((fn in withflags and mf1.flags(fn) != mf2.flags(fn)) or
                      (mf1[fn] != mf2node and
-                      (mf2node or self[fn].cmp(other[fn]))))):
+                      (mf2node != _newnode or self[fn].cmp(other[fn]))))):
                     modified.append(fn)
                 elif listclean:
                     clean.append(fn)
@@ -1408,7 +1413,7 @@
         mf = self._repo['.']._manifestmatches(match, s)
         modified, added, removed = s[0:3]
         for f in modified + added:
-            mf[f] = None
+            mf[f] = _newnode
             mf.setflag(f, self.flags(f))
         for f in removed:
             if f in mf:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.2.2/mercurial/encoding.py 
new/mercurial-3.2.3/mercurial/encoding.py
--- old/mercurial-3.2.2/mercurial/encoding.py   2014-12-02 01:39:13.000000000 
+0100
+++ new/mercurial-3.2.3/mercurial/encoding.py   2014-12-18 21:59:22.000000000 
+0100
@@ -8,6 +8,28 @@
 import error
 import unicodedata, locale, os
 
+# These unicode characters are ignored by HFS+ (Apple Technote 1150,
+# "Unicode Subtleties"), so we need to ignore them in some places for
+# sanity.
+_ignore = [unichr(int(x, 16)).encode("utf-8") for x in
+           "200c 200d 200e 200f 202a 202b 202c 202d 202e "
+           "206a 206b 206c 206d 206e 206f feff".split()]
+# verify the next function will work
+assert set([i[0] for i in _ignore]) == set(["\xe2", "\xef"])
+
+def hfsignoreclean(s):
+    """Remove codepoints ignored by HFS+ from s.
+
+    >>> hfsignoreclean(u'.h\u200cg'.encode('utf-8'))
+    '.hg'
+    >>> hfsignoreclean(u'.h\ufeffg'.encode('utf-8'))
+    '.hg'
+    """
+    if "\xe2" in s or "\xef" in s:
+        for c in _ignore:
+            s = s.replace(c, '')
+    return s
+
 def _getpreferredencoding():
     '''
     On darwin, getpreferredencoding ignores the locale environment and
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.2.2/mercurial/manifest.py 
new/mercurial-3.2.3/mercurial/manifest.py
--- old/mercurial-3.2.2/mercurial/manifest.py   2014-12-02 01:39:13.000000000 
+0100
+++ new/mercurial-3.2.3/mercurial/manifest.py   2014-12-18 21:59:22.000000000 
+0100
@@ -17,6 +17,9 @@
             flags = {}
         dict.__init__(self, mapping)
         self._flags = flags
+    def __setitem__(self, k, v):
+        assert v is not None
+        dict.__setitem__(self, k, v)
     def flags(self, f):
         return self._flags.get(f, "")
     def withflags(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.2.2/mercurial/merge.py 
new/mercurial-3.2.3/mercurial/merge.py
--- old/mercurial-3.2.2/mercurial/merge.py      2014-12-02 01:39:13.000000000 
+0100
+++ new/mercurial-3.2.3/mercurial/merge.py      2014-12-18 21:59:22.000000000 
+0100
@@ -298,8 +298,7 @@
         return r
 
 def _checkunknownfile(repo, wctx, mctx, f):
-    return (not repo.dirstate._ignore(f)
-        and os.path.isfile(repo.wjoin(f))
+    return (os.path.isfile(repo.wjoin(f))
         and repo.wopener.audit.check(f)
         and repo.dirstate.normalize(f) not in repo.dirstate
         and mctx[f].cmp(wctx[f]))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.2.2/mercurial/pathutil.py 
new/mercurial-3.2.3/mercurial/pathutil.py
--- old/mercurial-3.2.2/mercurial/pathutil.py   2014-12-02 01:39:13.000000000 
+0100
+++ new/mercurial-3.2.3/mercurial/pathutil.py   2014-12-18 21:59:22.000000000 
+0100
@@ -1,8 +1,12 @@
 import os, errno, stat
 
+import encoding
 import util
 from i18n import _
 
+def _lowerclean(s):
+    return encoding.hfsignoreclean(s.lower())
+
 class pathauditor(object):
     '''ensure that a filesystem path contains no banned components.
     the following properties of a path are checked:
@@ -39,11 +43,18 @@
             raise util.Abort(_("path ends in directory separator: %s") % path)
         parts = util.splitpath(path)
         if (os.path.splitdrive(path)[0]
-            or parts[0].lower() in ('.hg', '.hg.', '')
+            or _lowerclean(parts[0]) in ('.hg', '.hg.', '')
             or os.pardir in parts):
             raise util.Abort(_("path contains illegal component: %s") % path)
-        if '.hg' in path.lower():
-            lparts = [p.lower() for p in parts]
+        # Windows shortname aliases
+        for p in parts:
+            if "~" in p:
+                first, last = p.split("~", 1)
+                if last.isdigit() and first.upper() in ["HG", "HG8B6C"]:
+                    raise util.Abort(_("path contains illegal component: %s")
+                                     % path)
+        if '.hg' in _lowerclean(path):
+            lparts = [_lowerclean(p.lower()) for p in parts]
             for p in '.hg', '.hg.':
                 if p in lparts[1:]:
                     pos = lparts.index(p)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.2.2/mercurial/posix.py 
new/mercurial-3.2.3/mercurial/posix.py
--- old/mercurial-3.2.2/mercurial/posix.py      2014-12-02 01:39:13.000000000 
+0100
+++ new/mercurial-3.2.3/mercurial/posix.py      2014-12-18 21:59:22.000000000 
+0100
@@ -208,6 +208,7 @@
         - escape-encode invalid characters
         - decompose to NFD
         - lowercase
+        - omit ignored characters [200c-200f, 202a-202e, 206a-206f,feff]
 
         >>> normcase('UPPER')
         'upper'
@@ -265,7 +266,9 @@
             u = s.decode('utf-8')
 
         # Decompose then lowercase (HFS+ technote specifies lower)
-        return unicodedata.normalize('NFD', u).lower().encode('utf-8')
+        enc = unicodedata.normalize('NFD', u).lower().encode('utf-8')
+        # drop HFS+ ignored characters
+        return encoding.hfsignoreclean(enc)
 
 if sys.platform == 'cygwin':
     # workaround for cygwin, in which mount point part of path is
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.2.2/tests/test-casefolding.t 
new/mercurial-3.2.3/tests/test-casefolding.t
--- old/mercurial-3.2.2/tests/test-casefolding.t        2014-12-02 
01:39:13.000000000 +0100
+++ new/mercurial-3.2.3/tests/test-casefolding.t        2014-12-18 
21:59:22.000000000 +0100
@@ -195,4 +195,16 @@
   $ hg qrefresh a # issue 3271, qrefresh with file handled case wrong
   $ hg status # empty status means the qrefresh worked
 
+#if osx
+
+We assume anyone running the tests on a case-insensitive volume on OS
+X will be using HFS+. If that's not true, this test will fail.
+
+  $ rm A
+  >>> open(u'a\u200c'.encode('utf-8'), 'w').write('unicode is fun')
+  $ hg status
+  M A
+
+#endif
+
   $ cd ..
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.2.2/tests/test-commit.t 
new/mercurial-3.2.3/tests/test-commit.t
--- old/mercurial-3.2.2/tests/test-commit.t     2014-12-02 01:39:13.000000000 
+0100
+++ new/mercurial-3.2.3/tests/test-commit.t     2014-12-18 21:59:22.000000000 
+0100
@@ -457,4 +457,55 @@
        0         0       6  .....       0 26d3ca0dfd18 000000000000 
000000000000 (re)
        1         6       7  .....       1 d267bddd54f7 26d3ca0dfd18 
000000000000 (re)
 
-  $ cd ..
+verify pathauditor blocks evil filepaths
+  $ cat > evil-commit.py <<EOF
+  > from mercurial import ui, hg, context, node
+  > notrc = u".h\u200cg".encode('utf-8') + '/hgrc'
+  > u = ui.ui()
+  > r = hg.repository(u, '.')
+  > def filectxfn(repo, memctx, path):
+  >     return context.memfilectx(repo, path, '[hooks]\nupdate = echo owned')
+  > c = context.memctx(r, [r['tip'].node(), node.nullid],
+  >                    'evil', [notrc], filectxfn, 0)
+  > r.commitctx(c)
+  > EOF
+  $ $PYTHON evil-commit.py
+  $ hg co --clean tip
+  abort: path contains illegal component: .h\xe2\x80\x8cg/hgrc (esc)
+  [255]
+
+  $ hg rollback -f
+  repository tip rolled back to revision 1 (undo commit)
+  $ cat > evil-commit.py <<EOF
+  > from mercurial import ui, hg, context, node
+  > notrc = "HG~1/hgrc"
+  > u = ui.ui()
+  > r = hg.repository(u, '.')
+  > def filectxfn(repo, memctx, path):
+  >     return context.memfilectx(repo, path, '[hooks]\nupdate = echo owned')
+  > c = context.memctx(r, [r['tip'].node(), node.nullid],
+  >                    'evil', [notrc], filectxfn, 0)
+  > r.commitctx(c)
+  > EOF
+  $ $PYTHON evil-commit.py
+  $ hg co --clean tip
+  abort: path contains illegal component: HG~1/hgrc
+  [255]
+
+  $ hg rollback -f
+  repository tip rolled back to revision 1 (undo commit)
+  $ cat > evil-commit.py <<EOF
+  > from mercurial import ui, hg, context, node
+  > notrc = "HG8B6C~2/hgrc"
+  > u = ui.ui()
+  > r = hg.repository(u, '.')
+  > def filectxfn(repo, memctx, path):
+  >     return context.memfilectx(repo, path, '[hooks]\nupdate = echo owned')
+  > c = context.memctx(r, [r['tip'].node(), node.nullid],
+  >                    'evil', [notrc], filectxfn, 0)
+  > r.commitctx(c)
+  > EOF
+  $ $PYTHON evil-commit.py
+  $ hg co --clean tip
+  abort: path contains illegal component: HG8B6C~2/hgrc
+  [255]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.2.2/tests/test-glog.t 
new/mercurial-3.2.3/tests/test-glog.t
--- old/mercurial-3.2.2/tests/test-glog.t       2014-12-02 01:39:13.000000000 
+0100
+++ new/mercurial-3.2.3/tests/test-glog.t       2014-12-18 21:59:22.000000000 
+0100
@@ -1658,13 +1658,17 @@
   $ testlog -f dir
   []
   (group
-    (func
-      ('symbol', '_matchfiles')
-      (list
+    (and
+      (func
+        ('symbol', 'ancestors')
+        ('symbol', '.'))
+      (func
+        ('symbol', '_matchfiles')
         (list
-          ('string', 'r:')
-          ('string', 'd:relpath'))
-        ('string', 'p:dir'))))
+          (list
+            ('string', 'r:')
+            ('string', 'd:relpath'))
+          ('string', 'p:dir')))))
   $ hg up -q tip
 
 Test --follow on file not in parent revision
@@ -1679,13 +1683,17 @@
   $ testlog -f 'glob:*'
   []
   (group
-    (func
-      ('symbol', '_matchfiles')
-      (list
+    (and
+      (func
+        ('symbol', 'ancestors')
+        ('symbol', '.'))
+      (func
+        ('symbol', '_matchfiles')
         (list
-          ('string', 'r:')
-          ('string', 'd:relpath'))
-        ('string', 'p:glob:*'))))
+          (list
+            ('string', 'r:')
+            ('string', 'd:relpath'))
+          ('string', 'p:glob:*')))))
 
 Test --follow on a single rename
 
@@ -1852,13 +1860,17 @@
   $ testlog --removed --follow a
   []
   (group
-    (func
-      ('symbol', '_matchfiles')
-      (list
+    (and
+      (func
+        ('symbol', 'ancestors')
+        ('symbol', '.'))
+      (func
+        ('symbol', '_matchfiles')
         (list
-          ('string', 'r:')
-          ('string', 'd:relpath'))
-        ('string', 'p:a'))))
+          (list
+            ('string', 'r:')
+            ('string', 'd:relpath'))
+          ('string', 'p:a')))))
 
 Test --patch and --stat with --follow and --follow-first
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.2.2/tests/test-largefiles-misc.t 
new/mercurial-3.2.3/tests/test-largefiles-misc.t
--- old/mercurial-3.2.2/tests/test-largefiles-misc.t    2014-12-02 
01:39:13.000000000 +0100
+++ new/mercurial-3.2.3/tests/test-largefiles-misc.t    2014-12-18 
21:59:22.000000000 +0100
@@ -250,6 +250,16 @@
 Add a normal file to the subrepo, then test archiving
 
   $ echo 'normal file' > subrepo/normal.txt
+  $ mv subrepo/large.txt subrepo/renamed-large.txt
+  $ hg -R subrepo addremove --dry-run
+  removing large.txt
+  adding normal.txt
+  adding renamed-large.txt
+  $ hg status -S
+  ! subrepo/large.txt
+  ? subrepo/normal.txt
+  ? subrepo/renamed-large.txt
+  $ mv subrepo/renamed-large.txt subrepo/large.txt
   $ hg -R subrepo add subrepo/normal.txt
 
 Lock in subrepo, otherwise the change isn't archived
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.2.2/tests/test-log.t 
new/mercurial-3.2.3/tests/test-log.t
--- old/mercurial-3.2.2/tests/test-log.t        2014-12-02 01:39:13.000000000 
+0100
+++ new/mercurial-3.2.3/tests/test-log.t        2014-12-18 21:59:22.000000000 
+0100
@@ -1543,3 +1543,24 @@
   
 
   $ cd ..
+
+hg log -f dir across branches
+
+  $ hg init acrossbranches
+  $ cd acrossbranches
+  $ mkdir d
+  $ echo a > d/a && hg ci -Aqm a
+  $ echo b > d/a && hg ci -Aqm b
+  $ hg up -q 0
+  $ echo b > d/a && hg ci -Aqm c
+  $ hg log -f d -T '{desc}' -G
+  @  c
+  |
+  o  a
+  
+  $ hg log -f d/a -T '{desc}' -G
+  o  b
+  |
+  o  a
+  
+  $ cd ..
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.2.2/tests/test-rebase-scenario-global.t 
new/mercurial-3.2.3/tests/test-rebase-scenario-global.t
--- old/mercurial-3.2.2/tests/test-rebase-scenario-global.t     2014-12-02 
01:39:13.000000000 +0100
+++ new/mercurial-3.2.3/tests/test-rebase-scenario-global.t     2014-12-18 
21:59:22.000000000 +0100
@@ -300,8 +300,12 @@
 
 Check rebasing mutable changeset
 Source phase greater or equal to destination phase: new changeset get the 
phase of source:
+  $ hg id -n
+  5
   $ hg rebase -s9 -d0
   saved backup bundle to $TESTTMP/a7/.hg/strip-backup/2b23e52411f4-backup.hg 
(glob)
+  $ hg id -n # check we updated back to parent
+  5
   $ hg log --template "{phase}\n" -r 9
   draft
   $ hg rebase -s9 -d1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.2.2/tests/test-up-local-change.t 
new/mercurial-3.2.3/tests/test-up-local-change.t
--- old/mercurial-3.2.2/tests/test-up-local-change.t    2014-12-02 
01:39:13.000000000 +0100
+++ new/mercurial-3.2.3/tests/test-up-local-change.t    2014-12-18 
21:59:22.000000000 +0100
@@ -217,6 +217,37 @@
   +abc
 
 
+test conflicting untracked files
+
+  $ hg up -qC 0
+  $ echo untracked > b
+  $ hg st
+  ? b
+  $ hg up 1
+  b: untracked file differs
+  abort: untracked files in working directory differ from files in requested 
revision
+  [255]
+  $ rm b
+
+test conflicting untracked ignored file
+
+  $ hg up -qC 0
+  $ echo ignored > .hgignore
+  $ hg add .hgignore
+  $ hg ci -m 'add .hgignore'
+  created new head
+  $ echo ignored > ignored
+  $ hg add ignored
+  $ hg ci -m 'add ignored file'
+
+  $ hg up -q 'desc("add .hgignore")'
+  $ echo untracked > ignored
+  $ hg st
+  $ hg up 'desc("add ignored file")'
+  ignored: untracked file differs
+  abort: untracked files in working directory differ from files in requested 
revision
+  [255]
+
 test a local add
 
   $ cd ..

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to