]> git.donarmstrong.com Git - wannabuild.git/blobdiff - bin/wanna-build
Add option to merge a second Packages
[wannabuild.git] / bin / wanna-build
index 2e4a014cf59259735f76ff1e79ba4df9710f5db0..b059531363e19e236a7c70472f2dc2a2d0e50246 100755 (executable)
@@ -118,6 +118,7 @@ my %options =
         "merge-sources" => { mode => "merge-sources" },
         "pretend-avail" => { short => "p", mode => "pretend-avail" },
         "merge-all"     => { mode => "merge-all" },
+        "merge-all-overlay" => { mode => "merge-all-overlay" },
         info                   => { short => "i", mode => "info" },
         'binNMU' => { mode => 'set-binary-nmu', arg => \$binNMUver, 
                             code => sub { die "Invalid binNMU version: $binNMUver\n"
@@ -396,7 +397,7 @@ sub process {
                        pretend_avail( @ARGV );
                        last SWITCH;
                };
-               /^merge-all/ && do {
+               /^merge-all$/ && do {
                        die "This operation is restricted to admin users\n"
                                if (defined @conf::admin_users and
                                    !isin( $real_user, @conf::admin_users));
@@ -411,6 +412,21 @@ sub process {
                        call_edos_depcheck( $ARGS[0], $srcs );
                        last SWITCH;
                };
+               /^merge-all-overlay/ && 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();
+                       @ARGV = ( $ARGS[1] );
+                       parse_quinn_diff(0);
+                       @ARGV = ( $ARGS[2] );
+                       my $srcs = parse_sources(1);
+                       call_edos_depcheck( $ARGS[3], $srcs );
+                       last SWITCH;
+               };
                /^import/ && do {
                        die "This operation is restricted to admin users\n"
                                if (defined @conf::admin_users and
@@ -1162,7 +1178,7 @@ sub parse_sources {
        my $name;
        my $full = shift;
 
-       my $pkgs = get_all_source_info();
+       my $db = get_all_source_info();
 
        local($/) = ""; # read in paragraph mode
        while( <> ) {
@@ -1184,7 +1200,7 @@ sub parse_sources {
                $pkgs{$name}{'bin'} = $binaries;
                $pkgs{$name}{'dep'} = $builddep;
                $pkgs{$name}{'conf'} = $buildconf;
-               my $pkg = $pkgs->{$name};
+               my $pkg = $db->{$name};
 
                if (defined $pkg) {
                        my $change = 0;
@@ -1197,6 +1213,7 @@ sub parse_sources {
                                          "from database, because now Arch: all\n"
                                                  if $verbose;
                                del_source_info($name);
+                               delete $db->{$name};
                                next;
                        }
 
@@ -1224,7 +1241,6 @@ sub parse_sources {
         }
        # remove installed packages that no longer have source available
        # or binaries installed
-        my $db = get_all_source_info();
         foreach $name (keys %$db) {
                next if $name =~ /^_/;
                my $pkg = $db->{$name};
@@ -1236,6 +1252,7 @@ sub parse_sources {
                                  "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}) {
@@ -1246,6 +1263,7 @@ sub parse_sources {
                                       "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 ".
@@ -2502,7 +2520,7 @@ sub get_all_source_info {
        }
 
        if ($options{list_min_age} < 0) {
-               $q .= ' AND age(state_change::timestamp) < ? days ';
+               $q .= ' AND age(state_change::timestamp) < ? ';
                push @args, -$options{list_min_age} . " days";
        }