Преглед на файлове

DeleteBranchCommand does not clean up upstream configuration

It wrongly uses the full name of the branch to remove the
configuration entries but must use the shortened one.

Change-Id: Ie386a128a6c6beccc20bafd15c2e36254c5f560d
Signed-off-by: Mathias Kinzler <mathias.kinzler@sap.com>
tags/v0.10.1
Mathias Kinzler преди 13 години
родител
ревизия
5c135a5856

+ 12
- 1
org.eclipse.jgit.test/tst/org/eclipse/jgit/api/BranchCommandTest.java Целия файл

@@ -287,6 +287,16 @@ public class BranchCommandTest extends RepositoryTestCase {
// the pull configuration should be gone after deletion
assertNull(localGit.getRepository().getConfig().getString("branch",
"newFromRemote", "remote"));

createBranch(localGit, "newFromRemote", false, remote.getName(), null);
assertEquals("origin", localGit.getRepository().getConfig().getString(
"branch", "newFromRemote", "remote"));
localGit.branchDelete().setBranchNames("refs/heads/newFromRemote")
.call();
// the pull configuration should be gone after deletion
assertNull(localGit.getRepository().getConfig().getString("branch",
"newFromRemote", "remote"));

// use --no-track
createBranch(localGit, "newFromRemote", false, remote.getName(),
SetupUpstreamMode.NOTRACK);
@@ -307,7 +317,8 @@ public class BranchCommandTest extends RepositoryTestCase {
SetupUpstreamMode.TRACK);
assertEquals(".", localGit.getRepository().getConfig().getString(
"branch", "newFromMaster", "remote"));
localGit.branchDelete().setBranchNames("newFromMaster").call();
localGit.branchDelete().setBranchNames("refs/heads/newFromMaster")
.call();
// the pull configuration should be gone after deletion
assertNull(localGit.getRepository().getConfig().getString("branch",
"newFromRemote", "remote"));

+ 13
- 7
org.eclipse.jgit/src/org/eclipse/jgit/api/DeleteBranchCommand.java Целия файл

@@ -127,13 +127,14 @@ public class DeleteBranchCommand extends GitCommand<List<String>> {
Ref currentRef = repo.getRef(branchName);
if (currentRef == null)
continue;
if (currentRef.getName().equals(currentBranch))
String fullName = currentRef.getName();
if (fullName.equals(currentBranch))
throw new CannotDeleteCurrentBranchException(
MessageFormat
.format(
JGitText.get().cannotDeleteCheckedOutBranch,
branchName));
RefUpdate update = repo.updateRef(currentRef.getName());
RefUpdate update = repo.updateRef(fullName);
update.setRefLogMessage("branch deleted", false);
update.setForceUpdate(true);
Result deleteResult = update.delete();
@@ -150,11 +151,16 @@ public class DeleteBranchCommand extends GitCommand<List<String>> {
}

if (ok) {
result.add(currentRef.getName());
// remove upstream configuration if any
repo.getConfig().unsetSection(
ConfigConstants.CONFIG_BRANCH_SECTION, branchName);
repo.getConfig().save();
result.add(fullName);
if (fullName.startsWith(Constants.R_HEADS)) {
String shortenedName = fullName
.substring(Constants.R_HEADS.length());
// remove upstream configuration if any
repo.getConfig().unsetSection(
ConfigConstants.CONFIG_BRANCH_SECTION,
shortenedName);
repo.getConfig().save();
}
} else
throw new JGitInternalException(MessageFormat.format(
JGitText.get().deleteBranchUnexpectedResult,

Loading…
Отказ
Запис