Cleanup variable names in pick.
[stgit] / stgit / commands / pick.py
index 1aa83d0..4eb79a3 100644 (file)
@@ -37,11 +37,16 @@ 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'),
            make_option('--update',
                        help = 'like fold but only update the current patch files',
+                       action = 'store_true'),
+           make_option('--unapplied',
+                       help = 'keep the patch unapplied',
                        action = 'store_true')]
 
 
@@ -51,9 +56,10 @@ def func(parser, options, args):
     if len(args) != 1:
         parser.error('incorrect number of arguments')
 
-    check_local_changes()
-    check_conflicts()
-    check_head_top_equal()
+    if not options.unapplied:
+        check_local_changes()
+        check_conflicts()
+        check_head_top_equal()
 
     commit_str = args[0]
     commit_id = git_id(commit_str)
@@ -65,20 +71,23 @@ def func(parser, options, args):
     else:
         patch_branch = commit_str.split('@')
         if options.name:
-            patch = options.name
+            patchname = options.name
         elif len(patch_branch) == 2:
-            patch = patch_branch[0]
+            patchname = patch_branch[0]
         else:
-            patch = make_patch_name(commit.get_log())
-            if not patch:
-                raise CmdException, 'Unknown patch name'
+            patchname = make_patch_name(commit.get_log(), crt_series.patch_exists)
+
+    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,
@@ -86,7 +95,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:
@@ -109,14 +118,17 @@ def func(parser, options, args):
         print 'Importing commit %s...' % commit_id,
         sys.stdout.flush()
 
-        crt_series.new_patch(patch, message = message, can_edit = False,
+        crt_series.new_patch(patchname, message = message, can_edit = False,
                              unapplied = True, bottom = bottom, top = top,
                              author_name = author_name,
                              author_email = author_email,
                              author_date = author_date)
-        modified = crt_series.push_patch(patch)
+        if not options.unapplied:
+            modified = crt_series.push_patch(patchname)
+        else:
+            modified = False
 
-        if crt_series.empty_patch(patch):
+        if crt_series.empty_patch(patchname):
             print 'done (empty patch)'
         elif modified:
             print 'done (modified)'