Dear diary, on Sat, Sep 23, 2006 at 06:45:09PM CEST, I got a letter where Petr Baudis <pasky@xxxxxxx> said that... > You still need to pass git-fetch-pack some URL in addition to the > repositories - it is used only for git_connect(), the purpose is that > repositories must be local directories so if you want to talk remote, you > need to do something like > > git-fetch-pack git://kernel.org/pub/scm/git/git.git --repo=/pub/scm/git/git.git master next --repo=/pub/scm/cogito/cogito.git master ..snip.. > The main target of this are the Xorg people who have plenty of small repos > and frequently want to update many of them. It would be nice if someone > from Xorg reading this and concerned with this could measure the > difference. Attached is a simple porcelain script for this. -- Petr "Pasky" Baudis Stuff: http://pasky.or.cz/ #!/bin/perl -sp0777i<X+d*lMLa^*lN%0]dsXx++lMlN/dsM0<j]dsj $/=unpack('H*',$_);$_=`echo 16dio\U$k"SK$/SM$n\EsN0p[lN*1 lK[d2%Sa2/d0$^Ixp"|dc`;s/\W//g;$_=pack('H*',/((..)*)$/)
#!/usr/bin/perl use warnings; use strict; # Remember that you must ensure the obj database is shared - either symlink it # or setup alternates! #my $remoteurl = 'git://git.kernel.org/pub/scm/git/git.git'; #my %config = ( # '/pub/scm/git/git.git' => { # 'next' => { # '/home/xpasky/q/gg' => 'origin' # }, # 'master' => { # '/home/xpasky/q/gg' => 'origin2', # '/home/xpasky/q/gg2' => 'origin' # } # }, # '/pub/scm/cogito/cogito-doc.git' => { # master => { # '/home/xpasky/q/gg2' => 'origin2' # } # } #); my $remoteurl = 'puturlofremotehosthere'; my %config = ( 'remoterepo1' => { branch1 => { 'localrepo1' => 'origin' }, branch2 => { 'localrepo1' => 'origin2', 'localrepo2' => 'origin' } }, 'remoterepo2' => { master => { 'localrepo2' => 'origin2' } } ); my @args = ($remoteurl); foreach my $repo (keys %config) { push (@args, '--repo='.$repo); foreach my $branch (keys %{$config{$repo}}) { push (@args, $branch); } } open (F, '-|', 'git-fetch-pack', @args) or die "$!"; while (<F>) { chomp; split / /, $_; my ($sha, $ref, $repo) = @_; $ref =~ s#^refs/heads/##; foreach my $lrepo (keys %{$config{$repo}->{$ref}}) { system("GIT_DIR=$lrepo git-update-ref $config{$repo}->{$ref}->{$lrepo} $sha"); } } close (F);