| OLD | NEW |
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 """Does one of the following depending on the --mode argument: | 6 """Does one of the following depending on the --mode argument: |
| 7 check verify all the inputs exist, touches the file specified with | 7 check verify all the inputs exist, touches the file specified with |
| 8 --result and exits. | 8 --result and exits. |
| 9 hashtable puts a manifest file and hard links each of the inputs into the | 9 hashtable puts a manifest file and hard links each of the inputs into the |
| 10 output directory. | 10 output directory. |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 114 print >> sys.stderr, 'Using first input %s as executable' % infiles[0] | 114 print >> sys.stderr, 'Using first input %s as executable' % infiles[0] |
| 115 cmd = [infiles[0]] | 115 cmd = [infiles[0]] |
| 116 outdir = None | 116 outdir = None |
| 117 try: | 117 try: |
| 118 outdir = tempfile.mkdtemp(prefix='isolate') | 118 outdir = tempfile.mkdtemp(prefix='isolate') |
| 119 tree_creator.recreate_tree( | 119 tree_creator.recreate_tree( |
| 120 outdir, indir, infiles, tree_creator.HARDLINK) | 120 outdir, indir, infiles, tree_creator.HARDLINK) |
| 121 if read_only: | 121 if read_only: |
| 122 tree_creator.make_writable(outdir, True) | 122 tree_creator.make_writable(outdir, True) |
| 123 | 123 |
| 124 # TODO(maruel): Remove me. Layering violation. Used by | |
| 125 # base/base_paths_linux.cc | |
| 126 env = os.environ.copy() | |
| 127 env['CR_SOURCE_ROOT'] = outdir.encode() | |
| 128 # Rebase the command to the right path. | 124 # Rebase the command to the right path. |
| 129 cmd[0] = os.path.join(outdir, cmd[0]) | 125 cwd = os.path.join(outdir, os.path.relpath(os.getcwd(), indir)) |
| 130 logging.info('Running %s' % cmd) | 126 logging.info('Running %s, cwd=%s' % (cmd, cwd)) |
| 131 result = subprocess.call(cmd, cwd=outdir, env=env) | 127 result = subprocess.call(cmd, cwd=cwd) |
| 132 if not result and resultfile: | 128 if not result and resultfile: |
| 133 # Signal the build tool that the test succeeded. | 129 # Signal the build tool that the test succeeded. |
| 134 touch(resultfile) | 130 touch(resultfile) |
| 135 return result | 131 return result |
| 136 finally: | 132 finally: |
| 137 if read_only: | 133 if read_only: |
| 138 tree_creator.make_writable(outdir, False) | 134 tree_creator.make_writable(outdir, False) |
| 139 rmtree(outdir) | 135 rmtree(outdir) |
| 140 | 136 |
| 141 | 137 |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 174 help='File to be touched when the command succeeds') | 170 help='File to be touched when the command succeeds') |
| 175 parser.add_option( | 171 parser.add_option( |
| 176 '--root', metavar='DIR', help='Base directory to fetch files, required') | 172 '--root', metavar='DIR', help='Base directory to fetch files, required') |
| 177 parser.add_option( | 173 parser.add_option( |
| 178 '--outdir', metavar='DIR', | 174 '--outdir', metavar='DIR', |
| 179 help='Directory used to recreate the tree or store the hash table. ' | 175 help='Directory used to recreate the tree or store the hash table. ' |
| 180 'Defaults to a /tmp subdirectory for modes run and remap.') | 176 'Defaults to a /tmp subdirectory for modes run and remap.') |
| 181 parser.add_option( | 177 parser.add_option( |
| 182 '--read-only', action='store_true', | 178 '--read-only', action='store_true', |
| 183 help='Make the temporary tree read-only') | 179 help='Make the temporary tree read-only') |
| 180 parser.add_option( |
| 181 '--files', metavar='FILE', |
| 182 help='File to be read containing input files') |
| 184 | 183 |
| 185 options, args = parser.parse_args() | 184 options, args = parser.parse_args() |
| 186 level = [logging.ERROR, logging.INFO, logging.DEBUG][min(2, options.verbose)] | 185 level = [logging.ERROR, logging.INFO, logging.DEBUG][min(2, options.verbose)] |
| 187 logging.basicConfig( | 186 logging.basicConfig( |
| 188 level=level, | 187 level=level, |
| 189 format='%(levelname)5s %(module)15s(%(lineno)3d): %(message)s') | 188 format='%(levelname)5s %(module)15s(%(lineno)3d): %(message)s') |
| 190 | 189 |
| 191 if not options.root: | 190 if not options.root: |
| 192 parser.error('--root is required.') | 191 parser.error('--root is required.') |
| 193 | 192 |
| 193 if options.files: |
| 194 args = [ |
| 195 i.decode('utf-8') |
| 196 for i in open(options.files, 'rb').read().splitlines() if i |
| 197 ] + args |
| 198 |
| 194 infiles, cmd = separate_inputs_command(args, options.root) | 199 infiles, cmd = separate_inputs_command(args, options.root) |
| 195 if not infiles: | 200 if not infiles: |
| 196 parser.error('Need at least one input file to map') | 201 parser.error('Need at least one input file to map') |
| 197 # Preprocess the input files. | 202 # Preprocess the input files. |
| 198 try: | 203 try: |
| 199 infiles, root = tree_creator.preprocess_inputs( | 204 infiles, root = tree_creator.preprocess_inputs( |
| 200 options.root, infiles, lambda x: re.match(r'.*\.(svn|pyc)$', x)) | 205 options.root, infiles, lambda x: re.match(r'.*\.(svn|pyc)$', x)) |
| 201 return isolate( | 206 return isolate( |
| 202 options.outdir, | 207 options.outdir, |
| 203 options.result, | 208 options.result, |
| 204 root, | 209 root, |
| 205 infiles, | 210 infiles, |
| 206 options.mode, | 211 options.mode, |
| 207 options.read_only, | 212 options.read_only, |
| 208 cmd) | 213 cmd) |
| 209 except tree_creator.MappingError, e: | 214 except tree_creator.MappingError, e: |
| 210 print >> sys.stderr, str(e) | 215 print >> sys.stderr, str(e) |
| 211 return 1 | 216 return 1 |
| 212 | 217 |
| 213 | 218 |
| 214 if __name__ == '__main__': | 219 if __name__ == '__main__': |
| 215 sys.exit(main()) | 220 sys.exit(main()) |
| OLD | NEW |