changed the delta function
authorHeiko Schlittermann (JUMPER) <hs@schlittermann.de>
Wed, 21 Jan 2015 23:07:35 +0100
changeset 65 0f7e871c4672
parent 64 b61e5e1cc7ad
child 66 04e08079f218
changed the delta function Now it returns a hash, not an array.
bin/dnsvi
lib/DNS/Vi.pm
t/10-dnsvi.t
t/20-cname-change.t
t/samples/frey-2
--- a/bin/dnsvi	Wed Jan 21 21:50:27 2015 +0100
+++ b/bin/dnsvi	Wed Jan 21 23:07:35 2015 +0100
@@ -65,18 +65,18 @@
     };
     ### @zone2
 
-    my ($add, $del) = delta(\@zone1, \@zone2);
-    if ((@$add + @$del) == 0) {
+    my %delta = delta(\@zone1, \@zone2);
+    if (!%delta) {
 	    say 'nothing changed';
 	    return 0;
     }
 
     say 'The following changes need your confirmation.';
-    say join "\n", show($add, $del);
+    say join "\n", show(@delta{qw/add del/});
     print 'confirm (yes|NO): ';
     return 1 if <STDIN> !~ /^y/i;
 
-    update(\@zone1, $add, $del, {
+    update(\@zone1, @delta{qw/add del/}, {
 	-server => $o{server},
 	-local => $o{local},
 	-debug => $o{debug},
--- a/lib/DNS/Vi.pm	Wed Jan 21 21:50:27 2015 +0100
+++ b/lib/DNS/Vi.pm	Wed Jan 21 23:07:35 2015 +0100
@@ -205,7 +205,8 @@
     push @add, "@{$_}{qw/label ttl rrtype data/}" foreach values %zone2;
     push @del, "@{$_}{qw/label ttl rrtype data/}" foreach values %zone1;
 
-    return (\@add, \@del);
+    return () if (!@add and !@del);
+    return (add => \@add, del => \@del);
 }
 
 sub edit {
@@ -223,7 +224,7 @@
 
 sub show {
     my ($add, $del) = @_;
-    my @out = ((map { " - $_ " } @$del), (map { " + $_ " } @$add),);
+    my @out = ((map { " - $_ " } @$del), (map { " + $_ " } @$add));
     return @out;
 }
 
--- a/t/10-dnsvi.t	Wed Jan 21 21:50:27 2015 +0100
+++ b/t/10-dnsvi.t	Wed Jan 21 23:07:35 2015 +0100
@@ -126,9 +126,9 @@
 	    }
         }
 
-        my ($added, $deleted) = delta(\@zone, \@zone);
-        is @$added,   0 => 'nothing added';
-        is @$deleted, 0 => 'nothing deleted';
+	my %delta = delta(\@zone, \@zone);
+        is @{$delta{add}}, 0 => 'nothing added';
+        is @{$delta{del}}, 0 => 'nothing deleted';
       }
 }
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/t/20-cname-change.t	Wed Jan 21 23:07:35 2015 +0100
@@ -0,0 +1,20 @@
+#! perl
+use strict;
+use warnings;
+use Test::More;
+use DNS::Vi;
+
+sub slurp {
+    local @ARGV = @_;
+    join "\n", <>;
+}
+
+ok my @zone1 = parse(slurp 't/samples/frey-1') => 'got 1st zone';
+ok my @zone2 = parse(slurp 't/samples/frey-2') => 'got 2nd zone';;
+
+ok my %delta = delta(\@zone1, \@zone2) => 'got delta';
+is @{$delta{add}}, 2 => '2 added';
+is @{$delta{del}}, 3 => '3 deleted';
+
+
+done_testing;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/t/samples/frey-2	Wed Jan 21 23:07:35 2015 +0100
@@ -0,0 +1,15 @@
+$TTL 5m
+$ORIGIN example.com.
+@	SOA p hostmaster (
+	47
+	1h
+	15m
+	7d
+	5m
+	)
+
+	NS  p
+p	A   1.1.1.1
+
+uxa.frey    CNAME   proxy.mm.frey  
+uxb.frey    CNAME   portal.mm.frey