summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Langhoff <martin@catalyst.net.nz>2006-03-01 20:03:58 +1300
committerMartin Langhoff <martin@catalyst.net.nz>2006-03-01 21:07:55 +1300
commitf0bcd511ee3a00b7fd3975a386aa1165c07a0721 (patch)
treeee1bdccb5a20b6f29da7eea859be3d82d282bde5
parent5793aa1cc08df7c4021509556637ade2d639083f (diff)
downloadgit-f0bcd511ee3a00b7fd3975a386aa1165c07a0721.tar.gz
cvsserver: Eclipse compat - browsing 'modules' (heads in our case) works
Eclipse CVS clients have an odd way of perusing the top level of the repository, by calling update on module "". So reproduce cvs' odd behaviour in the interest of compatibility. It makes it much easier to get a checkout when using Eclipse.
-rwxr-xr-xgit-cvsserver.perl20
1 files changed, 20 insertions, 0 deletions
diff --git a/git-cvsserver.perl b/git-cvsserver.perl
index 33fcc1156b..20a9baeb71 100755
--- a/git-cvsserver.perl
+++ b/git-cvsserver.perl
@@ -630,6 +630,26 @@ sub req_update
argsplit("update");
+ #
+ # It may just be a client exploring the available heads/modukles
+ # in that case, list them as top level directories and leave it
+ # at that. Eclipse uses this technique to offer you a list of
+ # projects (heads in this case) to checkout.
+ #
+ if ($state->{module} eq '') {
+ print "E cvs update: Updating .\n";
+ opendir HEADS, $state->{CVSROOT} . '/refs/heads';
+ while (my $head = readdir(HEADS)) {
+ if (-f $state->{CVSROOT} . '/refs/heads/' . $head) {
+ print "E cvs update: New directory `$head'\n";
+ }
+ }
+ closedir HEADS;
+ print "ok\n";
+ return 1;
+ }
+
+
# Grab a handle to the SQLite db and do any necessary updates
my $updater = GITCVS::updater->new($state->{CVSROOT}, $state->{module}, $log);