chiark / gitweb /
Refactor message printing
[stgit] / stgit / commands / pick.py
index 4eb79a380872b693fbbf9febd21cf84fac4bab0e..a47b201c2936fe4ae93c9b8748ccecbfab315935 100644 (file)
@@ -21,6 +21,7 @@ from optparse import OptionParser, make_option
 from stgit.commands.common import *
 from stgit.utils import *
 from stgit import stack, git
 from stgit.commands.common import *
 from stgit.utils import *
 from stgit import stack, git
+from stgit.stack import Series
 
 
 help = 'import a patch from a different branch or a commit object'
 
 
 help = 'import a patch from a different branch or a commit object'
@@ -75,7 +76,7 @@ def func(parser, options, args):
         elif len(patch_branch) == 2:
             patchname = patch_branch[0]
         else:
         elif len(patch_branch) == 2:
             patchname = patch_branch[0]
         else:
-            patchname = make_patch_name(commit.get_log(), crt_series.patch_exists)
+            patchname = None
 
     if options.parent:
         parent = git_id(options.parent)
 
     if options.parent:
         parent = git_id(options.parent)
@@ -90,49 +91,66 @@ def func(parser, options, args):
         top = parent
 
     if options.fold:
         top = parent
 
     if options.fold:
-        print 'Folding commit %s...' % commit_id,
-        sys.stdout.flush()
+        out.start('Folding commit %s' % commit_id)
 
         # try a direct git-apply first
         if not git.apply_diff(bottom, top):
             git.merge(bottom, git.get_head(), top, recursive = True)
 
 
         # try a direct git-apply first
         if not git.apply_diff(bottom, top):
             git.merge(bottom, git.get_head(), top, recursive = True)
 
-        print 'done'
+        out.done()
     elif options.update:
         rev1 = git_id('//bottom')
         rev2 = git_id('//top')
         files = git.barefiles(rev1, rev2).split('\n')
 
     elif options.update:
         rev1 = git_id('//bottom')
         rev2 = git_id('//top')
         files = git.barefiles(rev1, rev2).split('\n')
 
-        print 'Updating with commit %s...' % commit_id,
-        sys.stdout.flush()
+        out.start('Updating with commit %s' % commit_id)
 
         if not git.apply_diff(bottom, top, files = files):
             raise CmdException, 'Patch updating failed'
 
 
         if not git.apply_diff(bottom, top, files = files):
             raise CmdException, 'Patch updating failed'
 
-        print 'done'
+        out.done()
     else:
         message = commit.get_log()
         author_name, author_email, author_date = \
                      name_email_date(commit.get_author())
 
     else:
         message = commit.get_log()
         author_name, author_email, author_date = \
                      name_email_date(commit.get_author())
 
-        print 'Importing commit %s...' % commit_id,
-        sys.stdout.flush()
+        out.start('Importing commit %s' % commit_id)
+
+        newpatch = 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)
+        # find a patchlog to fork from
+        (refpatchname, refbranchname, refpatchid) = parse_rev(commit_str)
+        if refpatchname and not refpatchid and \
+               (not refpatchid or refpatchid == 'top'):
+            # FIXME: should also support picking //top.old
+            if refbranchname:
+                # assume the refseries is OK, since we already resolved
+                # commit_str to a git_id
+                refseries = Series(refbranchname)
+            else:
+                refseries = crt_series
+            patch = refseries.get_patch(refpatchname)
+            if patch.get_log():
+                out.info("Log was %s" % newpatch.get_log())
+                out.info("Setting log to %s\n" %  patch.get_log())
+                newpatch.set_log(patch.get_log())
+                out.info("Log is now %s" % newpatch.get_log())
+            else:
+                out.info("No log for %s\n" % patchname)
 
 
-        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)
         if not options.unapplied:
             modified = crt_series.push_patch(patchname)
         else:
             modified = False
 
         if crt_series.empty_patch(patchname):
         if not options.unapplied:
             modified = crt_series.push_patch(patchname)
         else:
             modified = False
 
         if crt_series.empty_patch(patchname):
-            print 'done (empty patch)'
+            out.done('empty patch')
         elif modified:
         elif modified:
-            print 'done (modified)'
+            out.done('modified')
         else:
         else:
-            print 'done'
-        
+            out.done()
+
     print_crt_patch()
     print_crt_patch()