package com.googlecode.ant_deb_task;
import java.io.*;
import java.util.*;
import java.text.MessageFormat;
public class BuildDeb
{
private static final String FILE_HEADER_FORMAT = "{0}{1}0 0 100644 {2}`\n";
private static final String DEBIAN_BINARY_CONTENT = "2.0\n";
private static final String DEBIAN_BINARY_NAME = "debian-binary";
private static final String CONTROL_NAME = "control.tar.gz";
private static final String DATA_NAME = "data.tar.gz";
public static void buildDeb(File debFile, File controlFile, File dataFile) throws IOException
{
long now = new Date().getTime() / 1000;
OutputStream deb = new FileOutputStream (debFile);
deb.write("!<arch>\n".getBytes ());
startFileEntry (deb, DEBIAN_BINARY_NAME, now, DEBIAN_BINARY_CONTENT.length());
deb.write(DEBIAN_BINARY_CONTENT.getBytes ());
endFileEntry (deb, DEBIAN_BINARY_CONTENT.length());
startFileEntry (deb, CONTROL_NAME, now, controlFile.length());
FileInputStream control = new FileInputStream(controlFile);
byte[] buffer = new byte[1024];
while(true)
{
int read = control.read(buffer);
if (read == -1)
break;
deb.write(buffer, 0, read);
}
control.close();
endFileEntry (deb, controlFile.length());
startFileEntry (deb, DATA_NAME, now, dataFile.length());
FileInputStream data = new FileInputStream(dataFile);
while(true)
{
int read = data.read(buffer);
if (read == -1)
break;
deb.write(buffer, 0, read);
}
data.close();
endFileEntry (deb, dataFile.length());
deb.close();
}
private static void startFileEntry(OutputStream deb, String name, long time, long length) throws IOException
{
String fileHeader = MessageFormat.format (
FILE_HEADER_FORMAT,
new Object[]{
padd (name, 16),
padd (time, 12),
padd (length, 10)
}
);
deb.write(fileHeader.getBytes ());
}
private static void endFileEntry(OutputStream deb, long length) throws IOException
{
if (length % 2 == 1)
deb.write("\n".getBytes ());
}
private static String padd(long number, int length)
{
return padd(Long.toString(number), length);
}
private static String padd(String text, int length)
{
StringBuffer buffer = new StringBuffer(text);
for (int i = 0; i < length - text.length(); i++)
{
buffer.append(' ');
}
return buffer.toString();
}
public static void main(String[] args) throws IOException
{
buildDeb(new File(args[0]), new File(args[1]), new File(args[2]));
}
}