Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

#!/usr/bin/python3 

# -*- Mode:Python; indent-tabs-mode:nil; tab-width:4 -*- 

# 

# Copyright (C) 2015 Canonical Ltd 

# 

# This program is free software: you can redistribute it and/or modify 

# it under the terms of the GNU General Public License version 3 as 

# published by the Free Software Foundation. 

# 

# This program is distributed in the hope that it will be useful, 

# but WITHOUT ANY WARRANTY; without even the implied warranty of 

# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the 

# GNU General Public License for more details. 

# 

# You should have received a copy of the GNU General Public License 

# along with this program.  If not, see <http://www.gnu.org/licenses/>. 

 

import argparse 

import pkg_resources 

import sys 

 

import snapcraft.cmds 

 

from snapcraft import help 

from snapcraft import log 

 

 

class _VersionAction(argparse.Action): 

 

    def __init__(self, option_strings, version=None, dest=argparse.SUPPRESS, 

                 default=argparse.SUPPRESS, nargs=0, help=None): 

        super(_VersionAction, self).__init__( 

            option_strings=option_strings, 

            dest=dest, 

            default=default, 

            nargs=0, 

            help=help) 

 

    def __call__(self, parser, namespace, values, option_string=None): 

        version_string = '{prog} ({ver}).\nRun "{prog} help" to get started.' 

 

        try: 

            version = pkg_resources.require('snapcraft')[0].version 

        except pkg_resources.DistributionNotFound: 

            version = 'devel' 

 

        print(version_string.format(prog=parser.prog.split()[0], ver=version)) 

        parser.exit() 

 

 

def main(): 

    log.configure() 

    root_parser = argparse.ArgumentParser() 

    subparsers = root_parser.add_subparsers(dest='cmd') 

 

    # Parent parsers 

 

    force_parser = argparse.ArgumentParser(add_help=False) 

    force_parser.add_argument('--force', action='store_true', 

                              help='redo all steps for all parts') 

 

    cmd_parser = argparse.ArgumentParser(add_help=False, 

                                         parents=[force_parser]) 

    cmd_parser.add_argument('part', nargs='*') 

 

    root_parser.add_argument('-v', '--version', action=_VersionAction, 

                             help="show the program's version number and exit") 

 

    # Command parsers 

 

    parser = subparsers.add_parser('init', help='start a project') 

    parser.add_argument('part', nargs='*', help='part to add to new project') 

    parser.set_defaults(func=snapcraft.cmds.init) 

 

    parser = subparsers.add_parser('shell', help='enter staging environment') 

    parser.add_argument( 

        'userCommand', nargs=argparse.REMAINDER, 

        metavar='cmd', 

        help='optional command to run inside staging environment') 

    parser.set_defaults(func=snapcraft.cmds.shell) 

 

    parser = subparsers.add_parser('run', help='run snap in kvm', 

                                   add_help=False) 

    parser.set_defaults(func=snapcraft.cmds.run) 

 

    parser = subparsers.add_parser( 

        'list-plugins', 

        help='list the available plugins that handle different types ' 

        'of a part') 

    parser.set_defaults(func=snapcraft.cmds.list_plugins) 

 

    parser = subparsers.add_parser( 

        'clean', 

        help='clean up the environment (to start from scratch)') 

    parser.set_defaults(func=snapcraft.cmds.clean) 

    parser.add_argument('parts', nargs='*', metavar='PART', 

                        help='specific part to clean') 

 

    parser = subparsers.add_parser('pull', help='get sources', 

                                   parents=[cmd_parser]) 

    parser.set_defaults(func=snapcraft.cmds.cmd) 

 

    parser = subparsers.add_parser('build', help='build parts', 

                                   parents=[cmd_parser]) 

    parser.set_defaults(func=snapcraft.cmds.cmd) 

 

    parser = subparsers.add_parser( 

        'stage', 

        help='put parts into staging area', parents=[cmd_parser]) 

    parser.set_defaults(func=snapcraft.cmds.cmd) 

 

    parser = subparsers.add_parser( 

        'snap', 

        help='put parts into snap area', 

        parents=[cmd_parser]) 

    parser.set_defaults(func=snapcraft.cmds.snap) 

 

    parser = subparsers.add_parser( 

        'assemble', 

        help='make snap package', parents=[force_parser], 

        aliases=['all']) 

    parser.set_defaults(func=snapcraft.cmds.assemble) 

 

    parser = subparsers.add_parser( 

        'version', help="show the program's version number and exit") 

    parser.add_argument('foo', action=_VersionAction, nargs='?', 

                        help=argparse.SUPPRESS) 

 

    parser = subparsers.add_parser( 

        'help', 

        usage=help.topic.__doc__, 

        help='obtain help for plugins and specific topics') 

    parser.set_defaults(func=help.topic) 

    parser.add_argument('topic', help='plugin name or topic to get help from') 

    parser.add_argument('--devel', action='store_true', 

                        help='show the development help') 

 

    # Now run parser 

 

    if len(sys.argv) < 2: 

        args = root_parser.parse_args(['all']) 

    else: 

        args = root_parser.parse_args() 

 

    if not hasattr(args, 'func'): 

        root_parser.print_help() 

        sys.exit(1) 

 

    args.func(args) 

    sys.exit(0)