22
22
import sys, os, re, getopt, shutil, subprocess
23
from command import Command
23
from .command import Command
24
24
import stdhome.the as the
25
25
from stdhome.deployment import Deployment
28
28
class InitCommand( Command ):
33
self.vcs = the.config.default_vcs
31
36
def print_help( self ):
32
print "Usage: " + the.program.name + " init [URL] [--repo=REPO]"
37
print("Usage: " + the.program.name + " init [URL] [--repo=REPO]")
34
39
# 01234567890123456789012345678901234567890123456789012345678901234567890123456789
35
print "Initialise a local repository."
37
print "If an URL is given, the local reposity is a checkout of it (i.e., you can"
38
print "receive updates from it and changes you commit will be sent to it). The URL"
39
print "can take the form of a simple hostname, such as \"example.com\", or it can be a"
40
print "fully-qualified bazaar URL. (Actually, in the first case, where it is a simple"
41
print "hostname, it is internally expanded to scp://HOSTNAME/~/.stdhome/REPO)."
44
print " --quiet do not report changes to the home directory"
45
print " -r, --repo=REPO select the repo to check-out or create (defaults to 'home')"
46
print " -v, --verbose display information about what is being done"
47
print " --help display help and exit"
40
print("Initialise a local repository.")
42
print("If an URL is given, the local reposity is a checkout of it (i.e., you can")
43
print("receive updates from it and changes you commit will be sent to it). The URL")
44
print("can take the form of a simple hostname, such as \"example.com\", or it can be a")
45
print("fully-qualified bazaar URL. (Actually, in the first case, where it is a simple")
46
print("hostname, it is internally expanded to scp://HOSTNAME/~/.stdhome/REPO).")
49
print(" --quiet do not report changes to the home directory")
50
print(" -r, --repo=REPO select the repo to check-out or create (defaults to 'home')")
51
print(" -v, --verbose display information about what is being done")
52
print(" --vcs=VCS select the version control system")
53
print(" --help display help and exit")
51
57
def parse_command_line( self ):
52
58
opts, args = getopt.gnu_getopt(
53
59
sys.argv[ 1: ], "r:v",
54
[ "quiet", "repo=", "verbose", "help" ] )
60
[ "quiet", "repo=", "vcs=", "verbose", "help" ] )
55
61
for opt, optarg in opts:
56
62
if opt == "--quiet":
89
100
# expand url if it's a simple hostname
90
101
if re.search( '^[0-9a-zA-z.]+$', self.url ):
91
self.url = 'bzr+ssh://%s/%s/%s' % \
92
( self.url, the.dir, the.repo.name )
102
self.url = the.repo.vcs.expand_repo_url( self.url )
94
104
# initialise deployment (with an empty repo)
95
105
deployment = Deployment()
96
106
deployment.copy_in()
98
108
# perform bzr checkout
99
if the.verbose >= 1: print "checking out %s" % the.repo.dir
109
if the.verbose >= 1: print("checking out %s" % the.repo.dir)
101
111
the.repo.vcs.checkout( self.url )
102
except Exception as e:
104
114
# attempt to clean-up repo dir
106
shutil.rmtree( the.repo.full_dir )
115
if os.path.exists( the.repo.full_dir ):
117
shutil.rmtree( the.repo.full_dir )
130
141
# perform bzr init
131
if the.verbose >= 1: print 'initialising %s' % the.repo.dir
142
if the.verbose >= 1: print('initialising %s' % the.repo.dir)
133
144
the.repo.vcs.init()
134
except Exception as e:
136
147
# attempt to clean-up repo dir, and die
138
shutil.rmtree( the.repo.full_dir )
148
if os.path.exists( the.repo.full_dir ):
150
shutil.rmtree( the.repo.full_dir )