package hudson.plugins.bitkeeper;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.Reader;
import java.util.ArrayList;
import java.util.Collections;
import org.xml.sax.SAXException;
import hudson.model.AbstractBuild;
import hudson.scm.ChangeLogParser;
import hudson.scm.ChangeLogSet;
import hudson.scm.ChangeLogSet.Entry;
public class BitKeeperChangeLogParser extends ChangeLogParser {
@Override
public ChangeLogSet<? extends Entry> parse(AbstractBuild build,
File changelogFile) throws IOException, SAXException {
BufferedReader changelog = null;
ArrayList<BitKeeperChangeset> changes = new ArrayList<BitKeeperChangeset>();
BitKeeperChangeset cset;
try {
changelog = new BufferedReader(new FileReader(changelogFile));
String line;
cset = null;
while((line = changelog.readLine()) !=null) {
if(line.startsWith("U ")) {
if(cset != null) {
changes.add(cset);
}
cset = new BitKeeperChangeset(line.substring(2));
} else if(line.startsWith("C ")) {
cset.addComment(line.substring(2));
} else if(line.startsWith("T ")) {
cset.addTag(line.substring(2));
} else if(line.startsWith("F ")) {
cset.addPath(line.substring(2));
}
}
} finally {
if(changelog != null)
changelog.close();
}
// grab the last cset
if(cset != null) {
changes.add(cset);
}
return new BitKeeperChangeSetList(build, changes);
}
}