Merge "Add retainOnReset(RevFlag) to RevWalk to simplify reset usage"
This commit is contained in:
commit
2c25a1fde0
|
@ -174,6 +174,7 @@ public class RevWalk implements Iterable<RevCommit> {
|
||||||
|
|
||||||
private int delayFreeFlags;
|
private int delayFreeFlags;
|
||||||
|
|
||||||
|
private int retainOnReset;
|
||||||
int carryFlags = UNINTERESTING;
|
int carryFlags = UNINTERESTING;
|
||||||
|
|
||||||
final ArrayList<RevCommit> roots;
|
final ArrayList<RevCommit> roots;
|
||||||
|
@ -1092,6 +1093,47 @@ public void carry(final Collection<RevFlag> set) {
|
||||||
carry(flag);
|
carry(flag);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Preserve a RevFlag during all {@code reset} methods.
|
||||||
|
* <p>
|
||||||
|
* Calling {@code retainOnReset(flag)} avoids needing to pass the flag
|
||||||
|
* during each {@code resetRetain()} invocation on this instance.
|
||||||
|
* <p>
|
||||||
|
* Clearing flags marked retainOnReset requires disposing of the flag with
|
||||||
|
* {@code #disposeFlag(RevFlag)} or disposing of the entire RevWalk by
|
||||||
|
* {@code #dispose()}.
|
||||||
|
*
|
||||||
|
* @param flag
|
||||||
|
* the flag to retain during all resets.
|
||||||
|
* @since 3.6
|
||||||
|
*/
|
||||||
|
public final void retainOnReset(RevFlag flag) {
|
||||||
|
if ((freeFlags & flag.mask) != 0)
|
||||||
|
throw new IllegalArgumentException(MessageFormat.format(JGitText.get().flagIsDisposed, flag.name));
|
||||||
|
if (flag.walker != this)
|
||||||
|
throw new IllegalArgumentException(MessageFormat.format(JGitText.get().flagNotFromThis, flag.name));
|
||||||
|
retainOnReset |= flag.mask;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Preserve a set of RevFlags during all {@code reset} methods.
|
||||||
|
* <p>
|
||||||
|
* Calling {@code retainOnReset(set)} avoids needing to pass the flags
|
||||||
|
* during each {@code resetRetain()} invocation on this instance.
|
||||||
|
* <p>
|
||||||
|
* Clearing flags marked retainOnReset requires disposing of the flag with
|
||||||
|
* {@code #disposeFlag(RevFlag)} or disposing of the entire RevWalk by
|
||||||
|
* {@code #dispose()}.
|
||||||
|
*
|
||||||
|
* @param flags
|
||||||
|
* the flags to retain during all resets.
|
||||||
|
* @since 3.6
|
||||||
|
*/
|
||||||
|
public final void retainOnReset(Collection<RevFlag> flags) {
|
||||||
|
for (RevFlag f : flags)
|
||||||
|
retainOnReset(f);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Allow a flag to be recycled for a different use.
|
* Allow a flag to be recycled for a different use.
|
||||||
* <p>
|
* <p>
|
||||||
|
@ -1110,6 +1152,7 @@ public void disposeFlag(final RevFlag flag) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void freeFlag(final int mask) {
|
void freeFlag(final int mask) {
|
||||||
|
retainOnReset &= ~mask;
|
||||||
if (isNotStarted()) {
|
if (isNotStarted()) {
|
||||||
freeFlags |= mask;
|
freeFlags |= mask;
|
||||||
carryFlags &= ~mask;
|
carryFlags &= ~mask;
|
||||||
|
@ -1158,6 +1201,9 @@ public final void resetRetain(final RevFlagSet retainFlags) {
|
||||||
* Unlike {@link #dispose()} previously acquired RevObject (and RevCommit)
|
* Unlike {@link #dispose()} previously acquired RevObject (and RevCommit)
|
||||||
* instances are not invalidated. RevFlag instances are not invalidated, but
|
* instances are not invalidated. RevFlag instances are not invalidated, but
|
||||||
* are removed from all RevObjects.
|
* are removed from all RevObjects.
|
||||||
|
* <p>
|
||||||
|
* See {@link #retainOnReset(RevFlag)} for an alternative that does not
|
||||||
|
* require passing the flags during each reset.
|
||||||
*
|
*
|
||||||
* @param retainFlags
|
* @param retainFlags
|
||||||
* application flags that should <b>not</b> be cleared from
|
* application flags that should <b>not</b> be cleared from
|
||||||
|
@ -1183,7 +1229,7 @@ public final void resetRetain(final RevFlag... retainFlags) {
|
||||||
*/
|
*/
|
||||||
protected void reset(int retainFlags) {
|
protected void reset(int retainFlags) {
|
||||||
finishDelayedFreeFlags();
|
finishDelayedFreeFlags();
|
||||||
retainFlags |= PARSED;
|
retainFlags |= PARSED | retainOnReset;
|
||||||
final int clearFlags = ~retainFlags;
|
final int clearFlags = ~retainFlags;
|
||||||
|
|
||||||
final FIFORevQueue q = new FIFORevQueue();
|
final FIFORevQueue q = new FIFORevQueue();
|
||||||
|
@ -1227,6 +1273,7 @@ public void dispose() {
|
||||||
reader.release();
|
reader.release();
|
||||||
freeFlags = APP_FLAGS;
|
freeFlags = APP_FLAGS;
|
||||||
delayFreeFlags = 0;
|
delayFreeFlags = 0;
|
||||||
|
retainOnReset = 0;
|
||||||
carryFlags = UNINTERESTING;
|
carryFlags = UNINTERESTING;
|
||||||
objects.clear();
|
objects.clear();
|
||||||
reader.release();
|
reader.release();
|
||||||
|
|
Loading…
Reference in New Issue