Просмотр исходного кода

dpkg-source: do not fallback to other source formats

When the prerequesites of the current source format are not met,
simply error out instead of trying to fallback to other source formats.
Raphaël Hertzog лет назад: 16
Родитель
Сommit
a727752bf9
3 измененных файлов с 31 добавлено и 32 удалено
  1. 2 0
      debian/changelog
  2. 5 7
      man/dpkg-source.1
  3. 24 25
      scripts/dpkg-source.pl

+ 2 - 0
debian/changelog

@@ -65,6 +65,8 @@ dpkg (1.15.6) UNRELEASED; urgency=low
     dselect.
   * The rewritten Dpkg::Checksums deals properly with filenames with
     spaces. Closes: #572030
+  * dpkg-source does no longer fallback to other source formats if the
+    requested one is not usable. Closes: #557459
 
   [ Guillem Jover ]
   * Handle argument parsing in dpkg-checkbuilddeps and dpkg-scanpackages

+ 5 - 7
man/dpkg-source.1

@@ -56,10 +56,10 @@ Depending on the source package format used to build the package,
 additional parameters might be accepted.
 
 \fBdpkg\-source\fP will build the source package with the first format
-that works from this ordered list:
-the format(s) indicated with the \fI\-\-format\fP command-line option(s),
+found in this ordered list:
+the format indicated with the \fI\-\-format\fP command-line option,
 the format indicated in \fBdebian/source/format\fP,
-"1.0", "3.0 (quilt)", "3.0 (native)". See section
+"1.0". See section
 \fBSOURCE PACKAGE FORMATS\fP for an extensive description of the various
 source package formats.
 
@@ -67,8 +67,7 @@ source package formats.
 .RI "\fB\-\-print\-format\fP " directory
 Print the source format that would be used to build the source package if
 \fBdpkg\-source \-b \fIdirectory\fR was called (in the same conditions and
-with the same parameters). In particular it's important that the upstream
-tarball (if any) can be found in the current directory.
+with the same parameters).
 
 .TP
 .BR \-h ", " \-\-help
@@ -99,8 +98,7 @@ from a special line near the bottom of the changelog or failing that
 defaults to the debian standard format.
 .TP
 .BI \-\-format= value
-Try first the given format for building the source package. If used
-multiple times, they are tried in order. It does
+Use the given format for building the source package. It does
 override any format given in \fBdebian/source/format\fP.
 .TP
 .BI \-V name = value

+ 24 - 25
scripts/dpkg-source.pl

@@ -11,7 +11,7 @@
 # Copyright © 2005 Brendan O'Dea <bod@debian.org>
 # Copyright © 2006-2008 Frank Lichtenheld <djpig@debian.org>
 # Copyright © 2006-2009 Guillem Jover <guillem@debian.org>
-# Copyright © 2008-2009 Raphaël Hertzog <hertzog@debian.org>
+# Copyright © 2008-2010 Raphaël Hertzog <hertzog@debian.org>
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -53,7 +53,7 @@ my $controlfile;
 my $changelogfile;
 my $changelogformat;
 
-my @build_formats = ("1.0", "3.0 (quilt)", "3.0 (native)");
+my $build_format;
 my %options = (
     # Compression related
     compression => compression_get_default(),
@@ -77,7 +77,6 @@ my $tar_ignore_default_pattern_done;
 
 my @options;
 my @cmdline_options;
-my @cmdline_formats;
 while (@ARGV && $ARGV[0] =~ m/^-/) {
     $_ = shift(@ARGV);
     if (m/^-b$/) {
@@ -120,7 +119,7 @@ if (defined($options{'opmode'}) &&
 while (@options) {
     $_ = shift(@options);
     if (m/^--format=(.*)$/) {
-        push @cmdline_formats, $1;
+	$build_format = $1 unless defined $build_format;
     } elsif (m/^-(?:Z|-compression=)(.*)$/) {
 	my $compression = $1;
 	$options{'compression'} = $compression;
@@ -292,32 +291,32 @@ if ($options{'opmode'} =~ /^(-b|--print-format)$/) {
 	$fields->{'Binary'} =~ s/(.{0,980}), ?/$1,\n/g;
     }
 
-    # Generate list of formats to try
-    my @try_formats = (@cmdline_formats);
-    if (-e "$dir/debian/source/format") {
-        open(FORMAT, "<", "$dir/debian/source/format") ||
-            syserr(_g("cannot read %s"), "$dir/debian/source/format");
-        my $format = <FORMAT>;
-        chomp($format);
-        close(FORMAT);
-        push @try_formats, $format;
-    }
-    push @try_formats, @build_formats;
-    # Try all suggested formats until one is acceptable
-    foreach my $format (@try_formats) {
-        $fields->{'Format'} = $format;
-        $srcpkg->upgrade_object_type(); # Fails if format is unsupported
-	# Parse command line options
-	$srcpkg->init_options();
-	$srcpkg->parse_cmdline_options(@cmdline_options);
-        my ($res, $msg) = $srcpkg->can_build($dir);
-        last if $res;
-        info(_g("source format `%s' discarded: %s"), $format, $msg);
+    # Select the format to use
+    if (not defined $build_format) {
+	if (-e "$dir/debian/source/format") {
+	    open(FORMAT, "<", "$dir/debian/source/format") ||
+		syserr(_g("cannot read %s"), "$dir/debian/source/format");
+	    $build_format = <FORMAT>;
+	    chomp($build_format);
+	    close(FORMAT);
+	} else {
+	    $build_format = "1.0";
+	}
     }
+    $fields->{'Format'} = $build_format;
+    $srcpkg->upgrade_object_type(); # Fails if format is unsupported
+    # Parse command line options
+    $srcpkg->init_options();
+    $srcpkg->parse_cmdline_options(@cmdline_options);
+
     if ($options{'opmode'} eq "--print-format") {
 	print $fields->{'Format'} . "\n";
 	exit(0);
     }
+
+    # Verify pre-requesites are met
+    my ($res, $msg) = $srcpkg->can_build($dir);
+    error(_g("can't build with source format '%s': %s"), $build_format, $msg) unless $res;
     info(_g("using source format `%s'"), $fields->{'Format'});
 
     run_vendor_hook("before-source-build", $srcpkg);