Mercurial > hg > carton
comparison carton.py @ 11:e6a62ba0c24d
now respect the order sources are installed in
| author | Jeff Hammel <jhammel@mozilla.com> |
|---|---|
| date | Fri, 08 Jul 2011 15:02:44 -0700 |
| parents | 79f332fb3275 |
| children | 542b46ac4e28 |
comparison
equal
deleted
inserted
replaced
| 10:d1f090c5f291 | 11:e6a62ba0c24d |
|---|---|
| 44 # virtualenv name | 44 # virtualenv name |
| 45 ENV='''%(ENV)s''' | 45 ENV='''%(ENV)s''' |
| 46 | 46 |
| 47 # packed files | 47 # packed files |
| 48 VIRTUAL_ENV='''%(VIRTUAL_ENV)s'''.decode('base64').decode('zlib') | 48 VIRTUAL_ENV='''%(VIRTUAL_ENV)s'''.decode('base64').decode('zlib') |
| 49 PACKAGE_SOURCES='''%(PACKAGE_SOURCES)s'''.decode('base64').decode('zlib') | 49 PACKAGE_SOURCES=%(PACKAGE_SOURCES)s |
| 50 | 50 |
| 51 # unpack virtualenv | 51 # unpack virtualenv |
| 52 tempdir = tempfile.mkdtemp() | 52 tempdir = tempfile.mkdtemp() |
| 53 buffer = StringIO() | 53 buffer = StringIO() |
| 54 buffer.write(VIRTUAL_ENV) | 54 buffer.write(VIRTUAL_ENV) |
| 66 print virtualenv | 66 print virtualenv |
| 67 | 67 |
| 68 # create the virtualenv | 68 # create the virtualenv |
| 69 call([sys.executable, virtualenv, ENV]) | 69 call([sys.executable, virtualenv, ENV]) |
| 70 | 70 |
| 71 # unpack the sources | |
| 72 srcdir = os.path.join(ENV, 'src') | |
| 73 os.mkdir(srcdir) | |
| 74 buffer = StringIO() | |
| 75 buffer.write(PACKAGE_SOURCES) | |
| 76 buffer.seek(0) | |
| 77 tf = tarfile.open(mode='r', fileobj=buffer) | |
| 78 tf.extractall(srcdir) | |
| 79 | |
| 80 # find the bin/scripts directory | 71 # find the bin/scripts directory |
| 81 for i in ('bin', 'Scripts'): | 72 for i in ('bin', 'Scripts'): |
| 82 scripts_dir = os.path.abspath(os.path.join(ENV, i)) | 73 scripts_dir = os.path.abspath(os.path.join(ENV, i)) |
| 83 if os.path.exists(scripts_dir): | 74 if os.path.exists(scripts_dir): |
| 84 break | 75 break |
| 91 if os.path.exists(python): | 82 if os.path.exists(python): |
| 92 break | 83 break |
| 93 else: | 84 else: |
| 94 raise Exception("python not found in " + scripts_dir) | 85 raise Exception("python not found in " + scripts_dir) |
| 95 | 86 |
| 96 # activate the virtualenv | 87 # unpack the sources and setup for development |
| 97 #activate = os.path.join(scripts_dir, 'activate_this.py') | 88 srcdir = os.path.join(ENV, 'src') |
| 98 #assert os.path.exists(activate), activate + " does not exist" | 89 os.mkdir(srcdir) |
| 99 #execfile(activate, dict(__file__=activate)) | 90 setup_pys = set() |
| 91 for source in PACKAGE_SOURCES: | |
| 92 source = source.decode('base64').decode('zlib') | |
| 93 buffer = StringIO() | |
| 94 buffer.write(source) | |
| 95 buffer.seek(0) | |
| 96 tf = tarfile.open(mode='r', fileobj=buffer) | |
| 97 tf.extractall(srcdir) | |
| 100 | 98 |
| 101 # setup the sources for development | 99 # setup sources for development if there are any new setup.py files |
| 102 for i in os.listdir(srcdir): | 100 for i in os.listdir(srcdir): |
| 103 subdir = os.path.join(srcdir, i) | 101 if i in setup_pys: |
| 104 if os.path.exists(os.path.join(srcdir, i, 'setup.py')): | 102 continue |
| 105 call([python, 'setup.py', 'develop'], cwd=subdir) | 103 subdir = os.path.join(srcdir, i) |
| 104 if os.path.exists(os.path.join(srcdir, i, 'setup.py')): | |
| 105 call([python, 'setup.py', 'develop'], cwd=subdir) | |
| 106 setup_pys.add(i) | |
| 106 | 107 |
| 107 # cleanup tempdir | 108 # cleanup tempdir # TODO (optionally?) |
| 108 # shutil.rmtree(tempdir) | 109 # shutil.rmtree(tempdir) |
| 109 | 110 |
| 110 # TODO: | 111 # TODO: |
| 111 # - add carton to the virtualenv (!) | 112 # - add carton to the virtualenv (!) |
| 112 # - add virtualenv to the virtualenv (!) | 113 # - add virtualenv to the virtualenv (!) |
| 132 # stop on .py; will add it in later | 133 # stop on .py; will add it in later |
| 133 environment = environment[:-3] | 134 environment = environment[:-3] |
| 134 sources = args[1:] | 135 sources = args[1:] |
| 135 | 136 |
| 136 # tar up the sources | 137 # tar up the sources |
| 137 source_buffer = StringIO() | 138 source_array = [] |
| 138 sources_tar = tarfile.open(mode="w:gz", fileobj=source_buffer) | |
| 139 for source in sources: | 139 for source in sources: |
| 140 buffer = None | |
| 140 | 141 |
| 141 if isURL(source): | 142 if isURL(source): |
| 142 # remote tarball | 143 # remote tarball |
| 143 raise NotImplementedError | 144 raise NotImplementedError |
| 144 else: | 145 else: |
| 145 # local directory or tarball | 146 # local directory or tarball |
| 146 sources_tar.add(source, arcname=os.path.basename(source)) | 147 # TODO: check for a tarball |
| 148 source_buffer = StringIO() | |
| 149 source_tar = tarfile.open(mode="w:gz", fileobj=source_buffer) | |
| 150 source_tar.add(source, arcname=os.path.basename(source)) | |
| 151 source_tar.close() | |
| 152 buffer = source_buffer.getvalue() | |
| 153 | |
| 147 # could use git, hg, etc repos. but probably shouldn't | 154 # could use git, hg, etc repos. but probably shouldn't |
| 148 sources_tar.close() | 155 |
| 156 source_array.append(buffer.encode('zlib').encode('base64')) | |
| 149 | 157 |
| 150 # tar up virtualenv if not available | 158 # tar up virtualenv if not available |
| 151 if options.virtualenv: | 159 if options.virtualenv: |
| 152 if isURL(options.virtualenv): | 160 if isURL(options.virtualenv): |
| 153 globals()['VIRTUAL_ENV'] = urllib2.urlopen(options.virtualenv).read() | 161 globals()['VIRTUAL_ENV'] = urllib2.urlopen(options.virtualenv).read() |
| 168 outfile = options.outfile | 176 outfile = options.outfile |
| 169 if outfile is None: | 177 if outfile is None: |
| 170 outfile = environment + '.py' | 178 outfile = environment + '.py' |
| 171 variables = {'VIRTUAL_ENV': VIRTUAL_ENV.encode('zlib').encode('base64'), | 179 variables = {'VIRTUAL_ENV': VIRTUAL_ENV.encode('zlib').encode('base64'), |
| 172 'ENV': environment, | 180 'ENV': environment, |
| 173 'PACKAGE_SOURCES': source_buffer.getvalue().encode('zlib').encode('base64')} | 181 'PACKAGE_SOURCES': repr(source_array)} |
| 174 f = file(outfile, 'w') | 182 f = file(outfile, 'w') |
| 175 f.write(template % variables) | 183 f.write(template % variables) |
| 176 f.close() | 184 f.close() |
| 177 try: | 185 try: |
| 178 os.chmod(outfile, 0755) | 186 os.chmod(outfile, 0755) |
