Use the working tree's .gitmodules in SubmoduleWalk.forIndex()

This was broken in fe1f1b8f8a, which
preferred the index over the working tree when both were present.

Change-Id: I97dcf9a088adcbd0187fa7eec9ef34445ce3a981
Signed-off-by: Kevin Sawicki <kevin@github.com>
This commit is contained in:
Dave Borowitz 2012-06-25 10:46:36 -07:00 committed by Kevin Sawicki
parent 1bf5b9c7a8
commit 2444aa231a
2 changed files with 14 additions and 24 deletions

View File

@ -299,13 +299,13 @@ public void indexWithGitmodules() throws Exception {
final Config gitmodules = new Config();
gitmodules.setString(CONFIG_SUBMODULE_SECTION, path, CONFIG_KEY_PATH,
"sub");
gitmodules.setString(CONFIG_SUBMODULE_SECTION, path, CONFIG_KEY_URL,
"git://example.com/sub");
final RevBlob gitmodulesBlob = testDb.blob(gitmodules.toText());
// Different config in the working tree.
// Different config in the index should be overridden by the working tree.
gitmodules.setString(CONFIG_SUBMODULE_SECTION, path, CONFIG_KEY_URL,
"git://example.com/bad");
final RevBlob gitmodulesBlob = testDb.blob(gitmodules.toText());
gitmodules.setString(CONFIG_SUBMODULE_SECTION, path, CONFIG_KEY_URL,
"git://example.com/sub");
writeTrashFile(DOT_GIT_MODULES, gitmodules.toText());
DirCache cache = db.lockDirCache();

View File

@ -94,8 +94,6 @@ public static SubmoduleWalk forIndex(Repository repository)
try {
DirCache index = repository.readDirCache();
generator.setTree(new DirCacheIterator(index));
generator.setRootTree(new DirCacheIterator(index));
generator.useWorkingTree = true;
} catch (IOException e) {
generator.release();
throw e;
@ -304,8 +302,6 @@ else if (submoduleUrl.startsWith("../")) {
private String path;
private boolean useWorkingTree;
/**
* Create submodule generator
*
@ -388,7 +384,14 @@ public SubmoduleWalk setRootTree(final AnyObjectId id) throws IOException {
* @throws ConfigInvalidException
*/
public SubmoduleWalk loadModulesConfig() throws IOException, ConfigInvalidException {
if (rootTree != null) {
if (rootTree == null) {
File modulesFile = new File(repository.getWorkTree(),
Constants.DOT_GIT_MODULES);
FileBasedConfig config = new FileBasedConfig(modulesFile,
repository.getFS());
config.load();
modulesConfig = config;
} else {
TreeWalk configWalk = new TreeWalk(repository);
try {
configWalk.addTree(rootTree);
@ -411,10 +414,7 @@ public SubmoduleWalk loadModulesConfig() throws IOException, ConfigInvalidExcept
return this;
}
}
if (!useWorkingTree) {
modulesConfig = new Config();
return this;
}
modulesConfig = new Config();
} finally {
if (idx > 0)
rootTree.next(idx);
@ -423,16 +423,6 @@ public SubmoduleWalk loadModulesConfig() throws IOException, ConfigInvalidExcept
configWalk.release();
}
}
if (repository.isBare()) {
modulesConfig = new Config();
} else {
File modulesFile = new File(repository.getWorkTree(),
Constants.DOT_GIT_MODULES);
FileBasedConfig config = new FileBasedConfig(modulesFile,
repository.getFS());
config.load();
modulesConfig = config;
}
return this;
}