cvsserver: Eclipse compat - browsing 'modules' (heads in our case) works
authorMartin Langhoff <martin@catalyst.net.nz>
Wed, 1 Mar 2006 07:03:58 +0000 (20:03 +1300)
committerJunio C Hamano <junkio@cox.net>
Wed, 1 Mar 2006 09:10:27 +0000 (01:10 -0800)
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.

git-cvsserver.perl

index 344b2f398ba4da74db78a894d18a4eda43b11872..3c588c9d6439f35035f10cefd72b71933261d2a4 100755 (executable)
@@ -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);