Merge "Qualify post-0.9.1 builds" into stable-0.9
diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/AbstractFetchCommand.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/AbstractFetchCommand.java
index 356966a..fd7fd44 100644
--- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/AbstractFetchCommand.java
+++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/AbstractFetchCommand.java
@@ -49,6 +49,7 @@
import java.io.IOException;
import java.io.PrintWriter;
+import java.text.MessageFormat;
import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.ObjectId;
@@ -104,16 +105,19 @@
else if (0 <= cr)
s = cr;
else {
- writer.format(CLIText.get().remoteMessage, pkt);
+ writer.print(MessageFormat.format(CLIText.get().remoteMessage,
+ pkt));
writer.println();
break;
}
if (pkt.charAt(s) == '\r') {
- writer.format(CLIText.get().remoteMessage, pkt.substring(0, s));
+ writer.print(MessageFormat.format(CLIText.get().remoteMessage,
+ pkt.substring(0, s)));
writer.print('\r');
} else {
- writer.format(CLIText.get().remoteMessage, pkt.substring(0, s));
+ writer.print(MessageFormat.format(CLIText.get().remoteMessage,
+ pkt.substring(0, s)));
writer.println();
}
diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Clone.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Clone.java
index 1b1a8c2..1b04989 100644
--- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Clone.java
+++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Clone.java
@@ -114,7 +114,9 @@
dst.getConfig().save();
db = dst;
- out.format(CLIText.get().initializedEmptyGitRepositoryIn, gitdir.getAbsolutePath());
+ out.print(MessageFormat.format(
+ CLIText.get().initializedEmptyGitRepositoryIn, gitdir
+ .getAbsolutePath()));
out.println();
out.flush();
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/CachedObjectDirectory.java b/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/CachedObjectDirectory.java
index f0159f6..a5762b6 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/CachedObjectDirectory.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/CachedObjectDirectory.java
@@ -213,8 +213,22 @@
}
@Override
- boolean insertUnpackedObject(File tmp, ObjectId objectId, boolean force) {
- return wrapped.insertUnpackedObject(tmp, objectId, force);
+ InsertLooseObjectResult insertUnpackedObject(File tmp, ObjectId objectId,
+ boolean createDuplicate) {
+ InsertLooseObjectResult result = wrapped.insertUnpackedObject(tmp,
+ objectId, createDuplicate);
+ switch (result) {
+ case INSERTED:
+ case EXISTS_LOOSE:
+ if (!unpackedObjects.contains(objectId))
+ unpackedObjects.add(objectId);
+ break;
+
+ case EXISTS_PACKED:
+ case FAILURE:
+ break;
+ }
+ return result;
}
@Override
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/FileObjectDatabase.java b/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/FileObjectDatabase.java
index 29c7a25..8bd3751 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/FileObjectDatabase.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/FileObjectDatabase.java
@@ -57,6 +57,10 @@
import org.eclipse.jgit.storage.pack.PackWriter;
abstract class FileObjectDatabase extends ObjectDatabase {
+ static enum InsertLooseObjectResult {
+ INSERTED, EXISTS_PACKED, EXISTS_LOOSE, FAILURE;
+ }
+
@Override
public ObjectReader newReader() {
return new WindowCursor(this);
@@ -249,7 +253,8 @@
abstract long getObjectSize2(WindowCursor curs, String objectName,
AnyObjectId objectId) throws IOException;
- abstract boolean insertUnpackedObject(File tmp, ObjectId id, boolean force);
+ abstract InsertLooseObjectResult insertUnpackedObject(File tmp,
+ ObjectId id, boolean createDuplicate);
abstract FileObjectDatabase newCachedFileObjectDatabase();
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/ObjectDirectory.java b/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/ObjectDirectory.java
index 372a978..e7ccba0 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/ObjectDirectory.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/ObjectDirectory.java
@@ -455,23 +455,33 @@
}
@Override
- boolean insertUnpackedObject(File tmp, ObjectId id, boolean force) {
- if (!force && has(id)) {
- // Object is already in the repository, remove temporary file.
- //
+ InsertLooseObjectResult insertUnpackedObject(File tmp, ObjectId id,
+ boolean createDuplicate) {
+ // If the object is already in the repository, remove temporary file.
+ //
+ if (unpackedObjectCache.isUnpacked(id)) {
tmp.delete();
- return true;
+ return InsertLooseObjectResult.EXISTS_LOOSE;
}
+ if (!createDuplicate && has(id)) {
+ tmp.delete();
+ return InsertLooseObjectResult.EXISTS_PACKED;
+ }
+
tmp.setReadOnly();
final File dst = fileFor(id);
- if (force && dst.exists()) {
+ if (dst.exists()) {
+ // We want to be extra careful and avoid replacing an object
+ // that already exists. We can't be sure renameTo() would
+ // fail on all platforms if dst exists, so we check first.
+ //
tmp.delete();
- return true;
+ return InsertLooseObjectResult.EXISTS_LOOSE;
}
if (tmp.renameTo(dst)) {
unpackedObjectCache.add(id);
- return true;
+ return InsertLooseObjectResult.INSERTED;
}
// Maybe the directory doesn't exist yet as the object
@@ -481,12 +491,12 @@
dst.getParentFile().mkdir();
if (tmp.renameTo(dst)) {
unpackedObjectCache.add(id);
- return true;
+ return InsertLooseObjectResult.INSERTED;
}
- if (!force && has(id)) {
+ if (!createDuplicate && has(id)) {
tmp.delete();
- return true;
+ return InsertLooseObjectResult.EXISTS_PACKED;
}
// The object failed to be renamed into its proper
@@ -495,7 +505,7 @@
// fail.
//
tmp.delete();
- return false;
+ return InsertLooseObjectResult.FAILURE;
}
boolean tryAgain1() {
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/ObjectDirectoryInserter.java b/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/ObjectDirectoryInserter.java
index d92285d..074ebb9 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/ObjectDirectoryInserter.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/storage/file/ObjectDirectoryInserter.java
@@ -83,9 +83,18 @@
final MessageDigest md = digest();
final File tmp = toTemp(md, type, len, is);
final ObjectId id = ObjectId.fromRaw(md.digest());
- if (db.insertUnpackedObject(tmp, id, false /* no duplicate */))
+
+ switch (db.insertUnpackedObject(tmp, id, false /* no duplicate */)) {
+ case INSERTED:
+ case EXISTS_PACKED:
+ case EXISTS_LOOSE:
return id;
+ case FAILURE:
+ default:
+ break;
+ }
+
final File dst = db.fileFor(id);
throw new ObjectWritingException("Unable to create new object: " + dst);
}