Browse Source

Use submodule name instead of path as key in config

When a submodule is moved, the "name" field remains the same, while
the "path" field changes.  Git uses the "name" field in .git/config
when a submodule is initialized, so this patch makes JGit do so too.

Change-Id: I48d8e89f706447b860c0162822a8e68170aae42b
Signed-off-by: David Turner <dturner@twosigma.com>
stable-4.10
David Turner 7 years ago committed by Matthias Sohn
parent
commit
4bbc74ba40
  1. 1
      org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties
  2. 5
      org.eclipse.jgit/src/org/eclipse/jgit/api/SubmoduleInitCommand.java
  3. 1
      org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java
  4. 25
      org.eclipse.jgit/src/org/eclipse/jgit/submodule/SubmoduleWalk.java

1
org.eclipse.jgit/resources/org/eclipse/jgit/internal/JGitText.properties

@ -457,6 +457,7 @@ noMergeBase=No merge base could be determined. Reason={0}. {1}
noMergeHeadSpecified=No merge head specified noMergeHeadSpecified=No merge head specified
nonBareLinkFilesNotSupported=Link files are not supported with nonbare repos nonBareLinkFilesNotSupported=Link files are not supported with nonbare repos
noSuchRef=no such ref noSuchRef=no such ref
noSuchSubmodule=no such submodule {0}
notABoolean=Not a boolean: {0} notABoolean=Not a boolean: {0}
notABundle=not a bundle notABundle=not a bundle
notADIRCFile=Not a DIRC file. notADIRCFile=Not a DIRC file.

5
org.eclipse.jgit/src/org/eclipse/jgit/api/SubmoduleInitCommand.java

@ -110,16 +110,17 @@ public class SubmoduleInitCommand extends GitCommand<Collection<String>> {
continue; continue;
String path = generator.getPath(); String path = generator.getPath();
String name = generator.getModuleName();
// Copy 'url' and 'update' fields from .gitmodules to config // Copy 'url' and 'update' fields from .gitmodules to config
// file // file
String url = generator.getRemoteUrl(); String url = generator.getRemoteUrl();
String update = generator.getModulesUpdate(); String update = generator.getModulesUpdate();
if (url != null) if (url != null)
config.setString(ConfigConstants.CONFIG_SUBMODULE_SECTION, config.setString(ConfigConstants.CONFIG_SUBMODULE_SECTION,
path, ConfigConstants.CONFIG_KEY_URL, url); name, ConfigConstants.CONFIG_KEY_URL, url);
if (update != null) if (update != null)
config.setString(ConfigConstants.CONFIG_SUBMODULE_SECTION, config.setString(ConfigConstants.CONFIG_SUBMODULE_SECTION,
path, ConfigConstants.CONFIG_KEY_UPDATE, update); name, ConfigConstants.CONFIG_KEY_UPDATE, update);
if (url != null || update != null) if (url != null || update != null)
initialized.add(path); initialized.add(path);
} }

1
org.eclipse.jgit/src/org/eclipse/jgit/internal/JGitText.java

@ -518,6 +518,7 @@ public class JGitText extends TranslationBundle {
/***/ public String noMergeHeadSpecified; /***/ public String noMergeHeadSpecified;
/***/ public String nonBareLinkFilesNotSupported; /***/ public String nonBareLinkFilesNotSupported;
/***/ public String noSuchRef; /***/ public String noSuchRef;
/***/ public String noSuchSubmodule;
/***/ public String notABoolean; /***/ public String notABoolean;
/***/ public String notABundle; /***/ public String notABundle;
/***/ public String notADIRCFile; /***/ public String notADIRCFile;

25
org.eclipse.jgit/src/org/eclipse/jgit/submodule/SubmoduleWalk.java

@ -616,6 +616,15 @@ public class SubmoduleWalk implements AutoCloseable {
return path; return path;
} }
/**
* The module name for the current submodule entry (used for the section name of .git/config)
* @since 4.10
* @return name
*/
public String getModuleName() {
return getModuleName(path);
}
/** /**
* Get object id of current submodule entry * Get object id of current submodule entry
* *
@ -636,7 +645,7 @@ public class SubmoduleWalk implements AutoCloseable {
public String getModulesPath() throws IOException, ConfigInvalidException { public String getModulesPath() throws IOException, ConfigInvalidException {
lazyLoadModulesConfig(); lazyLoadModulesConfig();
return modulesConfig.getString(ConfigConstants.CONFIG_SUBMODULE_SECTION, return modulesConfig.getString(ConfigConstants.CONFIG_SUBMODULE_SECTION,
getModuleName(path), ConfigConstants.CONFIG_KEY_PATH); getModuleName(), ConfigConstants.CONFIG_KEY_PATH);
} }
/** /**
@ -648,12 +657,8 @@ public class SubmoduleWalk implements AutoCloseable {
* @throws java.io.IOException * @throws java.io.IOException
*/ */
public String getConfigUrl() throws IOException, ConfigInvalidException { public String getConfigUrl() throws IOException, ConfigInvalidException {
// SubmoduleInitCommand copies the submodules.*.url and
// submodules.*.update values from .gitmodules to the config, and
// does so using the path defined in .gitmodules as the subsection
// name. So no path-to-name translation is necessary here.
return repoConfig.getString(ConfigConstants.CONFIG_SUBMODULE_SECTION, return repoConfig.getString(ConfigConstants.CONFIG_SUBMODULE_SECTION,
path, ConfigConstants.CONFIG_KEY_URL); getModuleName(), ConfigConstants.CONFIG_KEY_URL);
} }
/** /**
@ -667,7 +672,7 @@ public class SubmoduleWalk implements AutoCloseable {
public String getModulesUrl() throws IOException, ConfigInvalidException { public String getModulesUrl() throws IOException, ConfigInvalidException {
lazyLoadModulesConfig(); lazyLoadModulesConfig();
return modulesConfig.getString(ConfigConstants.CONFIG_SUBMODULE_SECTION, return modulesConfig.getString(ConfigConstants.CONFIG_SUBMODULE_SECTION,
getModuleName(path), ConfigConstants.CONFIG_KEY_URL); getModuleName(), ConfigConstants.CONFIG_KEY_URL);
} }
/** /**
@ -680,7 +685,7 @@ public class SubmoduleWalk implements AutoCloseable {
*/ */
public String getConfigUpdate() throws IOException, ConfigInvalidException { public String getConfigUpdate() throws IOException, ConfigInvalidException {
return repoConfig.getString(ConfigConstants.CONFIG_SUBMODULE_SECTION, return repoConfig.getString(ConfigConstants.CONFIG_SUBMODULE_SECTION,
path, ConfigConstants.CONFIG_KEY_UPDATE); getModuleName(), ConfigConstants.CONFIG_KEY_UPDATE);
} }
/** /**
@ -694,7 +699,7 @@ public class SubmoduleWalk implements AutoCloseable {
public String getModulesUpdate() throws IOException, ConfigInvalidException { public String getModulesUpdate() throws IOException, ConfigInvalidException {
lazyLoadModulesConfig(); lazyLoadModulesConfig();
return modulesConfig.getString(ConfigConstants.CONFIG_SUBMODULE_SECTION, return modulesConfig.getString(ConfigConstants.CONFIG_SUBMODULE_SECTION,
getModuleName(path), ConfigConstants.CONFIG_KEY_UPDATE); getModuleName(), ConfigConstants.CONFIG_KEY_UPDATE);
} }
/** /**
@ -710,7 +715,7 @@ public class SubmoduleWalk implements AutoCloseable {
ConfigInvalidException { ConfigInvalidException {
lazyLoadModulesConfig(); lazyLoadModulesConfig();
return modulesConfig.getEnum(IgnoreSubmoduleMode.values(), return modulesConfig.getEnum(IgnoreSubmoduleMode.values(),
ConfigConstants.CONFIG_SUBMODULE_SECTION, getModuleName(path), ConfigConstants.CONFIG_SUBMODULE_SECTION, getModuleName(),
ConfigConstants.CONFIG_KEY_IGNORE, IgnoreSubmoduleMode.NONE); ConfigConstants.CONFIG_KEY_IGNORE, IgnoreSubmoduleMode.NONE);
} }

Loading…
Cancel
Save