diff options
author | Pascal Rigaux <pixel@mandriva.com> | 2008-02-25 21:53:09 +0000 |
---|---|---|
committer | Pascal Rigaux <pixel@mandriva.com> | 2008-02-25 21:53:09 +0000 |
commit | c82a23ec4389874c3d662861a7545365700b3b57 (patch) | |
tree | 98488f4c371f45f5366ba54cf251564c4cbff02f | |
parent | 616362ced84d759689ed0920cb1a73fce817ad3d (diff) | |
parent | 2b6420acd4e1ca8b11f5aae8986fcd9de166c78b (diff) | |
download | perl-URPM-c82a23ec4389874c3d662861a7545365700b3b57.tar perl-URPM-c82a23ec4389874c3d662861a7545365700b3b57.tar.gz perl-URPM-c82a23ec4389874c3d662861a7545365700b3b57.tar.bz2 perl-URPM-c82a23ec4389874c3d662861a7545365700b3b57.tar.xz perl-URPM-c82a23ec4389874c3d662861a7545365700b3b57.zip |
reverting to r232566
-rw-r--r-- | NEWS | 6 | ||||
-rw-r--r-- | URPM.pm | 12 | ||||
-rw-r--r-- | URPM.xs | 74 | ||||
-rw-r--r-- | URPM/Build.pm | 7 | ||||
-rw-r--r-- | URPM/Resolve.pm | 23 | ||||
-rw-r--r-- | t/rpmdb.t | 5 |
6 files changed, 59 insertions, 68 deletions
@@ -1,9 +1,3 @@ -Version 2.09.2 - 25 Februrary 2008, by Pascal "Pixel" Rigaux - -- do not add FILENAME_TAG and FILESIZE_TAG to hdlist anymore, - deprecate ->filename and ->header_filename, - deprecate URPM::Build build_hdlist and parse_rpms_build_headers - Version 2.09.1 - 17 December 2007, by Pascal "Pixel" Rigaux - suggests: @@ -10,7 +10,7 @@ use URPM::Resolve; use URPM::Signature; our @ISA = qw(DynaLoader); -our $VERSION = '2.09.2'; +our $VERSION = '2.09.1'; URPM->bootstrap($VERSION); @@ -500,6 +500,10 @@ Writes a line of information in a synthesis file. =item $package->exclusivearchs() +=item $package->filename() + +The rpm's file name. + =item $package->files() List of files in this rpm. @@ -567,6 +571,8 @@ Return an array of human readable view of tag values. $tagid is the numerical va =item $package->group() +=item $package->header_filename() + =item $package->id() =item $package->installtid() @@ -619,10 +625,6 @@ 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) @@ -98,6 +98,9 @@ typedef struct s_Package* URPM__Package; #define FLAG_RATE_INVALID 0 +#define FILENAME_TAG 1000000 +#define FILESIZE_TAG 1000001 + #define FILTER_MODE_ALL_FILES 0 #define FILTER_MODE_UPGRADE_FILES 1 #define FILTER_MODE_CONF_FILES 2 @@ -176,11 +179,6 @@ 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; @@ -799,10 +797,16 @@ pack_header(URPM__Package pkg) { char *version = get_name(pkg->h, RPMTAG_VERSION); char *release = get_name(pkg->h, RPMTAG_RELEASE); char *arch = headerIsEntry(pkg->h, RPMTAG_SOURCERPM) ? get_name(pkg->h, RPMTAG_ARCH) : "src"; + char *filename = get_name(pkg->h, FILENAME_TAG); - p += 1 + snprintf(buff, sizeof(buff), "%s-%s-%s.%s@%d@%d@%s@%d", name, version, release, arch, - get_int(pkg->h, RPMTAG_EPOCH), get_int(pkg->h, RPMTAG_SIZE), - get_name(pkg->h, RPMTAG_GROUP), sigsize_to_filesize(get_int(pkg->h, RPMTAG_SIGSIZE))); + p += snprintf(buff, sizeof(buff), "%s-%s-%s.%s@%d@%d@%s@", name, version, release, arch, + get_int(pkg->h, RPMTAG_EPOCH), get_int(pkg->h, RPMTAG_SIZE), get_name(pkg->h, RPMTAG_GROUP)); + if (filename) snprintf(p, sizeof(buff) - (p-buff), "%s-%s-%s.%s.rpm", name, version, release, arch); + if (!filename || !strcmp(p, filename)) { + p[-1] = 0; + } else { + p = p + 1 + snprintf(p, sizeof(buff) - (p-buff), "%s", filename); + } pkg->info = memcpy(malloc(p-buff), buff, p-buff); } if (pkg->requires == NULL && pkg->suggests == NULL) @@ -1233,6 +1237,8 @@ update_header(char *filename, URPM__Package pkg, int keep_all_tags, int vsflags) basename = strrchr(filename, '/'); size = fdSize(fd); + headerAddEntry(header, FILENAME_TAG, RPM_STRING_TYPE, basename != NULL ? basename + 1 : filename, 1); + headerAddEntry(header, FILESIZE_TAG, RPM_INT32_TYPE, &size, 1); if (pkg->h && !(pkg->flag & FLAG_NO_HEADER_FREE)) headerFree(pkg->h); pkg->h = header; @@ -1931,22 +1937,6 @@ Pkg_size(pkg) OUTPUT: RETVAL -int -Pkg_filesize(pkg) - URPM::Package pkg - CODE: - if (pkg->info) { - char *s; - - if ((s = strchr(pkg->info, '@')) != NULL && (s = strchr(s+1, '@')) != NULL && (s = strchr(s+1, '@')) != NULL && (s = strchr(s+1, '@')) != NULL) { - RETVAL = atoi(s+1); - } else RETVAL = 0; - } 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 @@ -1962,34 +1952,50 @@ Pkg_group(pkg) XPUSHs(sv_2mortal(newSVpv_utf8(get_name(pkg->h, RPMTAG_GROUP), 0))); } -# deprecated void Pkg_filename(pkg) URPM::Package pkg PPCODE: if (pkg->info) { - char *eon; + char *s, *eon, *eos; if ((eon = strchr(pkg->info, '@')) != NULL) { + if ((s = strchr(eon+1, '@')) != NULL && (s = strchr(s+1, '@')) != NULL && (s = strchr(s+1, '@')) != NULL) { + eos = strchr(s+1, '@'); + XPUSHs(sv_2mortal(newSVpv(s+1, eos != NULL ? eos-s-1 : 0))); + } else { char savbuf[4]; memcpy(savbuf, eon, 4); /* there should be at least epoch and size described so (@0@0 minimum) */ memcpy(eon, ".rpm", 4); XPUSHs(sv_2mortal(newSVpv(pkg->info, eon-pkg->info+4))); memcpy(eon, savbuf, 4); + } } } else if (pkg->h) { + char *filename = get_name(pkg->h, FILENAME_TAG); + + if (filename != NULL) + XPUSHs(sv_2mortal(newSVpv(filename, 0))); } -# deprecated void Pkg_header_filename(pkg) URPM::Package pkg PPCODE: if (pkg->info) { - char *eon; + char *s, *eon, *eos; if ((eon = strchr(pkg->info, '@')) != NULL) { - XPUSHs(sv_2mortal(newSVpv(pkg->info, eon-pkg->info))); + if ((s = strchr(eon+1, '@')) != NULL && (s = strchr(s+1, '@')) != NULL && (s = strchr(s+1, '@')) != NULL) { + eos = strstr(s+1, ".rpm"); + if (eos != NULL) *eos = 0; + if (eon != NULL) *eon = 0; + XPUSHs(sv_2mortal(newSVpvf("%s:%s", pkg->info, s+1))); + if (eon != NULL) *eon = '@'; + if (eos != NULL) *eos = '.'; + } else { + XPUSHs(sv_2mortal(newSVpv(pkg->info, eon-pkg->info))); + } } } else if (pkg->h) { char buff[1024]; @@ -1998,8 +2004,16 @@ Pkg_header_filename(pkg) char *version = get_name(pkg->h, RPMTAG_VERSION); char *release = get_name(pkg->h, RPMTAG_RELEASE); char *arch = headerIsEntry(pkg->h, RPMTAG_SOURCERPM) ? get_name(pkg->h, RPMTAG_ARCH) : "src"; + char *filename = get_name(pkg->h, FILENAME_TAG); - p += snprintf(buff, sizeof(buff), "%s-%s-%s.%s", name, version, release, arch); + p += snprintf(buff, sizeof(buff), "%s-%s-%s.%s:", name, version, release, arch); + if (filename) snprintf(p, sizeof(buff) - (p-buff), "%s-%s-%s.%s.rpm", name, version, release, arch); + if (!filename || !strcmp(p, filename)) { + *--p = 0; + } else { + p += snprintf(p, sizeof(buff) - (p-buff), "%s", filename); + *(p -= 4) = 0; /* avoid .rpm */ + } XPUSHs(sv_2mortal(newSVpv(buff, p-buff))); } diff --git a/URPM/Build.pm b/URPM/Build.pm index 153bee6..f5a3aff 100644 --- a/URPM/Build.pm +++ b/URPM/Build.pm @@ -18,8 +18,6 @@ sub _get_tmp_dir () { #- callback : perl code to be called for each package read (defaults pack_header) #- clean : bool to clean cache before (default no). #- packing : bool to create info (default is weird) -# -# deprecated sub parse_rpms_build_headers { my ($urpm, %options) = @_; my ($dir, %cache, @headers); @@ -80,6 +78,7 @@ sub parse_rpms_build_headers { my $pkg = $urpm->{depslist}[$id]; $filename = $pkg->fullname; + "$filename.rpm" eq $pkg->filename or $filename .= ":$key"; unless (-s "$dir/$filename") { open my $fh, ">$dir/$filename" or die "unable to open $dir/$filename for writing\n"; @@ -403,8 +402,6 @@ sub compute_deps { #- idlist : id list of rpm to compute (defaults is start .. end) #- ratio : compression ratio (default 4). #- split : split ratio (default 400kb, see MDV::Packdrakeng). -# -# deprecated sub build_hdlist { my ($urpm, %options) = @_; my ($dir, $ratio, @idlist); @@ -434,6 +431,8 @@ sub build_hdlist { ) or die "Can't create archive"; foreach my $pkg (@{$urpm->{depslist}}[@idlist]) { my $filename = $pkg->fullname; + "$filename.rpm" ne $pkg->filename && $pkg->filename =~ m!([^/]*)\.rpm$! + and $filename .= ":$1"; -s "$dir/$filename" or die "bad header $dir/$filename\n"; $pack->add($dir, $filename); } diff --git a/URPM/Resolve.pm b/URPM/Resolve.pm index 659ed1c..eb9bfef 100644 --- a/URPM/Resolve.pm +++ b/URPM/Resolve.pm @@ -1340,30 +1340,11 @@ sub disable_selected_and_unrequested_dependencies { #- side-effects: none sub selected_size { my ($urpm, $state) = @_; - 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); + my $size; 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} || {}}) { @@ -1371,7 +1352,7 @@ sub _selected_size_filesize { $size -= $_->{size}; } - $size, $bad_filesize ? 0 : $filesize; + $size; } #- compute installed flags for all packages in depslist. @@ -5,7 +5,7 @@ use warnings ; use Test::More tests => 7; use URPM; -my ($count, @all_pkgs_extern, @all_pkgs); +my ($count, @all_pkgs_extern, %all_pkgs, @all_pkgs); my ($pkg_perl, $count_perl, $pkg_perl_extern); { my $db; @@ -19,9 +19,10 @@ my ($pkg_perl, $count_perl, $pkg_perl_extern); my ($name, $version, $release, $arch) = $pkg->fullname; #- arch is void for -pubkey- package. my $fullname = "$name-$version-$release"; - push @all_pkgs, $fullname; + $all_pkgs{$fullname}++; if ($name eq 'perl') { $pkg_perl_extern = $fullname } }); + @all_pkgs = keys %all_pkgs; $count_perl = $db->traverse_tag('name', ['perl'], sub { my ($pkg) = @_; |