Add getters to RepoProject.

Change-Id: I74ded6c2c3f5985568cd77bd8799b45017fb1d09
Signed-off-by: Yuxuan 'fishy' Wang <fishywang@google.com>
This commit is contained in:
Yuxuan 'fishy' Wang 2015-05-25 11:41:24 -07:00
parent 1773002a34
commit 744c370c1b
4 changed files with 108 additions and 33 deletions

View File

@ -87,9 +87,9 @@ public void testManifestParser() throws Exception {
for (RepoProject proj : parser.getProjects()) { for (RepoProject proj : parser.getProjects()) {
String msg = String.format( String msg = String.format(
"project \"%s\" should be included in unfiltered projects", "project \"%s\" should be included in unfiltered projects",
proj.path); proj.getPath());
assertTrue(msg, results.contains(proj.path)); assertTrue(msg, results.contains(proj.getPath()));
results.remove(proj.path); results.remove(proj.getPath());
} }
assertTrue( assertTrue(
"Unfiltered projects shouldn't contain any unexpected results", "Unfiltered projects shouldn't contain any unexpected results",
@ -101,9 +101,9 @@ public void testManifestParser() throws Exception {
for (RepoProject proj : parser.getFilteredProjects()) { for (RepoProject proj : parser.getFilteredProjects()) {
String msg = String.format( String msg = String.format(
"project \"%s\" should be included in filtered projects", "project \"%s\" should be included in filtered projects",
proj.path); proj.getPath());
assertTrue(msg, results.contains(proj.path)); assertTrue(msg, results.contains(proj.getPath()));
results.remove(proj.path); results.remove(proj.getPath());
} }
assertTrue( assertTrue(
"Filtered projects shouldn't contain any unexpected results", "Filtered projects shouldn't contain any unexpected results",

View File

@ -205,7 +205,7 @@ public void startElement(
throw new SAXException(RepoText.get().invalidManifest); throw new SAXException(RepoText.get().invalidManifest);
currentProject.addCopyFile(new CopyFile( currentProject.addCopyFile(new CopyFile(
rootRepo, rootRepo,
currentProject.path, currentProject.getPath(),
attributes.getValue("src"), //$NON-NLS-1$ attributes.getValue("src"), //$NON-NLS-1$
attributes.getValue("dest"))); //$NON-NLS-1$ attributes.getValue("dest"))); //$NON-NLS-1$
} else if ("include".equals(qName)) { //$NON-NLS-1$ } else if ("include".equals(qName)) { //$NON-NLS-1$
@ -266,7 +266,7 @@ public void endDocument() throws SAXException {
throw new SAXException(e); throw new SAXException(e);
} }
for (RepoProject proj : projects) { for (RepoProject proj : projects) {
String remote = proj.remote; String remote = proj.getRemote();
if (remote == null) { if (remote == null) {
if (defaultRemote == null) { if (defaultRemote == null) {
if (filename != null) if (filename != null)
@ -286,7 +286,7 @@ public void endDocument() throws SAXException {
remoteUrl = remoteUrl + "/"; //$NON-NLS-1$ remoteUrl = remoteUrl + "/"; //$NON-NLS-1$
remoteUrls.put(remote, remoteUrl); remoteUrls.put(remote, remoteUrl);
} }
proj.setUrl(remoteUrl + proj.name) proj.setUrl(remoteUrl + proj.getName())
.setDefaultRevision(defaultRevision); .setDefaultRevision(defaultRevision);
} }
@ -339,7 +339,7 @@ void removeOverlaps() {
boolean inGroups(RepoProject proj) { boolean inGroups(RepoProject proj) {
for (String group : minusGroups) { for (String group : minusGroups) {
if (proj.groups.contains(group)) { if (proj.inGroup(group)) {
// minus groups have highest priority. // minus groups have highest priority.
return false; return false;
} }
@ -349,7 +349,7 @@ boolean inGroups(RepoProject proj) {
return true; return true;
} }
for (String group : plusGroups) { for (String group : plusGroups) {
if (proj.groups.contains(group)) if (proj.inGroup(group))
return true; return true;
} }
return false; return false;

View File

@ -379,10 +379,10 @@ public RevCommit call() throws GitAPIException {
try { try {
parser.read(inputStream); parser.read(inputStream);
for (RepoProject proj : parser.getFilteredProjects()) { for (RepoProject proj : parser.getFilteredProjects()) {
addSubmodule(proj.url, addSubmodule(proj.getUrl(),
proj.path, proj.getPath(),
proj.getRevision(), proj.getRevision(),
proj.copyfiles); proj.getCopyFiles());
} }
} catch (GitAPIException | IOException e) { } catch (GitAPIException | IOException e) {
throw new ManifestErrorException(e); throw new ManifestErrorException(e);
@ -403,17 +403,17 @@ public RevCommit call() throws GitAPIException {
try (RevWalk rw = new RevWalk(repo)) { try (RevWalk rw = new RevWalk(repo)) {
Config cfg = new Config(); Config cfg = new Config();
for (RepoProject proj : bareProjects) { for (RepoProject proj : bareProjects) {
String name = proj.path; String name = proj.getPath();
String nameUri = proj.name; String nameUri = proj.getName();
cfg.setString("submodule", name, "path", name); //$NON-NLS-1$ //$NON-NLS-2$ cfg.setString("submodule", name, "path", name); //$NON-NLS-1$ //$NON-NLS-2$
cfg.setString("submodule", name, "url", nameUri); //$NON-NLS-1$ //$NON-NLS-2$ cfg.setString("submodule", name, "url", nameUri); //$NON-NLS-1$ //$NON-NLS-2$
// create gitlink // create gitlink
DirCacheEntry dcEntry = new DirCacheEntry(name); DirCacheEntry dcEntry = new DirCacheEntry(name);
ObjectId objectId; ObjectId objectId;
if (ObjectId.isId(proj.revision)) if (ObjectId.isId(proj.getRevision()))
objectId = ObjectId.fromString(proj.revision); objectId = ObjectId.fromString(proj.getRevision());
else { else {
objectId = callback.sha1(nameUri, proj.revision); objectId = callback.sha1(nameUri, proj.getRevision());
} }
if (objectId == null) if (objectId == null)
throw new RemoteUnavailableException(nameUri); throw new RemoteUnavailableException(nameUri);
@ -421,9 +421,9 @@ public RevCommit call() throws GitAPIException {
dcEntry.setFileMode(FileMode.GITLINK); dcEntry.setFileMode(FileMode.GITLINK);
builder.add(dcEntry); builder.add(dcEntry);
for (CopyFile copyfile : proj.copyfiles) { for (CopyFile copyfile : proj.getCopyFiles()) {
byte[] src = callback.readFile( byte[] src = callback.readFile(
nameUri, proj.revision, copyfile.src); nameUri, proj.getRevision(), copyfile.src);
objectId = inserter.insert(Constants.OBJ_BLOB, src); objectId = inserter.insert(Constants.OBJ_BLOB, src);
dcEntry = new DirCacheEntry(copyfile.dest); dcEntry = new DirCacheEntry(copyfile.dest);
dcEntry.setObjectId(objectId); dcEntry.setObjectId(objectId);
@ -495,7 +495,7 @@ private void addSubmodule(String url, String name, String revision,
List<CopyFile> copyfiles) throws GitAPIException, IOException { List<CopyFile> copyfiles) throws GitAPIException, IOException {
if (repo.isBare()) { if (repo.isBare()) {
RepoProject proj = new RepoProject(url, name, revision, null, null); RepoProject proj = new RepoProject(url, name, revision, null, null);
proj.copyfiles.addAll(copyfiles); proj.addCopyFiles(copyfiles);
bareProjects.add(proj); bareProjects.add(proj);
} else { } else {
SubmoduleAddCommand add = git SubmoduleAddCommand add = git

View File

@ -49,6 +49,8 @@
import java.nio.channels.FileChannel; import java.nio.channels.FileChannel;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
@ -62,14 +64,14 @@
* @since 4.0 * @since 4.0
*/ */
public class RepoProject implements Comparable<RepoProject> { public class RepoProject implements Comparable<RepoProject> {
final String name; private final String name;
final String path; private final String path;
final String revision; private final String revision;
final String remote; private final String remote;
final Set<String> groups; private final Set<String> groups;
final List<CopyFile> copyfiles; private final List<CopyFile> copyfiles;
String url; private String url;
String defaultRevision; private String defaultRevision;
/** /**
* The representation of a copy file configuration. * The representation of a copy file configuration.
@ -82,10 +84,13 @@ public static class CopyFile {
/** /**
* @param repo * @param repo
* the super project.
* @param path * @param path
* the path of the project containing this copyfile config. * the path of the project containing this copyfile config.
* @param src * @param src
* the source path relative to the sub repo.
* @param dest * @param dest
* the destination path relative to the super project.
*/ */
public CopyFile(Repository repo, String path, String src, String dest) { public CopyFile(Repository repo, String path, String src, String dest) {
this.repo = repo; this.repo = repo;
@ -108,7 +113,8 @@ public void copy() throws IOException {
FileOutputStream output = new FileOutputStream(destFile); FileOutputStream output = new FileOutputStream(destFile);
try { try {
FileChannel channel = input.getChannel(); FileChannel channel = input.getChannel();
output.getChannel().transferFrom(channel, 0, channel.size()); output.getChannel().transferFrom(
channel, 0, channel.size());
} finally { } finally {
output.close(); output.close();
} }
@ -120,10 +126,15 @@ public void copy() throws IOException {
/** /**
* @param name * @param name
* the relative path to the {@code remote}
* @param path * @param path
* the relative path to the super project
* @param revision * @param revision
* a SHA-1 or branch name or tag name
* @param remote * @param remote
* name of the remote definition
* @param groups * @param groups
* comma separated group list
*/ */
public RepoProject(String name, String path, String revision, public RepoProject(String name, String path, String revision,
String remote, String groups) { String remote, String groups) {
@ -162,15 +173,70 @@ public RepoProject setDefaultRevision(String defaultRevision) {
return this; return this;
} }
/**
* Get the name (relative path to the {@code remote}) of this sub repo.
*
* @return {@code name}
*/
public String getName() {
return name;
}
/**
* Get the path (relative path to the super project) of this sub repo.
*
* @return {@code path}
*/
public String getPath() {
return path;
}
/** /**
* Get the revision of the sub repo. * Get the revision of the sub repo.
* *
* @return revision if set, or default revision. * @return {@code revision} if set, or {@code defaultRevision}.
*/ */
public String getRevision() { public String getRevision() {
return revision == null ? defaultRevision : revision; return revision == null ? defaultRevision : revision;
} }
/**
* Getter for the copyfile configurations.
*
* @return Immutable copy of {@code copyfiles}
*/
public List<CopyFile> getCopyFiles() {
return Collections.unmodifiableList(copyfiles);
}
/**
* Get the url of the sub repo.
*
* @return {@code url}
*/
public String getUrl() {
return url;
}
/**
* Get the name of the remote definition of the sub repo.
*
* @return {@remote}
*/
public String getRemote() {
return remote;
}
/**
* Test whether this sub repo belongs to a specified group.
*
* @param group
* @return true if {@code group} is present.
*/
public boolean inGroup(String group) {
return groups.contains(group);
}
/** /**
* Add a copy file configuration. * Add a copy file configuration.
* *
@ -180,7 +246,16 @@ public void addCopyFile(CopyFile copyfile) {
copyfiles.add(copyfile); copyfiles.add(copyfile);
} }
String getPathWithSlash() { /**
* Add a bunch of copyfile configurations.
*
* @param copyfiles
*/
public void addCopyFiles(Collection<CopyFile> copyfiles) {
this.copyfiles.addAll(copyfiles);
}
private String getPathWithSlash() {
if (path.endsWith("/")) //$NON-NLS-1$ if (path.endsWith("/")) //$NON-NLS-1$
return path; return path;
else else