/*
 *  Licensed to the Apache Software Foundation (ASF) under one
 *  or more contributor license agreements.  See the NOTICE file
 *  distributed with this work for additional information
 *  regarding copyright ownership.  The ASF licenses this file
 *  to you 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.
 */

def props = new Properties()
file("$projectDir/../gradle.properties").withInputStream {
    props.load(it)
}

defaultTasks 'bootstrap'

tasks.withType(Wrapper).configureEach {
    gradleVersion = props.gradle_version
}

tasks.register('bootstrap') {
    dependsOn 'wrapper'
    doLast {
        ant.move file: "${projectDir}/gradlew", todir: "${projectDir}/../"
        ant.move file: "${projectDir}/gradlew.bat", todir: "${projectDir}/../"
        ant.move file: "${projectDir}/gradle/wrapper", todir: "${projectDir}/../gradle/"
    }
}
