From 7227c2debfeef94b35f7d81f42900aa01820caa3 Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Mon, 24 Aug 2009 23:01:42 +0100 Subject: Use a hash to de-duplicate dependencies --- IkiWiki.pm | 19 ++++++------------- IkiWiki/Render.pm | 2 +- ikiwiki-transition | 2 +- t/index.t | 12 ++++++------ 4 files changed, 14 insertions(+), 21 deletions(-) diff --git a/IkiWiki.pm b/IkiWiki.pm index 734b167cf..21a74adce 100644 --- a/IkiWiki.pm +++ b/IkiWiki.pm @@ -1508,10 +1508,12 @@ sub loadindex () { $oldlinks{$page}=[@{$d->{links}}]; } if (exists $d->{dependslist}) { - $depends{$page}=$d->{dependslist}; + $depends{$page}={ + map { $_ => 1 } @{$d->{dependslist}} + }; } elsif (exists $d->{depends}) { - $depends{$page}=[$d->{depends}]; + $depends{$page}={$d->{depends} => 1}; } if (exists $d->{state}) { $pagestate{$page}=$d->{state}; @@ -1557,7 +1559,7 @@ sub saveindex () { }; if (exists $depends{$page}) { - $index{page}{$src}{dependslist} = $depends{$page}; + $index{page}{$src}{dependslist} = [ keys %{$depends{$page}} ]; } if (exists $pagestate{$page}) { @@ -1730,16 +1732,7 @@ sub add_depends ($$) { return unless pagespec_valid($pagespec); - if (! exists $depends{$page}) { - $depends{$page}=[$pagespec]; - } - else { - foreach my $p (@{$depends{$page}}) { - return 1 if $p eq $pagespec; - } - push @{$depends{$page}}, $pagespec; - } - + $depends{$page}{$pagespec} = 1; return 1; } diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm index 08d484847..b9f1d7754 100644 --- a/IkiWiki/Render.pm +++ b/IkiWiki/Render.pm @@ -459,7 +459,7 @@ sub refresh () { next if $rendered{$f}; my $p=pagename($f); if (exists $depends{$p}) { - foreach my $d (@{$depends{$p}}) { + foreach my $d (keys %{$depends{$p}}) { # only consider internal files # if the page explicitly depends on such files foreach my $file (@changed, $d=~/internal\(/ ? @internal : ()) { diff --git a/ikiwiki-transition b/ikiwiki-transition index 60cea3d54..795ab31cb 100755 --- a/ikiwiki-transition +++ b/ikiwiki-transition @@ -299,7 +299,7 @@ sub oldloadindex { $pagemtime{$page}=$items{mtime}[0]; $oldlinks{$page}=[@{$items{link}}]; $links{$page}=[@{$items{link}}]; - $depends{$page}=[$items{depends}[0]] if exists $items{depends}; + $depends{$page}={ $items{depends}[0] => 1 } if exists $items{depends}; $destsources{$_}=$page foreach @{$items{dest}}; $renderedfiles{$page}=[@{$items{dest}}]; $pagecase{lc $page}=$page; diff --git a/t/index.t b/t/index.t index 107dac9d0..2f23524a7 100755 --- a/t/index.t +++ b/t/index.t @@ -32,9 +32,9 @@ $renderedfiles{"bar.png"}=["bar.png"]; $links{"Foo"}=["bar.png"]; $links{"bar"}=["Foo", "new-page"]; $links{"bar.png"}=[]; -$depends{"Foo"}=[]; -$depends{"bar"}=["foo*"]; -$depends{"bar.png"}=[]; +$depends{"Foo"}={}; +$depends{"bar"}={"foo*" => 1}; +$depends{"bar.png"}={}; $pagestate{"bar"}{meta}{title}="a page about bar"; $pagestate{"bar"}{meta}{moo}="mooooo"; # only loaded plugins save state, so this should not be saved out @@ -80,9 +80,9 @@ is_deeply(\%links, { "bar.png" => [], }, "%links loaded correctly"); is_deeply(\%depends, { - Foo => [], - bar => ["foo*"], - "bar.png" => [], + Foo => {}, + bar => {"foo*" => 1}, + "bar.png" => {}, }, "%depends loaded correctly"); is_deeply(\%pagestate, { bar => { -- cgit v1.2.3