1 |
diff --git a/backends/urpmi/helpers/urpmi-dispatched-backend.pl b/backends/urpmi/helpers/urpmi-dispatched-backend.pl |
2 |
index 7e97f85..94f8b9d 100755 |
3 |
--- a/backends/urpmi/helpers/urpmi-dispatched-backend.pl |
4 |
+++ b/backends/urpmi/helpers/urpmi-dispatched-backend.pl |
5 |
@@ -422,27 +422,20 @@ sub remove_packages { |
6 |
my ($urpm, $args) = @_; |
7 |
|
8 |
my $notfound = 0; |
9 |
- my $notfound_callback = sub { |
10 |
- $notfound = 1; |
11 |
- }; |
12 |
+ my $notfound_callback = sub { $notfound = 1 }; |
13 |
|
14 |
my $urpmi_lock = urpm::lock::urpmi_db($urpm, 'exclusive', wait => 1); |
15 |
|
16 |
my $allowdeps_option = $args->[0] eq "yes" ? 1 : 0; |
17 |
my @packageidstab = split(/&/, $args->[1]); |
18 |
|
19 |
- my @names; |
20 |
- foreach (@packageidstab) { |
21 |
- my @pkg_id = split(/;/, $_); |
22 |
- push @names, $pkg_id[0]; |
23 |
- } |
24 |
+ my @names = map { (split(/;/, $_))[0] } @packageidstab; |
25 |
|
26 |
pk_print_status(PK_STATUS_ENUM_DEP_RESOLVE); |
27 |
|
28 |
- my $state = {}; |
29 |
my @breaking_pkgs; |
30 |
my @to_remove = urpm::select::find_packages_to_remove($urpm, |
31 |
- $state, |
32 |
+ {}, |
33 |
\@names, |
34 |
callback_notfound => $notfound_callback, |
35 |
callback_fuzzy => $notfound_callback, |
36 |
diff --git a/backends/urpmi/helpers/urpmi_backend/filters.pm b/backends/urpmi/helpers/urpmi_backend/filters.pm |
37 |
index 8054a5c..7cd2c49 100644 |
38 |
--- a/backends/urpmi/helpers/urpmi_backend/filters.pm |
39 |
+++ b/backends/urpmi/helpers/urpmi_backend/filters.pm |
40 |
@@ -106,9 +106,18 @@ sub filter_free { |
41 |
return 0 unless defined($media); |
42 |
|
43 |
my $medianame = $media->{name}; |
44 |
- # FIXME: matching against media name is certainly not optimal, |
45 |
- # better heuristics needed... |
46 |
- my $free = $medianame !~ /non-free/i; |
47 |
+ my $free; |
48 |
+ if ($media->{mediacfg}) { |
49 |
+ my @media_types; |
50 |
+ my ($distribconf, $media_path) = @{$media->{mediacfg}}; |
51 |
+ warn ">> (distribconf, media_path) = ($distribconf, $media_path)\n"; |
52 |
+ @media_types = split(':', $distribconf->getvalue($media_path, 'media_type')) if $distribconf; |
53 |
+ $free = member('free', @media_types); |
54 |
+ } else { |
55 |
+ # FIXME: matching against media name is certainly not optimal, |
56 |
+ # better heuristics needed... |
57 |
+ $free = $medianame !~ /non-free/i; |
58 |
+ } |
59 |
|
60 |
return 1 if $filter eq FILTER_FREE && $free; |
61 |
return 1 if $filter eq FILTER_NOT_FREE && !$free; |
62 |
diff --git a/backends/urpmi/helpers/urpmi_backend/tools.pm b/backends/urpmi/helpers/urpmi_backend/tools.pm |
63 |
index de29353..0df20b1 100644 |
64 |
--- a/backends/urpmi/helpers/urpmi_backend/tools.pm |
65 |
+++ b/backends/urpmi/helpers/urpmi_backend/tools.pm |
66 |
@@ -100,13 +100,14 @@ sub vendor() { |
67 |
|
68 |
sub get_package_id { |
69 |
my ($pkg) = @_; |
70 |
- return $pkg->name . ";" . $pkg->version . "-" . $pkg->release . ";" . $pkg->arch . vendor(); |
71 |
+ return join(';', $pkg->name, $pkg->version . "-" . $pkg->release, $pkg->arch, vendor()); |
72 |
} |
73 |
|
74 |
+# From Rpmdrake::formatting: |
75 |
sub pkg2medium { |
76 |
my ($p, $urpm) = @_; |
77 |
return if !ref $p; |
78 |
- return { name => N("None (installed)") } if !$p->id; # if installed |
79 |
+ return { name => N("None (installed)") } if !defined($p->id); # if installed |
80 |
URPM::pkg2media($urpm->{media}, $p) || undef; |
81 |
} |
82 |
|
83 |
@@ -115,7 +116,7 @@ sub fullname_to_package_id { |
84 |
my ($pkg_string) = @_; |
85 |
chomp($pkg_string); |
86 |
if ($pkg_string =~ /^(.*)-([^-]*)-([^-]*)\.([^\.]*)$/) { |
87 |
- return $1 . $2 . $3 . $4 . vendor(); |
88 |
+ return join(';', $1, $2, $3, $4, vendor()); |
89 |
} |
90 |
} |
91 |
|
92 |
@@ -160,11 +161,9 @@ sub get_installed_fullname_pkid { |
93 |
my $pkgname = $pkg->name; |
94 |
my $db = open_rpm_db(); |
95 |
my $installed_pkid; |
96 |
- $db->traverse(sub { |
97 |
+ $db->traverse_tag_find('name', $pkgname, sub { |
98 |
my ($pkg) = @_; |
99 |
- if ($pkg->name =~ /^$pkgname$/) { |
100 |
- $installed_pkid = get_package_id($pkg); |
101 |
- } |
102 |
+ $installed_pkid = get_package_id($pkg); |
103 |
}); |
104 |
return $installed_pkid; |
105 |
} |