Hello community,

here is the log from the commit of package mercurial for openSUSE:Factory 
checked in at 2014-06-10 14:38:44
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
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-05-09 
20:30:29.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.mercurial.new/mercurial.changes 2014-06-10 
14:38:46.000000000 +0200
@@ -1,0 +2,25 @@
+Sun Jun  8 05:22:41 UTC 2014 - [email protected]
+
+- update to version 3.0.1
+  * alias: change return code of bad definition to 255
+  * alias: fix loss of non-zero return code in command aliases
+  * alias: handle shlex error in command aliases
+  * bookmarks: properly align multi-byte characters
+  * bugzilla: support Bugzilla 4.4.3+ API login token authentication 
(issue4257)
+  * bundle2: fix bundle2 pulling all revs on empty pulls
+  * bundle2: fix configuration name mismatch
+  * changelog: ensure changelog._delaybuf is initialized
+  * color: don't fail on error messages when no curses (issue4237)
+  * exchange: propagate arguments to the _getbundleextrapart function
+  * localrepo: prevent leak of transaction object (issue4258)
+  * proxy: remove unneeded _set_hostport for compatibility with Python 2.7.7rc1
+  * setup.py, make: avoid problems with outdated, existing hgext/__index__.py*
+  * subrepo: avoid sanitizing ".hg/hgrc" in meta data area for non-hg subrepos
+  * subrepo: invoke "_sanitize()" also after "git merge --ff"
+  * subrepo: make "_sanitize()" take absolute path to the root of subrepo
+  * subrepo: make "_sanitize()" work
+  * subrepo: normalize path in the specific way for problematic encodings
+  * templates: fix ifcontains against sets with length > 1 (issue4259)
+  * win32: backout 1a9ebc83a74c
+
+-------------------------------------------------------------------

Old:
----
  mercurial-3.0.tar.gz

New:
----
  mercurial-3.0.1.tar.gz

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

Other differences:
------------------
++++++ mercurial.spec ++++++
--- /var/tmp/diff_new_pack.A8UInT/_old  2014-06-10 14:38:47.000000000 +0200
+++ /var/tmp/diff_new_pack.A8UInT/_new  2014-06-10 14:38:47.000000000 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           mercurial
-Version:        3.0
+Version:        3.0.1
 Release:        0
 Summary:        Scalable Distributed SCM
 License:        GPL-2.0+

++++++ mercurial-3.0.tar.gz -> mercurial-3.0.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.0/.hgsigs new/mercurial-3.0.1/.hgsigs
--- old/mercurial-3.0/.hgsigs   2014-05-02 00:48:02.000000000 +0200
+++ new/mercurial-3.0.1/.hgsigs 2014-06-01 23:15:44.000000000 +0200
@@ -87,3 +87,4 @@
 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
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.0/.hgtags new/mercurial-3.0.1/.hgtags
--- old/mercurial-3.0/.hgtags   2014-05-02 00:48:02.000000000 +0200
+++ new/mercurial-3.0.1/.hgtags 2014-06-01 23:15:44.000000000 +0200
@@ -100,3 +100,4 @@
 b96cb15ec9e04d8ac5ee08b34fcbbe4200588965 2.9.1
 3f83fc5cfe715d292069ee8417c83804f6c6c1e4 2.9.2
 564f55b251224f16508dd1311452db7780dafe2b 3.0-rc
+2195ac506c6ababe86985b932f4948837c0891b5 3.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.0/Makefile new/mercurial-3.0.1/Makefile
--- old/mercurial-3.0/Makefile  2014-05-02 00:47:23.000000000 +0200
+++ new/mercurial-3.0.1/Makefile        2014-06-01 23:15:14.000000000 +0200
@@ -56,7 +56,7 @@
        find contrib doc hgext i18n mercurial tests \
                \( -name '*.py[cdo]' -o -name '*.so' \) -exec rm -f '{}' ';'
        rm -f $(addprefix mercurial/,$(notdir $(wildcard 
mercurial/pure/[a-z]*.py)))
-       rm -f MANIFEST MANIFEST.in mercurial/__version__.py tests/*.err
+       rm -f MANIFEST MANIFEST.in mercurial/__version__.py hgext/__index__.py 
tests/*.err
        rm -rf build mercurial/locale
        $(MAKE) -C doc clean
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.0/PKG-INFO new/mercurial-3.0.1/PKG-INFO
--- old/mercurial-3.0/PKG-INFO  2014-05-02 00:48:10.000000000 +0200
+++ new/mercurial-3.0.1/PKG-INFO        2014-06-01 23:15:54.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.1
 Name: mercurial
-Version: 3.0
+Version: 3.0.1
 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.0/hgext/bugzilla.py 
new/mercurial-3.0.1/hgext/bugzilla.py
--- old/mercurial-3.0/hgext/bugzilla.py 2014-05-02 00:47:23.000000000 +0200
+++ new/mercurial-3.0.1/hgext/bugzilla.py       2014-06-01 23:15:14.000000000 
+0200
@@ -1,7 +1,7 @@
 # bugzilla.py - bugzilla integration for mercurial
 #
 # Copyright 2006 Vadim Gelfer <[email protected]>
-# Copyright 2011-2 Jim Hague <[email protected]>
+# Copyright 2011-4 Jim Hague <[email protected]>
 #
 # This software may be used and distributed according to the terms of the
 # GNU General Public License version 2 or any later version.
@@ -523,7 +523,7 @@
 
     The regular xmlrpclib transports ignore cookies. Which causes
     a bit of a problem when you need a cookie-based login, as with
-    the Bugzilla XMLRPC interface.
+    the Bugzilla XMLRPC interface prior to 4.4.3.
 
     So this is a helper for defining a Transport which looks for
     cookies being set in responses and saves them to add to all future
@@ -620,7 +620,9 @@
         ver = self.bzproxy.Bugzilla.version()['version'].split('.')
         self.bzvermajor = int(ver[0])
         self.bzverminor = int(ver[1])
-        self.bzproxy.User.login({'login': user, 'password': passwd})
+        login = self.bzproxy.User.login({'login': user, 'password': passwd,
+                                         'restrict_login': True})
+        self.bztoken = login.get('token', '')
 
     def transport(self, uri):
         if urlparse.urlparse(uri, "http")[0] == "https":
@@ -631,13 +633,15 @@
     def get_bug_comments(self, id):
         """Return a string with all comment text for a bug."""
         c = self.bzproxy.Bug.comments({'ids': [id],
-                                       'include_fields': ['text']})
+                                       'include_fields': ['text'],
+                                       'token': self.bztoken})
         return ''.join([t['text'] for t in c['bugs'][str(id)]['comments']])
 
     def filter_real_bug_ids(self, bugs):
         probe = self.bzproxy.Bug.get({'ids': sorted(bugs.keys()),
                                       'include_fields': [],
                                       'permissive': True,
+                                      'token': self.bztoken,
                                       })
         for badbug in probe['faults']:
             id = badbug['id']
@@ -662,6 +666,7 @@
             if 'fix' in newstate:
                 args['status'] = self.fixstatus
                 args['resolution'] = self.fixresolution
+            args['token'] = self.bztoken
             self.bzproxy.Bug.update(args)
         else:
             if 'fix' in newstate:
@@ -719,10 +724,12 @@
         than the subject line, and leave a blank line after it.
         '''
         user = self.map_committer(committer)
-        matches = self.bzproxy.User.get({'match': [user]})
+        matches = self.bzproxy.User.get({'match': [user],
+                                         'token': self.bztoken})
         if not matches['users']:
             user = self.ui.config('bugzilla', 'user', 'bugs')
-            matches = self.bzproxy.User.get({'match': [user]})
+            matches = self.bzproxy.User.get({'match': [user],
+                                             'token': self.bztoken})
             if not matches['users']:
                 raise util.Abort(_("default bugzilla user %s email not found") 
%
                                  user)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.0/hgext/color.py 
new/mercurial-3.0.1/hgext/color.py
--- old/mercurial-3.0/hgext/color.py    2014-05-02 00:47:23.000000000 +0200
+++ new/mercurial-3.0.1/hgext/color.py  2014-06-01 23:15:14.000000000 +0200
@@ -230,7 +230,7 @@
                         'cyan': (False, curses.COLOR_CYAN),
                         'white': (False, curses.COLOR_WHITE)}
 except ImportError:
-    _terminfo_params = False
+    _terminfo_params = {}
 
 _styles = {'grep.match': 'red bold',
            'grep.linenumber': 'green',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.0/i18n/de.po 
new/mercurial-3.0.1/i18n/de.po
--- old/mercurial-3.0/i18n/de.po        2014-05-02 00:47:23.000000000 +0200
+++ new/mercurial-3.0.1/i18n/de.po      2014-06-01 23:15:14.000000000 +0200
@@ -21,7 +21,7 @@
 "Project-Id-Version: Mercurial\n"
 "Report-Msgid-Bugs-To: <[email protected]>\n"
 "POT-Creation-Date: 2014-01-29 16:47+0100\n"
-"PO-Revision-Date: 2013-09-30 20:52+0100\n"
+"PO-Revision-Date: 2014-05-07 09:14+0200\n"
 "Last-Translator: Simon Heimberg <[email protected]>\n"
 "Language-Team: \n"
 "Language: de\n"
@@ -3437,11 +3437,11 @@
 msgstr "hg fetch [QUELLE]"
 
 msgid "commands to sign and verify changesets"
-msgstr "Nutzt eine Programm um den Fehlerstatus zu bestimmen"
+msgstr "Kommandos um Änderungssätze zu signieren und Signaturen zu 
verifizieren"
 
 #, python-format
 msgid "%s Unknown key ID \"%s\"\n"
-msgstr ""
+msgstr "%s unbekannte Schlüssel-ID \"%s\"\n"
 
 #, python-format
 msgid "%s Bad signature from \"%s\"\n"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.0/i18n/ja.po 
new/mercurial-3.0.1/i18n/ja.po
--- old/mercurial-3.0/i18n/ja.po        2014-05-02 00:47:23.000000000 +0200
+++ new/mercurial-3.0.1/i18n/ja.po      2014-06-01 23:15:14.000000000 +0200
@@ -149,8 +149,8 @@
 msgstr ""
 "Project-Id-Version: Mercurial\n"
 "Report-Msgid-Bugs-To: <[email protected]>\n"
-"POT-Creation-Date: 2014-04-30 22:52+0900\n"
-"PO-Revision-Date: 2014-04-30 23:08+0900\n"
+"POT-Creation-Date: 2014-05-30 19:32+0900\n"
+"PO-Revision-Date: 2014-05-30 19:43+0900\n"
 "Last-Translator: Japanese translation team <[email protected]>\n"
 "Language-Team: Japanese\n"
 "Language: ja\n"
@@ -8204,11 +8204,11 @@
 msgid "empty \"rev\" revision set - nothing to rebase\n"
 msgstr "--rev での指定対象が空です - 移動対象がありません\n"
 
-msgid "empty \"source\" revision set - nothing to rebase"
-msgstr "--soruce での指定対象が空です - 移動対象がありません"
+msgid "empty \"source\" revision set - nothing to rebase\n"
+msgstr "--soruce での指定対象が空です - 移動対象がありません\n"
 
-msgid "empty \"base\" revision set - can't compute rebase set"
-msgstr "--base での指定対象が空です - 移動対象を算出できません"
+msgid "empty \"base\" revision set - can't compute rebase set\n"
+msgstr "--base での指定対象が空です - 移動対象を算出できません\n"
 
 #, python-format
 msgid "nothing to rebase - %s is both \"base\" and destination\n"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.0/i18n/zh_TW.po 
new/mercurial-3.0.1/i18n/zh_TW.po
--- old/mercurial-3.0/i18n/zh_TW.po     2014-05-02 00:47:23.000000000 +0200
+++ new/mercurial-3.0.1/i18n/zh_TW.po   2014-06-01 23:15:14.000000000 +0200
@@ -8,11 +8,10 @@
 "Project-Id-Version: Mercurial\n"
 "Report-Msgid-Bugs-To: <[email protected]>\n"
 "POT-Creation-Date: 2010-10-31 22:27+0100\n"
-"PO-Revision-Date: 2009-10-25 12:50+0100\n"
-"Last-Translator: Chia-Huan Wu <[email protected]>,"
-"leolarrel<[email protected]>\n"
+"PO-Revision-Date: 2014-05-07 09:20+0200\n"
+"Last-Translator: Chia-Huan Wu 
<[email protected]>,leolarrel<[email protected]>\n"
 "Language-Team: Traditional Chinese\n"
-"Language: \n"
+"Language: zh_TW\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.0/mercurial/__version__.py 
new/mercurial-3.0.1/mercurial/__version__.py
--- old/mercurial-3.0/mercurial/__version__.py  2014-05-02 00:48:09.000000000 
+0200
+++ new/mercurial-3.0.1/mercurial/__version__.py        2014-06-01 
23:15:52.000000000 +0200
@@ -1,2 +1,2 @@
 # this file is autogenerated by setup.py
-version = "3.0"
+version = "3.0.1"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.0/mercurial/changelog.py 
new/mercurial-3.0.1/mercurial/changelog.py
--- old/mercurial-3.0/mercurial/changelog.py    2014-05-02 00:47:23.000000000 
+0200
+++ new/mercurial-3.0.1/mercurial/changelog.py  2014-06-01 23:15:14.000000000 
+0200
@@ -127,6 +127,7 @@
             self._generaldelta = False
         self._realopener = opener
         self._delayed = False
+        self._delaybuf = []
         self._divert = False
         self.filteredrevs = frozenset()
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.0/mercurial/commands.py 
new/mercurial-3.0.1/mercurial/commands.py
--- old/mercurial-3.0/mercurial/commands.py     2014-05-02 00:47:23.000000000 
+0200
+++ new/mercurial-3.0.1/mercurial/commands.py   2014-06-01 23:15:14.000000000 
+0200
@@ -951,8 +951,9 @@
                 if ui.quiet:
                     ui.write("%s\n" % bmark, label=label)
                 else:
-                    ui.write(" %s %-25s %d:%s\n" % (
-                        prefix, bmark, repo.changelog.rev(n), hexfn(n)),
+                    pad = " " * (25 - encoding.colwidth(bmark))
+                    ui.write(" %s %s%s %d:%s\n" % (
+                        prefix, bmark, pad, repo.changelog.rev(n), hexfn(n)),
                         label=label)
 
 @command('branch',
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.0/mercurial/dispatch.py 
new/mercurial-3.0.1/mercurial/dispatch.py
--- old/mercurial-3.0/mercurial/dispatch.py     2014-05-02 00:47:23.000000000 
+0200
+++ new/mercurial-3.0.1/mercurial/dispatch.py   2014-06-01 23:15:14.000000000 
+0200
@@ -355,7 +355,7 @@
         if not self.definition:
             def fn(ui, *args):
                 ui.warn(_("no definition for alias '%s'\n") % self.name)
-                return 1
+                return -1
             self.fn = fn
             self.badalias = True
             return
@@ -383,7 +383,16 @@
             self.fn = fn
             return
 
-        args = shlex.split(self.definition)
+        try:
+            args = shlex.split(self.definition)
+        except ValueError, inst:
+            def fn(ui, *args):
+                ui.warn(_("error in definition for alias '%s': %s\n")
+                        % (self.name, inst))
+                return -1
+            self.fn = fn
+            self.badalias = True
+            return
         self.cmdname = cmd = args.pop(0)
         args = map(util.expandpath, args)
 
@@ -393,7 +402,7 @@
                     ui.warn(_("error in definition for alias '%s': %s may only 
"
                               "be given on the command line\n")
                             % (self.name, invalidarg))
-                    return 1
+                    return -1
 
                 self.fn = fn
                 self.badalias = True
@@ -425,14 +434,14 @@
                     commands.help_(ui, cmd, unknowncmd=True)
                 except error.UnknownCommand:
                     pass
-                return 1
+                return -1
             self.fn = fn
             self.badalias = True
         except error.AmbiguousCommand:
             def fn(ui, *args):
                 ui.warn(_("alias '%s' resolves to ambiguous command '%s'\n") \
                             % (self.name, cmd))
-                return 1
+                return -1
             self.fn = fn
             self.badalias = True
 
@@ -445,7 +454,7 @@
             return self.fn(ui, *args, **opts)
         else:
             try:
-                util.checksignature(self.fn)(ui, *args, **opts)
+                return util.checksignature(self.fn)(ui, *args, **opts)
             except error.SignatureError:
                 args = ' '.join([self.cmdname] + self.args)
                 ui.debug("alias '%s' expands to '%s'\n" % (self.name, args))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.0/mercurial/exchange.py 
new/mercurial-3.0.1/mercurial/exchange.py
--- old/mercurial-3.0/mercurial/exchange.py     2014-05-02 00:47:23.000000000 
+0200
+++ new/mercurial-3.0.1/mercurial/exchange.py   2014-06-01 23:15:14.000000000 
+0200
@@ -537,7 +537,7 @@
     lock = pullop.repo.lock()
     try:
         _pulldiscovery(pullop)
-        if (pullop.repo.ui.configbool('server', 'bundle2', False)
+        if (pullop.repo.ui.configbool('experimental', 'bundle2-exp', False)
             and pullop.remote.capable('bundle2-exp')):
             _pullbundle2(pullop)
         if 'changegroup' in pullop.todosteps:
@@ -573,12 +573,13 @@
     kwargs['bundlecaps'].add('bundle2=' + urllib.quote(capsblob))
     # pulling changegroup
     pullop.todosteps.remove('changegroup')
+
+    kwargs['common'] = pullop.common
+    kwargs['heads'] = pullop.heads or pullop.rheads
     if not pullop.fetch:
-            pullop.repo.ui.status(_("no changes found\n"))
-            pullop.cgresult = 0
+        pullop.repo.ui.status(_("no changes found\n"))
+        pullop.cgresult = 0
     else:
-        kwargs['common'] = pullop.common
-        kwargs['heads'] = pullop.heads or pullop.rheads
         if pullop.heads is None and list(pullop.common) == [nullid]:
             pullop.repo.ui.status(_("requesting all changes\n"))
     _pullbundle2extraprepare(pullop, kwargs)
@@ -589,8 +590,10 @@
         op = bundle2.processbundle(pullop.repo, bundle, pullop.gettransaction)
     except bundle2.UnknownPartError, exc:
         raise util.Abort('missing support for %s' % exc)
-    assert len(op.records['changegroup']) == 1
-    pullop.cgresult = op.records['changegroup'][0]['return']
+
+    if pullop.fetch:
+        assert len(op.records['changegroup']) == 1
+        pullop.cgresult = op.records['changegroup'][0]['return']
 
 def _pullbundle2extraprepare(pullop, kwargs):
     """hook function so that extensions can extend the getbundle call"""
@@ -684,7 +687,7 @@
     The implementation is at a very early stage and will get massive rework
     when the API of bundle is refined.
     """
-    # build bundle here.
+    # build changegroup bundle here.
     cg = changegroup.getbundle(repo, source, heads=heads,
                                common=common, bundlecaps=bundlecaps)
     if bundlecaps is None or 'HG2X' not in bundlecaps:
@@ -697,10 +700,11 @@
             blob = urllib.unquote(bcaps[len('bundle2='):])
             b2caps.update(bundle2.decodecaps(blob))
     bundler = bundle2.bundle20(repo.ui, b2caps)
-    part = bundle2.bundlepart('b2x:changegroup', data=cg.getchunks())
-    bundler.addpart(part)
-    _getbundleextrapart(bundler, repo, source, heads=None, common=None,
-                        bundlecaps=None, **kwargs)
+    if cg:
+        part = bundle2.bundlepart('b2x:changegroup', data=cg.getchunks())
+        bundler.addpart(part)
+    _getbundleextrapart(bundler, repo, source, heads=heads, common=common,
+                        bundlecaps=bundlecaps, **kwargs)
     return util.chunkbuffer(bundler.getchunks())
 
 def _getbundleextrapart(bundler, repo, source, heads=None, common=None,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.0/mercurial/extensions.py 
new/mercurial-3.0.1/mercurial/extensions.py
--- old/mercurial-3.0/mercurial/extensions.py   2014-05-02 00:47:23.000000000 
+0200
+++ new/mercurial-3.0.1/mercurial/extensions.py 2014-06-01 23:15:14.000000000 
+0200
@@ -281,7 +281,7 @@
         return dict((name, gettext(desc))
                     for name, desc in __index__.docs.iteritems()
                     if name not in _order)
-    except ImportError:
+    except (ImportError, AttributeError):
         pass
 
     paths = _disabledpaths()
@@ -304,7 +304,7 @@
             return
         else:
             return gettext(__index__.docs.get(name))
-    except ImportError:
+    except (ImportError, AttributeError):
         pass
 
     paths = _disabledpaths()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.0/mercurial/localrepo.py 
new/mercurial-3.0.1/mercurial/localrepo.py
--- old/mercurial-3.0/mercurial/localrepo.py    2014-05-02 00:47:23.000000000 
+0200
+++ new/mercurial-3.0.1/mercurial/localrepo.py  2014-06-01 23:15:14.000000000 
+0200
@@ -858,7 +858,7 @@
                 _("abandoned transaction found - run hg recover"))
 
         def onclose():
-            self.store.write(tr)
+            self.store.write(self._transref())
 
         self._writejournal(desc)
         renames = [(vfs, x, undoname(x)) for vfs, x in self._journalfiles()]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.0/mercurial/pathutil.py 
new/mercurial-3.0.1/mercurial/pathutil.py
--- old/mercurial-3.0/mercurial/pathutil.py     2014-05-02 00:47:23.000000000 
+0200
+++ new/mercurial-3.0.1/mercurial/pathutil.py   2014-06-01 23:15:14.000000000 
+0200
@@ -142,3 +142,25 @@
             name = dirname
 
         raise util.Abort(_("%s not under root '%s'") % (myname, root))
+
+def normasprefix(path):
+    '''normalize the specified path as path prefix
+
+    Returned vaule can be used safely for "p.startswith(prefix)",
+    "p[len(prefix):]", and so on.
+
+    For efficiency, this expects "path" argument to be already
+    normalized by "os.path.normpath", "os.path.realpath", and so on.
+
+    See also issue3033 for detail about need of this function.
+
+    >>> normasprefix('/foo/bar').replace(os.sep, '/')
+    '/foo/bar/'
+    >>> normasprefix('/').replace(os.sep, '/')
+    '/'
+    '''
+    d, p = os.path.splitdrive(path)
+    if len(p) != len(os.sep):
+        return path + os.sep
+    else:
+        return path
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.0/mercurial/subrepo.py 
new/mercurial-3.0.1/mercurial/subrepo.py
--- old/mercurial-3.0/mercurial/subrepo.py      2014-05-02 00:47:23.000000000 
+0200
+++ new/mercurial-3.0.1/mercurial/subrepo.py    2014-06-01 23:15:14.000000000 
+0200
@@ -276,8 +276,7 @@
     parent = repo
     while util.safehasattr(parent, '_subparent'):
         parent = parent._subparent
-    p = parent.root.rstrip(os.sep)
-    return repo.root[len(p) + 1:]
+    return repo.root[len(pathutil.normasprefix(parent.root)):]
 
 def subrelpath(sub):
     """return path to this subrepo as seen from outermost repo"""
@@ -314,17 +313,19 @@
     if abort:
         raise util.Abort(_("default path for subrepository not found"))
 
-def _sanitize(ui, path):
-    def v(arg, dirname, names):
+def _sanitize(ui, path, ignore):
+    for dirname, dirs, names in os.walk(path):
+        for i, d in enumerate(dirs):
+            if d.lower() == ignore:
+                del dirs[i]
+                break
         if os.path.basename(dirname).lower() != '.hg':
-            return
+            continue
         for f in names:
             if f.lower() == 'hgrc':
-                ui.warn(
-                    _("warning: removing potentially hostile .hg/hgrc in '%s'")
-                      % path)
+                ui.warn(_("warning: removing potentially hostile 'hgrc' "
+                          "in '%s'\n") % dirname)
                 os.unlink(os.path.join(dirname, f))
-    os.walk(path, v, None)
 
 def subrepo(ctx, path):
     """return instance of the right subrepo class for subrepo in path"""
@@ -1052,7 +1053,7 @@
         # update to a directory which has since been deleted and recreated.
         args.append('%s@%s' % (state[0], state[1]))
         status, err = self._svncommand(args, failok=True)
-        _sanitize(self._ui, self._path)
+        _sanitize(self._ui, self._ctx._repo.wjoin(self._path), '.svn')
         if not re.search('Checked out revision [0-9]+.', status):
             if ('is already a working copy for a different URL' in err
                 and (self._wcchanged()[:2] == (False, False))):
@@ -1345,7 +1346,7 @@
                 self._gitcommand(['reset', 'HEAD'])
                 cmd.append('-f')
             self._gitcommand(cmd + args)
-            _sanitize(self._ui, self._path)
+            _sanitize(self._ui, self._abspath, '.git')
 
         def rawcheckout():
             # no branch to checkout, check it out with no branch
@@ -1394,6 +1395,7 @@
             if tracking[remote] != self._gitcurrentbranch():
                 checkout([tracking[remote]])
             self._gitcommand(['merge', '--ff', remote])
+            _sanitize(self._ui, self._abspath, '.git')
         else:
             # a real merge would be required, just checkout the revision
             rawcheckout()
@@ -1429,7 +1431,7 @@
                 self.get(state) # fast forward merge
             elif base != self._state[1]:
                 self._gitcommand(['merge', '--no-commit', revision])
-            _sanitize(self._ui, self._path)
+            _sanitize(self._ui, self._abspath, '.git')
 
         if self.dirty():
             if self._gitstate() != revision:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.0/mercurial/templater.py 
new/mercurial-3.0.1/mercurial/templater.py
--- old/mercurial-3.0/mercurial/templater.py    2014-05-02 00:47:23.000000000 
+0200
+++ new/mercurial-3.0.1/mercurial/templater.py  2014-06-01 23:15:14.000000000 
+0200
@@ -310,7 +310,9 @@
     item = stringify(args[0][0](context, mapping, args[0][1]))
     items = args[1][0](context, mapping, args[1][1])
 
-    if item in items:
+    # Iterating over items gives a formatted string, so we iterate
+    # directly over the raw values.
+    if item in [i.values()[0] for i in items()]:
         yield _evalifliteral(args[2], context, mapping)
     elif len(args) == 4:
         yield _evalifliteral(args[3], context, mapping)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.0/mercurial/url.py 
new/mercurial-3.0.1/mercurial/url.py
--- old/mercurial-3.0/mercurial/url.py  2014-05-02 00:47:23.000000000 +0200
+++ new/mercurial-3.0.1/mercurial/url.py        2014-06-01 23:15:14.000000000 
+0200
@@ -225,7 +225,6 @@
     proxyheaders = dict(
             [(x, self.headers[x]) for x in self.headers
              if x.lower().startswith('proxy-')])
-    self._set_hostport(self.host, self.port)
     self.send('CONNECT %s HTTP/1.0\r\n' % self.realhostport)
     for header in proxyheaders.iteritems():
         self.send('%s: %s\r\n' % header)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.0/mercurial/win32.py 
new/mercurial-3.0.1/mercurial/win32.py
--- old/mercurial-3.0/mercurial/win32.py        2014-05-02 00:47:23.000000000 
+0200
+++ new/mercurial-3.0.1/mercurial/win32.py      2014-06-01 23:15:14.000000000 
+0200
@@ -25,7 +25,6 @@
 # GetLastError
 _ERROR_SUCCESS = 0
 _ERROR_NO_MORE_FILES = 18
-_ERROR_SHARING_VIOLATION = 32
 _ERROR_INVALID_PARAMETER = 87
 _ERROR_INSUFFICIENT_BUFFER = 122
 
@@ -61,9 +60,7 @@
 
 _OPEN_EXISTING = 3
 
-_FILE_FLAG_OPEN_REPARSE_POINT = 0x00200000
 _FILE_FLAG_BACKUP_SEMANTICS = 0x02000000
-_FILE_FLAG_DELETE_ON_CLOSE = 0x04000000
 
 # SetFileAttributes
 _FILE_ATTRIBUTE_NORMAL = 0x80
@@ -424,18 +421,11 @@
 def unlink(f):
     '''try to implement POSIX' unlink semantics on Windows'''
 
-    # If we can open f exclusively, no other processes must have open handles
-    # for it and we can expect its name will be deleted immediately when we
-    # close the handle unless we have another in the same process.  We also
-    # expect we shall simply fail to open f if it is a directory.
-    fh = _kernel32.CreateFileA(f, 0, 0, None, _OPEN_EXISTING,
-        _FILE_FLAG_OPEN_REPARSE_POINT | _FILE_FLAG_DELETE_ON_CLOSE, None)
-    if fh != _INVALID_HANDLE_VALUE:
-        _kernel32.CloseHandle(fh)
-        return
-    error = _kernel32.GetLastError()
-    if error != _ERROR_SHARING_VIOLATION:
-        raise ctypes.WinError(error)
+    if os.path.isdir(f):
+        # use EPERM because it is POSIX prescribed value, even though
+        # unlink(2) on directories returns EISDIR on Linux
+        raise IOError(errno.EPERM,
+                      "Unlinking directory not permitted: '%s'" % f)
 
     # POSIX allows to unlink and rename open files. Windows has serious
     # problems with doing that:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.0/mercurial/wireproto.py 
new/mercurial-3.0.1/mercurial/wireproto.py
--- old/mercurial-3.0/mercurial/wireproto.py    2014-05-02 00:47:23.000000000 
+0200
+++ new/mercurial-3.0.1/mercurial/wireproto.py  2014-06-01 23:15:14.000000000 
+0200
@@ -619,9 +619,15 @@
     opts = options('debugwireargs', ['three', 'four'], others)
     return repo.debugwireargs(one, two, **opts)
 
+# List of options accepted by getbundle.
+#
+# Meant to be extended by extensions. It is the extension's responsibility to
+# ensure such options are properly processed in exchange.getbundle.
+gboptslist = ['heads', 'common', 'bundlecaps']
+
 @wireprotocommand('getbundle', '*')
 def getbundle(repo, proto, others):
-    opts = options('getbundle', ['heads', 'common', 'bundlecaps'], others)
+    opts = options('getbundle', gboptslist, others)
     for k, v in opts.iteritems():
         if k in ('heads', 'common'):
             opts[k] = decodelist(v)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.0/setup.py new/mercurial-3.0.1/setup.py
--- old/mercurial-3.0/setup.py  2014-05-02 00:47:23.000000000 +0200
+++ new/mercurial-3.0.1/setup.py        2014-06-01 23:15:14.000000000 +0200
@@ -331,7 +331,9 @@
 
     def run(self):
         if os.path.exists(self._indexfilename):
-            os.unlink(self._indexfilename)
+            f = open(self._indexfilename, 'w')
+            f.write('# empty\n')
+            f.close()
 
         # here no extension enabled, disabled() lists up everything
         code = ('import pprint; from mercurial import extensions; '
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.0/tests/test-alias.t 
new/mercurial-3.0.1/tests/test-alias.t
--- old/mercurial-3.0/tests/test-alias.t        2014-05-02 00:47:23.000000000 
+0200
+++ new/mercurial-3.0.1/tests/test-alias.t      2014-06-01 23:15:14.000000000 
+0200
@@ -4,12 +4,14 @@
   > # should clobber ci but not commit (issue2993)
   > ci = version
   > myinit = init
+  > mycommit = commit
   > optionalrepo = showconfig alias.myinit
   > cleanstatus = status -c
   > unknown = bargle
   > ambiguous = s
   > recursive = recursive
   > nodefinition =
+  > noclosingquotation = '
   > no--cwd = status --cwd elsewhere
   > no-R = status -R elsewhere
   > no--repo = status --repo elsewhere
@@ -41,6 +43,7 @@
   > escaped2 = !sh -c 'echo "HGFOO is \$\$HGFOO"'
   > escaped3 = !sh -c 'echo "\$1 is \$\$\$1"'
   > escaped4 = !printf '\$\$0 \$\$@\n'
+  > exit1 = !sh -c 'exit 1'
   > 
   > [defaults]
   > mylog = -q
@@ -58,6 +61,7 @@
 
   $ hg unknown
   alias 'unknown' resolves to unknown command 'bargle'
+  [255]
   $ hg help unknown
   alias 'unknown' resolves to unknown command 'bargle'
 
@@ -66,6 +70,7 @@
 
   $ hg ambiguous
   alias 'ambiguous' resolves to ambiguous command 's'
+  [255]
   $ hg help ambiguous
   alias 'ambiguous' resolves to ambiguous command 's'
 
@@ -74,6 +79,7 @@
 
   $ hg recursive
   alias 'recursive' resolves to unknown command 'recursive'
+  [255]
   $ hg help recursive
   alias 'recursive' resolves to unknown command 'recursive'
 
@@ -82,30 +88,45 @@
 
   $ hg nodef
   no definition for alias 'nodefinition'
+  [255]
   $ hg help nodef
   no definition for alias 'nodefinition'
 
 
+no closing quotation
+
+  $ hg noclosing
+  error in definition for alias 'noclosingquotation': No closing quotation
+  [255]
+  $ hg help noclosing
+  error in definition for alias 'noclosingquotation': No closing quotation
+
+
 invalid options
 
   $ hg no--cwd
   error in definition for alias 'no--cwd': --cwd may only be given on the 
command line
+  [255]
   $ hg help no--cwd
   error in definition for alias 'no--cwd': --cwd may only be given on the 
command line
   $ hg no-R
   error in definition for alias 'no-R': -R may only be given on the command 
line
+  [255]
   $ hg help no-R
   error in definition for alias 'no-R': -R may only be given on the command 
line
   $ hg no--repo
   error in definition for alias 'no--repo': --repo may only be given on the 
command line
+  [255]
   $ hg help no--repo
   error in definition for alias 'no--repo': --repo may only be given on the 
command line
   $ hg no--repository
   error in definition for alias 'no--repository': --repository may only be 
given on the command line
+  [255]
   $ hg help no--repository
   error in definition for alias 'no--repository': --repository may only be 
given on the command line
   $ hg no--config
   error in definition for alias 'no--config': --config may only be given on 
the command line
+  [255]
 
 optional repository
 
@@ -125,6 +146,7 @@
 
   $ hg nousage
   no rollback information available
+  [1]
 
   $ echo foo > foo
   $ hg commit -Amfoo
@@ -442,3 +464,11 @@
   $ hg --config alias.log='id' history
 
   $ cd ../..
+
+return code of command and shell aliases:
+
+  $ hg mycommit -R alias
+  nothing changed
+  [1]
+  $ hg exit1
+  [1]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.0/tests/test-bundle2.t 
new/mercurial-3.0.1/tests/test-bundle2.t
--- old/mercurial-3.0/tests/test-bundle2.t      2014-05-02 00:47:23.000000000 
+0200
+++ new/mercurial-3.0.1/tests/test-bundle2.t    2014-06-01 23:15:14.000000000 
+0200
@@ -8,6 +8,14 @@
   > code. We still need to be able to test it while it grow up.
   > """
   > 
+  > try:
+  >     import msvcrt
+  >     msvcrt.setmode(sys.stdin.fileno(), os.O_BINARY)
+  >     msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)
+  >     msvcrt.setmode(sys.stderr.fileno(), os.O_BINARY)
+  > except ImportError:
+  >     pass
+  > 
   > import sys
   > from mercurial import cmdutil
   > from mercurial import util
@@ -791,6 +799,12 @@
   added 1 changesets with 1 changes to 1 files (+1 heads)
   (run 'hg heads' to see heads, 'hg merge' to merge)
 
+pull empty
+
+  $ hg -R other pull -r 24b6387c8c8c
+  pulling from $TESTTMP/main (glob)
+  no changes found
+
 push
 
   $ hg -R main push other --rev eea13746799a
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.0/tests/test-command-template.t 
new/mercurial-3.0.1/tests/test-command-template.t
--- old/mercurial-3.0/tests/test-command-template.t     2014-05-02 
00:47:23.000000000 +0200
+++ new/mercurial-3.0.1/tests/test-command-template.t   2014-06-01 
23:15:14.000000000 +0200
@@ -1819,6 +1819,11 @@
   1 not current rev
   0 not current rev
 
+  $ hg log --template '{rev} {ifcontains(rev, revset(". + .^"), "match rev", 
"not match rev")}\n'
+  2 match rev
+  1 match rev
+  0 not match rev
+
   $ hg log --template '{rev} Parents: {revset("parents(%s)", rev)}\n'
   2 Parents: 1
   1 Parents: 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.0/tests/test-doctest.py 
new/mercurial-3.0.1/tests/test-doctest.py
--- old/mercurial-3.0/tests/test-doctest.py     2014-05-02 00:47:23.000000000 
+0200
+++ new/mercurial-3.0.1/tests/test-doctest.py   2014-06-01 23:15:14.000000000 
+0200
@@ -19,6 +19,7 @@
 testmod('mercurial.hgweb.hgwebdir_mod')
 testmod('mercurial.match')
 testmod('mercurial.minirst')
+testmod('mercurial.pathutil')
 testmod('mercurial.revset')
 testmod('mercurial.store')
 testmod('mercurial.subrepo')
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.0/tests/test-encoding-align.t 
new/mercurial-3.0.1/tests/test-encoding-align.t
--- old/mercurial-3.0/tests/test-encoding-align.t       2014-05-02 
00:47:23.000000000 +0200
+++ new/mercurial-3.0.1/tests/test-encoding-align.t     2014-06-01 
23:15:14.000000000 +0200
@@ -117,22 +117,25 @@
   marked working directory as branch \xe7\x9f\xad\xe5\x90\x8d (esc)
   (branches are permanent and global, did you want a bookmark?)
   $ hg tag $S
+  $ hg book -f $S
   $ hg branch $M
   marked working directory as branch MIDDLE_
   (branches are permanent and global, did you want a bookmark?)
   $ hg tag $M
+  $ hg book -f $M
   $ hg branch $L
   marked working directory as branch 
\xe9\x95\xb7\xe3\x81\x84\xe9\x95\xb7\xe3\x81\x84\xe5\x90\x8d\xe5\x89\x8d (esc)
   (branches are permanent and global, did you want a bookmark?)
   $ hg tag $L
+  $ hg book -f $L
 
 check alignment of branches
 
-  $ hg tags
-  tip                                5:d745ff46155b
-  \xe9\x95\xb7\xe3\x81\x84\xe9\x95\xb7\xe3\x81\x84\xe5\x90\x8d\xe5\x89\x8d     
                  4:9259be597f19 (esc)
-  MIDDLE_                            3:b06c5b6def9e
-  \xe7\x9f\xad\xe5\x90\x8d                               2:64a70663cee8 (esc)
+  $ hg branches
+  \xe9\x95\xb7\xe3\x81\x84\xe9\x95\xb7\xe3\x81\x84\xe5\x90\x8d\xe5\x89\x8d     
              5:d745ff46155b (esc)
+  MIDDLE_                        4:9259be597f19 (inactive)
+  \xe7\x9f\xad\xe5\x90\x8d                           3:b06c5b6def9e (inactive) 
(esc)
+  default                        2:64a70663cee8 (inactive)
 
 check alignment of tags
 
@@ -142,4 +145,9 @@
   MIDDLE_                            3:b06c5b6def9e
   \xe7\x9f\xad\xe5\x90\x8d                               2:64a70663cee8 (esc)
 
-  $ cd ..
+check alignment of bookmarks
+
+  $ hg book
+     MIDDLE_                   5:d745ff46155b
+     \xe7\x9f\xad\xe5\x90\x8d                      4:9259be597f19 (esc)
+   * \xe9\x95\xb7\xe3\x81\x84\xe9\x95\xb7\xe3\x81\x84\xe5\x90\x8d\xe5\x89\x8d  
            5:d745ff46155b (esc)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.0/tests/test-status-color.t 
new/mercurial-3.0.1/tests/test-status-color.t
--- old/mercurial-3.0/tests/test-status-color.t 2014-05-02 00:47:23.000000000 
+0200
+++ new/mercurial-3.0.1/tests/test-status-color.t       2014-06-01 
23:15:14.000000000 +0200
@@ -319,4 +319,17 @@
   \x1b[0;31;1mU a\x1b[0m (esc)
   \x1b[0;32;1mR b\x1b[0m (esc)
 
+color coding of error message with current availability of curses
+
+  $ hg unknowncommand > /dev/null
+  hg: unknown command 'unknowncommand'
+  [255]
+
+color coding of error message without curses
+
+  $ echo 'raise ImportError' > curses.py
+  $ PYTHONPATH=`pwd`:$PYTHONPATH hg unknowncommand > /dev/null
+  hg: unknown command 'unknowncommand'
+  [255]
+
   $ cd ..
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.0/tests/test-subrepo-git.t 
new/mercurial-3.0.1/tests/test-subrepo-git.t
--- old/mercurial-3.0/tests/test-subrepo-git.t  2014-05-02 00:47:23.000000000 
+0200
+++ new/mercurial-3.0.1/tests/test-subrepo-git.t        2014-06-01 
23:15:14.000000000 +0200
@@ -566,3 +566,105 @@
 #endif
 
   $ cd ..
+
+Test sanitizing ".hg/hgrc" in subrepo
+
+  $ cd t
+  $ hg tip -q
+  7:af6d2edbb0d3
+  $ hg update -q -C af6d2edbb0d3
+  $ cd s
+  $ git checkout -q -b sanitize-test
+  $ mkdir .hg
+  $ echo '.hg/hgrc in git repo' > .hg/hgrc
+  $ mkdir -p sub/.hg
+  $ echo 'sub/.hg/hgrc in git repo' > sub/.hg/hgrc
+  $ git add .hg sub
+  $ git commit -qm 'add .hg/hgrc to be sanitized at hg update'
+  $ git push -q origin sanitize-test
+  $ cd ..
+  $ grep ' s$' .hgsubstate
+  32a343883b74769118bb1d3b4b1fbf9156f4dddc s
+  $ hg commit -qm 'commit with git revision including .hg/hgrc'
+  $ hg parents -q
+  8:3473d20bddcf
+  $ grep ' s$' .hgsubstate
+  c4069473b459cf27fd4d7c2f50c4346b4e936599 s
+  $ cd ..
+
+  $ hg -R tc pull -q
+  $ hg -R tc update -q -C 3473d20bddcf 2>&1 | sort
+  warning: removing potentially hostile 'hgrc' in '$TESTTMP/tc/s/.hg' (glob)
+  warning: removing potentially hostile 'hgrc' in '$TESTTMP/tc/s/sub/.hg' 
(glob)
+  $ cd tc
+  $ hg parents -q
+  8:3473d20bddcf
+  $ grep ' s$' .hgsubstate
+  c4069473b459cf27fd4d7c2f50c4346b4e936599 s
+  $ cat s/.hg/hgrc
+  cat: s/.hg/hgrc: No such file or directory
+  [1]
+  $ cat s/sub/.hg/hgrc
+  cat: s/sub/.hg/hgrc: No such file or directory
+  [1]
+  $ cd ..
+
+additional test for "git merge --ff" route:
+
+  $ cd t
+  $ hg tip -q
+  8:3473d20bddcf
+  $ hg update -q -C af6d2edbb0d3
+  $ cd s
+  $ git checkout -q testing
+  $ mkdir .hg
+  $ echo '.hg/hgrc in git repo' > .hg/hgrc
+  $ mkdir -p sub/.hg
+  $ echo 'sub/.hg/hgrc in git repo' > sub/.hg/hgrc
+  $ git add .hg sub
+  $ git commit -qm 'add .hg/hgrc to be sanitized at hg update (git merge --ff)'
+  $ git push -q origin testing
+  $ cd ..
+  $ grep ' s$' .hgsubstate
+  32a343883b74769118bb1d3b4b1fbf9156f4dddc s
+  $ hg commit -qm 'commit with git revision including .hg/hgrc'
+  $ hg parents -q
+  9:ed23f7fe024e
+  $ grep ' s$' .hgsubstate
+  f262643c1077219fbd3858d54e78ef050ef84fbf s
+  $ cd ..
+
+  $ cd tc
+  $ hg update -q -C af6d2edbb0d3
+  $ cat s/.hg/hgrc
+  cat: s/.hg/hgrc: No such file or directory
+  [1]
+  $ cat s/sub/.hg/hgrc
+  cat: s/sub/.hg/hgrc: No such file or directory
+  [1]
+  $ cd ..
+  $ hg -R tc pull -q
+  $ hg -R tc update -q -C ed23f7fe024e 2>&1 | sort
+  warning: removing potentially hostile 'hgrc' in '$TESTTMP/tc/s/.hg' (glob)
+  warning: removing potentially hostile 'hgrc' in '$TESTTMP/tc/s/sub/.hg' 
(glob)
+  $ cd tc
+  $ hg parents -q
+  9:ed23f7fe024e
+  $ grep ' s$' .hgsubstate
+  f262643c1077219fbd3858d54e78ef050ef84fbf s
+  $ cat s/.hg/hgrc
+  cat: s/.hg/hgrc: No such file or directory
+  [1]
+  $ cat s/sub/.hg/hgrc
+  cat: s/sub/.hg/hgrc: No such file or directory
+  [1]
+
+Test that sanitizing is omitted in meta data area:
+
+  $ mkdir s/.git/.hg
+  $ echo '.hg/hgrc in git metadata area' > s/.git/.hg/hgrc
+  $ hg update -q -C af6d2edbb0d3
+  checking out detached HEAD in subrepo s
+  check out a git branch if you intend to make changes
+
+  $ cd ..
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/mercurial-3.0/tests/test-subrepo-svn.t 
new/mercurial-3.0.1/tests/test-subrepo-svn.t
--- old/mercurial-3.0/tests/test-subrepo-svn.t  2014-05-02 00:47:23.000000000 
+0200
+++ new/mercurial-3.0.1/tests/test-subrepo-svn.t        2014-06-01 
23:15:14.000000000 +0200
@@ -632,3 +632,54 @@
   Checked out revision 15.
   2 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ cd ..
+
+Test sanitizing ".hg/hgrc" in subrepo
+
+  $ cd sub/t
+  $ hg update -q -C tip
+  $ cd s
+  $ mkdir .hg
+  $ echo '.hg/hgrc in svn repo' > .hg/hgrc
+  $ mkdir -p sub/.hg
+  $ echo 'sub/.hg/hgrc in svn repo' > sub/.hg/hgrc
+  $ svn add .hg sub
+  A         .hg
+  A         .hg/hgrc (glob)
+  A         sub
+  A         sub/.hg (glob)
+  A         sub/.hg/hgrc (glob)
+  $ svn ci -m 'add .hg/hgrc to be sanitized at hg update'
+  Adding         .hg
+  Adding         .hg/hgrc (glob)
+  Adding         sub
+  Adding         sub/.hg (glob)
+  Adding         sub/.hg/hgrc (glob)
+  Transmitting file data ..
+  Committed revision 16.
+  $ svn up -q
+  $ cd ..
+  $ hg commit -S -m 'commit with svn revision including .hg/hgrc'
+  $ grep ' s$' .hgsubstate
+  16 s
+  $ cd ..
+
+  $ hg -R tc pull -u -q 2>&1 | sort
+  warning: removing potentially hostile 'hgrc' in '$TESTTMP/sub/tc/s/.hg' 
(glob)
+  warning: removing potentially hostile 'hgrc' in '$TESTTMP/sub/tc/s/sub/.hg' 
(glob)
+  $ cd tc
+  $ grep ' s$' .hgsubstate
+  16 s
+  $ cat s/.hg/hgrc
+  cat: s/.hg/hgrc: No such file or directory
+  [1]
+  $ cat s/sub/.hg/hgrc
+  cat: s/sub/.hg/hgrc: No such file or directory
+  [1]
+
+Test that sanitizing is omitted in meta data area:
+
+  $ mkdir s/.svn/.hg
+  $ echo '.hg/hgrc in svn metadata area' > s/.svn/.hg/hgrc
+  $ hg update -q -C '.^1'
+
+  $ cd ../..

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

Reply via email to