Though CVS is an horrible archaic version control system, a lot of people use it, so it is sometimes necessary to have Arch interoperate with it.
Tools
Changesets in CVS
cscvs is toolset to constrain CVS to operations with atomic changeset semantics.
It features totla a CVS to Arch conversion tool.
Bi-directional gatewaying with ''tla-cvs-sync''
tla-cvs-sync is a script in the tla-tools package that automates almost all of the daily work of gatewaying between a CVS and an arch branch of the same project. Changes will be passed in both directions, but no attempt is made to detect "changesets" in the CVS changes -- all CVS changes since the last time you ran the script will be bundled into a single arch changeset.
Recipes
Hybrid trees
Arch and CVS in the same tree is an example recipe on how to use the same tree to commit to Arch and CVS as well.
Star-merge and totla
The hybrid trees recipes does not allow to preserve the CVS history in Arch. You can import the CVS history in Arch using cscvs totla, but it uses separate CVS and Arch working directories.
Typically, you will use totla to track CVS in branch category--cvs and make your personal changes in branch category--devo created as a continuation of category--cvs.
The totla star-merge recipe explains how to commit the changes in category--devo on CVS by doing a star-merge with category--cvs, thus getting a better Arch history.
Converting .cvsignore to .arch-inventory
Try this shell script:
find . -type f -name .cvsignore | grep -v '{arch}' | while read f
do
dn=$(dirname $f)
awk '{ gsub(/\./, "\\."); gsub(/\*/, ".*"); num = split($0, patterns);
if (num == 1)
print "precious ^" $0 "$";
else if (num > 1) {
printf "precious ^(";
for (i = 1; i <= num; i++) {
printf patterns[i];
if (i < num)
printf "|";
}
printf ")$\n";
} }' \
< $f \
> ${dn}/.arch-inventory
done
[Signs Star]
