81 lines
3.1 KiB
Diff
81 lines
3.1 KiB
Diff
|
Fix smart RPM backend to handle rpm-dbpath/rpm-root properly
|
||
|
|
||
|
Don't assume that if the dbpath starts with / that it is an absolute
|
||
|
path. This matches the behaviour of rpm itself. (If the root path is
|
||
|
specified and does not start with /, rpm will prepend the root path
|
||
|
twice and fail).
|
||
|
|
||
|
Upstream-Status: Pending
|
||
|
|
||
|
Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
|
||
|
|
||
|
diff --git a/smart/backends/rpm/base.py b/smart/backends/rpm/base.py
|
||
|
index 7092332..0489e11 100644
|
||
|
--- a/smart/backends/rpm/base.py
|
||
|
+++ b/smart/backends/rpm/base.py
|
||
|
@@ -46,6 +46,12 @@ __all__ = ["RPMPackage", "RPMProvides", "RPMNameProvides", "RPMPreRequires",
|
||
|
"rpm", "getTS", "getArchScore", "getArchColor", "system_provides",
|
||
|
"collapse_libc_requires"]
|
||
|
|
||
|
+def rpm_join_dbpath(root, dbpath):
|
||
|
+ if dbpath.startswith('/') and root:
|
||
|
+ return os.path.join(root, dbpath[1:])
|
||
|
+ else:
|
||
|
+ return os.path.join(root, dbpath)
|
||
|
+
|
||
|
def getTS(new=False):
|
||
|
rpm_root = os.path.abspath(sysconf.get("rpm-root", "/"))
|
||
|
if not hasattr(getTS, "ts") or getTS.root != rpm_root:
|
||
|
@@ -56,7 +62,7 @@ def getTS(new=False):
|
||
|
#if not sysconf.get("rpm-check-signatures", False):
|
||
|
# getTS.ts.setVSFlags(rpm._RPMVSF_NOSIGNATURES)
|
||
|
rpm_dbpath = sysconf.get("rpm-dbpath", "var/lib/rpm")
|
||
|
- dbdir = os.path.join(getTS.root, rpm_dbpath)
|
||
|
+ dbdir = rpm_join_dbpath(getTS.root, rpm_dbpath)
|
||
|
if not os.path.isdir(dbdir):
|
||
|
try:
|
||
|
os.makedirs(dbdir)
|
||
|
diff --git a/smart/channels/rpm_sys.py b/smart/channels/rpm_sys.py
|
||
|
index efcb10e..b9fda27 100644
|
||
|
--- a/smart/channels/rpm_sys.py
|
||
|
+++ b/smart/channels/rpm_sys.py
|
||
|
@@ -20,7 +20,7 @@
|
||
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||
|
#
|
||
|
from smart.backends.rpm.header import RPMDBLoader
|
||
|
-from smart.backends.rpm.base import getTS
|
||
|
+from smart.backends.rpm.base import getTS, rpm_join_dbpath
|
||
|
from smart.channel import PackageChannel
|
||
|
from smart import *
|
||
|
import os
|
||
|
@@ -32,9 +32,9 @@ class RPMSysChannel(PackageChannel):
|
||
|
|
||
|
def fetch(self, fetcher, progress):
|
||
|
getTS() # Make sure the db exists.
|
||
|
- path = os.path.join(sysconf.get("rpm-root", "/"),
|
||
|
- sysconf.get("rpm-dbpath", "var/lib/rpm"),
|
||
|
- "Packages")
|
||
|
+ dbdir = rpm_join_dbpath(sysconf.get("rpm-root", "/"),
|
||
|
+ sysconf.get("rpm-dbpath", "var/lib/rpm"))
|
||
|
+ path = os.path.join(dbdir, "Packages")
|
||
|
digest = os.path.getmtime(path)
|
||
|
if digest == self._digest:
|
||
|
return True
|
||
|
diff --git a/smart/plugins/detectsys.py b/smart/plugins/detectsys.py
|
||
|
index 2cd49ad..3959d07 100644
|
||
|
--- a/smart/plugins/detectsys.py
|
||
|
+++ b/smart/plugins/detectsys.py
|
||
|
@@ -20,10 +20,11 @@
|
||
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||
|
#
|
||
|
from smart import *
|
||
|
+from smart.backends.rpm.base import rpm_join_dbpath
|
||
|
import os
|
||
|
|
||
|
def detectRPMSystem():
|
||
|
- dir = os.path.join(sysconf.get("rpm-root", "/"),
|
||
|
+ dir = rpm_join_dbpath(sysconf.get("rpm-root", "/"),
|
||
|
sysconf.get("rpm-dbpath", "var/lib/rpm"))
|
||
|
file = os.path.join(dir, "Packages")
|
||
|
if os.path.exists(file):
|