diff --git a/plugins/git4idea/src/git4idea/push/GitPushTargetPanel.java b/plugins/git4idea/src/git4idea/push/GitPushTargetPanel.java index 7ea1ec947710..114491cc7d84 100644 --- a/plugins/git4idea/src/git4idea/push/GitPushTargetPanel.java +++ b/plugins/git4idea/src/git4idea/push/GitPushTargetPanel.java @@ -117,11 +117,11 @@ public class GitPushTargetPanel extends PushTargetPanel { // "Set upstream" checkbox isn't shown if there is no existing tracking branch defaultTarget.getTargetType() == GitPushTargetType.TRACKING_BRANCH && !defaultTarget.isNewBranchCreated() ) { - myUpstreamCheckbox = new SetUpstreamCheckbox(defaultTarget.getBranch().getNameForRemoteOperations()); + myUpstreamCheckbox = new SetUpstreamCheckbox(defaultTarget.getBranch()); myTargetEditor.addDocumentListener(new DocumentListener() { @Override public void documentChanged(@NotNull DocumentEvent event) { - myUpstreamCheckbox.setVisible(myTargetEditor.getText()); + myUpstreamCheckbox.setVisible(myTargetEditor.getText(), myRemoteRenderer.getText()); } }); add(myUpstreamCheckbox, BorderLayout.EAST); @@ -172,7 +172,7 @@ public class GitPushTargetPanel extends PushTargetPanel { myRemoteRenderer.updateLinkText(noRemotes ? GitBundle.message("push.dialog.target.panel.define.remote") : initialRemote); if (myUpstreamCheckbox != null) { - myUpstreamCheckbox.setVisible(initialBranch); + myUpstreamCheckbox.setVisible(initialBranch, initialRemote); } myTargetEditor.setVisible(!noRemotes); @@ -309,10 +309,11 @@ public class GitPushTargetPanel extends PushTargetPanel { myTargetRenderer.setSelected(isSelected); myTargetRenderer.setTransparent(!isActive); myTargetRenderer.render(renderer); + GitRemoteBranch targetBranch = (target != null) ? target.getBranch() : null; boolean newUpstream = myUpstreamCheckbox != null && - target != null && + targetBranch != null && myUpstreamCheckbox.isSelected() && - !myUpstreamCheckbox.isDefaultUpstream(target.getBranch().getNameForRemoteOperations()); + !myUpstreamCheckbox.isDefaultUpstream(targetBranch.getNameForRemoteOperations(), targetBranch.getRemote().getName()); if (newRemoteBranch || newUpstream) { renderer.setIconOnTheRight(true); } @@ -342,7 +343,7 @@ public class GitPushTargetPanel extends PushTargetPanel { // Checkbox should be explicitly enabled and disabled when toggling editing, as click // to start editing can change checkbox state // See BasicTreeUi#startEditing for details - myUpstreamCheckbox.setVisible(myTargetEditor.getText()); + myUpstreamCheckbox.setVisible(myTargetEditor.getText(), myRemoteRenderer.getText()); myUpstreamCheckbox.setEnabled(true); } } @@ -530,24 +531,25 @@ public class GitPushTargetPanel extends PushTargetPanel { } private static class SetUpstreamCheckbox extends JBCheckBox { - private final String upstreamBranchName; + private final GitRemoteBranch defaultTarget; - SetUpstreamCheckbox(String upstreamBranchName) { + SetUpstreamCheckbox(GitRemoteBranch defaultTarget) { super(GitBundle.message("push.dialog.target.panel.upstream.checkbox"), false); - this.upstreamBranchName = upstreamBranchName; + this.defaultTarget = defaultTarget; setBorder(JBUI.Borders.empty(0, 5, 0, 10)); setOpaque(false); setFocusable(false); } - public void setVisible(String targetName) { + public void setVisible(String targetName, String remoteName) { boolean valid = GitRefNameValidator.getInstance().checkInput(targetName); - setVisible(valid && !isDefaultUpstream(targetName)); + setVisible(valid && !isDefaultUpstream(targetName, remoteName)); } - public boolean isDefaultUpstream(String targetName) { - return upstreamBranchName.equals(targetName); + public boolean isDefaultUpstream(String targetName, String remoteName) { + return defaultTarget.getNameForRemoteOperations().equals(targetName) && + defaultTarget.getRemote().getName().equals(remoteName); } }