Detect changed feed urls and rebase working copies if needed. (Patch by xMff)

SVN-Revision: 13138
This commit is contained in:
Steven Barth 2008-11-07 14:01:22 +00:00
parent d35bad03e3
commit af42e36df0

View file

@ -48,6 +48,33 @@ sub parse_config() {
close FEEDS; close FEEDS;
} }
sub update_location($$)
{
my $name = shift;
my $url = shift;
my $old_url;
-d "./feeds/$name.tmp" or mkdir "./feeds/$name.tmp" or return 1;
if( open LOC, "< ./feeds/$name.tmp/location" )
{
chomp($old_url = readline LOC);
close LOC;
}
if( !$old_url || $old_url ne $url )
{
if( open LOC, "> ./feeds/$name.tmp/location" )
{
print LOC $url, "\n";
close LOC;
}
return $old_url ? 1 : 0;
}
return 0;
}
sub update_index($) sub update_index($)
{ {
my $name = shift; my $name = shift;
@ -62,11 +89,12 @@ sub update_index($)
return 0; return 0;
} }
sub update_svn($$) { sub update_svn($$$) {
my $name = shift; my $name = shift;
my $src = shift; my $src = shift;
my $relocate = shift;
if (-d "./feeds/$name/.svn" ) { if ( !$relocate && -d "./feeds/$name/.svn" ) {
system("(cd \"./feeds/$name\"; svn up)") == 0 or return 1; system("(cd \"./feeds/$name\"; svn up)") == 0 or return 1;
} else { } else {
system("rm -rf \"./feeds/$name\""); system("rm -rf \"./feeds/$name\"");
@ -76,30 +104,34 @@ sub update_svn($$) {
return 0; return 0;
} }
sub update_cpy($$) { sub update_cpy($$$) {
my $name = shift; my $name = shift;
my $src = shift; my $src = shift;
my $relocate = shift;
$relocate && system("rm -rf \"./feeds/$name\"");
system("mkdir -p ./feeds/$name"); system("mkdir -p ./feeds/$name");
system("cp -Rf $src ./feeds"); system("cp -Rf $src ./feeds");
return 0; return 0;
} }
sub update_link($$) { sub update_link($$$) {
my $name = shift; my $name = shift;
my $src = abs_path(shift); my $src = abs_path(shift);
my $relocate = shift; # no-op
system("rm -f ./feeds/$name; ln -s $src ./feeds/$name"); system("rm -f ./feeds/$name; ln -s $src ./feeds/$name");
return 0; return 0;
} }
sub update_git($$) { sub update_git($$$) {
my $name = shift; my $name = shift;
my $src = shift; my $src = shift;
my $relocate = shift;
if (-d "./feeds/$name/.git" ) { if ( !$relocate && -d "./feeds/$name/.git" ) {
system("GIT_DIR=./feeds/$name/.git git pull") == 0 or return 1; system("GIT_DIR=./feeds/$name/.git git pull") == 0 or return 1;
} else { } else {
system("rm -rf \"./feeds/$name\""); system("rm -rf \"./feeds/$name\"");
@ -416,7 +448,11 @@ sub update_feed($$$$)
my $name=shift; my $name=shift;
my $src=shift; my $src=shift;
my $perform_update=shift; my $perform_update=shift;
my $force_relocate=update_location( $name, "@$src" );
if( $force_relocate ) {
warn "Source of feed $name has changed, replacing copy\n";
}
$update_method{$type} or do { $update_method{$type} or do {
warn "Unknown type '$type' in feed $name\n"; warn "Unknown type '$type' in feed $name\n";
return 1; return 1;
@ -425,7 +461,7 @@ sub update_feed($$$$)
my $failed = 1; my $failed = 1;
foreach my $feedsrc (@$src) { foreach my $feedsrc (@$src) {
warn "Updating feed '$name' from '$feedsrc' ...\n"; warn "Updating feed '$name' from '$feedsrc' ...\n";
next unless &{$update_method{$type}}($name, $feedsrc) == 0; next unless &{$update_method{$type}}($name, $feedsrc, $force_relocate) == 0;
$failed = 0; $failed = 0;
last; last;
} }