Bläddra i källkod

Load .gitmodules config before adding values to it

This prevents existing entries from being cleared when the
.gitmodules config is saved after the new submodule configuration
is added.

Change-Id: I66841f5e758a7527e2e6e25cf1318e5fea91a909
Signed-off-by: Kevin Sawicki <kevin@github.com>
tags/v2.0.0.201206130900-r
Sascha Scholz 12 år sedan
förälder
incheckning
a1f877e312

+ 41
- 0
org.eclipse.jgit.test/tst/org/eclipse/jgit/submodule/SubmoduleAddTest.java Visa fil

@@ -66,6 +66,7 @@ import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.lib.RepositoryTestCase;
import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.storage.file.FileBasedConfig;
import org.junit.Test;

/**
@@ -212,4 +213,44 @@ public class SubmoduleAddTest extends RepositoryTestCase {
assertTrue(status.getAdded().contains(Constants.DOT_GIT_MODULES));
assertTrue(status.getAdded().contains(path));
}

@Test
public void addSubmoduleWithExistingSubmoduleDefined() throws Exception {
String path1 = "sub1";
String url1 = "git://server/repo1.git";
String path2 = "sub2";

FileBasedConfig modulesConfig = new FileBasedConfig(new File(
db.getWorkTree(), Constants.DOT_GIT_MODULES), db.getFS());
modulesConfig.setString(ConfigConstants.CONFIG_SUBMODULE_SECTION,
path1, ConfigConstants.CONFIG_KEY_PATH, path1);
modulesConfig.setString(ConfigConstants.CONFIG_SUBMODULE_SECTION,
path1, ConfigConstants.CONFIG_KEY_URL, url1);
modulesConfig.save();

Git git = new Git(db);
writeTrashFile("file.txt", "content");
git.add().addFilepattern("file.txt").call();
assertNotNull(git.commit().setMessage("create file").call());

SubmoduleAddCommand command = new SubmoduleAddCommand(db);
command.setPath(path2);
String url2 = db.getDirectory().toURI().toString();
command.setURI(url2);
assertNotNull(command.call());

modulesConfig.load();
assertEquals(path1, modulesConfig.getString(
ConfigConstants.CONFIG_SUBMODULE_SECTION, path1,
ConfigConstants.CONFIG_KEY_PATH));
assertEquals(url1, modulesConfig.getString(
ConfigConstants.CONFIG_SUBMODULE_SECTION, path1,
ConfigConstants.CONFIG_KEY_URL));
assertEquals(path2, modulesConfig.getString(
ConfigConstants.CONFIG_SUBMODULE_SECTION, path2,
ConfigConstants.CONFIG_KEY_PATH));
assertEquals(url2, modulesConfig.getString(
ConfigConstants.CONFIG_SUBMODULE_SECTION, path2,
ConfigConstants.CONFIG_KEY_URL));
}
}

+ 8
- 4
org.eclipse.jgit/src/org/eclipse/jgit/api/SubmoduleAddCommand.java Visa fil

@@ -49,6 +49,7 @@ import java.text.MessageFormat;
import org.eclipse.jgit.JGitText;
import org.eclipse.jgit.api.errors.JGitInternalException;
import org.eclipse.jgit.api.errors.NoFilepatternException;
import org.eclipse.jgit.errors.ConfigInvalidException;
import org.eclipse.jgit.lib.ConfigConstants;
import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.NullProgressMonitor;
@@ -177,14 +178,17 @@ public class SubmoduleAddCommand extends
// Save path and URL to parent repository's .gitmodules file
FileBasedConfig modulesConfig = new FileBasedConfig(new File(
repo.getWorkTree(), Constants.DOT_GIT_MODULES), repo.getFS());
modulesConfig.setString(ConfigConstants.CONFIG_SUBMODULE_SECTION, path,
ConfigConstants.CONFIG_KEY_PATH, path);
modulesConfig.setString(ConfigConstants.CONFIG_SUBMODULE_SECTION, path,
ConfigConstants.CONFIG_KEY_URL, uri);
try {
modulesConfig.load();
modulesConfig.setString(ConfigConstants.CONFIG_SUBMODULE_SECTION,
path, ConfigConstants.CONFIG_KEY_PATH, path);
modulesConfig.setString(ConfigConstants.CONFIG_SUBMODULE_SECTION,
path, ConfigConstants.CONFIG_KEY_URL, uri);
modulesConfig.save();
} catch (IOException e) {
throw new JGitInternalException(e.getMessage(), e);
} catch (ConfigInvalidException e) {
throw new JGitInternalException(e.getMessage(), e);
}

AddCommand add = new AddCommand(repo);

Laddar…
Avbryt
Spara