Zac Medico [Mon, 14 Jul 2008 06:48:10 +0000 (06:48 -0000)]
Call prepare_build_dirs() prior to pkg_preinst so that logging works
properly.
svn path=/main/trunk/; revision=11046
Zac Medico [Mon, 14 Jul 2008 06:38:30 +0000 (06:38 -0000)]
* Fix doebuild so "returnpid" works for preinst and postinst.
* Add async support for pkg_prerm and pkg_postrm.
* Add missing "treetype" parameter to dblink constructor calls.
* Fix SubProcess._wait() to check self.returncode _after_ calling
the scheduler.
svn path=/main/trunk/; revision=11045
Zac Medico [Mon, 14 Jul 2008 03:47:47 +0000 (03:47 -0000)]
Add async execution support for pkg_preinst and pkg_postinst. This allows the
scheduler's poll loop to run so that other parallel tasks aren't starved for
output handling while pkg_preinst and pkg_postinst are executing.
svn path=/main/trunk/; revision=11044
Zac Medico [Sun, 13 Jul 2008 23:25:23 +0000 (23:25 -0000)]
Remove redundant failed_packages check from Scheduler._main_loop() since
it's now handled inside the _schedule() call.
svn path=/main/trunk/; revision=11043
Zac Medico [Sun, 13 Jul 2008 22:13:52 +0000 (22:13 -0000)]
Ensure that that Scheduler._main_loop() doesn't return before the merge
queue is empty.
svn path=/main/trunk/; revision=11042
Zac Medico [Sun, 13 Jul 2008 13:38:24 +0000 (13:38 -0000)]
Remove all traces of the "poll" parameter for the PollScheduler constructor
since it was only used by can_poll_pty().
svn path=/main/trunk/; revision=11040
Zac Medico [Sun, 13 Jul 2008 13:24:39 +0000 (13:24 -0000)]
* Since can_poll_pty() is unsafe due to he possibility of the poll() call
blocking forever, replace it with a simpler test on /dev/null that's
derived from a test in a glib2 configure script.
* Remove PtyReaderTestCase since it has the same problem as can_poll_pty().
svn path=/main/trunk/; revision=11039
Zac Medico [Sun, 13 Jul 2008 11:54:13 +0000 (11:54 -0000)]
In can_poll_tty(), direct bash's stderr into the pty since we don't want
so see any error message it generates (due to PipeReader closing it's
end of the pty). The error message is irrelevant since all we want to
know is whether or not the data is successfully transmitted through the
pty.
svn path=/main/trunk/; revision=11037
Zac Medico [Sun, 13 Jul 2008 07:34:06 +0000 (07:34 -0000)]
Changes to pym/_emerge/__init__.py from the previous commit weren't meant
to be committed yet.
svn path=/main/trunk/; revision=11035
Zac Medico [Sun, 13 Jul 2008 07:30:43 +0000 (07:30 -0000)]
Fix broken binpkg path comparison in in binarytree.inject() so that duplicate
entries are correctly from the Packages index.
svn path=/main/trunk/; revision=11034
Zac Medico [Sun, 13 Jul 2008 05:29:35 +0000 (05:29 -0000)]
In order to avoid having BlockerDB instantiate a new FakeVartree for each
merge, add a FakeVartree.sync() method and so that the same FakeVartree
can be reused. Package counters and timestamps are used to validate package
instances during each sync() call.
svn path=/main/trunk/; revision=11033
Zac Medico [Sun, 13 Jul 2008 04:30:06 +0000 (04:30 -0000)]
Fix Scheduler._schedule_tasks() so that it never schedules a task when a
package has already failed.
svn path=/main/trunk/; revision=11032
Zac Medico [Sun, 13 Jul 2008 01:10:45 +0000 (01:10 -0000)]
Decrement the job count prior to merging a given package (after it's been
built or extracted). This will allow additional jobs to spawn sooner in
some cases when there may be idle resources.
svn path=/main/trunk/; revision=11031
Zac Medico [Sat, 12 Jul 2008 23:45:29 +0000 (23:45 -0000)]
* Wrap calls to PollScheduler._schedule_tasks() with a _schedule() method
that automatically returns early from any recursive calls that the
_schedule_tasks() call might trigger. This makes _schedule() safe to call from
inside exit listeners.
* Call _schedule() inside Scheduler._job_exit() to trigger a new job when
possible.
* Fix SequentialTaskQueue._task_exit() to avoid a potential KeyError if the
task had already been removed from self.running_tasks for some reason.
svn path=/main/trunk/; revision=11030
Zac Medico [Sat, 12 Jul 2008 23:19:12 +0000 (23:19 -0000)]
Rename PollScheduler._schedule() to _schedule_wait().
svn path=/main/trunk/; revision=11029
Zac Medico [Sat, 12 Jul 2008 22:54:35 +0000 (22:54 -0000)]
Remember to close file descriptors before returning early from can_poll_pty().
svn path=/main/trunk/; revision=11028
Zac Medico [Sat, 12 Jul 2008 11:52:40 +0000 (11:52 -0000)]
Add missing self.wait() calls when tasks return unsuccessfully.
svn path=/main/trunk/; revision=11027
Zac Medico [Sat, 12 Jul 2008 11:36:41 +0000 (11:36 -0000)]
Set self._mergelist inside Scheduler._calc_resume_list() since it needs to
be set when calling _set_digraph().
svn path=/main/trunk/; revision=11026
Zac Medico [Sat, 12 Jul 2008 10:17:55 +0000 (10:17 -0000)]
Implement a runtime test that checks whether it's possible to use poll() to
read data from a pty device. The test only runs the first time that the
can_poll_pty() function is called (currently happens when the first
PollScheduler instance is created). The test is known to fail on Darwin and
we're not sure how many other kernels might have a similar problem, this
runtime test allows us to avoid having to maintain special cases for various
kernels.
svn path=/main/trunk/; revision=11025
Zac Medico [Sat, 12 Jul 2008 08:43:29 +0000 (08:43 -0000)]
Split out a portage._create_pty_or_pipe() function to avoid duplicate code.
svn path=/main/trunk/; revision=11024
Zac Medico [Sat, 12 Jul 2008 07:32:55 +0000 (07:32 -0000)]
Derive a PtyReaderTestCase from PipeReaderTestCase. This test is expected to
fail on some operating systems such as Darwin that do not support poll() on
pty devices.
svn path=/main/trunk/; revision=11023
Zac Medico [Sat, 12 Jul 2008 06:22:26 +0000 (06:22 -0000)]
Create a test case for the poll loop which uses the loop to read data from a
pipe and assert that the data written to the pipe is identical to the data
read from the pipe. In order to implement this test, several useful classes
have been added:
* PipeReader
Reads output from one or more files and saves it in memory,
for retrieval via the getvalue() method. This is driven by
the scheduler's poll() loop, so it runs entirely within the
current process.
* QueueScheduler
Add instances of SequentialTaskQueue and then call run().
The run() method returns when no tasks remain.
* TaskScheduler
A simple way to handle scheduling of AsynchrousTask instances. Simply
add tasks and call run(). The run() method returns when no tasks remain.
svn path=/main/trunk/; revision=11022
Zac Medico [Sat, 12 Jul 2008 01:58:23 +0000 (01:58 -0000)]
* Add a digraph.get() method, analogous to dict.get(), used to simplify
Scheduler._pkg().
* Define digraph.__contains__ for containment tests via the "in" operator.
svn path=/main/trunk/; revision=11021
Zac Medico [Sat, 12 Jul 2008 00:03:01 +0000 (00:03 -0000)]
For subclasses of Task, explicitly assign __hash__ = Task.__hash__ for
compatibility with python-2.6_beta. Thanks to Arfrever for reporting.
svn path=/main/trunk/; revision=11020
Zac Medico [Fri, 11 Jul 2008 22:40:26 +0000 (22:40 -0000)]
Fix SpawnProcess.start() to return early and notify exit listeners if the
spawn call fails.
svn path=/main/trunk/; revision=11019
Zac Medico [Fri, 11 Jul 2008 21:28:15 +0000 (21:28 -0000)]
Fix a few typos found with pyflakes. Thanks to Cardoe for reporting.
svn path=/main/trunk/; revision=11018
Zac Medico [Fri, 11 Jul 2008 06:02:40 +0000 (06:02 -0000)]
Copy INHERITED/_eclasses_ handling from portdbapi._metadata_callback() to
portdbapi.aux_get() since it's still needed there or else aux_get won't
properly return INHERITED.
svn path=/main/trunk/; revision=11016
Zac Medico [Fri, 11 Jul 2008 05:12:00 +0000 (05:12 -0000)]
Call settings.reset() in EbuildMetadataPhase.start() since that's what
portdbapi does too before generating metadata, and without it, a previous
CATEGORY can leak into the ebuild env and corrupt it (breaks lots of packages
that reference $CATEGORY).
svn path=/main/trunk/; revision=11015
Zac Medico [Fri, 11 Jul 2008 04:16:17 +0000 (04:16 -0000)]
Document the new --jobs and --load-average options for parallelization.
svn path=/main/trunk/; revision=11014
Zac Medico [Fri, 11 Jul 2008 02:38:35 +0000 (02:38 -0000)]
Refactor and simplify the main task scheduling and poll loops:
* Make output handlers unregister themselves and call wait() to notify
exit listeners immediately. This makes the exit listeners more useful
for scheduling tasks. This makes the poll loop nice an clean because
it just calls the handlers and then the handlers can do the scheduling
when necessary.
* Make SequentialTaskQueue.add() and addFront() trigger scheduling
internally, so that it's more of a chain reaction than something that has
to be done explicitly.
svn path=/main/trunk/; revision=11013
Zac Medico [Thu, 10 Jul 2008 15:00:17 +0000 (15:00 -0000)]
Add support for parallel --regen, using the existing --jobs and --load-average
options:
* Split out a PollLoop base class from Scheduler and derive a MetadataRegen
class to handle parallel scheduling for --regen.
* Add pordbapi._metadata_process() and _metadata_callback() methods to
implement asynchronous metadata generation. One method returns an
EbuildMetadataPhase instance to encapsulate the async task. The other
method is called to save the metadata when the process completes
successfully. These methods share code with aux_get to avoid duplicate
code.
svn path=/main/trunk/; revision=11012
Zac Medico [Thu, 10 Jul 2008 10:33:03 +0000 (10:33 -0000)]
When a package replaces another one, add the corresponding uninstall task
for the replaced package to Scheduler._completed_tasks so that it's properly
accounted for in _dependent_on_scheduled_merges().
svn path=/main/trunk/; revision=11011
Zac Medico [Thu, 10 Jul 2008 09:08:39 +0000 (09:08 -0000)]
Bug #231382 - If the open() call in getconfig() raises an unexpected IOError,
write a message to stderr showing the exact call that failed, including the
path of the file, in order to aid in debugging.
svn path=/main/trunk/; revision=11010
Zac Medico [Thu, 10 Jul 2008 04:41:27 +0000 (04:41 -0000)]
Make digestcheck() skip the "checking ebuild checksums" part when fetching in
the background.
svn path=/main/trunk/; revision=11009
Zac Medico [Thu, 10 Jul 2008 03:40:39 +0000 (03:40 -0000)]
* Fix AsynchronousTask._wait_hook() to prevent potential recursive calls
triggered when calling exit listeners.
* Make SequentialTaskQueue use exit listeners to trigger scheduling as
soon as a task exits. This makes it possible for the queues to
automatically schedule new tasks while scheduler remains in it's
poll() loop.
svn path=/main/trunk/; revision=11008
Zac Medico [Thu, 10 Jul 2008 01:24:43 +0000 (01:24 -0000)]
* Handle errno.ECHILD and errno.ESRCH from waitpid() and kill() calls. These
errors commonly occur when ^C is used to kill emerge.
* Remove spawned pids from portage.process.spawned_pids immediately in order
to avoid a race condition for removing it.
svn path=/main/trunk/; revision=11007
Zac Medico [Thu, 10 Jul 2008 00:58:08 +0000 (00:58 -0000)]
Fix Scheduler._is_restart_necessary() to return False if the replacement
version of portage is the same exact version as the currently running
instance.
svn path=/main/trunk/; revision=11006
Zac Medico [Wed, 9 Jul 2008 23:53:10 +0000 (23:53 -0000)]
Like in Binpkg, cancel or wait for the prefetcher in EbuildBuild.
svn path=/main/trunk/; revision=11005
Zac Medico [Wed, 9 Jul 2008 23:20:32 +0000 (23:20 -0000)]
Bug #231358 - Fix 'NameError: global name 'p' is not defined' in
getmaskingstatus() that's triggered by a conditional in LICENSE.
svn path=/main/trunk/; revision=11004
Zac Medico [Wed, 9 Jul 2008 21:51:25 +0000 (21:51 -0000)]
For parallel-fetch prefetchers, pass fetchonly=1 into the EbuildFetcher
constructor.
svn path=/main/trunk/; revision=11003
Zac Medico [Wed, 9 Jul 2008 21:39:39 +0000 (21:39 -0000)]
Use the EbuildFetcher class to implement async fetch for the EbuildBuild
class. When in background mode, fetch output is logged to emerge-fetch.log.
This solves a problem with calling doebuild(returnpid=1) and then doebuild
calling fetch() synchronously. In that case, doebuild would return an int
if fetch() failed (including when running pkg_nofetch), which would lead
to a TypeError since doebuild(returnpid=1) is supposed to return a list
containing a spawned pid.
svn path=/main/trunk/; revision=11002
Zac Medico [Wed, 9 Jul 2008 12:33:08 +0000 (12:33 -0000)]
* Unify the scheduler's "build" and "extract" queues into a single
"jobs" queue.
* Add support for logging fetches to /var/log/emerge-fetch.log when
--jobs is enabled. Previously this log was only used for
the parallel-fetch feature but now it's also used for --jobs.
The scheduler's "prefetch" queue has been renamed to "fetch" since
it's not exclusively used for parallel-fetch anymore.
* Pass the "background" parameter from Binpkg in to the BinpkgFetcher
instance, to send output to emerge-fetch.log instead of stdout.
svn path=/main/trunk/; revision=10999
Zac Medico [Wed, 9 Jul 2008 12:03:53 +0000 (12:03 -0000)]
Fix SubProcess._poll to handle a missing pid gracefully.
svn path=/main/trunk/; revision=10998
Zac Medico [Wed, 9 Jul 2008 02:15:19 +0000 (02:15 -0000)]
Fix Scheduler._choose_pkg() to perform uninstallation actions (due to
blockers) in the correct order when building in parallel.
svn path=/main/trunk/; revision=10996
Zac Medico [Wed, 9 Jul 2008 01:46:24 +0000 (01:46 -0000)]
Fix _prune_digraph() to correctly distinguish "nomerge" nodes from
"uninstall" nodes.
svn path=/main/trunk/; revision=10995
Zac Medico [Tue, 8 Jul 2008 23:42:28 +0000 (23:42 -0000)]
* Fix _choose_pkg() to pop the first node if there are no other jobs running.
* Allow _choose_pkg() to choose an uninstall node when it reaches the front
of the queue. TODO: fix order for uninstall operations.
* Fix _dependent_on_scheduled_merges() to handle direct circular deps
correctly.
svn path=/main/trunk/; revision=10994
Zac Medico [Tue, 8 Jul 2008 22:35:27 +0000 (22:35 -0000)]
Make the "tight loop" assertion trigger whenever there is no state change
detected for a given _schedule_main() call.
svn path=/main/trunk/; revision=10993
Zac Medico [Tue, 8 Jul 2008 22:28:41 +0000 (22:28 -0000)]
In scheduler._schedule_main(), only consider a poll() event to be a state
change if it results in a handler being unregistered.
svn path=/main/trunk/; revision=10992
Zac Medico [Tue, 8 Jul 2008 22:19:21 +0000 (22:19 -0000)]
Fix Scheduler._dependent_on_scheduled_merges() to properly distinguish
"nomerge" nodes from "uninstall" nodes.
svn path=/main/trunk/; revision=10991
Zac Medico [Tue, 8 Jul 2008 21:56:20 +0000 (21:56 -0000)]
Remove redundant call to _schedule_main().
svn path=/main/trunk/; revision=10990
Zac Medico [Tue, 8 Jul 2008 21:19:22 +0000 (21:19 -0000)]
* Call self._wait() when unregistering output handlers, in order to avoid
triggering a tight loop. Also fix Subprocess._wait() to only schedule
when self.registered is True.
* Add an assertion inside Scheduler._schedule_main() to try and detect tight
loops like the one above.
* Fix typo in Scheduler._merge_exit().
svn path=/main/trunk/; revision=10989
Zac Medico [Tue, 8 Jul 2008 17:44:53 +0000 (17:44 -0000)]
Derive PackageMerge from AsynchronousTask instead of CompositeTask since
CompositeTask is designed for self._current_task to be set.
svn path=/main/trunk/; revision=10988
Zac Medico [Tue, 8 Jul 2008 17:26:46 +0000 (17:26 -0000)]
Raise an AssertionError in CompositeTask._wait() if it's detected that
self._current_task hasn't been properly updated after calling wait on
it.
svn path=/main/trunk/; revision=10987
Zac Medico [Tue, 8 Jul 2008 16:59:40 +0000 (16:59 -0000)]
Fix infinite loop in CompositeTask._wait().
svn path=/main/trunk/; revision=10986
Zac Medico [Tue, 8 Jul 2008 10:49:02 +0000 (10:49 -0000)]
Fix ValueError triggered when Scheduler._choose_pkg() doesn't find a package
and returns None.
svn path=/main/trunk/; revision=10985
Zac Medico [Tue, 8 Jul 2008 10:28:43 +0000 (10:28 -0000)]
Use a normal list instead of a deque for Scheduler._pkg_queue since deque
doesn't have a remove() method until python-2.5.
svn path=/main/trunk/; revision=10984
Zac Medico [Tue, 8 Jul 2008 09:50:37 +0000 (09:50 -0000)]
Implement parallel build support by adding new --jobs and --load-average
options that are analogous to the corresponding `make` options. Input and
output handling still need work to make it look better and act more friendly
for things like interactive ebuilds that require input.
svn path=/main/trunk/; revision=10983
Zac Medico [Tue, 8 Jul 2008 05:49:27 +0000 (05:49 -0000)]
* Add background support to the SpawProcess class.
* Make Binpkg pass the current background setting into subtasks.
svn path=/main/trunk/; revision=10982
Zac Medico [Tue, 8 Jul 2008 05:15:55 +0000 (05:15 -0000)]
Add AsynchronousTask.background attribute and add support for it to the
EbuildPhase class.
svn path=/main/trunk/; revision=10981
Zac Medico [Tue, 8 Jul 2008 01:01:54 +0000 (01:01 -0000)]
Also add "background" attributes to the EbuildBuild and Binpkg classes.
svn path=/main/trunk/; revision=10980
Zac Medico [Tue, 8 Jul 2008 00:53:33 +0000 (00:53 -0000)]
Add a MergeListItem.background attribute for putting a task in the background
when max_jobs > 1.
svn path=/main/trunk/; revision=10979
Zac Medico [Tue, 8 Jul 2008 00:39:48 +0000 (00:39 -0000)]
Add a missing check in Scheduler._main_loop() to ensure that max_jobs
isn't exceeded.
svn path=/main/trunk/; revision=10978
Zac Medico [Tue, 8 Jul 2008 00:25:56 +0000 (00:25 -0000)]
Use plain sequential search for the SRC_URI.mirror check since the regex
approach is actually much slower.
svn path=/main/trunk/; revision=10977
Zac Medico [Mon, 7 Jul 2008 23:32:11 +0000 (23:32 -0000)]
Add a Scheduler._digraph attribute for use in parallel build scheduling.
svn path=/main/trunk/; revision=10976
Zac Medico [Mon, 7 Jul 2008 22:55:26 +0000 (22:55 -0000)]
Rename SubProcess.reg_id to _reg_id since it no longer needs to be exposed.
svn path=/main/trunk/; revision=10975
Zac Medico [Mon, 7 Jul 2008 22:41:10 +0000 (22:41 -0000)]
* Add new CompositeTask._default_final_exit() method and use it as the new
generic task exit callback.
* Remove erroneous self.wait() calls inside MergeListItem.start().
svn path=/main/trunk/; revision=10974
Zac Medico [Mon, 7 Jul 2008 22:07:03 +0000 (22:07 -0000)]
Add a new "SRC_URI.mirror" check which checks to if a uri listed in
profiles/thirdpartymirrors is found in SRC_URI. Thanks to Betelgeuse for
the initial patch which has now been optimized with a regex.
svn path=/main/trunk/; revision=10973
Zac Medico [Mon, 7 Jul 2008 12:04:32 +0000 (12:04 -0000)]
Move the "registered" attribute to the SubProcess class too.
svn path=/main/trunk/; revision=10971
Zac Medico [Mon, 7 Jul 2008 11:45:27 +0000 (11:45 -0000)]
Make SubProcess._wait() call scheduler.schedule(self.reg_id) so it's
encapsulated and callers don't have to know about it.
svn path=/main/trunk/; revision=10970
Marius Mauch [Mon, 7 Jul 2008 11:08:14 +0000 (11:08 -0000)]
remove TODO list as it's not maintained anyway
svn path=/main/trunk/; revision=10969
Zac Medico [Mon, 7 Jul 2008 05:35:17 +0000 (05:35 -0000)]
* Implement CompositeTask._poll().
* Make AsynchronousTask classes call self.wait() to notify
exit listeners.
* Rewrite Scheduler._main_loop() to bring it closer to allowing
parallel build scheduling.
svn path=/main/trunk/; revision=10966
Zac Medico [Mon, 7 Jul 2008 03:12:52 +0000 (03:12 -0000)]
Fix broken code in AsynchronousTask.poll().
svn path=/main/trunk/; revision=10965
Zac Medico [Mon, 7 Jul 2008 02:18:58 +0000 (02:18 -0000)]
Fix EbuildPhase._set_returncode() so that it correctly updates the returncode
attrbute instead of just a local variable.
svn path=/main/trunk/; revision=10964
Zac Medico [Mon, 7 Jul 2008 02:11:05 +0000 (02:11 -0000)]
Fix typo in Binpkg.start() which prevents --genbinpkg prefetcher sync
from working properly in some cases.
svn path=/main/trunk/; revision=10963
Zac Medico [Sun, 6 Jul 2008 18:45:19 +0000 (18:45 -0000)]
* Implement MergeListItem._poll() and _wait().
* Fix BinpkgVerifier.start() to call wait() since it's not asynchronous.
svn path=/main/trunk/; revision=10962
Zac Medico [Sun, 6 Jul 2008 15:17:10 +0000 (15:17 -0000)]
Add a PackageMerge class to serve as an asynchronous interface to package
merges. For now it executes synchronously inside the start() method.
svn path=/main/trunk/; revision=10961
Zac Medico [Sun, 6 Jul 2008 14:32:32 +0000 (14:32 -0000)]
Add async support to MergeListItem.
svn path=/main/trunk/; revision=10960
Zac Medico [Sun, 6 Jul 2008 13:07:38 +0000 (13:07 -0000)]
Add async support to the Binpkg class.
svn path=/main/trunk/; revision=10959
Zac Medico [Sun, 6 Jul 2008 09:17:22 +0000 (09:17 -0000)]
Make BinpkgFetcher send output directly to stdout when appropriate,
so that wget's progress bar works normally.
svn path=/main/trunk/; revision=10958
Zac Medico [Sun, 6 Jul 2008 08:22:31 +0000 (08:22 -0000)]
Fix parent class constructor call in the BinpkgFetcher constructor.
svn path=/main/trunk/; revision=10957
Zac Medico [Sun, 6 Jul 2008 08:16:21 +0000 (08:16 -0000)]
Make AsynchronousTask subclasses override _wait() and _poll() so that calls
to public methods can be wrapped for implementing hooks such as exit listener
notification.
svn path=/main/trunk/; revision=10956
Zac Medico [Sun, 6 Jul 2008 07:09:46 +0000 (07:09 -0000)]
Fix --getbinpkg to inject downloaded packages into the local bintree.
svn path=/main/trunk/; revision=10955
Zac Medico [Sun, 6 Jul 2008 06:48:41 +0000 (06:48 -0000)]
* Fix broke return code handling from previous commit, in
MergeListItem.execute().
* Fix TaskSequence._task_exit_handler() so it won't call
final_exit() if _default_exit() has already set
self._current_task to None.
svn path=/main/trunk/; revision=10954
Zac Medico [Sun, 6 Jul 2008 06:28:32 +0000 (06:28 -0000)]
Add async support to EbuildBuild, and an synchronous install() method.
svn path=/main/trunk/; revision=10953
Zac Medico [Sun, 6 Jul 2008 03:44:25 +0000 (03:44 -0000)]
Split out a CompositeTask._start_task() for subclasses to use as a generic
way to start a task.
svn path=/main/trunk/; revision=10952
Zac Medico [Sun, 6 Jul 2008 01:51:50 +0000 (01:51 -0000)]
Add CompositeTask._final_exit() method and use it to fix breakage from the
previous commit.
svn path=/main/trunk/; revision=10951
Zac Medico [Sun, 6 Jul 2008 01:24:29 +0000 (01:24 -0000)]
Split out a reusable CompositeTask._default_exit() method that subclasses
can use as a generic task exit callback.
svn path=/main/trunk/; revision=10950
Zac Medico [Sun, 6 Jul 2008 00:44:00 +0000 (00:44 -0000)]
Add a CompositeTask._assert_current() method that asynchronous callbacks
can use detect possible bugs.
svn path=/main/trunk/; revision=10949
Zac Medico [Sun, 6 Jul 2008 00:01:31 +0000 (00:01 -0000)]
Fix typo in xterm titles total package count which causes it to show the
current package instead. Thanks to Arfrever for this patch.
svn path=/main/trunk/; revision=10948
Zac Medico [Sat, 5 Jul 2008 23:17:01 +0000 (23:17 -0000)]
* Fix AsynchronousTask.poll() to call _wait_hook() when necessary.
* Use the default poll() and cancel() implementations for BinpkgVerifier.
svn path=/main/trunk/; revision=10947
Zac Medico [Sat, 5 Jul 2008 14:02:13 +0000 (14:02 -0000)]
Call _wait_hook() from poll() if the wait call occurs there.
svn path=/main/trunk/; revision=10946
Zac Medico [Sat, 5 Jul 2008 13:44:19 +0000 (13:44 -0000)]
Correct TaskSequence docstring to refer to the addExitListener() method.
svn path=/main/trunk/; revision=10945
Zac Medico [Sat, 5 Jul 2008 13:34:21 +0000 (13:34 -0000)]
Thanks to Ali Polatel <hawking@g.o> for this patch to fix broken indentation.
svn path=/main/trunk/; revision=10944
Zac Medico [Sat, 5 Jul 2008 13:19:01 +0000 (13:19 -0000)]
Split out common code from CompositeTask and EbuildExecuter into a new
CompositeTask class and rename the old CompositeTask class to TaskSequence.
svn path=/main/trunk/; revision=10943
Zac Medico [Sat, 5 Jul 2008 13:06:47 +0000 (13:06 -0000)]
Make EbuildExecuter inherit from AsynchronousTask.
svn path=/main/trunk/; revision=10942
Zac Medico [Sat, 5 Jul 2008 12:36:40 +0000 (12:36 -0000)]
Fix CompositeTask.cancel() so that it's safe to call when there is no
running task.
svn path=/main/trunk/; revision=10941
Zac Medico [Sat, 5 Jul 2008 12:21:43 +0000 (12:21 -0000)]
Add a new CompositeTask class which can be used to combine separate
AsynchronousTask instances into a single instance. The CompositeTask
instance used task exit listeners as a means to (asynchronously) trigger
progression from one subtask to the next. This technique is used to
group together all the ebuild phases executed by EbuildExecuter, and
should be useful for grouping many more sets of tasks into similar
composite tasks.
svn path=/main/trunk/; revision=10940
Zac Medico [Sat, 5 Jul 2008 08:52:46 +0000 (08:52 -0000)]
Add async support to EbuildBinpkg by making it inherit from EbuildPhase.
svn path=/main/trunk/; revision=10939
Zac Medico [Sat, 5 Jul 2008 08:08:09 +0000 (08:08 -0000)]
Use the EbuildPhase class to execute the "clean" phase asynchronously.
svn path=/main/trunk/; revision=10938
Zac Medico [Sat, 5 Jul 2008 07:36:58 +0000 (07:36 -0000)]
Remove unused variable.
svn path=/main/trunk/; revision=10937