From: Constantine Plotnikov <constantine.plotnikov@gmail.com>
To: git@vger.kernel.org
Subject: [JGIT PATCH/RFC] Removed possibility to change stderr for ssh sessions
Date: Tue, 21 Apr 2009 22:49:56 +0400 [thread overview]
Message-ID: <85647ef50904211149lc4a4902h554c973017d87adb@mail.gmail.com> (raw)
The current implementation allowed to change stderr for the
ssh sessions. However this functionality is broken. It is used
only by GitSshTransport and that class expects a very specific
behavior from this class. For example toString() method should
return the entire content of the stream. So only implementation
from SshConfigSessionFactory would have worked anyway. Returning
System.err (as was suggested by javadoc) comment would have broken
existing functionality. This patch makes this functionality
explicitly private.
If this functionality is to be reopened, this additional behavior
should be documented and there should be additional lifecycle
control, since the user streams will be interested to know when
stream will be no more used in order to release resoources.
Signed-off-by: Constantine Plotnikov <constantine.plotnikov@gmail.com>
---
.../jgit/transport/SshConfigSessionFactory.java | 34 -----------------
.../spearce/jgit/transport/SshSessionFactory.java | 8 +++--
.../spearce/jgit/transport/TransportGitSsh.java | 38 +++++++++++++++++++-
3 files changed, 42 insertions(+), 38 deletions(-)
diff --git a/org.spearce.jgit/src/org/spearce/jgit/transport/SshConfigSessionFactory.java
b/org.spearce.jgit/src/org/spearce/jgit/transport/SshConfigSessionFactory.java
index 4d29829..a87e149 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/transport/SshConfigSessionFactory.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/transport/SshConfigSessionFactory.java
@@ -43,7 +43,6 @@
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
-import java.io.OutputStream;
import java.util.HashMap;
import java.util.Map;
@@ -225,37 +224,4 @@ private static void loadIdentity(final JSch sch,
final File priv) {
}
}
}
-
- @Override
- public OutputStream getErrorStream() {
- return new OutputStream() {
- private StringBuilder all = new StringBuilder();
-
- private StringBuilder sb = new StringBuilder();
-
- public String toString() {
- String r = all.toString();
- while (r.endsWith("\n"))
- r = r.substring(0, r.length() - 1);
- return r;
- }
-
- @Override
- public void write(final int b) throws IOException {
- if (b == '\r') {
- System.err.print('\r');
- return;
- }
-
- sb.append((char) b);
-
- if (b == '\n') {
- final String line = sb.toString();
- System.err.print(line);
- all.append(line);
- sb = new StringBuilder();
- }
- }
- };
- }
}
diff --git a/org.spearce.jgit/src/org/spearce/jgit/transport/SshSessionFactory.java
b/org.spearce.jgit/src/org/spearce/jgit/transport/SshSessionFactory.java
index f03e80c..bd24d2f 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/transport/SshSessionFactory.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/transport/SshSessionFactory.java
@@ -125,10 +125,12 @@ public void releaseSession(final Session session) {
}
/**
- * Find or create an OutputStream for Ssh to use. For a command line client
- * this is probably System.err.
+ * The method does not have to be implemented and will be removed in
future versions.
*
* @return an OutputStream to receive the SSH error stream.
*/
- public abstract OutputStream getErrorStream();
+ @Deprecated
+ public OutputStream getErrorStream() {
+ throw new UnsupportedOperationException("This method should not be called.");
+ }
}
diff --git a/org.spearce.jgit/src/org/spearce/jgit/transport/TransportGitSsh.java
b/org.spearce.jgit/src/org/spearce/jgit/transport/TransportGitSsh.java
index a24878a..bfe0259 100644
--- a/org.spearce.jgit/src/org/spearce/jgit/transport/TransportGitSsh.java
+++ b/org.spearce.jgit/src/org/spearce/jgit/transport/TransportGitSsh.java
@@ -137,7 +137,7 @@ ChannelExec exec(final String exe) throws
TransportException {
cmd.append(' ');
sqAlways(cmd, path);
channel.setCommand(cmd.toString());
- errStream = SshSessionFactory.getInstance().getErrorStream();
+ errStream = createErrorStream();
channel.setErrStream(errStream, true);
channel.connect();
return channel;
@@ -146,6 +146,42 @@ ChannelExec exec(final String exe) throws
TransportException {
}
}
+ /**
+ * @return the error stream for the channel, the stream is used to
detect specific
+ * error reasons for exceptions.
+ */
+ private static OutputStream createErrorStream() {
+ return new OutputStream() {
+ private StringBuilder all = new StringBuilder();
+
+ private StringBuilder sb = new StringBuilder();
+
+ public String toString() {
+ String r = all.toString();
+ while (r.endsWith("\n"))
+ r = r.substring(0, r.length() - 1);
+ return r;
+ }
+
+ @Override
+ public void write(final int b) throws IOException {
+ if (b == '\r') {
+ System.err.print('\r');
+ return;
+ }
+
+ sb.append((char) b);
+
+ if (b == '\n') {
+ final String line = sb.toString();
+ System.err.print(line);
+ all.append(line);
+ sb = new StringBuilder();
+ }
+ }
+ };
+ }
+
NoRemoteRepositoryException cleanNotFound(NoRemoteRepositoryException nf) {
String why = errStream.toString();
if (why == null || why.length() == 0)
--
1.6.0.2.1172.ga5ed0
next reply other threads:[~2009-04-21 18:51 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-04-21 18:49 Constantine Plotnikov [this message]
2009-04-22 15:46 ` [JGIT PATCH/RFC] Removed possibility to change stderr for ssh sessions Shawn O. Pearce
2009-04-22 15:55 ` Constantine Plotnikov
2009-04-22 15:58 ` Shawn O. Pearce
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=85647ef50904211149lc4a4902h554c973017d87adb@mail.gmail.com \
--to=constantine.plotnikov@gmail.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).