diff options
author | Pascal Rigaux <pixel@mandriva.com> | 2008-02-25 22:11:29 +0000 |
---|---|---|
committer | Pascal Rigaux <pixel@mandriva.com> | 2008-02-25 22:11:29 +0000 |
commit | 0ca0076a09724a30337e6e7362ed25baf20d8f95 (patch) | |
tree | 4da83321c9a6cf7db6712e2a9298b8cb60977969 | |
parent | 58a5337c92999d8350964711166e969c98903cc3 (diff) | |
download | perl-URPM-0ca0076a09724a30337e6e7362ed25baf20d8f95.tar perl-URPM-0ca0076a09724a30337e6e7362ed25baf20d8f95.tar.gz perl-URPM-0ca0076a09724a30337e6e7362ed25baf20d8f95.tar.bz2 perl-URPM-0ca0076a09724a30337e6e7362ed25baf20d8f95.tar.xz perl-URPM-0ca0076a09724a30337e6e7362ed25baf20d8f95.zip |
- add filesize to synthesis, add ->filesize to get it, and add
selected_size_filesize() to compute the sum
(backport from HEAD)
-rw-r--r-- | NEWS | 3 | ||||
-rw-r--r-- | URPM.pm | 4 | ||||
-rw-r--r-- | URPM.xs | 26 | ||||
-rw-r--r-- | URPM/Resolve.pm | 23 |
4 files changed, 54 insertions, 2 deletions
@@ -1,3 +1,6 @@ +- add filesize to synthesis, add ->filesize to get it, and add + selected_size_filesize() to compute the sum + Version 2.09.1 - 17 December 2007, by Pascal "Pixel" Rigaux - suggests: @@ -625,6 +625,10 @@ The rpm's bare name. =item $package->rflags() +=item $package->filesize() + +Size of the rpm file (ie the rpm header + cpio body) + =item $package->set_flag($name, $value) =item $package->set_flag_base($value) @@ -49,6 +49,7 @@ struct s_Package { char *info; + int filesize; char *requires; char *suggests; char *obsoletes; @@ -179,6 +180,11 @@ get_int(Header header, int_32 tag) { } static int +sigsize_to_filesize(int sigsize) { + return sigsize + 440; /* 440 is the rpm header size (?) empirical, but works */ +} + +static int print_list_entry(char *buff, int sz, char *name, int_32 flags, char *evr) { int len = strlen(name); char *p = buff; @@ -809,6 +815,8 @@ pack_header(URPM__Package pkg) { } pkg->info = memcpy(malloc(p-buff), buff, p-buff); } + if (pkg->filesize == 0) + pkg->filesize = sigsize_to_filesize(get_int(pkg->h, RPMTAG_SIGSIZE)); if (pkg->requires == NULL && pkg->suggests == NULL) has_old_suggests = 0; pkg->requires = pack_list(pkg->h, RPMTAG_REQUIRENAME, RPMTAG_REQUIREFLAGS, RPMTAG_REQUIREVERSION, is_not_old_suggests); @@ -1131,6 +1139,8 @@ parse_line(AV *depslist, HV *provides, HV *obsoletes, URPM__Package pkg, char *b av_push(depslist, sv_pkg); } memset(pkg, 0, sizeof(struct s_Package)); + } else if (!strcmp(tag, "filesize")) { + pkg->filesize = atoi(data); } else if (!strcmp(tag, "requires")) { free(pkg->requires); pkg->requires = memcpy(malloc(data_len), data, data_len); } else if (!strcmp(tag, "suggests")) { @@ -1937,6 +1947,18 @@ Pkg_size(pkg) OUTPUT: RETVAL +int +Pkg_filesize(pkg) + URPM::Package pkg + CODE: + if (pkg->filesize) { + RETVAL = pkg->filesize; + } else if (pkg->h) { + RETVAL = sigsize_to_filesize(get_int(pkg->h, RPMTAG_SIGSIZE)); + } else RETVAL = 0; + OUTPUT: + RETVAL + void Pkg_group(pkg) URPM::Package pkg @@ -2454,6 +2476,10 @@ Pkg_build_info(pkg, fileno, provides_files=NULL) size = snprintf(buff, sizeof(buff), "@summary@%s\n", pkg->summary); if (size < sizeof(buff)) write_nocheck(fileno, buff, size); } + if (pkg->filesize) { + size = snprintf(buff, sizeof(buff), "@filesize@%d\n", pkg->filesize); + if (size < sizeof(buff)) write_nocheck(fileno, buff, size); + } size = snprintf(buff, sizeof(buff), "@info@%s\n", pkg->info); write_nocheck(fileno, buff, size); } else croak("no info available for package %s", diff --git a/URPM/Resolve.pm b/URPM/Resolve.pm index eb9bfef..659ed1c 100644 --- a/URPM/Resolve.pm +++ b/URPM/Resolve.pm @@ -1340,11 +1340,30 @@ sub disable_selected_and_unrequested_dependencies { #- side-effects: none sub selected_size { my ($urpm, $state) = @_; - my $size; + my ($size) = _selected_size_filesize($urpm, $state, 0); + $size; +} +#- side-effects: none +sub selected_size_filesize { + my ($urpm, $state) = @_; + _selected_size_filesize($urpm, $state, 1); +} +#- side-effects: none +sub _selected_size_filesize { + my ($urpm, $state, $compute_filesize) = @_; + my ($size, $filesize, $bad_filesize); foreach (keys %{$state->{selected} || {}}) { my $pkg = $urpm->{depslist}[$_]; $size += $pkg->size; + $compute_filesize or next; + + if (my $n = $pkg->filesize) { + $filesize += $n; + } elsif (!$bad_filesize) { + $urpm->{debug} and $urpm->{debug}("no filesize for package " . $pkg->fullname); + $bad_filesize = 1; + } } foreach (values %{$state->{rejected} || {}}) { @@ -1352,7 +1371,7 @@ sub selected_size { $size -= $_->{size}; } - $size; + $size, $bad_filesize ? 0 : $filesize; } #- compute installed flags for all packages in depslist. |