Mercurial > hg4j
diff src/org/tmatesoft/hg/internal/AnnotateFacility.java @ 546:cd78e8b9d7bc
File annotate test. Refactored FileAnnotation as standalone class, introduced LineInspector to make line offset calc code shared
author | Artem Tikhomirov <tikhomirov.artem@gmail.com> |
---|---|
date | Mon, 18 Feb 2013 19:19:48 +0100 |
parents | 15b406c7cd9d |
children | ab21ac7dd833 |
line wrap: on
line diff
--- a/src/org/tmatesoft/hg/internal/AnnotateFacility.java Fri Feb 15 22:15:13 2013 +0100 +++ b/src/org/tmatesoft/hg/internal/AnnotateFacility.java Mon Feb 18 19:19:48 2013 +0100 @@ -35,7 +35,7 @@ /** * Annotates changes of the file against its parent(s) */ - public void annotateChange(HgDataFile df, int changesetRevisionIndex, Inspector insp) { + public void annotateChange(HgDataFile df, int changesetRevisionIndex, BlockInspector insp) { // TODO detect if file is text/binary (e.g. looking for chars < ' ' and not \t\r\n\f Nodeid fileRev = df.getRepo().getManifest().getFileRevision(changesetRevisionIndex, df.getPath()); int fileRevIndex = df.getRevisionIndex(fileRev); @@ -76,7 +76,7 @@ } @Callback - public interface Inspector { + public interface BlockInspector { void same(EqualBlock block); void added(AddBlock block); void changed(ChangeBlock block); @@ -84,7 +84,7 @@ } @Callback - public interface InspectorEx extends Inspector { // XXX better name + public interface BlockInspectorEx extends BlockInspector { // XXX better name // XXX perhaps, shall pass object instead of separate values for future extension? void start(int originLineCount, int targetLineCount); void done(); @@ -120,13 +120,24 @@ } public interface ChangeBlock extends AddBlock, DeleteBlock { } + + @Callback + public interface LineInspector { + void line(int lineNumber, int changesetRevIndex, LineDescriptor ld); + } + + public interface LineDescriptor { + int totalLines(); + } + + static class BlameBlockInspector extends PatchGenerator.DeltaInspector<LineSequence> { - private final Inspector insp; + private final BlockInspector insp; private final int csetP1; private final int csetTarget; - public BlameBlockInspector(Inspector inspector, int parentCset1, int targetCset) { + public BlameBlockInspector(BlockInspector inspector, int parentCset1, int targetCset) { assert inspector != null; insp = inspector; csetP1 = parentCset1; @@ -136,16 +147,16 @@ @Override public void begin(LineSequence s1, LineSequence s2) { super.begin(s1, s2); - if (insp instanceof InspectorEx) { - ((InspectorEx) insp).start(s1.chunkCount() - 1, s2.chunkCount() - 1); + if (insp instanceof BlockInspectorEx) { + ((BlockInspectorEx) insp).start(s1.chunkCount() - 1, s2.chunkCount() - 1); } } @Override public void end() { super.end(); - if(insp instanceof InspectorEx) { - ((InspectorEx) insp).done(); + if(insp instanceof BlockInspectorEx) { + ((BlockInspectorEx) insp).done(); } }