[pacman-dev] [PATCH] test version range restrictions corner case

Dominik Fischer d.f.fischer at web.de
Mon Dec 7 20:37:09 UTC 2015


The test introduced herein illustrates a behavior that may be unexpected
to package writers.

It creates a package "pkg3" that is configured to depend on a
"dependency" which version is between 3 and 4, inclusive. Two other
packages are already present, providing "dependency" in version 2 and 5,
respectively. So, the situation looks roughly like this:

                  pkg1               pkg3                pkg2
                provides          depends on           provides
                   |            <------------>            |
version __________2____________3____________4____________5___________...

This seems to be enough to satisfy pacman when installing "pkg3". From
an iterative standpoint, this is completely logical: First, the
requirement "dependency>=3" is checked. There is a package that
satisfies this restriction, it is called "pkg2". Afterwards,
"dependency<=4" is covered in the same way by "pkg1".

Nonetheless, what a package writer intends when specifying

   depends=('dependency>=3' 'dependency<=4')

is most probably that pacman should only allow this package to be
installed when there indeed is a package present that provides a version
of "dependency" that lies _between_ 3 and 5.

Signed-off-by: Dominik Fischer <d dot f dot fischer at web dot de>
---

This behavior may be intended though. If so, this corner case should
perhaps be noted in the documentation. Please review and comment.


  test/pacman/tests/TESTS          |  1 +
  test/pacman/tests/deprange001.py | 17 +++++++++++++++++
  2 files changed, 18 insertions(+)
  create mode 100644 test/pacman/tests/deprange001.py

diff --git a/test/pacman/tests/TESTS b/test/pacman/tests/TESTS
index bee7c8e..f35ec1a 100644
--- a/test/pacman/tests/TESTS
+++ b/test/pacman/tests/TESTS
@@ -15,6 +15,7 @@ TESTS += test/pacman/tests/depconflict110.py
  TESTS += test/pacman/tests/depconflict111.py
  TESTS += test/pacman/tests/depconflict120.py
  TESTS += test/pacman/tests/dependency-cycle-fixed-by-upgrade.py
+TESTS += test/pacman/tests/deprange001.py
  TESTS += test/pacman/tests/deptest001.py
  TESTS += test/pacman/tests/dummy001.py
  TESTS += test/pacman/tests/epoch001.py
diff --git a/test/pacman/tests/deprange001.py b/test/pacman/tests/deprange001.py
new file mode 100644
index 0000000..bab52fa
--- /dev/null
+++ b/test/pacman/tests/deprange001.py
@@ -0,0 +1,17 @@
+self.description = "undetected conflict with version range"
+
+lp1 = pmpkg("pkg1")
+lp1.provides = ["dependency=2"]
+self.addpkg2db("local", lp1)
+
+lp2 = pmpkg("pkg2")
+lp2.provides = ["dependency=5"]
+self.addpkg2db("local", lp2)
+
+p = pmpkg("pkg3")
+p.depends = ["dependency>3", "dependency<4"]
+self.addpkg(p)
+
+self.args = "-U %s" % p.filename()
+self.addrule("PACMAN_RETCODE=1")
+self.addrule("!PKG_EXIST=pkg3")
-- 
2.6.3


More information about the pacman-dev mailing list