From: Andreas Barth Date: Wed, 30 Mar 2011 21:17:18 +0000 (+0000) Subject: remove old ways to import packages, sources and quinn-diff X-Git-Url: https://git.donarmstrong.com/?p=wannabuild.git;a=commitdiff_plain;h=a18353a2d27fd3ada6813b1337d0ab38f374eb44 remove old ways to import packages, sources and quinn-diff --- diff --git a/bin/wanna-build b/bin/wanna-build index 8787c71..ddea1db 100755 --- a/bin/wanna-build +++ b/bin/wanna-build @@ -146,13 +146,7 @@ my %options = forget => { mode => "forget" }, 'forget-user' => { mode => 'forget-user' }, update => { mode => "set-update" }, - #"merge-quinn" => { mode => "merge-quinn" }, - #"merge-partial-quinn" => { mode => "merge-partial-quinn" }, - #"merge-packages" => { mode => "merge-packages" }, - #"merge-sources" => { mode => "merge-sources" }, "pretend-avail" => { short => "p", mode => "pretend-avail" }, - #"merge-all" => { mode => "merge-all" }, - #"merge-all-secondary" => { mode => "merge-all-secondary" }, "merge-v3" => { mode => "merge-v3" }, info => { short => "i", mode => "info" }, 'binNMU' => { mode => 'set-binary-nmu', arg => \$binNMUver, @@ -461,80 +455,10 @@ sub process { forget_packages( @ARGV ); last SWITCH; }; - /^merge-partial-quinn/ && do { - die "This operation is restricted to admin users\n" - if (defined @conf::admin_users and - !isin( $real_user, @conf::admin_users)); - lock_table(); - parse_quinn_diff(1); - last SWITCH; - }; - /^merge-quinn/ && do { - die "This operation is restricted to admin users\n" - if (defined @conf::admin_users and - !isin( $real_user, @conf::admin_users)); - lock_table(); - parse_quinn_diff(0); - last SWITCH; - }; - /^merge-packages/ && do { - die "This operation is restricted to admin users\n" - if (defined @conf::admin_users and - !isin( $real_user, @conf::admin_users)); - lock_table(); - parse_packages(0); - last SWITCH; - }; - /^merge-sources/ && do { - die "This operation is restricted to admin users\n" - if (defined @conf::admin_users and - !isin( $real_user, @conf::admin_users)); - lock_table(); - parse_sources(0); - last SWITCH; - }; /^pretend-avail/ && do { pretend_avail( @ARGV ); last SWITCH; }; - /^merge-all$/ && do { - die "This operation is restricted to admin users\n" - if (defined @conf::admin_users and - !isin( $real_user, @conf::admin_users)); - lock_table(); - my @ARGS = @ARGV; - @ARGV = ( $ARGS[0] ); - my $pkgs = parse_packages(0); - @ARGV = ( $ARGS[1] ); - parse_quinn_diff(0); - @ARGV = ( $ARGS[2] ); - my $srcs = parse_sources(1); - call_edos_depcheck( {'arch' => $arch, 'pkgs' => ($ARGS[0]), 'srcs' => $srcs }); - last SWITCH; - }; - /^merge-all-secondary/ && do { - die "This operation is restricted to admin users\n" - if (defined @conf::admin_users and - !isin( $real_user, @conf::admin_users)); - # This is in case the chroot has multiple unrelated - # dist, for instance unstable and experimental. - # This is not for stable and proposed-updates. - # The second packages file contains a combination - # of all Packages files known to the buildd, the - # first only for the current dist. - lock_table(); - my @ARGS = @ARGV; - @ARGV = ( $ARGS[0] ); - my $pkgs = parse_packages(0); - @ARGV = ( $ARGS[3] ); - $pkgs = parse_packages(1); - @ARGV = ( $ARGS[1] ); - parse_quinn_diff(0); - @ARGV = ( $ARGS[2] ); - my $srcs = parse_sources(1); - call_edos_depcheck( {'arch' => $arch, 'pkgs' => ($ARGS[3]), 'srcs' => $srcs }); - last SWITCH; - }; /^merge-v3/ && do { die "This operation is restricted to admin users\n" if (defined @conf::admin_users and !isin( $real_user, @conf::admin_users) and !$simulate); @@ -1357,222 +1281,6 @@ sub set_one_update { } -sub parse_sources { - my %pkgs; - my %srcver; - my $name; - my $full = shift; - - my $db = get_all_source_info(); - - local($/) = ""; # read in paragraph mode - while( <> ) { - my( $version, $arch, $section, $priority, $builddep, $buildconf, $binaries ); - s/\s*$//m; - /^Package:\s*(\S+)$/mi and $name = $1; - /^Version:\s*(\S+)$/mi and $version = $1; - /^Architecture:\s*(\S+)$/mi and $arch = $1; - /^Section:\s*(\S+)$/mi and $section = $1; - /^Priority:\s*(\S+)$/mi and $priority = $1; - /^Build-Depends:\s*(.*)$/mi and $builddep = $1; - /^Build-Conflicts:\s*(.*)$/mi and $buildconf = $1; - /^Binary:\s*(.*)$/mi and $binaries = $1; - - next if (defined $srcver{$name} and version_less( $version, $srcver{$name} )); - $srcver{$name} = $version; - - $pkgs{$name}{'ver'} = $version; - $pkgs{$name}{'bin'} = $binaries; - $pkgs{$name}{'dep'} = $builddep; - $pkgs{$name}{'conf'} = $buildconf; - my $pkg = $db->{$name}; - - if (defined $pkg) { - my $change = 0; - - if ($arch eq "all" && !version_less( $version, $pkg->{'version'} )) { - # package is now Arch: all, delete it from db - change_state( \$pkg, 'deleted' ); - log_ta( $pkg, "--merge-sources" ); - print "$name ($pkg->{'version'}): deleted ". - "from database, because now Arch: all\n" - if $verbose; - del_source_info($name); - delete $db->{$name}; - next; - } - - # The "Version" should always be the source version -- - # not a possible binNMU version number. - $pkg->{'version'} = $version, $change++ - if ($pkg->{'state'} eq 'Installed' and - !version_eq( $pkg->{'version'}, $version)); - # Always update priority and section, if available - $pkg->{'priority'} = $priority, $change++ - if defined $priority and (not defined($pkg->{'priority'}) or $pkg->{'priority'} ne $priority); - - $pkg->{'section'} = $section, $change++ - if defined $section and (not defined($pkg->{'section'}) or $pkg->{'section'} ne $section); - - update_source_info($pkg) if $change; - } - } - # Now that we only have the latest source version, build the list - # of binary packages from the Sources point of view - foreach $name (keys %pkgs) { - foreach my $bin (split( /\s*,\s*/, $pkgs{$name}{'bin'} ) ) { - $merge_binsrc{$bin} = $name; - } - } - # remove installed packages that no longer have source available - # or binaries installed - foreach $name (keys %$db) { - next if $name =~ /^_/; - my $pkg = $db->{$name}; - if (not defined($pkgs{$name})) { - change_state( \$pkg, 'deleted' ); - log_ta( $pkg, "--merge-sources" ); - print "$name ($pkg->{'version'}): ". - "deleted from database, because ". - "not in Sources anymore\n" - if $verbose; - del_source_info($name); - delete $db->{$name}; - } else { - next if !isin( $pkg->{'state'}, qw(Installed) ); - if ($full && not defined $merge_srcvers{$name}) { - change_state( \$pkg, 'deleted' ); - log_ta( $pkg, "--merge-sources" ); - print "$name ($pkg->{'version'}): ". - "deleted from database, because ". - "binaries don't exist anymore\n" - if $verbose; - del_source_info($name); - delete $db->{$name}; - } elsif ($full && version_less( $merge_srcvers{$name}, $pkg->{'version'})) { - print "$name ($pkg->{'version'}): ". - "package is Installed but binaries are from ". - $merge_srcvers{$name}. "\n" - if $verbose; - } - } - } - return \%pkgs; -} - -# This function looks through a Packages file and sets the state of -# packages to 'Installed' -sub parse_packages { - my $depwait_only = shift; - my $installed; - - my $pkgs = get_all_source_info(); - local($/) = ""; # read in paragraph mode - while( <> ) { - my( $name, $version, $depends, $source, $sourcev, $architecture, $provides, $binaryv, $binnmu ); - s/\s*$//m; - /^Package:\s*(\S+)$/mi and $name = $1; - /^Version:\s*(\S+)$/mi and $version = $1; - /^Depends:\s*(.*)$/mi and $depends = $1; - /^Source:\s*(\S+)(\s*\((\S+)\))?$/mi and ($source,$sourcev) = ($1, $3); - /^Architecture:\s*(\S+)$/mi and $architecture = $1; - /^Provides:\s*(.*)$/mi and $provides = $1; - next if !$name || !$version; - next if ($arch ne $architecture and $architecture ne "all"); - next if (defined ($installed->{$name}) and $installed->{$name}{'version'} ne "" and - version_lesseq( $version, $installed->{$name}{'version'} )); - $installed->{$name}{'version'} = $version; - next if $depwait_only; - $installed->{$name}{'depends'} = $depends; - $installed->{$name}{'all'} = 1 if $architecture eq "all"; - undef $installed->{$name}{'Provider'}; - $installed->{$name}{'Source'} = $source ? $source : $name; - if ($provides) { - foreach (split( /\s*,\s*/, $provides )) { - if (not defined ($installed->{$_})) { - $installed->{$_}{'version'} = ""; - $installed->{$_}{'Provider'} = $name; - } - } - } - if ( $version =~ /\+b(\d+)$/ ) { - $binnmu = $1; - } - $version = $sourcev if $sourcev; - $binaryv = $version; - $binaryv =~ s/\+b\d+$//; - $installed->{$name}{'Sourcev'} = $sourcev ? $sourcev : $binaryv; - $binaryv .= "+b$binnmu" if defined($binnmu); - - next if $architecture ne $arch; - $name = $source if $source; - next if defined($merge_srcvers{$name}) and $merge_srcvers{$name} eq $version; - $merge_srcvers{$name} = $version; - - my $pkg = $pkgs->{$name}; - - if (defined $pkg) { - if (isin( $pkg->{'state'}, qw(Not-For-Us)) || - (isin($pkg->{'state'}, qw(Installed)) && - version_lesseq($binaryv, $pkg->{'installed_version'}))) { - print "Skipping $name because State == $pkg->{'state'}\n" - if $verbose >= 2; - next; - } - if ($pkg->{'binary_nmu_version'} ) { - my $nmuver = binNMU_version($pkg->{'version'}, $pkg->{'binary_nmu_version'}); - if (version_less( $binaryv, $nmuver )) { - print "Skipping $name ($version) because have newer ". - "version ($nmuver) in db.\n" - if $verbose >= 2; - next; - } - } elsif (version_less($version, $pkg->{'version'})) { - print "Skipping $name ($version) because have newer ". - "version ($pkg->{'version'}) in db.\n" - if $verbose >= 2; - next; - } - - if (!pkg_version_eq($pkg, $version) && - $pkg->{'state'} ne "Installed") { - warn "Warning: $name: newer version than expected appeared ". - "in archive ($version vs. $pkg->{'version'})\n"; - delete $pkg->{'builder'}; - } - - if (!isin( $pkg->{'state'}, qw(Uploaded) )) { - warn "Warning: Package $name was not in uploaded state ". - "before (but in '$pkg->{'state'}').\n"; - delete $pkg->{'builder'}; - delete $pkg->{'depends'}; - } - } else { - $pkg = {}; - $pkg->{'version'} = $version; - } - - change_state( \$pkg, 'Installed' ); - $pkg->{'package'} = $name; - $pkg->{'installed_version'} = $binaryv; - if (defined $pkg->{'permbuildpri'}) { - $pkg->{'buildpri'} = $pkg->{'permbuildpri'}; - } else { - delete $pkg->{'buildpri'}; - } - $pkg->{'version'} = $version - if version_less( $pkg->{'version'}, $version); - delete $pkg->{'binary_nmu_version'}; - delete $pkg->{'binary_nmu_changelog'}; - log_ta( $pkg, "--merge-packages" ); - update_source_info($pkg); - print "$name ($version) is up-to-date now.\n" if $verbose; - } - - check_dep_wait( "--merge-packages", $installed ); - return $installed; -} - sub pretend_avail { my ($package, $name, $version, $installed); @@ -1650,191 +1358,6 @@ sub check_dep_wait { } } -# This function accepts quinn-diff output (either from a file named on -# the command line, or on stdin) and sets the packages named there to -# state 'Needs-Build'. -sub parse_quinn_diff { - my $partial = shift; - my %quinn_pkgs; - my $dubious = ""; - - my $pkgs = get_all_source_info(); - - while( <> ) { - my $change = 0; - next if !m,^([-\w\d/]*)/ # section - ([-\w\d.+]+)_ # package name - ([\w\d:.~+-]+)\.dsc\s* # version - \[([^:]*): # priority - ([^]]+)\]\s*$,x; # rest of notes - my($section,$name,$version,$priority,$notes) = ($1, $2, $3, $4, $5); - $quinn_pkgs{$name}++; - $section ||= "unknown"; - $priority ||= "unknown"; - $priority = "unknown" if $priority eq "-"; - $priority = "standard" if ($name eq "debian-installer"); - - my $pkg = $pkgs->{$name}; - - # Always update section and priority. - if (defined($pkg)) { - - $pkg->{'section'} = $section, $change++ if not defined - $pkg->{'section'} or $section ne "unknown"; - $pkg->{'priority'} = $priority, $change++ if not defined - $pkg->{'priority'} or $priority ne "unknown"; - } - - if (defined($pkg) && - $pkg->{'state'} =~ /^Dep-Wait/ && - version_less( $pkg->{'version'}, $version )) { - change_state( \$pkg, 'Dep-Wait' ); - $pkg->{'version'} = $version; - delete $pkg->{'binary_nmu_version'}; - delete $pkg->{'binary_nmu_changelog'}; - log_ta( $pkg, "--merge-quinn" ); - $change++; - print "$name ($version) still waiting for dependencies.\n" - if $verbose; - } - elsif (defined($pkg) && - $pkg->{'state'} =~ /-Removed$/ && - version_eq($pkg->{'version'}, $version)) { - # reinstantiate a package that has been removed earlier - # (probably due to a quinn-diff malfunction...) - my $newstate = $pkg->{'state'}; - $newstate =~ s/-Removed$//; - change_state( \$pkg, $newstate ); - $pkg->{'version'} = $version; - $pkg->{'notes'} = $notes; - log_ta( $pkg, "--merge-quinn" ); - $change++; - print "$name ($version) reinstantiated to $newstate.\n" - if $verbose; - } - elsif (defined($pkg) && - $pkg->{'state'} eq "Not-For-Us" && - version_less( $pkg->{'version'}, $version )) { - # for Not-For-Us packages just update the version etc., but - # keep the state - change_state( \$pkg, "Not-For-Us" ); - $pkg->{'package'} = $name; - $pkg->{'version'} = $version; - $pkg->{'notes'} = $notes; - delete $pkg->{'builder'}; - log_ta( $pkg, "--merge-quinn" ); - $change++; - print "$name ($version) still Not-For-Us.\n" if $verbose; - } - elsif (!defined($pkg) || - $pkg->{'state'} ne "Not-For-Us" && - (version_less( $pkg->{'version'}, $version ) || - ($pkg->{'state'} eq "Installed" && version_less($pkg->{'installed_version'}, $version)))) { - - if (defined( $pkg->{'state'} ) && isin( $pkg->{'state'}, qw(Building Built Build-Attempted))) { - send_mail( $pkg->{'builder'}, - "new version of $name (dist=$distribution)", - "As far as I'm informed, you're currently ". - "building the package $name\n". - "in version $pkg->{'version'}.\n\n". - "Now there's a new source version $version. ". - "If you haven't finished\n". - "compiling $name yet, you can stop it to ". - "save some work.\n". - "Just to inform you...\n". - "(This is an automated message)\n" ); - print "$name: new version ($version) while building ". - "$pkg->{'version'} -- sending mail ". - "to builder ($pkg->{'builder'})\n" - if $verbose; - } - change_state( \$pkg, 'Needs-Build' ); - $pkg->{'package'} = $name; - $pkg->{'version'} = $version; - $pkg->{'section'} = $section; - $pkg->{'priority'} = $priority; - $pkg->{'notes'} = $notes; - delete $pkg->{'builder'}; - delete $pkg->{'binary_nmu_version'}; - delete $pkg->{'binary_nmu_changelog'}; - log_ta( $pkg, "--merge-quinn" ); - $new_vers{$name}++; - $change++; - print "$name ($version) needs rebuilding now.\n" if $verbose; - } - elsif (defined($pkg) && - !version_eq( $pkg->{'version'}, $version ) && - isin( $pkg->{'state'}, qw(Installed Not-For-Us) )) { - print "$name: skipping because version in db ". - "($pkg->{'version'}) is >> than ". - "what quinn-diff says ($version) ". - "(state is $pkg->{'state'})\n" - if $verbose; - $dubious .= "$pkg->{'state'}: ". - "db ${name}_$pkg->{'version'} >> ". - "quinn $version\n" if !$partial; - } - elsif ($verbose >= 2) { - if ($pkg->{'state'} eq "Not-For-Us") { - print "Skipping $name because State == ". - "$pkg->{'state'}\n"; - } - elsif (!version_less($pkg->{'version'}, $version)) { - print "Skipping $name because version in db ". - "($pkg->{'version'}) is >= than ". - "what quinn-diff says ($version)\n"; - } - } - update_source_info($pkg) if $change; - } - - if ($dubious) { - send_mail( $conf::db_maint, - "Dubious versions in " . table_name() . " " - . $distribution . " table", - "The following packages have a newer version in the ". - "wanna-build database\n". - "than what quinn-diff says, and this is strange for ". - "their state\n". - "It could be caused by a lame mirror, or the version ". - "in the database\n". - "is wrong.\n\n". - $dubious ); - } - - # Now re-check the DB for packages in states Needs-Build, Failed, - # Dep-Wait or BD-Uninstallable and remove them if they're not listed - # anymore by quinn-diff. - if ( !$partial ) { - my $name; - my $db = get_all_source_info(); - foreach $name (keys %$db) { - next if $name =~ /^_/; - my $pkg = $db->{$name}; - next if defined $pkg->{'binary_nmu_version'}; - next if !isin( $pkg->{'state'}, - qw(Needs-Build Building Built Build-Attempted Uploaded Failed Dep-Wait BD-Uninstallable) ); - my $virtual_delete = $pkg->{'state'} eq 'Failed'; - - if (!$quinn_pkgs{$name}) { - change_state( \$pkg, $virtual_delete ? - $pkg->{'state'}."-Removed" : - 'deleted' ); - log_ta( $pkg, "--merge-quinn" ); - print "$name ($pkg->{'version'}): ". - ($virtual_delete ? "(virtually) " : "") . "deleted ". - "from database, because not in quinn-diff anymore\n" - if $verbose; - if ($virtual_delete) { - update_source_info($pkg); - } else { - del_source_info($name); - } - } - } - } -} - # for sorting priorities and sections BEGIN { @@ -2750,8 +2273,6 @@ Options: BD-Uninstallable, until the installability of its Build-Dependencies were verified. This happens at each call of --merge-all, usually every 15 minutes. - --merge-quinn: Merge quinn-diff output into database. - --merge-packages: Merge Packages files into database. --pretend-avail: Pretend that given packages are available now and give free packages waiting for them -i SRC_PKG, --info SRC_PKG: Show information for source package