Repository with changeset that points to non-existing manifest and changeset that reference same manifest twice (reuse).
These are unlikely to happen in regular repositories, however, 'hg convert' command when importing e.g. from SVN may 
create such odd repositories (reported by Christian Matzat with SmartGit 3 EA, Feb 12, 2012)


C:\Temp\hg\test-log\status-4>java -classpath %HG4j%\bin org.tmatesoft.hg.console.MissingManifestEntry --check
Index:Cset nodeid          Manifest nodeid                  Troubles?
   0:06ccad80ef94  0000000000000000000000000000000000000000! NULL ! !!! NOT FOUND IN THE MANIFEST !!!
   1:19e1f7c8935d  a8648b0904d399a3b89d5ad21eb04c714d2d57f5 OK
   2:ba284a51645d  a8648b0904d399a3b89d5ad21eb04c714d2d57f5 OK

Repository creation:
hg init
mkdir .hg\store\data

RevlogWriter:
		File repo = new File("/temp/hg/test-log/status-4");
		RevlogWriter changelog = new RevlogWriter(repo, ".hg/store/00changelog", false);
		RevlogWriter manifest = new RevlogWriter(repo, ".hg/store/00manifest", true);
		RevlogWriter file1 = new RevlogWriter(repo, ".hg/store/data/file1", false);
		changelog.begin();
		manifest.begin();
		file1.begin();
		final List<String> filesList = Collections.singletonList("file1");
		//
		file1.writeUncompressed(-1, -1, 0, 0, "garbage".getBytes());
		//
		ManifestEntryBuilder mb = new ManifestEntryBuilder();
		ChangelogEntryBuilder csb = new ChangelogEntryBuilder();
		//
		final byte[] cset0 = csb.build(Nodeid.NULL, "Revision with no files modified");
		changelog.writeUncompressed(-1, -1, 0, 0, cset0);
		//
		// now comes real manifest revision with a list of files
		mb.reset().add("file1", file1.getRevision(0));
		manifest.writeUncompressed(-1, -1, 0, 1 /* LINKS CSET 1(sic!)*/, mb.build()); // manifest revision 0
		final byte[] cset1 = csb.setModified(filesList).build(manifest.getRevision(0), "First real manifest revision");
		changelog.writeUncompressed(0, -1, 1, 1, cset1);
		//
		// another changeset that doesn't create own manifest record but uses that existing
		final byte[] cset2 = csb.setModified(filesList).build(manifest.getRevision(0), "Another changeset that references existing manifest");
		changelog.writeUncompressed(1, -1, 2, 2, cset2);
		//
		changelog.end();
		manifest.end();
		file1.end();

hg up