Commit c07d7849 authored by Ian Lynagh's avatar Ian Lynagh
Browse files

Factor out the packages file parsing in darcs-all

parent ceb58408
......@@ -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 @_;
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment