/** * Returns the {@link RevisionRange} whose major value of {@code from} {@link Revision} is greater than * or equal to the major value of {@code to} {@link Revision}. * * @throws IllegalStateException if the {@code from} and {@code to} {@link Revision}s are in the * different state. They should be either absolute or relative. */ public RevisionRange toDescending() { if (isAscending()) { return new RevisionRange(to, from); } return this; }
@Override public CompletableFuture<Change<?>> diff(Revision from, Revision to, Query<?> query) { requireNonNull(from, "from"); requireNonNull(to, "to"); requireNonNull(query, "query"); final RevisionRange range; try { range = normalizeNow(from, to).toAscending(); } catch (Exception e) { return CompletableFutures.exceptionallyCompletedFuture(e); } return unsafeCast(cache.get(new CacheableSingleDiffCall(repo, range.from(), range.to(), query))); }
@Override public CompletableFuture<Revision> findLatestRevision(Revision lastKnownRevision, String pathPattern) { requireNonNull(lastKnownRevision, "lastKnownRevision"); requireNonNull(pathPattern, "pathPattern"); final RevisionRange range; try { range = normalizeNow(lastKnownRevision, Revision.HEAD); } catch (Exception e) { return CompletableFutures.exceptionallyCompletedFuture(e); } if (range.from().equals(range.to())) { return CompletableFuture.completedFuture(null); } final CompletableFuture<Object> future = cache.get(new CacheableFindLatestRevCall(repo, range.from(), range.to(), pathPattern)) .thenApply(result -> result != CacheableFindLatestRevCall.EMPTY ? result : null); return unsafeCast(future); }
@Test public void revisionRange() { RevisionRange range = new RevisionRange(2, 4); assertThat(range.isAscending()).isTrue(); assertThat(range.isRelative()).isFalse(); assertThat(range.toAscending()).isSameAs(range); assertThat(range.toDescending()).isEqualTo(new RevisionRange(4, 2)); range = new RevisionRange(revisionTen, INIT); assertThat(range.isAscending()).isFalse(); assertThat(range.isRelative()).isFalse(); assertThat(range.toAscending()).isEqualTo(new RevisionRange(INIT, revisionTen)); assertThat(range.toDescending()).isSameAs(range); range = new RevisionRange(revisionTen, revisionTen); assertThat(range.isAscending()).isFalse(); assertThat(range.isRelative()).isFalse(); assertThat(range.toAscending()).isSameAs(range); assertThat(range.toDescending()).isSameAs(range); range = new RevisionRange(revisionNegativeTen, revisionNegativeThree); assertThat(range.isAscending()).isTrue(); assertThat(range.isRelative()).isTrue(); assertThat(range.toAscending()).isSameAs(range); assertThat(range.toDescending()).isEqualTo( new RevisionRange(revisionNegativeThree, revisionNegativeTen));
@Override public RevisionRange normalizeNow(Revision from, Revision to) { final int baseMajor = cachedHeadRevision().major(); return new RevisionRange(normalizeNow(from, baseMajor), normalizeNow(to, baseMajor)); }
final RevisionRange descendingRange = range.toDescending(); final ObjectId fromCommitId = commitIdDatabase.get(descendingRange.from()); final ObjectId toCommitId = commitIdDatabase.get(descendingRange.to()); if (!descendingRange.equals(range)) { // from and to is swapped so reverse the list. Collections.reverse(commitList);
final RevisionRange range = repository.normalizeNow(fromRevision, toRevision).toDescending(); final int maxCommits0 = maxCommits.map(integer -> Math.min(integer, DEFAULT_MAX_COMMITS)) .orElse(DEFAULT_MAX_COMMITS); return repository .history(range.from(), range.to(), normalizePath(path), maxCommits0) .thenApply(commits -> { final boolean toList = isNullOrEmpty(revision) || "/".equalsIgnoreCase(revision) ||
@Override public RevisionRange normalizeNow(Revision from, Revision to) { final int baseMajor = cachedHeadRevision().major(); return new RevisionRange(normalizeNow(from, baseMajor), normalizeNow(to, baseMajor)); }
final RevisionRange descendingRange = range.toDescending(); final ObjectId fromCommitId = commitIdDatabase.get(descendingRange.from()); final ObjectId toCommitId = commitIdDatabase.get(descendingRange.to()); if (!descendingRange.equals(range)) { // from and to is swapped so reverse the list. Collections.reverse(commitList);
@Override public CompletableFuture<Revision> findLatestRevision(Revision lastKnownRevision, String pathPattern) { requireNonNull(lastKnownRevision, "lastKnownRevision"); requireNonNull(pathPattern, "pathPattern"); final RevisionRange range; try { range = normalizeNow(lastKnownRevision, Revision.HEAD); } catch (Exception e) { return CompletableFutures.exceptionallyCompletedFuture(e); } if (range.from().equals(range.to())) { return CompletableFuture.completedFuture(null); } final CompletableFuture<Object> future = cache.get(new CacheableFindLatestRevCall(repo, range.from(), range.to(), pathPattern)) .thenApply(result -> result != CacheableFindLatestRevCall.EMPTY ? result : null); return unsafeCast(future); }
final RevisionRange range = repository.normalizeNow(fromRevision, toRevision).toDescending(); final int maxCommits0 = maxCommits.map(integer -> Math.min(integer, DEFAULT_MAX_COMMITS)) .orElse(DEFAULT_MAX_COMMITS); return repository .history(range.from(), range.to(), normalizePath(path), maxCommits0) .thenApply(commits -> { final boolean toList = isNullOrEmpty(revision) || "/".equalsIgnoreCase(revision) ||
@Override public CompletableFuture<Change<?>> diff(Revision from, Revision to, Query<?> query) { requireNonNull(from, "from"); requireNonNull(to, "to"); requireNonNull(query, "query"); final RevisionRange range; try { range = normalizeNow(from, to).toAscending(); } catch (Exception e) { return CompletableFutures.exceptionallyCompletedFuture(e); } return unsafeCast(cache.get(new CacheableSingleDiffCall(repo, range.from(), range.to(), query))); }
/** * Returns the {@link RevisionRange} whose major value of {@code from} {@link Revision} is greater than * or equal to the major value of {@code to} {@link Revision}. * * @throws IllegalStateException if the {@code from} and {@code to} {@link Revision}s are in the * different state. They should be either absolute or relative. */ public RevisionRange toDescending() { if (isAscending()) { return new RevisionRange(to, from); } return this; }
@Override public RevisionRange normalizeNow(Revision from, Revision to) { final int baseMajor = cachedHeadRevision().major(); return new RevisionRange(normalizeNow(from, baseMajor), normalizeNow(to, baseMajor)); }
final RevisionRange descendingRange = range.toDescending(); final ObjectId fromCommitId = commitIdDatabase.get(descendingRange.from()); final ObjectId toCommitId = commitIdDatabase.get(descendingRange.to()); if (!descendingRange.equals(range)) { // from and to is swapped so reverse the list. Collections.reverse(commitList);
@Override public CompletableFuture<Revision> findLatestRevision(Revision lastKnownRevision, String pathPattern) { requireNonNull(lastKnownRevision, "lastKnownRevision"); requireNonNull(pathPattern, "pathPattern"); final RevisionRange range; try { range = normalizeNow(lastKnownRevision, Revision.HEAD); } catch (Exception e) { return CompletableFutures.exceptionallyCompletedFuture(e); } if (range.from().equals(range.to())) { return CompletableFuture.completedFuture(null); } final CompletableFuture<Object> future = cache.get(new CacheableFindLatestRevCall(repo, range.from(), range.to(), pathPattern)) .thenApply(result -> result != CacheableFindLatestRevCall.EMPTY ? result : null); return unsafeCast(future); }
final RevisionRange range = repository.normalizeNow(fromRevision, toRevision).toDescending(); final int maxCommits0 = maxCommits.map(integer -> Math.min(integer, DEFAULT_MAX_COMMITS)) .orElse(DEFAULT_MAX_COMMITS); return repository .history(range.from(), range.to(), normalizePath(path), maxCommits0) .thenApply(commits -> { final boolean toList = isNullOrEmpty(revision) || "/".equalsIgnoreCase(revision) ||
@Override public CompletableFuture<Map<String, Change<?>>> diff(Revision from, Revision to, String pathPattern) { requireNonNull(from, "from"); requireNonNull(to, "to"); requireNonNull(pathPattern, "pathPattern"); final RevisionRange range; try { range = normalizeNow(from, to).toAscending(); } catch (Exception e) { return CompletableFutures.exceptionallyCompletedFuture(e); } return unsafeCast(cache.get(new CacheableMultiDiffCall(repo, range.from(), range.to(), pathPattern))); }
/** * Returns the {@link RevisionRange} whose major value of {@code from} {@link Revision} is greater than * or equal to the major value of {@code to} {@link Revision}. * * @throws IllegalStateException if the {@code from} and {@code to} {@link Revision}s are in the * different state. They should be either absolute or relative. */ public RevisionRange toDescending() { if (isAscending()) { return new RevisionRange(to, from); } return this; }
@Test public void finaLatestRevisionHead() { final Repository repo = newCachingRepo(); final Revision actualHeadRev = new Revision(2); doReturn(new RevisionRange(actualHeadRev, actualHeadRev)) .when(delegateRepo).normalizeNow(HEAD, HEAD); assertThat(repo.findLatestRevision(HEAD, "/**").join()).isNull(); verify(delegateRepo, never()).findLatestRevision(any(), any()); verifyNoMoreInteractions(delegateRepo); }