int missing = 0;
	private static void runBulk(BugHistoryCommandLine commandLine) throws FileNotFoundException, IOException, DocumentException {		BufferedReader reader;		if (commandLine.getListFile().equals("-")) {			reader = new BufferedReader(new InputStreamReader(System.in));		} else {			reader = new BufferedReader(new FileReader(commandLine.getListFile()));		}				BugCollectionAndProjectCache cache = new BugCollectionAndProjectCache();		int missing = 0;				String csvRecord;		while ((csvRecord = reader.readLine()) != null) {			csvRecord = csvRecord.trim();			String[] tuple = csvRecord.split(",");			if (tuple.length < 2)				continue;			String origFile = tuple[0];			String newFile = tuple[1];						BugCollectionAndProject orig;			BugCollectionAndProject next;						try {				orig = cache.fetch(origFile);				next = cache.fetch(newFile);			} catch (RuntimeException e) {				throw e;			} catch (Exception e ) {				System.err.println("Warning: error reading bug collection: " + e.toString());				++missing;				continue;			}						if (commandLine.isVerbose()) {				System.out.print("Computing delta from " + origFile + " to " + newFile + "...");				System.out.flush();			}			BugHistory bugHistory = commandLine.createAndExecute(					orig.getBugCollection(), next.getBugCollection(), orig.getProject(), next.getProject());						String outputFile = commandLine.getBulkOutputFileName(newFile);			if (commandLine.isVerbose()) {				System.out.print("Writing " + outputFile + "...");				System.out.flush();			}									bugHistory.writeResultCollection(orig.getProject(), next.getProject(),					new BufferedOutputStream(new FileOutputStream(outputFile)));			if (commandLine.isVerbose()) {				System.out.println("done");			}		}				if (missing > 0) {			System.err.println(missing + " pairs skipped because of missing files");		}	}