changeset 163:a5198b6487dc

Record reasons for slow status for future reference
author Artem Tikhomirov <tikhomirov.artem@gmail.com>
date Thu, 10 Mar 2011 03:18:49 +0100
parents c17a08095e44
children d51f1c6aaa28
files src/org/tmatesoft/hg/repo/HgDataFile.java
diffstat 1 files changed, 12 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/org/tmatesoft/hg/repo/HgDataFile.java	Wed Mar 09 13:57:33 2011 +0100
+++ b/src/org/tmatesoft/hg/repo/HgDataFile.java	Thu Mar 10 03:18:49 2011 +0100
@@ -192,16 +192,23 @@
 	public boolean isCopy() throws HgDataStreamException {
 		if (metadata == null || !metadata.checked(0)) {
 			// content() always initializes metadata.
-			 // FIXME this is expensive way to find out metadata, distinct RevlogStream.Iterator would be better.
+			// FIXME this is expensive way to find out metadata, distinct RevlogStream.Iterator would be better.
+			// Alternatively, may parameterize MetadataContentPipe to do prepare only.
+			// For reference, when throwing CancelledException, hg status -A --rev 3:80 takes 70 ms
+			// however, if we just consume buffer instead (buffer.position(buffer.limit()), same command takes ~320ms
+			// (compared to command-line counterpart of 190ms)
 			try {
 				content(0, new ByteChannel() { // No-op channel
-					public int write(ByteBuffer buffer) throws IOException {
+					public int write(ByteBuffer buffer) throws IOException, CancelledException {
 						// pretend we consumed whole buffer
-						int rv = buffer.remaining();
-						buffer.position(buffer.limit());
-						return rv;
+//						int rv = buffer.remaining();
+//						buffer.position(buffer.limit());
+//						return rv;
+						throw new CancelledException();
 					}
 				});
+			} catch (CancelledException ex) {
+				// it's ok, we did that
 			} catch (Exception ex) {
 				throw new HgDataStreamException("Can't initialize metadata", ex);
 			}