diff options
author | Matthias Sohn <matthias.sohn@sap.com> | 2015-01-27 01:43:24 +0100 |
---|---|---|
committer | Christian Halstrick <christian.halstrick@sap.com> | 2015-02-10 09:14:48 +0100 |
commit | 6c1f7393882baf8464859136a70199ea96fcae0f (patch) | |
tree | 5338cb5159d49d6440cb3ba9dca565e884f2c2ae /org.eclipse.jgit.pgm | |
parent | 77030a5e94a90cfae223acc477c216603cf3f149 (diff) | |
download | jgit-6c1f7393882baf8464859136a70199ea96fcae0f.tar.gz jgit-6c1f7393882baf8464859136a70199ea96fcae0f.zip |
Move console classes to pgm bundle
Since we updated minimum Java version to Java 7 the console bundle
doesn't need to be a separate bundle anymore. Move the contained classes
to the pgm bundle which is using these classes.
Change-Id: If8e6f2d7405fdfe6f4b178673b4ccf99c67d4b64
Signed-off-by: Matthias Sohn <matthias.sohn@sap.com>
Diffstat (limited to 'org.eclipse.jgit.pgm')
7 files changed, 306 insertions, 68 deletions
diff --git a/org.eclipse.jgit.pgm/META-INF/MANIFEST.MF b/org.eclipse.jgit.pgm/META-INF/MANIFEST.MF index 1ba45d8148..94651acfb0 100644 --- a/org.eclipse.jgit.pgm/META-INF/MANIFEST.MF +++ b/org.eclipse.jgit.pgm/META-INF/MANIFEST.MF @@ -38,7 +38,8 @@ Import-Package: org.apache.commons.compress.archivers;version="[1.3,2.0)", org.kohsuke.args4j;version="[2.0.12,2.1.0)", org.kohsuke.args4j.spi;version="[2.0.12,2.1.0)" Bundle-ActivationPolicy: lazy -Export-Package: org.eclipse.jgit.pgm;version="4.0.0"; +Export-Package: org.eclipse.jgit.console;version="4.0.0", + org.eclipse.jgit.pgm;version="4.0.0"; uses:="org.eclipse.jgit.revwalk, org.eclipse.jgit.treewalk.filter, org.eclipse.jgit.pgm.opt, @@ -49,8 +50,7 @@ Export-Package: org.eclipse.jgit.pgm;version="4.0.0"; org.eclipse.jgit.treewalk, javax.swing, org.eclipse.jgit.transport", - org.eclipse.jgit.pgm.debug;version="4.0.0"; - uses:="org.eclipse.jgit.pgm", + org.eclipse.jgit.pgm.debug;version="4.0.0";uses:="org.eclipse.jgit.pgm", org.eclipse.jgit.pgm.internal;version="4.0.0";x-friends:="org.eclipse.jgit.pgm.test,org.eclipse.jgit.test", org.eclipse.jgit.pgm.opt;version="4.0.0"; uses:="org.eclipse.jgit.lib, diff --git a/org.eclipse.jgit.pgm/pom.xml b/org.eclipse.jgit.pgm/pom.xml index c6dc83f65c..5724cfdb2d 100644 --- a/org.eclipse.jgit.pgm/pom.xml +++ b/org.eclipse.jgit.pgm/pom.xml @@ -97,19 +97,6 @@ <profiles> <profile> - <id>java6</id> - <activation> - <jdk>1.6</jdk> - </activation> - <dependencies> - <dependency> - <groupId>org.eclipse.jgit</groupId> - <artifactId>org.eclipse.jgit.console</artifactId> - <version>${project.version}</version> - </dependency> - </dependencies> - </profile> - <profile> <id>java7</id> <activation> <jdk>[1.7,)</jdk> @@ -121,11 +108,6 @@ <version>${project.version}</version> <optional>true</optional> </dependency> - <dependency> - <groupId>org.eclipse.jgit</groupId> - <artifactId>org.eclipse.jgit.console</artifactId> - <version>${project.version}</version> - </dependency> </dependencies> </profile> </profiles> diff --git a/org.eclipse.jgit.pgm/resources/org/eclipse/jgit/pgm/internal/CLIText.properties b/org.eclipse.jgit.pgm/resources/org/eclipse/jgit/pgm/internal/CLIText.properties index 2806f91463..e40c326817 100644 --- a/org.eclipse.jgit.pgm/resources/org/eclipse/jgit/pgm/internal/CLIText.properties +++ b/org.eclipse.jgit.pgm/resources/org/eclipse/jgit/pgm/internal/CLIText.properties @@ -12,6 +12,8 @@ N=N alreadyOnBranch=Already on ''{0}'' alreadyUpToDate=Already up-to-date. +answerNo=n +answerYes=y authorInfo=Author: {0} <{1}> averageMSPerRead=average {0} ms/read branchAlreadyExists=A branch named ''{0}'' already exists. @@ -130,6 +132,7 @@ noGitRepositoryConfigured=No Git repository configured. noNamesFound=No names found, cannot describe anything. noSuchFile=no such file: {0} noSuchRemoteRef=no such remote ref: ''{0}'' +noSystemConsoleAvailable=No System.console available noTREESectionInIndex=no 'TREE' section in index nonFastForward=non-fast forward notABranch={0} is not a branch @@ -149,6 +152,7 @@ onBranch=On branch {0} onBranchToBeBorn=You are on a branch yet to be born onlyOneMetaVarExpectedIn=Only one {0} expected in {1}. onlyOneOfIncludeOnlyAllInteractiveCanBeUsed=Only one of --include/--only/--all/--interactive can be used. +password=Password: pathspecDidNotMatch=error: pathspec ''{0}'' did not match any file(s) known to git. pushTo=To {0} pathsRequired=at least one path has to be specified when using --only @@ -345,4 +349,5 @@ usage_updateRemoteRefsFromAnotherRepository=Update remote refs from another repo usage_useNameInsteadOfOriginToTrackUpstream=use <name> instead of 'origin' to track upstream usage_checkoutBranchAfterClone=checkout named branch instead of remotes's HEAD usage_viewCommitHistory=View commit history -usage_orphan=Create a new orphan branch. The first commit made on this new branch will have no parents amd it will be the root of a new history totally disconnected from other branches and commits.
\ No newline at end of file +usage_orphan=Create a new orphan branch. The first commit made on this new branch will have no parents amd it will be the root of a new history totally disconnected from other branches and commits. +usernameFor=Username for {0}: diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/console/ConsoleAuthenticator.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/console/ConsoleAuthenticator.java new file mode 100644 index 0000000000..bdaccb0657 --- /dev/null +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/console/ConsoleAuthenticator.java @@ -0,0 +1,103 @@ +/* + * Copyright (C) 2009, Google Inc. + * Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> + * and other copyright owners as documented in the project's IP log. + * + * This program and the accompanying materials are made available + * under the terms of the Eclipse Distribution License v1.0 which + * accompanies this distribution, is reproduced below, and is + * available at http://www.eclipse.org/org/documents/edl-v10.php + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * + * - Neither the name of the Eclipse Foundation, Inc. nor the + * names of its contributors may be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.eclipse.jgit.console; + +import java.io.Console; +import java.net.Authenticator; +import java.net.PasswordAuthentication; +import java.text.MessageFormat; + +import org.eclipse.jgit.util.CachedAuthenticator; + +import org.eclipse.jgit.pgm.internal.CLIText; + +/** + * Basic network prompt for username/password when using the console. + * + * @since 4.0 + */ +public class ConsoleAuthenticator extends CachedAuthenticator { + /** Install this authenticator implementation into the JVM. */ + public static void install() { + final ConsoleAuthenticator c = new ConsoleAuthenticator(); + if (c.cons == null) + throw new NoClassDefFoundError( + CLIText.get().noSystemConsoleAvailable); + Authenticator.setDefault(c); + } + + private final Console cons = System.console(); + + @Override + protected PasswordAuthentication promptPasswordAuthentication() { + final String realm = formatRealm(); + String username = cons.readLine(MessageFormat.format( + CLIText.get().usernameFor + " ", realm)); //$NON-NLS-1$ + if (username == null || username.isEmpty()) { + return null; + } + char[] password = cons.readPassword(CLIText.get().password + " "); //$NON-NLS-1$ + if (password == null) { + password = new char[0]; + } + return new PasswordAuthentication(username, password); + } + + private String formatRealm() { + final StringBuilder realm = new StringBuilder(); + if (getRequestorType() == RequestorType.PROXY) { + realm.append(getRequestorType()); + realm.append(" "); //$NON-NLS-1$ + realm.append(getRequestingHost()); + if (getRequestingPort() > 0) { + realm.append(":"); //$NON-NLS-1$ + realm.append(getRequestingPort()); + } + } else { + realm.append(getRequestingURL()); + } + return realm.toString(); + } +} diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/console/ConsoleCredentialsProvider.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/console/ConsoleCredentialsProvider.java new file mode 100644 index 0000000000..e805add814 --- /dev/null +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/console/ConsoleCredentialsProvider.java @@ -0,0 +1,185 @@ +/* + * Copyright (C) 2010, Google Inc. + * Copyright (C) 2008, Robin Rosenberg <robin.rosenberg@dewire.com> + * Copyright (C) 2008, Shawn O. Pearce <spearce@spearce.org> + * and other copyright owners as documented in the project's IP log. + * + * This program and the accompanying materials are made available + * under the terms of the Eclipse Distribution License v1.0 which + * accompanies this distribution, is reproduced below, and is + * available at http://www.eclipse.org/org/documents/edl-v10.php + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or + * without modification, are permitted provided that the following + * conditions are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * + * - Neither the name of the Eclipse Foundation, Inc. nor the + * names of its contributors may be used to endorse or promote + * products derived from this software without specific prior + * written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND + * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, + * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package org.eclipse.jgit.console; + +import java.io.Console; + +import org.eclipse.jgit.errors.UnsupportedCredentialItem; +import org.eclipse.jgit.transport.ChainingCredentialsProvider; +import org.eclipse.jgit.transport.CredentialItem; +import org.eclipse.jgit.transport.CredentialsProvider; +import org.eclipse.jgit.transport.NetRCCredentialsProvider; +import org.eclipse.jgit.transport.URIish; + +import org.eclipse.jgit.pgm.internal.CLIText; + +/** + * Interacts with the user during authentication by using the text console. + * + * @since 4.0 + */ +public class ConsoleCredentialsProvider extends CredentialsProvider { + /** Install this implementation as the default. */ + public static void install() { + final ConsoleCredentialsProvider c = new ConsoleCredentialsProvider(); + if (c.cons == null) + throw new NoClassDefFoundError( + CLIText.get().noSystemConsoleAvailable); + CredentialsProvider cp = new ChainingCredentialsProvider( + new NetRCCredentialsProvider(), c); + CredentialsProvider.setDefault(cp); + } + + private final Console cons = System.console(); + + @Override + public boolean isInteractive() { + return true; + } + + @Override + public boolean supports(CredentialItem... items) { + for (CredentialItem i : items) { + if (i instanceof CredentialItem.StringType) + continue; + + else if (i instanceof CredentialItem.CharArrayType) + continue; + + else if (i instanceof CredentialItem.YesNoType) + continue; + + else if (i instanceof CredentialItem.InformationalMessage) + continue; + + else + return false; + } + return true; + } + + @Override + public boolean get(URIish uri, CredentialItem... items) + throws UnsupportedCredentialItem { + boolean ok = true; + for (int i = 0; i < items.length && ok; i++) { + CredentialItem item = items[i]; + + if (item instanceof CredentialItem.StringType) + ok = get((CredentialItem.StringType) item); + + else if (item instanceof CredentialItem.CharArrayType) + ok = get((CredentialItem.CharArrayType) item); + + else if (item instanceof CredentialItem.YesNoType) + ok = get((CredentialItem.YesNoType) item); + + else if (item instanceof CredentialItem.InformationalMessage) + ok = get((CredentialItem.InformationalMessage) item); + + else + throw new UnsupportedCredentialItem(uri, item.getPromptText()); + } + return ok; + } + + private boolean get(CredentialItem.StringType item) { + if (item.isValueSecure()) { + char[] v = cons.readPassword("%s: ", item.getPromptText()); //$NON-NLS-1$ + if (v != null) { + item.setValue(new String(v)); + return true; + } else { + return false; + } + } else { + String v = cons.readLine("%s: ", item.getPromptText()); //$NON-NLS-1$ + if (v != null) { + item.setValue(v); + return true; + } else { + return false; + } + } + } + + private boolean get(CredentialItem.CharArrayType item) { + if (item.isValueSecure()) { + char[] v = cons.readPassword("%s: ", item.getPromptText()); //$NON-NLS-1$ + if (v != null) { + item.setValueNoCopy(v); + return true; + } else { + return false; + } + } else { + String v = cons.readLine("%s: ", item.getPromptText()); //$NON-NLS-1$ + if (v != null) { + item.setValueNoCopy(v.toCharArray()); + return true; + } else { + return false; + } + } + } + + private boolean get(CredentialItem.InformationalMessage item) { + cons.printf("%s\n", item.getPromptText()); //$NON-NLS-1$ + cons.flush(); + return true; + } + + private boolean get(CredentialItem.YesNoType item) { + String r = cons.readLine("%s [%s/%s]? ", item.getPromptText(), //$NON-NLS-1$ + CLIText.get().answerYes, CLIText.get().answerNo); + if (r != null) { + item.setValue(CLIText.get().answerYes.equalsIgnoreCase(r)); + return true; + } else { + return false; + } + } +} diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Main.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Main.java index 7151de794d..38c3a2fcd4 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Main.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/Main.java @@ -47,15 +47,14 @@ package org.eclipse.jgit.pgm; import java.io.File; import java.io.IOException; import java.io.PrintWriter; -import java.lang.reflect.InvocationTargetException; import java.net.MalformedURLException; import java.net.URL; import java.text.MessageFormat; import java.util.ArrayList; import java.util.List; -import org.eclipse.jgit.awtui.AwtAuthenticator; -import org.eclipse.jgit.awtui.AwtCredentialsProvider; +import org.eclipse.jgit.console.ConsoleAuthenticator; +import org.eclipse.jgit.console.ConsoleCredentialsProvider; import org.eclipse.jgit.errors.TransportException; import org.eclipse.jgit.lib.Repository; import org.eclipse.jgit.lib.RepositoryBuilder; @@ -116,10 +115,8 @@ public class Main { */ protected void run(final String[] argv) { try { - if (!installConsole()) { - AwtAuthenticator.install(); - AwtCredentialsProvider.install(); - } + ConsoleAuthenticator.install(); + ConsoleCredentialsProvider.install(); configureHttpProxy(); execute(argv); } catch (Die err) { @@ -249,45 +246,6 @@ public class Main { return rb.build(); } - private static boolean installConsole() { - try { - install("org.eclipse.jgit.console.ConsoleAuthenticator"); //$NON-NLS-1$ - install("org.eclipse.jgit.console.ConsoleCredentialsProvider"); //$NON-NLS-1$ - return true; - } catch (ClassNotFoundException e) { - return false; - } catch (NoClassDefFoundError e) { - return false; - } catch (UnsupportedClassVersionError e) { - return false; - - } catch (IllegalArgumentException e) { - throw new RuntimeException(CLIText.get().cannotSetupConsole, e); - } catch (SecurityException e) { - throw new RuntimeException(CLIText.get().cannotSetupConsole, e); - } catch (IllegalAccessException e) { - throw new RuntimeException(CLIText.get().cannotSetupConsole, e); - } catch (InvocationTargetException e) { - throw new RuntimeException(CLIText.get().cannotSetupConsole, e); - } catch (NoSuchMethodException e) { - throw new RuntimeException(CLIText.get().cannotSetupConsole, e); - } - } - - private static void install(final String name) - throws IllegalAccessException, InvocationTargetException, - NoSuchMethodException, ClassNotFoundException { - try { - Class.forName(name).getMethod("install").invoke(null); //$NON-NLS-1$ - } catch (InvocationTargetException e) { - if (e.getCause() instanceof RuntimeException) - throw (RuntimeException) e.getCause(); - if (e.getCause() instanceof Error) - throw (Error) e.getCause(); - throw e; - } - } - /** * Configure the JRE's standard HTTP based on <code>http_proxy</code>. * <p> diff --git a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/internal/CLIText.java b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/internal/CLIText.java index e7d995e6ae..433ddf2b13 100644 --- a/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/internal/CLIText.java +++ b/org.eclipse.jgit.pgm/src/org/eclipse/jgit/pgm/internal/CLIText.java @@ -77,6 +77,8 @@ public class CLIText extends TranslationBundle { // @formatter:off /***/ public String alreadyOnBranch; /***/ public String alreadyUpToDate; + /***/ public String answerNo; + /***/ public String answerYes; /***/ public String authorInfo; /***/ public String averageMSPerRead; /***/ public String branchAlreadyExists; @@ -191,6 +193,7 @@ public class CLIText extends TranslationBundle { /***/ public String noSuchRemoteRef; /***/ public String noTREESectionInIndex; /***/ public String nonFastForward; + /***/ public String noSystemConsoleAvailable; /***/ public String notABranch; /***/ public String notACommit; /***/ public String notAGitRepository; @@ -208,6 +211,7 @@ public class CLIText extends TranslationBundle { /***/ public String onBranch; /***/ public String onlyOneMetaVarExpectedIn; /***/ public String onlyOneOfIncludeOnlyAllInteractiveCanBeUsed; + /***/ public String password; /***/ public String pathspecDidNotMatch; /***/ public String pushTo; /***/ public String pathsRequired; @@ -245,4 +249,5 @@ public class CLIText extends TranslationBundle { /***/ public String unsupportedOperation; /***/ public String untrackedFiles; /***/ public String updating; + /***/ public String usernameFor; } |