sub better {
my ($a, $b)=@_;
- my $firstanon=$b;
+ my @anon;
foreach my $r (@anon_urls) {
if ($a->{href} =~ /$r/) {
- $firstanon=$a;
- last;
+ push @anon, $a;
}
elsif ($b->{href} =~ /$r/) {
- $firstanon=$b;
- last;
+ push @anon, $b;
}
}
if ($want_auth) {
- return $firstanon != $a;
+ # Whichever is authed is better.
+ return 1 if ! @anon || ! grep { $_ eq $a } @anon;
+ return 0 if ! grep { $_ eq $b } @anon;
+ # Neither is authed, so the better anon method wins.
+ return $anon[0] == $a;
}
else {
- return $firstanon == $a;
+ # Better anon method wins.
+ return @anon && $anon[0] == $a;
}
}
sub dedup {
my %seenhref;
my %bytitle;
+ my @others;
foreach my $repo (@_) {
if (exists $repo->{title} &&
- length $repo->{title} &&
- exists $bytitle{$repo->{title}}) {
- my $other=$bytitle{$repo->{title}};
- next unless better($repo, $other);
- delete $bytitle{$other->{title}}
+ length $repo->{title}) {
+ if (exists $bytitle{$repo->{title}}) {
+ my $other=$bytitle{$repo->{title}};
+ next unless better($repo, $other);
+ delete $bytitle{$other->{title}}
+ }
+
+ if (! $seenhref{$repo->{href}}++) {
+ $bytitle{$repo->{title}}=$repo;
+ }
}
-
- if (! $seenhref{$repo->{href}}++) {
- $bytitle{$repo->{title}}=$repo;
+ else {
+ push @others, $repo;
}
}
- return values %bytitle;
+ return values %bytitle, @others;
}
sub parse {
if (defined $destdir && @repos > 1) {
# create subdirs of $destdir for the multiple repos
- mkdir($destdir);
- chdir($destdir) || die "failed to chdir to $destdir: $!";
+ if (! $noact) {
+ mkdir($destdir);
+ chdir($destdir) || die "failed to chdir to $destdir: $!";
+ }
$destdir=undef;
}