summaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit
diff options
context:
space:
mode:
authorMickael Istria <mistria@redhat.com>2017-03-14 17:41:55 +0100
committerMatthias Sohn <matthias.sohn@sap.com>2017-05-08 00:38:25 +0200
commit5b84e25fa3afe66bbfa7eb953ea0bd332c745ecd (patch)
tree6a711a7c92ea72071587b70ccdb585b311abde72 /org.eclipse.jgit
parent8f7d0a4fbe8862e71d900b0585c97407037ef9a5 (diff)
downloadjgit-5b84e25fa3afe66bbfa7eb953ea0bd332c745ecd.tar.gz
jgit-5b84e25fa3afe66bbfa7eb953ea0bd332c745ecd.zip
Support pull on detached HEAD
Bug: 485396 Change-Id: I82be09385c9b0bcc0054fea5a9cb9d178a41e278 Signed-off-by: Mickael Istria <mistria@redhat.com> 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.java47
1 files changed, 24 insertions, 23 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 ae822da568..9c5ae432e2 100644
--- a/org.eclipse.jgit/src/org/eclipse/jgit/api/PullCommand.java
+++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/PullCommand.java
@@ -203,62 +203,63 @@ public class PullCommand extends TransportCommand<PullCommand, PullResult> {
@Override
public PullResult call() throws GitAPIException,
WrongRepositoryStateException, InvalidConfigurationException,
- DetachedHeadException, InvalidRemoteException, CanceledException,
+ InvalidRemoteException, CanceledException,
RefNotFoundException, RefNotAdvertisedException, NoHeadException,
org.eclipse.jgit.api.errors.TransportException {
checkCallable();
monitor.beginTask(JGitText.get().pullTaskName, 2);
+ Config repoConfig = repo.getConfig();
- String branchName;
+ String branchName = null;
try {
String fullBranch = repo.getFullBranch();
- if (fullBranch == null)
- throw new NoHeadException(
- JGitText.get().pullOnRepoWithoutHEADCurrentlyNotSupported);
- if (!fullBranch.startsWith(Constants.R_HEADS)) {
- // we can not pull if HEAD is detached and branch is not
- // specified explicitly
- throw new DetachedHeadException();
+ if (fullBranch != null
+ && fullBranch.startsWith(Constants.R_HEADS)) {
+ branchName = fullBranch.substring(Constants.R_HEADS.length());
}
- branchName = fullBranch.substring(Constants.R_HEADS.length());
} catch (IOException e) {
throw new JGitInternalException(
JGitText.get().exceptionCaughtDuringExecutionOfPullCommand,
e);
}
+ if (remoteBranchName == null && branchName != 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);
+ }
+ if (remoteBranchName == null) {
+ remoteBranchName = branchName;
+ }
+ if (remoteBranchName == null) {
+ throw new NoHeadException(
+ JGitText.get().cannotCheckoutFromUnbornBranch);
+ }
if (!repo.getRepositoryState().equals(RepositoryState.SAFE))
throw new WrongRepositoryStateException(MessageFormat.format(
JGitText.get().cannotPullOnARepoWithState, repo
.getRepositoryState().name()));
- Config repoConfig = repo.getConfig();
- if (remote == null) {
+ if (remote == null && branchName != 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)
+ if (remote == null) {
// fall back to default remote
remote = Constants.DEFAULT_REMOTE_NAME;
-
- 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
- if (pullRebaseMode == null) {
+ if (pullRebaseMode == null && branchName != null) {
pullRebaseMode = getRebaseMode(branchName, repoConfig);
}
- if (remoteBranchName == null)
- remoteBranchName = branchName;
final boolean isRemote = !remote.equals("."); //$NON-NLS-1$
String remoteUri;