blob: ef4dbc8d53150cceb5c6fb9aa0f2844c4cf01c94 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
|
#!/usr/bin/perl -w
use strict;
my $reporoot;
my $verbose = 1;
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) {
print "@_\n";
}
}
sub warning {
print "warning: @_\n";
}
sub darcs {
message "== running darcs @_";
system ("darcs", @_) == 0
or $ignore_failure
or die "darcs failed: $?";
}
sub darcs_push {
darcs ($push_pull_send, "--no-set-default", @_);
}
sub pushall {
my $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";
}
}
elsif (! /^(#.*)?$/) {
die "Bad line: $_";
}
}
}
sub main {
if (! -d "_darcs" || ! -d "compiler") {
die "error: darcs-all must be run from the top level of the ghc tree."
}
if ($#_ ne -1) {
while ($#_ ne -1) {
my $arg = shift;
# We handle -q here as well as lower down as we need to skip
# over it if it comes before the darcs command
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$/, @_) {
$verbose = 0;
}
last;
}
}
}
else {
die "Where do you want to push to?";
}
pushall (@_);
}
main(@ARGV);
|