From cc002579bf0b49bd5a5f2a00dd7100c94a3f81e9 Mon Sep 17 00:00:00 2001 From: Ian Lynagh Date: Thu, 24 Jul 2008 16:41:42 +0000 Subject: [PATCH] Rejig how darcs-all works It's now easier to add new repos anywhere in the source tree --- darcs-all | 143 +++++++++++++++++++++++----------------------- libraries/boot-packages | 21 ------- libraries/extra-packages | 15 ----- packages | 41 +++++++++++++ 4 files changed, 113 insertions(+), 107 deletions(-) delete mode 100644 libraries/boot-packages delete mode 100644 libraries/extra-packages create mode 100644 packages diff --git a/darcs-all b/darcs-all index bd8d712..bb41706 100644 --- a/darcs-all +++ b/darcs-all @@ -2,15 +2,12 @@ use strict; -my @top_dirs = ("nofib", "testsuite", "utils/hsc2hs"); - # Figure out where to get the other repositories from, # based on where this GHC repo came from. my $defaultrepo = `cat _darcs/prefs/defaultrepo`; chomp $defaultrepo; my $defaultrepo_base; -my $defaultrepo_lib; -my $hsc2hs_repo_loc; +my $checked_out_tree; if ($defaultrepo =~ /^...*:/) { # HTTP or SSH @@ -18,15 +15,13 @@ if ($defaultrepo =~ /^...*:/) { # catching Win32 drives ("C:\"). $defaultrepo_base = $defaultrepo; $defaultrepo_base =~ s#/[^/]+/?$##; - $defaultrepo_lib = "$defaultrepo_base/packages"; - $hsc2hs_repo_loc = $defaultrepo_base; + $checked_out_tree = 0; } elsif ($defaultrepo =~ /^(\.\.)?\//) { # Local filesystem, either absolute or relative path # (assumes a checked-out tree): $defaultrepo_base = $defaultrepo; - $defaultrepo_lib = "$defaultrepo/libraries"; - $hsc2hs_repo_loc = "$defaultrepo_base/utils"; + $checked_out_tree = 1; } else { die "Couldn't work out defaultrepo"; @@ -35,13 +30,7 @@ else { my $verbose = 2; my $ignore_failure = 0; -# --extra says we grab the extra libs with 'get'. It has no effect on -# the other commands. -my $extra = 0; -# --nofib/--testsuite tell get to also grab the respective repos. -# They have no effect on the other commands. -my $nofib = 0; -my $testsuite = 0; +my %tags; sub message { if ($verbose >= 2) { @@ -63,51 +52,43 @@ sub darcs { } sub darcsall { - my @packages; + my $localpath; + my $path; + my $tag; + darcs @_; - for my $dir (@top_dirs) { - if (-d $dir && -d "$dir/_darcs") { - darcs (@_, "--repodir", $dir); - } - else { - message "== $dir not present or not a repository; skipping"; - } - } - for my $path () { - chomp $path; - if ($path =~ m#/(.*)/#) { - my $pkg = $1; - darcs (@_, "--repodir", "libraries/$pkg"); - } - else { - die "that pattern can't fail!"; - } - } - @packages = `cat libraries/boot-packages`; - # @packages = `cat libraries/boot-packages libraries/extra-packages`; - for my $pkg (@packages) { - chomp $pkg; - if (! -d "libraries/$pkg") { - warning("$pkg doesn't exist, use 'darcs-all get' to get it"); - } - } -} -sub darcsgetpackage { - my ($get_it, $r_flags, $repo_root, $package) = @_; + open IN, "< packages" or die "Can't open packages file"; + while () { + chomp; + if (/^([^ ]+) +(?:([^ ]+) +)?([^ ]+)/) { + $localpath = $1; + $tag = defined($2) ? $2 : ""; - if ($get_it) { - if (-d $package) { - warning("$package already present; omitting"); + if (-d "$localpath/_darcs") { + darcs (@_, "--repodir", $localpath); + } + elsif ($tag eq "") { + message "== Required repo $localpath is missing! Skipping"; + } + else { + message "== $localpath repo not present; skipping"; + } } - else { - darcs (@$r_flags, "$repo_root/$package"); + elsif (! /^$/) { + die "Bad line: $_"; } } + close IN; } sub darcsget { my $r_flags; + my $localpath; + my $remotepath; + my $path; + my $tag; + if (! grep /(?:--complete|--partial)/, @_) { warning("adding --partial, to override use --complete"); $r_flags = [@_, "--partial"]; @@ -116,27 +97,35 @@ sub darcsget { $r_flags = \@_; } - darcsgetpackage($nofib, $r_flags, $defaultrepo_base, "nofib"); - darcsgetpackage($testsuite, $r_flags, $defaultrepo_base, "testsuite"); - - chdir "utils"; - darcsgetpackage(1 , $r_flags, $hsc2hs_repo_loc, "hsc2hs"); - chdir ".."; + open IN, "< packages" or die "Can't open packages file"; + while () { + chomp; + if (/^([^ ]+) +(?:([^ ]+) +)?([^ ]+)/) { + $localpath = $1; + $tag = defined($2) ? $2 : ""; + $remotepath = $3; - chdir "libraries"; - - my @packages; - if ($extra) { - @packages = `cat boot-packages extra-packages`; - } - else { - @packages = `cat boot-packages`; - } + if ($checked_out_tree) { + $path = "$defaultrepo_base/$localpath"; + } + else { + $path = "$defaultrepo_base/$remotepath"; + } - for my $pkg (@packages) { - chomp $pkg; - darcsgetpackage(1, $r_flags, $defaultrepo_lib, $pkg); + if (($tag eq "") || defined($tags{$tag})) { + if (-d $localpath) { + warning("$localpath already present; omitting"); + } + else { + darcs (@$r_flags, $path, $localpath); + } + } + } + elsif (! /^$/) { + die "Bad line: $_"; + } } + close IN; } sub main { @@ -154,14 +143,26 @@ sub main { elsif ($arg eq "-s") { $verbose = 0; } + # --ci says we grab cabal-install repo, and the libraries it needs + # with 'get'. + # It has no effect on the other commands. + elsif ($arg eq "--ci") { + $tags{"ci"} = 1; + } + # --extra says we grab the extra libs with 'get'. + # It has no effect on the other commands. elsif ($arg eq "--extra") { - $extra = 1; + $tags{"extralibs"} = 1; } + # --nofib tells get to also grab the nofib repo. + # It has no effect on the other commands. elsif ($arg eq "--nofib") { - $nofib = 1; + $tags{"nofib"} = 1; } + # --testsuite tells get to also grab the testsuite repo. + # It has no effect on the other commands. elsif ($arg eq "--testsuite") { - $testsuite = 1; + $tags{"testsuite"} = 1; } else { unshift @_, $arg; diff --git a/libraries/boot-packages b/libraries/boot-packages deleted file mode 100644 index 6ffb54e..0000000 --- a/libraries/boot-packages +++ /dev/null @@ -1,21 +0,0 @@ -array -base -bytestring -Cabal -containers -directory -editline -filepath -ghc-prim -haskell98 -hpc -integer-gmp -old-locale -old-time -packedstring -pretty -process -random -template-haskell -unix -Win32 diff --git a/libraries/extra-packages b/libraries/extra-packages deleted file mode 100644 index 864713a..0000000 --- a/libraries/extra-packages +++ /dev/null @@ -1,15 +0,0 @@ -HUnit -QuickCheck -cgi -haskell-src -html -mtl -network -parsec -parallel -regex-base -regex-compat -regex-posix -stm -time -xhtml diff --git a/packages b/packages new file mode 100644 index 0000000..65cb40c --- /dev/null +++ b/packages @@ -0,0 +1,41 @@ +utils/hsc2hs hsc2hs +utils/cabal-install ci cabal-install +libraries/array packages/array +libraries/base packages/base +libraries/bytestring packages/bytestring +libraries/Cabal packages/Cabal +libraries/containers packages/containers +libraries/directory packages/directory +libraries/editline packages/editline +libraries/filepath packages/filepath +libraries/ghc-prim packages/ghc-prim +libraries/haskell98 packages/haskell98 +libraries/hpc packages/hpc +libraries/integer-gmp packages/integer-gmp +libraries/old-locale packages/old-locale +libraries/old-time packages/old-time +libraries/packedstring packages/packedstring +libraries/pretty packages/pretty +libraries/process packages/process +libraries/random packages/random +libraries/template-haskell packages/template-haskell +libraries/unix packages/unix +libraries/Win32 packages/Win32 +libraries/HUnit extralibs packages/HUnit +libraries/QuickCheck extralibs packages/QuickCheck +libraries/cgi extralibs packages/cgi +libraries/haskell-src extralibs packages/haskell-src +libraries/html extralibs packages/html +libraries/mtl extralibs packages/mtl +libraries/network extralibs packages/network +libraries/parsec extralibs packages/parsec +libraries/parallel extralibs packages/parallel +libraries/regex-base extralibs packages/regex-base +libraries/regex-compat extralibs packages/regex-compat +libraries/regex-posix extralibs packages/regex-posix +libraries/stm extralibs packages/stm +libraries/time extralibs packages/time +libraries/xhtml extralibs packages/xhtml +testsuite testsuite testsuite +nofib nofib nofib + -- 1.7.10.4