ga, forgot to attach the script in my previous message, so here it is.
thanks
Trev
On Wed, Aug 01, 2018 at 12:16:57AM +0100, Maciej W. Rozycki wrote:
> On Thu, 5 Jul 2018, Tom Tromey wrote:
>
> > I use git-merge-changelog from gnulib. If you want to use git am and
> > avoid manually copying ChangeLog text from the commit message back into
> > the appropriate files, then it's much better to install the driver and
> > include the ChangeLog diffs in the patch submission.
>
> FWIW, I've found it quite quick to paste ChangeLog text from the commit
> message after `git am' (directly invocable for the intended submission
> from alpine e-mail client, which has a "pipe message" command) by adding
> an empty first line to the intended ChangeLog file, marking it with ^V and
> then issuing:
>
> :'<,'>!git log -1
>
> in vim, removing any commit description preceding the ChangeLog entry and
> fixing up formatting of the newly-added entry by marking it with ^V and
> then with:
>
> :'<,'>s/^ //g
>
> If more than one ChangeLog file is used, then parts of the entry can be
> carried over via buffers. Perhaps the most involving is adding the date
> and author heading, but I don't think you can completely avoid manual
> intervention here anyway. Then:
>
> $ git commit -a --amend
> $ git rebase --ignore-date origin/master
>
> For ChangeLog entries contained in a single file it takes maybe a few
> seconds, for more complex one a couple dozens perhaps.
>
> Of course the amount of effort required for that will likely vary between
> e-mail clients and editors.
>
> Maciej
#!/usr/bin/python
import sys
import os
import re
def finish_logfile(logfile):
logfile.write('\n')
oldfile = open(logfile.name[:len(logfile.name) - 1], 'r')
logfile.write(oldfile.read())
logfile.close()
os.rename(logfile.name, logfile.name[:len(logfile.name) - 1])
commit = sys.stdin.readlines()
logfile = None
did_date = False
for line in commit:
newfile = None
if '/' in line and not line.startswith('\t'):
print line
line = line.strip(' \n\t\r:')
if os.path.isfile(line):
newfile = open(line + '~', 'w')
else:
if os.path.isdir(line):
newfile = open(line + '/ChangeLog~', 'w')
if newfile:
if logfile:
finish_logfile(logfile)
logfile = newfile
did_date = False
continue
if re.match('[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] .* <.*@.*>', line):
dateline = line.strip();
logfile.write(dateline)
logfile.write('\n\n')
did_date = True
continue
if not line.startswith('\t'):
if (not logfile) or line == '\n':
continue
else:
print('error: baddly indented line')
exit(1)
if not did_date:
generate_date(logfile)
logfile.write(line)
finish_logfile(logfile)