python-smartpm: use md5 as the digest for rpm_sys channel

Use md5 sum instead of mtime as the "digest" method for rpm_sys channel.
The digest is used to determine if the channel has been updated. It was
found out that mtime was not a reliable digest. On some systems mtime
of the rpm db does not get updated after every transaction if transactions
(smart install / remove commands) are fired in quick succession. As a
consequence smartpm cache and rpm db get out of sync.

[YOCTO #10244]

(From OE-Core rev: e7267b4e78461e71a1175f93e2eb5e90272c2b47)

Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Markus Lehtonen 2016-09-14 11:46:06 +03:00 committed by Richard Purdie
parent 3f95a21c71
commit edc92ea8de
2 changed files with 39 additions and 0 deletions

View File

@ -0,0 +1,38 @@
channels/rpm_sys: use md5sum instead of mtime as the digest
Use the internal getFileDigest() function (which defaults to md5) instead of
mtime for getting the file digest. On some systems mtime proved to be
unreliable because of delayed update. This caused smart to miss rpm db updates
and thus get its understanding of installed packages out of sync.
Upstream-Status: Pending
Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
---
smart/channels/rpm_sys.py | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/smart/channels/rpm_sys.py b/smart/channels/rpm_sys.py
index b9fda27..6f1fe94 100644
--- a/smart/channels/rpm_sys.py
+++ b/smart/channels/rpm_sys.py
@@ -22,6 +22,7 @@
from smart.backends.rpm.header import RPMDBLoader
from smart.backends.rpm.base import getTS, rpm_join_dbpath
from smart.channel import PackageChannel
+from smart.util.filetools import getFileDigest
from smart import *
import os
@@ -35,7 +36,7 @@ class RPMSysChannel(PackageChannel):
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)
+ digest = getFileDigest(path)
if digest == self._digest:
return True
self.removeLoaders()
--
2.6.6

View File

@ -26,6 +26,7 @@ SRC_URI = "\
file://smart-locale.patch \
file://smartpm-rpm5-support-check-signatures.patch \
file://smart-add-deugging-when-targetpath-is-empty.patch \
file://channels-rpm_sys-use-md5sum-instead-of-mtime-as-the-.patch \
"
SRCREV = "407a7eca766431257dcd1da15175cc36a1bb22d0"