EVERYTHING FROM THE OTHER REPO
This commit is contained in:
@@ -0,0 +1,293 @@
|
||||
#!/usr/bin/perl
|
||||
# This file was preprocessed, do not edit!
|
||||
|
||||
|
||||
package Debconf::Question;
|
||||
use warnings;
|
||||
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;
|
||||
}
|
||||
|
||||
|
||||
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
|
||||
Reference in New Issue
Block a user