diff options
| author | Manuel Traut <manut@mecka.net> | 2011-04-29 09:09:27 +0200 |
|---|---|---|
| committer | Manuel Traut <manut@mecka.net> | 2011-04-29 09:09:27 +0200 |
| commit | 5238ad5a0c4a9e1c8cd036f5de4055e39bd71297 (patch) | |
| tree | 4407c087b9fb5432b1dc11e70b52dacfa0b99feb /beagle/debian-rfs/usr/share/perl5/Debconf/Question.pm | |
| parent | 60ead65c41afba7e6aa4bbcf507a1d52f7a8fe9f (diff) | |
added debootstrap stuff
Signed-off-by: Manuel Traut <manut@mecka.net>
Diffstat (limited to 'beagle/debian-rfs/usr/share/perl5/Debconf/Question.pm')
| -rw-r--r-- | beagle/debian-rfs/usr/share/perl5/Debconf/Question.pm | 292 |
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 |
