Author: kevj Date: Sat Jun 2 22:35:33 2007 New Revision: 543843 URL: http://svn.apache.org/viewvc?view=rev&rev=543843 Log: -add checksum & remove tasks
Added: ant/sandbox/antlibs/debian/trunk/src/main/org/apache/ant/debian/ChecksumTask.java ant/sandbox/antlibs/debian/trunk/src/main/org/apache/ant/debian/RemoveDpkg.java ant/sandbox/antlibs/debian/trunk/src/tests/antunit/checksum-test.xml Modified: ant/sandbox/antlibs/debian/trunk/src/main/org/apache/ant/debian/BuildDpkg.java ant/sandbox/antlibs/debian/trunk/src/main/org/apache/ant/debian/antlib.xml Modified: ant/sandbox/antlibs/debian/trunk/src/main/org/apache/ant/debian/BuildDpkg.java URL: http://svn.apache.org/viewvc/ant/sandbox/antlibs/debian/trunk/src/main/org/apache/ant/debian/BuildDpkg.java?view=diff&rev=543843&r1=543842&r2=543843 ============================================================================== --- ant/sandbox/antlibs/debian/trunk/src/main/org/apache/ant/debian/BuildDpkg.java (original) +++ ant/sandbox/antlibs/debian/trunk/src/main/org/apache/ant/debian/BuildDpkg.java Sat Jun 2 22:35:33 2007 @@ -54,7 +54,11 @@ if (null == packageName || packageName.length() == 0) { log("You haven't specified a package name, the file will be created under ["+dir+"]."); } - //TODO add checks for missing control file, and package name checks + File controlFile = new File(dir.getAbsolutePath()+File.separator+"DEBIAN"+File.separator+"control"); + if (!controlFile.canRead()) { + throw new BuildException("Cannot read control file ["+controlFile+"]."); + } + //TODO add checks for missing control file, and package name checks, and MD5 checks } public File getDir() { Added: ant/sandbox/antlibs/debian/trunk/src/main/org/apache/ant/debian/ChecksumTask.java URL: http://svn.apache.org/viewvc/ant/sandbox/antlibs/debian/trunk/src/main/org/apache/ant/debian/ChecksumTask.java?view=auto&rev=543843 ============================================================================== --- ant/sandbox/antlibs/debian/trunk/src/main/org/apache/ant/debian/ChecksumTask.java (added) +++ ant/sandbox/antlibs/debian/trunk/src/main/org/apache/ant/debian/ChecksumTask.java Sat Jun 2 22:35:33 2007 @@ -0,0 +1,175 @@ +/* + * 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. + * + */ +package org.apache.ant.debian; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.FileInputStream; +import java.util.Iterator; +import java.security.DigestInputStream; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +import org.apache.tools.ant.Task; +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.util.StringUtils; +import org.apache.tools.ant.util.FileUtils; +import org.apache.tools.ant.types.FileSet; +import org.apache.tools.ant.types.ResourceCollection; +import org.apache.tools.ant.types.resources.Union; +import org.apache.tools.ant.types.resources.Restrict; +import org.apache.tools.ant.types.resources.FileResource; +import org.apache.tools.ant.types.resources.selectors.Type; + +/** + * Creates a single file with the checksums (MD5 by default) + * of the files specified. Note different from the core + * <checksum> task. + */ +public class ChecksumTask extends Task { + + private String algorithm = "MD5"; + + private File output; + + /** + * Resource Collection. + */ + private FileUnion resources = null; + + private MessageDigest messageDigest; + + public void execute() throws BuildException { + validate(); + try { + messageDigest = MessageDigest.getInstance(algorithm); + } catch(NoSuchAlgorithmException e) { + throw new BuildException(e); + } + if (messageDigest == null) { + throw new BuildException("Unable to create Message Digest", getLocation()); + } + createChecksums(); + } + + private void validate() throws BuildException { + if(resources == null || resources.size() == 0) { + throw new BuildException("You must specify some resources to create the checksums for."); + } + if(!resources.isFilesystemOnly()) { + throw new BuildException("Cannot create a checksum for non file-based resources."); + } + + if (output == null) { + throw new BuildException("You must specify an output file."); + } + //TODO add more checks + } + + /** + * Creates the checksums and writes them to the output file + * This is an adaptation & simplyfied version of the standard + * Checksum task in Ant. + * @throws BuildException + */ + private void createChecksums() throws BuildException { + FileOutputStream os = null; + FileInputStream is = null; + DigestInputStream dis = null; + byte[] buffer = new byte[8 * 1024]; + try { + os = new FileOutputStream(output); + for(Iterator i = resources.iterator(); i.hasNext();) { + messageDigest.reset(); + File src = ((FileResource)i.next()).getFile(); + is = new FileInputStream(src); + dis = new DigestInputStream(is, messageDigest); + while (dis.read(buffer, 0, 8 * 1024) != -1) { /* do nothing */} + dis.close(); + is.close(); + is = null; + byte[] fileDigest = messageDigest.digest (); + String checksum = createDigestString(fileDigest); + os.write((checksum + " " + src.getName()).getBytes()); + os.write(StringUtils.LINE_SEP.getBytes()); + } + } catch (Exception e) { + throw new BuildException("Problem occured creating checksums",e); + } finally { + FileUtils.close(dis); + FileUtils.close(is); + FileUtils.close(os); + } + } + + private String createDigestString(byte[] fileDigest) { + StringBuffer checksumSb = new StringBuffer(); + for (int i = 0; i < fileDigest.length; i++) { + String hexStr = Integer.toHexString(0x00ff & fileDigest[i]); + if (hexStr.length() < 2) { + checksumSb.append("0"); + } + checksumSb.append(hexStr); + } + return checksumSb.toString(); + } + + /** + * Sets the digest algorithm, by default it's MD5 + * @param a algorithm to set + */ + public void setAlgorithm(String a) { + algorithm = a; + } + + public void setOutput(File o) { + output = o; + } + + /** + * Files to generate checksums for. + * @param set a fileset of files to generate checksums for. + */ + public void addFileset(FileSet set) { + add(set); + } + + /** + * Add a resource collection. + * @param rc the ResourceCollection to add. + */ + public void add(ResourceCollection rc) { + if (rc == null) { + return; + } + resources = (resources == null) ? new FileUnion() : resources; + resources.add(rc); + } + + private static class FileUnion extends Restrict { + private Union u; + FileUnion() { + u = new Union(); + super.add(u); + super.add(Type.FILE); + } + public void add(ResourceCollection rc) { + u.add(rc); + } + } +} \ No newline at end of file Added: ant/sandbox/antlibs/debian/trunk/src/main/org/apache/ant/debian/RemoveDpkg.java URL: http://svn.apache.org/viewvc/ant/sandbox/antlibs/debian/trunk/src/main/org/apache/ant/debian/RemoveDpkg.java?view=auto&rev=543843 ============================================================================== --- ant/sandbox/antlibs/debian/trunk/src/main/org/apache/ant/debian/RemoveDpkg.java (added) +++ ant/sandbox/antlibs/debian/trunk/src/main/org/apache/ant/debian/RemoveDpkg.java Sat Jun 2 22:35:33 2007 @@ -0,0 +1,63 @@ +/* + * 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. + * + */ +package org.apache.ant.debian; + +import org.apache.tools.ant.types.Commandline; +import org.apache.tools.ant.BuildException; + +/** + * Remove a debian package + */ +public class RemoveDpkg extends AbstractDpkgTask { + + /** the name of the .deb package to create */ + private String packageName; + + /** are we going to remove config files too ? */ + private boolean purge = false; + + public void execute() throws BuildException { + validate(); + Commandline c = new Commandline(); + c.setExecutable("dpkg"); + String[] args; + if(purge) { + args = new String[] { "--purge", packageName }; + } else { + args = new String[] { "--remove", packageName }; + } + c.addArguments(args); + super.addConfiguredCommandline(c); + super.execute(); + } + + private void validate() throws BuildException { + if((packageName == null || packageName.length() == 0)) { + throw new BuildException("You must specify a packagename."); + } + } + + /* setters */ + public void setPackageName(final String p) { + packageName = p; + } + + public void setPurge(final boolean p) { + purge = p; + } +} \ No newline at end of file Modified: ant/sandbox/antlibs/debian/trunk/src/main/org/apache/ant/debian/antlib.xml URL: http://svn.apache.org/viewvc/ant/sandbox/antlibs/debian/trunk/src/main/org/apache/ant/debian/antlib.xml?view=diff&rev=543843&r1=543842&r2=543843 ============================================================================== --- ant/sandbox/antlibs/debian/trunk/src/main/org/apache/ant/debian/antlib.xml (original) +++ ant/sandbox/antlibs/debian/trunk/src/main/org/apache/ant/debian/antlib.xml Sat Jun 2 22:35:33 2007 @@ -28,4 +28,12 @@ name="install" classname="org.apache.ant.debian.InstallDpkg" /> + <taskdef + name="remove" + classname="org.apache.ant.debian.RemoveDpkg" + /> + <taskdef + name="checksum" + classname="org.apache.ant.debian.ChecksumTask" + /> </antlib> Added: ant/sandbox/antlibs/debian/trunk/src/tests/antunit/checksum-test.xml URL: http://svn.apache.org/viewvc/ant/sandbox/antlibs/debian/trunk/src/tests/antunit/checksum-test.xml?view=auto&rev=543843 ============================================================================== --- ant/sandbox/antlibs/debian/trunk/src/tests/antunit/checksum-test.xml (added) +++ ant/sandbox/antlibs/debian/trunk/src/tests/antunit/checksum-test.xml Sat Jun 2 22:35:33 2007 @@ -0,0 +1,28 @@ +<?xml version="1.0"?> +<project default="all" basedir="../../../.." + xmlns:au="antlib:org.apache.ant.antunit" + xmlns:deb="antlib:org.apache.ant.debian"> + + <property name="output" value="${basedir}/ant-core-trunk/dist/md5sums"/> + + <target name="tearDown"> + <delete file="${output}"/> + </target> + + <target name="test-checksum"> + <au:assertFileDoesntExist file="${output}"/> + <deb:checksum output="${output}"> + <fileset dir="${basedir}/ant-core-trunk/dist"> + <include name="bin/*.*"/> + </fileset> + </deb:checksum> + <au:assertFileExists file="${output}"/> + </target> + + <target name="all"> + <au:antunit> + <fileset file="${ant.file}"/> + <au:plainlistener/> + </au:antunit> + </target> +</project> \ No newline at end of file --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]