<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -1,6 +1,6 @@
 o improve maven integration
 o descriptor fields shouldn't be case sensitive
-o add a &lt;link&gt; element to declare symlinks ? (see jRPM and https://issues.apache.org/bugzilla/show_bug.cgi?id=40059)
+o add a &lt;link&gt; element to declare symlinks? (see jRPM and https://issues.apache.org/bugzilla/show_bug.cgi?id=40059)
 o subversion log ChangesProvider
 o jira release notes ChangesProvider
 o fix the CRLF in the maintainer scripts, or break with a warning to have the user fix it</diff>
      <filename>TODO.txt</filename>
    </modified>
    <modified>
      <diff>@@ -22,5 +22,5 @@ package org.vafer.jdeb;
  */
 public interface Console {
 
-	void println( String s );
+    void println( String s );
 }</diff>
      <filename>src/main/java/org/vafer/jdeb/Console.java</filename>
    </modified>
    <modified>
      <diff>@@ -25,7 +25,7 @@ import java.io.InputStream;
  */
 public interface DataConsumer {
 
-	void onEachDir( String dirname, String linkname, String user, int uid, String group, int gid, int mode, long size ) throws IOException;
-	void onEachFile( InputStream input, String filename, String linkname, String user, int uid, String group, int gid, int mode, long size) throws IOException;
+    void onEachDir( String dirname, String linkname, String user, int uid, String group, int gid, int mode, long size ) throws IOException;
+    void onEachFile( InputStream input, String filename, String linkname, String user, int uid, String group, int gid, int mode, long size) throws IOException;
 
 }</diff>
      <filename>src/main/java/org/vafer/jdeb/DataConsumer.java</filename>
    </modified>
    <modified>
      <diff>@@ -24,6 +24,6 @@ import java.io.IOException;
  */
 public interface DataProducer {
 
-	void produce( DataConsumer receiver ) throws IOException;
+    void produce( DataConsumer receiver ) throws IOException;
 
 }</diff>
      <filename>src/main/java/org/vafer/jdeb/DataProducer.java</filename>
    </modified>
    <modified>
      <diff>@@ -22,22 +22,22 @@ package org.vafer.jdeb;
  */
 public final class PackagingException extends Exception {
 
-	private static final long serialVersionUID = 1L;
+    private static final long serialVersionUID = 1L;
 
-	public PackagingException() {
-		super();
-	}
+    public PackagingException() {
+        super();
+    }
 
-	public PackagingException(String message, Throwable cause) {
-		super(message, cause);
-	}
+    public PackagingException(String message, Throwable cause) {
+        super(message, cause);
+    }
 
-	public PackagingException(String message) {
-		super(message);
-	}
+    public PackagingException(String message) {
+        super(message);
+    }
 
-	public PackagingException(Throwable cause) {
-		super(cause);
-	}
+    public PackagingException(Throwable cause) {
+        super(cause);
+    }
 
 }</diff>
      <filename>src/main/java/org/vafer/jdeb/PackagingException.java</filename>
    </modified>
    <modified>
      <diff>@@ -57,413 +57,413 @@ import org.vafer.jdeb.utils.VariableResolver;
  */
 public class Processor {
 
-	private final Console console;
-	private final VariableResolver resolver;
-
-	private static final class Total {
-		private BigInteger count = BigInteger.valueOf(0);
-
-		public void add(long size) {
-			count = count.add(BigInteger.valueOf(size));
-		}
-
-		public String toString() {
-			return &quot;&quot; + count;
-		}
-
-		public BigInteger toBigInteger() {
-			return count;
-		}
-	}
-
-	public Processor( final Console pConsole, final VariableResolver pResolver ) {
-		console = pConsole;
-		resolver = pResolver;
-	}
-
-	private void addTo( final ArOutputStream pOutput, final String pName, final String pContent ) throws IOException {
-		final byte[] content = pContent.getBytes(); 
-		pOutput.putNextEntry(new ArEntry(pName, content.length));
-		pOutput.write(content);
-	}
-
-	private void addTo( final ArOutputStream pOutput, final String pName, final File pContent ) throws IOException {
-		pOutput.putNextEntry(new ArEntry(pName, pContent.length()));
-		
-		final InputStream input = new FileInputStream(pContent);
-		try {
-			Utils.copy(input, pOutput);
-		} finally {
-			input.close();
-		}
-	}
-	
-	/**
-	 * Create the debian archive with from the provided control files and data producers.
-	 * 
-	 * @param pControlFiles
-	 * @param pData
-	 * @param pOutput
-	 * @param compression the compression method used for the data file (gzip, bzip2 or anything else for no compression)
-	 * @return PackageDescriptor
-	 * @throws PackagingException
-	 */
-	public PackageDescriptor createDeb( final File[] pControlFiles, final DataProducer[] pData, final File pOutput, String compression ) throws PackagingException, InvalidDescriptorException {
-
-		File tempData = null;
-		File tempControl = null;
-
-		try {
-			tempData = File.createTempFile(&quot;deb&quot;, &quot;data&quot;);			
-			tempControl = File.createTempFile(&quot;deb&quot;, &quot;control&quot;);			
-
-			console.println(&quot;Building data&quot;);
-			final StringBuffer md5s = new StringBuffer();
-			final BigInteger size = buildData(pData, tempData, md5s, compression);
-
-			console.println(&quot;Building control&quot;);
-			final PackageDescriptor packageDescriptor = buildControl(pControlFiles, size, md5s, tempControl);
-
-			if (!packageDescriptor.isValid()) {
-				throw new InvalidDescriptorException(packageDescriptor);
-			}
-
-			final InformationOutputStream output = new InformationOutputStream(new FileOutputStream(pOutput), MessageDigest.getInstance(&quot;MD5&quot;));
-
-			final ArOutputStream ar = new ArOutputStream(output);
-
-			addTo(ar, &quot;debian-binary&quot;, &quot;2.0\n&quot;);
-			addTo(ar, &quot;control.tar.gz&quot;, tempControl);
-			addTo(ar, &quot;data.tar&quot; + getExtension(compression), tempData);
-			
-			ar.close();
-
-			// intermediate values
-			packageDescriptor.set(&quot;MD5&quot;, output.getMd5());
-			packageDescriptor.set(&quot;Size&quot;, &quot;&quot; + output.getSize());
-			packageDescriptor.set(&quot;File&quot;, pOutput.getName());
-
-			return packageDescriptor;
-
-		} catch(InvalidDescriptorException e) {
-			throw e;
-		} catch(Exception e) {
-			throw new PackagingException(&quot;Could not create deb package&quot;, e);
-		} finally {
-			if (tempData != null) {
-				if (!tempData.delete()) {
-					throw new PackagingException(&quot;Could not delete &quot; + tempData);					
-				}
-			}
-			if (tempControl != null) {
-				if (!tempControl.delete()) {
-					throw new PackagingException(&quot;Could not delete &quot; + tempControl);					
-				}
-			}
-		}
-	}
-
-	/**
-	 * Return the extension of a file compressed with the specified method.
-	 *
-	 * @param pCompression the compression method used
-	 * @return
-	 */
-	private String getExtension( final String pCompression ) {
-		if (&quot;gzip&quot;.equals(pCompression)) {
-			return &quot;.gz&quot;;
-		} else if (&quot;bzip2&quot;.equals(pCompression)) {
-			return &quot;.bz2&quot;;
-		} else {
-			return &quot;&quot;;
-		}
-	}
-
-	/**
-	 * Create changes file based on the provided PackageDescriptor.
-	 * If pRing, pKey and pPassphrase are provided the changes file will also be signed.
-	 * It returns a ChangesDescriptor reflecting the changes  
-	 * @param pPackageDescriptor
-	 * @param pChangesProvider
-	 * @param pRing
-	 * @param pKey
-	 * @param pPassphrase
-	 * @param pOutput
-	 * @return ChangesDescriptor
-	 * @throws IOException
-	 */
-	public ChangesDescriptor createChanges( final PackageDescriptor pPackageDescriptor, final ChangesProvider pChangesProvider, final InputStream pRing, final String pKey, final String pPassphrase, final OutputStream pOutput ) throws IOException, InvalidDescriptorException {
-
-		final ChangeSet[] changeSets = pChangesProvider.getChangesSets();
-		final ChangesDescriptor changesDescriptor = new ChangesDescriptor(pPackageDescriptor, changeSets);
-
-		changesDescriptor.set(&quot;Format&quot;, &quot;1.7&quot;);
-
-		if (changesDescriptor.get(&quot;Binary&quot;) == null) {
-			changesDescriptor.set(&quot;Binary&quot;, changesDescriptor.get(&quot;Package&quot;));
-		}
-
-		if (changesDescriptor.get(&quot;Source&quot;) == null) {
-			changesDescriptor.set(&quot;Source&quot;, changesDescriptor.get(&quot;Package&quot;));
-		}
-
-		if (changesDescriptor.get(&quot;Description&quot;) == null) {
-			changesDescriptor.set(&quot;Description&quot;, &quot;update to &quot; + changesDescriptor.get(&quot;Version&quot;));
-		}
-
-		final StringBuffer files = new StringBuffer(&quot;\n&quot;);
-		files.append(' ').append(changesDescriptor.get(&quot;MD5&quot;));
-		files.append(' ').append(changesDescriptor.get(&quot;Size&quot;));
-		files.append(' ').append(changesDescriptor.get(&quot;Section&quot;));
-		files.append(' ').append(changesDescriptor.get(&quot;Priority&quot;));
-		files.append(' ').append(changesDescriptor.get(&quot;File&quot;));			
-		changesDescriptor.set(&quot;Files&quot;, files.toString());
-
-		if (!changesDescriptor.isValid()) {
-			throw new InvalidDescriptorException(changesDescriptor);
-		}
-		
-		final String changes = changesDescriptor.toString();
-		//console.println(changes);
-
-		final byte[] changesBytes = changes.getBytes(&quot;UTF-8&quot;);
-
-		if (pRing == null || pKey == null || pPassphrase == null) {			
-			pOutput.write(changesBytes);
-			pOutput.close();			
-			return changesDescriptor;
-		}
-
-		console.println(&quot;Signing changes with key &quot; + pKey);
-
-		final InputStream input = new ByteArrayInputStream(changesBytes);
-
-		try {
-			SigningUtils.clearSign(input, pRing, pKey, pPassphrase, pOutput);		
-		} catch (Exception e) {
-			e.printStackTrace();
-		}
-
-		pOutput.close();
-
-		return changesDescriptor;
-	}
-
-	/**
-	 * Build control archive of the deb
-	 * @param pControlFiles
-	 * @param pDataSize
-	 * @param pChecksums
-	 * @param pOutput
-	 * @return
-	 * @throws FileNotFoundException
-	 * @throws IOException
-	 * @throws ParseException
-	 */
-	private PackageDescriptor buildControl( final File[] pControlFiles, final BigInteger pDataSize, final StringBuffer pChecksums, final File pOutput ) throws IOException, ParseException {
-
-		PackageDescriptor packageDescriptor = null;
-
-		final TarOutputStream outputStream = new TarOutputStream(new GZIPOutputStream(new FileOutputStream(pOutput)));
-		outputStream.setLongFileMode(TarOutputStream.LONGFILE_GNU);
-
-		for (int i = 0; i &lt; pControlFiles.length; i++) {
-			final File file = pControlFiles[i];
-
-			if (file.isDirectory()) {
-				continue;
-			}
-
-			final TarEntry entry = new TarEntry(file);
-
-			final String name = file.getName();
-
-			entry.setName(name);
-
-			if (&quot;control&quot;.equals(name)) {
-				packageDescriptor = new PackageDescriptor(new FileInputStream(file), resolver);
-
-				if (packageDescriptor.get(&quot;Date&quot;) == null) {
-					SimpleDateFormat fmt = new SimpleDateFormat(&quot;EEE, d MMM yyyy HH:mm:ss Z&quot;, Locale.ENGLISH); // Mon, 26 Mar 2007 11:44:04 +0200 (RFC 2822)
-					// FIXME Is this field allowed in package descriptors ?
-					packageDescriptor.set(&quot;Date&quot;, fmt.format(new Date()));
-				}
+    private final Console console;
+    private final VariableResolver resolver;
+
+    private static final class Total {
+        private BigInteger count = BigInteger.valueOf(0);
+
+        public void add(long size) {
+            count = count.add(BigInteger.valueOf(size));
+        }
+
+        public String toString() {
+            return &quot;&quot; + count;
+        }
+
+        public BigInteger toBigInteger() {
+            return count;
+        }
+    }
+
+    public Processor( final Console pConsole, final VariableResolver pResolver ) {
+        console = pConsole;
+        resolver = pResolver;
+    }
+
+    private void addTo( final ArOutputStream pOutput, final String pName, final String pContent ) throws IOException {
+        final byte[] content = pContent.getBytes(); 
+        pOutput.putNextEntry(new ArEntry(pName, content.length));
+        pOutput.write(content);
+    }
+
+    private void addTo( final ArOutputStream pOutput, final String pName, final File pContent ) throws IOException {
+        pOutput.putNextEntry(new ArEntry(pName, pContent.length()));
+        
+        final InputStream input = new FileInputStream(pContent);
+        try {
+            Utils.copy(input, pOutput);
+        } finally {
+            input.close();
+        }
+    }
+    
+    /**
+     * Create the debian archive with from the provided control files and data producers.
+     * 
+     * @param pControlFiles
+     * @param pData
+     * @param pOutput
+     * @param compression the compression method used for the data file (gzip, bzip2 or anything else for no compression)
+     * @return PackageDescriptor
+     * @throws PackagingException
+     */
+    public PackageDescriptor createDeb( final File[] pControlFiles, final DataProducer[] pData, final File pOutput, String compression ) throws PackagingException, InvalidDescriptorException {
+
+        File tempData = null;
+        File tempControl = null;
+
+        try {
+            tempData = File.createTempFile(&quot;deb&quot;, &quot;data&quot;);          
+            tempControl = File.createTempFile(&quot;deb&quot;, &quot;control&quot;);            
+
+            console.println(&quot;Building data&quot;);
+            final StringBuffer md5s = new StringBuffer();
+            final BigInteger size = buildData(pData, tempData, md5s, compression);
+
+            console.println(&quot;Building control&quot;);
+            final PackageDescriptor packageDescriptor = buildControl(pControlFiles, size, md5s, tempControl);
+
+            if (!packageDescriptor.isValid()) {
+                throw new InvalidDescriptorException(packageDescriptor);
+            }
+
+            final InformationOutputStream output = new InformationOutputStream(new FileOutputStream(pOutput), MessageDigest.getInstance(&quot;MD5&quot;));
+
+            final ArOutputStream ar = new ArOutputStream(output);
+
+            addTo(ar, &quot;debian-binary&quot;, &quot;2.0\n&quot;);
+            addTo(ar, &quot;control.tar.gz&quot;, tempControl);
+            addTo(ar, &quot;data.tar&quot; + getExtension(compression), tempData);
+            
+            ar.close();
+
+            // intermediate values
+            packageDescriptor.set(&quot;MD5&quot;, output.getMd5());
+            packageDescriptor.set(&quot;Size&quot;, &quot;&quot; + output.getSize());
+            packageDescriptor.set(&quot;File&quot;, pOutput.getName());
+
+            return packageDescriptor;
+
+        } catch(InvalidDescriptorException e) {
+            throw e;
+        } catch(Exception e) {
+            throw new PackagingException(&quot;Could not create deb package&quot;, e);
+        } finally {
+            if (tempData != null) {
+                if (!tempData.delete()) {
+                    throw new PackagingException(&quot;Could not delete &quot; + tempData);                   
+                }
+            }
+            if (tempControl != null) {
+                if (!tempControl.delete()) {
+                    throw new PackagingException(&quot;Could not delete &quot; + tempControl);                    
+                }
+            }
+        }
+    }
+
+    /**
+     * Return the extension of a file compressed with the specified method.
+     *
+     * @param pCompression the compression method used
+     * @return
+     */
+    private String getExtension( final String pCompression ) {
+        if (&quot;gzip&quot;.equals(pCompression)) {
+            return &quot;.gz&quot;;
+        } else if (&quot;bzip2&quot;.equals(pCompression)) {
+            return &quot;.bz2&quot;;
+        } else {
+            return &quot;&quot;;
+        }
+    }
+
+    /**
+     * Create changes file based on the provided PackageDescriptor.
+     * If pRing, pKey and pPassphrase are provided the changes file will also be signed.
+     * It returns a ChangesDescriptor reflecting the changes  
+     * @param pPackageDescriptor
+     * @param pChangesProvider
+     * @param pRing
+     * @param pKey
+     * @param pPassphrase
+     * @param pOutput
+     * @return ChangesDescriptor
+     * @throws IOException
+     */
+    public ChangesDescriptor createChanges( final PackageDescriptor pPackageDescriptor, final ChangesProvider pChangesProvider, final InputStream pRing, final String pKey, final String pPassphrase, final OutputStream pOutput ) throws IOException, InvalidDescriptorException {
+
+        final ChangeSet[] changeSets = pChangesProvider.getChangesSets();
+        final ChangesDescriptor changesDescriptor = new ChangesDescriptor(pPackageDescriptor, changeSets);
+
+        changesDescriptor.set(&quot;Format&quot;, &quot;1.7&quot;);
+
+        if (changesDescriptor.get(&quot;Binary&quot;) == null) {
+            changesDescriptor.set(&quot;Binary&quot;, changesDescriptor.get(&quot;Package&quot;));
+        }
+
+        if (changesDescriptor.get(&quot;Source&quot;) == null) {
+            changesDescriptor.set(&quot;Source&quot;, changesDescriptor.get(&quot;Package&quot;));
+        }
+
+        if (changesDescriptor.get(&quot;Description&quot;) == null) {
+            changesDescriptor.set(&quot;Description&quot;, &quot;update to &quot; + changesDescriptor.get(&quot;Version&quot;));
+        }
+
+        final StringBuffer files = new StringBuffer(&quot;\n&quot;);
+        files.append(' ').append(changesDescriptor.get(&quot;MD5&quot;));
+        files.append(' ').append(changesDescriptor.get(&quot;Size&quot;));
+        files.append(' ').append(changesDescriptor.get(&quot;Section&quot;));
+        files.append(' ').append(changesDescriptor.get(&quot;Priority&quot;));
+        files.append(' ').append(changesDescriptor.get(&quot;File&quot;));            
+        changesDescriptor.set(&quot;Files&quot;, files.toString());
+
+        if (!changesDescriptor.isValid()) {
+            throw new InvalidDescriptorException(changesDescriptor);
+        }
+        
+        final String changes = changesDescriptor.toString();
+        //console.println(changes);
+
+        final byte[] changesBytes = changes.getBytes(&quot;UTF-8&quot;);
+
+        if (pRing == null || pKey == null || pPassphrase == null) {         
+            pOutput.write(changesBytes);
+            pOutput.close();            
+            return changesDescriptor;
+        }
+
+        console.println(&quot;Signing changes with key &quot; + pKey);
+
+        final InputStream input = new ByteArrayInputStream(changesBytes);
+
+        try {
+            SigningUtils.clearSign(input, pRing, pKey, pPassphrase, pOutput);       
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        pOutput.close();
+
+        return changesDescriptor;
+    }
+
+    /**
+     * Build control archive of the deb
+     * @param pControlFiles
+     * @param pDataSize
+     * @param pChecksums
+     * @param pOutput
+     * @return
+     * @throws FileNotFoundException
+     * @throws IOException
+     * @throws ParseException
+     */
+    private PackageDescriptor buildControl( final File[] pControlFiles, final BigInteger pDataSize, final StringBuffer pChecksums, final File pOutput ) throws IOException, ParseException {
+
+        PackageDescriptor packageDescriptor = null;
+
+        final TarOutputStream outputStream = new TarOutputStream(new GZIPOutputStream(new FileOutputStream(pOutput)));
+        outputStream.setLongFileMode(TarOutputStream.LONGFILE_GNU);
+
+        for (int i = 0; i &lt; pControlFiles.length; i++) {
+            final File file = pControlFiles[i];
+
+            if (file.isDirectory()) {
+                continue;
+            }
+
+            final TarEntry entry = new TarEntry(file);
+
+            final String name = file.getName();
+
+            entry.setName(name);
+
+            if (&quot;control&quot;.equals(name)) {
+                packageDescriptor = new PackageDescriptor(new FileInputStream(file), resolver);
+
+                if (packageDescriptor.get(&quot;Date&quot;) == null) {
+                    SimpleDateFormat fmt = new SimpleDateFormat(&quot;EEE, d MMM yyyy HH:mm:ss Z&quot;, Locale.ENGLISH); // Mon, 26 Mar 2007 11:44:04 +0200 (RFC 2822)
+                    // FIXME Is this field allowed in package descriptors ?
+                    packageDescriptor.set(&quot;Date&quot;, fmt.format(new Date()));
+                }
 
-				if (packageDescriptor.get(&quot;Distribution&quot;) == null) {
-					packageDescriptor.set(&quot;Distribution&quot;, &quot;unknown&quot;);
-				}
+                if (packageDescriptor.get(&quot;Distribution&quot;) == null) {
+                    packageDescriptor.set(&quot;Distribution&quot;, &quot;unknown&quot;);
+                }
 
-				if (packageDescriptor.get(&quot;Urgency&quot;) == null) {
-					packageDescriptor.set(&quot;Urgency&quot;, &quot;low&quot;);
-				}
+                if (packageDescriptor.get(&quot;Urgency&quot;) == null) {
+                    packageDescriptor.set(&quot;Urgency&quot;, &quot;low&quot;);
+                }
 
-				final String debFullName = System.getenv(&quot;DEBFULLNAME&quot;);
-				final String debEmail = System.getenv(&quot;DEBEMAIL&quot;);
+                final String debFullName = System.getenv(&quot;DEBFULLNAME&quot;);
+                final String debEmail = System.getenv(&quot;DEBEMAIL&quot;);
 
-				if (debFullName != null &amp;&amp; debEmail != null) {
-					packageDescriptor.set(&quot;Maintainer&quot;, debFullName + &quot; &lt;&quot; + debEmail + &quot;&gt;&quot;);
-					console.println(&quot;Using maintainer from the environment variables.&quot;);
-				}
+                if (debFullName != null &amp;&amp; debEmail != null) {
+                    packageDescriptor.set(&quot;Maintainer&quot;, debFullName + &quot; &lt;&quot; + debEmail + &quot;&gt;&quot;);
+                    console.println(&quot;Using maintainer from the environment variables.&quot;);
+                }
 
-				continue;
-			}			
+                continue;
+            }           
 
-			final InputStream inputStream = new FileInputStream(file);
+            final InputStream inputStream = new FileInputStream(file);
 
-			outputStream.putNextEntry(entry);
+            outputStream.putNextEntry(entry);
 
-			Utils.copy(inputStream, outputStream);								
+            Utils.copy(inputStream, outputStream);                              
 
-			outputStream.closeEntry();
+            outputStream.closeEntry();
 
-			inputStream.close();
+            inputStream.close();
 
-		}
+        }
 
-		if (packageDescriptor == null) {
-			throw new FileNotFoundException(&quot;No control file in &quot; + Arrays.toString(pControlFiles));
-		}
+        if (packageDescriptor == null) {
+            throw new FileNotFoundException(&quot;No control file in &quot; + Arrays.toString(pControlFiles));
+        }
 
-		packageDescriptor.set(&quot;Installed-Size&quot;, pDataSize.divide(BigInteger.valueOf(1024)).toString());
+        packageDescriptor.set(&quot;Installed-Size&quot;, pDataSize.divide(BigInteger.valueOf(1024)).toString());
 
-		addEntry(&quot;control&quot;, packageDescriptor.toString(), outputStream);
+        addEntry(&quot;control&quot;, packageDescriptor.toString(), outputStream);
 
-		addEntry(&quot;md5sums&quot;, pChecksums.toString(), outputStream);
+        addEntry(&quot;md5sums&quot;, pChecksums.toString(), outputStream);
 
-		outputStream.close();
+        outputStream.close();
 
-		return packageDescriptor;
-	}
+        return packageDescriptor;
+    }
 
-	/**
-	 * Build the data archive of the deb from the provided DataProducers
-	 * @param pData
-	 * @param pOutput
-	 * @param pChecksums
-	 * @param pCompression the compression method used for the data file (gzip, bzip2 or anything else for no compression)
-	 * @return
-	 * @throws NoSuchAlgorithmException
-	 * @throws IOException
-	 */
-	BigInteger buildData( final DataProducer[] pData, final File pOutput, final StringBuffer pChecksums, String pCompression ) throws NoSuchAlgorithmException, IOException {
+    /**
+     * Build the data archive of the deb from the provided DataProducers
+     * @param pData
+     * @param pOutput
+     * @param pChecksums
+     * @param pCompression the compression method used for the data file (gzip, bzip2 or anything else for no compression)
+     * @return
+     * @throws NoSuchAlgorithmException
+     * @throws IOException
+     */
+    BigInteger buildData( final DataProducer[] pData, final File pOutput, final StringBuffer pChecksums, String pCompression ) throws NoSuchAlgorithmException, IOException {
 
-		OutputStream out = new FileOutputStream(pOutput);
-		if (&quot;gzip&quot;.equals(pCompression)) {
-			out = new GZIPOutputStream(out);
-		} else if (&quot;bzip2&quot;.equals(pCompression)) {
-			out.write(&quot;BZ&quot;.getBytes());
-			out = new CBZip2OutputStream(out);
-		}
-		
-		final TarOutputStream outputStream = new TarOutputStream(out);
-		outputStream.setLongFileMode(TarOutputStream.LONGFILE_GNU);
+        OutputStream out = new FileOutputStream(pOutput);
+        if (&quot;gzip&quot;.equals(pCompression)) {
+            out = new GZIPOutputStream(out);
+        } else if (&quot;bzip2&quot;.equals(pCompression)) {
+            out.write(&quot;BZ&quot;.getBytes());
+            out = new CBZip2OutputStream(out);
+        }
+        
+        final TarOutputStream outputStream = new TarOutputStream(out);
+        outputStream.setLongFileMode(TarOutputStream.LONGFILE_GNU);
 
-		final MessageDigest digest = MessageDigest.getInstance(&quot;MD5&quot;);
+        final MessageDigest digest = MessageDigest.getInstance(&quot;MD5&quot;);
 
-		final Total dataSize = new Total();
+        final Total dataSize = new Total();
 
-		final DataConsumer receiver = new DataConsumer() {
-			public void onEachDir( String dirname, String linkname, String user, int uid, String group, int gid, int mode, long size ) throws IOException {
+        final DataConsumer receiver = new DataConsumer() {
+            public void onEachDir( String dirname, String linkname, String user, int uid, String group, int gid, int mode, long size ) throws IOException {
 
-				if (!dirname.endsWith(&quot;/&quot;)) {
-					dirname = dirname + &quot;/&quot;;
-				}
+                if (!dirname.endsWith(&quot;/&quot;)) {
+                    dirname = dirname + &quot;/&quot;;
+                }
 
                 // ensure the path is like : ./foo/bar
                 if (dirname.startsWith(&quot;/&quot;)) {
-					dirname = &quot;.&quot; + dirname;
-				} else if (!dirname.startsWith(&quot;./&quot;)) {
+                    dirname = &quot;.&quot; + dirname;
+                } else if (!dirname.startsWith(&quot;./&quot;)) {
                     dirname = &quot;./&quot; + dirname;
                 }
 
                 TarEntry entry = new TarEntry(dirname);
 
-				// FIXME: link is in the constructor
-				entry.setUserName(user);
-				entry.setUserId(uid);
-				entry.setGroupName(group);
-				entry.setGroupId(gid);
-				entry.setMode(mode);
-				entry.setSize(0);
+                // FIXME: link is in the constructor
+                entry.setUserName(user);
+                entry.setUserId(uid);
+                entry.setGroupName(group);
+                entry.setGroupId(gid);
+                entry.setMode(mode);
+                entry.setSize(0);
 
-				outputStream.putNextEntry(entry);
+                outputStream.putNextEntry(entry);
 
-				console.println(&quot;dir: &quot; + dirname);
+                console.println(&quot;dir: &quot; + dirname);
 
-				outputStream.closeEntry();
-			}
+                outputStream.closeEntry();
+            }
 
-			public void onEachFile( InputStream inputStream, String filename, String linkname, String user, int uid, String group, int gid, int mode, long size ) throws IOException {
+            public void onEachFile( InputStream inputStream, String filename, String linkname, String user, int uid, String group, int gid, int mode, long size ) throws IOException {
 
                 // ensure the path is like : ./foo/bar
                 if (filename.startsWith(&quot;/&quot;)) {
-					filename = &quot;.&quot; + filename;
-				} else if (!filename.startsWith(&quot;./&quot;)) {
+                    filename = &quot;.&quot; + filename;
+                } else if (!filename.startsWith(&quot;./&quot;)) {
                     filename = &quot;./&quot; + filename;
                 }
 
-				TarEntry entry = new TarEntry(filename);
+                TarEntry entry = new TarEntry(filename);
 
-				// FIXME: link is in the constructor
-				entry.setUserName(user);
-				entry.setUserId(uid);
-				entry.setGroupName(group);
-				entry.setGroupId(gid);
-				entry.setMode(mode);
-				entry.setSize(size);
+                // FIXME: link is in the constructor
+                entry.setUserName(user);
+                entry.setUserId(uid);
+                entry.setGroupName(group);
+                entry.setGroupId(gid);
+                entry.setMode(mode);
+                entry.setSize(size);
 
-				outputStream.putNextEntry(entry);
+                outputStream.putNextEntry(entry);
 
-				dataSize.add(size);
+                dataSize.add(size);
 
-				digest.reset();
+                digest.reset();
 
-				Utils.copy(inputStream, new DigestOutputStream(outputStream, digest));
-				
-				final String md5 = Utils.toHex(digest.digest());
+                Utils.copy(inputStream, new DigestOutputStream(outputStream, digest));
+                
+                final String md5 = Utils.toHex(digest.digest());
 
-				outputStream.closeEntry();
+                outputStream.closeEntry();
 
-				console.println(
-						&quot;file:&quot; + entry.getName() +
-						&quot; size:&quot; + entry.getSize() +
-						&quot; mode:&quot; + entry.getMode() +
-						&quot; linkname:&quot; + entry.getLinkName() +
-						&quot; username:&quot; + entry.getUserName() +
-						&quot; userid:&quot; + entry.getUserId() +
-						&quot; groupname:&quot; + entry.getGroupName() +
-						&quot; groupid:&quot; + entry.getGroupId() +
-						&quot; modtime:&quot; + entry.getModTime() +
-						&quot; md5: &quot; + md5
-				);
+                console.println(
+                        &quot;file:&quot; + entry.getName() +
+                        &quot; size:&quot; + entry.getSize() +
+                        &quot; mode:&quot; + entry.getMode() +
+                        &quot; linkname:&quot; + entry.getLinkName() +
+                        &quot; username:&quot; + entry.getUserName() +
+                        &quot; userid:&quot; + entry.getUserId() +
+                        &quot; groupname:&quot; + entry.getGroupName() +
+                        &quot; groupid:&quot; + entry.getGroupId() +
+                        &quot; modtime:&quot; + entry.getModTime() +
+                        &quot; md5: &quot; + md5
+                );
 
-				pChecksums.append(md5).append(&quot; &quot;).append(entry.getName()).append('\n');
+                pChecksums.append(md5).append(&quot; &quot;).append(entry.getName()).append('\n');
 
-			}					
-		};
+            }                   
+        };
 
-		for (int i = 0; i &lt; pData.length; i++) {
-			final DataProducer data = pData[i];
-			data.produce(receiver);
-		}
+        for (int i = 0; i &lt; pData.length; i++) {
+            final DataProducer data = pData[i];
+            data.produce(receiver);
+        }
 
-		outputStream.close();
+        outputStream.close();
 
-		console.println(&quot;Total size: &quot; + dataSize);
+        console.println(&quot;Total size: &quot; + dataSize);
 
-		return dataSize.count;
-	}
+        return dataSize.count;
+    }
 
-	private static void addEntry( final String pName, final String pContent, final TarOutputStream pOutput ) throws IOException {
-		final byte[] data = pContent.getBytes(&quot;UTF-8&quot;);
+    private static void addEntry( final String pName, final String pContent, final TarOutputStream pOutput ) throws IOException {
+        final byte[] data = pContent.getBytes(&quot;UTF-8&quot;);
 
-		final TarEntry entry = new TarEntry(pName);
-		entry.setSize(data.length);
+        final TarEntry entry = new TarEntry(pName);
+        entry.setSize(data.length);
 
-		pOutput.putNextEntry(entry);
-		pOutput.write(data);
-		pOutput.closeEntry();		
-	}
+        pOutput.putNextEntry(entry);
+        pOutput.write(data);
+        pOutput.closeEntry();       
+    }
 
 
 }</diff>
      <filename>src/main/java/org/vafer/jdeb/Processor.java</filename>
    </modified>
    <modified>
      <diff>@@ -38,44 +38,44 @@ import org.vafer.jdeb.producers.DataProducerDirectory;
  */
 public final class Data extends PatternSet implements DataProducer {
 
-	private final Collection mapperWrapper = new ArrayList();
+    private final Collection mapperWrapper = new ArrayList();
 
-	private File src;
-		
-	public void setSrc( final File pSrc ) {
-		src = pSrc;
-	}
+    private File src;
+        
+    public void setSrc( final File pSrc ) {
+        src = pSrc;
+    }
 
-	public void addMapper( final Mapper pMapper ) {
-		mapperWrapper.add(pMapper);
-	}
-	
-	public void produce( final DataConsumer pReceiver ) throws IOException {
-		
-		if (!src.exists()) {
-			throw new FileNotFoundException(&quot;Data source not found : &quot; + src);
-		}
+    public void addMapper( final Mapper pMapper ) {
+        mapperWrapper.add(pMapper);
+    }
+    
+    public void produce( final DataConsumer pReceiver ) throws IOException {
+        
+        if (!src.exists()) {
+            throw new FileNotFoundException(&quot;Data source not found : &quot; + src);
+        }
 
-		org.vafer.jdeb.mapping.Mapper[] mappers = new org.vafer.jdeb.mapping.Mapper[mapperWrapper.size()];
-		final Iterator it = mapperWrapper.iterator();
-		for (int i = 0; i &lt; mappers.length; i++) {
-			mappers[i] = ((Mapper)it.next()).createMapper();
-		}
-		
-		if (src.isFile()) {
-			new DataProducerArchive(
-				src,
-				getIncludePatterns(getProject()),
-				getExcludePatterns(getProject()),
-				mappers
-				).produce(pReceiver);
-		} else {
-			new DataProducerDirectory(
-				src,
-				getIncludePatterns(getProject()),
-				getExcludePatterns(getProject()),
-				mappers
-				).produce(pReceiver);			
-		}
-	}
+        org.vafer.jdeb.mapping.Mapper[] mappers = new org.vafer.jdeb.mapping.Mapper[mapperWrapper.size()];
+        final Iterator it = mapperWrapper.iterator();
+        for (int i = 0; i &lt; mappers.length; i++) {
+            mappers[i] = ((Mapper)it.next()).createMapper();
+        }
+        
+        if (src.isFile()) {
+            new DataProducerArchive(
+                src,
+                getIncludePatterns(getProject()),
+                getExcludePatterns(getProject()),
+                mappers
+                ).produce(pReceiver);
+        } else {
+            new DataProducerDirectory(
+                src,
+                getIncludePatterns(getProject()),
+                getExcludePatterns(getProject()),
+                mappers
+                ).produce(pReceiver);           
+        }
+    }
 }</diff>
      <filename>src/main/java/org/vafer/jdeb/ant/Data.java</filename>
    </modified>
    <modified>
      <diff>@@ -38,199 +38,199 @@ import org.vafer.jdeb.producers.FileSetDataProducer;
  * 
  * @author Torsten Curdt &lt;tcurdt@vafer.org&gt;
  */
-		
+        
 public class DebAntTask extends MatchingTask {
 
-	/** The Debian package produced */
-	private File deb;
+    /** The Debian package produced */
+    private File deb;
 
-	/** The directory containing the control files to build the package */
-	private File control;
+    /** The directory containing the control files to build the package */
+    private File control;
 
-	/** The file containing the PGP keys */
-	private File keyring;
+    /** The file containing the PGP keys */
+    private File keyring;
 
-	/** The key to use in the keyring */
-	private String key;
+    /** The key to use in the keyring */
+    private String key;
 
-	/** The passphrase for the key to sign the changes file */
-	private String passphrase;
+    /** The passphrase for the key to sign the changes file */
+    private String passphrase;
 
-	/** The file to read the changes from */
-	private File changesIn;
+    /** The file to read the changes from */
+    private File changesIn;
 
-	/** The file where to write the changes to */
-	private File changesOut;
+    /** The file where to write the changes to */
+    private File changesOut;
 
-	/** The file where to write the changes of the changes input to */
-	private File changesSave;
+    /** The file where to write the changes of the changes input to */
+    private File changesSave;
 
-	/** The compression method used for the data file (none, gzip or bzip2) */
-	private String compression = &quot;gzip&quot;;
+    /** The compression method used for the data file (none, gzip or bzip2) */
+    private String compression = &quot;gzip&quot;;
 
-	/** Trigger the verbose mode detailing all operations */
-	private boolean verbose;
+    /** Trigger the verbose mode detailing all operations */
+    private boolean verbose;
 
-	private Collection dataProducers = new ArrayList();
+    private Collection dataProducers = new ArrayList();
 
 
-	public void setDestfile( File deb ) {
-    	this.deb = deb;
+    public void setDestfile( File deb ) {
+        this.deb = deb;
     }
     
     public void setControl( File control ) {
-    	this.control = control;
+        this.control = control;
     }
 
     public void setChangesIn( File changes ) {
-    	this.changesIn = changes;
+        this.changesIn = changes;
     }
 
     public void setChangesOut( File changes ) {
-    	this.changesOut = changes;
+        this.changesOut = changes;
     }
 
     public void setChangesSave( File changes ) {
-    	this.changesSave = changes;
+        this.changesSave = changes;
     }
 
     public void setKeyring( File keyring ) {
-    	this.keyring = keyring;
+        this.keyring = keyring;
     }
 
     public void setKey( String key ) {
-    	this.key = key;
+        this.key = key;
     }
     
     public void setPassphrase( String passphrase ) {
-    	this.passphrase = passphrase;
+        this.passphrase = passphrase;
     }
 
-	public void setCompression(String compression) {
-		this.compression = compression;
-	}
+    public void setCompression(String compression) {
+        this.compression = compression;
+    }
 
-	public void setVerbose(boolean verbose) {
-		this.verbose = verbose;
-	}
+    public void setVerbose(boolean verbose) {
+        this.verbose = verbose;
+    }
 
-	public void addFileSet(FileSet fileset) {
-		dataProducers.add(new FileSetDataProducer(fileset));
-	}
+    public void addFileSet(FileSet fileset) {
+        dataProducers.add(new FileSetDataProducer(fileset));
+    }
 
-	public void addTarFileSet(Tar.TarFileSet fileset) {
-		dataProducers.add(new FileSetDataProducer(fileset));
-	}
+    public void addTarFileSet(Tar.TarFileSet fileset) {
+        dataProducers.add(new FileSetDataProducer(fileset));
+    }
 
-	public void addData( Data data ) {
-    	dataProducers.add(data);
+    public void addData( Data data ) {
+        dataProducers.add(data);
     }
     
     private boolean isPossibleOutput( File file ) {
 
-    	if (file.exists()) {
-    		return file.isFile() &amp;&amp; file.canWrite();
-    	}
+        if (file.exists()) {
+            return file.isFile() &amp;&amp; file.canWrite();
+        }
 
-    	return true;
+        return true;
     }
     
-	public void execute() {
-		
-		if (control == null || !control.isDirectory()) {
-			throw new BuildException(&quot;You need to point the 'control' attribute to the control directory.&quot;);
-		}
-
-		if (changesIn != null) {
-			
-			if (!changesIn.isFile() || !changesIn.canRead()) {
-				throw new BuildException(&quot;The 'changesIn' attribute needs to point to a readable file. &quot; + changesIn + &quot; was not found/readable.&quot;);				
-			}
-
-			if (changesOut == null) {
-				throw new BuildException(&quot;A 'changesIn' without a 'changesOut' does not make much sense.&quot;);
-			}
-			
-			if (!isPossibleOutput(changesOut)) {
-				throw new BuildException(&quot;Cannot write the output for 'changesOut' to &quot; + changesOut);				
-			}
-
-			if (changesSave != null &amp;&amp; !isPossibleOutput(changesSave)) {
-				throw new BuildException(&quot;Cannot write the output for 'changesSave' to &quot; + changesSave);				
-			}
-			
-		} else {
-			if (changesOut != null || changesSave != null) {
-				throw new BuildException(&quot;The 'changesOut' or 'changesSave' attributes may only be used when there is a 'changesIn' specified.&quot;);							
-			}
-		}
-
-		if (!&quot;gzip&quot;.equals(compression) &amp;&amp; !&quot;bzip2&quot;.equals(compression) &amp;&amp; !&quot;none&quot;.equals(compression)) {
-			throw new BuildException(&quot;The compression method '&quot; + compression + &quot;' is not supported&quot;);
-		}
-				
-		if (dataProducers.size() == 0) {
-			throw new BuildException(&quot;You need to provide at least one reference to a tgz or directory with data.&quot;);
-		}
-
-		if (deb == null) {
-			throw new BuildException(&quot;You need to point the 'destfile' attribute to where the deb is supposed to be created.&quot;);
-		}
-		
-		final File[] controlFiles = control.listFiles();
-		
-		final DataProducer[] data = new DataProducer[dataProducers.size()];
-		dataProducers.toArray(data);
-		
-		final Processor processor = new Processor(new Console() {
-			public void println(String s) {
-				if (verbose) {
-					log(s);
-				}
-			}
-		}, null);
-		
-		final PackageDescriptor packageDescriptor;
-		try {
-			
-			log(&quot;Creating debian package: &quot; + deb);
-			
-			packageDescriptor = processor.createDeb(controlFiles, data, deb, compression);
-
-		} catch (Exception e) {
-			throw new BuildException(&quot;Failed to create debian package &quot; + deb, e);
-		}
-
-		final TextfileChangesProvider changesProvider;
-		
-		try {
-			if (changesOut == null) {
-				return;
-			}
-
-			log(&quot;Creating changes file: &quot; + changesOut);
-
-			// for now only support reading the changes form a textfile provider
-			changesProvider = new TextfileChangesProvider(new FileInputStream(changesIn), packageDescriptor);
-			
-			processor.createChanges(packageDescriptor, changesProvider, (keyring!=null)?new FileInputStream(keyring):null, key, passphrase, new FileOutputStream(changesOut));
-						
-		} catch (Exception e) {
-			throw new BuildException(&quot;Failed to create debian changes file &quot; + changesOut, e);
-		}
-
-		try {
-			if (changesSave == null) {
-				return;
-			}
-
-			log(&quot;Saving changes to file: &quot; + changesSave);
-
-			changesProvider.save(new FileOutputStream(changesSave));
-			
-		} catch (Exception e) {
-			throw new BuildException(&quot;Failed to save debian changes file &quot; + changesSave, e);
-		}
-				
-	}
+    public void execute() {
+        
+        if (control == null || !control.isDirectory()) {
+            throw new BuildException(&quot;You need to point the 'control' attribute to the control directory.&quot;);
+        }
+
+        if (changesIn != null) {
+            
+            if (!changesIn.isFile() || !changesIn.canRead()) {
+                throw new BuildException(&quot;The 'changesIn' attribute needs to point to a readable file. &quot; + changesIn + &quot; was not found/readable.&quot;);             
+            }
+
+            if (changesOut == null) {
+                throw new BuildException(&quot;A 'changesIn' without a 'changesOut' does not make much sense.&quot;);
+            }
+            
+            if (!isPossibleOutput(changesOut)) {
+                throw new BuildException(&quot;Cannot write the output for 'changesOut' to &quot; + changesOut);              
+            }
+
+            if (changesSave != null &amp;&amp; !isPossibleOutput(changesSave)) {
+                throw new BuildException(&quot;Cannot write the output for 'changesSave' to &quot; + changesSave);                
+            }
+            
+        } else {
+            if (changesOut != null || changesSave != null) {
+                throw new BuildException(&quot;The 'changesOut' or 'changesSave' attributes may only be used when there is a 'changesIn' specified.&quot;);                           
+            }
+        }
+
+        if (!&quot;gzip&quot;.equals(compression) &amp;&amp; !&quot;bzip2&quot;.equals(compression) &amp;&amp; !&quot;none&quot;.equals(compression)) {
+            throw new BuildException(&quot;The compression method '&quot; + compression + &quot;' is not supported&quot;);
+        }
+                
+        if (dataProducers.size() == 0) {
+            throw new BuildException(&quot;You need to provide at least one reference to a tgz or directory with data.&quot;);
+        }
+
+        if (deb == null) {
+            throw new BuildException(&quot;You need to point the 'destfile' attribute to where the deb is supposed to be created.&quot;);
+        }
+        
+        final File[] controlFiles = control.listFiles();
+        
+        final DataProducer[] data = new DataProducer[dataProducers.size()];
+        dataProducers.toArray(data);
+        
+        final Processor processor = new Processor(new Console() {
+            public void println(String s) {
+                if (verbose) {
+                    log(s);
+                }
+            }
+        }, null);
+        
+        final PackageDescriptor packageDescriptor;
+        try {
+            
+            log(&quot;Creating debian package: &quot; + deb);
+            
+            packageDescriptor = processor.createDeb(controlFiles, data, deb, compression);
+
+        } catch (Exception e) {
+            throw new BuildException(&quot;Failed to create debian package &quot; + deb, e);
+        }
+
+        final TextfileChangesProvider changesProvider;
+        
+        try {
+            if (changesOut == null) {
+                return;
+            }
+
+            log(&quot;Creating changes file: &quot; + changesOut);
+
+            // for now only support reading the changes form a textfile provider
+            changesProvider = new TextfileChangesProvider(new FileInputStream(changesIn), packageDescriptor);
+            
+            processor.createChanges(packageDescriptor, changesProvider, (keyring!=null)?new FileInputStream(keyring):null, key, passphrase, new FileOutputStream(changesOut));
+                        
+        } catch (Exception e) {
+            throw new BuildException(&quot;Failed to create debian changes file &quot; + changesOut, e);
+        }
+
+        try {
+            if (changesSave == null) {
+                return;
+            }
+
+            log(&quot;Saving changes to file: &quot; + changesSave);
+
+            changesProvider.save(new FileOutputStream(changesSave));
+            
+        } catch (Exception e) {
+            throw new BuildException(&quot;Failed to save debian changes file &quot; + changesSave, e);
+        }
+                
+    }
 }</diff>
      <filename>src/main/java/org/vafer/jdeb/ant/DebAntTask.java</filename>
    </modified>
    <modified>
      <diff>@@ -30,38 +30,38 @@ import org.vafer.jdeb.mapping.PrefixMapper;
  */
 public final class Mapper {
 
-	private String mtype;
-	private String prefix;
-	private int strip;
-	private File src;
-	
-	public void setType( final String pType ) {
-		mtype = pType;
-	}
-	
-	public void setPrefix( final String pPrefix ) {
-		prefix = pPrefix;
-	}
+    private String mtype;
+    private String prefix;
+    private int strip;
+    private File src;
+    
+    public void setType( final String pType ) {
+        mtype = pType;
+    }
+    
+    public void setPrefix( final String pPrefix ) {
+        prefix = pPrefix;
+    }
 
-	public void setStrip( final int pStrip ) {
-		strip = pStrip;
-	}
-		
-	public void setSrc( final File pSrc ) {
-		src = pSrc;
-	}
+    public void setStrip( final int pStrip ) {
+        strip = pStrip;
+    }
+        
+    public void setSrc( final File pSrc ) {
+        src = pSrc;
+    }
 
-	public org.vafer.jdeb.mapping.Mapper createMapper() {
-		if (&quot;prefix&quot;.equalsIgnoreCase(mtype)) {
-			return new PrefixMapper(strip, prefix);
-		} else if (&quot;ls&quot;.equalsIgnoreCase(mtype)) {
-			try {
-				return new LsMapper(new FileInputStream(src));
-			} catch (Exception e) {
-				e.printStackTrace();
-			}
-		}
-		return new NullMapper();
-	}
-	
+    public org.vafer.jdeb.mapping.Mapper createMapper() {
+        if (&quot;prefix&quot;.equalsIgnoreCase(mtype)) {
+            return new PrefixMapper(strip, prefix);
+        } else if (&quot;ls&quot;.equalsIgnoreCase(mtype)) {
+            try {
+                return new LsMapper(new FileInputStream(src));
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+        return new NullMapper();
+    }
+    
 }</diff>
      <filename>src/main/java/org/vafer/jdeb/ant/Mapper.java</filename>
    </modified>
    <modified>
      <diff>@@ -6,24 +6,24 @@ package org.vafer.jdeb.ar;
  */
 interface ArConstants {
 
-	static final byte[] HEADER = &quot;!&lt;arch&gt;\n&quot;.getBytes();
+    static final byte[] HEADER = &quot;!&lt;arch&gt;\n&quot;.getBytes();
 
-	static final byte[] ENTRY_TERMINATOR = &quot;`\012&quot;.getBytes();
+    static final byte[] ENTRY_TERMINATOR = &quot;`\012&quot;.getBytes();
 
-	static final int FIELD_SIZE_NAME = 16;
-	static final int FIELD_SIZE_LASTMODIFIED = 12;
-	static final int FIELD_SIZE_UID = 6;
-	static final int FIELD_SIZE_GID = 6;
-	static final int FIELD_SIZE_MODE = 8;
-	static final int FIELD_SIZE_LENGTH = 10;
+    static final int FIELD_SIZE_NAME = 16;
+    static final int FIELD_SIZE_LASTMODIFIED = 12;
+    static final int FIELD_SIZE_UID = 6;
+    static final int FIELD_SIZE_GID = 6;
+    static final int FIELD_SIZE_MODE = 8;
+    static final int FIELD_SIZE_LENGTH = 10;
 
-	static final int HEADER_SIZE =
-			FIELD_SIZE_NAME
-			+ FIELD_SIZE_LASTMODIFIED
-			+ FIELD_SIZE_UID
-			+ FIELD_SIZE_GID
-			+ FIELD_SIZE_MODE
-			+ FIELD_SIZE_LENGTH
-			+ ENTRY_TERMINATOR.length;
+    static final int HEADER_SIZE =
+            FIELD_SIZE_NAME
+            + FIELD_SIZE_LASTMODIFIED
+            + FIELD_SIZE_UID
+            + FIELD_SIZE_GID
+            + FIELD_SIZE_MODE
+            + FIELD_SIZE_LENGTH
+            + ENTRY_TERMINATOR.length;
 
 }</diff>
      <filename>src/main/java/org/vafer/jdeb/ar/ArConstants.java</filename>
    </modified>
    <modified>
      <diff>@@ -22,47 +22,47 @@ package org.vafer.jdeb.ar;
  */
 public final class ArEntry {
 
-	private final String name;
-	private int userId;
-	private int groupId;
-	private int mode;
-	private long lastModified;
-	private long length;
+    private final String name;
+    private int userId;
+    private int groupId;
+    private int mode;
+    private long lastModified;
+    private long length;
 
-	public ArEntry(String name, long length) {
-		this(name, length, 0, 0, 33188, System.currentTimeMillis());
-	}
+    public ArEntry(String name, long length) {
+        this(name, length, 0, 0, 33188, System.currentTimeMillis());
+    }
 
-	public ArEntry(String name, long length, int userId, int groupId, int mode, long lastModified) {
-		this.name = name;
-		this.length = length;
-		this.userId = userId;
-		this.groupId = groupId;
-		this.mode = mode;
-		this.lastModified = lastModified;
-	}
+    public ArEntry(String name, long length, int userId, int groupId, int mode, long lastModified) {
+        this.name = name;
+        this.length = length;
+        this.userId = userId;
+        this.groupId = groupId;
+        this.mode = mode;
+        this.lastModified = lastModified;
+    }
 
-	public String getName() {
-		return name;
-	}
+    public String getName() {
+        return name;
+    }
 
-	public int getUserId() {
-		return userId;
-	}
+    public int getUserId() {
+        return userId;
+    }
 
-	public int getGroupId() {
-		return groupId;
-	}
+    public int getGroupId() {
+        return groupId;
+    }
 
-	public int getMode() {
-		return mode;
-	}
+    public int getMode() {
+        return mode;
+    }
 
-	public long getLastModified() {
-		return lastModified;
-	}
+    public long getLastModified() {
+        return lastModified;
+    }
 
-	public long getLength() {
-		return length;
-	}
+    public long getLength() {
+        return length;
+    }
 }</diff>
      <filename>src/main/java/org/vafer/jdeb/ar/ArEntry.java</filename>
    </modified>
    <modified>
      <diff>@@ -25,76 +25,76 @@ import java.io.InputStream;
  */
 public class ArInputStream extends InputStream implements ArConstants {
 
-	private final InputStream input;
-	private long offset = 0;
-	
-	public ArInputStream( final InputStream pInput ) {
-		input = pInput;
-	}
-	
-	public ArEntry getNextEntry() throws IOException {
-		
-		if (offset == 0) {
-			final byte[] expected = HEADER;
-			final byte[] realized = new byte[expected.length]; 
-			final int read = input.read(realized);
-			if (read != expected.length) {
-				throw new IOException(&quot;failed to read header&quot;);
-			}
-			for (int i = 0; i &lt; expected.length; i++) {
-				if (expected[i] != realized[i]) {
-					throw new IOException(&quot;invalid header &quot; + new String(realized));
-				}
-			}
-		}
+    private final InputStream input;
+    private long offset = 0;
+    
+    public ArInputStream( final InputStream pInput ) {
+        input = pInput;
+    }
+    
+    public ArEntry getNextEntry() throws IOException {
+        
+        if (offset == 0) {
+            final byte[] expected = HEADER;
+            final byte[] realized = new byte[expected.length]; 
+            final int read = input.read(realized);
+            if (read != expected.length) {
+                throw new IOException(&quot;failed to read header&quot;);
+            }
+            for (int i = 0; i &lt; expected.length; i++) {
+                if (expected[i] != realized[i]) {
+                    throw new IOException(&quot;invalid header &quot; + new String(realized));
+                }
+            }
+        }
 
-		if (input.available() == 0) {
-			return null;
-		}
-				
-		if (offset % 2 != 0) {
-			read();
-		}
+        if (input.available() == 0) {
+            return null;
+        }
+                
+        if (offset % 2 != 0) {
+            read();
+        }
 
-		final byte[] name = new byte[FIELD_SIZE_NAME];
-		final byte[] lastmodified = new byte[FIELD_SIZE_LASTMODIFIED];
-		final byte[] userid = new byte[FIELD_SIZE_UID];
-		final byte[] groupid = new byte[FIELD_SIZE_GID];
-		final byte[] filemode = new byte[FIELD_SIZE_MODE];
-		final byte[] length = new byte[FIELD_SIZE_LENGTH];
-		
-		read(name);
-		read(lastmodified);
-		read(userid);
-		read(groupid);
-		read(filemode);
-		read(length);
+        final byte[] name = new byte[FIELD_SIZE_NAME];
+        final byte[] lastmodified = new byte[FIELD_SIZE_LASTMODIFIED];
+        final byte[] userid = new byte[FIELD_SIZE_UID];
+        final byte[] groupid = new byte[FIELD_SIZE_GID];
+        final byte[] filemode = new byte[FIELD_SIZE_MODE];
+        final byte[] length = new byte[FIELD_SIZE_LENGTH];
+        
+        read(name);
+        read(lastmodified);
+        read(userid);
+        read(groupid);
+        read(filemode);
+        read(length);
 
-		final byte[] expected = ENTRY_TERMINATOR;
-		final byte[] realized = new byte[expected.length];
-		final int read = input.read(realized);
-		if (read != expected.length) {
-			throw new IOException(&quot;failed to read entry header&quot;);
-		}
-		for (int i = 0; i &lt; expected.length; i++) {
-			if (expected[i] != realized[i]) {
-				throw new IOException(&quot;invalid entry header. not read the content?&quot;);
-			}
-		}
-		
-		return new ArEntry(new String(name).trim(), Long.parseLong(new String(length).trim()));
-	}
-	
-	
-	public int read() throws IOException {
-		final int ret = input.read();
-		offset++;
-		return ret;
-	}
+        final byte[] expected = ENTRY_TERMINATOR;
+        final byte[] realized = new byte[expected.length];
+        final int read = input.read(realized);
+        if (read != expected.length) {
+            throw new IOException(&quot;failed to read entry header&quot;);
+        }
+        for (int i = 0; i &lt; expected.length; i++) {
+            if (expected[i] != realized[i]) {
+                throw new IOException(&quot;invalid entry header. not read the content?&quot;);
+            }
+        }
+        
+        return new ArEntry(new String(name).trim(), Long.parseLong(new String(length).trim()));
+    }
+    
+    
+    public int read() throws IOException {
+        final int ret = input.read();
+        offset++;
+        return ret;
+    }
 
-	public void close() throws IOException {
-		input.close();
-		super.close();
-	}
+    public void close() throws IOException {
+        input.close();
+        super.close();
+    }
 
 }</diff>
      <filename>src/main/java/org/vafer/jdeb/ar/ArInputStream.java</filename>
    </modified>
    <modified>
      <diff>@@ -25,115 +25,115 @@ import java.io.OutputStream;
  */
 public class ArOutputStream extends OutputStream implements ArConstants {
 
-	private final OutputStream out;
-	private long archiveOffset = 0;
-	private long entryOffset = 0;
-	private ArEntry prevEntry;
-
-	public ArOutputStream( final OutputStream pOut ) {
-		out = pOut;
-	}
-
-	private long writeArchiveHeader() throws IOException {		
-		out.write(HEADER);
-		return HEADER.length;
-	}
-
-	private void closeEntry() throws IOException {
-		if ((entryOffset % 2) != 0) {
-        	write('\n');
-        	archiveOffset++;
-        }		
-	}
-	
-	public void putNextEntry( final ArEntry pEntry ) throws IOException {
-		
-		if (prevEntry == null) {
-			archiveOffset += writeArchiveHeader();			
-		} else {
-			if (prevEntry.getLength() != entryOffset) {
-				throw new IOException(&quot;length does not match entry (&quot; + prevEntry.getLength() + &quot; != &quot; + entryOffset);
-			}
-			
-			closeEntry();
-		}
-		
-		prevEntry = pEntry;
-		
-		archiveOffset += writeEntryHeader(pEntry);
-
-		entryOffset = 0;
-	}
-
-	/**
-	 * Write the data to the stream and pad the output
-	 * with white spaces up to the specified size.
-	 *
-	 * @param data	  the value to be written
-	 * @param size	  the total size of the output
-	 * @param fieldname the name of the field
-	 */
-	private void write(String data, int size, String fieldname) throws IOException {
-		if (data.length() &gt; size) {
-			throw new IOException(fieldname + &quot; too long&quot;);
-		}
-
-		long length = size - write(data);
-		for (int i = 0; i &lt; length; i++) {
-			write(' ');
-		}
-	}
-
-	private long write( final String data ) throws IOException {
-		final byte[] bytes = data.getBytes(&quot;ascii&quot;);
-		write(bytes);
-		return bytes.length;
-	}
-	
-	private long writeEntryHeader( final ArEntry entry ) throws IOException {
-
-		String n = entry.getName();
-		write(n, FIELD_SIZE_NAME, &quot;filename&quot;);
-
-		String m = &quot;&quot; + (entry.getLastModified() / 1000);
-		write(m, FIELD_SIZE_LASTMODIFIED, &quot;lastmodified&quot;);
-
-		String u = &quot;&quot; + entry.getUserId();
-		write(u, FIELD_SIZE_UID, &quot;userid&quot;);
-
-		String g = &quot;&quot; + entry.getGroupId();
-		write(g, FIELD_SIZE_GID, &quot;groupid&quot;);
-
-		String fm = Integer.toString(entry.getMode(), 8);
-		write(fm, FIELD_SIZE_MODE, &quot;filemode&quot;);
-
-		String s = &quot;&quot; + entry.getLength();
-		write(s, FIELD_SIZE_LENGTH, &quot;size&quot;);
-
-		write(ENTRY_TERMINATOR);
-		
-		return HEADER_SIZE;
-	}		
-	
-	public void write(int b) throws IOException {
-		out.write(b);
-		entryOffset++;
-	}
-
-	public void write(byte[] b, int off, int len) throws IOException {
-		out.write(b, off, len);
-		entryOffset += len;
-	}
-
-	public void write(byte[] b) throws IOException {
-		out.write(b);
-		entryOffset += b.length;
-	}
-
-	public void close() throws IOException {
-		closeEntry();
-		out.close();
-		prevEntry = null;
-	}
-	
+    private final OutputStream out;
+    private long archiveOffset = 0;
+    private long entryOffset = 0;
+    private ArEntry prevEntry;
+
+    public ArOutputStream( final OutputStream pOut ) {
+        out = pOut;
+    }
+
+    private long writeArchiveHeader() throws IOException {      
+        out.write(HEADER);
+        return HEADER.length;
+    }
+
+    private void closeEntry() throws IOException {
+        if ((entryOffset % 2) != 0) {
+            write('\n');
+            archiveOffset++;
+        }       
+    }
+    
+    public void putNextEntry( final ArEntry pEntry ) throws IOException {
+        
+        if (prevEntry == null) {
+            archiveOffset += writeArchiveHeader();          
+        } else {
+            if (prevEntry.getLength() != entryOffset) {
+                throw new IOException(&quot;length does not match entry (&quot; + prevEntry.getLength() + &quot; != &quot; + entryOffset);
+            }
+            
+            closeEntry();
+        }
+        
+        prevEntry = pEntry;
+        
+        archiveOffset += writeEntryHeader(pEntry);
+
+        entryOffset = 0;
+    }
+
+    /**
+     * Write the data to the stream and pad the output
+     * with white spaces up to the specified size.
+     *
+     * @param data    the value to be written
+     * @param size    the total size of the output
+     * @param fieldname the name of the field
+     */
+    private void write(String data, int size, String fieldname) throws IOException {
+        if (data.length() &gt; size) {
+            throw new IOException(fieldname + &quot; too long&quot;);
+        }
+
+        long length = size - write(data);
+        for (int i = 0; i &lt; length; i++) {
+            write(' ');
+        }
+    }
+
+    private long write( final String data ) throws IOException {
+        final byte[] bytes = data.getBytes(&quot;ascii&quot;);
+        write(bytes);
+        return bytes.length;
+    }
+    
+    private long writeEntryHeader( final ArEntry entry ) throws IOException {
+
+        String n = entry.getName();
+        write(n, FIELD_SIZE_NAME, &quot;filename&quot;);
+
+        String m = &quot;&quot; + (entry.getLastModified() / 1000);
+        write(m, FIELD_SIZE_LASTMODIFIED, &quot;lastmodified&quot;);
+
+        String u = &quot;&quot; + entry.getUserId();
+        write(u, FIELD_SIZE_UID, &quot;userid&quot;);
+
+        String g = &quot;&quot; + entry.getGroupId();
+        write(g, FIELD_SIZE_GID, &quot;groupid&quot;);
+
+        String fm = Integer.toString(entry.getMode(), 8);
+        write(fm, FIELD_SIZE_MODE, &quot;filemode&quot;);
+
+        String s = &quot;&quot; + entry.getLength();
+        write(s, FIELD_SIZE_LENGTH, &quot;size&quot;);
+
+        write(ENTRY_TERMINATOR);
+        
+        return HEADER_SIZE;
+    }       
+    
+    public void write(int b) throws IOException {
+        out.write(b);
+        entryOffset++;
+    }
+
+    public void write(byte[] b, int off, int len) throws IOException {
+        out.write(b, off, len);
+        entryOffset += len;
+    }
+
+    public void write(byte[] b) throws IOException {
+        out.write(b);
+        entryOffset += b.length;
+    }
+
+    public void close() throws IOException {
+        closeEntry();
+        out.close();
+        prevEntry = null;
+    }
+    
 }</diff>
      <filename>src/main/java/org/vafer/jdeb/ar/ArOutputStream.java</filename>
    </modified>
    <modified>
      <diff>@@ -27,75 +27,75 @@ import java.util.Date;
  */
 public final class ChangeSet {
 
-	private final String packageName;
-	private final String version;
-	private final Date date;
-	private final String distribution;
-	private final String urgency;
-	private final String changedBy;
-	private final String[] changes;
-	
-	public ChangeSet( String pPackageName, String pVersion, Date pDate, String pDistribution, String pUrgency, String pChangedBy, final String[] pChanges ) {
-		changes = pChanges;
-		packageName = pPackageName;
-		version = pVersion;
-		date = pDate;
-		distribution = pDistribution;
-		urgency = pUrgency;
-		changedBy = pChangedBy;
-	}
-	/*
+    private final String packageName;
+    private final String version;
+    private final Date date;
+    private final String distribution;
+    private final String urgency;
+    private final String changedBy;
+    private final String[] changes;
+    
+    public ChangeSet( String pPackageName, String pVersion, Date pDate, String pDistribution, String pUrgency, String pChangedBy, final String[] pChanges ) {
+        changes = pChanges;
+        packageName = pPackageName;
+        version = pVersion;
+        date = pDate;
+        distribution = pDistribution;
+        urgency = pUrgency;
+        changedBy = pChangedBy;
+    }
+    /*
      package (version) distribution(s); urgency=urgency
-     	    [optional blank line(s), stripped]
+            [optional blank line(s), stripped]
        * change details
          more change details
-     	    [blank line(s), included in output of dpkg-parsechangelog]
+            [blank line(s), included in output of dpkg-parsechangelog]
        * even more change details
-     	    [optional blank line(s), stripped]
+            [optional blank line(s), stripped]
       -- maintainer name &lt;email address&gt;[two spaces]  date
     */
-	
-	public static DateFormat createDateForma() {
-		return new SimpleDateFormat(&quot;HH:mm dd.MM.yyyy&quot;);
-	}
-	
-	public String getPackage() {
-		return packageName;
-	}
-	
-	public String getVersion() {
-		return version;
-	}
-	
-	public Date getDate() {
-		return date;
-	}
-	
-	public String getDistribution() {
-		return distribution;
-	}
-	
-	public String getUrgency() {
-		return urgency;
-	}
-	
-	public String getChangedBy() {
-		return changedBy;
-	}
-	
-	public String[] getChanges() {
-		return changes;
-	}
-	
-	public String toString() {
-		final StringBuffer sb = new StringBuffer();
+    
+    public static DateFormat createDateForma() {
+        return new SimpleDateFormat(&quot;HH:mm dd.MM.yyyy&quot;);
+    }
+    
+    public String getPackage() {
+        return packageName;
+    }
+    
+    public String getVersion() {
+        return version;
+    }
+    
+    public Date getDate() {
+        return date;
+    }
+    
+    public String getDistribution() {
+        return distribution;
+    }
+    
+    public String getUrgency() {
+        return urgency;
+    }
+    
+    public String getChangedBy() {
+        return changedBy;
+    }
+    
+    public String[] getChanges() {
+        return changes;
+    }
+    
+    public String toString() {
+        final StringBuffer sb = new StringBuffer();
 
-		sb.append(&quot; &quot;).append(getPackage()).append(&quot; (&quot;).append(getVersion()).append(&quot;) &quot;);
-		sb.append(getDistribution()).append(&quot;; urgency=&quot;).append(getUrgency());
-		for (int i = 0; i &lt; changes.length; i++) {
-			sb.append('\n').append(&quot; * &quot;).append(changes[i]);
-		}
+        sb.append(&quot; &quot;).append(getPackage()).append(&quot; (&quot;).append(getVersion()).append(&quot;) &quot;);
+        sb.append(getDistribution()).append(&quot;; urgency=&quot;).append(getUrgency());
+        for (int i = 0; i &lt; changes.length; i++) {
+            sb.append('\n').append(&quot; * &quot;).append(changes[i]);
+        }
 
-		return sb.toString();
-	}
+        return sb.toString();
+    }
 }</diff>
      <filename>src/main/java/org/vafer/jdeb/changes/ChangeSet.java</filename>
    </modified>
    <modified>
      <diff>@@ -16,5 +16,5 @@
 package org.vafer.jdeb.changes;
 
 public interface ChangesProvider {
-	ChangeSet[] getChangesSets();
+    ChangeSet[] getChangesSets();
 }</diff>
      <filename>src/main/java/org/vafer/jdeb/changes/ChangesProvider.java</filename>
    </modified>
    <modified>
      <diff>@@ -45,107 +45,107 @@ release date=20:13 17.08.2007,version=1.4+r89114,urgency=low,by=Torsten Curdt &lt;t
  */
 public final class TextfileChangesProvider implements ChangesProvider {
 
-	private final ChangeSet[] changeSets;
-	
-	public TextfileChangesProvider( final InputStream pInput, final PackageDescriptor pDescriptor ) throws IOException, ParseException {		
-				
-		final BufferedReader reader = new BufferedReader(new InputStreamReader(pInput));
+    private final ChangeSet[] changeSets;
+    
+    public TextfileChangesProvider( final InputStream pInput, final PackageDescriptor pDescriptor ) throws IOException, ParseException {        
+                
+        final BufferedReader reader = new BufferedReader(new InputStreamReader(pInput));
 
-		final DateFormat tdf = new SimpleDateFormat(&quot;EEE, d MMM yyyy HH:mm:ss Z&quot;, Locale.ENGLISH); // RFC 2822 format
-		final DateFormat sdf = ChangeSet.createDateForma();
+        final DateFormat tdf = new SimpleDateFormat(&quot;EEE, d MMM yyyy HH:mm:ss Z&quot;, Locale.ENGLISH); // RFC 2822 format
+        final DateFormat sdf = ChangeSet.createDateForma();
 
-		String packageName = pDescriptor.get(&quot;Package&quot;);
-		String version = pDescriptor.get(&quot;Version&quot;);
-		Date date = tdf.parse(pDescriptor.get(&quot;Date&quot;));
-		String distribution = pDescriptor.get(&quot;Distribution&quot;);
-		String urgency = pDescriptor.get(&quot;Urgency&quot;);
-		String changedBy = pDescriptor.get(&quot;Maintainer&quot;);
-		final Collection changesColl = new ArrayList();
-		final Collection changeSetColl = new ArrayList();
+        String packageName = pDescriptor.get(&quot;Package&quot;);
+        String version = pDescriptor.get(&quot;Version&quot;);
+        Date date = tdf.parse(pDescriptor.get(&quot;Date&quot;));
+        String distribution = pDescriptor.get(&quot;Distribution&quot;);
+        String urgency = pDescriptor.get(&quot;Urgency&quot;);
+        String changedBy = pDescriptor.get(&quot;Maintainer&quot;);
+        final Collection changesColl = new ArrayList();
+        final Collection changeSetColl = new ArrayList();
 
-		
-		while(true) {
-			final String line = reader.readLine();
-			if (line == null) {
-				final String[] changes = (String[]) changesColl.toArray(new String[changesColl.size()]);
-				final ChangeSet changeSet = new ChangeSet(packageName, version, date, distribution, urgency, changedBy, changes);
-				changeSetColl.add(changeSet);
-				break;
-			}
-			
-			if (line.startsWith(&quot;release &quot;)) {
+        
+        while(true) {
+            final String line = reader.readLine();
+            if (line == null) {
+                final String[] changes = (String[]) changesColl.toArray(new String[changesColl.size()]);
+                final ChangeSet changeSet = new ChangeSet(packageName, version, date, distribution, urgency, changedBy, changes);
+                changeSetColl.add(changeSet);
+                break;
+            }
+            
+            if (line.startsWith(&quot;release &quot;)) {
 
-				if (changesColl.size() &gt; 0) {
-					final String[] changes = (String[]) changesColl.toArray(new String[changesColl.size()]);
-					final ChangeSet changeSet = new ChangeSet(packageName, version, date, distribution, urgency, changedBy, changes);
-					changeSetColl.add(changeSet);
-					changesColl.clear();
-				}
-				
-				final String[] tokens = line.substring(&quot;release &quot;.length()).split(&quot;,&quot;);
-				for (int i = 0; i &lt; tokens.length; i++) {
-					final String token = tokens[i].trim();
-					final String[] lr = token.split(&quot;=&quot;);
-					final String key = lr[0];
-					final String value = lr[1];
-					
-					if (&quot;urgency&quot;.equals(key)) {
-						urgency = value;
-					} else if (&quot;by&quot;.equals(key)) {
-						changedBy = value;
-					} else if (&quot;date&quot;.equals(key)) {
-						date = sdf.parse(value);
-					} else if (&quot;version&quot;.equals(key)) {
-						version = value;
-					} else if (&quot;distribution&quot;.equals(key)) {
-						distribution = value;
-					}
-				}
-				continue;
-			}
-			
-			if (line.startsWith(&quot; * &quot;)) {
-				changesColl.add(line.substring(&quot; * &quot;.length()));
-				continue;
-			}
-			
-			throw new ParseException(&quot;Unknown line syntax [&quot; + line + &quot;]&quot;, 0);
-		}
-		
-		reader.close();
-		
-		changeSets = (ChangeSet[]) changeSetColl.toArray(new ChangeSet[changeSetColl.size()]);		
-	}
-	
-	public void save( final OutputStream pOutput ) throws IOException {
-		final BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(pOutput));
-		
-		final DateFormat df = ChangeSet.createDateForma();
-		
-		for (int i = 0; i &lt; changeSets.length; i++) {
-			final ChangeSet changeSet = changeSets[i];
-			
-			writer.write(&quot;release &quot;);
-			writer.write(&quot;date=&quot; + df.format(changeSet.getDate()) + &quot;,&quot;);
-			writer.write(&quot;version=&quot; + changeSet.getVersion() + &quot;,&quot;);
-			writer.write(&quot;urgency=&quot; + changeSet.getUrgency() + &quot;,&quot;);
-			writer.write(&quot;by=&quot; + changeSet.getChangedBy() + &quot;,&quot;);
-			writer.write(&quot;distribution=&quot; + changeSet.getDistribution());
-			writer.write(&quot;\n&quot;);
+                if (changesColl.size() &gt; 0) {
+                    final String[] changes = (String[]) changesColl.toArray(new String[changesColl.size()]);
+                    final ChangeSet changeSet = new ChangeSet(packageName, version, date, distribution, urgency, changedBy, changes);
+                    changeSetColl.add(changeSet);
+                    changesColl.clear();
+                }
+                
+                final String[] tokens = line.substring(&quot;release &quot;.length()).split(&quot;,&quot;);
+                for (int i = 0; i &lt; tokens.length; i++) {
+                    final String token = tokens[i].trim();
+                    final String[] lr = token.split(&quot;=&quot;);
+                    final String key = lr[0];
+                    final String value = lr[1];
+                    
+                    if (&quot;urgency&quot;.equals(key)) {
+                        urgency = value;
+                    } else if (&quot;by&quot;.equals(key)) {
+                        changedBy = value;
+                    } else if (&quot;date&quot;.equals(key)) {
+                        date = sdf.parse(value);
+                    } else if (&quot;version&quot;.equals(key)) {
+                        version = value;
+                    } else if (&quot;distribution&quot;.equals(key)) {
+                        distribution = value;
+                    }
+                }
+                continue;
+            }
+            
+            if (line.startsWith(&quot; * &quot;)) {
+                changesColl.add(line.substring(&quot; * &quot;.length()));
+                continue;
+            }
+            
+            throw new ParseException(&quot;Unknown line syntax [&quot; + line + &quot;]&quot;, 0);
+        }
+        
+        reader.close();
+        
+        changeSets = (ChangeSet[]) changeSetColl.toArray(new ChangeSet[changeSetColl.size()]);      
+    }
+    
+    public void save( final OutputStream pOutput ) throws IOException {
+        final BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(pOutput));
+        
+        final DateFormat df = ChangeSet.createDateForma();
+        
+        for (int i = 0; i &lt; changeSets.length; i++) {
+            final ChangeSet changeSet = changeSets[i];
+            
+            writer.write(&quot;release &quot;);
+            writer.write(&quot;date=&quot; + df.format(changeSet.getDate()) + &quot;,&quot;);
+            writer.write(&quot;version=&quot; + changeSet.getVersion() + &quot;,&quot;);
+            writer.write(&quot;urgency=&quot; + changeSet.getUrgency() + &quot;,&quot;);
+            writer.write(&quot;by=&quot; + changeSet.getChangedBy() + &quot;,&quot;);
+            writer.write(&quot;distribution=&quot; + changeSet.getDistribution());
+            writer.write(&quot;\n&quot;);
 
-			final String[] changes = changeSet.getChanges();
-			for (int j = 0; j &lt; changes.length; j++) {
-				writer.write(&quot; * &quot;);
-				writer.write(changes[j]);
-				writer.write(&quot;\n&quot;);
-			}
-		}
-		
-		writer.close();
-	}
-	
-	public ChangeSet[] getChangesSets() {
-		return changeSets;
-	}
+            final String[] changes = changeSet.getChanges();
+            for (int j = 0; j &lt; changes.length; j++) {
+                writer.write(&quot; * &quot;);
+                writer.write(changes[j]);
+                writer.write(&quot;\n&quot;);
+            }
+        }
+        
+        writer.close();
+    }
+    
+    public ChangeSet[] getChangesSets() {
+        return changeSets;
+    }
 
 }</diff>
      <filename>src/main/java/org/vafer/jdeb/changes/TextfileChangesProvider.java</filename>
    </modified>
    <modified>
      <diff>@@ -37,133 +37,133 @@ import org.vafer.jdeb.utils.VariableResolver;
  * @author Torsten Curdt &lt;tcurdt@vafer.org&gt;
  */
 public abstract class AbstractDescriptor {
-	
-	private final Map values = new HashMap();
-	private final VariableResolver resolver;
-	
-	public AbstractDescriptor( final VariableResolver pResolver ) {
-		resolver = pResolver;
-	}
+    
+    private final Map values = new HashMap();
+    private final VariableResolver resolver;
+    
+    public AbstractDescriptor( final VariableResolver pResolver ) {
+        resolver = pResolver;
+    }
 
-	public AbstractDescriptor( final AbstractDescriptor pDescriptor ) {
-		values.putAll(pDescriptor.values);
-		resolver = pDescriptor.resolver;
-	}
+    public AbstractDescriptor( final AbstractDescriptor pDescriptor ) {
+        values.putAll(pDescriptor.values);
+        resolver = pDescriptor.resolver;
+    }
 
-	protected void parse( final InputStream pInput ) throws IOException, ParseException {
-		final BufferedReader br = new BufferedReader(new InputStreamReader(pInput));
-		StringBuffer buffer = new StringBuffer();
-		String key = null;
-		int linenr = 0;
-		while(true) {
-			final String line = br.readLine();
-			
-			if (line == null) {
-				if (buffer.length() &gt; 0) {
-					// flush value of previous key
-					set(key, buffer.toString());
-					buffer = null;
-				}
-				break;
-			}
+    protected void parse( final InputStream pInput ) throws IOException, ParseException {
+        final BufferedReader br = new BufferedReader(new InputStreamReader(pInput));
+        StringBuffer buffer = new StringBuffer();
+        String key = null;
+        int linenr = 0;
+        while(true) {
+            final String line = br.readLine();
+            
+            if (line == null) {
+                if (buffer.length() &gt; 0) {
+                    // flush value of previous key
+                    set(key, buffer.toString());
+                    buffer = null;
+                }
+                break;
+            }
 
-			linenr++;
+            linenr++;
 
-			if (line.length() == 0) {
-				throw new ParseException(&quot;Empty line&quot;, linenr);
-			}
-			
-			final char first = line.charAt(0); 
-			if (Character.isLetter(first)) {
-				
-				// new key
-				
-				if (buffer.length() &gt; 0) {
-					// flush value of previous key
-					set(key, buffer.toString());
-					buffer = new StringBuffer();
-				}
-				
-				
-				final int i = line.indexOf(':');
-				
-				if (i &lt; 0) {
-					throw new ParseException(&quot;Line misses ':' delimitter&quot;, linenr);
-				}
-				
-				key = line.substring(0, i);
-				buffer.append(line.substring(i+1).trim());
-				
-				continue;
-			}
-			
-			// continuing old value
-			buffer.append('\n').append(line.substring(1));
-		}
-		br.close();
-		
-	}
-	
-	public void set( final String pKey, final String pValue ) {
+            if (line.length() == 0) {
+                throw new ParseException(&quot;Empty line&quot;, linenr);
+            }
+            
+            final char first = line.charAt(0); 
+            if (Character.isLetter(first)) {
+                
+                // new key
+                
+                if (buffer.length() &gt; 0) {
+                    // flush value of previous key
+                    set(key, buffer.toString());
+                    buffer = new StringBuffer();
+                }
+                
+                
+                final int i = line.indexOf(':');
+                
+                if (i &lt; 0) {
+                    throw new ParseException(&quot;Line misses ':' delimitter&quot;, linenr);
+                }
+                
+                key = line.substring(0, i);
+                buffer.append(line.substring(i+1).trim());
+                
+                continue;
+            }
+            
+            // continuing old value
+            buffer.append('\n').append(line.substring(1));
+        }
+        br.close();
+        
+    }
+    
+    public void set( final String pKey, final String pValue ) {
 
-		if (resolver != null) {
-			try {
-				values.put(pKey, Utils.replaceVariables(resolver, pValue, &quot;[[&quot;, &quot;]]&quot;));
-				return;
-			} catch (ParseException e) {
-				// FIXME maybe throw an Exception?
-			}
-		}
-		
-		values.put(pKey, pValue);
-	}
-	
-	public String get( final String pKey ) {
-		return (String)values.get(pKey);
-	}
+        if (resolver != null) {
+            try {
+                values.put(pKey, Utils.replaceVariables(resolver, pValue, &quot;[[&quot;, &quot;]]&quot;));
+                return;
+            } catch (ParseException e) {
+                // FIXME maybe throw an Exception?
+            }
+        }
+        
+        values.put(pKey, pValue);
+    }
+    
+    public String get( final String pKey ) {
+        return (String)values.get(pKey);
+    }
 
-	public abstract String[] getMandatoryKeys();
-	
-	public boolean isValid() {
-		return invalidKeys().size() == 0;
-	}
-	
-	public Set invalidKeys() {
-		final Set invalid = new HashSet();
+    public abstract String[] getMandatoryKeys();
+    
+    public boolean isValid() {
+        return invalidKeys().size() == 0;
+    }
+    
+    public Set invalidKeys() {
+        final Set invalid = new HashSet();
 
-		final String[] mk = getMandatoryKeys();
-		for (int i = 0; i &lt; mk.length; i++) {
-			if (get(mk[i]) == null) {
-				invalid.add(mk[i]);
-			}
-		}
-		
-		return invalid;
-	}
-	
-	String toString( final String[] pKeys ) {
-		final StringBuffer s = new StringBuffer();
-		for (int i = 0; i &lt; pKeys.length; i++) {
-			final String key = pKeys[i];
-			final String value = (String) values.get(key);
-			if (value != null) {
-				s.append(key).append(&quot;:&quot;);
+        final String[] mk = getMandatoryKeys();
+        for (int i = 0; i &lt; mk.length; i++) {
+            if (get(mk[i]) == null) {
+                invalid.add(mk[i]);
+            }
+        }
+        
+        return invalid;
+    }
+    
+    String toString( final String[] pKeys ) {
+        final StringBuffer s = new StringBuffer();
+        for (int i = 0; i &lt; pKeys.length; i++) {
+            final String key = pKeys[i];
+            final String value = (String) values.get(key);
+            if (value != null) {
+                s.append(key).append(&quot;:&quot;);
 
-				try {
-					BufferedReader reader = new BufferedReader(new StringReader(value));
-					String line;
-					while ((line = reader.readLine()) != null) {
-						if (line.length() != 0 &amp;&amp; !Character.isWhitespace(line.charAt(0))) {
-							s.append(' ');
-						}
+                try {
+                    BufferedReader reader = new BufferedReader(new StringReader(value));
+                    String line;
+                    while ((line = reader.readLine()) != null) {
+                        if (line.length() != 0 &amp;&amp; !Character.isWhitespace(line.charAt(0))) {
+                            s.append(' ');
+                        }
 
-						s.append(line).append('\n');
-					}
-				} catch (IOException e) {
-					e.printStackTrace();
-				}
-			}			
-		}
-		return s.toString();
-	}
+                        s.append(line).append('\n');
+                    }
+                } catch (IOException e) {
+                    e.printStackTrace();
+                }
+            }           
+        }
+        return s.toString();
+    }
 }</diff>
      <filename>src/main/java/org/vafer/jdeb/descriptors/AbstractDescriptor.java</filename>
    </modified>
    <modified>
      <diff>@@ -24,64 +24,64 @@ import org.vafer.jdeb.changes.ChangeSet;
  */
 public final class ChangesDescriptor extends AbstractDescriptor {
 
-	private final static String[] keys = {
-		&quot;Format&quot;,
-		&quot;Date&quot;,
-		&quot;Source&quot;,
-		&quot;Binary&quot;,
-		&quot;Architecture&quot;,
-		&quot;Version&quot;,
-		&quot;Distribution&quot;,
-		&quot;Urgency&quot;,
-		&quot;Maintainer&quot;,
-		&quot;Changed-By&quot;,
-		&quot;Description&quot;,
-		&quot;Changes&quot;,
-		&quot;Closes&quot;,
-		&quot;Files&quot;
-	};
-	
-	private final static String[] mandatoryKeys = {
-		&quot;Format&quot;,
-		&quot;Date&quot;,
-		&quot;Source&quot;,
-		&quot;Binary&quot;,
-		&quot;Architecture&quot;,
-		&quot;Version&quot;,
-		&quot;Distribution&quot;,
-		&quot;Urgency&quot;,
-		&quot;Maintainer&quot;,
-		&quot;Description&quot;,
-		&quot;Changes&quot;,
-		&quot;Files&quot;
-	};
+    private final static String[] keys = {
+        &quot;Format&quot;,
+        &quot;Date&quot;,
+        &quot;Source&quot;,
+        &quot;Binary&quot;,
+        &quot;Architecture&quot;,
+        &quot;Version&quot;,
+        &quot;Distribution&quot;,
+        &quot;Urgency&quot;,
+        &quot;Maintainer&quot;,
+        &quot;Changed-By&quot;,
+        &quot;Description&quot;,
+        &quot;Changes&quot;,
+        &quot;Closes&quot;,
+        &quot;Files&quot;
+    };
+    
+    private final static String[] mandatoryKeys = {
+        &quot;Format&quot;,
+        &quot;Date&quot;,
+        &quot;Source&quot;,
+        &quot;Binary&quot;,
+        &quot;Architecture&quot;,
+        &quot;Version&quot;,
+        &quot;Distribution&quot;,
+        &quot;Urgency&quot;,
+        &quot;Maintainer&quot;,
+        &quot;Description&quot;,
+        &quot;Changes&quot;,
+        &quot;Files&quot;
+    };
 
-	private final ChangeSet[] changeSets;
-	
-	public ChangesDescriptor( final AbstractDescriptor pDescriptor, final ChangeSet[] pChangeSets ) {
-		super(pDescriptor);
-		changeSets = pChangeSets;
+    private final ChangeSet[] changeSets;
+    
+    public ChangesDescriptor( final AbstractDescriptor pDescriptor, final ChangeSet[] pChangeSets ) {
+        super(pDescriptor);
+        changeSets = pChangeSets;
 
-		final ChangeSet lastestChangeSet = changeSets[0];
-		
-		set(&quot;Urgency&quot;, lastestChangeSet.getUrgency());
-		set(&quot;Changed-By&quot;, lastestChangeSet.getChangedBy());
+        final ChangeSet lastestChangeSet = changeSets[0];
+        
+        set(&quot;Urgency&quot;, lastestChangeSet.getUrgency());
+        set(&quot;Changed-By&quot;, lastestChangeSet.getChangedBy());
 
-		final StringBuffer sb = new StringBuffer();
+        final StringBuffer sb = new StringBuffer();
 
-		for (int i = 0; i &lt; 1; i++) {
-			final ChangeSet changeSet = changeSets[i];
-			sb.append(changeSet.toString());			
-		}
+        for (int i = 0; i &lt; 1; i++) {
+            final ChangeSet changeSet = changeSets[i];
+            sb.append(changeSet.toString());            
+        }
 
-		set(&quot;Changes&quot;, sb.toString());
-	}
-	
-	public String[] getMandatoryKeys() {
-		return mandatoryKeys;
-	}
-	
-	public String toString() {
-		return toString(keys);
-	}
+        set(&quot;Changes&quot;, sb.toString());
+    }
+    
+    public String[] getMandatoryKeys() {
+        return mandatoryKeys;
+    }
+    
+    public String toString() {
+        return toString(keys);
+    }
 }</diff>
      <filename>src/main/java/org/vafer/jdeb/descriptors/ChangesDescriptor.java</filename>
    </modified>
    <modified>
      <diff>@@ -2,35 +2,35 @@ package org.vafer.jdeb.descriptors;
 
 public final class InvalidDescriptorException extends Exception {
 
-	private static final long serialVersionUID = 1L;
-	private final AbstractDescriptor desc;
+    private static final long serialVersionUID = 1L;
+    private final AbstractDescriptor desc;
 
-	public InvalidDescriptorException(AbstractDescriptor desc) {
-		this.desc = desc;
-	}
+    public InvalidDescriptorException(AbstractDescriptor desc) {
+        this.desc = desc;
+    }
 
-	public InvalidDescriptorException(AbstractDescriptor desc, String message) {
-		super(message);
-		this.desc = desc;
-	}
+    public InvalidDescriptorException(AbstractDescriptor desc, String message) {
+        super(message);
+        this.desc = desc;
+    }
 
-	public InvalidDescriptorException(AbstractDescriptor desc, Throwable cause) {
-		super(cause);
-		this.desc = desc;
-	}
+    public InvalidDescriptorException(AbstractDescriptor desc, Throwable cause) {
+        super(cause);
+        this.desc = desc;
+    }
 
-	public InvalidDescriptorException(AbstractDescriptor desc, String message, Throwable cause) {
-		super(message, cause);
-		this.desc = desc;
-	}
+    public InvalidDescriptorException(AbstractDescriptor desc, String message, Throwable cause) {
+        super(message, cause);
+        this.desc = desc;
+    }
 
-	public AbstractDescriptor getDescriptor() {
-		return desc;
-	}
+    public AbstractDescriptor getDescriptor() {
+        return desc;
+    }
 
-	public String toString() {
-		return &quot;Invalid keys are &quot; + desc.invalidKeys() + &quot;\n&quot; + desc; 
-	}
+    public String toString() {
+        return &quot;Invalid keys are &quot; + desc.invalidKeys() + &quot;\n&quot; + desc; 
+    }
 
-	
+    
 }</diff>
      <filename>src/main/java/org/vafer/jdeb/descriptors/InvalidDescriptorException.java</filename>
    </modified>
    <modified>
      <diff>@@ -28,58 +28,58 @@ import org.vafer.jdeb.utils.VariableResolver;
  */
 public final class PackageDescriptor extends AbstractDescriptor {
 
-	private final static String[] keys = {
-		&quot;Package&quot;,
-		&quot;Source&quot;,
-		&quot;Version&quot;,
-		&quot;Section&quot;,
-		&quot;Priority&quot;,
-		&quot;Architecture&quot;,
-		&quot;Essential&quot;,
-		&quot;Depends&quot;,
-		&quot;Pre-Depends&quot;,
-		&quot;Recommends&quot;,
-		&quot;Suggests&quot;,
-		&quot;Breaks&quot;,
-		&quot;Enhances&quot;,
-		&quot;Conflicts&quot;,
-		&quot;Provides&quot;,
-		&quot;Replaces&quot;,
-		&quot;Installed-Size&quot;,
-		&quot;Maintainer&quot;,
-		&quot;Description&quot;,
-		&quot;Homepage&quot;,
-	};
+    private final static String[] keys = {
+        &quot;Package&quot;,
+        &quot;Source&quot;,
+        &quot;Version&quot;,
+        &quot;Section&quot;,
+        &quot;Priority&quot;,
+        &quot;Architecture&quot;,
+        &quot;Essential&quot;,
+        &quot;Depends&quot;,
+        &quot;Pre-Depends&quot;,
+        &quot;Recommends&quot;,
+        &quot;Suggests&quot;,
+        &quot;Breaks&quot;,
+        &quot;Enhances&quot;,
+        &quot;Conflicts&quot;,
+        &quot;Provides&quot;,
+        &quot;Replaces&quot;,
+        &quot;Installed-Size&quot;,
+        &quot;Maintainer&quot;,
+        &quot;Description&quot;,
+        &quot;Homepage&quot;,
+    };
 
-	private final static String[] mandatoryKeys = {
-		&quot;Package&quot;,
-		&quot;Version&quot;,
-		&quot;Section&quot;,
-		&quot;Priority&quot;,
-		&quot;Architecture&quot;,
-		&quot;Maintainer&quot;,
-		&quot;Description&quot;
-	};
-	
-	public PackageDescriptor() {
-		this(null);
-	}
+    private final static String[] mandatoryKeys = {
+        &quot;Package&quot;,
+        &quot;Version&quot;,
+        &quot;Section&quot;,
+        &quot;Priority&quot;,
+        &quot;Architecture&quot;,
+        &quot;Maintainer&quot;,
+        &quot;Description&quot;
+    };
+    
+    public PackageDescriptor() {
+        this(null);
+    }
 
-	public PackageDescriptor( final VariableResolver pResolver ) {
-		super(pResolver);
-	}
+    public PackageDescriptor( final VariableResolver pResolver ) {
+        super(pResolver);
+    }
 
-	public PackageDescriptor( final InputStream pInput, final VariableResolver pResolver )  throws IOException, ParseException {	
-		this(pResolver);
-		parse(pInput);
-	}
+    public PackageDescriptor( final InputStream pInput, final VariableResolver pResolver )  throws IOException, ParseException {    
+        this(pResolver);
+        parse(pInput);
+    }
 
-	public String[] getMandatoryKeys() {
-		return mandatoryKeys;
-	}
+    public String[] getMandatoryKeys() {
+        return mandatoryKeys;
+    }
 
-	public String toString() {
-		return toString(keys);
-	}
+    public String toString() {
+        return toString(keys);
+    }
 
 }</diff>
      <filename>src/main/java/org/vafer/jdeb/descriptors/PackageDescriptor.java</filename>
    </modified>
    <modified>
      <diff>@@ -34,36 +34,36 @@ import org.apache.tools.tar.TarEntry;
  */
 public final class LsMapper implements Mapper {
 
-	private final Map mapping;
-
-	
-	public final static class ParseError extends Exception {
-
-		private static final long serialVersionUID = 1L;
-
-		public ParseError() {
-			super();
-		}
-
-		public ParseError(String message, Throwable cause) {
-			super(message, cause);
-		}
-
-		public ParseError(String message) {
-			super(message);
-		}
-
-		public ParseError(Throwable cause) {
-			super(cause);
-		}
-		
-	};
-	
-	public LsMapper( final InputStream pInput ) throws IOException, ParseError {
-		mapping = parse(pInput);
-	}
-	
-	/*
+    private final Map mapping;
+
+    
+    public final static class ParseError extends Exception {
+
+        private static final long serialVersionUID = 1L;
+
+        public ParseError() {
+            super();
+        }
+
+        public ParseError(String message, Throwable cause) {
+            super(message, cause);
+        }
+
+        public ParseError(String message) {
+            super(message);
+        }
+
+        public ParseError(Throwable cause) {
+            super(cause);
+        }
+        
+    };
+    
+    public LsMapper( final InputStream pInput ) throws IOException, ParseError {
+        mapping = parse(pInput);
+    }
+    
+    /*
 ./trunk/target/test-classes/org/vafer/dependency:
 total 176
 drwxr-xr-x   23 tcurdt  tcurdt   782 Jun 25 03:48 .
@@ -74,65 +74,65 @@ drwxr-xr-x    3 tcurdt  tcurdt   102 Jun 25 03:48 ..
 drwxr-xr-x    4 tcurdt  tcurdt   136 Jun 25 03:48 classes
 
 ./trunk/target/test-classes/org/vafer/dependency/classes:
-	 */
-	
-	final private Pattern basePattern = Pattern.compile(&quot;^\\./(.*):$&quot;);
-	final private Pattern totalPattern = Pattern.compile(&quot;^total ([0-9]+)$&quot;);
-	final private Pattern dirPattern = Pattern.compile(&quot;^d([rwx-]{9})\\s+([0-9]+)\\s+(\\S*)\\s+(\\S*)\\s+([0-9]+)\\s+(.*)\\s+[\\.]{1,2}$&quot;);
-	final private Pattern filePattern = Pattern.compile(&quot;^([d-])([rwx-]{9})\\s+([0-9]+)\\s+(\\S*)\\s+(\\S*)\\s+([0-9]+)\\s+(.*)\\s+(.*)$&quot;);
-	final private Pattern newlinePattern = Pattern.compile(&quot;$&quot;);
-
-	private String readBase( final BufferedReader reader ) throws IOException, ParseError {
-		final String line = reader.readLine();
-		if (line == null) {
-			return null;
-		}
-		final Matcher matcher = basePattern.matcher(line);
-		if (!matcher.matches()) {
-			throw new ParseError(&quot;expected base line but got \&quot;&quot; + line + &quot;\&quot;&quot;);
-		}
-		return matcher.group(1);
-	}
-
-	private String readTotal( final BufferedReader reader ) throws IOException, ParseError {
-		final String line = reader.readLine();
-		final Matcher matcher = totalPattern.matcher(line);
-		if (!matcher.matches()) {
-			throw new ParseError(&quot;expected total line but got \&quot;&quot; + line + &quot;\&quot;&quot;);
-		}
-		return matcher.group(1);
-	}
-
-	private TarEntry readDir( final BufferedReader reader, final String base ) throws IOException, ParseError {
-		final String current = reader.readLine();
-		final Matcher currentMatcher = dirPattern.matcher(current);
-		if (!currentMatcher.matches()) {
-			throw new ParseError(&quot;expected dirline but got \&quot;&quot; + current + &quot;\&quot;&quot;);
-		}
-
-		final String parent = reader.readLine();
-		final Matcher parentMatcher = dirPattern.matcher(parent);
-		if (!parentMatcher.matches()) {
-			throw new ParseError(&quot;expected dirline but got \&quot;&quot; + parent + &quot;\&quot;&quot;);
-		}
-		
-		final TarEntry entry = new TarEntry(base);
-		
-		entry.setMode(convertModeFromString(currentMatcher.group(1)));
-		entry.setUserName(currentMatcher.group(3));
-		entry.setGroupName(currentMatcher.group(4));
-		
-		return entry;
-	}
-
-	
-	private int convertModeFromString( final String mode ) {
-		
-		final char[] m = mode.toCharArray();
-		/*
-		   -rwxrwxrwx
-
-		   4000    set-user-ID-on-execution bit
+     */
+    
+    final private Pattern basePattern = Pattern.compile(&quot;^\\./(.*):$&quot;);
+    final private Pattern totalPattern = Pattern.compile(&quot;^total ([0-9]+)$&quot;);
+    final private Pattern dirPattern = Pattern.compile(&quot;^d([rwx-]{9})\\s+([0-9]+)\\s+(\\S*)\\s+(\\S*)\\s+([0-9]+)\\s+(.*)\\s+[\\.]{1,2}$&quot;);
+    final private Pattern filePattern = Pattern.compile(&quot;^([d-])([rwx-]{9})\\s+([0-9]+)\\s+(\\S*)\\s+(\\S*)\\s+([0-9]+)\\s+(.*)\\s+(.*)$&quot;);
+    final private Pattern newlinePattern = Pattern.compile(&quot;$&quot;);
+
+    private String readBase( final BufferedReader reader ) throws IOException, ParseError {
+        final String line = reader.readLine();
+        if (line == null) {
+            return null;
+        }
+        final Matcher matcher = basePattern.matcher(line);
+        if (!matcher.matches()) {
+            throw new ParseError(&quot;expected base line but got \&quot;&quot; + line + &quot;\&quot;&quot;);
+        }
+        return matcher.group(1);
+    }
+
+    private String readTotal( final BufferedReader reader ) throws IOException, ParseError {
+        final String line = reader.readLine();
+        final Matcher matcher = totalPattern.matcher(line);
+        if (!matcher.matches()) {
+            throw new ParseError(&quot;expected total line but got \&quot;&quot; + line + &quot;\&quot;&quot;);
+        }
+        return matcher.group(1);
+    }
+
+    private TarEntry readDir( final BufferedReader reader, final String base ) throws IOException, ParseError {
+        final String current = reader.readLine();
+        final Matcher currentMatcher = dirPattern.matcher(current);
+        if (!currentMatcher.matches()) {
+            throw new ParseError(&quot;expected dirline but got \&quot;&quot; + current + &quot;\&quot;&quot;);
+        }
+
+        final String parent = reader.readLine();
+        final Matcher parentMatcher = dirPattern.matcher(parent);
+        if (!parentMatcher.matches()) {
+            throw new ParseError(&quot;expected dirline but got \&quot;&quot; + parent + &quot;\&quot;&quot;);
+        }
+        
+        final TarEntry entry = new TarEntry(base);
+        
+        entry.setMode(convertModeFromString(currentMatcher.group(1)));
+        entry.setUserName(currentMatcher.group(3));
+        entry.setGroupName(currentMatcher.group(4));
+        
+        return entry;
+    }
+
+    
+    private int convertModeFromString( final String mode ) {
+        
+        final char[] m = mode.toCharArray();
+        /*
+           -rwxrwxrwx
+
+           4000    set-user-ID-on-execution bit
            2000    set-user-ID-on-execution bit
            1000    sticky bit
            0400    allow read by owner.
@@ -144,106 +144,106 @@ drwxr-xr-x    4 tcurdt  tcurdt   136 Jun 25 03:48 classes
            0004    allow read by others.
            0002    allow write by others.
            0001    execute / search
-		 */
-		// TODO: simplified - needs fixing
-		int sum = 0;
-		int bit = 1;
-		for(int i=m.length-1; i&gt;=0 ; i--) {
-			if (m[i] != '-') {
-				sum += bit;
-			}
-			bit += bit;
-		}
-		return sum;
-	}
-	
-	private TarEntry readFile( final BufferedReader reader, final String base ) throws IOException, ParseError {
-		
-		while(true) {
-			final String line = reader.readLine();
-			
-			if (line == null) {
-				return null;
-			}
-			
-			final Matcher currentMatcher = filePattern.matcher(line);
-			if (!currentMatcher.matches()) {
-				final Matcher newlineMatcher = newlinePattern.matcher(line);
-				if (newlineMatcher.matches()) {
-					return null;
-				}
-				throw new ParseError(&quot;expected file line but got \&quot;&quot; + line + &quot;\&quot;&quot;);
-			}
-			
-			final String type = currentMatcher.group(1);
-			if (type.startsWith(&quot;-&quot;)) {
-				final TarEntry entry = new TarEntry(base + &quot;/&quot; + currentMatcher.group(8));
-
-				entry.setMode(convertModeFromString(currentMatcher.group(2)));
-				entry.setUserName(currentMatcher.group(4));
-				entry.setGroupName(currentMatcher.group(5));
-
-				return entry;				
-			}			
-		}
-		
-	}
-	
-	private Map parse( final InputStream pInput ) throws IOException, ParseError {
-		final Map mapping = new HashMap();
-		
-		final BufferedReader reader = new BufferedReader(new InputStreamReader(pInput));
-		
-		boolean first = true;
-		while(true) {
-
-			final String base;
-			if (first) {
-				base = &quot;&quot;;
-				first = false;
-			} else {
-				base = readBase(reader);
-				if (base == null) {
-					break;
-				}
-			}
-
-			readTotal(reader);
-			final TarEntry dir = readDir(reader, base);
-			mapping.put(dir.getName(), dir);
-
-			while(true) {
-				final TarEntry file = readFile(reader, base);
-
-				if (file == null) {
-					break;
-				}
-				
-				mapping.put(file.getName(), file);
-			}
-		}
-		
-		return mapping;
-	}
-	
-	public TarEntry map( final TarEntry pEntry ) {
-		
-		final TarEntry entry = (TarEntry) mapping.get(pEntry.getName());
-		
-		if (entry != null) {
-
-			final TarEntry newEntry = new TarEntry(entry.getName());
-			newEntry.setUserId(entry.getUserId());
-			newEntry.setGroupId(entry.getGroupId());
-			newEntry.setUserName(entry.getUserName());
-			newEntry.setGroupName(entry.getGroupName());
-			newEntry.setMode(entry.getMode());
-			newEntry.setSize(entry.getSize());
-			
-			return newEntry;
-		}
-		
-		return pEntry;
-	}
+         */
+        // TODO: simplified - needs fixing
+        int sum = 0;
+        int bit = 1;
+        for(int i=m.length-1; i&gt;=0 ; i--) {
+            if (m[i] != '-') {
+                sum += bit;
+            }
+            bit += bit;
+        }
+        return sum;
+    }
+    
+    private TarEntry readFile( final BufferedReader reader, final String base ) throws IOException, ParseError {
+        
+        while(true) {
+            final String line = reader.readLine();
+            
+            if (line == null) {
+                return null;
+            }
+            
+            final Matcher currentMatcher = filePattern.matcher(line);
+            if (!currentMatcher.matches()) {
+                final Matcher newlineMatcher = newlinePattern.matcher(line);
+                if (newlineMatcher.matches()) {
+                    return null;
+                }
+                throw new ParseError(&quot;expected file line but got \&quot;&quot; + line + &quot;\&quot;&quot;);
+            }
+            
+            final String type = currentMatcher.group(1);
+            if (type.startsWith(&quot;-&quot;)) {
+                final TarEntry entry = new TarEntry(base + &quot;/&quot; + currentMatcher.group(8));
+
+                entry.setMode(convertModeFromString(currentMatcher.group(2)));
+                entry.setUserName(currentMatcher.group(4));
+                entry.setGroupName(currentMatcher.group(5));
+
+                return entry;               
+            }           
+        }
+        
+    }
+    
+    private Map parse( final InputStream pInput ) throws IOException, ParseError {
+        final Map mapping = new HashMap();
+        
+        final BufferedReader reader = new BufferedReader(new InputStreamReader(pInput));
+        
+        boolean first = true;
+        while(true) {
+
+            final String base;
+            if (first) {
+                base = &quot;&quot;;
+                first = false;
+            } else {
+                base = readBase(reader);
+                if (base == null) {
+                    break;
+                }
+            }
+
+            readTotal(reader);
+            final TarEntry dir = readDir(reader, base);
+            mapping.put(dir.getName(), dir);
+
+            while(true) {
+                final TarEntry file = readFile(reader, base);
+
+                if (file == null) {
+                    break;
+                }
+                
+                mapping.put(file.getName(), file);
+            }
+        }
+        
+        return mapping;
+    }
+    
+    public TarEntry map( final TarEntry pEntry ) {
+        
+        final TarEntry entry = (TarEntry) mapping.get(pEntry.getName());
+        
+        if (entry != null) {
+
+            final TarEntry newEntry = new TarEntry(entry.getName());
+            newEntry.setUserId(entry.getUserId());
+            newEntry.setGroupId(entry.getGroupId());
+            newEntry.setUserName(entry.getUserName());
+            newEntry.setGroupName(entry.getGroupName());
+            newEntry.setMode(entry.getMode());
+            newEntry.setSize(entry.getSize());
+            
+            return newEntry;
+        }
+        
+        return pEntry;
+    }
 
 }</diff>
      <filename>src/main/java/org/vafer/jdeb/mapping/LsMapper.java</filename>
    </modified>
    <modified>
      <diff>@@ -24,6 +24,6 @@ import org.apache.tools.tar.TarEntry;
  */
 public interface Mapper {
 
-	public TarEntry map( final TarEntry entry );
-	
+    public TarEntry map( final TarEntry entry );
+    
 }</diff>
      <filename>src/main/java/org/vafer/jdeb/mapping/Mapper.java</filename>
    </modified>
    <modified>
      <diff>@@ -19,8 +19,8 @@ import org.apache.tools.tar.TarEntry;
 
 public final class NullMapper implements Mapper {
 
-	public TarEntry map( final TarEntry pEntry ) {
-		return pEntry;
-	}
+    public TarEntry map( final TarEntry pEntry ) {
+        return pEntry;
+    }
 
 }</diff>
      <filename>src/main/java/org/vafer/jdeb/mapping/NullMapper.java</filename>
    </modified>
    <modified>
      <diff>@@ -25,28 +25,28 @@ import org.vafer.jdeb.utils.Utils;
  */
 public final class PrefixMapper implements Mapper {
 
-	private final int strip;
-	private final String prefix;
-	
-	public PrefixMapper( final int pStrip, final String pPrefix ) {
-		strip = pStrip;
-		prefix = pPrefix;
-	}
-		
-	public TarEntry map( final TarEntry pEntry ) {
-		
-		final String name = pEntry.getName();
+    private final int strip;
+    private final String prefix;
+    
+    public PrefixMapper( final int pStrip, final String pPrefix ) {
+        strip = pStrip;
+        prefix = pPrefix;
+    }
+        
+    public TarEntry map( final TarEntry pEntry ) {
+        
+        final String name = pEntry.getName();
 
-		final TarEntry newEntry = new TarEntry(prefix + '/' + Utils.stripPath(strip, name));		
-		
-		newEntry.setUserId(pEntry.getUserId());
-		newEntry.setGroupId(pEntry.getGroupId());
-		newEntry.setUserName(pEntry.getUserName());
-		newEntry.setGroupName(pEntry.getGroupName());
-		newEntry.setMode(pEntry.getMode());
-		newEntry.setSize(pEntry.getSize());
+        final TarEntry newEntry = new TarEntry(prefix + '/' + Utils.stripPath(strip, name));        
+        
+        newEntry.setUserId(pEntry.getUserId());
+        newEntry.setGroupId(pEntry.getGroupId());
+        newEntry.setUserName(pEntry.getUserName());
+        newEntry.setGroupName(pEntry.getGroupName());
+        newEntry.setMode(pEntry.getMode());
+        newEntry.setSize(pEntry.getSize());
 
-		return newEntry;
-	}
+        return newEntry;
+    }
 
 }</diff>
      <filename>src/main/java/org/vafer/jdeb/mapping/PrefixMapper.java</filename>
    </modified>
    <modified>
      <diff>@@ -22,7 +22,7 @@ import org.apache.maven.project.MavenProject;
 
 public abstract class AbstractPluginMojo extends AbstractMojo {
 
-	/**
+    /**
      * @parameter expression=&quot;${project}&quot;
      * @required
      * @readonly</diff>
      <filename>src/main/java/org/vafer/jdeb/maven/AbstractPluginMojo.java</filename>
    </modified>
    <modified>
      <diff>@@ -44,7 +44,7 @@ import org.vafer.jdeb.utils.VariableResolver;
  */
 public final class DebMojo extends AbstractPluginMojo {
 
-	/**
+    /**
      * @component
      */
     private MavenProjectHelper projectHelper;
@@ -96,192 +96,192 @@ public final class DebMojo extends AbstractPluginMojo {
      * The keyring file. Usually some/path/secring.gpg
      * 
      * @parameter expression=&quot;${keyring}&quot;
-     */    	
+     */     
     private File keyring = null;
 
     /**
      * The hex key id to use for signing. 
      * 
      * @parameter expression=&quot;${key}&quot;
-     */    	
-	private String key = null;
+     */     
+    private String key = null;
 
     /**
      * The passphrase for the key to sign the changes file. 
      * 
      * @parameter expression=&quot;${passhrase}&quot;
-     */    	
-	private String passphrase = null;
+     */     
+    private String passphrase = null;
     
     /**
      * If not defaultPath is specified this  
      * 
      * @parameter expression=&quot;${defaultPath}&quot; default-value=&quot;/srv/jetty/www&quot;
-     */    	
-	private String defaultPath = &quot;/srv/jetty/www&quot;;
+     */     
+    private String defaultPath = &quot;/srv/jetty/www&quot;;
 
-	/**
-	 * TODO: make configurable
-	 */
-	private DataProducer[] dataProducers = null;
-	
-	
-	/**
+    /**
+     * TODO: make configurable
+     */
+    private DataProducer[] dataProducers = null;
+    
+    
+    /**
      * Main entry point
      * @throws MojoExecutionException on error
      */
     public void execute()
         throws MojoExecutionException
     {
-    	// expand name pattern
-    	final String debName;
-    	final String changesName;    	
+        // expand name pattern
+        final String debName;
+        final String changesName;       
 
-    	final Map variables = new HashMap();
-    	variables.put(&quot;name&quot;, getProject().getName());
-    	variables.put(&quot;artifactId&quot;, getProject().getArtifactId());
-    	variables.put(&quot;groupId&quot;, getProject().getGroupId());
-    	variables.put(&quot;version&quot;, getProject().getVersion().replace('-', '+'));
-    	variables.put(&quot;description&quot;, getProject().getDescription());
-    	variables.put(&quot;extension&quot;, &quot;deb&quot;);    	
-    	final VariableResolver resolver = new MapVariableResolver(variables);
+        final Map variables = new HashMap();
+        variables.put(&quot;name&quot;, getProject().getName());
+        variables.put(&quot;artifactId&quot;, getProject().getArtifactId());
+        variables.put(&quot;groupId&quot;, getProject().getGroupId());
+        variables.put(&quot;version&quot;, getProject().getVersion().replace('-', '+'));
+        variables.put(&quot;description&quot;, getProject().getDescription());
+        variables.put(&quot;extension&quot;, &quot;deb&quot;);      
+        final VariableResolver resolver = new MapVariableResolver(variables);
 
-    	try
-    	{
-        	debName = Utils.replaceVariables(resolver, namePattern, &quot;[[&quot;, &quot;]]&quot;); 
-        	
-        	variables.put(&quot;extension&quot;, &quot;changes&quot;);    	
-        	changesName = Utils.replaceVariables(resolver, namePattern, &quot;[[&quot;, &quot;]]&quot;); 
-		}
-    	catch (ParseException e)
-    	{
-			throw new MojoExecutionException(&quot;Failed parsing artifact name pattern&quot;, e);
-		}
+        try
+        {
+            debName = Utils.replaceVariables(resolver, namePattern, &quot;[[&quot;, &quot;]]&quot;); 
+            
+            variables.put(&quot;extension&quot;, &quot;changes&quot;);      
+            changesName = Utils.replaceVariables(resolver, namePattern, &quot;[[&quot;, &quot;]]&quot;); 
+        }
+        catch (ParseException e)
+        {
+            throw new MojoExecutionException(&quot;Failed parsing artifact name pattern&quot;, e);
+        }
 
-    	// if not specified try to the default
-    	if (deb == null)
-    	{
-			deb = new File(buildDirectory, debName);
-    	}
+        // if not specified try to the default
+        if (deb == null)
+        {
+            deb = new File(buildDirectory, debName);
+        }
 
-    	// if not specified try to the default
-    	if (changesIn == null)
-    	{
-    		final File f = new File(getProject().getBasedir(), &quot;CHANGES.txt&quot;);
-    		if (f.exists() &amp;&amp; f.isFile() &amp;&amp; f.canRead())
-    		{
-    			changesIn = f;
-    		}
-    	}
-    	
-    	// if not specified try to the default
-    	if (changesOut == null)
-    	{
-			changesOut = new File(buildDirectory, changesName);
-    	}
-    	
-    	// if not specified try to the default
-    	if (controlDir == null)
-    	{
-    		controlDir = new File(getProject().getBasedir(), &quot;src/deb/control&quot;);
-    		getLog().info(&quot;Using default path to control directory &quot; + controlDir);
-    	}
-    	
-    	// make sure we have at least the mandatory control directory
-    	if (!controlDir.exists() || !controlDir.isDirectory())
-    	{
-    		throw new MojoExecutionException(controlDir + &quot; needs to be a directory&quot;);
-    	}
-    	
-    	// make sure we have at least the mandatory control file
-    	final File controlFile = new File(controlDir, &quot;control&quot;);
-    	if (!controlFile.exists() || !controlFile.isFile() || !controlFile.canRead())
-    	{
-    		throw new MojoExecutionException(controlFile + &quot; is mandatory&quot;);
-    	}
-    	
-    	final File file = getProject().getArtifact().getFile();
-		final File[] controlFiles = controlDir.listFiles();
-		
-		
-		if (dataProducers == null)
-		{
-			dataProducers = new DataProducer[] { new DataProducer() {
-			public void produce( final DataConsumer receiver ) {
-				try {
-					receiver.onEachFile(new FileInputStream(file), new File(new File(defaultPath), file.getName()).getAbsolutePath(), &quot;&quot;, &quot;root&quot;, 0, &quot;root&quot;, 0, TarEntry.DEFAULT_FILE_MODE, file.length());
-				} catch (Exception e) {
-					getLog().error(e);
-				}
-			}}};
-		}
+        // if not specified try to the default
+        if (changesIn == null)
+        {
+            final File f = new File(getProject().getBasedir(), &quot;CHANGES.txt&quot;);
+            if (f.exists() &amp;&amp; f.isFile() &amp;&amp; f.canRead())
+            {
+                changesIn = f;
+            }
+        }
+        
+        // if not specified try to the default
+        if (changesOut == null)
+        {
+            changesOut = new File(buildDirectory, changesName);
+        }
+        
+        // if not specified try to the default
+        if (controlDir == null)
+        {
+            controlDir = new File(getProject().getBasedir(), &quot;src/deb/control&quot;);
+            getLog().info(&quot;Using default path to control directory &quot; + controlDir);
+        }
+        
+        // make sure we have at least the mandatory control directory
+        if (!controlDir.exists() || !controlDir.isDirectory())
+        {
+            throw new MojoExecutionException(controlDir + &quot; needs to be a directory&quot;);
+        }
+        
+        // make sure we have at least the mandatory control file
+        final File controlFile = new File(controlDir, &quot;control&quot;);
+        if (!controlFile.exists() || !controlFile.isFile() || !controlFile.canRead())
+        {
+            throw new MojoExecutionException(controlFile + &quot; is mandatory&quot;);
+        }
+        
+        final File file = getProject().getArtifact().getFile();
+        final File[] controlFiles = controlDir.listFiles();
+        
+        
+        if (dataProducers == null)
+        {
+            dataProducers = new DataProducer[] { new DataProducer() {
+            public void produce( final DataConsumer receiver ) {
+                try {
+                    receiver.onEachFile(new FileInputStream(file), new File(new File(defaultPath), file.getName()).getAbsolutePath(), &quot;&quot;, &quot;root&quot;, 0, &quot;root&quot;, 0, TarEntry.DEFAULT_FILE_MODE, file.length());
+                } catch (Exception e) {
+                    getLog().error(e);
+                }
+            }}};
+        }
 
-		
-		final Processor processor = new Processor(
-				new Console()
-				{
-					public void println( final String s )
-					{
-						getLog().info(s);
-					}			
-				},
-				resolver
-		);
-		
-		final PackageDescriptor packageDescriptor;
-		try
-		{
+        
+        final Processor processor = new Processor(
+                new Console()
+                {
+                    public void println( final String s )
+                    {
+                        getLog().info(s);
+                    }           
+                },
+                resolver
+        );
+        
+        final PackageDescriptor packageDescriptor;
+        try
+        {
 
-			packageDescriptor = processor.createDeb(controlFiles, dataProducers, deb, &quot;gzip&quot;);
+            packageDescriptor = processor.createDeb(controlFiles, dataProducers, deb, &quot;gzip&quot;);
 
-			getLog().info(&quot;Attaching created debian archive &quot; + deb);
-			projectHelper.attachArtifact( getProject(), &quot;deb-archive&quot;, deb.getName(), deb );
-		}
-		catch (Exception e)
-		{
-			getLog().error(&quot;Failed to create debian package &quot; + deb, e);
-			throw new MojoExecutionException(&quot;Failed to create debian package &quot; + deb, e);
-		}    	
+            getLog().info(&quot;Attaching created debian archive &quot; + deb);
+            projectHelper.attachArtifact( getProject(), &quot;deb-archive&quot;, deb.getName(), deb );
+        }
+        catch (Exception e)
+        {
+            getLog().error(&quot;Failed to create debian package &quot; + deb, e);
+            throw new MojoExecutionException(&quot;Failed to create debian package &quot; + deb, e);
+        }       
 
-		if (changesIn == null)
-		{
-			return;
-		}
-		
-		
-		final TextfileChangesProvider changesProvider;
-		
-		try
-		{
+        if (changesIn == null)
+        {
+            return;
+        }
+        
+        
+        final TextfileChangesProvider changesProvider;
+        
+        try
+        {
 
-			// for now only support reading the changes form a text file provider
-			changesProvider = new TextfileChangesProvider(new FileInputStream(changesIn), packageDescriptor);
-			
-			processor.createChanges(packageDescriptor, changesProvider, (keyring!=null)?new FileInputStream(keyring):null, key, passphrase, new FileOutputStream(changesOut));
+            // for now only support reading the changes form a text file provider
+            changesProvider = new TextfileChangesProvider(new FileInputStream(changesIn), packageDescriptor);
+            
+            processor.createChanges(packageDescriptor, changesProvider, (keyring!=null)?new FileInputStream(keyring):null, key, passphrase, new FileOutputStream(changesOut));
 
-			getLog().info(&quot;Attaching created debian changes file &quot; + changesOut);
-			projectHelper.attachArtifact( getProject(), &quot;deb-changes&quot;, changesOut.getName(), changesOut );
-		}
-		catch (Exception e)
-		{
-			getLog().error(&quot;Failed to create debian changes file &quot; + changesOut, e);
-			throw new MojoExecutionException(&quot;Failed to create debian changes file &quot; + changesOut, e);
-		}    	
+            getLog().info(&quot;Attaching created debian changes file &quot; + changesOut);
+            projectHelper.attachArtifact( getProject(), &quot;deb-changes&quot;, changesOut.getName(), changesOut );
+        }
+        catch (Exception e)
+        {
+            getLog().error(&quot;Failed to create debian changes file &quot; + changesOut, e);
+            throw new MojoExecutionException(&quot;Failed to create debian changes file &quot; + changesOut, e);
+        }       
 
     
-		try {
-			if (changesSave == null) {
-				return;
-			}
+        try {
+            if (changesSave == null) {
+                return;
+            }
 
-			changesProvider.save(new FileOutputStream(changesSave));
+            changesProvider.save(new FileOutputStream(changesSave));
 
-			getLog().info(&quot;Saved release information to file &quot; + changesSave);
-			
-		} catch (Exception e) {
-			getLog().error(&quot;Failed to save release information to file &quot; + changesSave);
-			throw new MojoExecutionException(&quot;Failed to save release information to file &quot; + changesSave, e);
-		}    
+            getLog().info(&quot;Saved release information to file &quot; + changesSave);
+            
+        } catch (Exception e) {
+            getLog().error(&quot;Failed to save release information to file &quot; + changesSave);
+            throw new MojoExecutionException(&quot;Failed to save release information to file &quot; + changesSave, e);
+        }    
     }    
 
 }</diff>
      <filename>src/main/java/org/vafer/jdeb/maven/DebMojo.java</filename>
    </modified>
    <modified>
      <diff>@@ -27,26 +27,26 @@ import org.vafer.jdeb.mapping.Mapper;
  */
 public abstract class AbstractDataProducer implements DataProducer {
 
-	private final String[] includes;
-	private final String[] excludes;
-	private final Mapper[] mappers;
-	
-	
-	public AbstractDataProducer( final String[] pIncludes, final String[] pExcludes, final Mapper[] pMapper ) {
-		excludes = (pExcludes != null) ? pExcludes : new String[0];
-		includes = (pIncludes != null) ? pIncludes : new String[] { &quot;**&quot; };
-		mappers = (pMapper != null) ? pMapper : new Mapper[0];
-	}
-	
-	public boolean isIncluded( final String pName ) {
-		if (!isIncluded(pName, includes)) {
-			return false;
-		}
-		if (isExcluded(pName, excludes)) {
-			return false;
-		}
-		return true;
-	}
+    private final String[] includes;
+    private final String[] excludes;
+    private final Mapper[] mappers;
+    
+    
+    public AbstractDataProducer( final String[] pIncludes, final String[] pExcludes, final Mapper[] pMapper ) {
+        excludes = (pExcludes != null) ? pExcludes : new String[0];
+        includes = (pIncludes != null) ? pIncludes : new String[] { &quot;**&quot; };
+        mappers = (pMapper != null) ? pMapper : new Mapper[0];
+    }
+    
+    public boolean isIncluded( final String pName ) {
+        if (!isIncluded(pName, includes)) {
+            return false;
+        }
+        if (isExcluded(pName, excludes)) {
+            return false;
+        }
+        return true;
+    }
 
     private boolean isIncluded( String name, String[] includes ) {
         for (int i = 0; i &lt; includes.length; i++) {
@@ -66,15 +66,15 @@ public abstract class AbstractDataProducer implements DataProducer {
         }
         return false;
     }
-	
-	public TarEntry map( final TarEntry pEntry ) {
-		
-		TarEntry entry = pEntry;
+    
+    public TarEntry map( final TarEntry pEntry ) {
+        
+        TarEntry entry = pEntry;
 
-		for (int i = 0; i &lt; mappers.length; i++) {
-			entry = mappers[i].map(entry);
-		}
-		
-		return entry;
-	}
+        for (int i = 0; i &lt; mappers.length; i++) {
+            entry = mappers[i].map(entry);
+        }
+        
+        return entry;
+    }
 }</diff>
      <filename>src/main/java/org/vafer/jdeb/producers/AbstractDataProducer.java</filename>
    </modified>
    <modified>
      <diff>@@ -36,66 +36,66 @@ import org.vafer.jdeb.mapping.Mapper;
  */
 public final class DataProducerArchive extends AbstractDataProducer implements DataProducer {
 
-	private final File archive;
-	
-	public DataProducerArchive( final File pArchive, final String[] pIncludes, final String[] pExcludes, final Mapper[] pMappers ) {
-		super(pIncludes, pExcludes, pMappers);
-		archive = pArchive;
-	}
-		
-	public void produce( final DataConsumer receiver ) throws IOException {
+    private final File archive;
+    
+    public DataProducerArchive( final File pArchive, final String[] pIncludes, final String[] pExcludes, final Mapper[] pMappers ) {
+        super(pIncludes, pExcludes, pMappers);
+        archive = pArchive;
+    }
+        
+    public void produce( final DataConsumer receiver ) throws IOException {
 
-		TarInputStream archiveInputStream = null;
-		try {
-			archiveInputStream = new TarInputStream(getCompressedInputStream(new FileInputStream(archive)));
+        TarInputStream archiveInputStream = null;
+        try {
+            archiveInputStream = new TarInputStream(getCompressedInputStream(new FileInputStream(archive)));
 
-			while(true) {
-				
-				TarEntry entry = archiveInputStream.getNextEntry();
+            while(true) {
+                
+                TarEntry entry = archiveInputStream.getNextEntry();
 
-				if (entry == null) {
-					break;
-				}
+                if (entry == null) {
+                    break;
+                }
 
-				if (!isIncluded(entry.getName())) {
-					continue;					
-				}				
+                if (!isIncluded(entry.getName())) {
+                    continue;                   
+                }               
 
-				entry = map(entry);
-				
-				if (entry.isDirectory()) {
-					receiver.onEachDir(entry.getName(), entry.getLinkName(), entry.getUserName(), entry.getUserId(), entry.getGroupName(), entry.getGroupId(), entry.getMode(), entry.getSize());
-					continue;
-				}
-				receiver.onEachFile(archiveInputStream, entry.getName(), entry.getLinkName(), entry.getUserName(), entry.getUserId(), entry.getGroupName(), entry.getGroupId(), entry.getMode(), entry.getSize());						
-			}
+                entry = map(entry);
+                
+                if (entry.isDirectory()) {
+                    receiver.onEachDir(entry.getName(), entry.getLinkName(), entry.getUserName(), entry.getUserId(), entry.getGroupName(), entry.getGroupId(), entry.getMode(), entry.getSize());
+                    continue;
+                }
+                receiver.onEachFile(archiveInputStream, entry.getName(), entry.getLinkName(), entry.getUserName(), entry.getUserId(), entry.getGroupName(), entry.getGroupId(), entry.getMode(), entry.getSize());                      
+            }
 
-		} finally {
-			if (archiveInputStream != null) {
-				archiveInputStream.close();
-			}
-		}		
-	}
+        } finally {
+            if (archiveInputStream != null) {
+                archiveInputStream.close();
+            }
+        }       
+    }
 
 
-	/**
-	 * Guess the compression used by looking at the first bytes of the stream.
-	 */
-	private InputStream getCompressedInputStream(InputStream in) throws IOException {
-		PushbackInputStream pin = new PushbackInputStream(in, 2);
-		byte[] header = new byte[2];
-		if (pin.read(header) != header.length) {
-			throw new IOException(&quot;Could not read header&quot;);
-		}
+    /**
+     * Guess the compression used by looking at the first bytes of the stream.
+     */
+    private InputStream getCompressedInputStream(InputStream in) throws IOException {
+        PushbackInputStream pin = new PushbackInputStream(in, 2);
+        byte[] header = new byte[2];
+        if (pin.read(header) != header.length) {
+            throw new IOException(&quot;Could not read header&quot;);
+        }
 
-		if (header[0] == (byte) 0x1f &amp;&amp; header[1] == (byte) 0x8b) {
-			pin.unread(header);
-			return new GZIPInputStream(pin);
-		} else if (header[0] == 'B' &amp;&amp; header[1] == 'Z') {
-			return new CBZip2InputStream(pin);
-		} else {
-			throw new IOException(&quot;Unsupported archive format : &quot; + archive);
-		}
-	}
-	
+        if (header[0] == (byte) 0x1f &amp;&amp; header[1] == (byte) 0x8b) {
+            pin.unread(header);
+            return new GZIPInputStream(pin);
+        } else if (header[0] == 'B' &amp;&amp; header[1] == 'Z') {
+            return new CBZip2InputStream(pin);
+        } else {
+            throw new IOException(&quot;Unsupported archive format : &quot; + archive);
+        }
+    }
+    
 }</diff>
      <filename>src/main/java/org/vafer/jdeb/producers/DataProducerArchive.java</filename>
    </modified>
    <modified>
      <diff>@@ -35,94 +35,94 @@ import org.vafer.jdeb.utils.Utils;
  */
 public final class DataProducerDirectory extends AbstractDataProducer implements DataProducer {
 
-	private final DirectoryScanner scanner = new DirectoryScanner();
-	
-	public DataProducerDirectory( final File pDir, final String[] pIncludes, final String[] pExcludes, final Mapper[] pMappers ) {
-		super(pIncludes, pExcludes, pMappers);
-		scanner.setBasedir(pDir);
-		scanner.setIncludes(pIncludes);
-		scanner.setExcludes(pExcludes);
-		scanner.setCaseSensitive(true);
-		scanner.setFollowSymlinks(true);
-	}
-	
-	public void produce( final DataConsumer receiver ) throws IOException {
-
-		scanner.scan();
-
-		final File baseDir = scanner.getBasedir();
-
-		final String[] dirs = scanner.getIncludedDirectories();
-		for (int i = 0; i &lt; dirs.length; i++) {
-			final File file = new File(baseDir, dirs[i]);
-			String dirname = getFilename(baseDir, file);
-
-			if (&quot;&quot;.equals(dirname)) {
-				continue;
-			}
-
-			if (!isIncluded(dirname)) {
-				continue;
-			}
-
-			if ('/' != File.separatorChar) {
-				dirname = dirname.replace(File.separatorChar, '/');
-			}
-
-			TarEntry entry = new TarEntry(dirname);
-			entry.setUserId(0);
-			entry.setUserName(&quot;root&quot;);
-			entry.setGroupId(0);
-			entry.setGroupName(&quot;root&quot;);
-			entry.setMode(TarEntry.DEFAULT_DIR_MODE);
-
-			entry = map(entry);
-
-			entry.setSize(0);
-
-			receiver.onEachDir(entry.getName(), entry.getLinkName(), entry.getUserName(), entry.getUserId(), entry.getGroupName(), entry.getGroupId(), entry.getMode(), entry.getSize());
-		}
-
-
-		final String[] files = scanner.getIncludedFiles();
-
-		for (int i = 0; i &lt; files.length; i++) {
-			final File file = new File(baseDir, files[i]);
-			String filename = getFilename(baseDir, file);
-
-			if (!isIncluded(filename)) {
-				continue;
-			}
-
-			if ('/' != File.separatorChar) {
-				filename = filename.replace(File.separatorChar, '/');
-			}
-
-			TarEntry entry = new TarEntry(filename);
-			entry.setUserId(0);
-			entry.setUserName(&quot;root&quot;);
-			entry.setGroupId(0);
-			entry.setGroupName(&quot;root&quot;);
-			entry.setMode(TarEntry.DEFAULT_FILE_MODE);
-
-			entry = map(entry);
-
-			entry.setSize(file.length());
-
-			final InputStream inputStream = new FileInputStream(file);
-			try {
-				receiver.onEachFile(inputStream, entry.getName(), entry.getLinkName(), entry.getUserName(), entry.getUserId(), entry.getGroupName(), entry.getGroupId(), entry.getMode(), entry.getSize());
-			} finally {
-				inputStream.close();
-			}
-		}
-	}
-
-	private String getFilename( File root, File file ) {
-		
-		final String relativeFilename = file.getAbsolutePath().substring(root.getAbsolutePath().length());		
-		
-		return Utils.stripLeadingSlash(relativeFilename);
-	}
+    private final DirectoryScanner scanner = new DirectoryScanner();
+    
+    public DataProducerDirectory( final File pDir, final String[] pIncludes, final String[] pExcludes, final Mapper[] pMappers ) {
+        super(pIncludes, pExcludes, pMappers);
+        scanner.setBasedir(pDir);
+        scanner.setIncludes(pIncludes);
+        scanner.setExcludes(pExcludes);
+        scanner.setCaseSensitive(true);
+        scanner.setFollowSymlinks(true);
+    }
+    
+    public void produce( final DataConsumer receiver ) throws IOException {
+
+        scanner.scan();
+
+        final File baseDir = scanner.getBasedir();
+
+        final String[] dirs = scanner.getIncludedDirectories();
+        for (int i = 0; i &lt; dirs.length; i++) {
+            final File file = new File(baseDir, dirs[i]);
+            String dirname = getFilename(baseDir, file);
+
+            if (&quot;&quot;.equals(dirname)) {
+                continue;
+            }
+
+            if (!isIncluded(dirname)) {
+                continue;
+            }
+
+            if ('/' != File.separatorChar) {
+                dirname = dirname.replace(File.separatorChar, '/');
+            }
+
+            TarEntry entry = new TarEntry(dirname);
+            entry.setUserId(0);
+            entry.setUserName(&quot;root&quot;);
+            entry.setGroupId(0);
+            entry.setGroupName(&quot;root&quot;);
+            entry.setMode(TarEntry.DEFAULT_DIR_MODE);
+
+            entry = map(entry);
+
+            entry.setSize(0);
+
+            receiver.onEachDir(entry.getName(), entry.getLinkName(), entry.getUserName(), entry.getUserId(), entry.getGroupName(), entry.getGroupId(), entry.getMode(), entry.getSize());
+        }
+
+
+        final String[] files = scanner.getIncludedFiles();
+
+        for (int i = 0; i &lt; files.length; i++) {
+            final File file = new File(baseDir, files[i]);
+            String filename = getFilename(baseDir, file);
+
+            if (!isIncluded(filename)) {
+                continue;
+            }
+
+            if ('/' != File.separatorChar) {
+                filename = filename.replace(File.separatorChar, '/');
+            }
+
+            TarEntry entry = new TarEntry(filename);
+            entry.setUserId(0);
+            entry.setUserName(&quot;root&quot;);
+            entry.setGroupId(0);
+            entry.setGroupName(&quot;root&quot;);
+            entry.setMode(TarEntry.DEFAULT_FILE_MODE);
+
+            entry = map(entry);
+
+            entry.setSize(file.length());
+
+            final InputStream inputStream = new FileInputStream(file);
+            try {
+                receiver.onEachFile(inputStream, entry.getName(), entry.getLinkName(), entry.getUserName(), entry.getUserId(), entry.getGroupName(), entry.getGroupId(), entry.getMode(), entry.getSize());
+            } finally {
+                inputStream.close();
+            }
+        }
+    }
+
+    private String getFilename( File root, File file ) {
+        
+        final String relativeFilename = file.getAbsolutePath().substring(root.getAbsolutePath().length());      
+        
+        return Utils.stripLeadingSlash(relativeFilename);
+    }
 
 }
\ No newline at end of file</diff>
      <filename>src/main/java/org/vafer/jdeb/producers/DataProducerDirectory.java</filename>
    </modified>
    <modified>
      <diff>@@ -35,57 +35,55 @@ import org.vafer.jdeb.DataProducer;
  */
 public final class FileSetDataProducer implements DataProducer {
 
-	private final FileSet fileset;
+    private final FileSet fileset;
 
-	public FileSetDataProducer( final FileSet pFileset ) {
-		fileset = pFileset;
-	}
+    public FileSetDataProducer( final FileSet pFileset ) {
+        fileset = pFileset;
+    }
 
-	public void produce( final DataConsumer pReceiver ) throws IOException {
-		String user = &quot;root&quot;;
-		int uid = 0;
-		String group = &quot;root&quot;;
-		int gid = 0;
-		int filemode = TarEntry.DEFAULT_FILE_MODE;
-		int dirmode = TarEntry.DEFAULT_DIR_MODE;
-		String prefix = &quot;&quot;;
+    public void produce( final DataConsumer pReceiver ) throws IOException {
+        String user = &quot;root&quot;;
+        int uid = 0;
+        String group = &quot;root&quot;;
+        int gid = 0;
+        int filemode = TarEntry.DEFAULT_FILE_MODE;
+        int dirmode = TarEntry.DEFAULT_DIR_MODE;
+        String prefix = &quot;&quot;;
 
-		if (fileset instanceof Tar.TarFileSet) {
-			Tar.TarFileSet tarfileset = (Tar.TarFileSet) fileset;
-			user = tarfileset.getUserName();
-			uid = tarfileset.getUid();
-			group = tarfileset.getGroup();
-			gid = tarfileset.getGid();
-			filemode = tarfileset.getMode();
-			dirmode = tarfileset.getDirMode();
-			prefix = tarfileset.getPrefix();
-		}
+        if (fileset instanceof Tar.TarFileSet) {
+            Tar.TarFileSet tarfileset = (Tar.TarFileSet) fileset;
+            user = tarfileset.getUserName();
+            uid = tarfileset.getUid();
+            group = tarfileset.getGroup();
+            gid = tarfileset.getGid();
+            filemode = tarfileset.getMode();
+            dirmode = tarfileset.getDirMode();
+            prefix = tarfileset.getPrefix();
+        }
 
-		final DirectoryScanner scanner = fileset.getDirectoryScanner(fileset.getProject());
-		scanner.scan();
+        final DirectoryScanner scanner = fileset.getDirectoryScanner(fileset.getProject());
+        scanner.scan();
 
-		final File basedir = scanner.getBasedir();
+        final File basedir = scanner.getBasedir();
 
-		final String[] directories = scanner.getIncludedDirectories();
-		for (int i = 0; i &lt; directories.length; i++) {
-			String name = directories[i];
-            name = name.replace('\\', '/');
+        final String[] directories = scanner.getIncludedDirectories();
+        for (int i = 0; i &lt; directories.length; i++) {
+            final String name = directories[i].replace('\\', '/');
 
             pReceiver.onEachDir(prefix + &quot;/&quot; + name, null, user, uid, group, gid, dirmode, 0);
-		}
+        }
 
-		final String[] files = scanner.getIncludedFiles();
-		for (int i = 0; i &lt; files.length; i++) {
-			String name = files[i];
-            name = name.replace('\\', '/');
-            File file = new File(basedir, name);
+        final String[] files = scanner.getIncludedFiles();
+        for (int i = 0; i &lt; files.length; i++) {
+            final String name = files[i].replace('\\', '/');
+            final File file = new File(basedir, name);
 
-			final InputStream inputStream = new FileInputStream(file);
-			try {
-				pReceiver.onEachFile(inputStream, prefix + &quot;/&quot; + name, null, user, uid, group, gid,filemode, file.length());
-			} finally {
-				inputStream.close();
-			}
-		}
-	}
+            final InputStream inputStream = new FileInputStream(file);
+            try {
+                pReceiver.onEachFile(inputStream, prefix + &quot;/&quot; + name, null, user, uid, group, gid,filemode, file.length());
+            } finally {
+                inputStream.close();
+            }
+        }
+    }
 }</diff>
      <filename>src/main/java/org/vafer/jdeb/producers/FileSetDataProducer.java</filename>
    </modified>
    <modified>
      <diff>@@ -50,41 +50,41 @@ public final class SigningUtils {
 
         final PGPSecretKeyRingCollection pgpSec = new PGPSecretKeyRingCollection(PGPUtil.getDecoderStream(pInput));
 
-    	final Iterator rIt = pgpSec.getKeyRings();
-
-		while (rIt.hasNext()) {
-			final PGPSecretKeyRing kRing = (PGPSecretKeyRing) rIt.next();
-			final Iterator kIt = kRing.getSecretKeys();
-
-			while (kIt.hasNext()) {
-				final PGPSecretKey k = (PGPSecretKey) kIt.next();
-
-				if (k.isSigningKey() &amp;&amp; Long.toHexString(k.getKeyID() &amp; 0xFFFFFFFFL).equals(pKey.toLowerCase())) {
-					return k;
-				}
-			}
-		}
-
-		return null;
-	}
-
-	/**
-	 * Create a clear sign signature over the input data. (Not detached)
-	 * 
-	 * @param pInput
-	 * @param pKeyring
-	 * @param pKey
-	 * @param pPassphrase
-	 * @param pOutput
-	 * @throws IOException
-	 * @throws PGPException
-	 * @throws NoSuchProviderException
-	 * @throws NoSuchAlgorithmException
-	 * @throws SignatureException
-	 */
-	public static void clearSign( final InputStream pInput, final InputStream pKeyring, final String pKey, final String pPassphrase, final OutputStream pOutput ) throws IOException, PGPException, NoSuchProviderException, NoSuchAlgorithmException, SignatureException {
-		
-		Security.addProvider( new BouncyCastleProvider() );
+        final Iterator rIt = pgpSec.getKeyRings();
+
+        while (rIt.hasNext()) {
+            final PGPSecretKeyRing kRing = (PGPSecretKeyRing) rIt.next();
+            final Iterator kIt = kRing.getSecretKeys();
+
+            while (kIt.hasNext()) {
+                final PGPSecretKey k = (PGPSecretKey) kIt.next();
+
+                if (k.isSigningKey() &amp;&amp; Long.toHexString(k.getKeyID() &amp; 0xFFFFFFFFL).equals(pKey.toLowerCase())) {
+                    return k;
+                }
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * Create a clear sign signature over the input data. (Not detached)
+     * 
+     * @param pInput
+     * @param pKeyring
+     * @param pKey
+     * @param pPassphrase
+     * @param pOutput
+     * @throws IOException
+     * @throws PGPException
+     * @throws NoSuchProviderException
+     * @throws NoSuchAlgorithmException
+     * @throws SignatureException
+     */
+    public static void clearSign( final InputStream pInput, final InputStream pKeyring, final String pKey, final String pPassphrase, final OutputStream pOutput ) throws IOException, PGPException, NoSuchProviderException, NoSuchAlgorithmException, SignatureException {
+        
+        Security.addProvider( new BouncyCastleProvider() );
         
         final PGPSecretKey secretKey = getSecretKey(pKeyring, pKey);
         final PGPPrivateKey privateKey = secretKey.extractPrivateKey(pPassphrase.toCharArray(), &quot;BC&quot;);
@@ -101,7 +101,7 @@ public final class SigningUtils {
 //            subpackageGenerator.setSignerUserID(false, (String)it.next());
 //            signatureGenerator.setHashedSubpackets(subpackageGenerator.generate());
 //        }
-	
+    
         final ArmoredOutputStream armoredOutput = new ArmoredOutputStream(pOutput);
         
         armoredOutput.beginClearText(digest);
@@ -113,17 +113,17 @@ public final class SigningUtils {
         processLine(reader.readLine(), armoredOutput, signatureGenerator);
         
         while(true) {
-        	final String line = reader.readLine();
-        	
-        	if (line == null) {
-            	armoredOutput.write(newline);
-        		break;
-        	}
-        	        	
-        	armoredOutput.write(newline);
-        	signatureGenerator.update(newline);
-
-            processLine(line, armoredOutput, signatureGenerator);        	
+            final String line = reader.readLine();
+            
+            if (line == null) {
+                armoredOutput.write(newline);
+                break;
+            }
+                        
+            armoredOutput.write(newline);
+            signatureGenerator.update(newline);
+
+            processLine(line, armoredOutput, signatureGenerator);           
         }
         
         armoredOutput.endClearText();
@@ -133,29 +133,29 @@ public final class SigningUtils {
         signatureGenerator.generate().encode(pgpOutput);
 
         armoredOutput.close();
-		
-	}
-
-
-	private static void processLine( final String pLine, final ArmoredOutputStream pArmoredOutput, final PGPSignatureGenerator pSignatureGenerator ) throws IOException, SignatureException {
-
-		if (pLine == null) {
-			return;
-		}
-		
-		final char[] chars = pLine.toCharArray();
-    	int len = chars.length;
-
-    	while(len &gt; 0) {
-    		if (!Character.isWhitespace(chars[len-1])) {
-    			break;
-    		}
-    		len--;
-    	}
-
-    	final byte[] data = pLine.substring(0, len).getBytes(&quot;UTF-8&quot;);
-    	
-    	pArmoredOutput.write(data);
-    	pSignatureGenerator.update(data);
-	}
+        
+    }
+
+
+    private static void processLine( final String pLine, final ArmoredOutputStream pArmoredOutput, final PGPSignatureGenerator pSignatureGenerator ) throws IOException, SignatureException {
+
+        if (pLine == null) {
+            return;
+        }
+        
+        final char[] chars = pLine.toCharArray();
+        int len = chars.length;
+
+        while(len &gt; 0) {
+            if (!Character.isWhitespace(chars[len-1])) {
+                break;
+            }
+            len--;
+        }
+
+        final byte[] data = pLine.substring(0, len).getBytes(&quot;UTF-8&quot;);
+        
+        pArmoredOutput.write(data);
+        pSignatureGenerator.update(data);
+    }
 }</diff>
      <filename>src/main/java/org/vafer/jdeb/signing/SigningUtils.java</filename>
    </modified>
    <modified>
      <diff>@@ -29,30 +29,30 @@ import java.security.MessageDigest;
  */
 public class InformationOutputStream extends DigestOutputStream {
 
-	private final MessageDigest digest;
-	private long size;
-	
-	public InformationOutputStream(OutputStream pStream, MessageDigest pDigest) {
-		super(pStream, pDigest);
-		digest = pDigest;
-		size = 0;
-	}
-	
-	public String getMd5() {
-		return Utils.toHex(digest.digest());
-	}
-	
-	public void write(byte[] b, int off, int len) throws IOException {
-		super.write(b, off, len);
-		size += len;
-	}
+    private final MessageDigest digest;
+    private long size;
+    
+    public InformationOutputStream(OutputStream pStream, MessageDigest pDigest) {
+        super(pStream, pDigest);
+        digest = pDigest;
+        size = 0;
+    }
+    
+    public String getMd5() {
+        return Utils.toHex(digest.digest());
+    }
+    
+    public void write(byte[] b, int off, int len) throws IOException {
+        super.write(b, off, len);
+        size += len;
+    }
 
-	public void write(int b) throws IOException {
-		super.write(b);
-		size++;
-	}
+    public void write(int b) throws IOException {
+        super.write(b);
+        size++;
+    }
 
-	public long getSize() {
-		return size;
-	}
+    public long getSize() {
+        return size;
+    }
 }
\ No newline at end of file</diff>
      <filename>src/main/java/org/vafer/jdeb/utils/InformationOutputStream.java</filename>
    </modified>
    <modified>
      <diff>@@ -27,14 +27,14 @@ import java.util.Map;
 
 public final class MapVariableResolver implements VariableResolver {
 
-	private final Map map;
-	
-	public MapVariableResolver( final Map pMap ) {
-		map = pMap;
-	}
-	
-	public String get( final String pKey ) {
-		return (String) map.get(pKey);
-	}
+    private final Map map;
+    
+    public MapVariableResolver( final Map pMap ) {
+        map = pMap;
+    }
+    
+    public String get( final String pKey ) {
+        return (String) map.get(pKey);
+    }
 
 }</diff>
      <filename>src/main/java/org/vafer/jdeb/utils/MapVariableResolver.java</filename>
    </modified>
    <modified>
      <diff>@@ -30,7 +30,7 @@ import java.text.ParseException;
  */
 public final class Utils {
 
-	public static int copy( final InputStream pInput, final OutputStream pOutput ) throws IOException {
+    public static int copy( final InputStream pInput, final OutputStream pOutput ) throws IOException {
         final byte[] buffer = new byte[2048];
         int count = 0;
         int n = 0;
@@ -41,113 +41,113 @@ public final class Utils {
         return count;
      }
 
-	public static String toHex( final byte[] pBytes ) {
-    	final StringBuffer sb = new StringBuffer();
+    public static String toHex( final byte[] pBytes ) {
+        final StringBuffer sb = new StringBuffer();
 
-    	for (int i = 0; i &lt; pBytes.length; ++i) {
-    		sb.append(Integer.toHexString((pBytes[i]&gt;&gt;4) &amp; 0x0f));
-    		sb.append(Integer.toHexString(pBytes[i] &amp; 0x0f));
-    	}
+        for (int i = 0; i &lt; pBytes.length; ++i) {
+            sb.append(Integer.toHexString((pBytes[i]&gt;&gt;4) &amp; 0x0f));
+            sb.append(Integer.toHexString(pBytes[i] &amp; 0x0f));
+        }
+
+        return sb.toString();
+    }
+
+    public static String stripPath( final int p, final String s ) {
+
+        if (p &lt;= 0) {
+            return s;
+        }
+
+        int x = 0;
+        for (int i=0 ; i&lt;p; i++) {
+            x = s.indexOf('/', x);
+            if (x &lt; 0) {
+                return s;
+            }
+        }
+
+        return s.substring(x+1);
+    }
 
-    	return sb.toString();
+    public static String stripLeadingSlash( final String s ) {
+        if (s == null) {
+            return s;
+        }
+        if (s.length() == 0) {
+            return s;
+        }
+        if (s.charAt(0) == '/') {
+            return s.substring(1);
+        }
+        return s;
     }
 
-	public static String stripPath( final int p, final String s ) {
-
-		if (p &lt;= 0) {
-			return s;
-		}
-
-		int x = 0;
-		for (int i=0 ; i&lt;p; i++) {
-			x = s.indexOf('/', x);
-			if (x &lt; 0) {
-				return s;
-			}
-		}
-
-		return s.substring(x+1);
-	}
-
-	public static String stripLeadingSlash( final String s ) {
-		if (s == null) {
-			return s;
-		}
-		if (s.length() == 0) {
-			return s;
-		}
-		if (s.charAt(0) == '/') {
-			return s.substring(1);
-		}
-		return s;
-	}
-
-	
+    
     /**
-	 * Substitute the variables in the given expression with the
-	 * values from the resolver
-	 * 
-	 * @param pVariables
-	 * @param pExpression
-	 * @return
-	 */
-	public static String replaceVariables(final VariableResolver pResolver, final String pExpression, final String pOpen, final String pClose) throws ParseException {
-
-		final char[] s = pExpression.toCharArray();
-
-		final char[] open = pOpen.toCharArray();
-		final char[] close = pClose.toCharArray();
-
-		final StringBuffer out = new StringBuffer();
-		StringBuffer sb = new StringBuffer();
-		char[] watch = open;
-		int w = 0;
-		for (int i = 0; i &lt; s.length; i++) {
-			char c = s[i];
-
-			if (c == watch[w]) {
-				w++;
-				if (watch.length == w) {
-					// found the full token to watch for
-					
-					if (watch == open) {
-						// found open
-						out.append(sb);
-						sb = new StringBuffer();
-						// search for close
-						watch = close;
-					} else if (watch == close) {
-						// found close
-						final String variable = (String) pResolver.get(sb.toString());
-						if (variable != null) {
-							out.append(variable);
-						} else {
-							throw new ParseException(&quot;Unknown variable &quot; + sb, i);
-						}
-						sb = new StringBuffer();
-						// search for open
-						watch = open;
-					}
-					w = 0;
-				}
-			} else {
-
-				if (w &gt; 0) {
-					sb.append(watch, 0, w);
-				}
-
-				sb.append(c);
-
-				w = 0;
-			}
-		}
-
-		if (watch == close) {
-			out.append(open);
-		}
-		out.append(sb);
-
-		return out.toString();
-	}
-	
+     * Substitute the variables in the given expression with the
+     * values from the resolver
+     * 
+     * @param pVariables
+     * @param pExpression
+     * @return
+     */
+    public static String replaceVariables(final VariableResolver pResolver, final String pExpression, final String pOpen, final String pClose) throws ParseException {
+
+        final char[] s = pExpression.toCharArray();
+
+        final char[] open = pOpen.toCharArray();
+        final char[] close = pClose.toCharArray();
+
+        final StringBuffer out = new StringBuffer();
+        StringBuffer sb = new StringBuffer();
+        char[] watch = open;
+        int w = 0;
+        for (int i = 0; i &lt; s.length; i++) {
+            char c = s[i];
+
+            if (c == watch[w]) {
+                w++;
+                if (watch.length == w) {
+                    // found the full token to watch for
+                    
+                    if (watch == open) {
+                        // found open
+                        out.append(sb);
+                        sb = new StringBuffer();
+                        // search for close
+                        watch = close;
+                    } else if (watch == close) {
+                        // found close
+                        final String variable = (String) pResolver.get(sb.toString());
+                        if (variable != null) {
+                            out.append(variable);
+                        } else {
+                            throw new ParseException(&quot;Unknown variable &quot; + sb, i);
+                        }
+                        sb = new StringBuffer();
+                        // search for open
+                        watch = open;
+                    }
+                    w = 0;
+                }
+            } else {
+
+                if (w &gt; 0) {
+                    sb.append(watch, 0, w);
+                }
+
+                sb.append(c);
+
+                w = 0;
+            }
+        }
+
+        if (watch == close) {
+            out.append(open);
+        }
+        out.append(sb);
+
+        return out.toString();
+    }
+    
 }</diff>
      <filename>src/main/java/org/vafer/jdeb/utils/Utils.java</filename>
    </modified>
    <modified>
      <diff>@@ -25,5 +25,5 @@ package org.vafer.jdeb.utils;
  */
 
 public interface VariableResolver {
-	public String get( final String pKey );
+    public String get( final String pKey );
 }</diff>
      <filename>src/main/java/org/vafer/jdeb/utils/VariableResolver.java</filename>
    </modified>
    <modified>
      <diff>@@ -17,7 +17,7 @@ git clone git://github.com/tcurdt/jdeb.git
   &lt;repository&gt;
     &lt;id&gt;vafer.org&lt;/id&gt;
     &lt;name&gt;vafer.org Maven Snapshot Repository&lt;/name&gt;
-    &lt;url&gt;https://vafer.org/repository/snaphots&lt;/url&gt;
+    &lt;url&gt;https://vafer.org/repository/snapshots&lt;/url&gt;
   &lt;/repository&gt;
   ...
 +----------------------</diff>
      <filename>src/site/apt/about.apt</filename>
    </modified>
    <modified>
      <diff>@@ -34,66 +34,66 @@ import org.vafer.jdeb.producers.DataProducerDirectory;
 
 public final class DataProducerTestCase extends TestCase {
 
-	public void testCreation() throws Exception {
+    public void testCreation() throws Exception {
 
-		final Processor processor = new Processor(new Console() {
-			public void println(String s) {
-			}
-		}, null);
-		
-		final File control = new File(getClass().getResource(&quot;deb/control/control&quot;).toURI());
-		final File archive1 = new File(getClass().getResource(&quot;deb/data.tgz&quot;).toURI());
-		final File archive2 = new File(getClass().getResource(&quot;deb/data.tar.bz2&quot;).toURI());
-		final File directory = new File(getClass().getResource(&quot;deb/data&quot;).toURI());
-		
-		final DataProducer[] data = new DataProducer[] {
-				new DataProducerArchive(archive1, null, null, null),
-				new DataProducerArchive(archive2, null, null, null),
-				new DataProducerDirectory(directory, null, new String[] { &quot;**/.svn/**&quot; }, null)
-		};
-		
-		final File deb = File.createTempFile(&quot;jdeb&quot;, &quot;.deb&quot;);
-		
-		final PackageDescriptor packageDescriptor = processor.createDeb(new File[] { control }, data, deb, &quot;gzip&quot;);
-		
-		assertTrue(packageDescriptor.isValid());
-		
-		final Set filesInDeb = new HashSet();
+        final Processor processor = new Processor(new Console() {
+            public void println(String s) {
+            }
+        }, null);
+        
+        final File control = new File(getClass().getResource(&quot;deb/control/control&quot;).toURI());
+        final File archive1 = new File(getClass().getResource(&quot;deb/data.tgz&quot;).toURI());
+        final File archive2 = new File(getClass().getResource(&quot;deb/data.tar.bz2&quot;).toURI());
+        final File directory = new File(getClass().getResource(&quot;deb/data&quot;).toURI());
+        
+        final DataProducer[] data = new DataProducer[] {
+                new DataProducerArchive(archive1, null, null, null),
+                new DataProducerArchive(archive2, null, null, null),
+                new DataProducerDirectory(directory, null, new String[] { &quot;**/.svn/**&quot; }, null)
+        };
+        
+        final File deb = File.createTempFile(&quot;jdeb&quot;, &quot;.deb&quot;);
+        
+        final PackageDescriptor packageDescriptor = processor.createDeb(new File[] { control }, data, deb, &quot;gzip&quot;);
+        
+        assertTrue(packageDescriptor.isValid());
+        
+        final Set filesInDeb = new HashSet();
 
-		final ArInputStream ar = new ArInputStream(new FileInputStream(deb));
-		while(true) {
-			final ArEntry arEntry = ar.getNextEntry();
-			if (arEntry == null) {
-				break;
-			}
-			
-			if (&quot;data.tar.gz&quot;.equals(arEntry.getName())) {
-				
-				final TarInputStream tar = new TarInputStream(new GZIPInputStream(new NonClosingInputStream(ar)));
-				
-				while(true) {
-					final TarEntry tarEntry = tar.getNextEntry();
-					if (tarEntry == null) {
-						break;
-					}
-					
-					filesInDeb.add(tarEntry.getName());
-				}
-				
-				tar.close();
-				break;
-			}
-			for (int i = 0; i &lt; arEntry.getLength(); i++) {
-				ar.read();
-			}
-		}
+        final ArInputStream ar = new ArInputStream(new FileInputStream(deb));
+        while(true) {
+            final ArEntry arEntry = ar.getNextEntry();
+            if (arEntry == null) {
+                break;
+            }
+            
+            if (&quot;data.tar.gz&quot;.equals(arEntry.getName())) {
+                
+                final TarInputStream tar = new TarInputStream(new GZIPInputStream(new NonClosingInputStream(ar)));
+                
+                while(true) {
+                    final TarEntry tarEntry = tar.getNextEntry();
+                    if (tarEntry == null) {
+                        break;
+                    }
+                    
+                    filesInDeb.add(tarEntry.getName());
+                }
+                
+                tar.close();
+                break;
+            }
+            for (int i = 0; i &lt; arEntry.getLength(); i++) {
+                ar.read();
+            }
+        }
 
-		ar.close();
-		
-		assertTrue(&quot;testfile wasn't found in the package&quot;, filesInDeb.contains(&quot;./test/testfile&quot;));
-		assertTrue(&quot;testfile2 wasn't found in the package&quot;, filesInDeb.contains(&quot;./test/testfile2&quot;));
-		assertTrue(&quot;testfile3 wasn't found in the package&quot;, filesInDeb.contains(&quot;./test/testfile3&quot;));
+        ar.close();
+        
+        assertTrue(&quot;testfile wasn't found in the package&quot;, filesInDeb.contains(&quot;./test/testfile&quot;));
+        assertTrue(&quot;testfile2 wasn't found in the package&quot;, filesInDeb.contains(&quot;./test/testfile2&quot;));
+        assertTrue(&quot;testfile3 wasn't found in the package&quot;, filesInDeb.contains(&quot;./test/testfile3&quot;));
 
-		assertTrue(&quot;Cannot delete the file &quot; + deb, deb.delete());
-	}
+        assertTrue(&quot;Cannot delete the file &quot; + deb, deb.delete());
+    }
 }</diff>
      <filename>src/test/java/org/vafer/jdeb/DataProducerTestCase.java</filename>
    </modified>
    <modified>
      <diff>@@ -30,14 +30,14 @@ public class ProcessorTestCase extends TestCase {
      * (this test can only fail on Windows)
      */
     public void testBuildDataWithFileSet() throws Exception {
-		Processor processor = new Processor(new Console() {
-			public void println(String s) {
-			}
-		}, null);
+        Processor processor = new Processor(new Console() {
+            public void println(String s) {
+            }
+        }, null);
 
         Project project = new Project();
         project.setCoreLoader(getClass().getClassLoader());
-		project.init();
+        project.init();
 
         FileSet fileset = new FileSet();
         fileset.setDir(new File(getClass().getResource(&quot;deb/data&quot;).toURI()));</diff>
      <filename>src/test/java/org/vafer/jdeb/ProcessorTestCase.java</filename>
    </modified>
    <modified>
      <diff>@@ -41,242 +41,242 @@ import org.vafer.jdeb.ar.NonClosingInputStream;
  */
 public final class DebAntTaskTestCase extends TestCase {
 
-	private Project project;
-
-	protected void setUp() throws Exception {
-		project = new Project();
-		project.setCoreLoader(getClass().getClassLoader());
-		project.init();
-
-		File buildFile = new File(&quot;target/test-classes/testbuild.xml&quot;);
-		project.setBaseDir(buildFile.getParentFile());
-
-		final ProjectHelper helper = ProjectHelper.getProjectHelper();
-		helper.parse(project, buildFile);
-
-		// remove the package previously build
-		File deb = new File(&quot;target/test.deb&quot;);
-		if (deb.exists()) {
-			assertTrue(&quot;Unable to remove the test archive&quot;, deb.delete());
-		}
-	}
-
-	public void testMissingControl() {
-		try {
-			project.executeTarget(&quot;missing-control&quot;);
-			fail(&quot;No exception thrown&quot;);
-		} catch (BuildException e) {
-			// expected
-		}
-	}
-
-	public void testInvalidControl() {
-		try {
-			project.executeTarget(&quot;invalid-control&quot;);
-			fail(&quot;No exception thrown&quot;);
-		} catch (BuildException e) {
-			// expected
-		}
-	}
-
-	public void testMissingDestFile() {
-		try {
-			project.executeTarget(&quot;missing-destfile&quot;);
-			fail(&quot;No exception thrown&quot;);
-		} catch (BuildException e) {
-			// expected
-		}
-	}
-
-	public void testEmptyPackage() {
-		try {
-			project.executeTarget(&quot;empty-package&quot;);
-			fail(&quot;No exception thrown&quot;);
-		} catch (BuildException e) {
-			// expected
-		}
-	}
-
-	public void testPackageWithArchive() {
-		project.executeTarget(&quot;with-archive&quot;);
-
-		assertTrue(&quot;package not build&quot;, new File(&quot;target/test-classes/test.deb&quot;).exists());
-	}
-
-	public void testPackageWithMissingArchive() {
-		try {
-			project.executeTarget(&quot;with-missing-archive&quot;);
-			fail(&quot;No exception thrown&quot;);
-		} catch (BuildException e) {
-			// expected
-		}
-	}
-
-	public void testPackageWithDirectory() {
-		project.executeTarget(&quot;with-directory&quot;);
-
-		assertTrue(&quot;package not build&quot;, new File(&quot;target/test-classes/test.deb&quot;).exists());
-	}
-
-	public void testPackageWithMissingDirectory() {
-		try {
-			project.executeTarget(&quot;with-missing-directory&quot;);
-			fail(&quot;No exception thrown&quot;);
-		} catch (BuildException e) {
-			// expected
-		}
-	}
-
-	/**
-	 * Redirects the Ant output to the specified stream.
-	 */
-	private void redirectOutput(OutputStream out) {
-		DefaultLogger logger = new DefaultLogger();
-		logger.setOutputPrintStream(new PrintStream(out));
-		logger.setMessageOutputLevel(Project.MSG_INFO);
-		project.addBuildListener(logger);
-	}
-
-	public void testVerboseEnabled() {
-		ByteArrayOutputStream out = new ByteArrayOutputStream();
-		redirectOutput(out);
-
-		project.executeTarget(&quot;verbose-enabled&quot;);
-
-		assertTrue(out.toString().indexOf(&quot;Total size&quot;) != -1);
-	}
-
-	public void testVerboseDisabled() {
-		ByteArrayOutputStream out = new ByteArrayOutputStream();
-		redirectOutput(out);
-
-		project.executeTarget(&quot;verbose-disabled&quot;);
-
-		assertTrue(out.toString().indexOf(&quot;Total size&quot;) == -1);
-	}
-
-	public void testFileSet() {
-		project.executeTarget(&quot;fileset&quot;);
-
-		assertTrue(&quot;package not build&quot;, new File(&quot;target/test-classes/test.deb&quot;).exists());
-	}
-
-	public void testTarFileSet() throws Exception {
-		project.executeTarget(&quot;tarfileset&quot;);
-
-		File deb = new File(&quot;target/test-classes/test.deb&quot;);
-		assertTrue(&quot;package not build&quot;, deb.exists());
-
-		ArInputStream in = new ArInputStream(new FileInputStream(deb));
-		ArEntry entry;
-		while ((entry = in.getNextEntry()) != null) {
-			if (entry.getName().equals(&quot;data.tar.gz&quot;)) {
-				TarInputStream tar = new TarInputStream(new GZIPInputStream(new NonClosingInputStream(in)));
-				TarEntry tarentry;
-				while ((tarentry = tar.getNextEntry()) != null) {
-					assertTrue(&quot;prefix&quot;, tarentry.getName().startsWith(&quot;./foo/&quot;));
-					if (tarentry.isDirectory()) {
-						assertEquals(&quot;directory mode (&quot; + tarentry.getName() + &quot;)&quot;, 040700, tarentry.getMode());
-					} else {
-						assertEquals(&quot;file mode (&quot; + tarentry.getName() + &quot;)&quot;, 0100600, tarentry.getMode());
-					}
-					assertEquals(&quot;user&quot;, &quot;ebourg&quot;, tarentry.getUserName());
-					assertEquals(&quot;group&quot;, &quot;ebourg&quot;, tarentry.getGroupName());
-				}
-				tar.close();
-			} else {
-				// skip to the next entry
-				long skip = entry.getLength(); 
-				while(skip &gt; 0) {
-					long skipped = in.skip(skip); 
-					if (skipped == -1) {
-						throw new IOException(&quot;Failed to skip&quot;);
-					}
-					skip -= skipped;
-				}
-			}
-		}
-		in.close();
-	}
-
-	public void testUnkownCompression() throws Exception {
-		try {
-			project.executeTarget(&quot;unknown-compression&quot;);
-			fail(&quot;No exception thrown&quot;);
-		} catch (BuildException e) {
-			// expected
-		}
-	}
-
-	public void testBZip2Compression() throws Exception {
-		project.executeTarget(&quot;bzip2-compression&quot;);
-
-		File deb = new File(&quot;target/test-classes/test.deb&quot;);
-		assertTrue(&quot;package not build&quot;, deb.exists());
-
-		boolean found = false;
-
-		ArInputStream in = new ArInputStream(new FileInputStream(deb));
-		ArEntry entry;
-		while ((entry = in.getNextEntry()) != null) {
-			if (entry.getName().equals(&quot;data.tar.bz2&quot;)) {
-				found = true;
-
-				assertEquals(&quot;header 0&quot;, (byte) 'B', in.read());
-				assertEquals(&quot;header 1&quot;, (byte) 'Z', in.read());
-
-				TarInputStream tar = new TarInputStream(new CBZip2InputStream(in));
-				while ((tar.getNextEntry()) != null);
-				tar.close();
-				break;
-			} else {
-				// skip to the next entry
-				long skip = entry.getLength(); 
-				while(skip &gt; 0) {
-					long skipped = in.skip(skip); 
-					if (skipped == -1) {
-						throw new IOException(&quot;Failed to skip&quot;);
-					}
-					skip -= skipped;
-				}
-			}
-		}
-		in.close();
-
-		assertTrue(&quot;bz2 file not found&quot;, found);
-	}
-
-	public void testNoCompression() throws Exception {
-		project.executeTarget(&quot;no-compression&quot;);
-
-		File deb = new File(&quot;target/test-classes/test.deb&quot;);
-		assertTrue(&quot;package not build&quot;, deb.exists());
-
-		boolean found = false;
-
-		ArInputStream in = new ArInputStream(new FileInputStream(deb));
-		ArEntry entry;
-		while ((entry = in.getNextEntry()) != null) {
-			if (entry.getName().equals(&quot;data.tar&quot;)) {
-				found = true;
-
-				TarInputStream tar = new TarInputStream(new NonClosingInputStream(in));
-				while ((tar.getNextEntry()) != null);
-				tar.close();
-			} else {
-				// skip to the next entry
-				long skip = entry.getLength(); 
-				while(skip &gt; 0) {
-					long skipped = in.skip(skip); 
-					if (skipped == -1) {
-						throw new IOException(&quot;Failed to skip&quot;);
-					}
-					skip -= skipped;
-				}
-			}
-		}
-		in.close();
-
-		assertTrue(&quot;tar file not found&quot;, found);
-	}
+    private Project project;
+
+    protected void setUp() throws Exception {
+        project = new Project();
+        project.setCoreLoader(getClass().getClassLoader());
+        project.init();
+
+        File buildFile = new File(&quot;target/test-classes/testbuild.xml&quot;);
+        project.setBaseDir(buildFile.getParentFile());
+
+        final ProjectHelper helper = ProjectHelper.getProjectHelper();
+        helper.parse(project, buildFile);
+
+        // remove the package previously build
+        File deb = new File(&quot;target/test.deb&quot;);
+        if (deb.exists()) {
+            assertTrue(&quot;Unable to remove the test archive&quot;, deb.delete());
+        }
+    }
+
+    public void testMissingControl() {
+        try {
+            project.executeTarget(&quot;missing-control&quot;);
+            fail(&quot;No exception thrown&quot;);
+        } catch (BuildException e) {
+            // expected
+        }
+    }
+
+    public void testInvalidControl() {
+        try {
+            project.executeTarget(&quot;invalid-control&quot;);
+            fail(&quot;No exception thrown&quot;);
+        } catch (BuildException e) {
+            // expected
+        }
+    }
+
+    public void testMissingDestFile() {
+        try {
+            project.executeTarget(&quot;missing-destfile&quot;);
+            fail(&quot;No exception thrown&quot;);
+        } catch (BuildException e) {
+            // expected
+        }
+    }
+
+    public void testEmptyPackage() {
+        try {
+            project.executeTarget(&quot;empty-package&quot;);
+            fail(&quot;No exception thrown&quot;);
+        } catch (BuildException e) {
+            // expected
+        }
+    }
+
+    public void testPackageWithArchive() {
+        project.executeTarget(&quot;with-archive&quot;);
+
+        assertTrue(&quot;package not build&quot;, new File(&quot;target/test-classes/test.deb&quot;).exists());
+    }
+
+    public void testPackageWithMissingArchive() {
+        try {
+            project.executeTarget(&quot;with-missing-archive&quot;);
+            fail(&quot;No exception thrown&quot;);
+        } catch (BuildException e) {
+            // expected
+        }
+    }
+
+    public void testPackageWithDirectory() {
+        project.executeTarget(&quot;with-directory&quot;);
+
+        assertTrue(&quot;package not build&quot;, new File(&quot;target/test-classes/test.deb&quot;).exists());
+    }
+
+    public void testPackageWithMissingDirectory() {
+        try {
+            project.executeTarget(&quot;with-missing-directory&quot;);
+            fail(&quot;No exception thrown&quot;);
+        } catch (BuildException e) {
+            // expected
+        }
+    }
+
+    /**
+     * Redirects the Ant output to the specified stream.
+     */
+    private void redirectOutput(OutputStream out) {
+        DefaultLogger logger = new DefaultLogger();
+        logger.setOutputPrintStream(new PrintStream(out));
+        logger.setMessageOutputLevel(Project.MSG_INFO);
+        project.addBuildListener(logger);
+    }
+
+    public void testVerboseEnabled() {
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        redirectOutput(out);
+
+        project.executeTarget(&quot;verbose-enabled&quot;);
+
+        assertTrue(out.toString().indexOf(&quot;Total size&quot;) != -1);
+    }
+
+    public void testVerboseDisabled() {
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        redirectOutput(out);
+
+        project.executeTarget(&quot;verbose-disabled&quot;);
+
+        assertTrue(out.toString().indexOf(&quot;Total size&quot;) == -1);
+    }
+
+    public void testFileSet() {
+        project.executeTarget(&quot;fileset&quot;);
+
+        assertTrue(&quot;package not build&quot;, new File(&quot;target/test-classes/test.deb&quot;).exists());
+    }
+
+    public void testTarFileSet() throws Exception {
+        project.executeTarget(&quot;tarfileset&quot;);
+
+        File deb = new File(&quot;target/test-classes/test.deb&quot;);
+        assertTrue(&quot;package not build&quot;, deb.exists());
+
+        ArInputStream in = new ArInputStream(new FileInputStream(deb));
+        ArEntry entry;
+        while ((entry = in.getNextEntry()) != null) {
+            if (entry.getName().equals(&quot;data.tar.gz&quot;)) {
+                TarInputStream tar = new TarInputStream(new GZIPInputStream(new NonClosingInputStream(in)));
+                TarEntry tarentry;
+                while ((tarentry = tar.getNextEntry()) != null) {
+                    assertTrue(&quot;prefix&quot;, tarentry.getName().startsWith(&quot;./foo/&quot;));
+                    if (tarentry.isDirectory()) {
+                        assertEquals(&quot;directory mode (&quot; + tarentry.getName() + &quot;)&quot;, 040700, tarentry.getMode());
+                    } else {
+                        assertEquals(&quot;file mode (&quot; + tarentry.getName() + &quot;)&quot;, 0100600, tarentry.getMode());
+                    }
+                    assertEquals(&quot;user&quot;, &quot;ebourg&quot;, tarentry.getUserName());
+                    assertEquals(&quot;group&quot;, &quot;ebourg&quot;, tarentry.getGroupName());
+                }
+                tar.close();
+            } else {
+                // skip to the next entry
+                long skip = entry.getLength(); 
+                while(skip &gt; 0) {
+                    long skipped = in.skip(skip); 
+                    if (skipped == -1) {
+                        throw new IOException(&quot;Failed to skip&quot;);
+                    }
+                    skip -= skipped;
+                }
+            }
+        }
+        in.close();
+    }
+
+    public void testUnkownCompression() throws Exception {
+        try {
+            project.executeTarget(&quot;unknown-compression&quot;);
+            fail(&quot;No exception thrown&quot;);
+        } catch (BuildException e) {
+            // expected
+        }
+    }
+
+    public void testBZip2Compression() throws Exception {
+        project.executeTarget(&quot;bzip2-compression&quot;);
+
+        File deb = new File(&quot;target/test-classes/test.deb&quot;);
+        assertTrue(&quot;package not build&quot;, deb.exists());
+
+        boolean found = false;
+
+        ArInputStream in = new ArInputStream(new FileInputStream(deb));
+        ArEntry entry;
+        while ((entry = in.getNextEntry()) != null) {
+            if (entry.getName().equals(&quot;data.tar.bz2&quot;)) {
+                found = true;
+
+                assertEquals(&quot;header 0&quot;, (byte) 'B', in.read());
+                assertEquals(&quot;header 1&quot;, (byte) 'Z', in.read());
+
+                TarInputStream tar = new TarInputStream(new CBZip2InputStream(in));
+                while ((tar.getNextEntry()) != null);
+                tar.close();
+                break;
+            } else {
+                // skip to the next entry
+                long skip = entry.getLength(); 
+                while(skip &gt; 0) {
+                    long skipped = in.skip(skip); 
+                    if (skipped == -1) {
+                        throw new IOException(&quot;Failed to skip&quot;);
+                    }
+                    skip -= skipped;
+                }
+            }
+        }
+        in.close();
+
+        assertTrue(&quot;bz2 file not found&quot;, found);
+    }
+
+    public void testNoCompression() throws Exception {
+        project.executeTarget(&quot;no-compression&quot;);
+
+        File deb = new File(&quot;target/test-classes/test.deb&quot;);
+        assertTrue(&quot;package not build&quot;, deb.exists());
+
+        boolean found = false;
+
+        ArInputStream in = new ArInputStream(new FileInputStream(deb));
+        ArEntry entry;
+        while ((entry = in.getNextEntry()) != null) {
+            if (entry.getName().equals(&quot;data.tar&quot;)) {
+                found = true;
+
+                TarInputStream tar = new TarInputStream(new NonClosingInputStream(in));
+                while ((tar.getNextEntry()) != null);
+                tar.close();
+            } else {
+                // skip to the next entry
+                long skip = entry.getLength(); 
+                while(skip &gt; 0) {
+                    long skipped = in.skip(skip); 
+                    if (skipped == -1) {
+                        throw new IOException(&quot;Failed to skip&quot;);
+                    }
+                    skip -= skipped;
+                }
+            }
+        }
+        in.close();
+
+        assertTrue(&quot;tar file not found&quot;, found);
+    }
 }</diff>
      <filename>src/test/java/org/vafer/jdeb/ant/DebAntTaskTestCase.java</filename>
    </modified>
    <modified>
      <diff>@@ -22,23 +22,23 @@ import junit.framework.TestCase;
 
 public final class ArInputStreamTestCase extends TestCase {
 
-	public void testRead() throws Exception {
-		final File archive = new File(getClass().getResource(&quot;data.ar&quot;).toURI());
+    public void testRead() throws Exception {
+        final File archive = new File(getClass().getResource(&quot;data.ar&quot;).toURI());
 
-		final ArInputStream ar = new ArInputStream(new FileInputStream(archive));
-		final ArEntry entry1 = ar.getNextEntry();
+        final ArInputStream ar = new ArInputStream(new FileInputStream(archive));
+        final ArEntry entry1 = ar.getNextEntry();
 
-		assertEquals(&quot;data.tgz&quot;, entry1.getName());
-		assertEquals(148, entry1.getLength());
+        assertEquals(&quot;data.tgz&quot;, entry1.getName());
+        assertEquals(148, entry1.getLength());
 
-		for (int i = 0; i &lt; entry1.getLength(); i++) {
-			ar.read();			
-		}
-		
-		final ArEntry entry2 = ar.getNextEntry();
-		
-		assertNull(entry2);
-		
-		ar.close();
-	}
+        for (int i = 0; i &lt; entry1.getLength(); i++) {
+            ar.read();          
+        }
+        
+        final ArEntry entry2 = ar.getNextEntry();
+        
+        assertNull(entry2);
+        
+        ar.close();
+    }
 }</diff>
      <filename>src/test/java/org/vafer/jdeb/ar/ArInputStreamTestCase.java</filename>
    </modified>
    <modified>
      <diff>@@ -22,14 +22,14 @@ import junit.framework.TestCase;
 
 public final class ArOutputStreamTestCase extends TestCase {
 
-	public void testWrite() throws Exception {
-		final File out1 = File.createTempFile(&quot;jdeb&quot;, &quot;.ar&quot;);
+    public void testWrite() throws Exception {
+        final File out1 = File.createTempFile(&quot;jdeb&quot;, &quot;.ar&quot;);
 
-		final ArOutputStream os = new ArOutputStream(new FileOutputStream(out1));
-		os.putNextEntry(new ArEntry(&quot;data&quot;, 4));
-		os.write(&quot;data&quot;.getBytes());		
-		os.close();
-		
-		assertTrue(out1.delete());
-	}
+        final ArOutputStream os = new ArOutputStream(new FileOutputStream(out1));
+        os.putNextEntry(new ArEntry(&quot;data&quot;, 4));
+        os.write(&quot;data&quot;.getBytes());        
+        os.close();
+        
+        assertTrue(out1.delete());
+    }
 }</diff>
      <filename>src/test/java/org/vafer/jdeb/ar/ArOutputStreamTestCase.java</filename>
    </modified>
    <modified>
      <diff>@@ -25,47 +25,47 @@ import java.io.InputStream;
  */
 public final class NonClosingInputStream extends InputStream {
 
-	private final InputStream delegate;
-	
-	public NonClosingInputStream( final InputStream pDelegate ) {
-		delegate = pDelegate;
-	}
+    private final InputStream delegate;
+    
+    public NonClosingInputStream( final InputStream pDelegate ) {
+        delegate = pDelegate;
+    }
 
-	public int available() throws IOException {
-		return delegate.available();
-	}
+    public int available() throws IOException {
+        return delegate.available();
+    }
 
-	public void close() throws IOException {
-		// we DON'T close
-		// delegate.close();
-	}
+    public void close() throws IOException {
+        // we DON'T close
+        // delegate.close();
+    }
 
-	public void mark(int readlimit) {
-		delegate.mark(readlimit);
-	}
+    public void mark(int readlimit) {
+        delegate.mark(readlimit);
+    }
 
-	public boolean markSupported() {
-		return delegate.markSupported();
-	}
+    public boolean markSupported() {
+        return delegate.markSupported();
+    }
 
-	public int read() throws IOException {
-		return delegate.read();
-	}
+    public int read() throws IOException {
+        return delegate.read();
+    }
 
-	public int read(byte[] b, int off, int len) throws IOException {
-		return delegate.read(b, off, len);
-	}
+    public int read(byte[] b, int off, int len) throws IOException {
+        return delegate.read(b, off, len);
+    }
 
-	public int read(byte[] b) throws IOException {
-		return delegate.read(b);
-	}
+    public int read(byte[] b) throws IOException {
+        return delegate.read(b);
+    }
 
-	public void reset() throws IOException {
-		delegate.reset();
-	}
+    public void reset() throws IOException {
+        delegate.reset();
+    }
 
-	public long skip(long n) throws IOException {
-		return delegate.skip(n);
-	}
-	
+    public long skip(long n) throws IOException {
+        return delegate.skip(n);
+    }
+    
 }</diff>
      <filename>src/test/java/org/vafer/jdeb/ar/NonClosingInputStream.java</filename>
    </modified>
    <modified>
      <diff>@@ -23,59 +23,59 @@ import org.vafer.jdeb.descriptors.PackageDescriptor;
 
 public final class TextfileChangesProviderTestCase extends TestCase {
 
-	public void testParsing() throws Exception {
+    public void testParsing() throws Exception {
 
-		final String input =
-			&quot; * change1\n&quot; +
-			&quot; * change2\n&quot; +
-			&quot;release date=14:00 13.01.2007, version=12324, urgency=low, by=tcurdt@joost.com\n&quot; +
-			&quot; * change1\n&quot; +
-			&quot; * change2\n&quot; +
-			&quot;release date=12:00 10.01.2007, version=10324, urgency=low, by=tcurdt@joost.com\n&quot; +
-			&quot; * change1\n&quot; +
-			&quot; * change2\n&quot;;
-		
-		final PackageDescriptor descriptor = new PackageDescriptor();
-		descriptor.set(&quot;Package&quot;, &quot;package&quot;);
-		descriptor.set(&quot;Version&quot;, &quot;version&quot;);
-		descriptor.set(&quot;Distribution&quot;, &quot;distribution&quot;);
-		descriptor.set(&quot;Date&quot;, &quot;Mon, 20 Aug 2007 15:25:57 +0200&quot;);
-		
-		final TextfileChangesProvider provider = new TextfileChangesProvider(new ByteArrayInputStream(input.getBytes(&quot;UTF-8&quot;)), descriptor);
-		final ChangeSet[] changeSets = provider.getChangesSets();
-		
-		assertNotNull(changeSets);
-		assertEquals(3, changeSets.length);		
-	}
+        final String input =
+            &quot; * change1\n&quot; +
+            &quot; * change2\n&quot; +
+            &quot;release date=14:00 13.01.2007, version=12324, urgency=low, by=tcurdt@joost.com\n&quot; +
+            &quot; * change1\n&quot; +
+            &quot; * change2\n&quot; +
+            &quot;release date=12:00 10.01.2007, version=10324, urgency=low, by=tcurdt@joost.com\n&quot; +
+            &quot; * change1\n&quot; +
+            &quot; * change2\n&quot;;
+        
+        final PackageDescriptor descriptor = new PackageDescriptor();
+        descriptor.set(&quot;Package&quot;, &quot;package&quot;);
+        descriptor.set(&quot;Version&quot;, &quot;version&quot;);
+        descriptor.set(&quot;Distribution&quot;, &quot;distribution&quot;);
+        descriptor.set(&quot;Date&quot;, &quot;Mon, 20 Aug 2007 15:25:57 +0200&quot;);
+        
+        final TextfileChangesProvider provider = new TextfileChangesProvider(new ByteArrayInputStream(input.getBytes(&quot;UTF-8&quot;)), descriptor);
+        final ChangeSet[] changeSets = provider.getChangesSets();
+        
+        assertNotNull(changeSets);
+        assertEquals(3, changeSets.length);     
+    }
 
-	public void testDistributionFromChangesProvider() throws Exception {
+    public void testDistributionFromChangesProvider() throws Exception {
 
-		final String input =
-			&quot;release distribution=production\n&quot; +
-			&quot; * change1\n&quot; +
-			&quot; * change2\n&quot; +
-			&quot;release distribution=staging, date=14:00 13.01.2007, version=12324, urgency=low, by=tcurdt@joost.com\n&quot; +
-			&quot; * change1\n&quot; +
-			&quot; * change2\n&quot; +
-			&quot;release distribution=development, date=12:00 10.01.2007, version=10324, urgency=low, by=tcurdt@joost.com\n&quot; +
-			&quot; * change1\n&quot; +
-			&quot; * change2\n&quot;;
-		
-		final PackageDescriptor descriptor = new PackageDescriptor();
-		descriptor.set(&quot;Package&quot;, &quot;package&quot;);
-		descriptor.set(&quot;Version&quot;, &quot;version&quot;);
-		descriptor.set(&quot;Date&quot;, &quot;Mon, 20 Aug 2007 15:25:57 +0200&quot;);
-		
-		final TextfileChangesProvider provider = new TextfileChangesProvider(new ByteArrayInputStream(input.getBytes(&quot;UTF-8&quot;)), descriptor);
-		final ChangeSet[] changeSets = provider.getChangesSets();
-		
-		assertNotNull(changeSets);
-		assertEquals(3, changeSets.length);
-		
-		assertEquals(&quot;production&quot;, changeSets[0].getDistribution());
-		assertEquals(&quot;staging&quot;, changeSets[1].getDistribution());
-		assertEquals(&quot;development&quot;, changeSets[2].getDistribution());
-		
-	}
+        final String input =
+            &quot;release distribution=production\n&quot; +
+            &quot; * change1\n&quot; +
+            &quot; * change2\n&quot; +
+            &quot;release distribution=staging, date=14:00 13.01.2007, version=12324, urgency=low, by=tcurdt@joost.com\n&quot; +
+            &quot; * change1\n&quot; +
+            &quot; * change2\n&quot; +
+            &quot;release distribution=development, date=12:00 10.01.2007, version=10324, urgency=low, by=tcurdt@joost.com\n&quot; +
+            &quot; * change1\n&quot; +
+            &quot; * change2\n&quot;;
+        
+        final PackageDescriptor descriptor = new PackageDescriptor();
+        descriptor.set(&quot;Package&quot;, &quot;package&quot;);
+        descriptor.set(&quot;Version&quot;, &quot;version&quot;);
+        descriptor.set(&quot;Date&quot;, &quot;Mon, 20 Aug 2007 15:25:57 +0200&quot;);
+        
+        final TextfileChangesProvider provider = new TextfileChangesProvider(new ByteArrayInputStream(input.getBytes(&quot;UTF-8&quot;)), descriptor);
+        final ChangeSet[] changeSets = provider.getChangesSets();
+        
+        assertNotNull(changeSets);
+        assertEquals(3, changeSets.length);
+        
+        assertEquals(&quot;production&quot;, changeSets[0].getDistribution());
+        assertEquals(&quot;staging&quot;, changeSets[1].getDistribution());
+        assertEquals(&quot;development&quot;, changeSets[2].getDistribution());
+        
+    }
 
 }</diff>
      <filename>src/test/java/org/vafer/jdeb/changes/TextfileChangesProviderTestCase.java</filename>
    </modified>
    <modified>
      <diff>@@ -27,65 +27,65 @@ import org.vafer.jdeb.utils.MapVariableResolver;
 
 public final class PackageDescriptorTestCase extends TestCase {
 
-	public void testParse() throws Exception {
-		
-		final InputStream is = new ByteArrayInputStream(
-				(&quot;Key1: Value1\n&quot; +
-				 &quot;Key2: Value2\n&quot; +
-				 &quot; Value2.1\n&quot; +
-				 &quot; Value2.2\n&quot; +
-				 &quot;Key3: Value3\n&quot;).getBytes());
-		
-		final PackageDescriptor d = new PackageDescriptor(is, null);
-		assertFalse(d.isValid());
+    public void testParse() throws Exception {
+        
+        final InputStream is = new ByteArrayInputStream(
+                (&quot;Key1: Value1\n&quot; +
+                 &quot;Key2: Value2\n&quot; +
+                 &quot; Value2.1\n&quot; +
+                 &quot; Value2.2\n&quot; +
+                 &quot;Key3: Value3\n&quot;).getBytes());
+        
+        final PackageDescriptor d = new PackageDescriptor(is, null);
+        assertFalse(d.isValid());
 
-		assertEquals(&quot;key 1&quot;, &quot;Value1&quot;, d.get(&quot;Key1&quot;));
-		assertEquals(&quot;key 2&quot;, &quot;Value2\nValue2.1\nValue2.2&quot;, d.get(&quot;Key2&quot;));
-		assertEquals(&quot;key 3&quot;, &quot;Value3&quot;, d.get(&quot;Key3&quot;));
-	}
+        assertEquals(&quot;key 1&quot;, &quot;Value1&quot;, d.get(&quot;Key1&quot;));
+        assertEquals(&quot;key 2&quot;, &quot;Value2\nValue2.1\nValue2.2&quot;, d.get(&quot;Key2&quot;));
+        assertEquals(&quot;key 3&quot;, &quot;Value3&quot;, d.get(&quot;Key3&quot;));
+    }
 
-	public void testToString() throws Exception {
-		PackageDescriptor descriptor = new PackageDescriptor();
-		descriptor.set(&quot;Package&quot;, &quot;test-package&quot;);
-		descriptor.set(&quot;Description&quot;, &quot;This is\na description\non several lines&quot;);
-		descriptor.set(&quot;Version&quot;, &quot;1.0&quot;);
+    public void testToString() throws Exception {
+        PackageDescriptor descriptor = new PackageDescriptor();
+        descriptor.set(&quot;Package&quot;, &quot;test-package&quot;);
+        descriptor.set(&quot;Description&quot;, &quot;This is\na description\non several lines&quot;);
+        descriptor.set(&quot;Version&quot;, &quot;1.0&quot;);
 
-		String s = descriptor.toString();
+        String s = descriptor.toString();
 
-		PackageDescriptor descriptor2 = new PackageDescriptor(new ByteArrayInputStream(s.getBytes()), null);
-		assertEquals(&quot;Package&quot;, descriptor.get(&quot;Package&quot;), descriptor2.get(&quot;Package&quot;));
-		assertEquals(&quot;Description&quot;, descriptor.get(&quot;Description&quot;), descriptor2.get(&quot;Description&quot;));
-		assertEquals(&quot;Version 3&quot;, descriptor.get(&quot;Version&quot;), descriptor2.get(&quot;Version&quot;));
-	}
-	
-	public void testVariableSubstitution() {
-		
-		final Map map = new HashMap();
-		map.put(&quot;VERSION&quot;, &quot;1.2&quot;);
-		map.put(&quot;MAINTAINER&quot;, &quot;Torsten Curdt &lt;tcurdt@vafer.org&gt;&quot;);
+        PackageDescriptor descriptor2 = new PackageDescriptor(new ByteArrayInputStream(s.getBytes()), null);
+        assertEquals(&quot;Package&quot;, descriptor.get(&quot;Package&quot;), descriptor2.get(&quot;Package&quot;));
+        assertEquals(&quot;Description&quot;, descriptor.get(&quot;Description&quot;), descriptor2.get(&quot;Description&quot;));
+        assertEquals(&quot;Version 3&quot;, descriptor.get(&quot;Version&quot;), descriptor2.get(&quot;Version&quot;));
+    }
+    
+    public void testVariableSubstitution() {
+        
+        final Map map = new HashMap();
+        map.put(&quot;VERSION&quot;, &quot;1.2&quot;);
+        map.put(&quot;MAINTAINER&quot;, &quot;Torsten Curdt &lt;tcurdt@vafer.org&gt;&quot;);
 
-		final PackageDescriptor d = new PackageDescriptor(new MapVariableResolver(map));
-		d.set(&quot;Version&quot;, &quot;[[VERSION]]&quot;);
-		d.set(&quot;Maintainer&quot;, &quot;[[MAINTAINER]]&quot;);
-		d.set(&quot;NoResolve1&quot;, &quot;test[[test&quot;);
-		d.set(&quot;NoResolve2&quot;, &quot;[[test]]&quot;);
-		
-		assertEquals(&quot;1.2&quot;, d.get(&quot;Version&quot;));
-		assertEquals(&quot;Torsten Curdt &lt;tcurdt@vafer.org&gt;&quot;, d.get(&quot;Maintainer&quot;));
-		assertEquals(&quot;test[[test&quot;, d.get(&quot;NoResolve1&quot;));
-		assertEquals(&quot;[[test]]&quot;, d.get(&quot;NoResolve2&quot;));
-	}
-	
-	public void testEmptyLines() throws Exception {
-		final InputStream is = new ByteArrayInputStream(
-				(&quot;Key1: Value1\n&quot; +
-				 &quot;Key2: Value2\n&quot; +
-				 &quot;\n&quot;).getBytes());
-		try {
-			new PackageDescriptor(is, null);
-			fail(&quot;Should throw a ParseException&quot;);
-		} catch(ParseException e) {
-			
-		}		
-	}
+        final PackageDescriptor d = new PackageDescriptor(new MapVariableResolver(map));
+        d.set(&quot;Version&quot;, &quot;[[VERSION]]&quot;);
+        d.set(&quot;Maintainer&quot;, &quot;[[MAINTAINER]]&quot;);
+        d.set(&quot;NoResolve1&quot;, &quot;test[[test&quot;);
+        d.set(&quot;NoResolve2&quot;, &quot;[[test]]&quot;);
+        
+        assertEquals(&quot;1.2&quot;, d.get(&quot;Version&quot;));
+        assertEquals(&quot;Torsten Curdt &lt;tcurdt@vafer.org&gt;&quot;, d.get(&quot;Maintainer&quot;));
+        assertEquals(&quot;test[[test&quot;, d.get(&quot;NoResolve1&quot;));
+        assertEquals(&quot;[[test]]&quot;, d.get(&quot;NoResolve2&quot;));
+    }
+    
+    public void testEmptyLines() throws Exception {
+        final InputStream is = new ByteArrayInputStream(
+                (&quot;Key1: Value1\n&quot; +
+                 &quot;Key2: Value2\n&quot; +
+                 &quot;\n&quot;).getBytes());
+        try {
+            new PackageDescriptor(is, null);
+            fail(&quot;Should throw a ParseException&quot;);
+        } catch(ParseException e) {
+            
+        }       
+    }
 }</diff>
      <filename>src/test/java/org/vafer/jdeb/descriptors/PackageDescriptorTestCase.java</filename>
    </modified>
    <modified>
      <diff>@@ -24,78 +24,78 @@ import org.vafer.jdeb.mapping.LsMapper.ParseError;
 
 public final class LsMapperTestCase extends TestCase {
 
-	private final static String output = 
-		&quot;total 0\n&quot; +
-		&quot;drwxr-xr-x   23 tcurdt  tcurdt   782 Jun 25 03:48 .\n&quot; +
-		&quot;drwxr-xr-x    3 tcurdt  tcurdt   102 Jun 25 03:48 ..\n&quot; +
-		&quot;\n&quot; +
-		&quot;./trunk/target/test-classes/org/vafer/dependency:\n&quot; +
-		&quot;total 176\n&quot; +
-		&quot;drwxr-xr-x   23 tcurdt  tcurdt   782 Jun 25 03:48 .\n&quot; +
-		&quot;drwxr-xr-x    3 tcurdt  tcurdt   102 Jun 25 03:48 ..\n&quot; +
-		&quot;-rw-r--r--    1 tcurdt  tcurdt  2934 Jun 25 03:48 DependenciesTestCase.class\n&quot; +
-		&quot;-rw-r--r--    1 tcurdt  tcurdt   786 Jun 25 03:48 JarCombiningTestCase$1.class\n&quot; +
-		&quot;drwxr-xr-x    4 tcurdt  tcurdt   136 Jun 25 03:48 classes\n&quot; +
-		&quot;\n&quot; +
-		&quot;./trunk/src/test-classes/org/vafer/dependency:\n&quot; +
-		&quot;total 76\n&quot; +
-		&quot;drwxr-xr-x   23 tcurdt  tcurdt   782 Jun 25 03:48 .\n&quot; +
-		&quot;drwxr-xr-x    3 tcurdt  tcurdt   102 Jun 25 03:48 ..\n&quot; +
-		&quot;-rw-r--r--    1 tcurdt  tcurdt  2934 Jun 25 03:48 DependenciesTestCase.class\n&quot; +
-		&quot;-rw-r--r--    1 tcurdt  tcurdt   786 Jun 25 03:48 JarCombiningTestCase$1.class\n&quot; +
-		&quot;drwxr-xr-x    4 tcurdt  tcurdt   136 Jun 25 03:48 classes\n&quot; +
-		&quot;\n&quot;;
-	
-	public void testModes() throws Exception {
-		final ByteArrayInputStream is = new ByteArrayInputStream(output.getBytes(&quot;UTF-8&quot;));
-		
-		final Mapper mapper = new LsMapper(is);
+    private final static String output = 
+        &quot;total 0\n&quot; +
+        &quot;drwxr-xr-x   23 tcurdt  tcurdt   782 Jun 25 03:48 .\n&quot; +
+        &quot;drwxr-xr-x    3 tcurdt  tcurdt   102 Jun 25 03:48 ..\n&quot; +
+        &quot;\n&quot; +
+        &quot;./trunk/target/test-classes/org/vafer/dependency:\n&quot; +
+        &quot;total 176\n&quot; +
+        &quot;drwxr-xr-x   23 tcurdt  tcurdt   782 Jun 25 03:48 .\n&quot; +
+        &quot;drwxr-xr-x    3 tcurdt  tcurdt   102 Jun 25 03:48 ..\n&quot; +
+        &quot;-rw-r--r--    1 tcurdt  tcurdt  2934 Jun 25 03:48 DependenciesTestCase.class\n&quot; +
+        &quot;-rw-r--r--    1 tcurdt  tcurdt   786 Jun 25 03:48 JarCombiningTestCase$1.class\n&quot; +
+        &quot;drwxr-xr-x    4 tcurdt  tcurdt   136 Jun 25 03:48 classes\n&quot; +
+        &quot;\n&quot; +
+        &quot;./trunk/src/test-classes/org/vafer/dependency:\n&quot; +
+        &quot;total 76\n&quot; +
+        &quot;drwxr-xr-x   23 tcurdt  tcurdt   782 Jun 25 03:48 .\n&quot; +
+        &quot;drwxr-xr-x    3 tcurdt  tcurdt   102 Jun 25 03:48 ..\n&quot; +
+        &quot;-rw-r--r--    1 tcurdt  tcurdt  2934 Jun 25 03:48 DependenciesTestCase.class\n&quot; +
+        &quot;-rw-r--r--    1 tcurdt  tcurdt   786 Jun 25 03:48 JarCombiningTestCase$1.class\n&quot; +
+        &quot;drwxr-xr-x    4 tcurdt  tcurdt   136 Jun 25 03:48 classes\n&quot; +
+        &quot;\n&quot;;
+    
+    public void testModes() throws Exception {
+        final ByteArrayInputStream is = new ByteArrayInputStream(output.getBytes(&quot;UTF-8&quot;));
+        
+        final Mapper mapper = new LsMapper(is);
 
-		final TarEntry entry1 = mapper.map(new TarEntry(&quot;trunk/target/test-classes/org/vafer/dependency&quot;));
-		
-		assertEquals(493, entry1.getMode());
-		assertEquals(&quot;tcurdt&quot;, entry1.getUserName());
-		assertEquals(&quot;tcurdt&quot;, entry1.getGroupName());
-		
-		final TarEntry entry2 = mapper.map(new TarEntry(&quot;trunk/target/test-classes/org/vafer/dependency/DependenciesTestCase.class&quot;));
+        final TarEntry entry1 = mapper.map(new TarEntry(&quot;trunk/target/test-classes/org/vafer/dependency&quot;));
+        
+        assertEquals(493, entry1.getMode());
+        assertEquals(&quot;tcurdt&quot;, entry1.getUserName());
+        assertEquals(&quot;tcurdt&quot;, entry1.getGroupName());
+        
+        final TarEntry entry2 = mapper.map(new TarEntry(&quot;trunk/target/test-classes/org/vafer/dependency/DependenciesTestCase.class&quot;));
 
-		assertEquals(420, entry2.getMode());
-		assertEquals(&quot;tcurdt&quot;, entry2.getUserName());
-		assertEquals(&quot;tcurdt&quot;, entry2.getGroupName());
-	}
-	
-	public void testSuccessfulParsing() throws Exception {
-		final ByteArrayInputStream is = new ByteArrayInputStream(output.getBytes(&quot;UTF-8&quot;));
-		
-		final Mapper mapper = new LsMapper(is);
-		
-		final TarEntry unknown = new TarEntry(&quot;xyz&quot;);
-		assertSame(unknown, mapper.map(unknown));
-		
-		final TarEntry known = new TarEntry(&quot;trunk/target/test-classes/org/vafer/dependency&quot;);
-		final TarEntry knownMapped = mapper.map(known);
-		
-		assertNotSame(known, knownMapped);
-		
-	}
-	
-	public void testPrematureEOF() throws Exception {
-		final ByteArrayInputStream is = new ByteArrayInputStream(output.substring(0, 200).getBytes(&quot;UTF-8&quot;));
-		
-		try {
-			new LsMapper(is);
-			fail(&quot;should fail to parse&quot;);
-		} catch(ParseError e) {			
-		}		
-	}
-	
-	public void testWrongFormat() throws Exception {
-		final ByteArrayInputStream is = new ByteArrayInputStream(&quot;asas\n&quot;.getBytes(&quot;UTF-8&quot;));
-		
-		try {
-			new LsMapper(is);
-			fail(&quot;should fail to parse&quot;);
-		} catch(ParseError e) {			
-		}				
-	}
+        assertEquals(420, entry2.getMode());
+        assertEquals(&quot;tcurdt&quot;, entry2.getUserName());
+        assertEquals(&quot;tcurdt&quot;, entry2.getGroupName());
+    }
+    
+    public void testSuccessfulParsing() throws Exception {
+        final ByteArrayInputStream is = new ByteArrayInputStream(output.getBytes(&quot;UTF-8&quot;));
+        
+        final Mapper mapper = new LsMapper(is);
+        
+        final TarEntry unknown = new TarEntry(&quot;xyz&quot;);
+        assertSame(unknown, mapper.map(unknown));
+        
+        final TarEntry known = new TarEntry(&quot;trunk/target/test-classes/org/vafer/dependency&quot;);
+        final TarEntry knownMapped = mapper.map(known);
+        
+        assertNotSame(known, knownMapped);
+        
+    }
+    
+    public void testPrematureEOF() throws Exception {
+        final ByteArrayInputStream is = new ByteArrayInputStream(output.substring(0, 200).getBytes(&quot;UTF-8&quot;));
+        
+        try {
+            new LsMapper(is);
+            fail(&quot;should fail to parse&quot;);
+        } catch(ParseError e) {         
+        }       
+    }
+    
+    public void testWrongFormat() throws Exception {
+        final ByteArrayInputStream is = new ByteArrayInputStream(&quot;asas\n&quot;.getBytes(&quot;UTF-8&quot;));
+        
+        try {
+            new LsMapper(is);
+            fail(&quot;should fail to parse&quot;);
+        } catch(ParseError e) {         
+        }               
+    }
 }</diff>
      <filename>src/test/java/org/vafer/jdeb/mapping/LsMapperTestCase.java</filename>
    </modified>
    <modified>
      <diff>@@ -24,47 +24,47 @@ import junit.framework.TestCase;
 
 public final class SigningTestCase extends TestCase {
 
-	public void testClearSign() throws Exception {
-		
-		final InputStream ring = getClass().getClassLoader().getResourceAsStream(&quot;org/vafer/gpg/secring.gpg&quot;);
-		
-		assertNotNull(ring);
-		
-		final String inputStr = &quot;TEST1\nTEST2\nTEST3\n&quot;; 
-		final byte[] input = inputStr.getBytes(&quot;UTF-8&quot;);
-		
-		final String expectedOutputStr = 
-			&quot;-----BEGIN PGP SIGNED MESSAGE-----\n&quot; + 
-			&quot;Hash: SHA1\n&quot; + 
-			&quot;\n&quot; + 
-			&quot;TEST1\r\n&quot; + 
-			&quot;TEST2\r\n&quot; + 
-			&quot;TEST3\r\n&quot; + 
-			&quot;-----BEGIN PGP SIGNATURE-----\n&quot; + 
-			&quot;Version: BCPG v1.29\n&quot; + 
-			&quot;\n&quot; + 
-			&quot;iEYEARECABAFAkax1rgJEHM9pIAuB02PAABIJgCghFmoCJCZ0CGiqgVLGGPd/Yh5\n&quot; + 
-			&quot;FQQAnRVqvI2ij45JQSHYJBblZ0Vv2meN\n&quot; + 
-			&quot;=aAAT\n&quot; + 
-			&quot;-----END PGP SIGNATURE-----\n&quot;;
-		
-		final byte[] expectedOutput = expectedOutputStr.getBytes(&quot;UTF-8&quot;); 
+    public void testClearSign() throws Exception {
+        
+        final InputStream ring = getClass().getClassLoader().getResourceAsStream(&quot;org/vafer/gpg/secring.gpg&quot;);
+        
+        assertNotNull(ring);
+        
+        final String inputStr = &quot;TEST1\nTEST2\nTEST3\n&quot;; 
+        final byte[] input = inputStr.getBytes(&quot;UTF-8&quot;);
+        
+        final String expectedOutputStr = 
+            &quot;-----BEGIN PGP SIGNED MESSAGE-----\n&quot; + 
+            &quot;Hash: SHA1\n&quot; + 
+            &quot;\n&quot; + 
+            &quot;TEST1\r\n&quot; + 
+            &quot;TEST2\r\n&quot; + 
+            &quot;TEST3\r\n&quot; + 
+            &quot;-----BEGIN PGP SIGNATURE-----\n&quot; + 
+            &quot;Version: BCPG v1.29\n&quot; + 
+            &quot;\n&quot; + 
+            &quot;iEYEARECABAFAkax1rgJEHM9pIAuB02PAABIJgCghFmoCJCZ0CGiqgVLGGPd/Yh5\n&quot; + 
+            &quot;FQQAnRVqvI2ij45JQSHYJBblZ0Vv2meN\n&quot; + 
+            &quot;=aAAT\n&quot; + 
+            &quot;-----END PGP SIGNATURE-----\n&quot;;
+        
+        final byte[] expectedOutput = expectedOutputStr.getBytes(&quot;UTF-8&quot;); 
 
-		final ByteArrayOutputStream os = new ByteArrayOutputStream();
+        final ByteArrayOutputStream os = new ByteArrayOutputStream();
 
-		SigningUtils.clearSign(
-				new ByteArrayInputStream(input),
-				ring,
-				&quot;2E074D8F&quot;, &quot;test&quot;,
-				os);
-		
-		final byte[] output = os.toByteArray();
-		
-		final int from = expectedOutputStr.indexOf(&quot;iEYEAREC&quot;);
-		final int until = expectedOutputStr.indexOf(&quot;=aAAT&quot;) + 5;
-		Arrays.fill(output, from, until, (byte)'?');
-		Arrays.fill(expectedOutput, from, until, (byte)'?');
+        SigningUtils.clearSign(
+                new ByteArrayInputStream(input),
+                ring,
+                &quot;2E074D8F&quot;, &quot;test&quot;,
+                os);
+        
+        final byte[] output = os.toByteArray();
+        
+        final int from = expectedOutputStr.indexOf(&quot;iEYEAREC&quot;);
+        final int until = expectedOutputStr.indexOf(&quot;=aAAT&quot;) + 5;
+        Arrays.fill(output, from, until, (byte)'?');
+        Arrays.fill(expectedOutput, from, until, (byte)'?');
 
-		assertEquals(new String(expectedOutput), new String(output));
-	}
+        assertEquals(new String(expectedOutput), new String(output));
+    }
 }</diff>
      <filename>src/test/java/org/vafer/jdeb/signing/SigningTestCase.java</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>c53d86fd033ff693fa324bc721e6b48ae559e9e8</id>
    </parent>
  </parents>
  <author>
    <name>Torsten Curdt</name>
    <email>tcurdt@vafer.org</email>
  </author>
  <url>http://github.com/tcurdt/jdeb/commit/d808fcb51661e6679dba8511083f7de853c82c71</url>
  <id>d808fcb51661e6679dba8511083f7de853c82c71</id>
  <committed-date>2009-02-17T01:51:37-08:00</committed-date>
  <authored-date>2009-02-17T01:51:37-08:00</authored-date>
  <message>tabs -&gt; spaces,
nitpicking on finals,
rolled back visibility of Processor.buildData() as it does not seem required (or was that really intentional?)</message>
  <tree>8d6d6b08ab50541cd8bf722cf0517050c4ad562e</tree>
  <committer>
    <name>Torsten Curdt</name>
    <email>tcurdt@vafer.org</email>
  </committer>
</commit>
