summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNagy Gabor <ngaba@bibl.u-szeged.hu>2007-12-18 14:24:44 +0100
committerDan McGee <dan@archlinux.org>2007-12-19 21:48:05 +0100
commit13dd2864ca740ee7e6a6ce163c883dc24a294c87 (patch)
treeeeef3102af868b97ddc6dd0e9a6ba5387b435451
parent47f4c5a480505e5ed6a0473f4f81ddf98df5e43a (diff)
downloadpacman-13dd2864ca740ee7e6a6ce163c883dc24a294c87.tar.gz
pacman-13dd2864ca740ee7e6a6ce163c883dc24a294c87.tar.xz
PM_DEP_MOD_LT and PM_DEP_MOD_GT depmods added
You can use foo<2.0 and foo>2.0 as depend add046.py and add047.py pactests were added to check this Signed-off-by: Nagy Gabor <ngaba@bibl.u-szeged.hu> Signed-off-by: Dan McGee <dan@archlinux.org>
-rw-r--r--lib/libalpm/alpm.h4
-rw-r--r--lib/libalpm/deps.c19
-rw-r--r--pactest/tests/add046.py14
-rw-r--r--pactest/tests/add047.py14
4 files changed, 49 insertions, 2 deletions
diff --git a/lib/libalpm/alpm.h b/lib/libalpm/alpm.h
index f64796cb..3a484be3 100644
--- a/lib/libalpm/alpm.h
+++ b/lib/libalpm/alpm.h
@@ -369,7 +369,9 @@ typedef enum _pmdepmod_t {
PM_DEP_MOD_ANY = 1,
PM_DEP_MOD_EQ,
PM_DEP_MOD_GE,
- PM_DEP_MOD_LE
+ PM_DEP_MOD_LE,
+ PM_DEP_MOD_GT,
+ PM_DEP_MOD_LT
} pmdepmod_t;
pmdepend_t *alpm_splitdep(const char *depstring);
diff --git a/lib/libalpm/deps.c b/lib/libalpm/deps.c
index 1603f99f..8d77fd46 100644
--- a/lib/libalpm/deps.c
+++ b/lib/libalpm/deps.c
@@ -310,6 +310,8 @@ static int dep_vercmp(const char *version1, pmdepmod_t mod,
case PM_DEP_MOD_EQ: equal = (cmp == 0); break;
case PM_DEP_MOD_GE: equal = (cmp >= 0); break;
case PM_DEP_MOD_LE: equal = (cmp <= 0); break;
+ case PM_DEP_MOD_LT: equal = (cmp < 0); break;
+ case PM_DEP_MOD_GT: equal = (cmp > 0); break;
default: equal = 1; break;
}
}
@@ -374,10 +376,19 @@ pmdepend_t SYMEXPORT *alpm_splitdep(const char *depstring)
depend->mod = PM_DEP_MOD_LE;
*ptr = '\0';
ptr += 2;
- } else if((ptr = strstr(newstr, "="))) {
+ } else if((ptr = strstr(newstr, "="))) { /* Note: we must do =,<,> checks after <=, >= checks */
depend->mod = PM_DEP_MOD_EQ;
*ptr = '\0';
ptr += 1;
+ } else if((ptr = strstr(newstr, "<"))) {
+ depend->mod = PM_DEP_MOD_LT;
+ *ptr = '\0';
+ ptr += 1;
+ } else if((ptr = strstr(newstr, ">"))) {
+ depend->mod = PM_DEP_MOD_GT;
+ *ptr = '\0';
+ ptr += 1;
+
} else {
/* no version specified - copy in the name and return it */
depend->mod = PM_DEP_MOD_ANY;
@@ -684,6 +695,12 @@ char SYMEXPORT *alpm_dep_get_string(const pmdepend_t *dep)
case PM_DEP_MOD_EQ:
opr = "=";
break;
+ case PM_DEP_MOD_LT:
+ opr = "<";
+ break;
+ case PM_DEP_MOD_GT:
+ opr = ">";
+ break;
default:
opr = "";
break;
diff --git a/pactest/tests/add046.py b/pactest/tests/add046.py
new file mode 100644
index 00000000..5f967cbe
--- /dev/null
+++ b/pactest/tests/add046.py
@@ -0,0 +1,14 @@
+self.description = "pkg2<2.0 dependency (satisfy)"
+
+p = pmpkg("pkg1")
+p.depends = ["pkg2<2.0"]
+self.addpkg(p)
+
+lp = pmpkg("pkg2", "1.9b-3")
+self.addpkg2db("local", lp)
+
+self.args = "-A %s" % p.filename()
+
+self.addrule("PACMAN_RETCODE=0")
+self.addrule("PKG_EXIST=pkg1")
+self.addrule("PKG_EXIST=pkg2")
diff --git a/pactest/tests/add047.py b/pactest/tests/add047.py
new file mode 100644
index 00000000..153364a5
--- /dev/null
+++ b/pactest/tests/add047.py
@@ -0,0 +1,14 @@
+self.description = "pkg2<2.0 dependency (not satisfy)"
+
+p = pmpkg("pkg1")
+p.depends = ["pkg2<2.0"]
+self.addpkg(p)
+
+lp = pmpkg("pkg2", "2.0-3")
+self.addpkg2db("local", lp)
+
+self.args = "-A %s" % p.filename()
+
+self.addrule("PACMAN_RETCODE=1")
+self.addrule("!PKG_EXIST=pkg1")
+self.addrule("PKG_EXIST=pkg2")