The following commit has been merged in the sourcev3 branch:
commit 6944852b169d3ab40a7a5adcba37d4bcf41a2293
Author: Raphael Hertzog <[EMAIL PROTECTED]>
Date: Sat Mar 15 23:20:54 2008 +0100
Each source package format can have its own command line options
* scripts/Dpkg/Source/Package.pm (init_options): Provide default
values to various options in a format-specific way.
* scripts/Dpkg/Source/Package.pm (parse_cmdline_options,
parse_cmdline_option): New functions to handle command line options.
* scripts/dpkg-source.pl: Forward unknown options to the
source package object. Remove handling of all -s? options
and move it...
* scripts/Dpkg/Source/Package/V1_0.pm: ...here.
* scripts/Dpkg/Source/Package/V2_0.pm: Add support of options
--include-removal and --include-timestamp.
* scripts/Dpkg/Source/Package/V3_0/quilt.pm: Add support of option
--without-quilt.
diff --git a/scripts/Dpkg/Source/Package.pm b/scripts/Dpkg/Source/Package.pm
index 5d8699b..f228d13 100644
--- a/scripts/Dpkg/Source/Package.pm
+++ b/scripts/Dpkg/Source/Package.pm
@@ -53,9 +53,14 @@ sub new {
if (exists $args{"options"}) {
$self->{'options'} = $args{'options'};
}
+ $self->init_options();
return $self;
}
+sub init_options {
+ my ($self) = @_;
+}
+
sub initialize {
my ($self, $filename) = @_;
my ($fn, $dir) = fileparse($filename);
@@ -216,6 +221,19 @@ sub check_signature {
}
}
+sub parse_cmdline_options {
+ my ($self, @opts) = @_;
+ foreach (@opts) {
+ if (not $self->parse_cmdline_option($_)) {
+ warning(_g("%s is not a valid option for %s"), $_, ref($self));
+ }
+ }
+}
+
+sub parse_cmdline_option {
+ return 0;
+}
+
sub extract {
my $self = shift;
eval { $self->do_extract(@_) };
diff --git a/scripts/Dpkg/Source/Package/V1_0.pm
b/scripts/Dpkg/Source/Package/V1_0.pm
index e61d7c8..14e48d5 100644
--- a/scripts/Dpkg/Source/Package/V1_0.pm
+++ b/scripts/Dpkg/Source/Package/V1_0.pm
@@ -38,6 +38,23 @@ use File::Basename;
use File::Temp qw(tempfile);
use File::Spec;
+sub init_options {
+ my ($self) = @_;
+ $self->{'options'}{'sourcestyle'} ||= 'X';
+}
+
+sub parse_cmdline_option {
+ my ($self, $opt) = @_;
+ my $o = $self->{'options'};
+ if ($opt =~ m/^-s([akpursnAKPUR])$/) {
+ warning(_g("-s%s option overrides earlier -s%s option"), $1,
+ $o->{'sourcestyle'}) if $o->{'sourcestyle'} ne 'X';
+ $o->{'sourcestyle'} = $1;
+ return 1;
+ }
+ return 0;
+}
+
sub do_extract {
my ($self, $newdirectory) = @_;
my $sourcestyle = $self->{'options'}{'sourcestyle'};
diff --git a/scripts/Dpkg/Source/Package/V2_0.pm
b/scripts/Dpkg/Source/Package/V2_0.pm
index 4a8136a..cc4ced5 100644
--- a/scripts/Dpkg/Source/Package/V2_0.pm
+++ b/scripts/Dpkg/Source/Package/V2_0.pm
@@ -37,6 +37,26 @@ use File::Temp qw(tempfile tempdir);
use File::Path;
use File::Spec;
+sub init_options {
+ my ($self) = @_;
+ $self->{'options'}{'include_removal'} = 0
+ unless exists $self->{'options'}{'include_removal'};
+ $self->{'options'}{'include_timestamp'} = 0
+ unless exists $self->{'options'}{'include_timestamp'};
+}
+
+sub parse_cmdline_option {
+ my ($self, $opt) = @_;
+ if ($opt =~ /^--include-removal$/) {
+ $self->{'options'}{'include_removal'} = 1;
+ return 1;
+ } elsif ($opt =~ /^--include-timestamp$/) {
+ $self->{'options'}{'include_timestamp'} = 1;
+ return 1;
+ }
+ return 0;
+}
+
sub do_extract {
my ($self, $newdirectory) = @_;
my $fields = $self->{'fields'};
@@ -144,7 +164,9 @@ sub can_build {
sub prepare_build {
my ($self, $dir) = @_;
$self->{'diff_options'} = {
- diff_ignore_regexp => $self->{'options'}{'diff_ignore_regexp'}
+ diff_ignore_regexp => $self->{'options'}{'diff_ignore_regexp'},
+ include_removal => $self->{'options'}{'include_removal'},
+ include_timestamp => $self->{'options'}{'include_timestamp'},
};
}
diff --git a/scripts/Dpkg/Source/Package/V3_0/quilt.pm
b/scripts/Dpkg/Source/Package/V3_0/quilt.pm
index 432174a..1229fed 100644
--- a/scripts/Dpkg/Source/Package/V3_0/quilt.pm
+++ b/scripts/Dpkg/Source/Package/V3_0/quilt.pm
@@ -28,9 +28,27 @@ use Dpkg::ErrorHandling qw(error syserr warning usageerr
subprocerr info);
use Dpkg::Source::Patch;
use Dpkg::IPC;
+use POSIX;
use File::Basename;
use File::Spec;
+sub init_options {
+ my ($self) = @_;
+ $self->SUPER::init_options();
+ $self->{'options'}{'without_quilt'} = 0
+ unless exists $self->{'options'}{'without_quilt'};
+}
+
+sub parse_cmdline_option {
+ my ($self, $opt) = @_;
+ return 1 if $self->SUPER::parse_cmdline_option($opt);
+ if ($opt =~ /^--without-quilt$/) {
+ $self->{'options'}{'without_quilt'} = 1;
+ return 1;
+ }
+ return 0;
+}
+
sub get_autopatch_name {
my ($self) = @_;
return "debian-changes-" . $self->{'fields'}{'Version'} . ".diff";
@@ -91,7 +109,7 @@ sub apply_patches {
foreach my $patch ($self->get_patches($dir, $skip_auto)) {
my $path = File::Spec->catfile($dir, "debian", "patches", $patch);
my $patch_obj = Dpkg::Source::Patch->new(filename => $path);
- if ($have_quilt) {
+ if ($have_quilt and not $self->{'options'}{'without_quilt'}) {
info(_g("applying %s with quilt"), $patch) unless $skip_auto;
my $analysis = $patch_obj->analyze($dir);
foreach my $dir (keys %{$analysis->{'dirtocreate'}}) {
@@ -108,7 +126,7 @@ sub apply_patches {
);
fork_and_exec(%opts);
foreach my $fn (keys %{$analysis->{'filepatched'}}) {
- utime($now, $now, $fn) ||
+ utime($now, $now, $fn) || $! == ENOENT ||
syserr(_g("cannot change timestamp for %s"), $fn);
}
} else {
@@ -122,6 +140,7 @@ sub apply_patches {
sub prepare_build {
my ($self, $dir) = @_;
+ $self->SUPER::prepare_build($dir);
# Skip .pc directories of quilt by default and ignore difference
# on debian/patches/series symlinks
my $func = sub {
@@ -130,9 +149,7 @@ sub prepare_build {
return 1 if $_[0] =~ /$self->{'options'}{'diff_ignore_regexp'}/;
return 0;
};
- $self->{'diff_options'} = {
- diff_ignore_func => $func
- };
+ $self->{'diff_options'}{'diff_ignore_func'} = $func;
}
sub register_autopatch {
diff --git a/scripts/dpkg-source.pl b/scripts/dpkg-source.pl
index 6539b37..c10128c 100755
--- a/scripts/dpkg-source.pl
+++ b/scripts/dpkg-source.pl
@@ -91,8 +91,6 @@ my %options = (
# Ignore files
tar_ignore => [],
diff_ignore_regexp => '',
- # Sourcestyle
- sourcestyle => 'X',
);
# Fields to remove/override
@@ -103,6 +101,7 @@ my $substvars = Dpkg::Substvars->new();
my $opmode;
my $tar_ignore_default_pattern_done;
+my @cmdline_options;
while (@ARGV && $ARGV[0] =~ m/^-/) {
$_ = shift(@ARGV);
if (m/^-b$/) {
@@ -124,10 +123,6 @@ while (@ARGV && $ARGV[0] =~ m/^-/) {
usageerr(_g("%s is not a compression level"), $comp_level)
unless $comp_level =~ /^([1-9]|fast|best)$/;
Dpkg::Source::Compressor->set_default_compression_level($comp_level);
- } elsif (m/^-s([akpursnAKPUR])$/) {
- warning(_g("-s%s option overrides earlier -s%s option"), $1,
- $options{'sourcestyle'}) if $options{'sourcestyle'} ne 'X';
- $options{'sourcestyle'} = $1;
} elsif (m/^-c/) {
$controlfile = $POSTMATCH;
} elsif (m/^-l/) {
@@ -150,9 +145,10 @@ while (@ARGV && $ARGV[0] =~ m/^-/) {
}
} elsif (m/^-V(\w[-:0-9A-Za-z]*)[=:]/) {
$substvars->set($1, $POSTMATCH);
+ warning(_g("substvars support is deprecated (see
README.feature-removal-schedule)"));
} elsif (m/^-T/) {
- $varlistfile = $POSTMATCH;
- warning(_g("substvars support is deprecated (see
README.feature-removal-schedule)"));
+ $varlistfile = $POSTMATCH;
+ warning(_g("substvars support is deprecated (see
README.feature-removal-schedule)"));
} elsif (m/^-(h|-help)$/) {
usage();
exit(0);
@@ -168,7 +164,7 @@ while (@ARGV && $ARGV[0] =~ m/^-/) {
} elsif (m/^--$/) {
last;
} else {
- usageerr(_g("unknown option \`%s'"), $_);
+ push @cmdline_options, $_;
}
}
@@ -308,6 +304,10 @@ if ($opmode eq 'build') {
}
info(_g("using source format `%s'"), $fields->{'Format'});
+ # Parse command line options
+ $srcpkg->init_options();
+ $srcpkg->parse_cmdline_options(@cmdline_options);
+
# Build the files (.tar.gz, .diff.gz, etc)
$srcpkg->build($dir);
@@ -339,6 +339,9 @@ if ($opmode eq 'build') {
my $srcpkg = Dpkg::Source::Package->new(filename => $dsc,
options => \%options);
+ # Parse command line options
+ $srcpkg->parse_cmdline_options(@cmdline_options);
+
# Decide where to unpack
my $newdirectory = $srcpkg->get_basename();
$newdirectory =~ s/_/-/g;
@@ -405,7 +408,7 @@ sub usage {
Commands:
-x <filename>.dsc [<output-dir>]
extract source package.
- -b <dir> [<orig-dir>|<orig-targz>|\'\']
+ -b <dir>
build source package.
Build options:
@@ -423,27 +426,17 @@ Build options:
(defaults to: '%s').
-I[<pattern>] filter out files when building tarballs
(defaults to: %s).
- -sa auto select orig source (-sA is default).
- -sk use packed orig source (unpack & keep).
- -sp use packed orig source (unpack & remove).
- -su use unpacked orig source (pack & keep).
- -sr use unpacked orig source (pack & remove).
- -ss trust packed & unpacked orig src are same.
- -sn there is no diff, do main tarfile only.
- -sA,-sK,-sP,-sU,-sR like -sa,-sk,-sp,-su,-sr but may overwrite.
-Z<compression> select compression to use (defaults to 'gzip',
supported are: %s).
-z<level> compression level to use (defaults to '9',
supported are: '1'-'9', 'best', 'fast')
-Extract options:
- -sp (default) leave orig source packed in current dir.
- -sn do not copy original source to current dir.
- -su unpack original source tree too.
-
General options:
-h, --help show this help message.
--version show the version.
+
+More options are available but they depend on the source package format.
+See dpkg-source(1) for more info.
"), $progname,
$diff_ignore_default_regexp,
join('', map { " -I$_" } @tar_ignore_default_pattern),
--
dpkg's main repository
--
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]