comparison carton.py @ 18:c6a03199d4bf

stub out package creation; next: to test this
author Jeff Hammel <jhammel@mozilla.com>
date Fri, 08 Jul 2011 17:19:25 -0700
parents b05f5f1ec26e
children 46882eaebb59
comparison
equal deleted inserted replaced
17:b05f5f1ec26e 18:c6a03199d4bf
13 """ 13 """
14 14
15 # imports 15 # imports
16 import os 16 import os
17 import sys 17 import sys
18 import subprocess
18 import tarfile 19 import tarfile
19 import tempfile 20 import tempfile
20 import urllib2 21 import urllib2
21 from optparse import OptionParser 22 from optparse import OptionParser
22 from StringIO import StringIO 23 from StringIO import StringIO
71 if 'virtualenv.py' in files: 72 if 'virtualenv.py' in files:
72 virtualenv = os.path.join(root, 'virtualenv.py') 73 virtualenv = os.path.join(root, 'virtualenv.py')
73 break 74 break
74 else: 75 else:
75 raise Exception("virtualenv.py not found in " + tempdir) 76 raise Exception("virtualenv.py not found in " + tempdir)
76 print virtualenv
77 77
78 # create the virtualenv 78 # create the virtualenv
79 os.environ.pop('PYTHONHOME', None) 79 os.environ.pop('PYTHONHOME', None)
80 call([sys.executable, virtualenv, ENV]) 80 call([sys.executable, virtualenv, ENV])
81 81
126 """ 126 """
127 127
128 def isURL(path): 128 def isURL(path):
129 return path.startswith('http://') or path.startswith('https://') 129 return path.startswith('http://') or path.startswith('https://')
130 130
131 try:
132 call = subprocess.check_call
133 except AttributeError:
134 # old python; boo :(
135 call = subprocess.call
136
131 def main(args=sys.argv[1:]): 137 def main(args=sys.argv[1:]):
132 138
133 # parse CLI arguments 139 # parse CLI arguments
134 parser = OptionParser(usage=usage, description=__doc__) 140 parser = OptionParser(usage=usage, description=__doc__)
135 parser.add_option('-o', dest='outfile', 141 parser.add_option('-o', dest='outfile',
136 help="specify outfile; otherwise it will come from environment_name") 142 help="specify outfile; otherwise it will come from environment_name")
143 parser.add_option('-p', '--package', dest='package',
144 action='store_true', default=False,
145 help="create python packages from sources; do not take entire subdirectory")
137 parser.add_option('--virtualenv', dest='virtualenv', 146 parser.add_option('--virtualenv', dest='virtualenv',
138 help="use this virtualenv URL or file tarball") 147 help="use this virtualenv URL or file tarball")
139 options, args = parser.parse_args(args) 148 options, args = parser.parse_args(args)
140 if len(args) < 2: 149 if len(args) < 2:
141 parser.print_usage() 150 parser.print_usage()
153 162
154 if isURL(source): 163 if isURL(source):
155 # remote tarball or resource 164 # remote tarball or resource
156 buffer = urllib2.urlopen(source).read() 165 buffer = urllib2.urlopen(source).read()
157 else: 166 else:
167 # local directory or tarball
158 assert os.path.exists(source), "%s does not exist" % source 168 assert os.path.exists(source), "%s does not exist" % source
169
170 # package up the source if applicable
171 if options.package and os.path.exists(os.path.join(source, 'setup.py')):
172 call([sys.executable, 'setup.py', 'sdist'], cwd=source)
173 dist_dir = os.path.join(source, 'dist')
174 assert os.path.isdir(dist_dir), "dist directory not created in %s" % source
175 tarfiles = [i for i in os.listdir(dist_dir)
176 if i.endswith('.tar.gz')]
177 assert tarfiles, "no .tar.gz files found in %s" % dist_dir
178 def last_modified(filename):
179 return os.path.getmtime(os.path.join(dist_dir, filename))
180 tarfiles.sort(key=last_modified)
181 source = os.path.join(dist_dir, tarfiles[-1])
159 182
160 # local directory or tarball
161 if (not os.path.isdir(source)) and tarfile.is_tarfile(source): 183 if (not os.path.isdir(source)) and tarfile.is_tarfile(source):
162 # check for a tarball 184 # check for a tarball
163 buffer = file(source).read() 185 buffer = file(source).read()
164 else: 186 else:
165 source_buffer = StringIO() 187 source_buffer = StringIO()