mirror of
https://github.com/curl/curl.git
synced 2024-11-27 05:50:21 +08:00
a perl script that can be used to mirror all curl archives
This commit is contained in:
parent
895dc5e530
commit
ca05d1b59c
104
perl/contrib/mirror.pl
Normal file
104
perl/contrib/mirror.pl
Normal file
@ -0,0 +1,104 @@
|
||||
#!/usr/bin/perl
|
||||
|
||||
#
|
||||
# Author: Daniel Stenberg <daniel@haxx.se>
|
||||
# Version: 0.1
|
||||
# Date: October 10, 2000
|
||||
#
|
||||
# This is public domain. Feel free to do whatever you please with this script.
|
||||
# There are no warranties whatsoever! It might work, it might ruin your hard
|
||||
# disk. Use this on your own risk.
|
||||
#
|
||||
# PURPOSE
|
||||
#
|
||||
# This script uses a local directory to maintain a "mirror" of the curl
|
||||
# packages listed in the remote curl web sites package list. Files present in
|
||||
# the local directory that aren't present in the remote list will be removed.
|
||||
# Files that are present in the remote list but not in the local directory
|
||||
# will be downloaded and put there. Files present at both places will not
|
||||
# be touched.
|
||||
#
|
||||
# WARNING: don't put other files in the mirror directory, they will be removed
|
||||
# when this script runs if they don't exist in the remote package list!
|
||||
#
|
||||
|
||||
# this is the directory to keep all the mirrored curl files in:
|
||||
$some_dir = $ARGV[0];
|
||||
|
||||
if( ! -d $some_dir ) {
|
||||
print "$some_dir is not a dir!\n";
|
||||
exit;
|
||||
}
|
||||
|
||||
# path to the curl binary
|
||||
$curl = "/home/danste/bin/curl";
|
||||
|
||||
# this is the remote file list
|
||||
$filelist = "http://curl.haxx.se/download/curldist.txt";
|
||||
|
||||
# prepend URL:
|
||||
$prepend = "http://curl.haxx.se/download";
|
||||
|
||||
opendir(DIR, $some_dir) || die "can't opendir $some_dir: $!";
|
||||
@existing = grep { /^[^\.]/ } readdir(DIR);
|
||||
closedir DIR;
|
||||
|
||||
$LOCAL_FILE = 1;
|
||||
$REMOTE_FILE = 2;
|
||||
|
||||
# create a hash array
|
||||
for(@existing) {
|
||||
$allfiles{$_} |= $LOCAL_FILE;
|
||||
}
|
||||
|
||||
# get remote file list
|
||||
print "Getting file list from $filelist\n";
|
||||
@remotefiles=`$curl -s $filelist`;
|
||||
|
||||
# fill in the hash array
|
||||
for(@remotefiles) {
|
||||
chomp;
|
||||
$allfiles{$_} |= $REMOTE_FILE;
|
||||
$remote++;
|
||||
}
|
||||
if($remote < 10) {
|
||||
print "There's something wrong. The remote file list seems too smallish!\n";
|
||||
exit;
|
||||
}
|
||||
|
||||
@sfiles = sort { $a cmp $b } keys %allfiles;
|
||||
|
||||
|
||||
$leftalone = $downloaded = $removed = 0;
|
||||
for(@sfiles) {
|
||||
$file = $_;
|
||||
$info = $allfiles{$file};
|
||||
|
||||
if($info == ($REMOTE_FILE|$LOCAL_FILE)) {
|
||||
print "$file is LOCAL and REMOTE, left alone\n";
|
||||
$leftalone++;
|
||||
}
|
||||
elsif($info == $REMOTE_FILE) {
|
||||
print "$file is only REMOTE, getting it...\n";
|
||||
system("$curl $prepend/$file -o $some_dir/$file");
|
||||
$downloaded++;
|
||||
}
|
||||
elsif($info == $LOCAL_FILE) {
|
||||
print "$file is only LOCAL, removing it...\n";
|
||||
system("rm $some_dir/$file");
|
||||
$removed++;
|
||||
}
|
||||
else {
|
||||
print "Problem, file $file was marked $info\n";
|
||||
}
|
||||
$loops++;
|
||||
}
|
||||
|
||||
if(!$loops) {
|
||||
print "No remote or local files were found!\n";
|
||||
exit;
|
||||
}
|
||||
|
||||
print "$leftalone files were already present\n",
|
||||
"$downloaded files were added\n",
|
||||
"$removed files were removed\n";
|
Loading…
Reference in New Issue
Block a user