aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackFetchConnection.java39
1 files changed, 23 insertions, 16 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackFetchConnection.java b/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackFetchConnection.java
index 7d8590a775..4ae26a3e56 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackFetchConnection.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/transport/BasePackFetchConnection.java
@@ -317,24 +317,19 @@ public abstract class BasePackFetchConnection extends BasePackConnection
private void markReachable(final Set<ObjectId> have, final int maxTime)
throws IOException {
for (final Ref r : local.getAllRefs().values()) {
- try {
- final RevCommit o = walk.parseCommit(r.getObjectId());
- o.add(REACHABLE);
- reachableCommits.add(o);
- } catch (IOException readError) {
- // If we cannot read the value of the ref skip it.
- }
+ ObjectId id = r.getPeeledObjectId();
+ if (id == null)
+ id = r.getObjectId();
+ if (id == null)
+ continue;
+ parseReachable(id);
}
- for (final ObjectId id : have) {
- try {
- final RevCommit o = walk.parseCommit(id);
- o.add(REACHABLE);
- reachableCommits.add(o);
- } catch (IOException readError) {
- // If we cannot read the value of the ref skip it.
- }
- }
+ for (ObjectId id : local.getAdditionalHaves())
+ parseReachable(id);
+
+ for (ObjectId id : have)
+ parseReachable(id);
if (maxTime > 0) {
// Mark reachable commits until we reach maxTime. These may
@@ -361,6 +356,18 @@ public abstract class BasePackFetchConnection extends BasePackConnection
}
}
+ private void parseReachable(ObjectId id) {
+ try {
+ RevCommit o = walk.parseCommit(id);
+ if (!o.has(REACHABLE)) {
+ o.add(REACHABLE);
+ reachableCommits.add(o);
+ }
+ } catch (IOException readError) {
+ // If we cannot read the value of the ref skip it.
+ }
+ }
+
private boolean sendWants(final Collection<Ref> want) throws IOException {
final PacketLineOut p = statelessRPC ? pckState : pckOut;
boolean first = true;