summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Lynagh <igloo@earth.li>2010-08-22 15:48:13 +0000
committerIan Lynagh <igloo@earth.li>2010-08-22 15:48:13 +0000
commitc07d7849d440a1ff371690654205c02c06b56fd0 (patch)
treed1909e8e46fe7a724bc3a85a9291483e86a5e552
parentceb5840878cd876f8425293fa3c8d56e9cbf3a2e (diff)
downloadhaskell-c07d7849d440a1ff371690654205c02c06b56fd0.tar.gz
Factor out the packages file parsing in darcs-all
-rw-r--r--darcs-all133
1 files changed, 71 insertions, 62 deletions
diff --git a/darcs-all b/darcs-all
index b4ba47e8a9..ff74616773 100644
--- a/darcs-all
+++ b/darcs-all
@@ -82,6 +82,8 @@ my $checked_out_flag = 0;
my %tags;
+my @packages;
+
# Figure out where to get the other repositories from.
sub getrepo {
my $basedir = ".";
@@ -150,14 +152,9 @@ sub darcs {
or die "darcs failed: $?";
}
-sub darcsall {
- my $localpath;
- my $remotepath;
- my $path;
- my $tag;
+sub parsePackages {
my @repos;
- my $command = $_[0];
- my $line;
+ my $lineNum;
my ($repo_base, $checked_out_tree) = getrepo();
@@ -165,43 +162,66 @@ sub darcsall {
@repos = <IN>;
close IN;
- $line = 0;
+ @packages = ();
+ $lineNum = 0;
foreach (@repos) {
chomp;
- $line++;
+ $lineNum++;
if (/^([^# ]+) +([^ ]+) +([^ ]+) +([^ ]+) +([^ ]+)$/) {
- $localpath = $1;
- $tag = $2;
- $remotepath = $3;
+ my %line;
+ $line{"localpath"} = $1;
+ $line{"tag"} = $2;
+ $line{"remotepath"} = $3;
+ $line{"vcs"} = $4;
+ $line{"upstream"} = $5;
+ push @packages, \%line;
+ }
+ elsif (! /^(#.*)?$/) {
+ die "Bad content on line $lineNum of packages file: $_";
+ }
+ }
+}
- if ($checked_out_tree) {
- $path = "$repo_base/$localpath";
- }
- else {
- $path = "$repo_base/$remotepath";
- }
+sub darcsall {
+ my $localpath;
+ my $remotepath;
+ my $path;
+ my $tag;
+ my @repos;
+ my $command = $_[0];
+ my $line;
+
+ my ($repo_base, $checked_out_tree) = getrepo();
- if (-d "$localpath/_darcs") {
- if ($want_remote_repo) {
- if ($command =~ /^opt/) {
- # Allows ./darcs-all optimize --relink
- darcs (@_, "--repodir", $localpath, "--sibling=$path");
- } else {
- darcs (@_, "--repodir", $localpath, $path);
- }
+ for $line (@packages) {
+ $localpath = $$line{"localpath"};
+ $tag = $$line{"tag"};
+ $remotepath = $$line{"remotepath"};
+
+ if ($checked_out_tree) {
+ $path = "$repo_base/$localpath";
+ }
+ else {
+ $path = "$repo_base/$remotepath";
+ }
+
+ if (-d "$localpath/_darcs") {
+ if ($want_remote_repo) {
+ if ($command =~ /^opt/) {
+ # Allows ./darcs-all optimize --relink
+ darcs (@_, "--repodir", $localpath, "--sibling=$path");
} else {
- darcs (@_, "--repodir", $localpath);
+ darcs (@_, "--repodir", $localpath, $path);
}
- }
- elsif ($tag eq "-") {
- message "== Required repo $localpath is missing! Skipping";
- }
- else {
- message "== $localpath repo not present; skipping";
+ } else {
+ darcs (@_, "--repodir", $localpath);
}
}
- elsif (! /^(#.*)?$/) {
- die "Bad content on line $line of packages file: $_";
+ elsif ($tag eq "-") {
+ message "== Required repo $localpath is missing! Skipping";
+ }
+ else {
+ message "== $localpath repo not present; skipping";
}
}
}
@@ -225,37 +245,25 @@ sub darcsget {
$r_flags = \@_;
}
- open IN, "< packages" or die "Can't open packages file";
- @repos = <IN>;
- close IN;
+ for $line (@packages) {
+ $localpath = $$line{"localpath"};
+ $tag = $$line{"tag"};
+ $remotepath = $$line{"remotepath"};
- $line = 0;
- foreach (@repos) {
- chomp;
- $line++;
- if (/^([^ ]+) +([^ ]+) +([^ ]+) +([^ ]+) +([^ ]+)$/) {
- $localpath = $1;
- $tag = $2;
- $remotepath = $3;
-
- if ($checked_out_tree) {
- $path = "$repo_base/$localpath";
+ if ($checked_out_tree) {
+ $path = "$repo_base/$localpath";
+ }
+ else {
+ $path = "$repo_base/$remotepath";
+ }
+
+ if (($tag eq "-") || defined($tags{$tag})) {
+ if (-d $localpath) {
+ warning("$localpath already present; omitting");
}
else {
- $path = "$repo_base/$remotepath";
+ darcs (@$r_flags, $path, $localpath);
}
-
- if (($tag eq "-") || defined($tags{$tag})) {
- if (-d $localpath) {
- warning("$localpath already present; omitting");
- }
- else {
- darcs (@$r_flags, $path, $localpath);
- }
- }
- }
- elsif (! /^(#.*)?$/) {
- die "Bad content on line $line of packages file: $_";
}
}
}
@@ -312,6 +320,7 @@ sub main {
die "What do you want to do?";
}
my $command = $_[0];
+ parsePackages;
if ($command eq "get") {
darcsget @_;
}