Mercurial > jhg
annotate src/org/tmatesoft/hg/repo/HgBlameInspector.java @ 603:707b5c7c6fa4
Refactor HgBlameFacility: relevant action methods moved to proper home (HgDataFile), as facility doesn't provide anything but packaging of relevant methods/interfaces
| author | Artem Tikhomirov <tikhomirov.artem@gmail.com> | 
|---|---|
| date | Mon, 06 May 2013 18:29:57 +0200 | 
| parents | src/org/tmatesoft/hg/repo/HgBlameFacility.java@43cfa08ff3fd | 
| children | 5f52074707b2 | 
| rev | line source | 
|---|---|
| 542 
a71a05ec11bc
Towards annotate/blame support: general outline of the functionality
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 1 /* | 
| 
a71a05ec11bc
Towards annotate/blame support: general outline of the functionality
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 2 * Copyright (c) 2013 TMate Software Ltd | 
| 
a71a05ec11bc
Towards annotate/blame support: general outline of the functionality
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 3 * | 
| 
a71a05ec11bc
Towards annotate/blame support: general outline of the functionality
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 4 * This program is free software; you can redistribute it and/or modify | 
| 
a71a05ec11bc
Towards annotate/blame support: general outline of the functionality
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 5 * it under the terms of the GNU General Public License as published by | 
| 
a71a05ec11bc
Towards annotate/blame support: general outline of the functionality
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 6 * the Free Software Foundation; version 2 of the License. | 
| 
a71a05ec11bc
Towards annotate/blame support: general outline of the functionality
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 7 * | 
| 
a71a05ec11bc
Towards annotate/blame support: general outline of the functionality
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 8 * This program is distributed in the hope that it will be useful, | 
| 
a71a05ec11bc
Towards annotate/blame support: general outline of the functionality
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 9 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| 
a71a05ec11bc
Towards annotate/blame support: general outline of the functionality
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 
| 
a71a05ec11bc
Towards annotate/blame support: general outline of the functionality
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 11 * GNU General Public License for more details. | 
| 
a71a05ec11bc
Towards annotate/blame support: general outline of the functionality
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 12 * | 
| 
a71a05ec11bc
Towards annotate/blame support: general outline of the functionality
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 13 * For information on how to redistribute this software under | 
| 
a71a05ec11bc
Towards annotate/blame support: general outline of the functionality
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 14 * the terms of a license other than GNU General Public License | 
| 
a71a05ec11bc
Towards annotate/blame support: general outline of the functionality
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 15 * contact TMate Software at support@hg4j.com | 
| 
a71a05ec11bc
Towards annotate/blame support: general outline of the functionality
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 16 */ | 
| 556 
e55f17a7a195
AnnotateFacility renamed to HgBlameFacility and exposed, API shapes out and got some javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
555diff
changeset | 17 package org.tmatesoft.hg.repo; | 
| 542 
a71a05ec11bc
Towards annotate/blame support: general outline of the functionality
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 18 | 
| 562 
6fbca6506bb5
Allow HgBlameFacility.Inspector (former BlockInspector) to throw an exception
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
561diff
changeset | 19 import org.tmatesoft.hg.core.HgCallbackTargetException; | 
| 556 
e55f17a7a195
AnnotateFacility renamed to HgBlameFacility and exposed, API shapes out and got some javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
555diff
changeset | 20 import org.tmatesoft.hg.internal.Callback; | 
| 
e55f17a7a195
AnnotateFacility renamed to HgBlameFacility and exposed, API shapes out and got some javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
555diff
changeset | 21 import org.tmatesoft.hg.internal.Experimental; | 
| 555 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 22 import org.tmatesoft.hg.util.Adaptable; | 
| 542 
a71a05ec11bc
Towards annotate/blame support: general outline of the functionality
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 23 | 
| 
a71a05ec11bc
Towards annotate/blame support: general outline of the functionality
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 24 /** | 
| 603 
707b5c7c6fa4
Refactor HgBlameFacility: relevant action methods moved to proper home (HgDataFile), as facility doesn't provide anything but packaging of relevant methods/interfaces
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
596diff
changeset | 25 * Client's sink for revision differences, diff/annotate functionality. | 
| 
707b5c7c6fa4
Refactor HgBlameFacility: relevant action methods moved to proper home (HgDataFile), as facility doesn't provide anything but packaging of relevant methods/interfaces
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
596diff
changeset | 26 * | 
| 
707b5c7c6fa4
Refactor HgBlameFacility: relevant action methods moved to proper home (HgDataFile), as facility doesn't provide anything but packaging of relevant methods/interfaces
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
596diff
changeset | 27 * When implemented, clients shall not expect new {@link Block blocks} instances in each call. | 
| 
707b5c7c6fa4
Refactor HgBlameFacility: relevant action methods moved to proper home (HgDataFile), as facility doesn't provide anything but packaging of relevant methods/interfaces
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
596diff
changeset | 28 * | 
| 
707b5c7c6fa4
Refactor HgBlameFacility: relevant action methods moved to proper home (HgDataFile), as facility doesn't provide anything but packaging of relevant methods/interfaces
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
596diff
changeset | 29 * In case more information about annotated revision is needed, inspector instances may supply | 
| 
707b5c7c6fa4
Refactor HgBlameFacility: relevant action methods moved to proper home (HgDataFile), as facility doesn't provide anything but packaging of relevant methods/interfaces
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
596diff
changeset | 30 * {@link RevisionDescriptor.Recipient} through {@link Adaptable}. | 
| 542 
a71a05ec11bc
Towards annotate/blame support: general outline of the functionality
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 31 * | 
| 
a71a05ec11bc
Towards annotate/blame support: general outline of the functionality
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 32 * @author Artem Tikhomirov | 
| 
a71a05ec11bc
Towards annotate/blame support: general outline of the functionality
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 33 * @author TMate Software Ltd. | 
| 603 
707b5c7c6fa4
Refactor HgBlameFacility: relevant action methods moved to proper home (HgDataFile), as facility doesn't provide anything but packaging of relevant methods/interfaces
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
596diff
changeset | 34 * @since 1.1 | 
| 542 
a71a05ec11bc
Towards annotate/blame support: general outline of the functionality
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 35 */ | 
| 603 
707b5c7c6fa4
Refactor HgBlameFacility: relevant action methods moved to proper home (HgDataFile), as facility doesn't provide anything but packaging of relevant methods/interfaces
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
596diff
changeset | 36 @Callback | 
| 556 
e55f17a7a195
AnnotateFacility renamed to HgBlameFacility and exposed, API shapes out and got some javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
555diff
changeset | 37 @Experimental(reason="Unstable API") | 
| 603 
707b5c7c6fa4
Refactor HgBlameFacility: relevant action methods moved to proper home (HgDataFile), as facility doesn't provide anything but packaging of relevant methods/interfaces
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
596diff
changeset | 38 public interface HgBlameInspector { | 
| 569 
c4fd1037bc6f
Support for copy/rename follow/no-follow for annotate
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
568diff
changeset | 39 | 
| 603 
707b5c7c6fa4
Refactor HgBlameFacility: relevant action methods moved to proper home (HgDataFile), as facility doesn't provide anything but packaging of relevant methods/interfaces
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
596diff
changeset | 40 void same(EqualBlock block) throws HgCallbackTargetException; | 
| 
707b5c7c6fa4
Refactor HgBlameFacility: relevant action methods moved to proper home (HgDataFile), as facility doesn't provide anything but packaging of relevant methods/interfaces
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
596diff
changeset | 41 void added(AddBlock block) throws HgCallbackTargetException; | 
| 
707b5c7c6fa4
Refactor HgBlameFacility: relevant action methods moved to proper home (HgDataFile), as facility doesn't provide anything but packaging of relevant methods/interfaces
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
596diff
changeset | 42 void changed(ChangeBlock block) throws HgCallbackTargetException; | 
| 
707b5c7c6fa4
Refactor HgBlameFacility: relevant action methods moved to proper home (HgDataFile), as facility doesn't provide anything but packaging of relevant methods/interfaces
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
596diff
changeset | 43 void deleted(DeleteBlock block) throws HgCallbackTargetException; | 
| 562 
6fbca6506bb5
Allow HgBlameFacility.Inspector (former BlockInspector) to throw an exception
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
561diff
changeset | 44 | 
| 
6fbca6506bb5
Allow HgBlameFacility.Inspector (former BlockInspector) to throw an exception
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
561diff
changeset | 45 /** | 
| 554 
a5fd757d1b5d
Access to content of annotated files through BlockData interface
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
553diff
changeset | 46 * Represents content of a block, either as a sequence of bytes or a | 
| 
a5fd757d1b5d
Access to content of annotated files through BlockData interface
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
553diff
changeset | 47 * sequence of smaller blocks (lines), if appropriate (according to usage context). | 
| 
a5fd757d1b5d
Access to content of annotated files through BlockData interface
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
553diff
changeset | 48 * | 
| 
a5fd757d1b5d
Access to content of annotated files through BlockData interface
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
553diff
changeset | 49 * This approach allows line-by-line access to content data along with complete byte sequence for the whole block, i.e. | 
| 
a5fd757d1b5d
Access to content of annotated files through BlockData interface
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
553diff
changeset | 50 * <pre> | 
| 
a5fd757d1b5d
Access to content of annotated files through BlockData interface
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
553diff
changeset | 51 * BlockData bd = addBlock.addedLines() | 
| 
a5fd757d1b5d
Access to content of annotated files through BlockData interface
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
553diff
changeset | 52 * // bd describes data from the addition completely. | 
| 
a5fd757d1b5d
Access to content of annotated files through BlockData interface
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
553diff
changeset | 53 * // elements of the BlockData are lines | 
| 
a5fd757d1b5d
Access to content of annotated files through BlockData interface
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
553diff
changeset | 54 * bd.elementCount() == addBlock.totalAddedLines(); | 
| 
a5fd757d1b5d
Access to content of annotated files through BlockData interface
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
553diff
changeset | 55 * // one cat obtain complete addition with | 
| 
a5fd757d1b5d
Access to content of annotated files through BlockData interface
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
553diff
changeset | 56 * byte[] everythingAdded = bd.asArray(); | 
| 
a5fd757d1b5d
Access to content of annotated files through BlockData interface
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
553diff
changeset | 57 * // or iterate line by line | 
| 
a5fd757d1b5d
Access to content of annotated files through BlockData interface
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
553diff
changeset | 58 * for (int i = 0; i < bd.elementCount(); i++) { | 
| 
a5fd757d1b5d
Access to content of annotated files through BlockData interface
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
553diff
changeset | 59 * byte[] lineContent = bd.elementAt(i); | 
| 
a5fd757d1b5d
Access to content of annotated files through BlockData interface
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
553diff
changeset | 60 * String line = new String(lineContent, fileEncodingCharset); | 
| 
a5fd757d1b5d
Access to content of annotated files through BlockData interface
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
553diff
changeset | 61 * } | 
| 
a5fd757d1b5d
Access to content of annotated files through BlockData interface
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
553diff
changeset | 62 * where bd.elementAt(0) is the line at index addBlock.firstAddedLine() | 
| 
a5fd757d1b5d
Access to content of annotated files through BlockData interface
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
553diff
changeset | 63 * </pre> | 
| 
a5fd757d1b5d
Access to content of annotated files through BlockData interface
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
553diff
changeset | 64 * | 
| 
a5fd757d1b5d
Access to content of annotated files through BlockData interface
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
553diff
changeset | 65 * LineData or ChunkData? | 
| 
a5fd757d1b5d
Access to content of annotated files through BlockData interface
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
553diff
changeset | 66 */ | 
| 
a5fd757d1b5d
Access to content of annotated files through BlockData interface
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
553diff
changeset | 67 public interface BlockData { | 
| 
a5fd757d1b5d
Access to content of annotated files through BlockData interface
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
553diff
changeset | 68 BlockData elementAt(int index); | 
| 
a5fd757d1b5d
Access to content of annotated files through BlockData interface
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
553diff
changeset | 69 int elementCount(); | 
| 
a5fd757d1b5d
Access to content of annotated files through BlockData interface
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
553diff
changeset | 70 byte[] asArray(); | 
| 
a5fd757d1b5d
Access to content of annotated files through BlockData interface
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
553diff
changeset | 71 } | 
| 
a5fd757d1b5d
Access to content of annotated files through BlockData interface
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
553diff
changeset | 72 | 
| 555 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 73 /** | 
| 603 
707b5c7c6fa4
Refactor HgBlameFacility: relevant action methods moved to proper home (HgDataFile), as facility doesn't provide anything but packaging of relevant methods/interfaces
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
596diff
changeset | 74 * {@link HgBlameInspector} may optionally request extra information about revisions | 
| 555 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 75 * being inspected, denoting itself as a {@link RevisionDescriptor.Recipient}. This class | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 76 * provides complete information about file revision under annotation now. | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 77 */ | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 78 public interface RevisionDescriptor { | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 79 /** | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 80 * @return complete source of the diff origin, never <code>null</code> | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 81 */ | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 82 BlockData origin(); | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 83 /** | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 84 * @return complete source of the diff target, never <code>null</code> | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 85 */ | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 86 BlockData target(); | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 87 /** | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 88 * @return changeset revision index of original file, or {@link HgRepository#NO_REVISION} if it's the very first revision | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 89 */ | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 90 int originChangesetIndex(); | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 91 /** | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 92 * @return changeset revision index of the target file | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 93 */ | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 94 int targetChangesetIndex(); | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 95 /** | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 96 * @return <code>true</code> if this revision is merge | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 97 */ | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 98 boolean isMerge(); | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 99 /** | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 100 * @return changeset revision index of the second, merged parent | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 101 */ | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 102 int mergeChangesetIndex(); | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 103 /** | 
| 556 
e55f17a7a195
AnnotateFacility renamed to HgBlameFacility and exposed, API shapes out and got some javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
555diff
changeset | 104 * @return revision index of the change in target file's revlog | 
| 555 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 105 */ | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 106 int fileRevisionIndex(); | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 107 | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 108 /** | 
| 569 
c4fd1037bc6f
Support for copy/rename follow/no-follow for annotate
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
568diff
changeset | 109 * @return file object under blame (target file) | 
| 
c4fd1037bc6f
Support for copy/rename follow/no-follow for annotate
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
568diff
changeset | 110 */ | 
| 
c4fd1037bc6f
Support for copy/rename follow/no-follow for annotate
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
568diff
changeset | 111 HgDataFile file(); | 
| 
c4fd1037bc6f
Support for copy/rename follow/no-follow for annotate
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
568diff
changeset | 112 | 
| 
c4fd1037bc6f
Support for copy/rename follow/no-follow for annotate
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
568diff
changeset | 113 /** | 
| 555 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 114 * Implement to indicate interest in {@link RevisionDescriptor}. | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 115 * | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 116 * Note, instance of {@link RevisionDescriptor} is the same for | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 117 * {@link #start(RevisionDescriptor)} and {@link #done(RevisionDescriptor)} | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 118 * methods, and not necessarily a new one (i.e. <code>==</code>) for the next | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 119 * revision announced. | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 120 */ | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 121 @Callback | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 122 public interface Recipient { | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 123 /** | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 124 * Comes prior to any change {@link Block blocks} | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 125 */ | 
| 562 
6fbca6506bb5
Allow HgBlameFacility.Inspector (former BlockInspector) to throw an exception
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
561diff
changeset | 126 void start(RevisionDescriptor revisionDescription) throws HgCallbackTargetException; | 
| 555 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 127 /** | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 128 * Comes after all change {@link Block blocks} were dispatched | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 129 */ | 
| 562 
6fbca6506bb5
Allow HgBlameFacility.Inspector (former BlockInspector) to throw an exception
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
561diff
changeset | 130 void done(RevisionDescriptor revisionDescription) throws HgCallbackTargetException; | 
| 555 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 131 } | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 132 } | 
| 
e623aa2ca526
Annotate: RevisionDescriptor provides extra knowledge about inspected/annotated revision
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
554diff
changeset | 133 | 
| 556 
e55f17a7a195
AnnotateFacility renamed to HgBlameFacility and exposed, API shapes out and got some javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
555diff
changeset | 134 /** | 
| 
e55f17a7a195
AnnotateFacility renamed to HgBlameFacility and exposed, API shapes out and got some javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
555diff
changeset | 135 * Each change block comes from a single origin, blocks that are result of a merge | 
| 
e55f17a7a195
AnnotateFacility renamed to HgBlameFacility and exposed, API shapes out and got some javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
555diff
changeset | 136 * have {@link #originChangesetIndex()} equal to {@link RevisionDescriptor#mergeChangesetIndex()}. | 
| 
e55f17a7a195
AnnotateFacility renamed to HgBlameFacility and exposed, API shapes out and got some javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
555diff
changeset | 137 */ | 
| 542 
a71a05ec11bc
Towards annotate/blame support: general outline of the functionality
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 138 public interface Block { | 
| 545 
15b406c7cd9d
First round of annotate file is functional
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
544diff
changeset | 139 int originChangesetIndex(); | 
| 
15b406c7cd9d
First round of annotate file is functional
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
544diff
changeset | 140 int targetChangesetIndex(); | 
| 542 
a71a05ec11bc
Towards annotate/blame support: general outline of the functionality
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 141 } | 
| 
a71a05ec11bc
Towards annotate/blame support: general outline of the functionality
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 142 | 
| 545 
15b406c7cd9d
First round of annotate file is functional
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
544diff
changeset | 143 public interface EqualBlock extends Block { | 
| 
15b406c7cd9d
First round of annotate file is functional
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
544diff
changeset | 144 int originStart(); | 
| 
15b406c7cd9d
First round of annotate file is functional
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
544diff
changeset | 145 int targetStart(); | 
| 
15b406c7cd9d
First round of annotate file is functional
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
544diff
changeset | 146 int length(); | 
| 554 
a5fd757d1b5d
Access to content of annotated files through BlockData interface
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
553diff
changeset | 147 BlockData content(); | 
| 545 
15b406c7cd9d
First round of annotate file is functional
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
544diff
changeset | 148 } | 
| 
15b406c7cd9d
First round of annotate file is functional
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
544diff
changeset | 149 | 
| 542 
a71a05ec11bc
Towards annotate/blame support: general outline of the functionality
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 150 public interface AddBlock extends Block { | 
| 556 
e55f17a7a195
AnnotateFacility renamed to HgBlameFacility and exposed, API shapes out and got some javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
555diff
changeset | 151 /** | 
| 
e55f17a7a195
AnnotateFacility renamed to HgBlameFacility and exposed, API shapes out and got some javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
555diff
changeset | 152 * @return line index in the origin where this block is inserted | 
| 
e55f17a7a195
AnnotateFacility renamed to HgBlameFacility and exposed, API shapes out and got some javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
555diff
changeset | 153 */ | 
| 
e55f17a7a195
AnnotateFacility renamed to HgBlameFacility and exposed, API shapes out and got some javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
555diff
changeset | 154 int insertedAt(); | 
| 
e55f17a7a195
AnnotateFacility renamed to HgBlameFacility and exposed, API shapes out and got some javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
555diff
changeset | 155 /** | 
| 
e55f17a7a195
AnnotateFacility renamed to HgBlameFacility and exposed, API shapes out and got some javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
555diff
changeset | 156 * @return line index of the first added line in the target revision | 
| 
e55f17a7a195
AnnotateFacility renamed to HgBlameFacility and exposed, API shapes out and got some javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
555diff
changeset | 157 */ | 
| 542 
a71a05ec11bc
Towards annotate/blame support: general outline of the functionality
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 158 int firstAddedLine(); | 
| 556 
e55f17a7a195
AnnotateFacility renamed to HgBlameFacility and exposed, API shapes out and got some javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
555diff
changeset | 159 /** | 
| 
e55f17a7a195
AnnotateFacility renamed to HgBlameFacility and exposed, API shapes out and got some javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
555diff
changeset | 160 * @return number of added lines in this block | 
| 
e55f17a7a195
AnnotateFacility renamed to HgBlameFacility and exposed, API shapes out and got some javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
555diff
changeset | 161 */ | 
| 542 
a71a05ec11bc
Towards annotate/blame support: general outline of the functionality
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 162 int totalAddedLines(); | 
| 556 
e55f17a7a195
AnnotateFacility renamed to HgBlameFacility and exposed, API shapes out and got some javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
555diff
changeset | 163 /** | 
| 
e55f17a7a195
AnnotateFacility renamed to HgBlameFacility and exposed, API shapes out and got some javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
555diff
changeset | 164 * @return content of added lines | 
| 
e55f17a7a195
AnnotateFacility renamed to HgBlameFacility and exposed, API shapes out and got some javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
555diff
changeset | 165 */ | 
| 554 
a5fd757d1b5d
Access to content of annotated files through BlockData interface
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
553diff
changeset | 166 BlockData addedLines(); | 
| 542 
a71a05ec11bc
Towards annotate/blame support: general outline of the functionality
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 167 } | 
| 
a71a05ec11bc
Towards annotate/blame support: general outline of the functionality
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 168 public interface DeleteBlock extends Block { | 
| 556 
e55f17a7a195
AnnotateFacility renamed to HgBlameFacility and exposed, API shapes out and got some javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
555diff
changeset | 169 /** | 
| 
e55f17a7a195
AnnotateFacility renamed to HgBlameFacility and exposed, API shapes out and got some javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
555diff
changeset | 170 * @return line index in the target revision were this deleted block would be | 
| 
e55f17a7a195
AnnotateFacility renamed to HgBlameFacility and exposed, API shapes out and got some javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
555diff
changeset | 171 */ | 
| 
e55f17a7a195
AnnotateFacility renamed to HgBlameFacility and exposed, API shapes out and got some javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
555diff
changeset | 172 int removedAt(); | 
| 
e55f17a7a195
AnnotateFacility renamed to HgBlameFacility and exposed, API shapes out and got some javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
555diff
changeset | 173 /** | 
| 
e55f17a7a195
AnnotateFacility renamed to HgBlameFacility and exposed, API shapes out and got some javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
555diff
changeset | 174 * @return line index of the first removed line in the original revision | 
| 
e55f17a7a195
AnnotateFacility renamed to HgBlameFacility and exposed, API shapes out and got some javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
555diff
changeset | 175 */ | 
| 542 
a71a05ec11bc
Towards annotate/blame support: general outline of the functionality
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 176 int firstRemovedLine(); | 
| 556 
e55f17a7a195
AnnotateFacility renamed to HgBlameFacility and exposed, API shapes out and got some javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
555diff
changeset | 177 /** | 
| 
e55f17a7a195
AnnotateFacility renamed to HgBlameFacility and exposed, API shapes out and got some javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
555diff
changeset | 178 * @return number of deleted lines in this block | 
| 
e55f17a7a195
AnnotateFacility renamed to HgBlameFacility and exposed, API shapes out and got some javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
555diff
changeset | 179 */ | 
| 542 
a71a05ec11bc
Towards annotate/blame support: general outline of the functionality
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 180 int totalRemovedLines(); | 
| 556 
e55f17a7a195
AnnotateFacility renamed to HgBlameFacility and exposed, API shapes out and got some javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
555diff
changeset | 181 /** | 
| 
e55f17a7a195
AnnotateFacility renamed to HgBlameFacility and exposed, API shapes out and got some javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
555diff
changeset | 182 * @return content of deleted lines | 
| 
e55f17a7a195
AnnotateFacility renamed to HgBlameFacility and exposed, API shapes out and got some javadoc
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
555diff
changeset | 183 */ | 
| 554 
a5fd757d1b5d
Access to content of annotated files through BlockData interface
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: 
553diff
changeset | 184 BlockData removedLines(); | 
| 542 
a71a05ec11bc
Towards annotate/blame support: general outline of the functionality
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 185 } | 
| 
a71a05ec11bc
Towards annotate/blame support: general outline of the functionality
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 186 public interface ChangeBlock extends AddBlock, DeleteBlock { | 
| 
a71a05ec11bc
Towards annotate/blame support: general outline of the functionality
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 187 } | 
| 
a71a05ec11bc
Towards annotate/blame support: general outline of the functionality
 Artem Tikhomirov <tikhomirov.artem@gmail.com> parents: diff
changeset | 188 } | 
