Don't always use git-merge-recursive because of speed
[stgit] / stgit / commands / pick.py
index 3ff6269..400e4eb 100644 (file)
@@ -37,6 +37,8 @@ options = [make_option('-n', '--name',
            make_option('-r', '--reverse',
                        help = 'reverse the commit object before importing',
                        action = 'store_true'),
+           make_option('-p', '--parent', metavar = 'COMMITID',
+                       help = 'use COMMITID as parent'),
            make_option('--fold',
                        help = 'fold the commit object into the current patch',
                        action = 'store_true'),
@@ -56,6 +58,8 @@ def func(parser, options, args):
     check_head_top_equal()
 
     commit_str = args[0]
+    commit_id = git_id(commit_str)
+    commit = git.Commit(commit_id)
 
     if options.fold or options.update:
         if not crt_series.get_current():
@@ -67,17 +71,19 @@ def func(parser, options, args):
         elif len(patch_branch) == 2:
             patch = patch_branch[0]
         else:
-            raise CmdException, 'Unknown patch name'
+            patch = make_patch_name(commit.get_log(), crt_series.patch_exists)
 
-    commit_id = git_id(commit_str)
-    commit = git.Commit(commit_id)
+    if options.parent:
+        parent = git_id(options.parent)
+    else:
+        parent = commit.get_parent()
 
     if not options.reverse:
-        bottom = commit.get_parent()
+        bottom = parent
         top = commit_id
     else:
         bottom = commit_id
-        top = commit.get_parent()
+        top = parent
 
     if options.fold:
         print 'Folding commit %s...' % commit_id,
@@ -85,7 +91,7 @@ def func(parser, options, args):
 
         # try a direct git-apply first
         if not git.apply_diff(bottom, top):
-            git.merge(bottom, git.get_head(), top)
+            git.merge(bottom, git.get_head(), top, recursive = True)
 
         print 'done'
     elif options.update: