added ExtendedGit.normalize method
This commit is contained in:
parent
549e95cd25
commit
388cdb2d15
@ -1,5 +1,6 @@
|
|||||||
package me.brianlong.git;
|
package me.brianlong.git;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
import java.net.URISyntaxException;
|
import java.net.URISyntaxException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
@ -13,9 +14,15 @@ import java.util.regex.Pattern;
|
|||||||
import org.eclipse.jgit.api.CloneCommand;
|
import org.eclipse.jgit.api.CloneCommand;
|
||||||
import org.eclipse.jgit.api.Git;
|
import org.eclipse.jgit.api.Git;
|
||||||
import org.eclipse.jgit.api.ListBranchCommand;
|
import org.eclipse.jgit.api.ListBranchCommand;
|
||||||
|
import org.eclipse.jgit.api.CreateBranchCommand.SetupUpstreamMode;
|
||||||
import org.eclipse.jgit.api.ListBranchCommand.ListMode;
|
import org.eclipse.jgit.api.ListBranchCommand.ListMode;
|
||||||
|
import org.eclipse.jgit.api.ResetCommand.ResetType;
|
||||||
|
import org.eclipse.jgit.api.errors.CheckoutConflictException;
|
||||||
import org.eclipse.jgit.api.errors.GitAPIException;
|
import org.eclipse.jgit.api.errors.GitAPIException;
|
||||||
|
import org.eclipse.jgit.api.errors.InvalidRefNameException;
|
||||||
import org.eclipse.jgit.api.errors.InvalidRemoteException;
|
import org.eclipse.jgit.api.errors.InvalidRemoteException;
|
||||||
|
import org.eclipse.jgit.api.errors.RefAlreadyExistsException;
|
||||||
|
import org.eclipse.jgit.api.errors.RefNotFoundException;
|
||||||
import org.eclipse.jgit.api.errors.TransportException;
|
import org.eclipse.jgit.api.errors.TransportException;
|
||||||
import org.eclipse.jgit.lib.Constants;
|
import org.eclipse.jgit.lib.Constants;
|
||||||
import org.eclipse.jgit.lib.Ref;
|
import org.eclipse.jgit.lib.Ref;
|
||||||
@ -55,6 +62,38 @@ public class ExtendedGit extends CachedGit {
|
|||||||
return matcher.group(9);
|
return matcher.group(9);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a local branch, if one does not already exist.
|
||||||
|
* Checks out the repository, targeting the remote branch.
|
||||||
|
* Resets the local branch up to the remote branch.
|
||||||
|
*/
|
||||||
|
public Ref normalize(String localBranchName, String exactRemoteBranchName)
|
||||||
|
throws RefAlreadyExistsException, RefNotFoundException, InvalidRefNameException, CheckoutConflictException, GitAPIException, IOException {
|
||||||
|
Ref localRef = this.getRepository().exactRef(Constants.R_HEADS + localBranchName);
|
||||||
|
if (localRef == null) {
|
||||||
|
localRef = this.branchCreate()
|
||||||
|
.setUpstreamMode(SetupUpstreamMode.NOTRACK)
|
||||||
|
.setName(localBranchName)
|
||||||
|
.setStartPoint(exactRemoteBranchName)
|
||||||
|
.call();
|
||||||
|
}
|
||||||
|
|
||||||
|
Ref checkoutRef = this.checkout()
|
||||||
|
.setName(localBranchName)
|
||||||
|
.setStartPoint(exactRemoteBranchName)
|
||||||
|
.call();
|
||||||
|
|
||||||
|
if (!localRef.getObjectId().getName().equals(checkoutRef.getObjectId().getName())) {
|
||||||
|
this.logger.warn("A checkout did not move the local branch to the proper commit; performing reset: " + localRef.getName());
|
||||||
|
this.reset()
|
||||||
|
.setMode(ResetType.HARD)
|
||||||
|
.setRef(exactRemoteBranchName)
|
||||||
|
.call();
|
||||||
|
}
|
||||||
|
|
||||||
|
return checkoutRef;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method retrieves all branches, but excludes remote branches that are tracked with a local branch.
|
* This method retrieves all branches, but excludes remote branches that are tracked with a local branch.
|
||||||
* @return
|
* @return
|
||||||
|
Loading…
x
Reference in New Issue
Block a user