[Yum-devel] [PATCH 3/3] Fix installonly installs and "broken" rpmdbv stuff from tracebacks
Tim Lauridsen
tim.lauridsen at gmail.com
Mon Sep 27 04:40:12 UTC 2010
On Fri, Sep 24, 2010 at 4:21 PM, James Antill <james at and.org> wrote:
> ---
> test/merge-history-transactions-tests.py | 71
> +++++++++++++++++++++++++++++-
> yum/history.py | 23 +++-------
> 2 files changed, 76 insertions(+), 18 deletions(-)
>
> diff --git a/test/merge-history-transactions-tests.py
> b/test/merge-history-transactions-tests.py
> index 96fc625..569ba8d 100644
> --- a/test/merge-history-transactions-tests.py
> +++ b/test/merge-history-transactions-tests.py
> @@ -509,9 +509,9 @@ class MergeHistTransTests(unittest.TestCase):
> self.assertEquals(pkgs[3], opkg3)
> self.assertEquals(pkgs[3].state, opkg3.state)
>
> - def testInRmMerge1(self, xstate='Install'):
> + def testInRmMerge1(self, xstate='Install', estate='Erase'):
> npkg1 = self._pkg_new('foo', state=xstate)
> - npkg2 = self._pkg_new('foo', state='Erase')
> + npkg2 = self._pkg_new('foo', state=estate)
> npkg3 = self._pkg_new('bar', version='6', state='True-Install')
>
> trans = []
> @@ -525,6 +525,36 @@ class MergeHistTransTests(unittest.TestCase):
> self.assertEquals(pkgs[0], npkg3)
> self.assertEquals(pkgs[0].state, npkg3.state)
>
> + def testInRmMerge2(self, xstate='Install'):
> + self.testInRmMerge1(xstate, 'Obsoleted')
> +
> + def testInRmInonlyMerge1(self, xstate='True-Install', estate='Erase'):
> + npkg1 = self._pkg_new('foo', state=xstate)
> + npkg2 = self._pkg_new('foo', version='2', state=xstate)
> + npkg3 = self._pkg_new('foo', version='3', state=xstate)
> + npkg4 = self._pkg_new('foo', state=estate)
> + npkg5 = self._pkg_new('foo', version='2', state=estate)
> + npkg6 = self._pkg_new('foo', version='3', state=estate)
> + npkg9 = self._pkg_new('bar', version='6', state=xstate)
> +
> + trans = []
> + trans.append(self._trans_new([npkg1]))
> + trans.append(self._trans_new([npkg2]))
> + trans.append(self._trans_new([npkg3]))
> + trans.append(self._trans_new([npkg4]))
> + trans.append(self._trans_new([npkg5]))
> + trans.append(self._trans_new([npkg6]))
> + trans.append(self._trans_new([npkg9]))
> + merged = self._merge_new(trans)
> + self.assertMergedMain(merged, trans)
> + pkgs = merged.trans_data
> + self.assertEquals(len(pkgs), 1)
> + self.assertEquals(pkgs[0], npkg9)
> + self.assertEquals(pkgs[0].state, npkg9.state)
> +
> + def testInRmInonlyMerge2(self, xstate='True-Install'):
> + self.testInRmInonlyMerge1(xstate, 'Obsoleted')
> +
> def testUpRmMerge1(self, xstate='Update'):
> npkg1 = self._pkg_new('foo')
> opkg2 = self._pkg_new('bar', version='4', state='Updated')
> @@ -664,6 +694,37 @@ class MergeHistTransTests(unittest.TestCase):
> def testUpRmInuMerge2(self, xstate='Update', ystate='Install'):
> self.testUpRmInuMerge1(xstate, ystate, 'Obsoleted')
>
> + def testBrokenUpMerge1(self, xstate='Update', estate='Erase'):
> + # This is "broken", so as long as we don't die it's all good.
> + # The below test basically documents what we do.
> + opkg1 = self._pkg_new('foo', version='1', state='Updated')
> + npkg1 = self._pkg_new('foo', version='2', state=xstate)
> + opkg2 = self._pkg_new('foo', version='11', state='Updated')
> + npkg2 = self._pkg_new('foo', version='21', state=xstate)
> + opkg3 = self._pkg_new('foo', version='110', state='Updated')
> + npkg3 = self._pkg_new('foo', version='210', state=xstate)
> + npkg4 = self._pkg_new('foo', version='2', state=estate)
> + npkg5 = self._pkg_new('foo', version='21', state=estate)
> + npkg6 = self._pkg_new('foo', version='210', state=estate)
> +
> + trans = []
> + trans.append(self._trans_new([opkg1, npkg1]))
> + trans.append(self._trans_new([opkg2, npkg2]))
> + trans.append(self._trans_new([opkg3, npkg3]))
> + trans.append(self._trans_new([npkg4]))
> + trans.append(self._trans_new([npkg5]))
> + trans.append(self._trans_new([npkg6]))
> + merged = self._merge_new(trans)
> + self.assertMergedMain(merged, trans)
> + pkgs = merged.trans_data
> + self.assertEquals(len(pkgs), 3)
> + self.assertEquals(pkgs[0], opkg1)
> + self.assertEquals(pkgs[0].state, 'Updated')
> + self.assertEquals(pkgs[1], opkg2)
> + self.assertEquals(pkgs[1].state, 'Updated')
> + self.assertEquals(pkgs[2], opkg3)
> + self.assertEquals(pkgs[2].state, estate)
> +
> # Obsoleting is the _painful_ one because it really should be a state,
> but
> # an attribute. So "Obsoleting" can be any of:
> # Install*, Reinstall, Update, Downgrade
> @@ -697,6 +758,12 @@ class MergeHistTransTests(unittest.TestCase):
> self.testDownUpMerge5(xstate='Obsoleting')
> def testObsIRM1(self):
> self.testInRmMerge1(xstate='Obsoleting')
> + def testObsIRM2(self):
> + self.testInRmMerge2(xstate='Obsoleting')
> + def testObsIRMM1(self):
> + self.testInRmInonlyMerge1(xstate='Obsoleting')
> + def testObsIRMM2(self):
> + self.testInRmInonlyMerge1(xstate='Obsoleting')
> def testObsURM1(self):
> self.testUpRmMerge1(xstate='Obsoleting')
> def testObsURM2(self):
> diff --git a/yum/history.py b/yum/history.py
> index eda0dd3..f1c287e 100644
> --- a/yum/history.py
> +++ b/yum/history.py
> @@ -320,10 +320,14 @@ class
> YumMergedHistoryTransaction(YumHistoryTransaction):
> self._move_pkg(sk, nstate, npkgtup2pkg, npkgstate2pkg)
> def _del1_n(pkg):
> del npkgtup2pkg[pkg.pkgtup]
> - del npkgstate2pkg[self._p2sk(pkg)]
> + key = self._p2sk(pkg)
> + if key in npkgstate2pkg: # For broken rpmdbv's and installonly
> + del npkgstate2pkg[key]
> def _del1_f(pkg):
> del fpkgtup2pkg[pkg.pkgtup]
> - del fpkgstate2pkg[self._p2sk(pkg)]
> + key = self._p2sk(pkg)
> + if key in fpkgstate2pkg: # For broken rpmdbv's and installonly
> + del fpkgstate2pkg[key]
> def _del2(fpkg, npkg):
> assert fpkg.pkgtup == npkg.pkgtup
> _del1_f(fpkg)
> @@ -458,20 +462,7 @@ class
> YumMergedHistoryTransaction(YumHistoryTransaction):
> fpkgtup2pkg[x] = npkgtup2pkg[x]
> for x in npkgstate2pkg:
> fpkgstate2pkg[x] = npkgstate2pkg[x]
> - if True:
> - return sorted(fpkgstate2pkg.values())
> -
> - # This just dumps "everything", and is thus. pretty crappy
> - ret = []
> - filt = set()
> - for obj in self._merged_objs:
> - for pkg in obj.trans_data:
> - key = (pkg.state, pkg.pkgtup)
> - if key in filt:
> - continue
> - filt.add(key)
> - ret.append(pkg)
> - return sorted(ret)
> + return sorted(fpkgtup2pkg.values())
>
> def _getErrors(self):
> ret = []
> --
> 1.7.2.3
>
> _______________________________________________
> Yum-devel mailing list
> Yum-devel at lists.baseurl.org
> http://lists.baseurl.org/mailman/listinfo/yum-devel
>
ACK
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.baseurl.org/pipermail/yum-devel/attachments/20100927/1479430b/attachment-0001.html>
More information about the Yum-devel
mailing list