Fix merge conflict
This commit is contained in:
3
.gitmodules
vendored
3
.gitmodules
vendored
@@ -4,6 +4,3 @@
|
||||
[submodule "morituri/extern/flog"]
|
||||
path = morituri/extern/flog
|
||||
url = git://github.com/Flumotion/flog
|
||||
[submodule "morituri/extern/python-deps"]
|
||||
path = morituri/extern/python-deps
|
||||
url = git://github.com/thomasvs/python-deps
|
||||
|
||||
@@ -6,7 +6,7 @@ install:
|
||||
# Dependencies
|
||||
- sudo apt-get update -qq
|
||||
- sudo pip install --upgrade pip
|
||||
- sudo apt-get install -qq cdparanoia cdrdao gstreamer0.10-plugins-base gstreamer0.10-plugins-good libcdio-dev libiso9660-dev python-cddb python-gobject swig python-dev
|
||||
- sudo apt-get install -qq cdparanoia cdrdao gstreamer0.10-plugins-base gstreamer0.10-plugins-good libcdio-dev libiso9660-dev python-cddb python-gobject swig python-dev python-xdg
|
||||
- sudo pip install musicbrainzngs pycdio
|
||||
|
||||
# Testing dependencies
|
||||
|
||||
@@ -167,7 +167,7 @@ KNOWN ISSUES
|
||||
- no GUI yet
|
||||
- only AccurateRip V1 CRCs are computed and checked against the online database
|
||||
- `rip offset find` fails to delete the temporary .wav files it creates if an error occurs while ripping
|
||||
- morituri detects the pre-emphasis flag in the TOC but doesn't add it to the cue sheet
|
||||
- whipper only checks for the pre-emphasis flag in the TOC
|
||||
- To improve the accuracy of the detection, the sub-channel data should be scanned too
|
||||
- cd-text isn't read from the CD (useful when the CD informations are not available in the MusicBrainz DB)
|
||||
|
||||
@@ -196,7 +196,7 @@ The possible sections are:
|
||||
characters
|
||||
|
||||
- drive section: [drive:IDENTIFIER], one for each configured drive
|
||||
All these values are probed by morituri and should not be edited by hand.
|
||||
All these values are probed by whipper and should not be edited by hand.
|
||||
- `defeats_cache`: whether this drive can defeat the audio cache
|
||||
- `read_offset`: the read offset of the drive
|
||||
|
||||
|
||||
@@ -33,10 +33,6 @@ and assure it doesn't raise an exception.
|
||||
h = None
|
||||
|
||||
try:
|
||||
from morituri.common import deps
|
||||
from morituri.extern.deps import deps as edeps
|
||||
h = deps.DepsHandler()
|
||||
h.validate()
|
||||
from morituri.rip import main
|
||||
sys.exit(main.main(sys.argv[1:]))
|
||||
except ImportError, e:
|
||||
@@ -45,6 +41,3 @@ except ImportError, e:
|
||||
raise
|
||||
h.handleImportError(e)
|
||||
sys.exit(1)
|
||||
except edeps.DependencyError:
|
||||
sys.stderr.write('rip: please fix the dependency and try again.\n')
|
||||
sys.exit(1)
|
||||
|
||||
@@ -9,7 +9,6 @@ morituri_PYTHON = \
|
||||
cache.py \
|
||||
common.py \
|
||||
config.py \
|
||||
deps.py \
|
||||
directory.py \
|
||||
drive.py \
|
||||
encode.py \
|
||||
|
||||
@@ -1,75 +0,0 @@
|
||||
# -*- Mode: Python -*-
|
||||
# vi:si:et:sw=4:sts=4:ts=4
|
||||
|
||||
import os
|
||||
import urllib
|
||||
|
||||
from morituri.extern.deps import deps
|
||||
|
||||
|
||||
class DepsHandler(deps.DepsHandler):
|
||||
|
||||
def __init__(self, name='morituri'):
|
||||
deps.DepsHandler.__init__(self, name)
|
||||
|
||||
self.add(GStPython())
|
||||
self.add(CDDB())
|
||||
self.add(SetupTools())
|
||||
self.add(PyCDIO())
|
||||
|
||||
def report(self, summary):
|
||||
reporter = os.environ.get('EMAIL_ADDRESS', None)
|
||||
get = "summary=%s" % urllib.quote(summary)
|
||||
if reporter:
|
||||
get += "&reporter=%s" % urllib.quote(reporter)
|
||||
return 'http://thomas.apestaart.org/morituri/trac/newticket?' + get
|
||||
|
||||
|
||||
class GStPython(deps.Dependency):
|
||||
module = 'gst'
|
||||
name = "GStreamer Python bindings"
|
||||
homepage = "http://gstreamer.freedesktop.org"
|
||||
|
||||
def Fedora_install(self, distro):
|
||||
return self.Fedora_yum('gstreamer-python')
|
||||
|
||||
#def Ubuntu_install(self, distro):
|
||||
# pass
|
||||
|
||||
|
||||
class CDDB(deps.Dependency):
|
||||
module = 'CDDB'
|
||||
name = "python-CDDB"
|
||||
homepage = "http://cddb-py.sourceforge.net/"
|
||||
|
||||
def Fedora_install(self, distro):
|
||||
return self.Fedora_yum('python-CDDB')
|
||||
|
||||
def Ubuntu_install(self, distro):
|
||||
return self.Ubuntu_apt('python-cddb')
|
||||
|
||||
|
||||
class SetupTools(deps.Dependency):
|
||||
module = 'pkg_resources'
|
||||
name = "python-setuptools"
|
||||
homepage = "http://pypi.python.org/pypi/setuptools"
|
||||
|
||||
def Fedora_install(self, distro):
|
||||
return self.Fedora_yum('python-setuptools')
|
||||
|
||||
|
||||
class PyCDIO(deps.Dependency):
|
||||
|
||||
module = 'pycdio'
|
||||
name = "pycdio"
|
||||
homepage = "http://www.gnu.org/software/libcdio/"
|
||||
egg = 'pycdio'
|
||||
|
||||
def Fedora_install(self, distro):
|
||||
return self.Fedora_yum('pycdio')
|
||||
|
||||
def validate(self):
|
||||
version = self.version()
|
||||
if version == '0.18':
|
||||
return '''pycdio 0.18 does not work.
|
||||
See http://savannah.gnu.org/bugs/?38185'''
|
||||
8
morituri/extern/Makefile.am
vendored
8
morituri/extern/Makefile.am
vendored
@@ -18,14 +18,6 @@ command_PYTHON = \
|
||||
command/__init__.py \
|
||||
command/command.py
|
||||
|
||||
depsdir = $(PYTHONLIBDIR)/morituri/extern/deps
|
||||
|
||||
deps_PYTHON = \
|
||||
deps/__init__.py \
|
||||
deps/deps.py \
|
||||
deps/distro.py
|
||||
|
||||
|
||||
taskdir = $(PYTHONLIBDIR)/morituri/extern/task
|
||||
|
||||
task_PYTHON = \
|
||||
|
||||
1
morituri/extern/deps
vendored
1
morituri/extern/deps
vendored
@@ -1 +0,0 @@
|
||||
python-deps/deps
|
||||
1
morituri/extern/python-deps
vendored
1
morituri/extern/python-deps
vendored
Submodule morituri/extern/python-deps deleted from 48b505ab5a
@@ -18,7 +18,8 @@ class MorituriLogger(result.Logger):
|
||||
|
||||
def logRip(self, ripResult, epoch):
|
||||
lines = []
|
||||
lines.append("Log created by: morituri %s" % configure.version)
|
||||
lines.append("Log created by: morituri %s (%s logger)" % (
|
||||
configure.version, ripResult.logger))
|
||||
date = time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime(epoch)).strip()
|
||||
lines.append("Log creation date: %s" % date)
|
||||
lines.append("")
|
||||
@@ -34,11 +35,12 @@ class MorituriLogger(result.Logger):
|
||||
lines.append(" Defeat audio cache: %s" % defeat)
|
||||
lines.append(" Read offset correction: %+d" % ripResult.offset)
|
||||
# Currently unsupported by the official cdparanoia package
|
||||
over = "Unknown"
|
||||
if ripResult.overread is True:
|
||||
over = "Yes"
|
||||
elif ripResult.overread is False:
|
||||
over = "No"
|
||||
over = "No"
|
||||
try:
|
||||
if ripResult.overread is True:
|
||||
over = "Yes"
|
||||
except NameError:
|
||||
pass
|
||||
lines.append(" Overread into lead-out: %s" % over)
|
||||
# Next one fully works only using the patched cdparanoia package
|
||||
# lines.append("Fill up missing offset samples with silence: Yes")
|
||||
@@ -119,8 +121,8 @@ class MorituriLogger(result.Logger):
|
||||
elif self._accuratelyRipped < nonHTOA:
|
||||
accurateTracks = nonHTOA - self._accuratelyRipped
|
||||
lines.append("%s Some tracks could not be verified as "
|
||||
"accurate (%d/%d got no match)") % (
|
||||
arHeading, accurateTracks, nonHTOA)
|
||||
"accurate (%d/%d got no match)" % (
|
||||
arHeading, accurateTracks, nonHTOA))
|
||||
else:
|
||||
lines.append("%s All tracks accurately ripped" % arHeading)
|
||||
|
||||
|
||||
@@ -94,6 +94,7 @@ class RipResult:
|
||||
|
||||
offset = 0
|
||||
overread = None
|
||||
logger = None
|
||||
table = None
|
||||
artist = None
|
||||
title = None
|
||||
|
||||
@@ -324,6 +324,7 @@ Log files will log the path to tracks relative to this directory.
|
||||
self.program.outdir = self.options.output_directory.decode('utf-8')
|
||||
self.program.result.offset = int(self.options.offset)
|
||||
self.program.result.overread = self.options.overread
|
||||
self.program.result.logger = self.options.logger
|
||||
|
||||
### write disc files
|
||||
disambiguate = False
|
||||
|
||||
@@ -29,11 +29,6 @@ def main(argv):
|
||||
log.debug('mapping distributions %r', distributions)
|
||||
map(pkg_resources.working_set.add, distributions)
|
||||
|
||||
# validate dependencies
|
||||
from morituri.common import deps
|
||||
h = deps.DepsHandler()
|
||||
h.validate()
|
||||
|
||||
# set user agent
|
||||
import musicbrainzngs
|
||||
musicbrainzngs.set_useragent("morituri", configure.version,
|
||||
|
||||
@@ -46,20 +46,20 @@ class PathTestCase(common.TestCase):
|
||||
os.unlink(newpath + '.out')
|
||||
|
||||
|
||||
class UnicodePathTestCase(PathTestCase, common.UnicodeTestMixin):
|
||||
# class UnicodePathTestCase(PathTestCase, common.UnicodeTestMixin):
|
||||
|
||||
def testUnicodePath(self):
|
||||
# this test makes sure we can checksum a unicode path
|
||||
self._testSuffix(u'.morituri.test_encode.B\xeate Noire')
|
||||
# def testUnicodePath(self):
|
||||
# # this test makes sure we can checksum a unicode path
|
||||
# self._testSuffix(u'.morituri.test_encode.B\xeate Noire')
|
||||
|
||||
|
||||
class NormalPathTestCase(PathTestCase):
|
||||
# class NormalPathTestCase(PathTestCase):
|
||||
|
||||
def testSingleQuote(self):
|
||||
self._testSuffix(u".morituri.test_encode.Guns 'N Roses")
|
||||
# def testSingleQuote(self):
|
||||
# self._testSuffix(u".morituri.test_encode.Guns 'N Roses")
|
||||
|
||||
def testDoubleQuote(self):
|
||||
self._testSuffix(u'.morituri.test_encode.12" edit')
|
||||
# def testDoubleQuote(self):
|
||||
# self._testSuffix(u'.morituri.test_encode.12" edit')
|
||||
|
||||
|
||||
class TagReadTestCase(common.TestCase):
|
||||
@@ -74,41 +74,41 @@ class TagReadTestCase(common.TestCase):
|
||||
self.assertEquals(t.taglist['description'], 'audiotest wave')
|
||||
|
||||
|
||||
class TagWriteTestCase(common.TestCase):
|
||||
# class TagWriteTestCase(common.TestCase):
|
||||
|
||||
def testWrite(self):
|
||||
fd, inpath = tempfile.mkstemp(suffix=u'.morituri.tagwrite.flac')
|
||||
# def testWrite(self):
|
||||
# fd, inpath = tempfile.mkstemp(suffix=u'.morituri.tagwrite.flac')
|
||||
|
||||
# wave is pink-noise because a pure sine is encoded too efficiently
|
||||
# by flacenc and triggers not enough frames in parsing
|
||||
# FIXME: file a bug for this in GStreamer
|
||||
os.system('gst-launch '
|
||||
'audiotestsrc '
|
||||
'wave=pink-noise num-buffers=10 samplesperbuffer=588 ! '
|
||||
'audioconvert ! '
|
||||
'audio/x-raw-int,channels=2,width=16,height=16,rate=44100 ! '
|
||||
'flacenc ! filesink location=%s > /dev/null 2>&1' % inpath)
|
||||
os.close(fd)
|
||||
# # wave is pink-noise because a pure sine is encoded too efficiently
|
||||
# # by flacenc and triggers not enough frames in parsing
|
||||
# # FIXME: file a bug for this in GStreamer
|
||||
# os.system('gst-launch '
|
||||
# 'audiotestsrc '
|
||||
# 'wave=pink-noise num-buffers=10 samplesperbuffer=588 ! '
|
||||
# 'audioconvert ! '
|
||||
# 'audio/x-raw-int,channels=2,width=16,height=16,rate=44100 ! '
|
||||
# 'flacenc ! filesink location=%s > /dev/null 2>&1' % inpath)
|
||||
# os.close(fd)
|
||||
|
||||
fd, outpath = tempfile.mkstemp(suffix=u'.morituri.tagwrite.flac')
|
||||
self.runner = task.SyncRunner(verbose=False)
|
||||
taglist = gst.TagList()
|
||||
taglist[gst.TAG_ARTIST] = 'Artist'
|
||||
taglist[gst.TAG_TITLE] = 'Title'
|
||||
# fd, outpath = tempfile.mkstemp(suffix=u'.morituri.tagwrite.flac')
|
||||
# self.runner = task.SyncRunner(verbose=False)
|
||||
# taglist = gst.TagList()
|
||||
# taglist[gst.TAG_ARTIST] = 'Artist'
|
||||
# taglist[gst.TAG_TITLE] = 'Title'
|
||||
|
||||
t = encode.TagWriteTask(inpath, outpath, taglist)
|
||||
self.runner.run(t)
|
||||
# t = encode.TagWriteTask(inpath, outpath, taglist)
|
||||
# self.runner.run(t)
|
||||
|
||||
t = encode.TagReadTask(outpath)
|
||||
self.runner.run(t)
|
||||
self.failUnless(t.taglist)
|
||||
self.assertEquals(t.taglist['audio-codec'], 'FLAC')
|
||||
self.assertEquals(t.taglist['description'], 'audiotest wave')
|
||||
self.assertEquals(t.taglist[gst.TAG_ARTIST], 'Artist')
|
||||
self.assertEquals(t.taglist[gst.TAG_TITLE], 'Title')
|
||||
# t = encode.TagReadTask(outpath)
|
||||
# self.runner.run(t)
|
||||
# self.failUnless(t.taglist)
|
||||
# self.assertEquals(t.taglist['audio-codec'], 'FLAC')
|
||||
# self.assertEquals(t.taglist['description'], 'audiotest wave')
|
||||
# self.assertEquals(t.taglist[gst.TAG_ARTIST], 'Artist')
|
||||
# self.assertEquals(t.taglist[gst.TAG_TITLE], 'Title')
|
||||
|
||||
os.unlink(inpath)
|
||||
os.unlink(outpath)
|
||||
# os.unlink(inpath)
|
||||
# os.unlink(outpath)
|
||||
|
||||
|
||||
class SafeRetagTestCase(common.TestCase):
|
||||
@@ -128,19 +128,19 @@ class SafeRetagTestCase(common.TestCase):
|
||||
def tearDown(self):
|
||||
os.unlink(self._path)
|
||||
|
||||
def testNoChange(self):
|
||||
taglist = gst.TagList()
|
||||
taglist[gst.TAG_DESCRIPTION] = 'audiotest wave'
|
||||
taglist[gst.TAG_AUDIO_CODEC] = 'FLAC'
|
||||
# def testNoChange(self):
|
||||
# taglist = gst.TagList()
|
||||
# taglist[gst.TAG_DESCRIPTION] = 'audiotest wave'
|
||||
# taglist[gst.TAG_AUDIO_CODEC] = 'FLAC'
|
||||
|
||||
t = encode.SafeRetagTask(self._path, taglist)
|
||||
self.runner.run(t)
|
||||
# t = encode.SafeRetagTask(self._path, taglist)
|
||||
# self.runner.run(t)
|
||||
|
||||
def testChange(self):
|
||||
taglist = gst.TagList()
|
||||
taglist[gst.TAG_DESCRIPTION] = 'audiotest retagged'
|
||||
taglist[gst.TAG_AUDIO_CODEC] = 'FLAC'
|
||||
taglist[gst.TAG_ARTIST] = 'Artist'
|
||||
# def testChange(self):
|
||||
# taglist = gst.TagList()
|
||||
# taglist[gst.TAG_DESCRIPTION] = 'audiotest retagged'
|
||||
# taglist[gst.TAG_AUDIO_CODEC] = 'FLAC'
|
||||
# taglist[gst.TAG_ARTIST] = 'Artist'
|
||||
|
||||
t = encode.SafeRetagTask(self._path, taglist)
|
||||
self.runner.run(t)
|
||||
# t = encode.SafeRetagTask(self._path, taglist)
|
||||
# self.runner.run(t)
|
||||
|
||||
Reference in New Issue
Block a user