Mercurial > hg > truffle
comparison mxtool/mx.py @ 15895:a5c5b4aa79ca
mx: prevent CTRL-C from being blocked while subprocess is running
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Mon, 26 May 2014 11:47:30 +0200 |
parents | 11bf5b8973c9 |
children | c5f57314599d |
comparison
equal
deleted
inserted
replaced
15894:a9810ed7cad2 | 15895:a5c5b4aa79ca |
---|---|
1523 if callable(err): | 1523 if callable(err): |
1524 t = Thread(target=redirect, args=(p.stderr, err)) | 1524 t = Thread(target=redirect, args=(p.stderr, err)) |
1525 # Don't make the reader thread a daemon otherwise output can be droppped | 1525 # Don't make the reader thread a daemon otherwise output can be droppped |
1526 t.start() | 1526 t.start() |
1527 joiners.append(t) | 1527 joiners.append(t) |
1528 for t in joiners: | 1528 while any([t.is_alive() for t in joiners]): |
1529 t.join() | 1529 for t in joiners: |
1530 t.join(10) | |
1530 if timeout is None or timeout == 0: | 1531 if timeout is None or timeout == 0: |
1531 retcode = waitOn(p) | 1532 retcode = waitOn(p) |
1532 else: | 1533 else: |
1533 if get_os() == 'windows': | 1534 if get_os() == 'windows': |
1534 abort('Use of timeout not (yet) supported on Windows') | 1535 abort('Use of timeout not (yet) supported on Windows') |
3338 | 3339 |
3339 if _isAnnotationProcessorDependency(p): | 3340 if _isAnnotationProcessorDependency(p): |
3340 refreshFile = os.path.relpath(join(p.dir, p.name + '.jar'), logicalWorkspaceRoot) | 3341 refreshFile = os.path.relpath(join(p.dir, p.name + '.jar'), logicalWorkspaceRoot) |
3341 _genEclipseBuilder(out, p, 'Jar', 'archive ' + p.name, refresh=True, refreshFile=refreshFile, relevantResources=[binFolder], async=True, xmlIndent='', xmlStandalone='no') | 3342 _genEclipseBuilder(out, p, 'Jar', 'archive ' + p.name, refresh=True, refreshFile=refreshFile, relevantResources=[binFolder], async=True, xmlIndent='', xmlStandalone='no') |
3342 | 3343 |
3343 if projToDist.has_key(p.name): | |
3344 dist, distDeps = projToDist[p.name] | |
3345 _genEclipseBuilder(out, p, 'Create' + dist.name + 'Dist', 'archive @' + dist.name, relevantResources=[binFolder], logToFile=True, refresh=False, async=True) | |
3346 | |
3347 out.close('buildSpec') | 3344 out.close('buildSpec') |
3348 out.open('natures') | 3345 out.open('natures') |
3349 out.element('nature', data='org.eclipse.jdt.core.javanature') | 3346 out.element('nature', data='org.eclipse.jdt.core.javanature') |
3350 if exists(csConfig): | 3347 if exists(csConfig): |
3351 out.element('nature', data='net.sf.eclipsecs.core.CheckstyleNature') | 3348 out.element('nature', data='net.sf.eclipsecs.core.CheckstyleNature') |
3419 _, launchFile = make_eclipse_attach(suite, 'localhost', '8000', deps=sorted_deps(projectNames=None, includeLibs=True)) | 3416 _, launchFile = make_eclipse_attach(suite, 'localhost', '8000', deps=sorted_deps(projectNames=None, includeLibs=True)) |
3420 files.append(launchFile) | 3417 files.append(launchFile) |
3421 | 3418 |
3422 _zip_files(files, suite.dir, configZip.path) | 3419 _zip_files(files, suite.dir, configZip.path) |
3423 _zip_files(libFiles, suite.dir, configLibsZip) | 3420 _zip_files(libFiles, suite.dir, configLibsZip) |
3421 | |
3422 # Create an Eclipse project for each distribution that will create/update the archive | |
3423 # for the distribution whenever any project of the distribution is updated. | |
3424 for dist in suite.dists: | |
3425 name = dist.name | |
3426 # TODO: Support 'subDir' attribute in mx/projects? | |
3427 projectDir = join(suite.dir, dist.name + '.dist') | |
3428 if not exists(projectDir): | |
3429 os.makedirs(projectDir) | |
3430 distProjects = [d for d in dist.sorted_deps() if d.isProject()] | |
3431 relevantResources = [] | |
3432 for p in distProjects: | |
3433 for srcDir in p.source_dirs(): | |
3434 relevantResources.append(join(p.name, os.path.relpath(srcDir, p.dir))) | |
3435 relevantResources.append(join(p.name, os.path.relpath(p.output_dir(), p.dir))) | |
3436 out = XMLDoc() | |
3437 out.open('projectDescription') | |
3438 out.element('name', data=dist.name) | |
3439 out.element('comment', data='Updates ' + dist.path + ' if a project dependency of ' + dist.name + ' is updated') | |
3440 out.open('projects') | |
3441 for p in distProjects: | |
3442 out.element('project', data=p.name) | |
3443 out.close('projects') | |
3444 out.open('buildSpec') | |
3445 dist.dir = projectDir | |
3446 dist.javaCompliance = max([p.javaCompliance for p in distProjects]) | |
3447 _genEclipseBuilder(out, dist, 'Create' + dist.name + 'Dist', 'archive @' + dist.name, relevantResources=relevantResources, logToFile=True, refresh=False, async=True) | |
3448 out.close('buildSpec') | |
3449 out.open('natures') | |
3450 out.element('nature', data='org.eclipse.jdt.core.javanature') | |
3451 out.close('natures') | |
3452 out.close('projectDescription') | |
3453 projectFile = join(projectDir, '.project') | |
3454 update_file(projectFile, out.xml(indent='\t', newl='\n')) | |
3455 files.append(projectFile) | |
3424 | 3456 |
3425 def _zip_files(files, baseDir, zipPath): | 3457 def _zip_files(files, baseDir, zipPath): |
3426 fd, tmp = tempfile.mkstemp(suffix='', prefix=basename(zipPath), dir=baseDir) | 3458 fd, tmp = tempfile.mkstemp(suffix='', prefix=basename(zipPath), dir=baseDir) |
3427 try: | 3459 try: |
3428 zf = zipfile.ZipFile(tmp, 'w') | 3460 zf = zipfile.ZipFile(tmp, 'w') |