diff lib/mod/src/de/masters_of_disaster/ant/tasks/calculatesize/CalculateSize.java @ 33:3d86f0391168

Work on improving the build system.
author David Barts <davidb@stashtea.com>
date Fri, 24 Apr 2020 19:45:57 -0700
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib/mod/src/de/masters_of_disaster/ant/tasks/calculatesize/CalculateSize.java	Fri Apr 24 19:45:57 2020 -0700
@@ -0,0 +1,94 @@
+package de.masters_of_disaster.ant.tasks.calculatesize;
+
+import java.io.File;
+import java.util.Enumeration;
+import java.util.Vector;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.taskdefs.MatchingTask;
+import org.apache.tools.ant.types.FileSet;
+
+/**
+ * Calculates the "Installed-Size" of a deb package for the "control"-file.
+ *
+ * @ant.task category="packaging"
+ */
+public class CalculateSize extends MatchingTask {
+    String realSizeProperty = null;
+    String diskSizeProperty = null;
+    Vector fileSets = new Vector();
+    File baseDir;
+
+    /**
+     * Add a new fileset
+     * 
+     * @return the fileset to be used as the nested element.
+     */
+    public FileSet createFileSet() {
+        FileSet fileSet = new FileSet();
+        fileSets.addElement(fileSet);
+        return fileSet;
+    }
+
+    /**
+     * This is the base directory to look in for things to include.
+     * 
+     * @param baseDir the base directory.
+     */
+    public void setBaseDir(File baseDir) {
+        this.baseDir = baseDir;
+        fileset.setDir(baseDir);
+    }
+
+    /**
+     * This is the property to set to the real size.
+     * 
+     * @param realSizeProperty The property to set to the real size
+     */
+    public void setRealSizeProperty(String realSizeProperty) {
+        this.realSizeProperty = realSizeProperty;
+    }
+
+    /**
+     * This is the property to set to the disk size.
+     * 
+     * @param diskSizeProperty The property to set to the disk size
+     */
+    public void setDiskSizeProperty(String diskSizeProperty) {
+        this.diskSizeProperty = diskSizeProperty;
+    }
+
+    /**
+     * do the business
+     * 
+     * @throws BuildException on error
+     */
+    public void execute() throws BuildException {
+        if ((null == realSizeProperty) && (null == diskSizeProperty)) {
+            throw new BuildException("realSizeProperty or diskSizeProperty must be set for <CalculateSize>");
+        }
+
+        if (null != baseDir) {
+            // add the main fileset to the list of filesets to process.
+            fileSets.addElement(fileset);
+        }
+
+        long realSize = 0;
+        long diskSize = 0;
+        for (Enumeration e=fileSets.elements() ; e.hasMoreElements() ; ) {
+            FileSet fileSet = (FileSet)e.nextElement();
+            String[] files = fileSet.getDirectoryScanner(getProject()).getIncludedFiles();
+            File fileSetDir = fileSet.getDir(getProject());
+            for (int i=0, c=files.length ; i<c ; i++) {
+                long fileLength = new File(fileSetDir,files[i]).length();
+                realSize += fileLength / 1024;
+                diskSize += (fileLength / 4096 + 1) * 4;
+            }
+        }
+        if (null != realSizeProperty) {
+            getProject().setNewProperty(realSizeProperty,Long.toString(realSize));
+        }
+        if (null != diskSizeProperty) {
+            getProject().setNewProperty(diskSizeProperty,Long.toString(diskSize));
+        }
+    }
+}