def read_pipe (x):
print 'pipe', x
return os.popen (x).read ()
+
def system (x):
print x
return os.system (x)
return files
+ def has_patch (self):
+ return self.touched_files () <> []
+
def apply (self, add_del_files):
def note_add_file (x):
add_del_files.append (('add', x.group (1)))
c = Commit (locals ())
return c
-def parse_add_changes (from_commit):
-
- log = read_pipe ('git log %(from_commit)s..' % locals ())
+def parse_add_changes (from_commit, max_count=0):
+ opt = ''
+ rest = '..'
+ if max_count:
+
+ # fixme.
+ assert max_count == 1
+ opt = '--max-count=%d' % max_count
+ rest = ''
+
+ log = read_pipe ('git log %(opt)s %(from_commit)s%(rest)s' % locals ())
log = log[len ('commit '):]
log = log.strip ()
log = open ('ChangeLog').read ()
- if not options.start:
- print 'Must set start committish.'
- sys.exit (1)
-
if options.gitdir:
os.environ['GIT_DIR'] = options.gitdir
-
- commits = parse_add_changes (options.start)
+
+
+ if not args:
+ if not options.start:
+ print 'Must set start committish.'
+ sys.exit (1)
+
+ commits = parse_add_changes (options.start)
+ else:
+ commits = []
+ for a in args:
+ commits += parse_add_changes (a, max_count=1)
+
if not commits:
return
collated_log = ''
collated_message = ''
- for c in commits:
+ while commits:
+ c = commits[0]
+ commits = commits[1:]
+
+ if not c.has_patch ():
+ print 'patchless commit (merge?)'
+ continue
+
print 'patch ', c.committish
try:
c.apply (file_adddel)
open ('.msg','w').write (collated_message)
print '\nCommit message\n**\n%s\n**\n' % collated_message
print '\nRun:\n\n\tcvs commit -F .msg\n\n'
+
+
+ if commits:
+ print 'Commits left to do:'
+ print ' '.join ([c.committish for c in commits])
main ()