~mthaddon/mojo/bundle-phase-1863764

« back to all changes in this revision

Viewing changes to mojo/cli.py

  • Committer: Matthew Wedgwood
  • Date: 2013-06-21 23:20:49 UTC
  • Revision ID: matthew.wedgwood@canonical.com-20130621232049-41qz1m0w0yra8q5c
First two mojo tools, init and collect

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
import argparse
 
2
import mojo
 
3
import os
 
4
import sys
 
5
import subprocess
 
6
 
 
7
 
 
8
def makedirs_or_exit(*dirs):
 
9
    for directory in dirs:
 
10
        if not os.path.isdir(directory):
 
11
            try:
 
12
                os.makedirs(directory)
 
13
            except OSError as e:
 
14
                print e.strerror, '({})'.format(e.filename)
 
15
                print "Initialization failed"
 
16
                sys.exit(1)
 
17
 
 
18
 
 
19
def get_workspace(args):
 
20
    if args.workspace:
 
21
        workspace = args.workspace
 
22
    else:
 
23
        workspace = mojo.workspace_path()
 
24
        print "No workspace specified, using {}".format(workspace)
 
25
    return workspace
 
26
 
 
27
 
 
28
def init(args):
 
29
    "Set up workspace and fetch a copy of the configuration"
 
30
    workspace = get_workspace(args)
 
31
    print "Initializing workspace"
 
32
    makedirs_or_exit(workspace)
 
33
 
 
34
    cmd = ["bzr", "branch"]
 
35
    cmd.append(args.spec_url[0])
 
36
    cmd.append(mojo.config_dir(workspace))
 
37
    try:
 
38
        subprocess.check_call(cmd)
 
39
    except subprocess.CalledProcessError as e:
 
40
        sys.exit(e.returncode)
 
41
 
 
42
    directories = (
 
43
        mojo.build_dir(workspace),
 
44
        mojo.charm_repo_dir(workspace),
 
45
        mojo.log_dir(workspace),
 
46
    )
 
47
    makedirs_or_exit(*directories)
 
48
 
 
49
 
 
50
def collect(args):
 
51
    "Collect build resources using config-manager"
 
52
    print "Building resource tree"
 
53
    workspace = get_workspace(args)
 
54
    try:
 
55
        config = mojo.get_config_file(workspace, "branches", args.envtag)
 
56
    except mojo.ConfigNotFoundException as e:
 
57
        print e.message
 
58
        sys.exit(1)
 
59
    os.chdir(mojo.build_dir(workspace))
 
60
    cmd = ['cm.py', '-v', 'update', config]
 
61
    subprocess.check_call(cmd)
 
62
 
 
63
 
 
64
def add_envtag_arg(subparser):
 
65
    subparser.add_argument("--envtag", "-e", help="Environment tag", default=None)
 
66
 
 
67
 
 
68
def main():
 
69
    ap = argparse.ArgumentParser()
 
70
    ap.add_argument("--workspace", "-w", help="Workspace path", default=None)
 
71
 
 
72
    sp = ap.add_subparsers(title="subcommands")
 
73
 
 
74
    initcmd = sp.add_parser("init", help="Initialize a mojo workspace")
 
75
    initcmd.add_argument("spec_url", nargs=1, help="Configuration spec url (bzr)")
 
76
    initcmd.set_defaults(func=init)
 
77
 
 
78
    collectcmd = sp.add_parser("collect", help="Collect resources for build")
 
79
    add_envtag_arg(collectcmd)
 
80
    collectcmd.set_defaults(func=collect)
 
81
 
 
82
    args = ap.parse_args()
 
83
    args.func(args)