* stable-5.1: Replace usage of ArrayIndexOutOfBoundsException in treewalk Add config constants for WindowCache configuration options Change-Id: I17da3c5183eca536aa2be3972bc5df45c9d75f1b Signed-off-by: David Pursehouse <david.pursehouse@gmail.com> Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>tags/v5.3.7.202002110540-r
@@ -63,6 +63,30 @@ | |||
<message_argument value="CONFIG_JMX_SECTION"/> | |||
</message_arguments> | |||
</filter> | |||
<filter id="1142947843"> | |||
<message_arguments> | |||
<message_argument value="5.1.13"/> | |||
<message_argument value="CONFIG_KEY_PACKED_GIT_LIMIT"/> | |||
</message_arguments> | |||
</filter> | |||
<filter id="1142947843"> | |||
<message_arguments> | |||
<message_argument value="5.1.13"/> | |||
<message_argument value="CONFIG_KEY_PACKED_GIT_MMAP"/> | |||
</message_arguments> | |||
</filter> | |||
<filter id="1142947843"> | |||
<message_arguments> | |||
<message_argument value="5.1.13"/> | |||
<message_argument value="CONFIG_KEY_PACKED_GIT_OPENFILES"/> | |||
</message_arguments> | |||
</filter> | |||
<filter id="1142947843"> | |||
<message_arguments> | |||
<message_argument value="5.1.13"/> | |||
<message_argument value="CONFIG_KEY_PACKED_GIT_WINDOWSIZE"/> | |||
</message_arguments> | |||
</filter> | |||
<filter id="1142947843"> | |||
<message_arguments> | |||
<message_argument value="5.1.9"/> |
@@ -230,6 +230,30 @@ public final class ConfigConstants { | |||
/** The "streamFileThreshold" key */ | |||
public static final String CONFIG_KEY_STREAM_FILE_TRESHOLD = "streamFileThreshold"; | |||
/** | |||
* The "packedGitMmap" key | |||
* @since 5.1.13 | |||
*/ | |||
public static final String CONFIG_KEY_PACKED_GIT_MMAP = "packedgitmmap"; | |||
/** | |||
* The "packedGitWindowSize" key | |||
* @since 5.1.13 | |||
*/ | |||
public static final String CONFIG_KEY_PACKED_GIT_WINDOWSIZE = "packedgitwindowsize"; | |||
/** | |||
* The "packedGitLimit" key | |||
* @since 5.1.13 | |||
*/ | |||
public static final String CONFIG_KEY_PACKED_GIT_LIMIT = "packedgitlimit"; | |||
/** | |||
* The "packedGitOpenFiles" key | |||
* @since 5.1.13 | |||
*/ | |||
public static final String CONFIG_KEY_PACKED_GIT_OPENFILES = "packedgitopenfiles"; | |||
/** The "remote" key */ | |||
public static final String CONFIG_KEY_REMOTE = "remote"; | |||
@@ -43,6 +43,14 @@ | |||
package org.eclipse.jgit.storage.file; | |||
import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_CORE_SECTION; | |||
import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_DELTA_BASE_CACHE_LIMIT; | |||
import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_PACKED_GIT_LIMIT; | |||
import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_PACKED_GIT_MMAP; | |||
import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_PACKED_GIT_OPENFILES; | |||
import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_PACKED_GIT_WINDOWSIZE; | |||
import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_STREAM_FILE_TRESHOLD; | |||
import org.eclipse.jgit.internal.storage.file.WindowCache; | |||
import org.eclipse.jgit.lib.Config; | |||
import org.eclipse.jgit.storage.pack.PackConfig; | |||
@@ -227,20 +235,20 @@ public class WindowCacheConfig { | |||
* @since 3.0 | |||
*/ | |||
public WindowCacheConfig fromConfig(Config rc) { | |||
setPackedGitOpenFiles(rc.getInt( | |||
"core", null, "packedgitopenfiles", getPackedGitOpenFiles())); //$NON-NLS-1$ //$NON-NLS-2$ | |||
setPackedGitLimit(rc.getLong( | |||
"core", null, "packedgitlimit", getPackedGitLimit())); //$NON-NLS-1$ //$NON-NLS-2$ | |||
setPackedGitWindowSize(rc.getInt( | |||
"core", null, "packedgitwindowsize", getPackedGitWindowSize())); //$NON-NLS-1$ //$NON-NLS-2$ | |||
setPackedGitMMAP(rc.getBoolean( | |||
"core", null, "packedgitmmap", isPackedGitMMAP())); //$NON-NLS-1$ //$NON-NLS-2$ | |||
setDeltaBaseCacheLimit(rc.getInt( | |||
"core", null, "deltabasecachelimit", getDeltaBaseCacheLimit())); //$NON-NLS-1$ //$NON-NLS-2$ | |||
setPackedGitOpenFiles(rc.getInt(CONFIG_CORE_SECTION, null, | |||
CONFIG_KEY_PACKED_GIT_OPENFILES, getPackedGitOpenFiles())); | |||
setPackedGitLimit(rc.getLong(CONFIG_CORE_SECTION, null, | |||
CONFIG_KEY_PACKED_GIT_LIMIT, getPackedGitLimit())); | |||
setPackedGitWindowSize(rc.getInt(CONFIG_CORE_SECTION, null, | |||
CONFIG_KEY_PACKED_GIT_WINDOWSIZE, getPackedGitWindowSize())); | |||
setPackedGitMMAP(rc.getBoolean(CONFIG_CORE_SECTION, null, | |||
CONFIG_KEY_PACKED_GIT_MMAP, isPackedGitMMAP())); | |||
setDeltaBaseCacheLimit(rc.getInt(CONFIG_CORE_SECTION, null, | |||
CONFIG_KEY_DELTA_BASE_CACHE_LIMIT, getDeltaBaseCacheLimit())); | |||
long maxMem = Runtime.getRuntime().maxMemory(); | |||
long sft = rc.getLong( | |||
"core", null, "streamfilethreshold", getStreamFileThreshold()); //$NON-NLS-1$ //$NON-NLS-2$ | |||
long sft = rc.getLong(CONFIG_CORE_SECTION, null, | |||
CONFIG_KEY_STREAM_FILE_TRESHOLD, getStreamFileThreshold()); | |||
sft = Math.min(sft, maxMem / 4); // don't use more than 1/4 of the heap | |||
sft = Math.min(sft, Integer.MAX_VALUE); // cannot exceed array length | |||
setStreamFileThreshold((int) sft); |
@@ -239,12 +239,10 @@ public abstract class AbstractTreeIterator { | |||
path = p.path; | |||
pathOffset = p.pathLen + 1; | |||
try { | |||
path[pathOffset - 1] = '/'; | |||
} catch (ArrayIndexOutOfBoundsException e) { | |||
if (pathOffset > path.length) { | |||
growPath(p.pathLen); | |||
path[pathOffset - 1] = '/'; | |||
} | |||
path[pathOffset - 1] = '/'; | |||
} | |||
/** |
@@ -387,14 +387,13 @@ public class CanonicalTreeParser extends AbstractTreeIterator { | |||
tmp = pathOffset; | |||
for (;; tmp++) { | |||
c = raw[ptr++]; | |||
if (c == 0) | |||
if (c == 0) { | |||
break; | |||
try { | |||
path[tmp] = c; | |||
} catch (ArrayIndexOutOfBoundsException e) { | |||
} | |||
if (tmp >= path.length) { | |||
growPath(tmp); | |||
path[tmp] = c; | |||
} | |||
path[tmp] = c; | |||
} | |||
pathLen = tmp; | |||
nextPtr = ptr + OBJECT_ID_LENGTH; |