summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonathan Nieder <jrn@google.com>2018-10-07 21:55:52 +0000
committerJonathan Nieder <jrn@google.com>2018-10-08 21:40:56 +0000
commitd3eaf1007b42048bd507ee5634af571863b8e21d (patch)
tree6573f3850a238425b2e5e91e79e5c6bd40873237
parentdf8bd762a17c2459576104d7f81d7ecca962799d (diff)
downloadjgit-d3eaf1007b42048bd507ee5634af571863b8e21d.tar.gz
jgit-d3eaf1007b42048bd507ee5634af571863b8e21d.zip
SubmoduleValidator: Permit missing path or url
A .gitmodules file can include a submodule without a path to configure the URL for a submodule that is only present on other branches. A .gitmodules file can include a submodule with no URL and no path to reserve the name for a submodule that existed in earlier history but is not available from any URL any more. "git fsck" permits both of these cases. Permit them in JGit as well (instead of throwing NullPointerException). Change-Id: I3b442639ad79ea7a59227f96406a12e62d3573ae Reported-by: David Pursehouse <david.pursehouse@gmail.com> Signed-off-by: Jonathan Nieder <jrn@google.com>
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/internal/submodule/SubmoduleValidator.java27
1 files changed, 16 insertions, 11 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/internal/submodule/SubmoduleValidator.java b/org.eclipse.jgit/src/org/eclipse/jgit/internal/submodule/SubmoduleValidator.java
index d4bba2d0d1..5f405044c9 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/internal/submodule/SubmoduleValidator.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/internal/submodule/SubmoduleValidator.java
@@ -42,6 +42,10 @@
*/
package org.eclipse.jgit.internal.submodule;
+import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_PATH;
+import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_KEY_URL;
+import static org.eclipse.jgit.lib.ConfigConstants.CONFIG_SUBMODULE_SECTION;
+
import java.io.IOException;
import java.text.MessageFormat;
@@ -134,7 +138,6 @@ public class SubmoduleValidator {
*/
public static void assertValidSubmodulePath(String path)
throws SubmoduleValidationException {
-
if (path.startsWith("-")) { //$NON-NLS-1$
throw new SubmoduleValidationException(
MessageFormat.format(
@@ -154,19 +157,21 @@ public class SubmoduleValidator {
Config c = new Config();
try {
c.fromText(gitModulesContents);
- for (String subsection : c.getSubsections(
- ConfigConstants.CONFIG_SUBMODULE_SECTION)) {
- String url = c.getString(
- ConfigConstants.CONFIG_SUBMODULE_SECTION,
- subsection, ConfigConstants.CONFIG_KEY_URL);
- assertValidSubmoduleUri(url);
-
+ for (String subsection :
+ c.getSubsections(CONFIG_SUBMODULE_SECTION)) {
assertValidSubmoduleName(subsection);
+ String url = c.getString(
+ CONFIG_SUBMODULE_SECTION, subsection, CONFIG_KEY_URL);
+ if (url != null) {
+ assertValidSubmoduleUri(url);
+ }
+
String path = c.getString(
- ConfigConstants.CONFIG_SUBMODULE_SECTION, subsection,
- ConfigConstants.CONFIG_KEY_PATH);
- assertValidSubmodulePath(path);
+ CONFIG_SUBMODULE_SECTION, subsection, CONFIG_KEY_PATH);
+ if (path != null) {
+ assertValidSubmodulePath(path);
+ }
}
} catch (ConfigInvalidException e) {
throw new IOException(