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