|
|
@@ -43,7 +43,13 @@ |
|
|
|
|
|
|
|
package org.eclipse.jgit.pgm; |
|
|
|
|
|
|
|
import java.io.IOException; |
|
|
|
import java.io.InputStream; |
|
|
|
import java.net.URL; |
|
|
|
import java.net.URLClassLoader; |
|
|
|
import java.text.MessageFormat; |
|
|
|
import java.util.jar.JarFile; |
|
|
|
import java.util.jar.Manifest; |
|
|
|
|
|
|
|
import org.eclipse.jgit.pgm.internal.CLIText; |
|
|
|
|
|
|
@@ -51,15 +57,54 @@ import org.eclipse.jgit.pgm.internal.CLIText; |
|
|
|
class Version extends TextBuiltin { |
|
|
|
@Override |
|
|
|
protected void run() throws Exception { |
|
|
|
final Package pkg = getClass().getPackage(); |
|
|
|
if (pkg == null || pkg.getImplementationVersion() == null) |
|
|
|
// read the Implementation-Version from Manifest |
|
|
|
String version = getImplementationVersion(); |
|
|
|
|
|
|
|
// if Implementation-Version is not available then try reading |
|
|
|
// Bundle-Version |
|
|
|
if (version == null) |
|
|
|
version = getBundleVersion(); |
|
|
|
|
|
|
|
// if both Implementation-Version and Bundle-Version are not available |
|
|
|
// then throw an exception |
|
|
|
if (version == null) |
|
|
|
throw die(CLIText.get().cannotReadPackageInformation); |
|
|
|
|
|
|
|
outw.println(MessageFormat.format(CLIText.get().jgitVersion, pkg.getImplementationVersion())); |
|
|
|
outw.println(MessageFormat.format(CLIText.get().jgitVersion, version)); |
|
|
|
} |
|
|
|
|
|
|
|
@Override |
|
|
|
protected final boolean requiresRepository() { |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
private String getImplementationVersion() { |
|
|
|
Package pkg = getClass().getPackage(); |
|
|
|
return (pkg == null) ? null : pkg.getImplementationVersion(); |
|
|
|
} |
|
|
|
|
|
|
|
private String getBundleVersion() { |
|
|
|
ClassLoader cl = getClass().getClassLoader(); |
|
|
|
if (cl instanceof URLClassLoader) { |
|
|
|
URL url = ((URLClassLoader) cl).findResource(JarFile.MANIFEST_NAME); |
|
|
|
if (url != null) |
|
|
|
return getBundleVersion(url); |
|
|
|
} |
|
|
|
return null; |
|
|
|
} |
|
|
|
|
|
|
|
private static String getBundleVersion(URL url) { |
|
|
|
try { |
|
|
|
InputStream is = url.openStream(); |
|
|
|
try { |
|
|
|
Manifest manifest = new Manifest(is); |
|
|
|
return manifest.getMainAttributes().getValue("Bundle-Version"); //$NON-NLS-1$ |
|
|
|
} finally { |
|
|
|
is.close(); |
|
|
|
} |
|
|
|
} catch (IOException e) { |
|
|
|
// do nothing - will return null |
|
|
|
} |
|
|
|
return null; |
|
|
|
} |
|
|
|
} |