Browse Source

Support the new repository layout for submodules

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: I9b56a3dfa50f97f6975c2bb7c97b36296f331b64
tags/v3.6.0.201412230720-r
Christian Halstrick 9 years ago
parent
commit
53ff052998

+ 18
- 0
org.eclipse.jgit.test/tst/org/eclipse/jgit/api/CloneCommandTest.java View File

@@ -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();

+ 3
- 0
org.eclipse.jgit/src/org/eclipse/jgit/api/SubmoduleUpdateCommand.java View File

@@ -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();

+ 7
- 0
org.eclipse.jgit/src/org/eclipse/jgit/lib/Constants.java View File

@@ -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.
*

Loading…
Cancel
Save