summaryrefslogtreecommitdiff
path: root/beagle/debian-rfs/usr/share/perl5/Debconf/Question.pm
diff options
context:
space:
mode:
Diffstat (limited to 'beagle/debian-rfs/usr/share/perl5/Debconf/Question.pm')
-rw-r--r--beagle/debian-rfs/usr/share/perl5/Debconf/Question.pm292
1 files changed, 292 insertions, 0 deletions
diff --git a/beagle/debian-rfs/usr/share/perl5/Debconf/Question.pm b/beagle/debian-rfs/usr/share/perl5/Debconf/Question.pm
new file mode 100644
index 0000000..10a86b9
--- /dev/null
+++ b/beagle/debian-rfs/usr/share/perl5/Debconf/Question.pm
@@ -0,0 +1,292 @@
+#!/usr/bin/perl -w
+# This file was preprocessed, do not edit!
+
+
+package Debconf::Question;
+use strict;
+use Debconf::Db;
+use Debconf::Template;
+use Debconf::Iterator;
+use Debconf::Log qw(:all);
+
+
+use fields qw(name priority);
+
+our %question;
+
+
+sub new {
+ my Debconf::Question $this=shift;
+ my $name=shift;
+ my $owner=shift;
+ my $type=shift || die "no type given for question";
+ die "A question called \"$name\" already exists"
+ if exists $question{$name};
+ unless (ref $this) {
+ $this = fields::new($this);
+ }
+ $this->{name}=$name;
+ return unless defined $this->addowner($owner, $type);
+ $this->flag('seen', 'false');
+ return $question{$name}=$this;
+}
+
+
+sub get {
+ my Debconf::Question $this=shift;
+ my $name=shift;
+ return $question{$name} if exists $question{$name};
+ if ($Debconf::Db::config->exists($name)) {
+ $this = fields::new($this);
+ $this->{name}=$name;
+ return $question{$name}=$this;
+ }
+ return undef;
+}
+
+
+sub iterator {
+ my $this=shift;
+
+ my $real_iterator=$Debconf::Db::config->iterator;
+ return Debconf::Iterator->new(callback => sub {
+ return unless my $name=$real_iterator->iterate;
+ return $this->get($name);
+ });
+}
+
+
+sub _expand_vars {
+ my $this=shift;
+ my $text=shift;
+
+ return '' unless defined $text;
+
+ my @vars=$Debconf::Db::config->variables($this->{name});
+
+ my $rest=$text;
+ my $result='';
+ my $variable;
+ my $varval;
+ my $escape;
+ while ($rest =~ m/^(.*?)(\\)?\${([^{}]+)}(.*)$/sg) {
+ $result.=$1; # copy anything before the variable
+ $escape=$2;
+ $variable=$3;
+ $rest=$4; # continue trying to expand rest of text
+ if (defined $escape && length $escape) {
+ $result.="\${$variable}";
+ }
+ else {
+ $varval=$Debconf::Db::config->getvariable($this->{name}, $variable);
+ $result.=$varval if defined($varval); # expand the variable
+ }
+ }
+ $result.=$rest; # add on anything that's left.
+
+ return $result;
+}
+
+
+sub description {
+ my $this=shift;
+ return $this->_expand_vars($this->template->description);
+}
+
+
+sub extended_description {
+ my $this=shift;
+ return $this->_expand_vars($this->template->extended_description);
+}
+
+
+sub choices {
+ my $this=shift;
+
+ return $this->_expand_vars($this->template->choices);
+}
+
+
+sub choices_split {
+ my $this=shift;
+
+ my @items;
+ my $item='';
+ for my $chunk (split /(\\[, ]|,\s+)/, $this->choices) {
+ if ($chunk=~/^\\([, ])$/) {
+ $item.=$1;
+ } elsif ($chunk=~/^,\s+$/) {
+ push @items, $item;
+ $item='';
+ } else {
+ $item.=$chunk;
+ }
+ }
+ push @items, $item if $item ne '';
+ return @items;
+}
+
+
+sub variable {
+ my $this=shift;
+ my $var=shift;
+
+ if (@_) {
+ return $Debconf::Db::config->setvariable($this->{name}, $var, shift);
+ }
+ else {
+ return $Debconf::Db::config->getvariable($this->{name}, $var);
+ }
+}
+
+
+sub flag {
+ my $this=shift;
+ my $flag=shift;
+
+ if ($flag eq 'isdefault') {
+ debug developer => "The isdefault flag is deprecated, use the seen flag instead";
+ if (@_) {
+ my $value=(shift eq 'true') ? 'false' : 'true';
+ $Debconf::Db::config->setflag($this->{name}, 'seen', $value);
+ }
+ return ($Debconf::Db::config->getflag($this->{name}, 'seen') eq 'true') ? 'false' : 'true';
+ }
+
+ if (@_) {
+ return $Debconf::Db::config->setflag($this->{name}, $flag, shift);
+ }
+ else {
+ return $Debconf::Db::config->getflag($this->{name}, $flag);
+ }
+}
+
+
+sub value {
+ my $this = shift;
+
+ unless (@_) {
+ my $ret=$Debconf::Db::config->getfield($this->{name}, 'value');
+ return $ret if defined $ret;
+ return $this->template->default if ref $this->template;
+ } else {
+ return $Debconf::Db::config->setfield($this->{name}, 'value', shift);
+ }
+}
+
+
+sub value_split {
+ my $this=shift;
+
+ my $value=$this->value;
+ $value='' if ! defined $value;
+ my @items;
+ my $item='';
+ for my $chunk (split /(\\[, ]|,\s+)/, $value) {
+ if ($chunk=~/^\\([, ])$/) {
+ $item.=$1;
+ } elsif ($chunk=~/^,\s+$/) {
+ push @items, $item;
+ $item='';
+ } else {
+ $item.=$chunk;
+ }
+ }
+ push @items, $item if $item ne '';
+ return @items;
+}
+
+
+sub addowner {
+ my $this=shift;
+
+ return $Debconf::Db::config->addowner($this->{name}, shift, shift);
+}
+
+
+sub removeowner {
+ my $this=shift;
+
+ my $template=$Debconf::Db::config->getfield($this->{name}, 'template');
+ return unless $Debconf::Db::config->removeowner($this->{name}, shift);
+ if (length $template and
+ not $Debconf::Db::config->exists($this->{name})) {
+ $Debconf::Db::templates->removeowner($template, $this->{name});
+ delete $question{$this->{name}};
+ }
+}
+
+
+sub owners {
+ my $this=shift;
+
+ return join(", ", sort($Debconf::Db::config->owners($this->{name})));
+}
+
+
+sub template {
+ my $this=shift;
+ if (@_) {
+ my $oldtemplate=$Debconf::Db::config->getfield($this->{name}, 'template');
+ my $newtemplate=shift;
+ if (not defined $oldtemplate or $oldtemplate ne $newtemplate) {
+ $Debconf::Db::templates->removeowner($oldtemplate, $this->{name})
+ if defined $oldtemplate and length $oldtemplate;
+
+ $Debconf::Db::config->setfield($this->{name}, 'template', $newtemplate);
+
+ $Debconf::Db::templates->addowner($newtemplate, $this->{name},
+ $Debconf::Db::templates->getfield($newtemplate, "type"));
+ }
+ }
+ return Debconf::Template->get(
+ $Debconf::Db::config->getfield($this->{name}, 'template'));
+}
+
+
+sub name {
+ my $this=shift;
+
+ return $this->{name};
+}
+
+
+sub priority {
+ my $this=shift;
+
+ $this->{priority}=shift if @_;
+
+ return $this->{priority};
+}
+
+
+sub AUTOLOAD {
+ (my $field = our $AUTOLOAD) =~ s/.*://;
+
+ no strict 'refs';
+ *$AUTOLOAD = sub {
+ my $this=shift;
+
+ if (@_) {
+ return $Debconf::Db::config->setfield($this->{name}, $field, shift);
+ }
+ my $ret=$Debconf::Db::config->getfield($this->{name}, $field);
+ unless (defined $ret) {
+ $ret = $this->template->$field() if ref $this->template;
+ }
+ if (defined $ret) {
+ if ($field =~ /^(?:description|extended_description|choices)-/i) {
+ return $this->_expand_vars($ret);
+ } else {
+ return $ret;
+ }
+ }
+ };
+ goto &$AUTOLOAD;
+}
+
+sub DESTROY {
+}
+
+
+1