Re: CVS to git: parsing ChangeLog entries?
- From
- Ralf Wildenhues <ralf.wildenhues@gmx.de>
- Date
- Mar 15, 2008, 10:38 UTC
- Message-ID
- <20080315103841.GB14769@ins.uni-bonn.de>
- In-Reply-To
- <20080313170322.GA3580@sigill.intra.peff.net>
* Jeff King wrote on Thu, Mar 13, 2008 at 06:03:22PM CET:
Show 5 quoted lines
> On Wed, Mar 12, 2008 at 08:08:27PM +0100, Ralf Wildenhues wrote: > > > when migrating a project that uses GNU-style ChangeLogs from CVS > > to git, is it possible to extract patch author information from > > the ChangeLog entries rather than from the CVS commit logs?
Show 5 quoted lines
> I don't think there is a way to do this automatically with > git-cvsimport. However, once imported, I think you could rewrite history > using git-filter-branch with a filter that looked at the diff of > ChangeLog for that commit and rewrote the author. See the documentation > for git-filter-branch.
Thank you, I just learned a new cool tool!
FWIW, here's what I used successfully on a repository with only one ChangeLog file (some fiddling to cope with format variations):
git filter-branch -d /dev/shm/t --tree-filter '
line=`sed -n "s,^[12][90][0-9][0-9]-[0-1][0-9]-[0-3][0-9] *\([A-Za-z].*\),\1,;
s,.* \([A-Za-z].*\),\1,;
/./{
s/(tiny change)//
s/ *$//
p
q
}" ChangeLog`
author=`echo "$line" | sed "s, *[<(].*,,"`
email=`echo "$line" | sed "s,[^,(]*[<(],<,; s/[)>].*/>/"`
test -n "$author" && test -n "$email" && {
GIT_AUTHOR_NAME="$author"
GIT_AUTHOR_EMAIL="$email"
export GIT_AUTHOR_NAME GIT_AUTHOR_EMAIL
}'Show 7 quoted lines
> > Related question: when CVS commit logs have varying encoding, > > say, some latin1 and some UTF-8, is it possible to have uniformly > > encoded git log entries? > > I don't think git-cvsimport does much with encodings at all. But again, > you could probably go back through the imported repo with > git-filter-branch and iconv the commit messages as appropriate.
I'll try that, too.
Thanks! Ralf