#!/usr/bin/env 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'"(//.*?)" -> "//tools:download_file"')
# TODO(davido): Remove this hack when Buck bugs are fixed:
# https://github.com/facebook/buck/issues/656
# https://github.com/facebook/buck/issues/658
JGIT = re.compile(r'//org.eclipse.jgit.*')
CELL = '//lib/jgit'

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 JGIT.match(n):
      n = CELL + n[1:]
    if args.src and n.endswith('__download_bin'):
      n = n[:-13] + '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)
