Merge changes I2515a6ed,Ib6b24035
* changes: Fix ArrayIndexOutOfBoundsException in CreateBranchCommand Add methods to Repository to handle remote names
This commit is contained in:
commit
8e4018390e
|
@ -58,9 +58,11 @@
|
|||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.Map;
|
||||
import java.util.TreeSet;
|
||||
|
||||
import org.eclipse.jgit.lib.Ref.Storage;
|
||||
import org.eclipse.jgit.lib.RefUpdate.Result;
|
||||
import org.eclipse.jgit.storage.file.FileBasedConfig;
|
||||
import org.eclipse.jgit.test.resources.SampleDataRepositoryTestCase;
|
||||
import org.junit.Test;
|
||||
|
||||
|
@ -82,6 +84,50 @@ private void writeSymref(String src, String dst) throws IOException {
|
|||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testRemoteNames() throws Exception {
|
||||
FileBasedConfig config = db.getConfig();
|
||||
config.setBoolean(ConfigConstants.CONFIG_REMOTE_SECTION,
|
||||
"origin", "dummy", true);
|
||||
config.setBoolean(ConfigConstants.CONFIG_REMOTE_SECTION,
|
||||
"ab/c", "dummy", true);
|
||||
config.save();
|
||||
assertEquals("[ab/c, origin]",
|
||||
new TreeSet<String>(db.getRemoteNames()).toString());
|
||||
|
||||
// one-level deep remote branch
|
||||
assertEquals("master",
|
||||
db.shortenRemoteBranchName("refs/remotes/origin/master"));
|
||||
assertEquals("origin", db.getRemoteName("refs/remotes/origin/master"));
|
||||
|
||||
// two-level deep remote branch
|
||||
assertEquals("masta/r",
|
||||
db.shortenRemoteBranchName("refs/remotes/origin/masta/r"));
|
||||
assertEquals("origin", db.getRemoteName("refs/remotes/origin/masta/r"));
|
||||
|
||||
// Remote with slash and one-level deep branch name
|
||||
assertEquals("xmaster",
|
||||
db.shortenRemoteBranchName("refs/remotes/ab/c/xmaster"));
|
||||
assertEquals("ab/c", db.getRemoteName("refs/remotes/ab/c/xmaster"));
|
||||
|
||||
// Remote with slash and two-level deep branch name
|
||||
assertEquals("xmasta/r",
|
||||
db.shortenRemoteBranchName("refs/remotes/ab/c/xmasta/r"));
|
||||
assertEquals("ab/c", db.getRemoteName("refs/remotes/ab/c/xmasta/r"));
|
||||
|
||||
// no such remote
|
||||
assertNull(db.getRemoteName("refs/remotes/nosuchremote/x"));
|
||||
assertNull(db.shortenRemoteBranchName("refs/remotes/nosuchremote/x"));
|
||||
|
||||
// no such remote too, no branch name either
|
||||
assertNull(db.getRemoteName("refs/remotes/abranch"));
|
||||
assertNull(db.shortenRemoteBranchName("refs/remotes/abranch"));
|
||||
|
||||
// // local branch
|
||||
assertNull(db.getRemoteName("refs/heads/abranch"));
|
||||
assertNull(db.shortenRemoteBranchName("refs/heads/abranch"));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testReadAllIncludingSymrefs() throws Exception {
|
||||
ObjectId masterId = db.resolve("refs/heads/master");
|
||||
|
|
|
@ -246,12 +246,11 @@ else if (upstreamMode == SetupUpstreamMode.NOTRACK)
|
|||
|
||||
if (doConfigure) {
|
||||
StoredConfig config = repo.getConfig();
|
||||
String[] tokens = baseBranch.split("/", 4); //$NON-NLS-1$
|
||||
boolean isRemote = tokens[1].equals("remotes"); //$NON-NLS-1$
|
||||
if (isRemote) {
|
||||
// refs/remotes/<remote name>/<branch>
|
||||
String remoteName = tokens[2];
|
||||
String branchName = tokens[3];
|
||||
|
||||
String remoteName = repo.getRemoteName(baseBranch);
|
||||
if (remoteName != null) {
|
||||
String branchName = repo
|
||||
.shortenRemoteBranchName(baseBranch);
|
||||
config
|
||||
.setString(ConfigConstants.CONFIG_BRANCH_SECTION,
|
||||
name, ConfigConstants.CONFIG_KEY_REMOTE,
|
||||
|
|
|
@ -1274,6 +1274,40 @@ public static String shortenRefName(String refName) {
|
|||
return refName;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param refName
|
||||
* @return the remote branch name part of <code>refName</code>, i.e. without
|
||||
* the <code>refs/remotes/<remote></code> prefix, if
|
||||
* <code>refName</code> represents a remote tracking branch;
|
||||
* otherwise null.
|
||||
* @since 3.4
|
||||
*/
|
||||
public String shortenRemoteBranchName(String refName) {
|
||||
for (String remote : getRemoteNames()) {
|
||||
String remotePrefix = Constants.R_REMOTES + remote + "/"; //$NON-NLS-1$
|
||||
if (refName.startsWith(remotePrefix))
|
||||
return refName.substring(remotePrefix.length());
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param refName
|
||||
* @return the remote name part of <code>refName</code>, i.e. without the
|
||||
* <code>refs/remotes/<remote></code> prefix, if
|
||||
* <code>refName</code> represents a remote tracking branch;
|
||||
* otherwise null.
|
||||
* @since 3.4
|
||||
*/
|
||||
public String getRemoteName(String refName) {
|
||||
for (String remote : getRemoteNames()) {
|
||||
String remotePrefix = Constants.R_REMOTES + remote + "/"; //$NON-NLS-1$
|
||||
if (refName.startsWith(remotePrefix))
|
||||
return remote;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param refName
|
||||
* @return a {@link ReflogReader} for the supplied refname, or null if the
|
||||
|
@ -1613,4 +1647,13 @@ public void writeRebaseTodoFile(String path, List<RebaseTodoLine> steps,
|
|||
throws IOException {
|
||||
new RebaseTodoFile(this).writeRebaseTodoFile(path, steps, append);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the names of all known remotes
|
||||
* @since 3.4
|
||||
*/
|
||||
public Set<String> getRemoteNames() {
|
||||
return getConfig()
|
||||
.getSubsections(ConfigConstants.CONFIG_REMOTE_SECTION);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue