Przeglądaj źródła

Drop Dpkg::Fields and convert everything to Dpkg::Control::Fields

Raphaël Hertzog 17 lat temu
rodzic
commit
47919c5e51

+ 0 - 46
scripts/Dpkg/Fields.pm

@@ -1,46 +0,0 @@
-package Dpkg::Fields;
-
-use strict;
-use warnings;
-
-use base qw(Exporter);
-use Dpkg::Gettext;
-use Dpkg::ErrorHandling;
-use Dpkg::Control::Fields;
-
-our @EXPORT_OK = qw(capit unknown %control_src_fields %control_pkg_fields
-    $control_src_field_regex $control_pkg_field_regex);
-our %EXPORT_TAGS = ('list' => [qw(%control_src_fields %control_pkg_fields
-			$control_src_field_regex $control_pkg_field_regex)]);
-
-# Some variables (list of fields)
-our %control_src_fields;
-our %control_pkg_fields;
-$control_src_fields{$_} = 1 foreach (qw(Bugs Dm-Upload-Allowed
-    Homepage Origin Maintainer Priority Section Source Standards-Version
-    Uploaders Vcs-Browser Vcs-Arch Vcs-Bzr Vcs-Cvs Vcs-Darcs Vcs-Git Vcs-Hg
-    Vcs-Mtn Vcs-Svn));
-$control_src_fields{$_} = 1 foreach (field_list_src_dep());
-$control_pkg_fields{$_} = 1 foreach (qw(Architecture Bugs Description Essential
-    Homepage Installer-Menu-Item Kernel-Version Package Package-Type
-    Priority Section Subarchitecture Tag Multi-Arch));
-$control_pkg_fields{$_} = 1 foreach (field_list_pkg_dep());
-
-our $control_src_field_regex = "(?:" . join("|", keys %control_src_fields) . ")";
-our $control_pkg_field_regex = "(?:" . join("|", keys %control_pkg_fields) . ")";
-
-# Some functions
-sub capit {
-    my @pieces = map { ucfirst(lc) } split /-/, $_[0];
-    return join '-', @pieces;
-}
-
-sub unknown($$)
-{
-    my ($field, $desc) = @_;
-
-    warning(_g("unknown information field '%s' in input data in %s"),
-            $field, $desc);
-}
-
-1;

+ 0 - 1
scripts/Makefile.am

@@ -103,7 +103,6 @@ nobase_dist_perllib_DATA = \
 	Dpkg/Deps.pm \
 	Dpkg/ErrorHandling.pm \
 	Dpkg/Exit.pm \
-	Dpkg/Fields.pm \
 	Dpkg/Gettext.pm \
 	Dpkg/IPC.pm \
 	Dpkg/Path.pm \

+ 7 - 19
scripts/dpkg-genchanges.pl

@@ -11,9 +11,9 @@ use Dpkg::Gettext;
 use Dpkg::Checksums;
 use Dpkg::ErrorHandling;
 use Dpkg::Arch qw(get_host_arch debarch_eq debarch_is);
-use Dpkg::Fields qw(:list unknown);
 use Dpkg::Compression;
 use Dpkg::Control::Info;
+use Dpkg::Control::Fields;
 use Dpkg::Control;
 use Dpkg::Substvars;
 use Dpkg::Vars;
@@ -258,14 +258,8 @@ foreach $_ (keys %{$src_fields}) {
 	set_source_package($v);
     } elsif (m/^Section$|^Priority$/i) {
 	$sourcedefault{$_} = $v;
-    } elsif (m/^Maintainer$/i) {
-	$fields->{$_} = $v;
-    } elsif (s/^X[BS]*C[BS]*-//i) { # Include XC-* fields
-	$fields->{$_} = $v;
-    } elsif (m/^X[BS]+-/i || m/^$control_src_field_regex$/i) {
-	# Silently ignore valid fields
     } else {
-	unknown($_, _g('general section of control info file'));
+        field_transfer_single($src_fields, $fields);
     }
 }
 
@@ -306,8 +300,6 @@ foreach my $pkg ($control->get_packages()) {
 	    $f2seccf{$_} = $v foreach (@f);
 	} elsif (m/^Priority$/) {
 	    $f2pricf{$_} = $v foreach (@f);
-	} elsif (s/^X[BS]*C[BS]*-//i) { # Include XC-* fields
-	    $fields->{$_} = $v;
 	} elsif (m/^Architecture$/) {
 	    if (grep(debarch_is($host_arch, $_), split(/\s+/, $v))
 		and ($include & ARCH_DEP)) {
@@ -316,10 +308,10 @@ foreach my $pkg ($control->get_packages()) {
 		$v = '';
 	    }
 	    push(@archvalues,$v) unless !$v || $archadded{$v}++;
-	} elsif (m/^$control_pkg_field_regex$/ || m/^X[BS]+-/i) {
-	    # Silently ignore valid fields
+        } elsif (m/^Description$/) {
+            # Description in changes is computed, do not copy this field
 	} else {
-	    unknown($_, _g("package's section of control info file"));
+            field_transfer_single($pkg, $fields);
 	}
     }
 }
@@ -331,12 +323,8 @@ foreach $_ (keys %{$changelog}) {
 	set_source_package($v);
     } elsif (m/^Maintainer$/i) {
 	$fields->{"Changed-By"} = $v;
-    } elsif (m/^(Version|Changes|Urgency|Distribution|Date|Closes)$/i) {
-	$fields->{$_} = $v;
-    } elsif (s/^X[BS]*C[BS]*-//i) {
-	$fields->{$_} = $v;
-    } elsif (!m/^X[BS]+-/i) {
-	unknown($_, _g("parsed version of changelog"));
+    } else {
+        field_transfer_single($changelog, $fields);
     }
 }
 

+ 12 - 26
scripts/dpkg-gencontrol.pl

@@ -19,7 +19,6 @@ use Dpkg::Changelog qw(parse_changelog);
 
 textdomain("dpkg-dev");
 
-my @pkg_dep_fields = field_list_pkg_dep();
 
 my $controlfile = 'debian/control';
 my $changelogfile = 'debian/changelog';
@@ -142,29 +141,20 @@ if (defined($oppackage)) {
     $pkg = $control->get_pkg_by_idx(1);
 }
 
-my %pkg_dep_fields = map { $_ => 1 } @pkg_dep_fields;
-
 # Scan source package
 my $src_fields = $control->get_source();
 foreach $_ (keys %{$src_fields}) {
-    my $v = $src_fields->{$_};
-    if (m/^(Origin|Bugs|Maintainer|Section|Priority|Homepage)$/) {
-	$fields->{$_} = $v;
-    } elsif (m/^Source$/) {
-	set_source_package($v);
-    } elsif (s/^X[CS]*B[CS]*-//i) { # Include XB-* fields
-	$fields->{$_} = $v;
-    } elsif (m/^X[CS]+-/i || m/^$control_src_field_regex$/i) {
-	# Silently ignore valid fields
+    if (m/^Source$/) {
+	set_source_package($src_fields->{$_});
     } else {
-	unknown($_, _g('general section of control info file'));
+        field_transfer_single($src_fields, $fields);
     }
 }
 
 # Scan binary package
 foreach $_ (keys %{$pkg}) {
     my $v = $pkg->{$_};
-    if (exists($pkg_dep_fields{$_})) {
+    if (field_get_dep_type($_)) {
 	# Delay the parsing until later
     } elsif (m/^Architecture$/) {
 	my $host_arch = get_host_arch();
@@ -185,12 +175,8 @@ foreach $_ (keys %{$pkg}) {
 		      $host_arch, "@archlist");
 	    $fields->{$_} = $host_arch;
 	}
-    } elsif (m/^$control_pkg_field_regex$/) {
-	$fields->{$_} = $v;
-    } elsif (s/^X[CS]*B[CS]*-//i) { # Include XB-* fields
-	$fields->{$_} = $v;
-    } elsif (!m/^X[CS]+-/i) {
-	unknown($_, _g("package's section of control info file"));
+    } else {
+        field_transfer_single($pkg, $fields);
     }
 }
 
@@ -203,11 +189,11 @@ foreach $_ (keys %{$changelog}) {
     } elsif (m/^Version$/) {
 	$sourceversion = $v;
 	$fields->{$_} = $v unless defined($forceversion);
-    } elsif (m/^(Maintainer|Changes|Urgency|Distribution|Date|Closes)$/) {
-    } elsif (s/^X[CS]*B[CS]*-//i) {
-	$fields->{$_} = $v;
-    } elsif (!m/^X[CS]+-/i) {
-	unknown($_, _g("parsed version of changelog"));
+    } elsif (m/^Maintainer$/) {
+        # That field must not be copied from changelog even if it's
+        # allowed in the binary package control information
+    } else {
+        field_transfer_single($changelog, $fields);
     }
 }
 
@@ -233,7 +219,7 @@ if (exists $pkg->{"Provides"}) {
 }
 
 my (@seen_deps);
-foreach my $field (@pkg_dep_fields) {
+foreach my $field (field_list_pkg_dep()) {
     if (exists $pkg->{$field}) {
 	my $dep;
 	my $field_value = $substvars->substvars($pkg->{$field});

+ 7 - 20
scripts/dpkg-source.pl

@@ -9,7 +9,6 @@ use Dpkg::Gettext;
 use Dpkg::ErrorHandling;
 use Dpkg::Arch qw(debarch_eq);
 use Dpkg::Deps;
-use Dpkg::Fields qw(:list unknown);
 use Dpkg::Compression;
 use Dpkg::Control::Info;
 use Dpkg::Control::Fields;
@@ -163,10 +162,6 @@ if ($options{'opmode'} eq 'build') {
 	if (m/^Source$/i) {
 	    set_source_package($v);
 	    $fields->{$_} = $v;
-	} elsif (m/^(Standards-Version|Origin|Maintainer|Homepage)$/i ||
-		 m/^Dm-Upload-Allowed$/i ||
-		 m/^Vcs-(Browser|Arch|Bzr|Cvs|Darcs|Git|Hg|Mtn|Svn)$/i) {
-	    $fields->{$_} = $v;
 	} elsif (m/^Uploaders$/i) {
 	    ($fields->{$_} = $v) =~ s/[\r\n]//g; # Merge in a single-line
 	} elsif (m/^Build-(Depends|Conflicts)(-Indep)?$/i) {
@@ -178,12 +173,8 @@ if ($options{'opmode'} eq 'build') {
 	    $dep->simplify_deps($facts);
 	    $dep->sort() if $type eq 'union';
 	    $fields->{$_} = $dep->dump();
-	} elsif (s/^X[BC]*S[BC]*-//i) { # Include XS-* fields
-	    $fields->{$_} = $v;
-	} elsif (m/^$control_src_field_regex$/i || m/^X[BC]+-/i) {
-	    # Silently ignore valid fields
 	} else {
-	    unknown($_, _g('general section of control info file'));
+            field_transfer_single($src_fields, $fields);
 	}
     }
 
@@ -211,12 +202,10 @@ if ($options{'opmode'} eq 'build') {
                         push(@sourcearch, $a) unless $archadded{$a}++;
                     }
                 }
-            } elsif (s/^X[BC]*S[BC]*-//i) { # Include XS-* fields
-                $fields->{$_} = $v;
-            } elsif (m/^$control_pkg_field_regex$/ ||
-                     m/^X[BC]+-/i) { # Silently ignore valid fields
+            } elsif (m/^Homepage$/) {
+                # Do not overwrite the same field from the source entry
             } else {
-                unknown($_, _g("package's section of control info file"));
+                field_transfer_single($pkg, $fields);
             }
 	}
     }
@@ -236,12 +225,10 @@ if ($options{'opmode'} eq 'build') {
 	} elsif (m/^Version$/) {
 	    check_version($v, 1);
 	    $fields->{$_} = $v;
-	} elsif (s/^X[BS]*C[BS]*-//i) {
-	    $fields->{$_} = $v;
-	} elsif (m/^(Maintainer|Changes|Urgency|Distribution|Date|Closes)$/i ||
-		 m/^X[BS]+-/i) {
+	} elsif (m/^Maintainer$/i) {
+            # Do not replace the field coming from the source entry
 	} else {
-	    unknown($_, _g("parsed version of changelog"));
+            field_transfer_single($changelog, $fields);
 	}
     }
     

+ 0 - 1
scripts/po/POTFILES.in

@@ -25,7 +25,6 @@ scripts/Dpkg/Control/Hash.pm
 scripts/Dpkg/Control/Types.pm
 scripts/Dpkg/Deps.pm
 scripts/Dpkg/ErrorHandling.pm
-scripts/Dpkg/Fields.pm
 scripts/Dpkg/IPC.pm
 scripts/Dpkg/Shlibs.pm
 scripts/Dpkg/Shlibs/Objdump.pm