[meld] Adapt SchedulerBase to explicitly support iterables as tasks
- From: Kai Willadsen <kaiw src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [meld] Adapt SchedulerBase to explicitly support iterables as tasks
- Date: Fri, 30 Nov 2012 19:28:51 +0000 (UTC)
commit d13eae3bf79d66ee88df87754c21bf685fa864fe
Author: Kai Willadsen <kai willadsen gmail com>
Date: Fri Oct 26 07:30:44 2012 +1000
Adapt SchedulerBase to explicitly support iterables as tasks
This change deals with the fact that it's unpleasant to compatibly pass
a generator's next()/__next__() method for Python 2/3. Instead, we
allow iterables to be passed in as-is, and adapt the task runner to
call next() itself where appropriate.
meld/dirdiff.py | 2 +-
meld/filediff.py | 4 ++--
meld/task.py | 42 ++++++++++++++----------------------------
meld/vcview.py | 19 ++++++++++---------
4 files changed, 27 insertions(+), 40 deletions(-)
---
diff --git a/meld/dirdiff.py b/meld/dirdiff.py
index 08d784e..1b96ae3 100644
--- a/meld/dirdiff.py
+++ b/meld/dirdiff.py
@@ -505,7 +505,7 @@ class DirDiff(melddoc.MeldDoc, gnomeglade.Component):
self.model.remove(child)
child = self.model.iter_children( it )
self._update_item_state(it)
- self.scheduler.add_task( self._search_recursively_iter( path ).next )
+ self.scheduler.add_task(self._search_recursively_iter(path))
def _search_recursively_iter(self, rootpath):
self.actiongroup.get_action("Hide").set_sensitive(False)
diff --git a/meld/filediff.py b/meld/filediff.py
index ec3f01c..69bc512 100644
--- a/meld/filediff.py
+++ b/meld/filediff.py
@@ -965,7 +965,7 @@ class FileDiff(melddoc.MeldDoc, gnomeglade.Component):
self.recompute_label()
self.textview[len(files) >= 2].grab_focus()
self._connect_buffer_handlers()
- self.scheduler.add_task( self._set_files_internal(files).next )
+ self.scheduler.add_task(self._set_files_internal(files))
def _load_files(self, files, textbuffers):
self.undosequence.clear()
@@ -1101,7 +1101,7 @@ class FileDiff(melddoc.MeldDoc, gnomeglade.Component):
self._disconnect_buffer_handlers()
self.linediffer.clear()
self.queue_draw()
- self.scheduler.add_task(self._diff_files().next)
+ self.scheduler.add_task(self._diff_files())
def _set_merge_action_sensitivity(self):
pane = self._get_focused_pane()
diff --git a/meld/task.py b/meld/task.py
index b3216b2..15b710e 100644
--- a/meld/task.py
+++ b/meld/task.py
@@ -128,7 +128,10 @@ class SchedulerBase(object):
except StopIteration:
return 0
try:
- ret = task()
+ if hasattr(task, "__iter__"):
+ ret = next(task)
+ else:
+ ret = task()
except StopIteration:
pass
except Exception:
@@ -177,47 +180,30 @@ class RoundRobinScheduler(SchedulerBase):
raise StopIteration
-
-if __name__=="__main__":
+if __name__ == "__main__":
import time
import random
m = LifoScheduler()
+
def timetask(t):
while time.time() - t < 1:
print "***"
time.sleep(0.1)
print "!!!"
+
def sayhello(x):
- for i in range(random.randint(2,8)):
+ for i in range(random.randint(2, 8)):
print "hello", x
time.sleep(0.1)
yield 1
print "end", x
+
s = RoundRobinScheduler()
m.add_task(s)
- h = sayhello(10).next
- #m.add_task(h)
- #m.add_task(h)
- s.add_task( sayhello(10).next )
- s.add_task( sayhello(20).next )
- s.add_task( sayhello(30).next )
- #s.add_task( sayhello(40).next )
- #s.add_task( sayhello(50).next )
- #s.add_task( sayhello(60).next )
- #m.add_task( s )
- #time.sleep(.71)
- #m.add_task( s )#sayhello(2).next )
- #m.add_task( sayhello(3).next )
- #m.add_task( lambda t=time.time() : timetask(t) )
- #m.add_task( sayhello(4).next )
- #m.add_task( sayhello(5).next )
- #m.mainloop()
- while s.tasks_pending(): s.iteration()
+ s.add_task(sayhello(10))
+ s.add_task(sayhello(20))
+ s.add_task(sayhello(30))
+ while s.tasks_pending():
+ s.iteration()
time.sleep(2)
print "***"
- #print "***"
- #m.add_task( sayhello(20).next )
- #m.add_task( s )
- #s.complete_tasks()
- #time.sleep(3)
-
diff --git a/meld/vcview.py b/meld/vcview.py
index 98f2e1f..e89057c 100644
--- a/meld/vcview.py
+++ b/meld/vcview.py
@@ -314,7 +314,8 @@ class VcView(melddoc.MeldDoc, gnomeglade.Component):
# If the user is just diffing a file (ie not a directory), there's no
# need to scan the rest of the repository
if os.path.isdir(self.vc.location):
- self.scheduler.add_task(self._search_recursively_iter(self.model.get_iter_root()).next)
+ root = self.model.get_iter_root()
+ self.scheduler.add_task(self._search_recursively_iter(root))
self.scheduler.add_task(self.on_treeview_cursor_changed)
def recompute_label(self):
@@ -403,11 +404,10 @@ class VcView(melddoc.MeldDoc, gnomeglade.Component):
retry_diff = False
yield _("[%s] Fetching differences") % self.label_text
- difffunc = self._command_iter(self.vc.diff_command(),
- path_list, 0).next
+ diffiter = self._command_iter(self.vc.diff_command(), path_list, 0)
diff = None
while type(diff) != type(()):
- diff = difffunc()
+ diff = next(diffiter)
yield 1
prefix, patch = diff[0], diff[1]
@@ -429,7 +429,7 @@ class VcView(melddoc.MeldDoc, gnomeglade.Component):
def run_diff(self, path_list):
for path in path_list:
- self.scheduler.add_task(self.run_diff_iter([path]).next, atfront=1)
+ self.scheduler.add_task(self.run_diff_iter([path]), atfront=1)
def on_treeview_popup_menu(self, treeview):
time = gtk.get_current_event_time()
@@ -497,10 +497,11 @@ class VcView(melddoc.MeldDoc, gnomeglade.Component):
files = [ relpath(workdir, f) for f in files ]
r = None
self.consolestream.write( misc.shelljoin(command+files) + " (in %s)\n" % workdir)
- readfunc = misc.read_pipe_iter(command + files, self.consolestream, workdir=workdir).next
+ readiter = misc.read_pipe_iter(command + files, self.consolestream,
+ workdir=workdir)
try:
while r is None:
- r = readfunc()
+ r = next(readiter)
self.consolestream.write(r)
yield 1
except IOError as e:
@@ -513,7 +514,7 @@ class VcView(melddoc.MeldDoc, gnomeglade.Component):
def _command(self, command, files, refresh=1):
"""Run 'command' on 'files'.
"""
- self.scheduler.add_task( self._command_iter(command, files, refresh).next )
+ self.scheduler.add_task(self._command_iter(command, files, refresh))
def _command_on_selected(self, command, refresh=1):
files = self._get_selected_files()
@@ -639,7 +640,7 @@ class VcView(melddoc.MeldDoc, gnomeglade.Component):
self.model.set_value(newiter, self.model.column_index( tree.COL_PATH, 0), where)
self.model.set_path_state(newiter, 0, tree.STATE_NORMAL, True)
self.model.remove(it)
- self.scheduler.add_task( self._search_recursively_iter(newiter).next )
+ self.scheduler.add_task(self._search_recursively_iter(newiter))
else: # XXX fixme
self.refresh()
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]