class MercurialHistoryParserRevisionsOnly implements Executor.StreamHandler {
    private final MercurialRepository repository;
    private final Consumer<BoundaryChangesets.IdWithProgress> visitor;

    private final Progress progress;

    MercurialHistoryParserRevisionsOnly(MercurialRepository repository,
                                        Consumer<BoundaryChangesets.IdWithProgress> visitor, Progress progress) {
        this.repository = repository;
        this.visitor = visitor;
        this.progress = progress;
    }

    void parse(File file, String sinceRevision) throws HistoryException {<FILL_FUNCTION_BODY>}

    @Override
    public void processStream(InputStream input) throws IOException {
        try (BufferedReader in = new BufferedReader(new InputStreamReader(input))) {
            String s;
            while ((s = in.readLine()) != null) {
                visitor.accept(new BoundaryChangesets.IdWithProgress(s, progress));
            }
        }
    }
}

        try {
            Executor executor = repository.getHistoryLogExecutor(file, sinceRevision, null, true);
            int status = executor.exec(true, this);

            if (status != 0) {
                throw new HistoryException(
                        String.format("Failed to get revisions for: \"%s\" since revision %s Exit code: %d",
                                file.getAbsolutePath(), sinceRevision, status));
            }
        } catch (IOException e) {
            throw new HistoryException("Failed to get history for: \"" +
                    file.getAbsolutePath() + "\"", e);
        }
    
<no_super_class>