/*
 * Copyright (C) 2017 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.
 */

import org.gradle.api.artifacts.dsl.RepositoryHandler;

def supportRoot = ext.supportRootFolder
if (supportRoot == null) {
    throw new RuntimeException("variable supportRootFolder is not set. you must set it before" +
            " including this script")
}

def checkoutRoot = "${supportRoot}/../.."
ext.repos = new Properties()
ext.repos.prebuiltsRoot = "${checkoutRoot}/prebuilts"
ext.repos.prebuiltsRootUri = "file://${repos.prebuiltsRoot}"

ext.repoNames = ["${repos.prebuiltsRoot}/gradle-plugin",
                 "${repos.prebuiltsRoot}/tools/common/m2/repository",
                 "${repos.prebuiltsRoot}/tools/common/m2/internal",
                 "${repos.prebuiltsRoot}/maven_repo/android"]

/**
 * Adds maven repositories to the given repository handler.
 */
def addMavenRepositories(RepositoryHandler handler) {
    repoNames.each { repo ->
        handler.maven {
            url repo
        }
    }
    if (System.getenv("ALLOW_PUBLIC_REPOS") != null) {
        handler.mavenCentral()
        handler.jcenter()
    }
    def androidPluginRepoOverride = System.getenv("GRADLE_PLUGIN_REPO")
    if (androidPluginRepoOverride != null) {
        handler.maven {
            url androidPluginRepoOverride
        }
    }
}

ext.repos.addMavenRepositories = this.&addMavenRepositories