Merge "Fix download target to only download binary JARs"

This commit is contained in:
Shawn Pearce
2013-05-14 15:25:43 +00:00
committed by Gerrit Code Review
6 changed files with 82 additions and 10 deletions

View File

@@ -1,6 +1,7 @@
[alias]
api = //:api
download = //:download
download_sources = //:download_sources
gerrit = //:gerrit
eclipse = //tools/eclipse:eclipse
eclipse_project = //tools/eclipse:eclipse_project

16
BUCK
View File

@@ -42,12 +42,16 @@ java_library(
genrule(
name = 'download',
cmd = 'buck build ' +
'$(buck audit classpath --dot //tools/eclipse:classpath' +
'| egrep \'^ "//lib/\''+
'| cut -d\\" -f2' +
'| sort | uniq)',
cmd = '${//tools:download_all}',
srcs = [],
deps = [],
deps = ['//tools:download_all'],
out = '__fake.download__',
)
genrule(
name = 'download_sources',
cmd = '${//tools:download_all} --src',
srcs = [],
deps = ['//tools:download_all'],
out = '__fake.download__',
)

View File

@@ -71,6 +71,19 @@ building the `eclipse_project` and `download` targets:
----
Attaching Sources
~~~~~~~~~~~~~~~~~
To save time and bandwidth source JARs are only downloaded by the buck
build where necessary to compile Java source into JavaScript using the
GWT compiler. Additional sources may be obtained, allowing Eclipse to
show documentation or dive into the implementation of a library JAR:
----
buck build download_sources
----
Building on the Command Line
----------------------------

View File

@@ -72,7 +72,6 @@ def maven_jar(
deps = ['//tools:download_jar'],
out = binjar,
)
download = [':' + name + '__download_bin']
license = ['//lib:LICENSE-' + license]
if src_sha1 or attach_source:
@@ -90,16 +89,21 @@ def maven_jar(
prebuilt_jar(
name = name + '_src',
binary_jar = genfile(srcjar),
deps = [':' + name + '__download_src'] + license,
deps = license + [':' + name + '__download_src'],
visibility = visibility,
)
download.append(':' + name + '__download_src')
else:
srcjar = None
genrule(
name = name + '__download_src',
cmd = ':>$OUT',
srcs = [],
out = '__' + name + '__no_src',
)
prebuilt_jar(
name = name,
deps = deps + download + license,
deps = deps + license + [':' + name + '__download_bin'],
binary_jar = genfile(binjar),
source_jar = genfile(srcjar) if srcjar else None,
visibility = visibility,

View File

@@ -1,3 +1,9 @@
python_binary(
name = 'download_all',
main = 'download_all.py',
visibility = ['PUBLIC'],
)
python_binary(
name = 'download_jar',
main = 'download_jar.py',

44
tools/download_all.py Executable file
View File

@@ -0,0 +1,44 @@
#!/usr/bin/python
# Copyright (C) 2013 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from optparse import OptionParser
import re
from subprocess import check_call, CalledProcessError, Popen, PIPE
MAIN = ['//tools/eclipse:classpath']
PAT = re.compile(r'"(//.*?__download_[^"]*)" -> "//tools:download_jar"')
opts = OptionParser()
opts.add_option('--src', action='store_true')
args, _ = opts.parse_args()
targets = set()
p = Popen(['buck', 'audit', 'classpath', '--dot'] + MAIN, stdout = PIPE)
for line in p.stdout:
m = PAT.search(line)
if m:
n = m.group(1)
if args.src and n.endswith('__download_bin'):
n = n[:-4] + '_src'
targets.add(n)
r = p.wait()
if r != 0:
exit(r)
try:
check_call(['buck', 'build'] + sorted(targets))
except CalledProcessError as err:
exit(1)