summaryrefslogtreecommitdiff
path: root/beagle/debian-rfs/usr/share/perl5/Debconf/DbDriver/Cache.pm
diff options
context:
space:
mode:
Diffstat (limited to 'beagle/debian-rfs/usr/share/perl5/Debconf/DbDriver/Cache.pm')
-rw-r--r--beagle/debian-rfs/usr/share/perl5/Debconf/DbDriver/Cache.pm271
1 files changed, 271 insertions, 0 deletions
diff --git a/beagle/debian-rfs/usr/share/perl5/Debconf/DbDriver/Cache.pm b/beagle/debian-rfs/usr/share/perl5/Debconf/DbDriver/Cache.pm
new file mode 100644
index 0000000..0072407
--- /dev/null
+++ b/beagle/debian-rfs/usr/share/perl5/Debconf/DbDriver/Cache.pm
@@ -0,0 +1,271 @@
+#!/usr/bin/perl -w
+# This file was preprocessed, do not edit!
+
+
+package Debconf::DbDriver::Cache;
+use strict;
+use Debconf::Log qw{:all};
+use base 'Debconf::DbDriver';
+
+
+use fields qw(cache dirty);
+
+
+sub iterator {
+ my $this=shift;
+ my $subiterator=shift;
+
+ my @items=keys %{$this->{cache}};
+ my $iterator=Debconf::Iterator->new(callback => sub {
+ while (my $item = pop @items) {
+ next unless defined $this->{cache}->{$item};
+ return $item;
+ }
+ return unless $subiterator;
+ my $ret;
+ do {
+ $ret=$subiterator->iterate;
+ } while defined $ret and exists $this->{cache}->{$ret};
+ return $ret;
+ });
+ return $iterator;
+}
+
+
+sub exists {
+ my $this=shift;
+ my $item=shift;
+
+ return $this->{cache}->{$item}
+ if exists $this->{cache}->{$item};
+ return 0;
+}
+
+
+sub init {
+ my $this=shift;
+
+ $this->{cache} = {} unless exists $this->{cache};
+}
+
+
+sub cacheadd {
+ my $this=shift;
+ my $item=shift;
+ my $entry=shift;
+
+ return if exists $this->{cache}->{$item};
+
+ $this->{cache}->{$item}=$entry;
+ $this->{dirty}->{$item}=0;
+}
+
+
+sub cachedata {
+ my $this=shift;
+ my $item=shift;
+
+ return $this->{cache}->{$item};
+}
+
+
+sub cached {
+ my $this=shift;
+ my $item=shift;
+
+ unless (exists $this->{cache}->{$item}) {
+ debug "db $this->{name}" => "cache miss on $item";
+ $this->load($item);
+ }
+ return $this->{cache}->{$item};
+}
+
+
+sub shutdown {
+ my $this=shift;
+
+ return if $this->{readonly};
+
+ my $ret=1;
+ foreach my $item (keys %{$this->{cache}}) {
+ if (not defined $this->{cache}->{$item}) {
+ $ret=undef unless defined $this->remove($item);
+ delete $this->{cache}->{$item};
+ }
+ elsif ($this->{dirty}->{$item}) {
+ $ret=undef unless defined $this->save($item, $this->{cache}->{$item});
+ $this->{dirty}->{$item}=0;
+ }
+ }
+ return $ret;
+}
+
+
+sub addowner {
+ my $this=shift;
+ my $item=shift;
+ my $owner=shift;
+ my $type=shift;
+
+ return if $this->{readonly};
+ $this->cached($item);
+
+ if (! defined $this->{cache}->{$item}) {
+ return if ! $this->accept($item, $type);
+ debug "db $this->{name}" => "creating in-cache $item";
+ $this->{cache}->{$item}={
+ owners => {},
+ fields => {},
+ variables => {},
+ flags => {},
+ }
+ }
+
+ if (! exists $this->{cache}->{$item}->{owners}->{$owner}) {
+ $this->{cache}->{$item}->{owners}->{$owner}=1;
+ $this->{dirty}->{$item}=1;
+ }
+ return $owner;
+}
+
+
+sub removeowner {
+ my $this=shift;
+ my $item=shift;
+ my $owner=shift;
+
+ return if $this->{readonly};
+ return unless $this->cached($item);
+
+ if (exists $this->{cache}->{$item}->{owners}->{$owner}) {
+ delete $this->{cache}->{$item}->{owners}->{$owner};
+ $this->{dirty}->{$item}=1;
+ }
+ unless (keys %{$this->{cache}->{$item}->{owners}}) {
+ $this->{cache}->{$item}=undef;
+ $this->{dirty}->{$item}=1;
+ }
+ return $owner;
+}
+
+
+sub owners {
+ my $this=shift;
+ my $item=shift;
+
+ return unless $this->cached($item);
+ return keys %{$this->{cache}->{$item}->{owners}};
+}
+
+
+sub getfield {
+ my $this=shift;
+ my $item=shift;
+ my $field=shift;
+
+ return unless $this->cached($item);
+ return $this->{cache}->{$item}->{fields}->{$field};
+}
+
+
+sub setfield {
+ my $this=shift;
+ my $item=shift;
+ my $field=shift;
+ my $value=shift;
+
+ return if $this->{readonly};
+ return unless $this->cached($item);
+ $this->{dirty}->{$item}=1;
+ return $this->{cache}->{$item}->{fields}->{$field} = $value;
+}
+
+
+sub removefield {
+ my $this=shift;
+ my $item=shift;
+ my $field=shift;
+
+ return if $this->{readonly};
+ return unless $this->cached($item);
+ $this->{dirty}->{$item}=1;
+ return delete $this->{cache}->{$item}->{fields}->{$field};
+}
+
+
+sub fields {
+ my $this=shift;
+ my $item=shift;
+
+ return unless $this->cached($item);
+ return keys %{$this->{cache}->{$item}->{fields}};
+}
+
+
+sub getflag {
+ my $this=shift;
+ my $item=shift;
+ my $flag=shift;
+
+ return unless $this->cached($item);
+ return $this->{cache}->{$item}->{flags}->{$flag}
+ if exists $this->{cache}->{$item}->{flags}->{$flag};
+ return 'false';
+}
+
+
+sub setflag {
+ my $this=shift;
+ my $item=shift;
+ my $flag=shift;
+ my $value=shift;
+
+ return if $this->{readonly};
+ return unless $this->cached($item);
+ $this->{dirty}->{$item}=1;
+ return $this->{cache}->{$item}->{flags}->{$flag} = $value;
+}
+
+
+sub flags {
+ my $this=shift;
+ my $item=shift;
+
+ return unless $this->cached($item);
+ return keys %{$this->{cache}->{$item}->{flags}};
+}
+
+
+sub getvariable {
+ my $this=shift;
+ my $item=shift;
+ my $variable=shift;
+
+ return unless $this->cached($item);
+ return $this->{cache}->{$item}->{variables}->{$variable};
+}
+
+
+sub setvariable {
+ my $this=shift;
+ my $item=shift;
+ my $variable=shift;
+ my $value=shift;
+
+ return if $this->{readonly};
+ return unless $this->cached($item);
+ $this->{dirty}->{$item}=1;
+ return $this->{cache}->{$item}->{variables}->{$variable} = $value;
+}
+
+
+sub variables {
+ my $this=shift;
+ my $item=shift;
+
+ return unless $this->cached($item);
+ return keys %{$this->{cache}->{$item}->{variables}};
+}
+
+
+1