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>
This commit is contained in:
parent
c8ddac2a86
commit
acd7ed5269
|
@ -1,6 +1,7 @@
|
|||
copyFileFailed=Error occurred during execution of copyfile rule.
|
||||
errorNoDefault=Error: no default remote in file {0}.
|
||||
errorParsingManifestFile=Error occurred during parsing manifest file {0}.
|
||||
errorNoDefault=Error: no default remote in manifest file.
|
||||
errorNoDefaultFilename=Error: no default remote in manifest file {0}.
|
||||
errorParsingManifestFile=Error occurred during parsing manifest file.
|
||||
errorRemoteUnavailable=Error remote {0} is unavailable.
|
||||
invalidManifest=Invalid manifest.
|
||||
repoCommitMessage=Added repo manifest.
|
||||
|
|
|
@ -46,6 +46,7 @@
|
|||
import java.io.FileInputStream;
|
||||
import java.io.FileOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.URI;
|
||||
import java.net.URISyntaxException;
|
||||
import java.nio.channels.FileChannel;
|
||||
|
@ -114,6 +115,7 @@ public class RepoCommand extends GitCommand<RevCommit> {
|
|||
private String branch;
|
||||
private PersonIdent author;
|
||||
private RemoteReader callback;
|
||||
private InputStream inputStream;
|
||||
|
||||
private List<Project> bareProjects;
|
||||
private Git git;
|
||||
|
@ -249,6 +251,7 @@ void addCopyFile(CopyFile copyfile) {
|
|||
|
||||
private static class XmlManifest extends DefaultHandler {
|
||||
private final RepoCommand command;
|
||||
private final InputStream inputStream;
|
||||
private final String filename;
|
||||
private final String baseUrl;
|
||||
private final Map<String, String> remotes;
|
||||
|
@ -259,8 +262,10 @@ private static class XmlManifest extends DefaultHandler {
|
|||
private String defaultRevision;
|
||||
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.inputStream = inputStream;
|
||||
this.filename = filename;
|
||||
this.baseUrl = baseUrl;
|
||||
remotes = new HashMap<String, String>();
|
||||
|
@ -288,16 +293,13 @@ void read() throws IOException {
|
|||
throw new IOException(JGitText.get().noXMLParserAvailable);
|
||||
}
|
||||
xr.setContentHandler(this);
|
||||
final FileInputStream in = new FileInputStream(filename);
|
||||
try {
|
||||
xr.parse(new InputSource(in));
|
||||
xr.parse(new InputSource(inputStream));
|
||||
} catch (SAXException e) {
|
||||
IOException error = new IOException(MessageFormat.format(
|
||||
RepoText.get().errorParsingManifestFile, filename));
|
||||
IOException error = new IOException(
|
||||
RepoText.get().errorParsingManifestFile);
|
||||
error.initCause(e);
|
||||
throw error;
|
||||
} finally {
|
||||
in.close();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -346,8 +348,11 @@ public void endElement(
|
|||
@Override
|
||||
public void endDocument() throws SAXException {
|
||||
if (defaultRemote == null) {
|
||||
throw new SAXException(MessageFormat.format(
|
||||
RepoText.get().errorNoDefault, filename));
|
||||
if (filename != null)
|
||||
throw new SAXException(MessageFormat.format(
|
||||
RepoText.get().errorNoDefaultFilename, filename));
|
||||
else
|
||||
throw new SAXException(RepoText.get().errorNoDefault);
|
||||
}
|
||||
final String remoteUrl;
|
||||
try {
|
||||
|
@ -406,7 +411,9 @@ public RepoCommand(final Repository repo) {
|
|||
}
|
||||
|
||||
/**
|
||||
* 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
|
||||
* (with <code>/</code> as separator)
|
||||
|
@ -417,6 +424,20 @@ public RepoCommand setPath(final String path) {
|
|||
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
|
||||
*
|
||||
|
@ -496,26 +517,46 @@ public RepoCommand setRemoteReader(final RemoteReader callback) {
|
|||
|
||||
@Override
|
||||
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 {
|
||||
manifest.read();
|
||||
} catch (IOException e) {
|
||||
throw new ManifestErrorException(e);
|
||||
checkCallable();
|
||||
if (uri == null || uri.length() == 0)
|
||||
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()) {
|
||||
|
|
|
@ -61,6 +61,7 @@ public static RepoText get() {
|
|||
// @formatter:off
|
||||
/***/ public String copyFileFailed;
|
||||
/***/ public String errorNoDefault;
|
||||
/***/ public String errorNoDefaultFilename;
|
||||
/***/ public String errorParsingManifestFile;
|
||||
/***/ public String errorRemoteUnavailable;
|
||||
/***/ public String invalidManifest;
|
||||
|
|
Loading…
Reference in New Issue