@Override public void deletePullRequest(final PullRequest pullRequest) { checkNotNull("pullRequest", pullRequest); checkNotNull("id", pullRequest.getId()); checkNotEmpty("targetRepository", pullRequest.getTargetRepository()); String repository = pullRequest.getTargetRepository(); long id = pullRequest.getId(); GitMetadata metadata = getRepositoryMetadata(repository); PullRequest removablePullRequest = metadata.getPullRequest(id); List<PullRequest> finalPullRequests = metadata.getPullRequests(); finalPullRequests.remove(removablePullRequest); GitMetadata storableMetadata = new GitMetadataImpl(metadata.getName(), metadata.getOrigin(), metadata.getForks(), finalPullRequests); this.metadataStore.write(storableMetadata.getName(), storableMetadata); this.deleteHiddenBranch(removablePullRequest); }
private void removeForkFromOrigin(final GitMetadata metadata) { this.getOrigin(metadata).ifPresent(origin -> { if (origin.getForks().contains(metadata.getName())) { List<String> forks = origin.getForks(); forks.remove(metadata.getName()); GitMetadataImpl newOrigin = new GitMetadataImpl(origin.getName(), origin.getOrigin(), forks); this.storage.write(buildPath(origin.getName()), newOrigin); } }); }
List<PullRequest> pullRequests = metadata.getPullRequests(); PullRequestStatus.OPEN); if (metadata.exists(storablePullRequest)) { throw new PullRequestAlreadyExistsException(storablePullRequest); GitMetadata newMetadata = new GitMetadataImpl(metadata.getName(), metadata.getOrigin(), metadata.getForks(), pullRequests); this.metadataStore.write(metadata.getName(), newMetadata);
@Test public void testComplexForkTracking() { metadataStore.write("b/repo", "a/repo"); metadataStore.write("c/repo", "b/repo"); metadataStore.write("d/repo", "c/repo"); assertEquals("c/repo", metadataStore.read("d/repo").get().getOrigin()); assertEquals("b/repo", metadataStore.read("c/repo").get().getOrigin()); assertEquals("a/repo", metadataStore.read("b/repo").get().getOrigin()); assertEquals("b/repo", metadataStore.read("a/repo").get().getForks().get(0)); assertEquals("c/repo", metadataStore.read("b/repo").get().getForks().get(0)); assertEquals("d/repo", metadataStore.read("c/repo").get().getForks().get(0)); }
private Optional<GitMetadata> getOrigin(final GitMetadata metadata) { return this.read(metadata.getOrigin()); }
private List<GitMetadata> getForks(final GitMetadata metadata) { return metadata.getForks().stream().map(path -> this.read(path).get()).collect(Collectors.toList()); }
private synchronized long generatePullRequestId(final GitMetadata metadata) { List<PullRequest> pullRequests = metadata.getPullRequests(); final Optional<PullRequest> last = pullRequests.stream().max((first, second) -> Long.compare(first.getId(), second.getId())); return last.map(pr -> pr.getId() + 1).orElse(1l); }
@Override public PullRequest acceptPullRequest(final PullRequest pullRequest) { checkNotNull("pullRequest", pullRequest); checkNotNull("id", pullRequest.getId()); checkNotEmpty("targetRepository", pullRequest.getTargetRepository()); String repository = pullRequest.getTargetRepository(); long id = pullRequest.getId(); final GitMetadata metadata = this.getRepositoryMetadata(repository); final PullRequest acceptPullRequest = metadata.getPullRequest(id); this.createHiddenBranch(acceptPullRequest); this.mergePullRequest(acceptPullRequest); this.changePullRequestStatus(repository, id, PullRequestStatus.MERGED); return this.getRepositoryMetadata(repository).getPullRequest(id); }
List<PullRequest> pullRequests = metadata.getPullRequests(); PullRequestStatus.OPEN); if (metadata.exists(storablePullRequest)) { throw new PullRequestAlreadyExistsException(storablePullRequest); GitMetadata newMetadata = new GitMetadataImpl(metadata.getName(), metadata.getOrigin(), metadata.getForks(), pullRequests); this.metadataStore.write(metadata.getName(), newMetadata);
@Test public void testComplexForkTracking() { metadataStore.write("b/repo", "a/repo"); metadataStore.write("c/repo", "b/repo"); metadataStore.write("d/repo", "c/repo"); assertEquals("c/repo", metadataStore.read("d/repo").get().getOrigin()); assertEquals("b/repo", metadataStore.read("c/repo").get().getOrigin()); assertEquals("a/repo", metadataStore.read("b/repo").get().getOrigin()); assertEquals("b/repo", metadataStore.read("a/repo").get().getForks().get(0)); assertEquals("c/repo", metadataStore.read("b/repo").get().getForks().get(0)); assertEquals("d/repo", metadataStore.read("c/repo").get().getForks().get(0)); }
private void removeForkFromOrigin(final GitMetadata metadata) { this.getOrigin(metadata).ifPresent(origin -> { if (origin.getForks().contains(metadata.getName())) { List<String> forks = origin.getForks(); forks.remove(metadata.getName()); GitMetadataImpl newOrigin = new GitMetadataImpl(origin.getName(), origin.getOrigin(), forks); this.storage.write(buildPath(origin.getName()), newOrigin); } }); }
private Optional<GitMetadata> getOrigin(final GitMetadata metadata) { return this.read(metadata.getOrigin()); }
private List<GitMetadata> getForks(final GitMetadata metadata) { return metadata.getForks().stream().map(path -> this.read(path).get()).collect(Collectors.toList()); }
private synchronized long generatePullRequestId(final GitMetadata metadata) { List<PullRequest> pullRequests = metadata.getPullRequests(); final Optional<PullRequest> last = pullRequests.stream().max((first, second) -> Long.compare(first.getId(), second.getId())); return last.map(pr -> pr.getId() + 1).orElse(1l); }
@Override public PullRequest acceptPullRequest(final PullRequest pullRequest) { checkNotNull("pullRequest", pullRequest); checkNotNull("id", pullRequest.getId()); checkNotEmpty("targetRepository", pullRequest.getTargetRepository()); String repository = pullRequest.getTargetRepository(); long id = pullRequest.getId(); final GitMetadata metadata = this.getRepositoryMetadata(repository); final PullRequest acceptPullRequest = metadata.getPullRequest(id); this.createHiddenBranch(acceptPullRequest); this.mergePullRequest(acceptPullRequest); this.changePullRequestStatus(repository, id, PullRequestStatus.MERGED); return this.getRepositoryMetadata(repository).getPullRequest(id); }
@Override public void deletePullRequest(final PullRequest pullRequest) { checkNotNull("pullRequest", pullRequest); checkNotNull("id", pullRequest.getId()); checkNotEmpty("targetRepository", pullRequest.getTargetRepository()); String repository = pullRequest.getTargetRepository(); long id = pullRequest.getId(); GitMetadata metadata = getRepositoryMetadata(repository); PullRequest removablePullRequest = metadata.getPullRequest(id); List<PullRequest> finalPullRequests = metadata.getPullRequests(); finalPullRequests.remove(removablePullRequest); GitMetadata storableMetadata = new GitMetadataImpl(metadata.getName(), metadata.getOrigin(), metadata.getForks(), finalPullRequests); this.metadataStore.write(storableMetadata.getName(), storableMetadata); this.deleteHiddenBranch(removablePullRequest); }
@Test public void testComplexForkTracking() { metadataStore.write("b/repo", "a/repo"); metadataStore.write("c/repo", "b/repo"); metadataStore.write("d/repo", "c/repo"); assertEquals("c/repo", metadataStore.read("d/repo").get().getOrigin()); assertEquals("b/repo", metadataStore.read("c/repo").get().getOrigin()); assertEquals("a/repo", metadataStore.read("b/repo").get().getOrigin()); assertEquals("b/repo", metadataStore.read("a/repo").get().getForks().get(0)); assertEquals("c/repo", metadataStore.read("b/repo").get().getForks().get(0)); assertEquals("d/repo", metadataStore.read("c/repo").get().getForks().get(0)); }
@Test public void testSimpleDelete() { metadataStore.write("a/repo", ""); assertEquals("", metadataStore.read("a/repo").get().getOrigin()); metadataStore.delete("a/repo"); assertFalse(metadataStore.read("a/repo").isPresent()); }