| BASE = get_base_path() | 
 | CORE = [ | 
 |   'commit-message-length-validator', | 
 |   'download-commands', | 
 |   'replication', | 
 |   'reviewnotes', | 
 | ] | 
 |  | 
 | # buck audit parses and resolves all deps even if not reachable | 
 | # from the root(s) passed to audit. Filter dependencies to only | 
 | # the ones that currently exist to allow buck to parse cleanly. | 
 | # TODO(sop): buck should more lazily resolve deps | 
 | def filter(names): | 
 |   from os import path | 
 |   h, n = [], [] | 
 |   for p in names: | 
 |     if path.exists(path.join(BASE, p, 'BUCK')): | 
 |       h.append(p) | 
 |     else: | 
 |       n.append(p) | 
 |   return h, n | 
 | HAVE, NEED = filter(CORE) | 
 |  | 
 | genrule( | 
 |   name = 'core', | 
 |   cmd = '' + | 
 |     ';'.join(['echo >&2 plugins/'+n+' is required.' for n in NEED]) + | 
 |     (';echo >&2;exit 1;' if NEED else '') + | 
 |     'mkdir -p $TMP/WEB-INF/plugins;' + | 
 |     'for s in $SRCS;do ln -s $s $TMP/WEB-INF/plugins;done;' + | 
 |     'cd $TMP;' + | 
 |     'zip -qr $OUT .', | 
 |   srcs = [genfile('%s/%s.jar' % (n, n)) for n in CORE], | 
 |   deps = ['//%s/%s:%s' % (BASE, n, n) for n in HAVE], | 
 |   out = 'core.zip', | 
 |   visibility = ['//:release'], | 
 | ) |