Merge branch 'stable-4.9'
* stable-4.9: Prepare 4.9.3-SNAPSHOT builds JGit v4.9.2.201712150930-r Write packed-refs directly when cloning Change-Id: I3b0fad9c45cdf3a918ddb8ea4a37b8d3403aae90 Signed-off-by: David Pursehouse <david.pursehouse@gmail.com> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
This commit is contained in:
commit
ed38840eba
|
@ -186,11 +186,19 @@ public void execute(RevWalk walk, ProgressMonitor monitor,
|
||||||
Map<String, LockFile> locks = null;
|
Map<String, LockFile> locks = null;
|
||||||
refdb.inProcessPackedRefsLock.lock();
|
refdb.inProcessPackedRefsLock.lock();
|
||||||
try {
|
try {
|
||||||
locks = lockLooseRefs(pending);
|
PackedRefList oldPackedList;
|
||||||
if (locks == null) {
|
if (!refdb.isInClone()) {
|
||||||
return;
|
locks = lockLooseRefs(pending);
|
||||||
|
if (locks == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
oldPackedList = refdb.pack(locks);
|
||||||
|
} else {
|
||||||
|
// During clone locking isn't needed since no refs exist yet.
|
||||||
|
// This also helps to avoid problems with refs only differing in
|
||||||
|
// case on a case insensitive filesystem (bug 528497)
|
||||||
|
oldPackedList = refdb.getPackedRefs();
|
||||||
}
|
}
|
||||||
PackedRefList oldPackedList = refdb.pack(locks);
|
|
||||||
RefList<Ref> newRefs = applyUpdates(walk, oldPackedList, pending);
|
RefList<Ref> newRefs = applyUpdates(walk, oldPackedList, pending);
|
||||||
if (newRefs == null) {
|
if (newRefs == null) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -65,6 +65,7 @@
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.io.InterruptedIOException;
|
import java.io.InterruptedIOException;
|
||||||
|
import java.nio.file.Files;
|
||||||
import java.security.DigestInputStream;
|
import java.security.DigestInputStream;
|
||||||
import java.security.MessageDigest;
|
import java.security.MessageDigest;
|
||||||
import java.text.MessageFormat;
|
import java.text.MessageFormat;
|
||||||
|
@ -901,7 +902,7 @@ else if (0 <= (idx = packed.find(dst.getName())))
|
||||||
return ref;
|
return ref;
|
||||||
}
|
}
|
||||||
|
|
||||||
private PackedRefList getPackedRefs() throws IOException {
|
PackedRefList getPackedRefs() throws IOException {
|
||||||
boolean trustFolderStat = getRepository().getConfig().getBoolean(
|
boolean trustFolderStat = getRepository().getConfig().getBoolean(
|
||||||
ConfigConstants.CONFIG_CORE_SECTION,
|
ConfigConstants.CONFIG_CORE_SECTION,
|
||||||
ConfigConstants.CONFIG_KEY_TRUSTFOLDERSTAT, true);
|
ConfigConstants.CONFIG_KEY_TRUSTFOLDERSTAT, true);
|
||||||
|
@ -1188,6 +1189,29 @@ private static boolean isSymRef(final byte[] buf, int n) {
|
||||||
&& buf[4] == ' ';
|
&& buf[4] == ' ';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Detect if we are in a clone command execution
|
||||||
|
*
|
||||||
|
* @return {@code true} if we are currently cloning a repository
|
||||||
|
* @throws IOException
|
||||||
|
*/
|
||||||
|
boolean isInClone() throws IOException {
|
||||||
|
return hasDanglingHead() && !packedRefsFile.exists() && !hasLooseRef();
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean hasDanglingHead() throws IOException {
|
||||||
|
Ref head = exactRef(Constants.HEAD);
|
||||||
|
if (head != null) {
|
||||||
|
ObjectId id = head.getObjectId();
|
||||||
|
return id == null || id.equals(ObjectId.zeroId());
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean hasLooseRef() throws IOException {
|
||||||
|
return Files.walk(refsDir.toPath()).anyMatch(Files::isRegularFile);
|
||||||
|
}
|
||||||
|
|
||||||
/** If the parent should fire listeners, fires them. */
|
/** If the parent should fire listeners, fires them. */
|
||||||
void fireRefsChanged() {
|
void fireRefsChanged() {
|
||||||
final int last = lastNotifiedModCnt.get();
|
final int last = lastNotifiedModCnt.get();
|
||||||
|
|
Loading…
Reference in New Issue