aboutsummaryrefslogtreecommitdiffstats
path: root/URPM.pm
diff options
context:
space:
mode:
authorFrancois Pons <fpons@mandriva.com>2002-06-06 15:44:27 +0000
committerFrancois Pons <fpons@mandriva.com>2002-06-06 15:44:27 +0000
commita3d672d23de228cb2955f5825869154b77a7f5e0 (patch)
tree9c516f2848644d9f33e388a315ce5042844cad19 /URPM.pm
parent507d79f646464f20a758ca8a41a3638c8ac4fc83 (diff)
downloadperl-URPM-a3d672d23de228cb2955f5825869154b77a7f5e0.tar
perl-URPM-a3d672d23de228cb2955f5825869154b77a7f5e0.tar.gz
perl-URPM-a3d672d23de228cb2955f5825869154b77a7f5e0.tar.bz2
perl-URPM-a3d672d23de228cb2955f5825869154b77a7f5e0.tar.xz
perl-URPM-a3d672d23de228cb2955f5825869154b77a7f5e0.zip
0.03-2mdk
Diffstat (limited to 'URPM.pm')
-rw-r--r--URPM.pm119
1 files changed, 70 insertions, 49 deletions
diff --git a/URPM.pm b/URPM.pm
index 5d712cf..2d6bb85 100644
--- a/URPM.pm
+++ b/URPM.pm
@@ -18,55 +18,6 @@ sub new {
}, $class;
}
-#- relocate depslist array id to use only the most recent packages,
-#- reorder info hashes to give only access to best packages.
-sub relocate_depslist {
- my ($urpm, %options) = @_;
- my $relocated_entries = 0;
-
- #- reset names hash now, will be filled after.
- $urpm->{names} = {};
-
- foreach (@{$urpm->{depslist} || []}) {
- #- remove access to info if arch is incompatible and only
- #- take into account compatible arch to examine.
- #- set names hash by prefering first better version,
- #- then better release, then better arch.
- if ($_->is_arch_compat) {
- my $p = $urpm->{names}{$_->name};
- if ($p) {
- if ($_->compare_pkg($p) > 0) {
- $urpm->{names}{$_->name} = $_;
- ++$relocated_entries;
- }
- } else {
- $urpm->{names}{$_->name} = $_;
- }
- } elsif ($_->arch ne 'src') {
- #- the package is removed, make it invisible (remove id).
- my $id = $_->set_id;
-
- #- the architecture is not compatible, this means the package is dropped.
- #- we have to remove its reference in provides.
- foreach ($_->provides) {
- delete $urpm->{provides}{$_}{$id};
- }
- }
- }
-
- #- relocate id used in depslist array, delete id if the package
- #- should NOT be used.
- #- if no entries have been relocated, we can safely avoid this computation.
- if ($relocated_entries) {
- foreach (@{$urpm->{depslist}}) {
- my $p = $urpm->{names}{$_->name} or next;
- $_->set_id($p->id);
- }
- }
-
- $relocated_entries;
-}
-
sub traverse {
my ($urpm, $callback) = @_;
@@ -127,3 +78,73 @@ sub traverse_tag {
$count;
}
+
+#- relocate depslist array id to use only the most recent packages,
+#- reorder info hashes to give only access to best packages.
+sub relocate_depslist {
+ my ($urpm, %options) = @_;
+ my $relocated_entries = 0;
+
+ #- reset names hash now, will be filled after.
+ $urpm->{names} = {};
+
+ foreach (@{$urpm->{depslist} || []}) {
+ #- remove access to info if arch is incompatible and only
+ #- take into account compatible arch to examine.
+ #- set names hash by prefering first better version,
+ #- then better release, then better arch.
+ if ($_->is_arch_compat) {
+ my $p = $urpm->{names}{$_->name};
+ if ($p) {
+ if ($_->compare_pkg($p) > 0) {
+ $urpm->{names}{$_->name} = $_;
+ ++$relocated_entries;
+ }
+ } else {
+ $urpm->{names}{$_->name} = $_;
+ }
+ } elsif ($_->arch ne 'src') {
+ #- the package is removed, make it invisible (remove id).
+ my $id = $_->set_id;
+
+ #- the architecture is not compatible, this means the package is dropped.
+ #- we have to remove its reference in provides.
+ foreach ($_->provides) {
+ delete $urpm->{provides}{$_}{$id};
+ }
+ }
+ }
+
+ #- relocate id used in depslist array, delete id if the package
+ #- should NOT be used.
+ #- if no entries have been relocated, we can safely avoid this computation.
+ if ($relocated_entries) {
+ foreach (@{$urpm->{depslist}}) {
+ my $p = $urpm->{names}{$_->name} or next;
+ $_->set_id($p->id);
+ }
+ }
+
+ $relocated_entries;
+}
+
+#- resolve requires using requested tag, keep resolution state to speed process.
+#- a requested package is marked to be installed, once done, a upgrade flag or
+#- installed flag is set according to needs of package.
+#- other required package will have required flag set along with upgrade flag or
+#- installed flag.
+#- base flag should always been installed or upgraded.
+#- the following options are recognized :
+#- check : check requires of installed packages.
+sub resolve_requires {
+ my ($urpm, $db, $state, %options);
+ my (@packages);
+
+ #- get package that need to be evaluated.
+ foreach (0 .. $#{$urpm->{depslist}}) {
+ my $pkg = $urpm->{depslist}[$_];
+ $pkg->flag_requested && !($pkg->flag_installed || $pkg->flag_upgrade) and push @packages, $_;
+ }
+ #TODO
+}
+