# HG changeset patch # User Heiko Schlittermann (JUMPER) # Date 1421878055 -3600 # Node ID 0f7e871c4672afa8c8890b83c1a9dc50fc33827c # Parent b61e5e1cc7adcdceaf8aa7c397e8526eeb0eba3d changed the delta function Now it returns a hash, not an array. diff -r b61e5e1cc7ad -r 0f7e871c4672 bin/dnsvi --- 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 !~ /^y/i; - update(\@zone1, $add, $del, { + update(\@zone1, @delta{qw/add del/}, { -server => $o{server}, -local => $o{local}, -debug => $o{debug}, diff -r b61e5e1cc7ad -r 0f7e871c4672 lib/DNS/Vi.pm --- 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; } diff -r b61e5e1cc7ad -r 0f7e871c4672 t/10-dnsvi.t --- 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'; } } diff -r b61e5e1cc7ad -r 0f7e871c4672 t/20-cname-change.t --- /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; diff -r b61e5e1cc7ad -r 0f7e871c4672 t/samples/frey-2 --- /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