* @return Map mapping a {@link Changeset} to a {@link Phase}
*/
public Map<Changeset, Phase> phases(String... revs) {
GenericLogCommand cmd = new GenericLogCommand(this).template("{node} {phase}\\0");
cmd.rev(revs);
HgInputStream stream = cmd.stream();
Map<Changeset, Phase> result = Maps.newHashMap();
try {
while (!stream.isEof()) {
// $ hg log --debug --template "{node} {phase}" --rev 5b80e11a7c32121b5fd926b06056bb773eff050f
// removing unknown node dd8c766936b9 from 1-phase boundary
// 5b80e11a7c32121b5fd926b06056bb773eff050f draft
// Observed with at least Mercurial Distributed SCM (version 2.3+10-9d9d15928521)
String node = stream.textUpTo(' ');
while ("removing".equals(node) && stream.find('\n')) {
node = stream.textUpTo(' ');
}
String phaseName = stream.textUpTo('\0');
Phase phase = Phase.fromText(phaseName);
result.put(changeset(node), phase);
}
} catch (IOException e) {
throw new RuntimeIOException(e);
} finally {
try {
stream.consumeAll();
} catch (IOException e) {
throw new RuntimeIOException(e);
}
}