diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/gitrepo/ManifestParserTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/gitrepo/ManifestParserTest.java index 1005b39ec..5ed4268eb 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/gitrepo/ManifestParserTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/gitrepo/ManifestParserTest.java @@ -87,9 +87,9 @@ public class ManifestParserTest { for (RepoProject proj : parser.getProjects()) { String msg = String.format( "project \"%s\" should be included in unfiltered projects", - proj.path); - assertTrue(msg, results.contains(proj.path)); - results.remove(proj.path); + proj.getPath()); + assertTrue(msg, results.contains(proj.getPath())); + results.remove(proj.getPath()); } assertTrue( "Unfiltered projects shouldn't contain any unexpected results", @@ -101,9 +101,9 @@ public class ManifestParserTest { for (RepoProject proj : parser.getFilteredProjects()) { String msg = String.format( "project \"%s\" should be included in filtered projects", - proj.path); - assertTrue(msg, results.contains(proj.path)); - results.remove(proj.path); + proj.getPath()); + assertTrue(msg, results.contains(proj.getPath())); + results.remove(proj.getPath()); } assertTrue( "Filtered projects shouldn't contain any unexpected results", diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/gitrepo/ManifestParser.java b/org.eclipse.jgit/src/org/eclipse/jgit/gitrepo/ManifestParser.java index ec9fdfa4e..fa27948a6 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/gitrepo/ManifestParser.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/gitrepo/ManifestParser.java @@ -205,7 +205,7 @@ public class ManifestParser extends DefaultHandler { throw new SAXException(RepoText.get().invalidManifest); currentProject.addCopyFile(new CopyFile( rootRepo, - currentProject.path, + currentProject.getPath(), attributes.getValue("src"), //$NON-NLS-1$ attributes.getValue("dest"))); //$NON-NLS-1$ } else if ("include".equals(qName)) { //$NON-NLS-1$ @@ -266,7 +266,7 @@ public class ManifestParser extends DefaultHandler { throw new SAXException(e); } for (RepoProject proj : projects) { - String remote = proj.remote; + String remote = proj.getRemote(); if (remote == null) { if (defaultRemote == null) { if (filename != null) @@ -286,7 +286,7 @@ public class ManifestParser extends DefaultHandler { remoteUrl = remoteUrl + "/"; //$NON-NLS-1$ remoteUrls.put(remote, remoteUrl); } - proj.setUrl(remoteUrl + proj.name) + proj.setUrl(remoteUrl + proj.getName()) .setDefaultRevision(defaultRevision); } @@ -339,7 +339,7 @@ public class ManifestParser extends DefaultHandler { boolean inGroups(RepoProject proj) { for (String group : minusGroups) { - if (proj.groups.contains(group)) { + if (proj.inGroup(group)) { // minus groups have highest priority. return false; } @@ -349,7 +349,7 @@ public class ManifestParser extends DefaultHandler { return true; } for (String group : plusGroups) { - if (proj.groups.contains(group)) + if (proj.inGroup(group)) return true; } return false; diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/gitrepo/RepoCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/gitrepo/RepoCommand.java index d258250fe..b39dd8a1f 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/gitrepo/RepoCommand.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/gitrepo/RepoCommand.java @@ -379,10 +379,10 @@ public class RepoCommand extends GitCommand { try { parser.read(inputStream); for (RepoProject proj : parser.getFilteredProjects()) { - addSubmodule(proj.url, - proj.path, + addSubmodule(proj.getUrl(), + proj.getPath(), proj.getRevision(), - proj.copyfiles); + proj.getCopyFiles()); } } catch (GitAPIException | IOException e) { throw new ManifestErrorException(e); @@ -403,17 +403,17 @@ public class RepoCommand extends GitCommand { try (RevWalk rw = new RevWalk(repo)) { Config cfg = new Config(); for (RepoProject proj : bareProjects) { - String name = proj.path; - String nameUri = proj.name; + String name = proj.getPath(); + String nameUri = proj.getName(); cfg.setString("submodule", name, "path", name); //$NON-NLS-1$ //$NON-NLS-2$ cfg.setString("submodule", name, "url", nameUri); //$NON-NLS-1$ //$NON-NLS-2$ // create gitlink DirCacheEntry dcEntry = new DirCacheEntry(name); ObjectId objectId; - if (ObjectId.isId(proj.revision)) - objectId = ObjectId.fromString(proj.revision); + if (ObjectId.isId(proj.getRevision())) + objectId = ObjectId.fromString(proj.getRevision()); else { - objectId = callback.sha1(nameUri, proj.revision); + objectId = callback.sha1(nameUri, proj.getRevision()); } if (objectId == null) throw new RemoteUnavailableException(nameUri); @@ -421,9 +421,9 @@ public class RepoCommand extends GitCommand { dcEntry.setFileMode(FileMode.GITLINK); builder.add(dcEntry); - for (CopyFile copyfile : proj.copyfiles) { + for (CopyFile copyfile : proj.getCopyFiles()) { byte[] src = callback.readFile( - nameUri, proj.revision, copyfile.src); + nameUri, proj.getRevision(), copyfile.src); objectId = inserter.insert(Constants.OBJ_BLOB, src); dcEntry = new DirCacheEntry(copyfile.dest); dcEntry.setObjectId(objectId); @@ -495,7 +495,7 @@ public class RepoCommand extends GitCommand { List copyfiles) throws GitAPIException, IOException { if (repo.isBare()) { RepoProject proj = new RepoProject(url, name, revision, null, null); - proj.copyfiles.addAll(copyfiles); + proj.addCopyFiles(copyfiles); bareProjects.add(proj); } else { SubmoduleAddCommand add = git diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/gitrepo/RepoProject.java b/org.eclipse.jgit/src/org/eclipse/jgit/gitrepo/RepoProject.java index dfd4f1bba..1fff1c353 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/gitrepo/RepoProject.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/gitrepo/RepoProject.java @@ -49,6 +49,8 @@ import java.io.IOException; import java.nio.channels.FileChannel; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -62,14 +64,14 @@ import org.eclipse.jgit.lib.Repository; * @since 4.0 */ public class RepoProject implements Comparable { - final String name; - final String path; - final String revision; - final String remote; - final Set groups; - final List copyfiles; - String url; - String defaultRevision; + private final String name; + private final String path; + private final String revision; + private final String remote; + private final Set groups; + private final List copyfiles; + private String url; + private String defaultRevision; /** * The representation of a copy file configuration. @@ -82,10 +84,13 @@ public class RepoProject implements Comparable { /** * @param repo + * the super project. * @param path * the path of the project containing this copyfile config. * @param src + * the source path relative to the sub repo. * @param dest + * the destination path relative to the super project. */ public CopyFile(Repository repo, String path, String src, String dest) { this.repo = repo; @@ -108,7 +113,8 @@ public class RepoProject implements Comparable { FileOutputStream output = new FileOutputStream(destFile); try { FileChannel channel = input.getChannel(); - output.getChannel().transferFrom(channel, 0, channel.size()); + output.getChannel().transferFrom( + channel, 0, channel.size()); } finally { output.close(); } @@ -120,10 +126,15 @@ public class RepoProject implements Comparable { /** * @param name + * the relative path to the {@code remote} * @param path + * the relative path to the super project * @param revision + * a SHA-1 or branch name or tag name * @param remote + * name of the remote definition * @param groups + * comma separated group list */ public RepoProject(String name, String path, String revision, String remote, String groups) { @@ -162,15 +173,70 @@ public class RepoProject implements Comparable { 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. * - * @return revision if set, or default revision. + * @return {@code revision} if set, or {@code defaultRevision}. */ public String getRevision() { return revision == null ? defaultRevision : revision; } + /** + * Getter for the copyfile configurations. + * + * @return Immutable copy of {@code copyfiles} + */ + public List 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. * @@ -180,7 +246,16 @@ public class RepoProject implements Comparable { copyfiles.add(copyfile); } - String getPathWithSlash() { + /** + * Add a bunch of copyfile configurations. + * + * @param copyfiles + */ + public void addCopyFiles(Collection copyfiles) { + this.copyfiles.addAll(copyfiles); + } + + private String getPathWithSlash() { if (path.endsWith("/")) //$NON-NLS-1$ return path; else