chiark
/
gitweb
/
~ian
/
topbloke.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
wip topbloke-merge-lists
[topbloke.git]
/
topbloke-merge-lists
diff --git
a/topbloke-merge-lists
b/topbloke-merge-lists
index 42737e0e1199ef0db7bb6374eb7e8e4702d1bd84..c717c4f149ba108c3bb7dac8f966976e637b273c 100755
(executable)
--- a/
topbloke-merge-lists
+++ b/
topbloke-merge-lists
@@
-5,7
+5,11
@@
use warnings;
use IO::Handle;
our %flag;
use IO::Handle;
our %flag;
-our @order, @order_final_maybe;
+our (@order, @order_final_maybe);
+our $verbose=0;
+
+# we don't use Getopt::Long because we want to be quick to start up
+# and we're not really a very user-facing utility
while (@ARGV && $ARGV[0] =~ m/^\-/) {
$_ = shift @ARGV;
while (@ARGV && $ARGV[0] =~ m/^\-/) {
$_ = shift @ARGV;
@@
-15,6
+19,8
@@
while (@ARGV && $ARGV[0] =~ m/^\-/) {
} elsif (s/^-D//) {
$flag{$_}{Result} = 1;
push @order_final_maybe, $_;
} elsif (s/^-D//) {
$flag{$_}{Result} = 1;
push @order_final_maybe, $_;
+ } elsif (m/^-v$/) {
+ $verbose = 1;
} elsif (m/^--$/) {
last;
} else {
} elsif (m/^--$/) {
last;
} else {
@@
-37,9
+43,11
@@
foreach my $ix (qw(0 1 2)) {
}
foreach $_ (@order_final_maybe) {
}
foreach $_ (@order_final_maybe) {
- push @order, $_ unless $flag
s
{$_}{InOrder}++;
+ push @order, $_ unless $flag{$_}{InOrder}++;
}
}
+my $current = $ARGV[0];
+
open O, '>', "$current.tmp" or die "$current.tmp $!";
foreach $_ (@order) {
open O, '>', "$current.tmp" or die "$current.tmp $!";
foreach $_ (@order) {
@@
-47,13
+55,16
@@
foreach $_ (@order) {
if (!defined $ff->{Result}) {
my $s = '';
foreach my $ix (qw(0 1 2)) {
if (!defined $ff->{Result}) {
my $s = '';
foreach my $ix (qw(0 1 2)) {
- $ff->{Input}[$ix] ||=
1
;
+ $ff->{Input}[$ix] ||=
0
;
$s .= $ff->{Input}[$ix];
}
$s .= $ff->{Input}[$ix];
}
+ if ($verbose) {
+ print STDERR "MERGE-LISTS $s $_\n" or die $!;
+ }
$ff->{Result} =
$s eq '000' ? '000' :
$s eq '111' ? '111' :
$ff->{Result} =
$s eq '000' ? '000' :
$s eq '111' ? '111' :
- $ff->{Input}[1];
+
!
$ff->{Input}[1];
}
if ($ff->{Result}) {
print O "$_\n" or die $!;
}
if ($ff->{Result}) {
print O "$_\n" or die $!;