while (!commitQueue.isEmpty()) { CommitNode node = commitQueue.remove(); Evaluation evaluation = evaluate(node); ImmutableList<ObjectId> parents; switch (evaluation) { case INCLUDE_AND_PRUNE: parents = getParents(node.getObjectId()); apply(node, parents); break; case INCLUDE_AND_CONTINUE: parents = getParents(node.getObjectId()); apply(node, parents); addParents(node, parents); break; case EXCLUDE_AND_PRUNE: if (existsInDestination(node.getObjectId()) && !have.contains(node.getObjectId())) { have.add(node.getObjectId()); parents = getParents(node.getObjectId()); addParents(node, parents); if (existsInDestination(node.getObjectId()) && !have.contains(node.getObjectId())) { have.add(node.getObjectId());
private ImmutableList<ObjectId> getParents(ObjectId commitId) { ImmutableList<ObjectId> parents = commitParents.get(commitId); if (parents == null) { parents = getParentsInternal(commitId); commitParents.put(commitId, parents); } return parents; }
@Override public void fetchNewData(Repository local, Ref ref, Optional<Integer> fetchLimit, ProgressListener progress) { CommitTraverser traverser = getFetchTraverser(local, fetchLimit); try { progress.setDescription("Fetching objects from " + ref.getName()); traverser.traverse(ref.getObjectId()); List<ObjectId> want = new LinkedList<ObjectId>(); want.addAll(traverser.commits); Collections.reverse(want); Set<ObjectId> have = new HashSet<ObjectId>(); have.addAll(traverser.have); while (!want.isEmpty()) { progress.setProgress(0); fetchMoreData(local, want, have, progress); } } catch (Exception e) { Throwables.propagate(e); } }
@Override public void fetchNewData(Repository local, Ref ref, Optional<Integer> fetchLimit, ProgressListener progress) { CommitTraverser traverser = getFetchTraverser(local, fetchLimit); progress.setDescription("Fetching objects from " + ref.getName()); progress.setProgress(0); traverser.traverse(ref.getObjectId()); List<ObjectId> toSend = new LinkedList<ObjectId>(traverser.commits); Collections.reverse(toSend);// send oldest commits first for (ObjectId newHeadId : toSend) { walkHead(newHeadId, remoteRepository, local, progress); } }
while (!commitQueue.isEmpty()) { CommitNode node = commitQueue.remove(); Evaluation evaluation = evaluate(node); ImmutableList<ObjectId> parents; switch (evaluation) { case INCLUDE_AND_PRUNE: parents = getParents(node.getObjectId()); apply(node, parents); break; case INCLUDE_AND_CONTINUE: parents = getParents(node.getObjectId()); apply(node, parents); addParents(node, parents); break; case EXCLUDE_AND_PRUNE: if (existsInDestination(node.getObjectId()) && !have.contains(node.getObjectId())) { have.add(node.getObjectId()); parents = getParents(node.getObjectId()); addParents(node, parents); if (existsInDestination(node.getObjectId()) && !have.contains(node.getObjectId())) { have.add(node.getObjectId());
@Override public void fetchNewData(Repository local, Ref ref, Optional<Integer> fetchLimit, ProgressListener progress) { CommitTraverser traverser = getFetchTraverser(local, fetchLimit); try { progress.setDescription("Fetching objects from " + ref.getName()); progress.setProgress(0); traverser.traverse(ref.getObjectId()); List<ObjectId> toSend = new LinkedList<ObjectId>(traverser.commits); Collections.reverse(toSend);// send oldest commits first for (ObjectId newHeadId : toSend) { walkHead(newHeadId, remoteRepository, local, progress); } } catch (Exception e) { Throwables.propagate(e); } }
private ImmutableList<ObjectId> getParents(ObjectId commitId) { ImmutableList<ObjectId> parents = commitParents.get(commitId); if (parents == null) { parents = getParentsInternal(commitId); commitParents.put(commitId, parents); } return parents; }
@Override public void pushNewData(final Repository local, Ref ref, String refspec, ProgressListener progress) throws SynchronizationException { Optional<Ref> remoteRef = HttpUtils.getRemoteRef(repositoryURL, refspec); checkPush(local, ref, remoteRef); beginPush(); progress.setDescription("Uploading objects to " + refspec); progress.setProgress(0); CommitTraverser traverser = getPushTraverser(local, remoteRef); traverser.traverse(ref.getObjectId()); List<ObjectId> toSend = new LinkedList<ObjectId>(traverser.commits); Collections.reverse(toSend); Set<ObjectId> have = new HashSet<ObjectId>(traverser.have); Deduplicator deduplicator = createDeduplicator(); try { sendPackedObjects(local, toSend, have, deduplicator, progress); } finally { deduplicator.release(); } ObjectId originalRemoteRefValue = ObjectId.NULL; if (remoteRef.isPresent()) { originalRemoteRefValue = remoteRef.get().getObjectId(); } String nameToSet = remoteRef.isPresent() ? remoteRef.get().getName() : Ref.HEADS_PREFIX + refspec; endPush(nameToSet, ref.getObjectId(), originalRemoteRefValue.toString()); }
@Override public void pushNewData(final Repository local, final Ref ref, final String refspec, final ProgressListener progress) throws SynchronizationException { Optional<Ref> remoteRef = remoteRepository.command(RefParse.class).setName(refspec).call(); remoteRef = remoteRef.or( remoteRepository.command(RefParse.class).setName(Ref.TAGS_PREFIX + refspec).call()); checkPush(local, ref, remoteRef); CommitTraverser traverser = getPushTraverser(local, remoteRef); traverser.traverse(ref.getObjectId()); progress.setDescription("Uploading objects to " + refspec); progress.setProgress(0); while (!traverser.commits.isEmpty()) { ObjectId commitId = traverser.commits.pop(); walkHead(commitId, local, remoteRepository, progress); } String nameToSet = remoteRef.isPresent() ? remoteRef.get().getName() : Ref.HEADS_PREFIX + refspec; Ref updatedRef = remoteRepository.command(UpdateRef.class).setName(nameToSet) .setNewValue(ref.getObjectId()).call().get(); Ref remoteHead = headRef().orNull(); if (remoteHead instanceof SymRef) { if (((SymRef) remoteHead).getTarget().equals(updatedRef.getName())) { remoteRepository.command(UpdateSymRef.class).setName(Ref.HEAD) .setNewValue(ref.getName()).call(); RevCommit commit = remoteRepository.getCommit(ref.getObjectId()); remoteRepository.workingTree().updateWorkHead(commit.getTreeId()); remoteRepository.index().updateStageHead(commit.getTreeId()); } } }
@Override public void pushNewData(final Repository local, final Ref ref, final String refspec, final ProgressListener progress) throws SynchronizationException { Optional<Ref> remoteRef = remoteRepository.command(RefParse.class).setName(refspec).call(); remoteRef = remoteRef.or( remoteRepository.command(RefParse.class).setName(Ref.TAGS_PREFIX + refspec).call()); checkPush(local, ref, remoteRef); CommitTraverser traverser = getPushTraverser(local, remoteRef); traverser.traverse(ref.getObjectId()); progress.setDescription("Uploading objects to " + refspec); progress.setProgress(0); while (!traverser.commits.isEmpty()) { ObjectId commitId = traverser.commits.pop(); walkHead(commitId, local, remoteRepository, progress); } String nameToSet = remoteRef.isPresent() ? remoteRef.get().getName() : Ref.HEADS_PREFIX + refspec; Ref updatedRef = remoteRepository.command(UpdateRef.class).setName(nameToSet) .setNewValue(ref.getObjectId()).call().get(); Ref remoteHead = headRef().orNull(); if (remoteHead instanceof SymRef) { if (((SymRef) remoteHead).getTarget().equals(updatedRef.getName())) { remoteRepository.command(UpdateSymRef.class).setName(Ref.HEAD) .setNewValue(ref.getName()).call(); RevCommit commit = remoteRepository.getCommit(ref.getObjectId()); remoteRepository.workingTree().updateWorkHead(commit.getTreeId()); remoteRepository.index().updateStageHead(commit.getTreeId()); } } }