~ubuntu-branches/ubuntu/karmic/sbuild/karmic-proposed

« back to all changes in this revision

Viewing changes to bin/sbuild-checkpackages

  • Committer: Bazaar Package Importer
  • Author(s): Kees Cook
  • Date: 2009-05-09 16:06:44 UTC
  • mfrom: (8.1.6 upstream) (3.1.3 squeeze)
  • Revision ID: james.westby@ubuntu.com-20090509160644-9k0fgp6c2ajcu54h
Tags: 0.58.2-1ubuntu1
* Merge from debian unstable, remaining changes:
  - bin/sbuild, lib/Sbuild/{Base,Conf,Options}.pm: add --setup-hook
    to allow pre-build modifications to underlying chroots (needed
    to adjust pockets and components in sources.list).  (debian bug
    500746).

Show diffs side-by-side

added added

removed removed

Lines of Context:
25
25
use locale;
26
26
use POSIX qw(locale_h);
27
27
use Getopt::Long;
28
 
use Sbuild qw(help_text version_text usage_error);
29
 
use Sbuild::Conf qw($package_checklist);
 
28
use Sbuild qw(help_text version_text usage_error check_packages);
 
29
use Sbuild::Conf;
30
30
use Sbuild::Utility qw(setup cleanup shutdown);
31
31
 
32
32
package main;
33
33
 
34
34
our $mode = undef;
35
35
 
 
36
my $conf = Sbuild::Conf->new();
 
37
 
36
38
GetOptions (
37
39
    "h|help" => sub { help_text("1", "sbuild-checkpackages"); },
38
40
    "V|version" => sub {version_text("sbuild-checkpackages"); },
48
50
setlocale(LC_COLLATE, "POSIX");
49
51
$ENV{'LC_COLLATE'} = "POSIX";
50
52
 
51
 
my $session = setup($chroot) or die "Chroot setup failed";
52
 
my $chroot_dir = $session->{'Location'};
53
 
my (@status, @ref, @install, @remove);
54
 
 
55
 
if (! open STATUS, "grep-status -F Status -s Package ' installed' '$chroot_dir/var/lib/dpkg/status' | awk '{print \$2}' |" ) {
56
 
    print STDERR "Can't read dpkg status file in chroot: $!\n";
57
 
    shutdown("TERM");
58
 
}
59
 
while (<STATUS>) {
60
 
    chomp;
61
 
    push @status, $_;
62
 
}
63
 
if (! close STATUS) {
64
 
    print STDERR "Error reading dpkg status file in chroot: $!\n";
65
 
    shutdown("TERM");
66
 
}
67
 
@status = sort @status;
68
 
if (!@status) {
69
 
    print STDERR "dpkg status file is empty\n";
70
 
    shutdown("TERM");
71
 
}
72
 
 
73
 
if ($mode eq "set") {
74
 
    if (! open WREF, "> $chroot_dir/$package_checklist") {
75
 
        print STDERR "Can't write reference status file $chroot_dir/$package_checklist: $!\n";
76
 
        shutdown("TERM");
77
 
    }
78
 
    foreach (@status) {
79
 
        print WREF "$_\n";
80
 
    }
81
 
    if (! close WREF) {
82
 
        print STDERR "Error writing reference status file: $!\n";
83
 
        shutdown("TERM");
84
 
    }
85
 
} else { # "list"
86
 
 
87
 
    if (! open REF, "< $chroot_dir/$package_checklist") {
88
 
        print STDERR "Can't read reference status file $chroot_dir/$package_checklist: $!\n";
89
 
        shutdown("TERM");
90
 
    }
91
 
    while (<REF>) {
92
 
        chomp;
93
 
        push @ref, $_;
94
 
    }
95
 
    if (! close REF) {
96
 
        print STDERR "Error reading reference status file: $!\n";
97
 
        shutdown("TERM");
98
 
    }
99
 
 
100
 
    @ref = sort @ref;
101
 
    if (!@ref) {
102
 
        print STDERR "Reference status file is empty\n";
103
 
        shutdown("TERM");
104
 
    }
105
 
 
106
 
    print "DELETE             ADD\n";
107
 
    print "======================================\n";
108
 
    my $i = 0;
109
 
    my $j = 0;
110
 
 
111
 
    while ($i < scalar @status && $j < scalar @ref) {
112
 
 
113
 
        my $c = $status[$i] cmp $ref[$j];
114
 
        if ($c < 0) {
115
 
            # In status, not reference; remove.
116
 
            print "$status[$i]\n";
117
 
            $i++;
118
 
        } elsif ($c > 0) {
119
 
            # In reference, not status; install.
120
 
            print "                   $ref[$j]\n";
121
 
            $j++;
122
 
        } else {
123
 
            # Identical; skip.
124
 
            $i++; $j++;
125
 
        }
126
 
    }
127
 
 
128
 
# Print any remaining elements
129
 
    while ($i < scalar @status) {
130
 
        print "$status[$i]\n";
131
 
        $i++;
132
 
    }
133
 
    while ($j < scalar @ref) {
134
 
        print "                   $ref[$j]\n";
135
 
        $j++;
136
 
    }
137
 
}
138
 
 
139
 
cleanup();
 
53
my $session = setup($chroot, $conf) or die "Chroot setup failed";
 
54
 
 
55
check_packages($session, $mode);
 
56
 
 
57
cleanup($conf);
140
58
exit 0;