From: Michael J Gruber <git@drmicha.warpmail.net>
To: Nick Woolley <nickwoolley@yahoo.co.uk>
Cc: git@vger.kernel.org
Subject: Re: cvsexportcommit dies when applying an (empty) merge commit
Date: Wed, 25 Nov 2009 14:06:13 +0100 [thread overview]
Message-ID: <4B0D2BC5.1000002@drmicha.warpmail.net> (raw)
In-Reply-To: <4B0D1C1A.60707@yahoo.co.uk>
Nick Woolley venit, vidit, dixit 25.11.2009 12:59:
> Hi,
>
> I have a git repository with a merge point on the master branch. This merge
> commit is empty, and just contains a commit message:
>
> Merge commit 'otherbranch'
>
> I'm trying to export this branch into CVS using git-cvsexportcommit (the latest
> version from the master branch). It's actually done in a wrapper script [1] but
> the command that gets invoked is essentially:
>
> git cvsexportcommit -p -v -u -w 'cvscheckout/HEAD/my-cvs-module' -c \
> <parent commit> <commit>
>
> Where <commit> is the empty merge commit. However this invocation dies and
> aborts the process of exporting the branch half way.
>
> The fatal error I get is:
>
> Applying to CVS commit <commit> from parent <parent commit>
> Checking if patch will apply
> Applying
> error: No changes
> cannot patch at /usr/lib/git-core/git-cvsexportcommit line 324.
>
> The vicinity of line 324 is (with some lines wrapped):
>
> print "Applying\n";
> if ($opt_W) {
> system("git checkout -q $commit^0") && die "cannot patch";
> } else {
> `GIT_DIR= git-apply $context --summary --numstat --apply
> <.cvsexportcommit.diff` || die "cannot patch";
> }
>
> It seems that the file .cvsexportcommit.diff is empty, so git-apply is refusing
> to apply it.
>
> Presumably the application would be a no-op, so this git-apply step could be
> skipped. So I tried modifying the script to do that and it seems to work:
>
> print "Applying\n";
> if ($opt_W) {
> system("git checkout -q $commit^0") && die "cannot patch";
> } elsif (-s ".cvsexportcommit.diff") {
> `GIT_DIR= git-apply $context --summary --numstat --apply
> <.cvsexportcommit.diff` || die "cannot patch";
> } else {
> print "No changes\n";
> }
>
> The modified git-cvsexportcommit script completes without errors, but
> unsurprisingly, seems to export nothing, so that when imported back into git,
> there is no empty commit. There appears to be no log message added in CVS, either.
>
> This does seem more acceptable than dying, although it doesn't faithfully
> reproduce the git history. However I'm not sure if that would be possible in
> this case.
>
> Is the existing behaviour deliberately fatal, or is this worth supplying a patch
> for?
I think the behavior is correct in the sense that you're telling git
cvsexportcommit to make a commit to cvs, and it can't, because there is
no change to commit. A merge can't be represented.
It leaves you the choice between omitting the trivial merge from cvs
history (that's what one would do for a merge based cvs<->git workflow)
and generating a fake commit in cvs. I don't know if it has something
like --allow-empty - it's file base, after all.
Michael
next prev parent reply other threads:[~2009-11-25 13:07 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-11-25 11:59 cvsexportcommit dies when applying an (empty) merge commit Nick Woolley
2009-11-25 13:06 ` Michael J Gruber [this message]
2009-11-25 23:00 ` Nick Woolley
2009-11-26 6:51 ` Robin Rosenberg
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4B0D2BC5.1000002@drmicha.warpmail.net \
--to=git@drmicha.warpmail.net \
--cc=git@vger.kernel.org \
--cc=nickwoolley@yahoo.co.uk \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox