merge with stable
authorMatt Mackall <mpm@selenic.com>
Mon, 25 Nov 2013 16:15:44 -0600
changeset 20108 af12f58e2aa0
parent 20102 04eaa8eec6a0 (current diff)
parent 20107 2ca325ea57fa (diff)
child 20110 40b7c6e4b993
merge with stable
mercurial/commands.py
mercurial/subrepo.py
mercurial/util.py
--- a/hgext/shelve.py	Mon Nov 18 09:09:05 2013 -0800
+++ b/hgext/shelve.py	Mon Nov 25 16:15:44 2013 -0600
@@ -558,7 +558,7 @@
             oldquiet = ui.quiet
             try:
                 ui.quiet = True
-                node = cmdutil.commit(ui, repo, commitfunc, None, tempopts)
+                node = cmdutil.commit(ui, repo, commitfunc, [], tempopts)
             finally:
                 ui.quiet = oldquiet
             tmpwctx = repo[node]
--- a/mercurial/commands.py	Mon Nov 18 09:09:05 2013 -0800
+++ b/mercurial/commands.py	Mon Nov 25 16:15:44 2013 -0600
@@ -837,10 +837,12 @@
                     bookmarks.deletedivergent(repo, [target], mark)
                     return
 
+                # consider successor changesets as well
+                foreground = obsolete.foreground(repo, [marks[mark]])
                 deletefrom = [b for b in divs
                               if repo[b].rev() in anc or b == target]
                 bookmarks.deletedivergent(repo, deletefrom, mark)
-                if bmctx.rev() in anc:
+                if bmctx.rev() in anc or target in foreground:
                     ui.status(_("moving bookmark '%s' forward from %s\n") %
                               (mark, short(bmctx.node())))
                     return
--- a/mercurial/subrepo.py	Mon Nov 18 09:09:05 2013 -0800
+++ b/mercurial/subrepo.py	Mon Nov 25 16:15:44 2013 -0600
@@ -313,6 +313,18 @@
     if abort:
         raise util.Abort(_("default path for subrepository not found"))
 
+def _sanitize(ui, path):
+    def v(arg, dirname, names):
+        if os.path.basename(dirname).lower() != '.hg':
+            return
+        for f in names:
+            if f.lower() == 'hgrc':
+                ui.warn(
+                    _("warning: removing potentially hostile .hg/hgrc in '%s'"
+                      % path))
+                os.unlink(os.path.join(dirname, f))
+    os.walk(path, v, None)
+
 def itersubrepos(ctx1, ctx2):
     """find subrepos in ctx1 or ctx2"""
     # Create a (subpath, ctx) mapping where we prefer subpaths from
@@ -989,6 +1001,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)
         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))):
@@ -1249,6 +1262,7 @@
                 self._gitcommand(['reset', 'HEAD'])
                 cmd.append('-f')
             self._gitcommand(cmd + args)
+            _sanitize(self._ui, self._path)
 
         def rawcheckout():
             # no branch to checkout, check it out with no branch
@@ -1332,6 +1346,7 @@
                 self.get(state) # fast forward merge
             elif base != self._state[1]:
                 self._gitcommand(['merge', '--no-commit', revision])
+            _sanitize(self._ui, self._path)
 
         if self.dirty():
             if self._gitstate() != revision:
--- a/mercurial/util.py	Mon Nov 18 09:09:05 2013 -0800
+++ b/mercurial/util.py	Mon Nov 25 16:15:44 2013 -0600
@@ -1634,6 +1634,8 @@
     <url path: '\\\\blah\\blah\\blah'>
     >>> url(r'\\blah\blah\blah#baz')
     <url path: '\\\\blah\\blah\\blah', fragment: 'baz'>
+    >>> url(r'file:///C:\users\me')
+    <url scheme: 'file', path: 'C:\\users\\me'>
 
     Authentication credentials:
 
@@ -1651,7 +1653,7 @@
     """
 
     _safechars = "!~*'()+"
-    _safepchars = "/!~*'()+:"
+    _safepchars = "/!~*'()+:\\"
     _matchscheme = re.compile(r'^[a-zA-Z0-9+.\-]+:').match
 
     def __init__(self, path, parsequery=True, parsefragment=True):
@@ -1788,6 +1790,8 @@
         'file:///c:/tmp/foo/bar'
         >>> print url(r'bundle:foo\bar')
         bundle:foo\bar
+        >>> print url(r'file:///D:\data\hg')
+        file:///D:\data\hg
         """
         if self._localpath:
             s = self.path
--- a/tests/test-subrepo-git.t	Mon Nov 18 09:09:05 2013 -0800
+++ b/tests/test-subrepo-git.t	Mon Nov 25 16:15:44 2013 -0600
@@ -71,7 +71,7 @@
 clone root
 
   $ cd t
-  $ hg clone . ../tc
+  $ hg clone . ../tc 2> /dev/null
   updating to branch default
   cloning subrepo s from $TESTTMP/gitroot
   3 files updated, 0 files merged, 0 files removed, 0 files unresolved
@@ -94,7 +94,7 @@
 clone root, make local change
 
   $ cd ../t
-  $ hg clone . ../ta
+  $ hg clone . ../ta 2> /dev/null
   updating to branch default
   cloning subrepo s from $TESTTMP/gitroot
   3 files updated, 0 files merged, 0 files removed, 0 files unresolved
@@ -113,7 +113,7 @@
 clone root separately, make different local change
 
   $ cd ../t
-  $ hg clone . ../tb
+  $ hg clone . ../tb 2> /dev/null
   updating to branch default
   cloning subrepo s from $TESTTMP/gitroot
   3 files updated, 0 files merged, 0 files removed, 0 files unresolved
@@ -199,7 +199,7 @@
 make and push changes to hg without updating the subrepo
 
   $ cd ../t
-  $ hg clone . ../td
+  $ hg clone . ../td 2>&1 | egrep -v '^Cloning into|^done\.'
   updating to branch default
   cloning subrepo s from $TESTTMP/gitroot
   checking out detached HEAD in subrepo s
@@ -317,7 +317,7 @@
   $ hg add b
   $ hg commit -m b
 
-  $ hg clone ../t inner
+  $ hg clone ../t inner 2> /dev/null
   updating to branch default
   cloning subrepo s from $TESTTMP/gitroot
   3 files updated, 0 files merged, 0 files removed, 0 files unresolved
@@ -345,7 +345,7 @@
 
   $ cd ..
   $ mkdir d
-  $ hg clone t d/t
+  $ hg clone t d/t 2> /dev/null
   updating to branch default
   cloning subrepo s from $TESTTMP/gitroot
   3 files updated, 0 files merged, 0 files removed, 0 files unresolved
@@ -364,7 +364,7 @@
   $ hg commit --subrepos -qm missing
   abort: subrepo s is missing (in subrepo s)
   [255]
-  $ hg update -C
+  $ hg update -C 2> /dev/null
   cloning subrepo s from $TESTTMP/gitroot
   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ hg sum | grep commit
--- a/tests/test-update-branches.t	Mon Nov 18 09:09:05 2013 -0800
+++ b/tests/test-update-branches.t	Mon Nov 25 16:15:44 2013 -0600
@@ -206,6 +206,7 @@
   |/
   o  0:60829823a42a 0
   
+  $ hg book bm -r 3
   $ hg status
   M foo
 
@@ -218,10 +219,16 @@
   $ hg debugobsolete 6efa171f091b00a3c35edc15d48c52a498929953 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
   $ hg debugobsolete aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa d047485b3896813b2a624e86201983520f003206
 
-Test that 5 is detected as a valid destination from 3
+Test that 5 is detected as a valid destination from 3 and also accepts moving
+the bookmark (issue4015)
+
   $ hg up --quiet --hidden 3
   $ hg up 5
   1 files updated, 0 files merged, 0 files removed, 0 files unresolved
+  $ hg book bm
+  moving bookmark 'bm' forward from 6efa171f091b
+  $ hg bookmarks
+   * bm                        5:ff252e8273df
 
 Test that 5 is detected as a valid destination from 1
   $ hg up --quiet 0          # we should be able to update to 3 directly