From b8f257747287df472fe2907c45144ab0dbbc9fcc Mon Sep 17 00:00:00 2001 From: Marc Strapetz Date: Mon, 20 Nov 2017 10:21:30 +0100 Subject: [PATCH] Config: extract method to read included config Change-Id: I2c55af3e5fe29e0ce8e3d05e4b54ec961d3f863a Signed-off-by: Marc Strapetz --- .../src/org/eclipse/jgit/lib/Config.java | 57 +++++++++++++------ 1 file changed, 40 insertions(+), 17 deletions(-) diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/lib/Config.java b/org.eclipse.jgit/src/org/eclipse/jgit/lib/Config.java index 77dfce108..f655f062b 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/lib/Config.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/lib/Config.java @@ -63,6 +63,7 @@ import java.util.Set; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicReference; +import org.eclipse.jgit.annotations.Nullable; import org.eclipse.jgit.errors.ConfigInvalidException; import org.eclipse.jgit.events.ConfigChangedEvent; import org.eclipse.jgit.events.ConfigChangedListener; @@ -1100,29 +1101,29 @@ public class Config { return newEntries; } - private void addIncludedConfig(final List newEntries, - ConfigLine line, int depth) throws ConfigInvalidException { - if (!line.name.equals("path") || //$NON-NLS-1$ - line.value == null || line.value.equals(MAGIC_EMPTY_VALUE)) { - throw new ConfigInvalidException( - JGitText.get().invalidLineInConfigFile); - } - File path = new File(line.value); + /** + * Read the included config from the specified (possibly) relative path + * + * @param relPath + * possibly relative path to the included config, as specified in + * this config + * @return the read bytes, or null if the included config should be ignored + * @throws ConfigInvalidException + * if something went wrong while reading the config + * @since 4.10 + */ + @Nullable + protected byte[] readIncludedConfig(String relPath) + throws ConfigInvalidException { + File path = new File(relPath); try { - byte[] bytes = IO.readFully(path); - String decoded; - if (isUtf8(bytes)) { - decoded = RawParseUtils.decode(RawParseUtils.UTF8_CHARSET, - bytes, 3, bytes.length); - } else { - decoded = RawParseUtils.decode(bytes); - } - newEntries.addAll(fromTextRecurse(decoded, depth + 1)); + return IO.readFully(path); } catch (FileNotFoundException fnfe) { if (path.exists()) { throw new ConfigInvalidException(MessageFormat .format(JGitText.get().cannotReadFile, path), fnfe); } + return null; } catch (IOException ioe) { throw new ConfigInvalidException( MessageFormat.format(JGitText.get().cannotReadFile, path), @@ -1130,6 +1131,28 @@ public class Config { } } + private void addIncludedConfig(final List newEntries, + ConfigLine line, int depth) throws ConfigInvalidException { + if (!line.name.equals("path") || //$NON-NLS-1$ + line.value == null || line.value.equals(MAGIC_EMPTY_VALUE)) { + throw new ConfigInvalidException( + JGitText.get().invalidLineInConfigFile); + } + byte[] bytes = readIncludedConfig(line.value); + if (bytes == null) { + return; + } + + String decoded; + if (isUtf8(bytes)) { + decoded = RawParseUtils.decode(RawParseUtils.UTF8_CHARSET, bytes, 3, + bytes.length); + } else { + decoded = RawParseUtils.decode(bytes); + } + newEntries.addAll(fromTextRecurse(decoded, depth + 1)); + } + private ConfigSnapshot newState() { return new ConfigSnapshot(Collections. emptyList(), getBaseState());