FS_POSIX: Fix boxing/unboxing of Boolean

Boolean is being abused to represent three possible states of atomic
file creation support (true/enabled, false/disabled, null/undefined).

Replace this with an enum of the three explicit states.

Change-Id: I2cd7fa6422311dc427823304b082ce8da50d2fbe
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
This commit is contained in:
David Pursehouse 2017-12-07 16:30:01 +09:00
parent 171f84a041
commit 61790cb931
1 changed files with 19 additions and 12 deletions

View File

@ -80,7 +80,11 @@ public class FS_POSIX extends FS {
private volatile boolean supportsUnixNLink = true;
private volatile Boolean supportsAtomicCreateNewFile;
private volatile AtomicFileCreation supportsAtomicCreateNewFile = AtomicFileCreation.UNDEFINED;
private enum AtomicFileCreation {
SUPPORTED, NOT_SUPPORTED, UNDEFINED
}
/** Default constructor. */
protected FS_POSIX() {
@ -99,31 +103,34 @@ protected FS_POSIX(FS src) {
}
}
@SuppressWarnings("boxing")
private void determineAtomicFileCreationSupport() {
// @TODO: enhance SystemReader to support this without copying code
Boolean ret = getAtomicFileCreationSupportOption(
AtomicFileCreation ret = getAtomicFileCreationSupportOption(
SystemReader.getInstance().openUserConfig(null, this));
if (ret == null && StringUtils.isEmptyOrNull(SystemReader.getInstance()
.getenv(Constants.GIT_CONFIG_NOSYSTEM_KEY))) {
if (ret == AtomicFileCreation.UNDEFINED
&& StringUtils.isEmptyOrNull(SystemReader.getInstance()
.getenv(Constants.GIT_CONFIG_NOSYSTEM_KEY))) {
ret = getAtomicFileCreationSupportOption(
SystemReader.getInstance().openSystemConfig(null, this));
}
supportsAtomicCreateNewFile = (ret == null) || ret;
supportsAtomicCreateNewFile = ret;
}
private Boolean getAtomicFileCreationSupportOption(FileBasedConfig config) {
private AtomicFileCreation getAtomicFileCreationSupportOption(
FileBasedConfig config) {
try {
config.load();
String value = config.getString(ConfigConstants.CONFIG_CORE_SECTION,
null,
ConfigConstants.CONFIG_KEY_SUPPORTSATOMICFILECREATION);
if (value == null) {
return null;
return AtomicFileCreation.UNDEFINED;
}
return Boolean.valueOf(StringUtils.toBoolean(value));
return StringUtils.toBoolean(value)
? AtomicFileCreation.SUPPORTED
: AtomicFileCreation.NOT_SUPPORTED;
} catch (IOException | ConfigInvalidException e) {
return Boolean.TRUE;
return AtomicFileCreation.SUPPORTED;
}
}
@ -340,10 +347,10 @@ public File findHook(Repository repository, String hookName) {
@Override
public boolean supportsAtomicCreateNewFile() {
if (supportsAtomicCreateNewFile == null) {
if (supportsAtomicCreateNewFile == AtomicFileCreation.UNDEFINED) {
determineAtomicFileCreationSupport();
}
return supportsAtomicCreateNewFile.booleanValue();
return supportsAtomicCreateNewFile == AtomicFileCreation.SUPPORTED;
}
@Override