Ensure .gitmodules is loaded when accessing submodule name

This problem occurred when calling SubmoduleWalk#getModuleName if the
first submodule processed has a name and a path which do not match
SubmoduleWalk#getModuleName returned the module path instead of the
module name. In order to fix this SubmoduleWalk#getModuleName needs to
ensure that the modules config is loaded.

Bug: 565776
Change-Id: I36ce1fbc64c4849f9d8e39864b825c6e28d344f8
Signed-off-by: John Dallaway <john@dallaway.org.uk>
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
This commit is contained in:
John Dallaway 2020-09-02 14:15:23 +01:00 committed by Matthias Sohn
parent 8269587f49
commit f4b4dae2be
3 changed files with 9 additions and 1 deletions

View File

@ -455,6 +455,7 @@ public void apply(DirCacheEntry ent) {
final CanonicalTreeParser p = new CanonicalTreeParser();
p.reset(testDb.getRevWalk().getObjectReader(), commit.getTree());
try (SubmoduleWalk gen = SubmoduleWalk.forPath(db, p, "sub")) {
assertEquals(arbitraryName, gen.getModuleName());
assertEquals(path, gen.getPath());
assertEquals(subId, gen.getObjectId());
assertEquals(new File(db.getWorkTree(), path), gen.getDirectory());

View File

@ -20,8 +20,10 @@
import java.util.List;
import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.api.errors.InvalidConfigurationException;
import org.eclipse.jgit.api.errors.JGitInternalException;
import org.eclipse.jgit.api.errors.NoHeadException;
import org.eclipse.jgit.errors.ConfigInvalidException;
import org.eclipse.jgit.internal.JGitText;
import org.eclipse.jgit.lib.ConfigConstants;
import org.eclipse.jgit.lib.ObjectId;
@ -119,6 +121,8 @@ public Collection<SubmoduleDeinitResult> call() throws GitAPIException {
}
}
return results;
} catch (ConfigInvalidException e) {
throw new InvalidConfigurationException(e.getMessage(), e);
} catch (IOException e) {
throw new JGitInternalException(e.getMessage(), e);
}

View File

@ -657,8 +657,11 @@ public void setBuilderFactory(RepositoryBuilderFactory factory) {
*
* @since 4.10
* @return name
* @throws ConfigInvalidException
* @throws IOException
*/
public String getModuleName() {
public String getModuleName() throws IOException, ConfigInvalidException {
lazyLoadModulesConfig();
return getModuleName(path);
}