RepoCommand: generate relative submodule URLs from absolute URLs.
If a manifest file specifies an absolute URL on the same host on which the superproject resides, rewrite the URLs to be relative. Signed-off-by: Han-Wen Nienhuys <hanwen@google.com> Change-Id: Id616611e5195998fb665c8e7806539a3a02e219a
This commit is contained in:
parent
3214171dec
commit
6a420613f7
|
@ -438,6 +438,63 @@ public void absoluteRemoteURL() throws Exception {
|
||||||
dest.close();
|
dest.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void absoluteRemoteURLAbsoluteTargetURL() throws Exception {
|
||||||
|
Repository child =
|
||||||
|
Git.cloneRepository().setURI(groupADb.getDirectory().toURI().toString())
|
||||||
|
.setDirectory(createUniqueTestGitDir(true))
|
||||||
|
.setBare(true).call().getRepository();
|
||||||
|
Repository dest = Git.cloneRepository()
|
||||||
|
.setURI(db.getDirectory().toURI().toString()).setDirectory(createUniqueTestGitDir(true))
|
||||||
|
.setBare(true).call().getRepository();
|
||||||
|
String abs = "https://chromium.googlesource.com";
|
||||||
|
String repoUrl = "https://chromium.googlesource.com/chromium/src";
|
||||||
|
boolean fetchSlash = false;
|
||||||
|
boolean baseSlash = false;
|
||||||
|
do {
|
||||||
|
do {
|
||||||
|
String fetchUrl = fetchSlash ? abs + "/" : abs;
|
||||||
|
String baseUrl = baseSlash ? abs + "/" : abs;
|
||||||
|
|
||||||
|
StringBuilder xmlContent = new StringBuilder();
|
||||||
|
xmlContent.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n")
|
||||||
|
.append("<manifest>")
|
||||||
|
.append("<remote name=\"origin\" fetch=\"" + fetchUrl + "\" />")
|
||||||
|
.append("<default revision=\"master\" remote=\"origin\" />")
|
||||||
|
.append("<project path=\"src\" name=\"chromium/src\" />")
|
||||||
|
.append("</manifest>");
|
||||||
|
RepoCommand cmd = new RepoCommand(dest);
|
||||||
|
|
||||||
|
IndexedRepos repos = new IndexedRepos();
|
||||||
|
repos.put(repoUrl, child);
|
||||||
|
|
||||||
|
RevCommit commit = cmd
|
||||||
|
.setInputStream(new ByteArrayInputStream(xmlContent.toString().getBytes(UTF_8)))
|
||||||
|
.setRemoteReader(repos)
|
||||||
|
.setURI(baseUrl)
|
||||||
|
.setTargetURI(abs + "/superproject")
|
||||||
|
.setRecordRemoteBranch(true)
|
||||||
|
.setRecordSubmoduleLabels(true)
|
||||||
|
.call();
|
||||||
|
|
||||||
|
String idStr = commit.getId().name() + ":" + ".gitmodules";
|
||||||
|
ObjectId modId = dest.resolve(idStr);
|
||||||
|
|
||||||
|
try (ObjectReader reader = dest.newObjectReader()) {
|
||||||
|
byte[] bytes = reader.open(modId).getCachedBytes(Integer.MAX_VALUE);
|
||||||
|
Config base = new Config();
|
||||||
|
BlobBasedConfig cfg = new BlobBasedConfig(base, bytes);
|
||||||
|
String subUrl = cfg.getString("submodule", "src", "url");
|
||||||
|
assertEquals("../chromium/src", subUrl);
|
||||||
|
}
|
||||||
|
fetchSlash = !fetchSlash;
|
||||||
|
} while (fetchSlash);
|
||||||
|
baseSlash = !baseSlash;
|
||||||
|
} while (baseSlash);
|
||||||
|
child.close();
|
||||||
|
dest.close();
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testAddRepoManifest() throws Exception {
|
public void testAddRepoManifest() throws Exception {
|
||||||
StringBuilder xmlContent = new StringBuilder();
|
StringBuilder xmlContent = new StringBuilder();
|
||||||
|
@ -1188,5 +1245,6 @@ public void relative() {
|
||||||
testRelative("abc", "/bcd", "/bcd");
|
testRelative("abc", "/bcd", "/bcd");
|
||||||
testRelative("http://a", "a/b", "a/b");
|
testRelative("http://a", "a/b", "a/b");
|
||||||
testRelative("http://base.com/a/", "http://child.com/a/b", "http://child.com/a/b");
|
testRelative("http://base.com/a/", "http://child.com/a/b", "http://child.com/a/b");
|
||||||
|
testRelative("http://base.com/a/", "http://base.com/a/b", "b");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,6 +54,7 @@
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.StringJoiner;
|
import java.util.StringJoiner;
|
||||||
|
|
||||||
|
@ -749,12 +750,7 @@ private void addSubmoduleBare(String url, String path, String revision,
|
||||||
*/
|
*/
|
||||||
private static final String SLASH = "/"; //$NON-NLS-1$
|
private static final String SLASH = "/"; //$NON-NLS-1$
|
||||||
static URI relativize(URI current, URI target) {
|
static URI relativize(URI current, URI target) {
|
||||||
|
if (!Objects.equals(current.getHost(), target.getHost())) {
|
||||||
// We only handle bare paths for now.
|
|
||||||
if (!target.toString().equals(target.getPath())) {
|
|
||||||
return target;
|
|
||||||
}
|
|
||||||
if (!current.toString().equals(current.getPath())) {
|
|
||||||
return target;
|
return target;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue