When updating a submodule (e.g. during recursive clone) the repository for the submodule should be located at <gitdir>/modules/<submodule-path> whereas the working tree of the submodule should be located at <working-tree>/<submodule-path> (<gitdir> and <working-tree> are associated to the containing repository). Since CloneCommand has learned about specifying a separate gitdir this is easy to implement in SubmoduleUpdateCommand. Change-Id: I9b56a3dfa50f97f6975c2bb7c97b36296f331b64tags/v3.6.0.201412230720-r
@@ -410,6 +410,18 @@ public class CloneCommandTest extends RepositoryTestCase { | |||
assertEquals(SubmoduleStatusType.INITIALIZED, pathStatus.getType()); | |||
assertEquals(commit, pathStatus.getHeadId()); | |||
assertEquals(commit, pathStatus.getIndexId()); | |||
SubmoduleWalk walk = SubmoduleWalk.forIndex(git2.getRepository()); | |||
assertTrue(walk.next()); | |||
Repository clonedSub1 = walk.getRepository(); | |||
addRepoToClose(clonedSub1); | |||
assertNotNull(clonedSub1); | |||
assertEquals( | |||
new File(git2.getRepository().getWorkTree(), walk.getPath()), | |||
clonedSub1.getWorkTree()); | |||
assertEquals(new File(new File(git2.getRepository().getDirectory(), | |||
"modules"), walk.getPath()), clonedSub1.getDirectory()); | |||
walk.release(); | |||
} | |||
@Test | |||
@@ -492,6 +504,12 @@ public class CloneCommandTest extends RepositoryTestCase { | |||
assertTrue(walk.next()); | |||
Repository clonedSub1 = walk.getRepository(); | |||
assertNotNull(clonedSub1); | |||
assertEquals( | |||
new File(git2.getRepository().getWorkTree(), walk.getPath()), | |||
clonedSub1.getWorkTree()); | |||
assertEquals(new File(new File(git2.getRepository().getDirectory(), | |||
"modules"), walk.getPath()), | |||
clonedSub1.getDirectory()); | |||
status = new SubmoduleStatusCommand(clonedSub1); | |||
statuses = status.call(); | |||
clonedSub1.close(); |
@@ -42,6 +42,7 @@ | |||
*/ | |||
package org.eclipse.jgit.api; | |||
import java.io.File; | |||
import java.io.IOException; | |||
import java.util.ArrayList; | |||
import java.util.Collection; | |||
@@ -163,6 +164,8 @@ public class SubmoduleUpdateCommand extends | |||
configure(clone); | |||
clone.setURI(url); | |||
clone.setDirectory(generator.getDirectory()); | |||
clone.setGitDir(new File(new File(repo.getDirectory(), | |||
Constants.MODULES), generator.getPath())); | |||
if (monitor != null) | |||
clone.setProgressMonitor(monitor); | |||
submoduleRepo = clone.call().getRepository(); |
@@ -372,6 +372,13 @@ public final class Constants { | |||
*/ | |||
public static final String GITDIR = "gitdir: "; | |||
/** | |||
* Name of the folder (inside gitDir) where submodules are stored | |||
* | |||
* @since 3.6 | |||
*/ | |||
public static final String MODULES = "modules"; | |||
/** | |||
* Create a new digest function for objects. | |||
* |