package org.jmeld.vc.bzr; import org.jmeld.vc.*; import org.jmeld.vc.git.GitVersionControl; import org.jmeld.vc.util.*; import org.jmeld.util.*; import java.io.*; public class StatusCmd extends VcCmd<StatusResult> { private enum Phase { state, inventory; } private File file; private Phase phase; public StatusCmd(File file) { this.file = file; initWorkingDirectory(file); } public Result execute() { phase = Phase.state; super.execute("bzr", "status", "-S", file.getAbsolutePath()); phase = Phase.inventory; super.execute("bzr", "inventory", file.getAbsolutePath()); return getResult(); } protected void build(byte[] data) { StatusResult statusResult; StatusResult.Status status; BufferedReader reader; String text; if (phase == Phase.state) { statusResult = new StatusResult(file); } else { statusResult = getResultData(); } reader = new BufferedReader(new InputStreamReader(new ByteArrayInputStream( data))); try { while ((text = reader.readLine()) != null) { if (phase == Phase.state) { if (text.length() < 5) { continue; } status = null; switch (text.charAt(0)) { case '+': switch (text.charAt(1)) { case 'M': case 'K': status = StatusResult.Status.modified; break; case 'N': status = StatusResult.Status.added; break; case 'D': status = StatusResult.Status.removed; break; } break; case ' ': switch (text.charAt(1)) { case 'D': status = StatusResult.Status.missing; break; } break; case '-': status = StatusResult.Status.ignored; break; case '?': status = StatusResult.Status.unversioned; break; } statusResult.addEntry(text.substring(4), status); } else if (phase == Phase.inventory) { status = StatusResult.Status.clean; statusResult.addEntry(text, status); } } } catch (IOException ex) { // This cannot happen! We are reading from a byte array. } setResultData(statusResult); } public static void main(String[] args) { StatusCmd cmd; StatusResult result; File file = parseFile(args); if (file == null) { return; } result = new BazaarVersionControl().executeStatus(file); if (result != null) { for (StatusResult.Entry entry : result.getEntryList()) { System.out.println(entry.getStatus().getShortText() + " " + entry.getName()); } } } }