Subject: Re: CVS & import scripts
To: None <woods@kuma.web.net>
From: Niklas Hallqvist <niklas@appli.se>
List: current-users
Date: 08/06/1995 22:17:44
Date: Sun, 6 Aug 95 12:26:04 -0400 (EDT)
From: woods@kuma.web.net (Greg A. Woods)
[ On Fri, August 4, 1995 at 21:15:19 (+0200), Niklas Hallqvist wrote: ]
> Subject: Re: CVS & import scripts
>
> On the contrary, my CVS files doesn't get overwritten! I can't
> remember seeing any CVS files when I sup. I've earlier supped from
> sup.netbsd.org, and lately from wipux2.somewhere-in-germany, and I
> haven't seen that problem. Where do you sup from? Anyway, this has
> served as warning, I'll see if I shouldn't temporarily write-protect
> the CVS dirs when supping.
Two possibilities:
- wipux2 doesn't have CVS directories in the sup directory
Right! I'm almost 100% sure sup.netbsd.org don't either, didn't
check though. I think the original problem were that Vax#8n supped
from another mirror, but I don't know. In order to protect oneself, I
guess a write protection of the CVS dirs would be enough.
- sup ignores CVS directories because it seems your local copies
are newer?
Hardly, my CVS files in the supping dir is always only slightly newer
than the *last* sup. If something were commited since then, the
CVS/Entries would surely be changed.
> I do this as well, + the additions to make a diff since last sup to
> merge into my working tree. I prefer diff & patch to cvs merge
> because I can easily browse through the diff.
If I understand your procedure now you are doing something like this:
cd ~/sup
cvs co -ko -r BSD netbsd # only done once
sup into ~/sup/netbsd
script_to_remove_add_commit_and_diff
cd ~/hack
cvs co -ko netbsd # only done once
patch < ../sup/recent_diffs
Essentially, yes.
I.e. you create a diff from ~/sup/netbsd of the changes between the
latest sup and the one before. You then apply those diffs as a patch to
your local working directory instead of doing a join from the vendor
branch.
Yes, I used to use cvs merge before. The reasons for using a diff
were that the diff has some value in itself as it is small and easy to
transfer to other machines which carry source. I also like browsing
context diffs to see what's been done.
Do you always have a "clean" (i.e. nothing to checkin) working directory
before you apply the patches?
Not always, but I try to checkin all my work separately in order to be
able to back the changes out later. It's more because I don't want to
run a full cvs update over all the tree, as it takes so much time.
Therefore, I may forget checkins once in a while. It has never turned
out to be a problem as my working tree doesn't need to be of
production quality.
Do you tag anything in either your main branch or the vendor branch?
I have two branch tags, BSD & NH. Earlier I tagged all the releases
with tags like CURRENT-950101 and NH-950101, but these cvs ops take
too much time as they need to update every file in the repository. So
i wrote a small utility called "etag", which instead builds up a dbm
database with a mapping of path -> version for a tree. I call these
dbm-files "external tags". They're quite space-consumptive, around
1.5 MB per tag, but I have 5GB so I don't care. Then I have an ediff
utility that creates context diffs out of two external tags. It has
some more bells & whistles, and works quite nice, and much faster than
cvs tags for such a large tree.
None of this is of production quality, and all work is quite
specialized to my environment. But, if anyone wants to glance at my
scripts, they're welcome. I don't guarantee any kind of behaviour
though, expect the worst if you use it.
Niklas
Niklas Hallqvist Phone: +46-(0)31-40 75 00
Applitron Datasystem Fax: +46-(0)31-83 39 50
Molndalsvagen 95 Email: niklas@appli.se
S-412 63 GOTEBORG WWW: Here
Sweden