提交 3292ae47 编写于 作者: M Martin Langhoff 提交者: Junio C Hamano

[PATCH] archimport autodetects import status, supports incremental imports

If there is no GIT directory, archimport will assume it is an initial import.

It now also supports incremental imports,  skipping "seen" commits. You can
now run it repeatedly to pull new commits from the Arch repository.
Signed-off-by: NMartin Langhoff <martin@catalyst.net.nz>
Signed-off-by: NJunio C Hamano <junkio@cox.net>
上级 ce726ec8
......@@ -49,12 +49,12 @@ $SIG{'PIPE'}="IGNORE";
$ENV{'TZ'}="UTC";
our($opt_h,$opt_v, $opt_T,
$opt_C,$opt_t, $opt_i);
$opt_C,$opt_t);
sub usage() {
print STDERR <<END;
Usage: ${\basename $0} # fetch/update GIT from Arch
[ -h ] [ -v ] [ -i ] [ -T ]
[ -h ] [ -v ] [ -T ]
[ -C GIT_repository ] [ -t tempdir ]
repository/arch-branch [ repository/arch-branch] ...
END
......@@ -173,21 +173,19 @@ foreach my $root (@arch_roots) {
## TODO cleanup irrelevant patches
## and put an initial import
## or a full tag
if ($opt_i) { # initial import
my $import = 0;
unless (-d '.git') { # initial import
if ($psets[0]{type} eq 'i' || $psets[0]{type} eq 't') {
print "Starting import from $psets[0]{id}\n";
`git-init-db`;
die $! if $?;
$import = 1;
} else {
die "Need to start from an import or a tag -- cannot use $psets[0]{id}";
}
`git-init-db`;
die $! if $?;
}
# process
my $lastbranch = branchname($psets[0]{id}); # only good for initial import
my $importseen = $opt_i ? 0 : 1; # start at 1 if opt_i
# process patchsets
foreach my $ps (@psets) {
$ps->{branch} = branchname($ps->{id});
......@@ -201,14 +199,22 @@ foreach my $ps (@psets) {
}
die $! if $?;
#
# skip commits already in repo
#
if (ptag($ps->{id})) {
$opt_v && print "Skipping already imported: $ps->{id}\n";
next;
}
#
# create the branch if needed
#
if ($ps->{type} eq 'i' && $importseen) {
die "Should not have more than one 'Initial import' per GIT import";
if ($ps->{type} eq 'i' && !$import) {
die "Should not have more than one 'Initial import' per GIT import: $ps->{id}";
}
unless ($opt_i && !$importseen) { # skip for first commit
unless ($import) { # skip for import
if ( -e ".git/refs/heads/$ps->{branch}") {
# we know about this branch
`git checkout $ps->{branch}`;
......@@ -225,13 +231,12 @@ foreach my $ps (@psets) {
die $! if $?;
}
#
# Apply the import/changeset/merge into the working tree
#
if ($ps->{type} eq 'i' || $ps->{type} eq 't') {
$importseen = 1;
apply_import($ps) or die $!;
$import=0;
} elsif ($ps->{type} eq 's') {
apply_cset($ps);
}
......@@ -577,8 +582,6 @@ sub ptag {
} else { # read
# if the tag isn't there, return 0
unless ( -s ".git/archimport/tags/$tag") {
warn "Could not find tag $tag -- perhaps it isn't in the repos we have?\n"
if $opt_v;
return 0;
}
open(C,"<.git/archimport/tags/$tag")
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册