git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [RFC][RESEND][PATCH] Allow fetching from multiple repositories at once

From
Petr Baudis <pasky@suse.cz>
Date
Sep 23, 2006, 17:06 UTC
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 <pasky@suse.cz> said that...

Show 6 quoted lines
> 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);
Previous: Junio C HamanoNext: Jakub Narebski
Message 11 of 13 in “Allow fetching from multiple repositories at once”
  1. Petr BaudisSep 23, 2006
  2. A Large Angry SCMSep 23, 2006
  3. Petr BaudisSep 23, 2006
  4. Johannes SchindelinSep 23, 2006
  5. Petr BaudisSep 23, 2006
  6. Johannes SchindelinSep 23, 2006
  7. Petr BaudisSep 23, 2006
  8. Johannes SchindelinSep 23, 2006
  9. Petr BaudisSep 23, 2006
  10. Junio C HamanoSep 23, 2006
  11. Petr BaudisSep 23, 2006
  12. Jakub NarebskiSep 23, 2006
  13. Petr BaudisSep 23, 2006

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.