Honor trustFolderStats also when reading packed-refs
Then list of packed refs was cached in RefDirectory based on mtime of the packed-refs file. This may fail on NFS when attributes are cached. A cached mtime of the packed-refs file could cause JGit to trust the cached content of this file and to overlook that the file is modified. Honor the config option trustFolderStats and always read the packed-refs content if the option is false. By default this option is set to true and this fix is not active. Change-Id: I2b65cfaa8f4aba2efbf8a5e865d3f09f927e2eec
This commit is contained in:
parent
960d7ff3e5
commit
218cf3403d
|
@ -80,6 +80,7 @@
|
||||||
import org.eclipse.jgit.errors.ObjectWritingException;
|
import org.eclipse.jgit.errors.ObjectWritingException;
|
||||||
import org.eclipse.jgit.events.RefsChangedEvent;
|
import org.eclipse.jgit.events.RefsChangedEvent;
|
||||||
import org.eclipse.jgit.internal.JGitText;
|
import org.eclipse.jgit.internal.JGitText;
|
||||||
|
import org.eclipse.jgit.lib.ConfigConstants;
|
||||||
import org.eclipse.jgit.lib.Constants;
|
import org.eclipse.jgit.lib.Constants;
|
||||||
import org.eclipse.jgit.lib.ObjectId;
|
import org.eclipse.jgit.lib.ObjectId;
|
||||||
import org.eclipse.jgit.lib.ObjectIdRef;
|
import org.eclipse.jgit.lib.ObjectIdRef;
|
||||||
|
@ -765,14 +766,20 @@ else if (0 <= (idx = packed.find(dst.getName())))
|
||||||
}
|
}
|
||||||
|
|
||||||
private PackedRefList getPackedRefs() throws IOException {
|
private PackedRefList getPackedRefs() throws IOException {
|
||||||
|
boolean trustFolderStat = getRepository().getConfig().getBoolean(
|
||||||
|
ConfigConstants.CONFIG_CORE_SECTION,
|
||||||
|
ConfigConstants.CONFIG_KEY_TRUSTFOLDERSTAT, true);
|
||||||
|
|
||||||
final PackedRefList curList = packedRefs.get();
|
final PackedRefList curList = packedRefs.get();
|
||||||
if (!curList.snapshot.isModified(packedRefsFile))
|
if (trustFolderStat && !curList.snapshot.isModified(packedRefsFile)) {
|
||||||
return curList;
|
return curList;
|
||||||
|
}
|
||||||
|
|
||||||
final PackedRefList newList = readPackedRefs();
|
final PackedRefList newList = readPackedRefs();
|
||||||
if (packedRefs.compareAndSet(curList, newList)
|
if (packedRefs.compareAndSet(curList, newList)
|
||||||
&& !curList.id.equals(newList.id))
|
&& !curList.id.equals(newList.id)) {
|
||||||
modCnt.incrementAndGet();
|
modCnt.incrementAndGet();
|
||||||
|
}
|
||||||
return newList;
|
return newList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue