}
}
+ @Test
+ public void testRemoteRevision() throws Exception {
+ StringBuilder xmlContent = new StringBuilder();
+ xmlContent.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n")
+ .append("<manifest>")
+ .append("<remote name=\"remote1\" fetch=\".\" />")
+ .append("<remote name=\"remote2\" fetch=\".\" revision=\"")
+ .append(BRANCH)
+ .append("\" />")
+ .append("<default remote=\"remote1\" revision=\"master\" />")
+ .append("<project path=\"foo\" remote=\"remote2\" name=\"")
+ .append(defaultUri)
+ .append("\" />")
+ .append("</manifest>");
+ writeTrashFile("manifest.xml", xmlContent.toString());
+ RepoCommand command = new RepoCommand(db);
+ command.setPath(db.getWorkTree().getAbsolutePath() + "/manifest.xml")
+ .setURI(rootUri)
+ .call();
+ File hello = new File(db.getWorkTree(), "foo/hello.txt");
+ BufferedReader reader = new BufferedReader(new FileReader(hello));
+ String content = reader.readLine();
+ reader.close();
+ assertEquals("submodule content should be as expected",
+ "branch world", content);
+ }
+
+ @Test
+ public void testDefaultRemoteRevision() throws Exception {
+ StringBuilder xmlContent = new StringBuilder();
+ xmlContent.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n")
+ .append("<manifest>")
+ .append("<remote name=\"remote1\" fetch=\".\" revision=\"")
+ .append(BRANCH)
+ .append("\" />")
+ .append("<default remote=\"remote1\" />")
+ .append("<project path=\"foo\" name=\"")
+ .append(defaultUri)
+ .append("\" />")
+ .append("</manifest>");
+ writeTrashFile("manifest.xml", xmlContent.toString());
+ RepoCommand command = new RepoCommand(db);
+ command.setPath(db.getWorkTree().getAbsolutePath() + "/manifest.xml")
+ .setURI(rootUri)
+ .call();
+ File hello = new File(db.getWorkTree(), "foo/hello.txt");
+ BufferedReader reader = new BufferedReader(new FileReader(hello));
+ String content = reader.readLine();
+ reader.close();
+ assertEquals("submodule content should be as expected",
+ "branch world", content);
+ }
+
private void resolveRelativeUris() {
// Find the longest common prefix ends with "/" as rootUri.
defaultUri = defaultDb.getDirectory().toURI().toString();
private final String baseUrl;
private final String defaultBranch;
private final Repository rootRepo;
- private final Map<String, String> remotes;
+ private final Map<String, Remote> remotes;
private final Set<String> plusGroups;
private final Set<String> minusGroups;
private final List<RepoProject> projects;
}
}
- remotes = new HashMap<String, String>();
+ remotes = new HashMap<String, Remote>();
projects = new ArrayList<RepoProject>();
filteredProjects = new ArrayList<RepoProject>();
}
} else if ("remote".equals(qName)) { //$NON-NLS-1$
String alias = attributes.getValue("alias"); //$NON-NLS-1$
String fetch = attributes.getValue("fetch"); //$NON-NLS-1$
- remotes.put(attributes.getValue("name"), fetch); //$NON-NLS-1$
+ String revision = attributes.getValue("revision"); //$NON-NLS-1$
+ Remote remote = new Remote(fetch, revision);
+ remotes.put(attributes.getValue("name"), remote); //$NON-NLS-1$
if (alias != null)
- remotes.put(alias, fetch);
+ remotes.put(alias, remote);
} else if ("default".equals(qName)) { //$NON-NLS-1$
defaultRemote = attributes.getValue("remote"); //$NON-NLS-1$
defaultRevision = attributes.getValue("revision"); //$NON-NLS-1$
- if (defaultRevision == null)
- defaultRevision = defaultBranch;
} else if ("copyfile".equals(qName)) { //$NON-NLS-1$
if (currentProject == null)
throw new SAXException(RepoText.get().invalidManifest);
} catch (URISyntaxException e) {
throw new SAXException(e);
}
+ if (defaultRevision == null && defaultRemote != null) {
+ Remote remote = remotes.get(defaultRemote);
+ if (remote != null) {
+ defaultRevision = remote.revision;
+ }
+ if (defaultRevision == null) {
+ defaultRevision = defaultBranch;
+ }
+ }
for (RepoProject proj : projects) {
String remote = proj.getRemote();
+ String revision = defaultRevision;
if (remote == null) {
if (defaultRemote == null) {
if (filename != null)
RepoText.get().errorNoDefault);
}
remote = defaultRemote;
+ } else {
+ Remote r = remotes.get(remote);
+ if (r != null && r.revision != null) {
+ revision = r.revision;
+ }
}
String remoteUrl = remoteUrls.get(remote);
if (remoteUrl == null) {
- remoteUrl = baseUri.resolve(remotes.get(remote)).toString();
+ remoteUrl =
+ baseUri.resolve(remotes.get(remote).fetch).toString();
if (!remoteUrl.endsWith("/")) //$NON-NLS-1$
remoteUrl = remoteUrl + "/"; //$NON-NLS-1$
remoteUrls.put(remote, remoteUrl);
}
proj.setUrl(remoteUrl + proj.getName())
- .setDefaultRevision(defaultRevision);
+ .setDefaultRevision(revision);
}
filteredProjects.addAll(projects);
}
return false;
}
+
+ private static class Remote {
+ final String fetch;
+ final String revision;
+
+ Remote(String fetch, String revision) {
+ this.fetch = fetch;
+ this.revision = revision;
+ }
+ }
}