/*
 * 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.
 */
// upload anchor for subprojects to upload their artifacts to the local repo.
task(mainUpload)

task createArchive(type : Zip) {
    description "Creates a maven repository that includes just the libraries compiled in this" +
            " project, without any history from prebuilts."
    from rootProject.ext.supportRepoOut
    destinationDir rootProject.ext.distDir
    into 'm2repository'
    baseName = String.format("top-of-tree-m2repository-%s", project.ext.buildNumber)
    dependsOn mainUpload
}

task createDiffArchive(type : Zip) {
    description "Creates a maven repository that includes just the libraries compiled in this" +
            " project without any libraries that are already on maven.google.com. If you need " +
            " a full repo, use createArchive task."
    dependsOn mainUpload
    /**
     * building filters in a doFirst block so that we can query the output of other tasks and also
     * not query maven.google unless task runs.
     */
    doFirst {
        def includeFilters = subprojects.collect { it.tasks.withType(Upload) }.findResults {
            def group = it.project.group[0]
            def archiveName = it.project.name[0]
            def version = it.project.version[0]
            if (group == null || archiveName == null || version == null) {
                logger.info "null artifact info for ${it.project.path}"
                return null
            }
            def subFolder = group.replace('.', '/') + "/" + archiveName + "/" + version
            def localFolder = new File(rootProject.ext.supportRepoOut, subFolder)
            if (!localFolder.exists()) {
                // no reason to check, not even built
                logger.info "skipping $subFolder because it does not exist"
                return null
            }
            // query maven.google to check if it is released.
            if (rootProject.ext.versionChecker.isReleased(group, archiveName, version)) {
                logger.info "looks like $subFolder is released, skipping"
                return null
            } else {
                logger.info "adding $subFolder to partial maven zip because it cannot be found on" +
                        " maven.google.com"
            }
            return subFolder + "/**"
        }
        logger.info "include filters for diff maven zip ${includeFilters}"
        includeFilters.forEach {
            include it
        }
        if (includeFilters.isEmpty()) {
            // not providing any include would mean include everything so we provide a dummy
            // include constraint.
            include "do-not-include-anything"
        }
    }
    from rootProject.ext.supportRepoOut
    destinationDir rootProject.ext.distDir
    into 'm2repository'
    baseName = String.format("gmaven-diff-top-of-tree-m2repository-%s", project.ext.buildNumber)
    dependsOn mainUpload
}

// anchor for prepare repo. This is post unzip.
task prepareRepo() {
    description "This task clears the repo folder to ensure that we run a fresh build every" +
            " time we create arhives. Otherwise, snapshots will accumulate in the builds folder."
    doFirst {
        rootProject.ext.supportRepoOut.deleteDir()
        rootProject.ext.supportRepoOut.mkdirs()
    }
}