use strict;
-my @top_dirs = ("nofib", "testsuite");
-
my $reporoot;
my $verbose = 1;
# --checked-out says we are pushing to a checked out tree
my $checked_out = 0;
+# --push or --pull or --send?
+my $push_pull_send = "push";
sub message {
if ($verbose) {
}
sub darcs_push {
- darcs ("push", "--no-set-default", @_);
+ darcs ($push_pull_send, "--no-set-default", @_);
}
sub pushall {
my $dir;
- my $ghcrepo = $checked_out ? $reporoot : "$reporoot/ghc";
- darcs_push ($ghcrepo, @_);
- for $dir (@top_dirs) {
- if (-d $dir && -d "$dir/_darcs") {
- darcs_push ("$reporoot/$dir", @_, "--repodir", $dir);
- }
- else {
- message "== $dir not present or not a repository; skipping";
- }
- }
- for my $pkg (`cat libraries/core-packages libraries/extra-packages`) {
- chomp $pkg;
- $dir = "libraries/$pkg";
- if (-d "$dir") {
- darcs_push ("$reporoot/$dir", @_, "--repodir", "$dir");
+ my $localpath;
+ my $remotepath;
+ my $path;
+ my $tag;
+ my @repos;
+
+ open IN, "< packages" or die "Can't open packages file";
+ @repos = <IN>;
+ close IN;
+
+ REPO: foreach (@repos) {
+ chomp;
+ if (/^([^# ]+) +(?:([^ ]+) +)?([^ ]+) +([^ ]+)$/) {
+ $localpath = $1;
+ $tag = defined($2) ? $2 : "";
+ $remotepath = $3;
+
+ if ($checked_out) {
+ $path = "$reporoot/$localpath";
+ }
+ else {
+ if ($remotepath =~ /^http:/) {
+ message "Ignoring $localpath; remote is http URL";
+ next REPO;
+ }
+ else {
+ $path = "$reporoot/$remotepath";
+ }
+ }
+
+ if (-d "$localpath/_darcs") {
+ darcs_push ($path, @_, "--repodir", $localpath);
+ }
+ elsif ($tag eq "") {
+ message "== Required repo $localpath is missing! Skipping";
+ }
+ else {
+ message "== $localpath repo not present; skipping";
+ }
}
- else {
- warning("$pkg doesn't exist, use 'darcs-all get' to get it");
+ elsif (! /^(#.*)?$/) {
+ die "Bad line: $_";
}
}
}
if ($arg eq "-q") {
$verbose = 0;
}
+ elsif ($arg eq "--ignore-failure") {
+ $ignore_failure = 1;
+ }
elsif ($arg eq "--checked-out") {
$checked_out = 1;
}
+ elsif ($arg eq "--push") {
+ $push_pull_send = "push";
+ }
+ elsif ($arg eq "--pull") {
+ $push_pull_send = "pull";
+ }
+ elsif ($arg eq "--send") {
+ $push_pull_send = "send";
+ }
else {
$reporoot = $arg;
if (grep /^-q$/, @_) {