Gentoo Archives: gentoo-commits

From: "Michał Górny" <mgorny@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/pms-test-suite:master commit in: PMSTestSuite/pm/, PMSTestSuite/
Date: Tue, 31 May 2011 12:14:52
Message-Id: ac639401c717d43e69efc048acd9f755d9818938.mgorny@gentoo
1 commit: ac639401c717d43e69efc048acd9f755d9818938
2 Author: Michał Górny <mgorny <AT> gentoo <DOT> org>
3 AuthorDate: Tue May 31 12:12:58 2011 +0000
4 Commit: Michał Górny <mgorny <AT> gentoo <DOT> org>
5 CommitDate: Tue May 31 12:12:58 2011 +0000
6 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/pms-test-suite.git;a=commit;h=ac639401
7
8 Use GLib main loop to asynchronically call emerge.
9
10 ---
11 PMSTestSuite/pm/__init__.py | 10 ++++++++++
12 PMSTestSuite/pm/portagepm.py | 9 +++++++++
13 PMSTestSuite/testrunner.py | 18 ++++++++++++++----
14 3 files changed, 33 insertions(+), 4 deletions(-)
15
16 diff --git a/PMSTestSuite/pm/__init__.py b/PMSTestSuite/pm/__init__.py
17 index cc6d3d5..f4e6355 100644
18 --- a/PMSTestSuite/pm/__init__.py
19 +++ b/PMSTestSuite/pm/__init__.py
20 @@ -81,6 +81,16 @@ class PackageManager(object):
21 """
22 raise NotImplementedError('Please override the lookup_vardb() method.')
23
24 + # async methods which are supposed to run in background and return pids
25 + def merge_async(self, cpvs):
26 + """
27 + Run PM asynchronically to merge <cpvs>.
28 +
29 + Returns the PID of spawned process, or raises an exception if spawning
30 + one fails.
31 + """
32 + raise NotImplementedError('Please override the merge_async() method.')
33 +
34 def get_package_managers():
35 """ Return the list of supported Package Managers. """
36
37
38 diff --git a/PMSTestSuite/pm/portagepm.py b/PMSTestSuite/pm/portagepm.py
39 index d73406b..4b1e751 100644
40 --- a/PMSTestSuite/pm/portagepm.py
41 +++ b/PMSTestSuite/pm/portagepm.py
42 @@ -48,6 +48,15 @@ class PortagePM(PackageManager):
43 ret = self.call_emerge(cpvs, ['--unmerge'])
44 return ret == 0
45
46 + def spawn_emerge(self, cpvs, opts = []):
47 + p = subprocess.Popen([self.emerge_path] + opts + self.pm_options
48 + + ['=%s' % cpv for cpv in cpvs],
49 + env = {'PORTDIR_OVERLAY': ' '.join(self.repo_paths)})
50 + return p.pid
51 +
52 + def merge_async(self, cpvs):
53 + return self.spawn_emerge(cpvs)
54 +
55 _vardb = None
56 @property
57 def vardb(self):
58
59 diff --git a/PMSTestSuite/testrunner.py b/PMSTestSuite/testrunner.py
60 index 703ae31..8ac4d6e 100644
61 --- a/PMSTestSuite/testrunner.py
62 +++ b/PMSTestSuite/testrunner.py
63 @@ -1,6 +1,13 @@
64 from PMSTestSuite.ebuildgen import EbuildGenCLI
65
66 +import gobject
67 +
68 class TestRunnerCLI(EbuildGenCLI):
69 + def merge_done(self, pid, ret):
70 + print(self.pm.lookup_vardb(self.cpvs))
71 + self.ret = 0
72 + self.loop.quit()
73 +
74 def main(self, argv):
75 print('-> Generating ebuilds...')
76 ret = EbuildGenCLI.main(self, argv)
77 @@ -8,14 +15,17 @@ class TestRunnerCLI(EbuildGenCLI):
78 return ret
79
80 self.pm.append_repository(self.repository)
81 - cpvs = [t.p for t in self.test_library]
82 + self.cpvs = [t.p for t in self.test_library]
83
84 - installedcpvs = self.pm.lookup_vardb(cpvs)
85 + installedcpvs = self.pm.lookup_vardb(self.cpvs)
86 if installedcpvs:
87 print('-> Unmerging already-merged test ebuilds...')
88 self.pm.unmerge(installedcpvs)
89
90 print('-> Running PM...')
91 - self.pm.merge(cpvs)
92 + self.loop = gobject.MainLoop()
93 + gobject.child_watch_add(self.pm.merge_async(self.cpvs),
94 + self.merge_done)
95 + self.loop.run()
96
97 - return 0
98 + return self.ret