aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPascal Rigaux <pixel@mandriva.com>2008-02-25 21:53:09 +0000
committerPascal Rigaux <pixel@mandriva.com>2008-02-25 21:53:09 +0000
commitc82a23ec4389874c3d662861a7545365700b3b57 (patch)
tree98488f4c371f45f5366ba54cf251564c4cbff02f
parent616362ced84d759689ed0920cb1a73fce817ad3d (diff)
parent2b6420acd4e1ca8b11f5aae8986fcd9de166c78b (diff)
downloadperl-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--NEWS6
-rw-r--r--URPM.pm12
-rw-r--r--URPM.xs74
-rw-r--r--URPM/Build.pm7
-rw-r--r--URPM/Resolve.pm23
-rw-r--r--t/rpmdb.t5
6 files changed, 59 insertions, 68 deletions
diff --git a/NEWS b/NEWS
index d3ece45..7478649 100644
--- a/NEWS
+++ b/NEWS
@@ -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:
diff --git a/URPM.pm b/URPM.pm
index efe2413..4cbb884 100644
--- a/URPM.pm
+++ b/URPM.pm
@@ -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)
diff --git a/URPM.xs b/URPM.xs
index 79939bf..409b277 100644
--- a/URPM.xs
+++ b/URPM.xs
@@ -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.
diff --git a/t/rpmdb.t b/t/rpmdb.t
index b263013..512ce10 100644
--- a/t/rpmdb.t
+++ b/t/rpmdb.t
@@ -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) = @_;