Browse Source

Added setInputStream to RepoCommand.

Sometimes an input stream is more useful than the filename of the xml manifest.

Change-Id: Icb09ac751b3d8d7eb14427ad1aac8cee0c371c5f
Signed-off-by: Yuxuan 'fishy' Wang <fishywang@google.com>
stable-3.5
Yuxuan 'fishy' Wang 11 years ago committed by Dave Borowitz
parent
commit
acd7ed5269
  1. 5
      org.eclipse.jgit/resources/org/eclipse/jgit/gitrepo/internal/RepoText.properties
  2. 99
      org.eclipse.jgit/src/org/eclipse/jgit/gitrepo/RepoCommand.java
  3. 1
      org.eclipse.jgit/src/org/eclipse/jgit/gitrepo/internal/RepoText.java

5
org.eclipse.jgit/resources/org/eclipse/jgit/gitrepo/internal/RepoText.properties

@ -1,6 +1,7 @@
copyFileFailed=Error occurred during execution of copyfile rule. copyFileFailed=Error occurred during execution of copyfile rule.
errorNoDefault=Error: no default remote in file {0}. errorNoDefault=Error: no default remote in manifest file.
errorParsingManifestFile=Error occurred during parsing manifest file {0}. errorNoDefaultFilename=Error: no default remote in manifest file {0}.
errorParsingManifestFile=Error occurred during parsing manifest file.
errorRemoteUnavailable=Error remote {0} is unavailable. errorRemoteUnavailable=Error remote {0} is unavailable.
invalidManifest=Invalid manifest. invalidManifest=Invalid manifest.
repoCommitMessage=Added repo manifest. repoCommitMessage=Added repo manifest.

99
org.eclipse.jgit/src/org/eclipse/jgit/gitrepo/RepoCommand.java

@ -46,6 +46,7 @@ import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.net.URI; import java.net.URI;
import java.net.URISyntaxException; import java.net.URISyntaxException;
import java.nio.channels.FileChannel; import java.nio.channels.FileChannel;
@ -114,6 +115,7 @@ public class RepoCommand extends GitCommand<RevCommit> {
private String branch; private String branch;
private PersonIdent author; private PersonIdent author;
private RemoteReader callback; private RemoteReader callback;
private InputStream inputStream;
private List<Project> bareProjects; private List<Project> bareProjects;
private Git git; private Git git;
@ -249,6 +251,7 @@ public class RepoCommand extends GitCommand<RevCommit> {
private static class XmlManifest extends DefaultHandler { private static class XmlManifest extends DefaultHandler {
private final RepoCommand command; private final RepoCommand command;
private final InputStream inputStream;
private final String filename; private final String filename;
private final String baseUrl; private final String baseUrl;
private final Map<String, String> remotes; private final Map<String, String> remotes;
@ -259,8 +262,10 @@ public class RepoCommand extends GitCommand<RevCommit> {
private String defaultRevision; private String defaultRevision;
private Project currentProject; private Project currentProject;
XmlManifest(RepoCommand command, String filename, String baseUrl, String groups) { XmlManifest(RepoCommand command, InputStream inputStream,
String filename, String baseUrl, String groups) {
this.command = command; this.command = command;
this.inputStream = inputStream;
this.filename = filename; this.filename = filename;
this.baseUrl = baseUrl; this.baseUrl = baseUrl;
remotes = new HashMap<String, String>(); remotes = new HashMap<String, String>();
@ -288,16 +293,13 @@ public class RepoCommand extends GitCommand<RevCommit> {
throw new IOException(JGitText.get().noXMLParserAvailable); throw new IOException(JGitText.get().noXMLParserAvailable);
} }
xr.setContentHandler(this); xr.setContentHandler(this);
final FileInputStream in = new FileInputStream(filename);
try { try {
xr.parse(new InputSource(in)); xr.parse(new InputSource(inputStream));
} catch (SAXException e) { } catch (SAXException e) {
IOException error = new IOException(MessageFormat.format( IOException error = new IOException(
RepoText.get().errorParsingManifestFile, filename)); RepoText.get().errorParsingManifestFile);
error.initCause(e); error.initCause(e);
throw error; throw error;
} finally {
in.close();
} }
} }
@ -346,8 +348,11 @@ public class RepoCommand extends GitCommand<RevCommit> {
@Override @Override
public void endDocument() throws SAXException { public void endDocument() throws SAXException {
if (defaultRemote == null) { if (defaultRemote == null) {
throw new SAXException(MessageFormat.format( if (filename != null)
RepoText.get().errorNoDefault, filename)); throw new SAXException(MessageFormat.format(
RepoText.get().errorNoDefaultFilename, filename));
else
throw new SAXException(RepoText.get().errorNoDefault);
} }
final String remoteUrl; final String remoteUrl;
try { try {
@ -406,7 +411,9 @@ public class RepoCommand extends GitCommand<RevCommit> {
} }
/** /**
* Set path to the manifest XML file * Set path to the manifest XML file.
*
* Calling {@link #setInputStream} will ignore the path set here.
* *
* @param path * @param path
* (with <code>/</code> as separator) * (with <code>/</code> as separator)
@ -417,6 +424,20 @@ public class RepoCommand extends GitCommand<RevCommit> {
return this; return this;
} }
/**
* Set the input stream to the manifest XML.
*
* Setting inputStream will ignore the path set.
* It will be closed in {@link #call}.
*
* @param inputStream
* @return this command
*/
public RepoCommand setInputStream(final InputStream inputStream) {
this.inputStream = inputStream;
return this;
}
/** /**
* Set base URI of the pathes inside the XML * Set base URI of the pathes inside the XML
* *
@ -496,26 +517,46 @@ public class RepoCommand extends GitCommand<RevCommit> {
@Override @Override
public RevCommit call() throws GitAPIException { public RevCommit call() throws GitAPIException {
checkCallable();
if (path == null || path.length() == 0)
throw new IllegalArgumentException(JGitText.get().pathNotConfigured);
if (uri == null || uri.length() == 0)
throw new IllegalArgumentException(JGitText.get().uriNotConfigured);
if (repo.isBare()) {
bareProjects = new ArrayList<Project>();
if (author == null)
author = new PersonIdent(repo);
if (callback == null)
callback = new DefaultRemoteReader();
} else
git = new Git(repo);
XmlManifest manifest = new XmlManifest(this, path, uri, groups);
try { try {
manifest.read(); checkCallable();
} catch (IOException e) { if (uri == null || uri.length() == 0)
throw new ManifestErrorException(e); throw new IllegalArgumentException(
JGitText.get().uriNotConfigured);
if (inputStream == null) {
if (path == null || path.length() == 0)
throw new IllegalArgumentException(
JGitText.get().pathNotConfigured);
try {
inputStream = new FileInputStream(path);
} catch (IOException e) {
throw new IllegalArgumentException(
JGitText.get().pathNotConfigured);
}
}
if (repo.isBare()) {
bareProjects = new ArrayList<Project>();
if (author == null)
author = new PersonIdent(repo);
if (callback == null)
callback = new DefaultRemoteReader();
} else
git = new Git(repo);
XmlManifest manifest = new XmlManifest(
this, inputStream, path, uri, groups);
try {
manifest.read();
} catch (IOException e) {
throw new ManifestErrorException(e);
}
} finally {
try {
if (inputStream != null)
inputStream.close();
} catch (IOException e) {
// Just ignore it, it's not important.
}
} }
if (repo.isBare()) { if (repo.isBare()) {

1
org.eclipse.jgit/src/org/eclipse/jgit/gitrepo/internal/RepoText.java

@ -61,6 +61,7 @@ public class RepoText extends TranslationBundle {
// @formatter:off // @formatter:off
/***/ public String copyFileFailed; /***/ public String copyFileFailed;
/***/ public String errorNoDefault; /***/ public String errorNoDefault;
/***/ public String errorNoDefaultFilename;
/***/ public String errorParsingManifestFile; /***/ public String errorParsingManifestFile;
/***/ public String errorRemoteUnavailable; /***/ public String errorRemoteUnavailable;
/***/ public String invalidManifest; /***/ public String invalidManifest;

Loading…
Cancel
Save