tracking many cvs/svn/git remote archives
- From
Randal L. Schwartz <merlyn@stonehenge.com>
- Date
- Nov 20, 2006, 17:18 UTC
- Message-ID
- <86y7q6m3zm.fsf@blue.stonehenge.com>
Now that git-cvsimport and git-svn are mature, I'll share my script which I call "get.cvs" to track a number of remote archives. It's not extremely general, but maybe it'll inspire someone else to generalize it.
I have ~/MIRROR/foo-GITSVN tracking a remote archive using git-svn, so the name of the directory reflects the tracking mechanism. There's also *-CVS, *-SVN, *-GIT, and *-GITCVS.
For *-GITCVS, I have to keep the args for git-cvsimport around, so I store that in the respository under getcvs.gitcvsargs.
For *-GITSVN, I have to force the head/origin to softlink to the proper remote svn reference.
The *-GIT* merges are safe, because they won't pull over any uncommited entries, but they *will* merge into whatever the current branch is. This keeps any checked out tree trivially up to date, which is mostly what I'm watching anyway.
Setting up *-GIT* generally requires checking out a master branch to really track the files... I think I did this with "git-checkout -b master origin".
#!/bin/sh
cd && cd MIRROR || exit 1
case $# in
0) set -- '*';;
esaceval set -- "$@"
trap ':' 2
for i in "$@"
do (
trap - 2
cd $i || exit
echo == $i ==
case $i in
*-CVS) cvs -q update;;
*-SVN) svn update;;
*-GIT*)
## first, update "origin":
case $i in
*-GIT)
git-fetch
;;
*-GITCVS)
git-cvsimport -k -i $(git-repo-config getcvs.gitcvsargs)
;;
*-GITSVN)
## be sure to have origin "ref: refs/remotes/git-svn"
git-svn multi-fetch
;;
esac
if git-status | grep -v 'nothing to commit'
then echo UPDATE SKIPPED
else
if git-pull . origin | egrep -v 'up-to-date'
then
git log --no-merges ORIG_HEAD.. | git shortlog
fi
fi
;;
*)
echo "[ignoring]";;
esac
)
done-- Randal L. Schwartz - Stonehenge Consulting Services, Inc. - +1 503 777 0095 <merlyn@stonehenge.com> <URL:http://www.stonehenge.com/merlyn/> Perl/Unix/security consulting, Technical writing, Comedy, etc. etc.