* introduce logcommand.Lager, Whipper(); use argparse for whipper image commands, stub logging
* update Lager docstring to mention config.Config()
* make incorrect subcommand and --version work on toplevel command
* migrate accurip show, expand Lager, do not attempt to return from Lager.__init__.
* migrate offset find, add Lager.error
* correct offset find drive symlink handling
* migrate drive
* change Lager.__init__(prog) to arg from kwarg
* but actually
* remove Whipper.usage
* add and use Lager.device_option() context manager
* help I married an axe murderer
* use unified options namespace for entire command tree
* migrate whipper cd without comprehensive config loading
* switch to logging module
- use logging instead of flog for non-extern modules
- use WHIPPER_DEBUG and WHIPPER_LOGFILE env variables
* convert self.log calls to logger.debug
* convert self.error calls to logger.error
* remove log.Loggable, use logger not logging
* Logging conversion continues
- Convert log.* calls to logger.*
- Remove morituri.common.log imports
* remove morituri.common.log from tests
* remove extern/flog, bare minimum Debug conversion
* update README for logging changes
* update soxi to use logging
* refactor Lager for more declarative subcommands
* Refactor Lager.device_option:
- inline into __init__
- throw IOError instead of Exception for missing drives
- remove CommandError checking in rip/main
* rename rip to whipper in rip.main
* convert rip.debug commands
* Rename logcommand.Lager to command.BaseCommand
- remove command.CommandError occurrences
- remove python-command external module
* remove submodules from README, update rclog formatter
* update minor ambiguity in readme for command invocation
* update version number to match setup.py
* remove gitmodules
* update version number in tests as well (boo)
* convert logger.error to logger.critical
* Change morituri.rip to morituri.command
- mv common.command to command.basecommand
- move TEMPLATES used only by rip.cd out of rip.common
- update entry point for command to command.main
* update basecommand documentation
* go pyflaking: import fixing
* replace self.stdout with sys.stdout
* remove BaseCommand.config, alphabetise imports
* convert self.stdXXX leftovers
* convert last getRootCommand to config.Config
* convert last getExceptionMessage's to str
* change musicbrainz useragent to whipper
* standardise program/sox.py formatting, add test case
* add program/sox.peak_level() docstring
* update .travis.yml to include sox as a test dependency
* move sox from test dependency to normal dependency
* update README to mention sox, remove small autoconf mention
* use .splitlines() instead of .split('n')
* update README to force python2
* add support for PRE_EMPHASIS detection; mark pre-emphasis as FLAGS PRE in .cue
* correct typo, s/ivar/type/ for pre_emphasis element in track table
* add SoxPeakTask, program/sox module, sox.peak_level()
* use sox peak detection in lieu of gstreamer
* morituri/test/test_program_cdparanoia.py:
Add a task that can analyze the drive for whether it defeats
the audio cache.
* morituri/result/result.py:
* morituri/rip/cd.py:
Make it possible to store whether a drive defeats audio cache
in the result.
* morituri/rip/drive.py:
Add rip drive analyze command to analyze caching of a drive,
and store it in the config.
* morituri/program/cdparanoia.py:
* morituri/result/result.py:
* morituri/rip/cd.py:
* morituri/test/test_program_cdparanoia.py:
Get cdparanoia version.
Store both cdparanoia and cdrdao versions on rip result.
* morituri/common/program.py:
* morituri/program/cdparanoia.py:
* morituri/result/logger.py:
* morituri/result/result.py:
Calculate speed of reading track.
Output Test and Copy speed per track in log.
Add shrinkPath to write shorter path names.
* morituri/test/test_common_common.py (added):
Add test.
* morituri/program/cdparanoia.py:
Catch ENAMETOOLONG and shrink path.
* morituri/common/program.py:
Update track result's filename if it was shrunk.
* morituri/rip/cd.py:
set the possibly shrunk path on the result.
add task argument to TaskRunner.schedule so we can get exceptions.
Add .schedule method to Task to pass self.
* morituri/common/checksum.py:
* morituri/common/encode.py:
* morituri/common/gstreamer.py:
* morituri/program/cdparanoia.py:
* morituri/program/cdrdao.py:
Adapt.
cdparanoia can hang indefinitely on scsi read errors.
For example, on some drives, when trying negative offsets.
Notice them, count them, and fail after 100.
* morituri/test/test_program_cdparanoia.py:
* morituri/test/cdparanoia.progress.error (added):
Add a test for this output.
Add logCategory to CDRDAO tasks.
Remove errors from parser, set them publically on task.
Properly raise exceptions on data cd's with correct stack origin.