summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulian Andres Klode <jak@debian.org>2011-04-15 12:52:45 +0200
committerJulian Andres Klode <jak@debian.org>2011-04-15 12:52:45 +0200
commit1a4c9766e0b31795b5d9869c6a98c1bba8380faa (patch)
treeb4413151fc9f7e3464f5a9626e79e5c0f86659a3
parent90cf90b254e5dbe8194dc93fa8f57f891b3ea518 (diff)
* apt-pkg/policy.cc:
- Allow pinning by glob() expressions, and regular expressions surrounded by slashes (the "/" character).
-rw-r--r--apt-pkg/policy.cc15
-rw-r--r--debian/changelog5
-rw-r--r--doc/apt_preferences.5.xml43
3 files changed, 62 insertions, 1 deletions
diff --git a/apt-pkg/policy.cc b/apt-pkg/policy.cc
index 94c7fd4af..3d6ec1cdc 100644
--- a/apt-pkg/policy.cc
+++ b/apt-pkg/policy.cc
@@ -216,6 +216,21 @@ void pkgPolicy::CreatePin(pkgVersionMatch::MatchType Type,string Name,
P->Data = Data;
return;
}
+
+ // Allow pinning by wildcards
+ // TODO: Maybe we should always prefer specific pins over non-
+ // specific ones.
+ if (Name.find("*") != string::npos || Name.find("[") != string::npos
+ || Name.find("?") != string::npos || Name[0] == '/') {
+ pkgVersionMatch match(Data, Type);
+ for (pkgCache::PkgIterator P = Cache->PkgBegin();
+ P != Cache->PkgEnd(); P++) {
+ if (match.ExpressionMatches(Name, P.Name())) {
+ CreatePin(Type, P.Name(), Data, Priority);
+ }
+ }
+ return;
+ }
// Get a spot to put the pin
pkgCache::GrpIterator Grp = Cache->FindGrp(Name);
diff --git a/debian/changelog b/debian/changelog
index 15dd0c648..79bc4dea5 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,4 +1,4 @@
-apt (0.8.13.3) UNRELEASED; urgency=low
+apt (0.8.14) UNRELEASED; urgency=low
[ Julian Andres Klode ]
* apt-pkg/indexcopy.cc:
@@ -10,6 +10,9 @@ apt (0.8.13.3) UNRELEASED; urgency=low
- Do not install recommends for build-dep (Closes: #454479) (LP: #245273)
* apt-pkg/deb/deblistparser.cc:
- Handle no space before "[" in build-dependencies (LP: #72344)
+ * apt-pkg/policy.cc:
+ - Allow pinning by glob() expressions, and regular expressions
+ surrounded by slashes (the "/" character).
[ Michael Vogt ]
* mirror method:
diff --git a/doc/apt_preferences.5.xml b/doc/apt_preferences.5.xml
index 219da7cd1..55504f3e5 100644
--- a/doc/apt_preferences.5.xml
+++ b/doc/apt_preferences.5.xml
@@ -259,6 +259,49 @@ Pin-Priority: 500
</refsect2>
+<refsect2><title>Regular expressions and glob() syntax</title>
+<para>
+APT also supports pinning by glob() expressions and regular
+expressions surrounded by /. For example, the following
+example assigns the priority 500 to all packages from
+experimental where the name starts with gnome (as a glob()-like
+expression or contains the word kde (as a POSIX extended regular
+expression surrounded by slashes).
+</para>
+
+<programlisting>
+Package: gnome* /kde/
+Pin: release n=experimental
+Pin-Priority: 500
+</programlisting>
+
+<para>
+The rule for those expressions is that they can occur anywhere
+where a string can occur. Those, the following pin assigns the
+priority 990 to all packages from a release starting with karmic.
+</para>
+
+<programlisting>
+Package: *
+Pin: release n=karmic*
+Pin-Priority: 990
+</programlisting>
+
+If a regular expression occurs in a <literal>Package</literal> field,
+the behavior is the same as if this regular expression were replaced
+with a list of all package names it matches. It is undecided whether
+this will change in the future, thus you should always list wild-card
+pins first, so later specific pins override it.
+
+The pattern "<literal>*</literal>" in a Package field is not considered
+a glob() expression in itself.
+
+</refsect2>
+
+
+
+
+
<refsect2>
<title>How APT Interprets Priorities</title>