From: bdowning@lavos.net (Brian Downing)
To: Gordon Heydon <gordon@heydon.com.au>
Cc: git@vger.kernel.org
Subject: Re: git cvsimport branches not consistent with CVS branches
Date: Sun, 8 Jul 2007 00:45:20 -0500 [thread overview]
Message-ID: <20070708054520.GD4087@lavos.net> (raw)
In-Reply-To: <46903396.1010507@heydon.com.au>
On Sun, Jul 08, 2007 at 10:45:10AM +1000, Gordon Heydon wrote:
> After some investigation I found that git cvsimport was not importing
> branches 100% correctly with CVS.
>
> Git and CVS do branching very differently in that CVS this is done at
> the file level (like everything else) and git does it repository wide.
>
> So if I have a CVS repository with the files a, b and c and I branch b
> with a `cvs tab -b BRANCH test` on the branch test I will just have the
> file b.
>
> If I do a git cvsimport on the test branch there will actually be the
> files a, b and c
>
> What I think needs to happen is that when git cvsimport created the
> branch in the git repository it needs to delete all files from the
> branch that were not branched.
I've been vaguely working on Yet Another CVS Importer (an incremental
one; both git-cvsimport (thanks to cvsps) and tailor take about ten
minutes and a gigabyte of RAM to figure out that nothing has to happen
with my repository. I think I can do better than that).
In thinking about this case, I think I've decided that you want an
option on what to do here. For some repositories you're not going to
care about having extra files with the tag, and would greatly prefer
that to having to create a branch for each and every tag (assuming you
can arrange to have the correct files present otherwise; this isn't
always possible.)
For other cases, you really only want to get the subset of the files
that are tagged. For this, I think the best arrangement would be to
make your branch, then make a commit that only deletes the files that
are not present in the CVS branch, as you said. Then immediately make
an empty commit to the mainline (wherever you branched from) merging
from the deletion commit. Then proceed to commit normally to the
branch. This way, if a user chooses to merge from the branch in Git,
it won't try to delete a bunch of files in the target branch. (I'm
having a hard time coming up with a situation where you'd want that
behavior assuming the missing files were never tagged in CVS. A sane
usage pattern would be to tag the whole repository then "cvs rm" the
files you don't want otherwise...)
A fun third case is when a file in CVS doesn't have a branch tag,
but then you go and "cvs add" a file with the same name in a branch.
What CVS does then is to place the branch tag off the current HEAD.
I /think/ you can detect this situation by noticing that the date of
the HEAD revision and the date of the "file was created on branch ..."
revision are exactly the same. You really need to detect this case,
because when this happens there is no real parent relationship between
the branch and the branch point. Since CVS has that "wait for a second
to tick" delay at the end this might even be safe. Sigh.
Don't get me started about the abomination that is vendor branches.
I /hate/ CVS.
-bcd
next prev parent reply other threads:[~2007-07-08 5:45 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-07-08 0:45 git cvsimport branches not consistent with CVS branches Gordon Heydon
2007-07-08 5:45 ` Brian Downing [this message]
2007-07-08 10:53 ` Robin Rosenberg
2007-07-08 11:47 ` Johannes Schindelin
2007-07-08 12:22 ` Robin Rosenberg
2007-07-08 21:02 ` Brian Downing
2007-07-08 14:38 ` Steffen Prohaska
2007-07-09 4:31 ` Josh Triplett
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=20070708054520.GD4087@lavos.net \
--to=bdowning@lavos.net \
--cc=git@vger.kernel.org \
--cc=gordon@heydon.com.au \
/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;
as well as URLs for NNTP newsgroup(s).