changeset 14610:5d6244930559

import: separate parents selection from working dir update This will be useful when patching without updating the dirstate
author Patrick Mezard <pmezard@gmail.com>
date Tue, 14 Jun 2011 23:24:40 +0200
parents f53dc0787424
children adbf5e7df96d
files mercurial/commands.py
diffstat 1 files changed, 15 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/commands.py	Tue Jun 14 23:24:34 2011 +0200
+++ b/mercurial/commands.py	Tue Jun 14 23:24:40 2011 +0200
@@ -3087,23 +3087,27 @@
             ui.debug('message:\n%s\n' % message)
 
             wp = repo.parents()
+            if len(wp) == 1:
+                wp.append(repo[nullid])
             if opts.get('exact'):
                 if not nodeid or not p1:
                     raise util.Abort(_('not a Mercurial patch'))
-                p1 = repo.lookup(p1)
-                p2 = repo.lookup(p2 or hex(nullid))
-
-                if p1 != wp[0].node():
-                    hg.clean(repo, p1)
-                repo.dirstate.setparents(p1, p2)
+                p1 = repo[p1]
+                p2 = repo[p2 or nullid]
             elif p2:
                 try:
-                    p1 = repo.lookup(p1)
-                    p2 = repo.lookup(p2)
-                    if p1 == wp[0].node():
-                        repo.dirstate.setparents(p1, p2)
+                    p1 = repo[p1]
+                    p2 = repo[p2]
                 except error.RepoError:
-                    pass
+                    p1, p2 = wp
+            else:
+                p1, p2 = wp
+
+            if opts.get('exact') and p1 != wp[0]:
+                hg.clean(repo, p1.node())
+            if p1 != wp[0] and p2 != wp[1]:
+                repo.dirstate.setparents(p1.node(), p2.node())
+
             if opts.get('exact') or opts.get('import_branch'):
                 repo.dirstate.setbranch(branch or 'default')