|
@@ -23,7 +23,9 @@ from ..project import NoSuchService
|
|
|
from ..service import BuildError
|
|
|
from ..service import ConvergenceStrategy
|
|
|
from ..service import NeedsBuildError
|
|
|
-from .command import Command
|
|
|
+from .command import friendly_error_message
|
|
|
+from .command import project_from_options
|
|
|
+from .docopt_command import DocoptCommand
|
|
|
from .docopt_command import NoSuchCommand
|
|
|
from .errors import UserError
|
|
|
from .formatter import Formatter
|
|
@@ -89,6 +91,15 @@ def setup_logging():
|
|
|
logging.getLogger("requests").propagate = False
|
|
|
|
|
|
|
|
|
+def setup_console_handler(verbose):
|
|
|
+ if verbose:
|
|
|
+ console_handler.setFormatter(logging.Formatter('%(name)s.%(funcName)s: %(message)s'))
|
|
|
+ console_handler.setLevel(logging.DEBUG)
|
|
|
+ else:
|
|
|
+ console_handler.setFormatter(logging.Formatter())
|
|
|
+ console_handler.setLevel(logging.INFO)
|
|
|
+
|
|
|
+
|
|
|
# stolen from docopt master
|
|
|
def parse_doc_section(name, source):
|
|
|
pattern = re.compile('^([^\n]*' + name + '[^\n]*\n?(?:[ \t].*?(?:\n|$))*)',
|
|
@@ -96,7 +107,7 @@ def parse_doc_section(name, source):
|
|
|
return [s.strip() for s in pattern.findall(source)]
|
|
|
|
|
|
|
|
|
-class TopLevelCommand(Command):
|
|
|
+class TopLevelCommand(DocoptCommand):
|
|
|
"""Define and run multi-container applications with Docker.
|
|
|
|
|
|
Usage:
|
|
@@ -130,20 +141,24 @@ class TopLevelCommand(Command):
|
|
|
version Show the Docker-Compose version information
|
|
|
|
|
|
"""
|
|
|
+ base_dir = '.'
|
|
|
+
|
|
|
def docopt_options(self):
|
|
|
options = super(TopLevelCommand, self).docopt_options()
|
|
|
options['version'] = get_version_info('compose')
|
|
|
return options
|
|
|
|
|
|
- def perform_command(self, options, *args, **kwargs):
|
|
|
- if options.get('--verbose'):
|
|
|
- console_handler.setFormatter(logging.Formatter('%(name)s.%(funcName)s: %(message)s'))
|
|
|
- console_handler.setLevel(logging.DEBUG)
|
|
|
- else:
|
|
|
- console_handler.setFormatter(logging.Formatter())
|
|
|
- console_handler.setLevel(logging.INFO)
|
|
|
+ def perform_command(self, options, handler, command_options):
|
|
|
+ setup_console_handler(options.get('--verbose'))
|
|
|
+
|
|
|
+ if options['COMMAND'] in ('help', 'version'):
|
|
|
+ # Skip looking up the compose file.
|
|
|
+ handler(None, command_options)
|
|
|
+ return
|
|
|
|
|
|
- return super(TopLevelCommand, self).perform_command(options, *args, **kwargs)
|
|
|
+ project = project_from_options(self.base_dir, options)
|
|
|
+ with friendly_error_message():
|
|
|
+ handler(project, command_options)
|
|
|
|
|
|
def build(self, project, options):
|
|
|
"""
|