Moin moin werte Gemeinde,
ich habe folgendes Problem: Über die Command-Line will ich mich auf eine externe Repository in SVN anmelden, dabei gehe ich so vor, dass ich "svn info [REPOSITORYPATH] --username [MEINNAME] --password [MEINPASSWORD]" eingebe. Da es keinen login-Befehl via Commandline gibt, baue ich das über einen Dummy-Aufruf der "info" auf. Über die Commandline funktioniert das super, ich werde nur danach gefragt, ob ich <R> Reject, <T> Temporary oder <P> Permantly die Daten speichern will.
In einem Java-Tool soll diese Methode auch genutzt werden, da bisher auch in dem Tool alles über Commandline läuft. Nur wie baue ich es hierbei nach?
Meine bisherige Implementierung ist nicht gerade verheißungsvoll, ich bekomme immer den Error, dass meine Daten für die Anmeldung nicht übereinstimmen.
Meine Repository-Class mit den involvierten Befehlen:
Meine TextConstants-Klasse:
Hierbei wird Username / Password nach einem Button-Klick in der GUI von den Textfeldern übergeben. Funktioniert auch tadellos, ein System.out.println() gibt bei Inhalt des executeCommand(...) der LoginCheck-Funktion auch genau das aus, was ich brauche.
Jetzt ist die Frage:
Wie kann ich das Enter des ersten Befehls simulieren, sodass ich die Abfrage auf das <R>,<T>,<P> erhalte und wie kann ich das ausführen des <P> miteinbinden?
Ich habe bisher mit "\n", "\r" und wie aus der TextConstants.Class ersichtlich ist, mit line.seperator des OS gewerkelt, aber nichts bringt das was gebraucht wird.
ich habe folgendes Problem: Über die Command-Line will ich mich auf eine externe Repository in SVN anmelden, dabei gehe ich so vor, dass ich "svn info [REPOSITORYPATH] --username [MEINNAME] --password [MEINPASSWORD]" eingebe. Da es keinen login-Befehl via Commandline gibt, baue ich das über einen Dummy-Aufruf der "info" auf. Über die Commandline funktioniert das super, ich werde nur danach gefragt, ob ich <R> Reject, <T> Temporary oder <P> Permantly die Daten speichern will.
In einem Java-Tool soll diese Methode auch genutzt werden, da bisher auch in dem Tool alles über Commandline läuft. Nur wie baue ich es hierbei nach?
Meine bisherige Implementierung ist nicht gerade verheißungsvoll, ich bekomme immer den Error, dass meine Daten für die Anmeldung nicht übereinstimmen.
Meine Repository-Class mit den involvierten Befehlen:
Java:
public boolean loginCheck() {
try {
this.executeCommand(TextConstants.svnDummy + Main.REPO
+ TextConstants.BLANK + TextConstants.svnSubComUser
+ TextConstants.BLANK + TextConstants.USERNAME + TextConstants.BLANK
+ TextConstants.svnSubComPass + TextConstants.BLANK
+ TextConstants.PASSWORD + TextConstants.OS_NEW_LINE + TextConstants.svnAcceptPerm);
return true;
} catch (SVNException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
}
}
protected String executeCommand(String command) throws SVNException {
try {
Process pr = Runtime.getRuntime().exec(command);
handleCommandLineErrorStream(pr);
return handleCommandLineInputStream(pr);
} catch (IOException e) {
throw new SVNException("IOException: Executing Command failed", e);
}
}
private String handleCommandLineInputStream(Process pr) throws IOException {
BufferedReader stdInput = new BufferedReader(new InputStreamReader(
pr.getInputStream()));
String iLine;
StringBuilder sb = new StringBuilder();
boolean first = true;
while ((iLine = stdInput.readLine()) != null) {
if (!first) {
sb.append(TextConstants.NEWLINE);
}
sb.append(iLine);
first = false;
}
return sb.toString();
}
private void handleCommandLineErrorStream(Process pr) throws IOException,
SVNException {
BufferedReader stdError = new BufferedReader(new InputStreamReader(
pr.getErrorStream()));
String eLine;
StringBuilder sb = new StringBuilder();
boolean errors = false;
while ((eLine = stdError.readLine()) != null) {
if (errors) {
sb.append(TextConstants.NEWLINE);
}
sb.append(eLine);
errors = true;
}
Meine TextConstants-Klasse:
Hierbei wird Username / Password nach einem Button-Klick in der GUI von den Textfeldern übergeben. Funktioniert auch tadellos, ein System.out.println() gibt bei Inhalt des executeCommand(...) der LoginCheck-Funktion auch genau das aus, was ich brauche.
Java:
public static final String svnSubComUser = "--username";
public static final String svnSubComPass = "--password";
public static final String svnDummy = "svn info ";
public static String PASSWORD = "";
public static String USERNAME = "";
public static final String OS_NEW_LINE = System
.getProperty("line.separator");
Jetzt ist die Frage:
Wie kann ich das Enter des ersten Befehls simulieren, sodass ich die Abfrage auf das <R>,<T>,<P> erhalte und wie kann ich das ausführen des <P> miteinbinden?
Ich habe bisher mit "\n", "\r" und wie aus der TextConstants.Class ersichtlich ist, mit line.seperator des OS gewerkelt, aber nichts bringt das was gebraucht wird.