[SCM] morituri/master: extract code into program.getFastToc
js at users.alioth.debian.org
js at users.alioth.debian.org
Sun Oct 19 20:10:00 UTC 2014
The following commit has been merged in the master branch:
commit 1e9afffde6ef5deb3cca48cd4c895f3fc08bbc1e
Author: Thomas Vander Stichele <thomas (at) apestaart (dot) org>
Date: Sun Feb 3 21:07:28 2013 +0100
extract code into program.getFastToc
diff --git a/morituri/common/program.py b/morituri/common/program.py
index fc985bd..11da844 100644
--- a/morituri/common/program.py
+++ b/morituri/common/program.py
@@ -37,6 +37,9 @@ def filterForPath(text):
return "-".join(text.split("/"))
+# FIXME: should Program have a runner ?
+
+
class Program(log.Loggable):
"""
I maintain program state and functionality.
@@ -100,6 +103,42 @@ class Program(log.Loggable):
print 'Device %s is mounted, unmounting' % device
os.system('umount %s' % device)
+ def getFastToc(self, runner, toc_pickle, device):
+ """
+ Retrieve the normal TOC table from a toc pickle or the drive.
+
+ @rtype: L{table.Table}
+ """
+ def function(r, t):
+ r.run(t)
+
+ ptoc = cache.Persister(toc_pickle or None)
+ if not ptoc.object:
+ tries = 0
+ while True:
+ tries += 1
+ t = cdrdao.ReadTOCTask(device=device)
+ try:
+ function(runner, t)
+ break
+ except:
+ if tries > 3:
+ raise
+ self.debug('failed to read TOC after %d tries, retrying' % tries)
+
+ version = t.tasks[1].parser.version
+ from pkg_resources import parse_version as V
+ # we've built a cdrdao 1.2.3rc2 modified package with the patch
+ if V(version) < V('1.2.3rc2p1'):
+ self.stdout.write('Warning: cdrdao older than 1.2.3 has a '
+ 'pre-gap length bug.\n'
+ 'See http://sourceforge.net/tracker/?func=detail'
+ '&aid=604751&group_id=2171&atid=102171\n')
+ ptoc.persist(t.table)
+ toc = ptoc.object
+ assert toc.hasTOC()
+ return toc
+
def getTable(self, runner, cddbdiscid, device):
"""
Retrieve the Table either from the cache or the drive.
diff --git a/morituri/rip/cd.py b/morituri/rip/cd.py
index 78611f8..e7a2148 100644
--- a/morituri/rip/cd.py
+++ b/morituri/rip/cd.py
@@ -56,9 +56,6 @@ class _CD(logcommand.LogCommand):
stdout=self.stdout)
self.runner = task.SyncRunner()
- def function(r, t):
- r.run(t)
-
# if the device is mounted (data session), unmount it
self.device = self.parentCommand.options.device
self.stdout.write('Checking device %s\n' % self.device)
@@ -69,31 +66,9 @@ class _CD(logcommand.LogCommand):
version = None
# first, read the normal TOC, which is fast
- ptoc = cache.Persister(self.options.toc_pickle or None)
- if not ptoc.object:
- tries = 0
- while True:
- tries += 1
- t = cdrdao.ReadTOCTask(device=self.device)
- try:
- function(self.runner, t)
- break
- except:
- if tries > 3:
- raise
- self.debug('failed to read TOC after %d tries, retrying' % tries)
-
- version = t.tasks[1].parser.version
- from pkg_resources import parse_version as V
- # we've built a cdrdao 1.2.3rc2 modified package with the patch
- if V(version) < V('1.2.3rc2p1'):
- self.stdout.write('Warning: cdrdao older than 1.2.3 has a '
- 'pre-gap length bug.\n'
- 'See http://sourceforge.net/tracker/?func=detail'
- '&aid=604751&group_id=2171&atid=102171\n')
- ptoc.persist(t.table)
- self.ittoc = ptoc.object
- assert self.ittoc.hasTOC()
+ self.ittoc = self.program.getFastToc(self.runner,
+ self.options.toc_pickle,
+ self.device)
# already show us some info based on this
self.program.getRipResult(self.ittoc.getCDDBDiscId())
--
morituri packaging
More information about the pkg-multimedia-commits
mailing list