5 my @top_dirs = ("nofib", "testsuite");
7 # Figure out where to get the other repositories from,
8 # based on where this GHC repo came from.
9 my $defaultrepo = `cat _darcs/prefs/defaultrepo`;
14 if ($defaultrepo =~ /^...*:/) {
16 # Above regex says "at least two chars before the :", to avoid
17 # catching Win32 drives ("C:\").
18 $defaultrepo_base = $defaultrepo;
19 $defaultrepo_base =~ s#/[^/]+/?$##;
20 $defaultrepo_lib = "$defaultrepo_base/packages";
22 elsif ($defaultrepo =~ /^\//) {
23 # Local filesystem, absolute path (assumes a checked-out tree):
24 $defaultrepo_base = $defaultrepo;
25 $defaultrepo_lib = "$defaultrepo/libraries";
27 elsif ($defaultrepo =~ /^..\//) {
28 # Local filesystem, relative path (assumes a checked-out tree):
29 $defaultrepo_base = $defaultrepo;
30 $defaultrepo_lib = "$defaultrepo/libraries";
33 die "Couldn't work out defaultrepo";
37 my $ignore_failure = 0;
39 # --extra says we grab the extra libs with 'get'. It has no effect on
42 # --nofib/--testsuite tell get to also grab the respective repos.
43 # They have no effect on the other commands.
55 print "warning: @_\n";
60 message "== running darcs @_";
61 system ("darcs", @_) == 0
63 or die "darcs failed: $?";
69 for my $dir (@top_dirs) {
70 if (-d $dir && -d "$dir/_darcs") {
71 darcs (@_, "--repodir", $dir);
74 message "== $dir not present or not a repository; skipping";
77 for my $path (<libraries/*/_darcs>) {
79 if ($path =~ m#/(.*)/#) {
81 # bootstrapping.* are just copies of other repos; we don't
82 # update them directly.
83 if ($pkg !~ /bootstrapping/) {
84 darcs (@_, "--repodir", "libraries/$pkg");
88 die "that pattern can't fail!";
91 @packages = `cat libraries/boot-packages`;
92 # @packages = `cat libraries/boot-packages libraries/extra-packages`;
93 for my $pkg (@packages) {
95 if (! -d "libraries/$pkg") {
96 warning("$pkg doesn't exist, use 'darcs-all get' to get it");
101 sub darcsgetpackage {
102 my ($get_it, $r_flags, $repo_root, $package) = @_;
106 warning("$package already present; omitting");
109 darcs (@$r_flags, "$repo_root/$package");
116 if (! grep /(?:--complete|--partial)/, @_) {
117 warning("adding --partial, to override use --complete");
118 $r_flags = [@_, "--partial"];
124 darcsgetpackage($nofib, $r_flags, $defaultrepo_base, "nofib");
125 darcsgetpackage($testsuite, $r_flags, $defaultrepo_base, "testsuite");
131 @packages = `cat boot-packages extra-packages`;
134 @packages = `cat boot-packages`;
137 for my $pkg (@packages) {
139 darcsgetpackage(1, $r_flags, $defaultrepo_lib, $pkg);
144 if (! -d "_darcs" || ! -d "compiler") {
145 die "error: darcs-all must be run from the top level of the ghc tree."
150 # We handle -q here as well as lower down as we need to skip over it
151 # if it comes before the darcs command
155 elsif ($arg eq "-s") {
158 elsif ($arg eq "--extra") {
161 elsif ($arg eq "--nofib") {
164 elsif ($arg eq "--testsuite") {
169 if (grep /^-q$/, @_) {
177 die "What do you want to do?";
180 if ($command eq "get") {
184 if ($command =~ /^(?:w|wh|wha|what|whats|whatsn|whatsne|whatsnew)$/) {
185 # Hack around whatsnew failing if there are no changes