22
22
import sys, os, re, getopt, shutil, subprocess
23
import the, deployment
24
from deployment import Deployment
24
25
from subprocess import Popen
54
56
sys.argv[ 1: ], "r:v",
55
57
[ "repo=", "verbose", "help" ] )
56
58
for opt, optarg in opts:
57
if [ '--repo', '-r' ].count( opt ):
59
if opt in [ '--repo', '-r' ]:
58
60
if not re.match( '^[-a-zA-z0-9.]+$', optarg ):
61
raise the.program.FatalError(
60
62
'invalid repository name: ' + optarg )
62
elif [ '--verbose', '-v' ].count( opt ):
64
elif opt in [ '--verbose', '-v' ]:
64
66
elif opt == "--help":
82
# set up repo and check it *doesn't* already exists
79
83
the.set_repo( self.repo )
81
# repo dir must not already exist
82
84
the.repo.check_dir_exists( False )
84
86
# ensure our top-level directory exists
85
if not os.path.exists( the.expanded_dir ):
86
os.mkdir( the.expanded_dir )
87
if not os.path.exists( the.full_dir ):
88
os.mkdir( the.full_dir )
90
# checkout a remote repo, or create an empty local one?
90
93
# expand url if it's a simple hostname
93
96
( self.url, the.dir, the.repo.name )
95
98
# initialise deployment (with an empty repo)
96
deployment = Deployment( self.repo )
99
deployment = Deployment()
97
100
deployment.copy_in()
99
102
# perform bzr checkout
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 ]
103
if the.verbose: print "checking out %s" % the.repo.dir
105
the.repo.vcs.checkout( self.url )
106
except Exception as e:
107
# attempt to clean-up repo dir, and die
108
# attempt to clean-up repo dir
109
shutil.rmtree( the.repo.expanded_dir )
110
shutil.rmtree( the.repo.full_dir )
112
raise the.program.FatalError( 'checkout failed', out )
114
116
# perform deployment
115
deployment.copy_out()
118
deployment.copy_out()
119
except deployment.Conflict as e:
120
raise the.program.FatalError( e.msg )
119
124
# perform bzr init
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 ]
125
if the.verbose: print 'initialising %s' % the.repo.dir
128
except Exception as e:
127
130
# attempt to clean-up repo dir, and die
129
shutil.rmtree( the.repo.expanded_dir )
132
shutil.rmtree( the.repo.full_dir )
132
raise the.program.FatalError( 'init failed', out )