Explorar el Código

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 hace 13 años
padre
commit
5c135a5856

+ 12
- 1
org.eclipse.jgit.test/tst/org/eclipse/jgit/api/BranchCommandTest.java Ver fichero

@@ -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 Ver fichero

@@ -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,

Cargando…
Cancelar
Guardar