> OK, now that Ant1.6 has antlibs, it is time to think of the 
> next step: 
> auto download of antlibs and (perhaps) dependencies.
> 
> 1. Possible requirements
> 
> -allow users to specify the URLs of dependent antlibs

Why only AntLibs? Maybe resources in general (jars, AntLets, ...)


> -allow teams to provide an override point that specifies their location
of course :-)


I wrote a snippet for the download :-)

<project name="common-define-require">
    <scriptdef name="require" language="javascript">
        <attribute name="file"/>
        <attribute name="url"/>
        <![CDATA[
            // If 'file' is not present, download it from 'url'.
            // Maybe you have to set the proxy before with <setproxy>
            f = new java.io.File(attributes.get("file"));
            if (!f.exists()) {
                url = new java.net.URL(attributes.get("url"));
                get = project.createTask("get");
                get.setDest(f);
                get.setSrc(url);
                get.execute();
            }
        ]]>
    </scriptdef>
</project>


<property name="ant.test.lib" value="ant-testutil.jar"/>
<import file="${antcommon.dir}/define-require.xml"/>
<require file="${ant.test.lib}"
url="http://gump.covalent.net/jars/latest/ant/${ant.test.lib}"/>



> -secure download -only files from trusted sources are fetched.

- download the MD5 file and check for consistency

Have that :-)
But it´s longer so see at the buttom


> -caching of downloads, global or per-user

or per-project


> -go through proxies


> -allow antlib providers to move their files (handle redirects)
> -allow antlib providers to mirror, by having a mirror file that lists 
> possible sources
> -support private repositories (intranet/internet, https, 
> authenticated) 
> as well as public sources
> -make it easy to publish an antlib, and register it in the 
> ant central list

I had only a half ear on the thread, but Forrest a feature like
"autodownload
skin" which sounds  like the whole stuff here ...


> Anything else?

Be open to plug in another kind of repo. Not only file based. Maybe 
a scm tool (cvs, ...).


> 
> 2. What things implement this? What do Maven and Ruper do?

Yep. Talk with them. Maybe we can get their code ... or decide not to do
anything ...



> 3. do we want to integrate this with ant, or have some more standalone 
> tool that can be used to keep a component repository up to date, a tool 
> with an ant task for use in a build file. A sort of apt-getfor apache 
> stuff...

More something in the middle: an AntLib.



Jan






check-downloads.xml
------------------------------------------
<project default="main">

    <taskdef resource="net/sf/antcontrib/antcontrib.properties"/>

    <property name="result.file"
value="check-downloads-results.properties"/>
    <property file="check-downloads.properties"/>
    <property file="${result.file}"/>

    <target name="main">
        <setproxy proxyHost="${proxy.host}" proxyPort="${proxy.port}"/>
        <foreach list="${file.list}" param="file" target="checkFile"/>
    </target>

    <target name="checkFile"
depends="check.download,check.md5-1,check.md5-2" if="file"/>

    <target name="check.init">
        <property name="zip.file" value="${file}"/>
        <property name="md5.file" value="${file}.md5"/>
        <condition property="md5-ok"><isset
property="${zip.file}.isValid"/></condition>
        <condition property="download-ok">
            <and>
                <available file="${dest.dir}/${zip.file}"/>
                <available file="${dest.dir}/${md5.file}"/>
            </and>
        </condition>
    </target>

    <target name="check.download" unless="download-ok" depends="check.init">
        <echo>Download ${md5.file}</echo>
        <get src="${download.md5.dir}/${md5.file}"
dest="${dest.dir}/${md5.file}"/>
        <echo>Download ${zip.file}</echo>
        <get src="${download.zip.dir}/${zip.file}"
dest="${dest.dir}/${zip.file}"/>
    </target>

    <target name="check.md5-1" if="md5-ok" depends="check.init">
        <echo>${zip.file}: just processed</echo>
    </target>

    <target name="check.md5-2" unless="md5-ok" depends="check.init">
        <trycatch><try>
            <!-- what is the valid md5 value specified in the md5 file -->
            <loadfile srcFile="${md5.file}" property="md5.valid">
                <filterchain>
                    <striplinebreaks/>
                    <tokenfilter>
                        <stringtokenizer/>
                        <replaceregex pattern="${zip.file}" replace=""/>
                    </tokenfilter>
                    <tokenfilter>
                        <trim/>
                    </tokenfilter>
                </filterchain>
            </loadfile>
            <!-- what is the actual md5 value -->
            <checksum file="${zip.file}" property="md5.actual"/>
            <!-- compare them -->
            <condition property="md5.isValid">
                <equals arg1="${md5.valid}" arg2="${md5.actual}"/>
            </condition>
            <property name="md5.isValid" value="false"/>
            <!-- print the result -->
            <if>
                <istrue value="${md5.isValid}"/>
                <then>
                    <echo>${zip.file}: ok</echo>
                    <echo file="${result.file}"
                          append="true"
 
message="${zip.file}.isValid=true${line.separator}"/>
                </then>
                <else>
                    <echo>${zip.file}: Wrong MD5 checksum !!!</echo>
                    <echo>- expected: ${md5.valid}</echo>
                    <echo>- actual  : ${md5.actual}</echo>
                    <move file="${zip.file}"
tofile="${zip.file}.wrong-checksum"/>
                </else>
            </if>
        </try><catch/></trycatch>
    </target>

</project>



check-downloads.properties
--------------------------
download.zip.dir=ftp://sunsite.informatik.rwth-aachen.de/pub/mirror/eclipse/
S-3.0M5-200311211210/

download.md5.dir=ftp://sunsite.informatik.rwth-aachen.de/pub/mirror/eclipse/
S-3.0M5-200311211210/checksum/
dest.dir=.
file.list=eclipse-Automated-Tests-3.0M5.zip,eclipse-FTP-WebDAV-3.0M5.zip,ecl
ipse-JDT-3.0M5.zip,eclipse-SDK-3.0M5-win32.zip,eclipse-examples-3.0M5-win32.
zip,eclipse-examples-3.0M5.zip,eclipse-platform-3.0M5-win32.zip


proxy.host=A011-34
proxy.port=8080

Reply via email to