import com.github.sardine.*
import com.github.sardine.impl.*
import groovy.io.*

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.github.lookfirst:sardine:5.0.1'
    }
}

task htmlPush {
    //inputs.files syncDoc.inputs.files

    doLast {
        def sardine = SardineFactory.begin(System.getProperty('groovy.deploy.username'), System.getProperty('groovy.deploy.password'))
        def serverBase = "https://dav.codehaus.org/groovy/"
        //sardine.list(serverBase).each {println it}
        def copyConf = ["gapi":file("$buildDir/allgroovydoc"), "api":file("$buildDir/alljavadoc")]

        copyConf.each { targetDirPart, base ->
            def basePath = base.canonicalPath
            base.eachFileRecurse {
                def name = it.canonicalPath.substring(basePath.length()+1)
                def target = serverBase+targetDirPart+"/"+name
                if (it.directory) {
                    println "MKCOL $target"
                    try {
                        sardine.createDirectory(target+"/");
                    } catch (SardineException se) {
                        //ignore 405, thrown for existing directories
                        if (se.statusCode != 405) throw se 
                    }
                } else {
                    println "PUT $target"
                    sardine.put (target, it.newInputStream())
                }
                
            }
        }
    }
}
