aboutsummaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit
diff options
context:
space:
mode:
authorMatthias Sohn <matthias.sohn@sap.com>2014-01-07 10:15:14 +0100
committerMatthias Sohn <matthias.sohn@sap.com>2014-02-14 16:10:59 +0100
commit1eae309723be301a4f2fc12a3e07e7e7c9f30782 (patch)
treedfba2bf9b5a2bf05c2fd21de6e4c059a3728ff37 /org.eclipse.jgit
parent7bb7299e8a815ac7884f429e3bc710e0c27c121c (diff)
downloadjgit-1eae309723be301a4f2fc12a3e07e7e7c9f30782.tar.gz
jgit-1eae309723be301a4f2fc12a3e07e7e7c9f30782.zip
Allow programmatic remote configuration for PullCommand
Also imply remoteBranchName to match current branch name if it wasn't configured in branch configuration. Bug: 424812 Change-Id: Id852cedaefb2a537b6aa3c330b9861efad052f11 Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
Diffstat (limited to 'org.eclipse.jgit')
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/api/PullCommand.java84
1 files changed, 68 insertions, 16 deletions
diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/PullCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/PullCommand.java
index 4c935095c3..c157f14fce 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/api/PullCommand.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/PullCommand.java
@@ -82,6 +82,10 @@ public class PullCommand extends TransportCommand<PullCommand, PullResult> {
private PullRebaseMode pullRebaseMode = PullRebaseMode.USE_CONFIG;
+ private String remote;
+
+ private String remoteBranchName;
+
private enum PullRebaseMode {
USE_CONFIG,
REBASE,
@@ -177,21 +181,24 @@ public class PullCommand extends TransportCommand<PullCommand, PullResult> {
JGitText.get().cannotPullOnARepoWithState, repo
.getRepositoryState().name()));
- // get the configured remote for the currently checked out branch
- // stored in configuration key branch.<branch name>.remote
Config repoConfig = repo.getConfig();
- String remote = repoConfig.getString(
- ConfigConstants.CONFIG_BRANCH_SECTION, branchName,
- ConfigConstants.CONFIG_KEY_REMOTE);
+ if (remote == null) {
+ // get the configured remote for the currently checked out branch
+ // stored in configuration key branch.<branch name>.remote
+ remote = repoConfig.getString(
+ ConfigConstants.CONFIG_BRANCH_SECTION, branchName,
+ ConfigConstants.CONFIG_KEY_REMOTE);
+ }
if (remote == null)
// fall back to default remote
remote = Constants.DEFAULT_REMOTE_NAME;
- // get the name of the branch in the remote repository
- // stored in configuration key branch.<branch name>.merge
- String remoteBranchName = repoConfig.getString(
- ConfigConstants.CONFIG_BRANCH_SECTION, branchName,
- ConfigConstants.CONFIG_KEY_MERGE);
+ if (remoteBranchName == null)
+ // get the name of the branch in the remote repository
+ // stored in configuration key branch.<branch name>.merge
+ remoteBranchName = repoConfig.getString(
+ ConfigConstants.CONFIG_BRANCH_SECTION, branchName,
+ ConfigConstants.CONFIG_KEY_MERGE);
// determines whether rebase should be used after fetching
boolean doRebase = false;
@@ -211,12 +218,8 @@ public class PullCommand extends TransportCommand<PullCommand, PullResult> {
break;
}
- if (remoteBranchName == null) {
- String missingKey = ConfigConstants.CONFIG_BRANCH_SECTION + DOT
- + branchName + DOT + ConfigConstants.CONFIG_KEY_MERGE;
- throw new InvalidConfigurationException(MessageFormat.format(
- JGitText.get().missingConfigurationForKey, missingKey));
- }
+ if (remoteBranchName == null)
+ remoteBranchName = branchName;
final boolean isRemote = !remote.equals("."); //$NON-NLS-1$
String remoteUri;
@@ -309,4 +312,53 @@ public class PullCommand extends TransportCommand<PullCommand, PullResult> {
return result;
}
+ /**
+ * The remote (uri or name) to be used for the pull operation. If no remote
+ * is set, the branch's configuration will be used. If the branch
+ * configuration is missing the default value of
+ * <code>Constants.DEFAULT_REMOTE_NAME</code> will be used.
+ *
+ * @see Constants#DEFAULT_REMOTE_NAME
+ * @param remote
+ * @return {@code this}
+ * @since 3.3
+ */
+ public PullCommand setRemote(String remote) {
+ checkCallable();
+ this.remote = remote;
+ return this;
+ }
+
+ /**
+ * The remote branch name to be used for the pull operation. If no
+ * remoteBranchName is set, the branch's configuration will be used. If the
+ * branch configuration is missing the remote branch with the same name as
+ * the current branch is used.
+ *
+ * @param remoteBranchName
+ * @return {@code this}
+ * @since 3.3
+ */
+ public PullCommand setRemoteBranchName(String remoteBranchName) {
+ checkCallable();
+ this.remoteBranchName = remoteBranchName;
+ return this;
+ }
+
+ /**
+ * @return the remote used for the pull operation if it was set explicitly
+ * @since 3.3
+ */
+ public String getRemote() {
+ return remote;
+ }
+
+ /**
+ * @return the remote branch name used for the pull operation if it was set
+ * explicitly
+ * @since 3.3
+ */
+ public String getRemoteBranchName() {
+ return remoteBranchName;
+ }
}