X-Git-Url: http://git.megacz.com/?p=ghc-hetmet.git;a=blobdiff_plain;f=push-all;h=ef4dbc8d53150cceb5c6fb9aa0f2844c4cf01c94;hp=9ade0d43303f4676abd82c71da290f32747c1564;hb=118b39e4db1a8187af52c1ddb1b299021834a5a2;hpb=8434073f08470b4447436e865e25f5fe31852c23 diff --git a/push-all b/push-all index 9ade0d4..ef4dbc8 100644 --- a/push-all +++ b/push-all @@ -2,8 +2,6 @@ use strict; -my @top_dirs = ("nofib", "testsuite"); - my $reporoot; my $verbose = 1; @@ -11,6 +9,8 @@ my $ignore_failure = 0; # --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) { @@ -30,29 +30,53 @@ sub darcs { } 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 = ; + 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: $_"; } } } @@ -70,9 +94,21 @@ sub main { 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$/, @_) {