Browse Source

Merge changes I0d339b9f,I0e6673b8

* changes:
  Favor earlier PackFile instances over later duplicates
  Cleanup duplicated object reuse code in PackWriter
stable-0.8
Chris Aniszczyk 15 years ago committed by Code Review
parent
commit
11096a89a5
  1. 7
      org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectDirectory.java
  2. 12
      org.eclipse.jgit/src/org/eclipse/jgit/lib/PackWriter.java

7
org.eclipse.jgit/src/org/eclipse/jgit/lib/ObjectDirectory.java

@ -416,10 +416,11 @@ public class ObjectDirectory extends ObjectDatabase {
// This should never occur. It should be impossible for us
// to have two pack files with the same name, as all of them
// came out of the same directory. If it does, we promised to
// close any PackFiles we did not reuse, so close the one we
// just evicted out of the reuse map.
// close any PackFiles we did not reuse, so close the second,
// readers are likely to be actively using the first.
//
prior.close();
forReuse.put(prior.getPackFile().getName(), prior);
p.close();
}
}
return forReuse;

12
org.eclipse.jgit/src/org/eclipse/jgit/lib/PackWriter.java

@ -718,12 +718,11 @@ public class PackWriter {
final PackedObjectLoader reuse = open(otp);
if (reuse != null) {
try {
if (otp.isDeltaRepresentation()) {
writeDeltaObjectReuse(otp, reuse);
} else {
if (otp.isDeltaRepresentation())
writeDeltaObjectHeader(otp, reuse);
else
writeObjectHeader(otp.getType(), reuse.getSize());
reuse.copyRawData(out, buf, windowCursor);
}
reuse.copyRawData(out, buf, windowCursor);
} finally {
reuse.endCopyRawData();
}
@ -773,7 +772,7 @@ public class PackWriter {
} while (!deflater.finished());
}
private void writeDeltaObjectReuse(final ObjectToPack otp,
private void writeDeltaObjectHeader(final ObjectToPack otp,
final PackedObjectLoader reuse) throws IOException {
if (deltaBaseAsOffset && otp.getDeltaBase() != null) {
writeObjectHeader(Constants.OBJ_OFS_DELTA, reuse.getRawSize());
@ -792,7 +791,6 @@ public class PackWriter {
otp.getDeltaBaseId().copyRawTo(buf, 0);
out.write(buf, 0, Constants.OBJECT_ID_LENGTH);
}
reuse.copyRawData(out, buf, windowCursor);
}
private void writeObjectHeader(final int objectType, long dataLength)

Loading…
Cancel
Save