From: Petr Baudis Date: Sat, 23 Sep 2006 17:06:21 GMT Subject: Re: [RFC][RESEND][PATCH] Allow fetching from multiple repositories at once Message-ID: <20060923170621.GR8259@pasky.or.cz> In-Reply-To: <20060923164308.16334.49252.stgit@machine.or.cz> Dear diary, on Sat, Sep 23, 2006 at 06:45:09PM CEST, I got a letter where Petr Baudis 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 { # '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 () { 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);