22
22
import sys, os, re, getopt, shutil, subprocess
23
from command import Command
24
import stdhome.the as the
25
from stdhome.deployment import Deployment
26
from stdhome.subprocess import Popen
29
class InitCommand( Command ):
23
import the, deployment
24
from subprocess import Popen
32
34
def print_help( self ):
53
54
sys.argv[ 1: ], "r:v",
54
55
[ "repo=", "verbose", "help" ] )
55
56
for opt, optarg in opts:
56
if opt in [ '--repo', '-r' ]:
57
if [ '--repo', '-r' ].count( opt ):
57
58
if not re.match( '^[-a-zA-z0-9.]+$', optarg ):
58
raise the.program.FatalError(
59
60
'invalid repository name: ' + optarg )
61
elif opt in [ '--verbose', '-v' ]:
62
elif [ '--verbose', '-v' ].count( opt ):
63
64
elif opt == "--help":
79
the.set_repo( self.repo )
79
# set up repo and check it *doesn't* already exists
81
# repo dir must not already exist
80
82
the.repo.check_dir_exists( False )
82
84
# ensure our top-level directory exists
83
if not os.path.exists( the.full_dir ):
84
os.mkdir( the.full_dir )
85
if not os.path.exists( the.expanded_dir ):
86
os.mkdir( the.expanded_dir )
86
# checkout a remote repo, or create an empty local one?
89
90
# expand url if it's a simple hostname
92
93
( self.url, the.dir, the.repo.name )
94
95
# initialise deployment (with an empty repo)
95
deployment = Deployment()
96
deployment = Deployment( self.repo )
96
97
deployment.copy_in()
98
99
# perform bzr checkout
99
if the.verbose: print "checking out %s" % the.repo.dir
101
the.repo.vcs.checkout( self.url )
102
except Exception as e:
100
print "checking out %s" % the.repo.dir
101
p = Popen( [ 'bzr', 'co', self.url, the.repo.name ],
102
cwd = the.expanded_dir,
103
stdout = subprocess.PIPE, stderr = subprocess.STDOUT )
104
out = p.communicate()[ 0 ]
104
# attempt to clean-up repo dir
107
# attempt to clean-up repo dir, and die
106
shutil.rmtree( the.repo.full_dir )
109
shutil.rmtree( the.repo.expanded_dir )
112
raise the.program.FatalError( 'checkout failed', out )
112
114
# perform deployment
114
deployment.copy_out()
115
except deployment.Conflict as e:
116
raise the.program.FatalError( e.msg )
115
deployment.copy_out()
120
119
# perform bzr init
121
if the.verbose: print 'initialising %s' % the.repo.dir
124
except Exception as e:
120
print 'creating %s' % the.repo.dir
121
p = Popen( [ 'bzr', 'init', the.repo.name ],
122
cwd = the.expanded_dir,
123
stdout = subprocess.PIPE, stderr = subprocess.STDOUT )
124
out = p.communicate()[ 0 ]
126
127
# attempt to clean-up repo dir, and die
128
shutil.rmtree( the.repo.full_dir )
129
shutil.rmtree( the.repo.expanded_dir )
132
raise the.program.FatalError( 'init failed', out )