From: <otm...@us...> - 2008-11-05 07:30:33
|
Revision: 5544 http://jython.svn.sourceforge.net/jython/?rev=5544&view=rev Author: otmarhumbel Date: 2008-11-05 07:30:28 +0000 (Wed, 05 Nov 2008) Log Message: ----------- installation autotests now verify the shell scripts more deeply the set of calls is defined in jython_test.template and jython_test.bat.template Modified Paths: -------------- trunk/installer/src/java/org/python/util/install/AbstractWizardPage.java trunk/installer/src/java/org/python/util/install/JarInfo.java trunk/installer/src/java/org/python/util/install/JarInstaller.java trunk/installer/src/java/org/python/util/install/JavaVersionTester.java trunk/installer/src/java/org/python/util/install/StartScriptGenerator.java trunk/installer/src/java/org/python/util/install/driver/Autotest.java trunk/installer/src/java/org/python/util/install/driver/InstallationDriver.java trunk/installer/src/java/org/python/util/install/driver/NormalVerifier.java trunk/installer/src/java/org/python/util/install/driver/StandaloneVerifier.java trunk/installer/test/java/org/python/util/install/StandalonePackagerTest.java trunk/installer/test/java/org/python/util/install/StartScriptGeneratorTest.java trunk/installer/test/java/org/python/util/install/driver/NormalVerifierTest.java trunk/installer/test/java/org/python/util/install/driver/StandaloneVerifierTest.java trunk/jython/build.xml Added Paths: ----------- trunk/installer/src/java/org/python/util/install/FileHelper.java trunk/installer/src/java/org/python/util/install/driver/jython_test.bat.template trunk/installer/src/java/org/python/util/install/driver/jython_test.template trunk/installer/test/java/org/python/util/install/FileHelperTest.java Removed Paths: ------------- trunk/installer/src/java/org/python/util/install/driver/FileHelper.java Modified: trunk/installer/src/java/org/python/util/install/AbstractWizardPage.java =================================================================== --- trunk/installer/src/java/org/python/util/install/AbstractWizardPage.java 2008-11-05 02:56:03 UTC (rev 5543) +++ trunk/installer/src/java/org/python/util/install/AbstractWizardPage.java 2008-11-05 07:30:28 UTC (rev 5544) @@ -9,6 +9,8 @@ import javax.swing.JPanel; public abstract class AbstractWizardPage extends JPanel implements TextKeys { + private static final long serialVersionUID = -5233805023557214279L; + private static final String _ICON_FILE_NAME = "jython_small_c.png"; private static ImageIcon _imageIcon = null; @@ -54,11 +56,7 @@ */ protected ImageIcon getIcon() { if (_imageIcon == null) { - String className = getClass().getName(); - String packageName = className.substring(0, className.lastIndexOf(".")); - String packagePath = packageName.replace('.', '/'); - URL iconURL = Thread.currentThread().getContextClassLoader().getResource( - packagePath + "/" + _ICON_FILE_NAME); + URL iconURL = FileHelper.getRelativeURL(getClass(), _ICON_FILE_NAME); if (iconURL != null) { _imageIcon = new ImageIcon(iconURL); } Added: trunk/installer/src/java/org/python/util/install/FileHelper.java =================================================================== --- trunk/installer/src/java/org/python/util/install/FileHelper.java (rev 0) +++ trunk/installer/src/java/org/python/util/install/FileHelper.java 2008-11-05 07:30:28 UTC (rev 5544) @@ -0,0 +1,208 @@ +package org.python.util.install; + +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; + +/** + * Helper methods for file handling during installation / installation verification + */ +public final class FileHelper { + + private final static String EXECUTABLE_MODE = "755"; + + /** + * create a temporary directory with the same name as the passed in File (which may exist as + * file, not directory) + * + * @param tempDirectory + * @return <code>true</code> only if the the directory was successfully created (or already + * existed) + */ + public static boolean createTempDirectory(File tempDirectory) { + boolean success = true; + if (!tempDirectory.isDirectory()) { + if (tempDirectory.exists()) { + success = carryOnResult(tempDirectory.delete(), success); + } + if (success) { + success = tempDirectory.mkdirs(); + } + } + return success; + } + + /** + * completely remove a directory + * + * @param dir + * @return <code>true</code> if successful, <code>false</code> otherwise. + */ + public static boolean rmdir(File dir) { + boolean success = true; + if (dir.exists()) { + File[] files = dir.listFiles(); + for (int i = 0; i < files.length; i++) { + File file = files[i]; + if (file.isFile()) { + success = carryOnResult(file.delete(), success); + } else { + if (file.isDirectory()) { + success = carryOnResult(rmdir(file), success); + } + } + } + success = carryOnResult(dir.delete(), success); + } + return success; + } + + /** + * read the contents of a file into a String + * + * @param file + * The file has to exist + * @return The contents of the file as String + * @throws IOException + */ + public static String readAll(File file) throws IOException { + FileReader fileReader = new FileReader(file); + try { + StringBuffer sb = new StringBuffer(); + char[] b = new char[8192]; + int n; + while ((n = fileReader.read(b)) > 0) { + sb.append(b, 0, n); + } + return sb.toString(); + } finally { + fileReader.close(); + } + } + + /** + * read the contents of a stream into a String + * <p> + * ATTN: does not handle encodings + * + * @param inputStream + * The input stream + * @return A String representation of the file contents + * @throws IOException + */ + public static String readAll(InputStream inputStream) throws IOException { + try { + StringBuffer sb = new StringBuffer(); + byte[] b = new byte[8192]; + int n; + while ((n = inputStream.read(b)) > 0) { + sb.append(new String(b, 0, n)); + } + return sb.toString(); + } finally { + inputStream.close(); + } + } + + /** + * Write contents to a file. + * <p> + * An existing file would be overwritten. + * + * @param file + * @param contents + * + * @throws IOException + */ + public static void write(File file, String contents) throws IOException { + FileWriter writer = new FileWriter(file); + writer.write(contents); + writer.flush(); + writer.close(); + } + + /** + * determine the url of a file relative to (in the same directory as) the specified .class file<br> + * can also be used if the .class file resides inside a .jar file + * + * @param clazz + * The class next to the file + * @param fileName + * The name of the file + * + * @return The url of the file, can be null + */ + public static URL getRelativeURL(Class<?> clazz, String fileName) { + String filePath = getRelativePackagePath(clazz) + "/" + fileName; + return Thread.currentThread().getContextClassLoader().getResource(filePath); + } + + /** + * get the input stream of a file relative to (in the same directory as) the specified .class + * file<br> + * can also be used if the .class file resides inside a .jar file + * + * @param clazz + * The class next to the file + * @param fileName + * The name of the file + * + * @return The input stream of the file, can be null + */ + public static InputStream getRelativeURLAsStream(Class<?> clazz, String fileName) { + String filePath = getRelativePackagePath(clazz) + "/" + fileName; + return Thread.currentThread().getContextClassLoader().getResourceAsStream(filePath); + } + + /** + * do a chmod on the passed file + * + * @param scriptFile + */ + public static void makeExecutable(File scriptFile) { + try { + String command[] = new String[3]; + command[0] = "chmod"; + command[1] = EXECUTABLE_MODE; + command[2] = scriptFile.getAbsolutePath(); + long timeout = 3000; + ChildProcess childProcess = new ChildProcess(command, timeout); + childProcess.run(); + } catch (Throwable t) { + t.printStackTrace(); + } + } + + /** + * build the package path for the class loader<br> + * the class loader should be able to load a file appended to this path, if it is in the same + * directory. + * + * @param clazz + * The class + * + * @return The package path + */ + private static String getRelativePackagePath(Class<?> clazz) { + String className = clazz.getName(); + String packageName = className.substring(0, className.lastIndexOf(".")); + return packageName.replace('.', '/'); + } + + /** + * @param newResult + * @param existingResult + * @return <code>false</code> if newResult or existingResult are false, <code>true</code> + * otherwise. + */ + private static boolean carryOnResult(boolean newResult, boolean existingResult) { + if (existingResult) { + return newResult; + } else { + return existingResult; + } + } +} Modified: trunk/installer/src/java/org/python/util/install/JarInfo.java =================================================================== --- trunk/installer/src/java/org/python/util/install/JarInfo.java 2008-11-05 02:56:03 UTC (rev 5543) +++ trunk/installer/src/java/org/python/util/install/JarInfo.java 2008-11-05 07:30:28 UTC (rev 5544) @@ -75,8 +75,8 @@ return _numberOfEntries; } - public List getExcludeDirs() throws IOException { - List excludeDirs = new ArrayList(); + public List<String> getExcludeDirs() throws IOException { + List<String> excludeDirs = new ArrayList<String>(); Attributes jythonAttributes = getManifest().getAttributes(JYTHON); if (jythonAttributes != null) { // do not use containsKey @@ -122,7 +122,7 @@ throw new InstallerException(Installation.getText(TextKeys.JAR_NOT_FOUND, _jarFile.getAbsolutePath())); } JarFile jarFile = new JarFile(_jarFile); - Enumeration entries = jarFile.entries(); + Enumeration<JarEntry> entries = jarFile.entries(); _numberOfEntries = 0; while (entries.hasMoreElements()) { JarEntry entry = (JarEntry) entries.nextElement(); Modified: trunk/installer/src/java/org/python/util/install/JarInstaller.java =================================================================== --- trunk/installer/src/java/org/python/util/install/JarInstaller.java 2008-11-05 02:56:03 UTC (rev 5543) +++ trunk/installer/src/java/org/python/util/install/JarInstaller.java 2008-11-05 07:30:28 UTC (rev 5544) @@ -13,25 +13,31 @@ /** * Working horse extracting the contents of the installation .jar to the file system. <br> - * The directory stucture is preserved, but there is the possibility to exclude some entries (directories at the - * moment). + * The directory stucture is preserved, but there is the possibility to exclude some entries + * (directories at the moment). */ public class JarInstaller { + public static final String JYTHON_JAR = "jython-complete.jar"; - + private static final String PATH_SEPARATOR = "/"; + private static final String LIB_NAME_SEP = "Lib" + PATH_SEPARATOR; + private static final String LIB_PAWT_SEP = LIB_NAME_SEP + "pawt" + PATH_SEPARATOR; + private static final int BUFFER_SIZE = 1024; private ProgressListener _progressListener; + private JarInfo _jarInfo; - private List _installationListeners; + private List<InstallationListener> _installationListeners; + public JarInstaller(ProgressListener progressListener, JarInfo jarInfo) { _progressListener = progressListener; _jarInfo = jarInfo; - _installationListeners = new ArrayList(); + _installationListeners = new ArrayList<InstallationListener>(); } /** @@ -48,8 +54,8 @@ try { // has to correspond with build.xml // has to correspond with build.Lib.include.properties - List excludeDirs = _jarInfo.getExcludeDirs(); - List coreLibFiles = new ArrayList(); + List<String> excludeDirs = _jarInfo.getExcludeDirs(); + List<String> coreLibFiles = new ArrayList<String>(); if (!installationType.installSources()) { excludeDirs.add("src"); excludeDirs.add("grammar"); @@ -73,35 +79,36 @@ excludeDirs.add(LIB_NAME_SEP + "email/test"); excludeDirs.add(LIB_NAME_SEP + "test"); } - int count = 0; int percent = 0; int numberOfIntervals = 100 / _progressListener.getInterval(); int numberOfEntries = approximateNumberOfEntries(installationType); int threshold = numberOfEntries / numberOfIntervals + 1; // +1 = pessimistic boolean coreExclusionReported = false; - // unzip - ZipInputStream zipInput = new ZipInputStream(new BufferedInputStream(new FileInputStream(_jarInfo - .getJarFile()), BUFFER_SIZE)); + ZipInputStream zipInput = new ZipInputStream(new BufferedInputStream(new FileInputStream(_jarInfo.getJarFile()), + BUFFER_SIZE)); ZipEntry zipEntry = zipInput.getNextEntry(); while (zipEntry != null) { String zipEntryName = zipEntry.getName(); boolean exclude = false; // handle exclusion of directories - Iterator excludeDirsAsIterator = excludeDirs.iterator(); + Iterator<String> excludeDirsAsIterator = excludeDirs.iterator(); while (excludeDirsAsIterator.hasNext()) { - if (zipEntryName.startsWith((String) excludeDirsAsIterator.next() + PATH_SEPARATOR)) { + if (zipEntryName.startsWith((String)excludeDirsAsIterator.next() + + PATH_SEPARATOR)) { exclude = true; } } // exclude build.xml when not installing source if (!installationType.installSources() && zipEntryName.equals("build.xml")) exclude = true; - // handle exclusion of core Lib files if (!exclude) { - exclude = shouldExcludeFile(installationType, coreLibFiles, zipEntry, zipEntryName); + exclude = shouldExcludeFile(installationType, + coreLibFiles, + zipEntry, + zipEntryName); if (Installation.isVerbose() && !coreExclusionReported && exclude) { ConsoleInstaller.message("excluding some .py files, like " + zipEntryName); coreExclusionReported = true; @@ -125,7 +132,7 @@ byte[] buffer = new byte[BUFFER_SIZE]; int len; while ((len = zipInput.read(buffer)) > 0) { - output.write(buffer, 0, len); + output.write(buffer, 0, len); } output.close(); file.setLastModified(zipEntry.getTime()); @@ -150,13 +157,14 @@ _progressListener.progressChanged(90); // approx packager.addFullDirectory(libDir); packager.close(); + // TODO:Oti move to FileHelper StandalonePackager.emptyDirectory(targetDirectory, jythonJar); } - // end + // finish: inform listeners _progressListener.progressFinished(); - Iterator installationListenersIterator = _installationListeners.iterator(); + Iterator<InstallationListener> installationListenersIterator = _installationListeners.iterator(); while (installationListenersIterator.hasNext()) { - ((InstallationListener) installationListenersIterator.next()).progressFinished(); + installationListenersIterator.next().progressFinished(); } } catch (IOException ioe) { throw new InstallerException(Installation.getText(TextKeys.ERROR_ACCESS_JARFILE), ioe); @@ -194,29 +202,29 @@ int lastSepIndex = zipEntryName.lastIndexOf(PATH_SEPARATOR); if (lastSepIndex > 0) { File directory = new File(targetDirectory, zipEntryName.substring(0, lastSepIndex)); - if (directory.exists() && directory.isDirectory()) { - } else { + if (directory.exists() && directory.isDirectory()) {} else { if (!directory.mkdirs()) { - throw new InstallerException(Installation.getText(TextKeys.UNABLE_CREATE_DIRECTORY, directory - .getAbsolutePath())); + throw new InstallerException(Installation.getText(TextKeys.UNABLE_CREATE_DIRECTORY, + directory.getAbsolutePath())); } } } } - private File createFile(final File targetDirectory, final String zipEntryName) throws IOException { + private File createFile(final File targetDirectory, final String zipEntryName) + throws IOException { File file = new File(targetDirectory, zipEntryName); - if (file.exists() && file.isFile()) { - } else { + if (file.exists() && file.isFile()) {} else { if (!file.createNewFile()) { - throw new InstallerException(Installation.getText(TextKeys.UNABLE_CREATE_FILE, file.getCanonicalPath())); + throw new InstallerException(Installation.getText(TextKeys.UNABLE_CREATE_FILE, + file.getCanonicalPath())); } } return file; } - private List getCoreLibFiles() { - List coreLibFiles = new ArrayList(); + private List<String> getCoreLibFiles() { + List<String> coreLibFiles = new ArrayList<String>(); coreLibFiles.add("__future__.py"); coreLibFiles.add("copy.py"); coreLibFiles.add("dbexts.py"); @@ -247,8 +255,10 @@ return coreLibFiles; } - private boolean shouldExcludeFile(InstallationType installationType, List coreLibFiles, ZipEntry zipEntry, - String zipEntryName) { + private boolean shouldExcludeFile(InstallationType installationType, + List<String> coreLibFiles, + ZipEntry zipEntry, + String zipEntryName) { boolean exclude = false; if (!installationType.installLibraryModules()) { // handle files in Lib @@ -257,9 +267,9 @@ if (!zipEntryName.startsWith(LIB_PAWT_SEP)) { if (zipEntryName.endsWith(".py")) { // only compare *.py files exclude = true; - Iterator coreLibFilesAsIterator = coreLibFiles.iterator(); + Iterator<String> coreLibFilesAsIterator = coreLibFiles.iterator(); while (coreLibFilesAsIterator.hasNext()) { - String coreFileName = (String) coreLibFilesAsIterator.next(); + String coreFileName = (String)coreLibFilesAsIterator.next(); if (zipEntryName.endsWith(PATH_SEPARATOR + coreFileName)) { exclude = false; } @@ -270,5 +280,4 @@ } return exclude; } - } Modified: trunk/installer/src/java/org/python/util/install/JavaVersionTester.java =================================================================== --- trunk/installer/src/java/org/python/util/install/JavaVersionTester.java 2008-11-05 02:56:03 UTC (rev 5543) +++ trunk/installer/src/java/org/python/util/install/JavaVersionTester.java 2008-11-05 07:30:28 UTC (rev 5544) @@ -1,7 +1,6 @@ package org.python.util.install; import java.io.File; -import java.io.FileWriter; /** * Helper class to test a java version @@ -39,10 +38,7 @@ } private static void writeTempFile(File file) throws Exception { - FileWriter writer = new FileWriter(file); - writer.write(createFileContent()); - writer.flush(); - writer.close(); + FileHelper.write(file, createFileContent()); } private static String createFileContent() { Modified: trunk/installer/src/java/org/python/util/install/StartScriptGenerator.java =================================================================== --- trunk/installer/src/java/org/python/util/install/StartScriptGenerator.java 2008-11-05 02:56:03 UTC (rev 5543) +++ trunk/installer/src/java/org/python/util/install/StartScriptGenerator.java 2008-11-05 07:30:28 UTC (rev 5544) @@ -1,8 +1,6 @@ package org.python.util.install; import java.io.File; -import java.io.FileReader; -import java.io.FileWriter; import java.io.IOException; import java.text.MessageFormat; import java.util.Date; @@ -17,8 +15,6 @@ protected final static String WIN_CR_LF; - private final static String EXECUTABLE_MODE = "755"; - private final static String JYTHON = "jython"; private final static String JYTHON_BAT = "jython.bat"; @@ -75,20 +71,26 @@ } protected final void generateStartScripts() throws IOException { - generateJythonScript(); - } - - private final void generateJythonScript() throws IOException { + File bin = new File(getTargetDirectory(), "bin"); + File bin_jython = new File(bin, JYTHON); switch(getFlavour()){ case BOTH_FLAVOUR: - writeToFile(JYTHON_BAT, getJythonScript(WINDOWS_FLAVOUR)); - makeExecutable(writeToFile(JYTHON, getJythonScript(BOTH_FLAVOUR))); + writeToTargetDir(JYTHON_BAT, getJythonScript(WINDOWS_FLAVOUR)); + FileHelper.makeExecutable(writeToTargetDir(JYTHON, getJythonScript(BOTH_FLAVOUR))); + FileHelper.makeExecutable(bin_jython); break; case WINDOWS_FLAVOUR: - writeToFile(JYTHON_BAT, getJythonScript(WINDOWS_FLAVOUR)); + writeToTargetDir(JYTHON_BAT, getJythonScript(WINDOWS_FLAVOUR)); + // delete the *nix script in /bin dir + bin_jython.delete(); break; default: - makeExecutable(writeToFile(JYTHON, getJythonScript(UNIX_FLAVOUR))); + FileHelper.makeExecutable(writeToTargetDir(JYTHON, getJythonScript(UNIX_FLAVOUR))); + FileHelper.makeExecutable(bin_jython); + // delete the windows script in /bin dir + File bin_jython_bat = new File(bin, JYTHON_BAT); + bin_jython_bat.delete(); + break; } } @@ -116,7 +118,7 @@ parameters[0] = new Date().toString(); parameters[1] = System.getProperty("user.name"); parameters[2] = _javaHome.getCanonicalPath(); - parameters[3] = _targetDirectory.getCanonicalPath(); + parameters[3] = getTargetDirectory().getCanonicalPath(); return MessageFormat.format(template, (Object[])parameters); } @@ -183,65 +185,31 @@ */ private String readFromFile(String fileName) throws IOException { // default runtime location - File file = new File(new File(_targetDirectory, "bin"), fileName); + File targetDirectory = getTargetDirectory(); + File file = new File(new File(targetDirectory, "bin"), fileName); if (!file.exists()) { // deviation: test time location - file = new File(_targetDirectory, fileName); + file = new File(targetDirectory, fileName); } - FileReader fileReader = new FileReader(file); - try { - StringBuffer sb = new StringBuffer(); - char[] b = new char[8192]; - int n; - while ((n = fileReader.read(b)) > 0) { - sb.append(b, 0, n); - } - return sb.toString(); - } finally { - fileReader.close(); - } + return FileHelper.readAll(file); } /** + * Create (or overwrite) the specified file in the target directory + * * @param fileName * The short file name, e.g. JYTHON_BAT * @param contents * * @throws IOException */ - private File writeToFile(String fileName, String contents) throws IOException { - File file = new File(_targetDirectory, fileName); - if (file.exists()) { - file.delete(); - } - file.createNewFile(); - if (file.exists()) { - if (file.canWrite()) { - FileWriter fileWriter = new FileWriter(file); - fileWriter.write(contents); - fileWriter.flush(); - fileWriter.close(); - } - } + private File writeToTargetDir(String fileName, String contents) throws IOException { + File file = new File(getTargetDirectory(), fileName); + FileHelper.write(file, contents); return file; } - /** - * do a chmod on the passed file - * - * @param scriptFile - */ - private void makeExecutable(File scriptFile) { - try { - String command[] = new String[3]; - command[0] = "chmod"; - command[1] = EXECUTABLE_MODE; - command[2] = scriptFile.getAbsolutePath(); - long timeout = 3000; - ChildProcess childProcess = new ChildProcess(command, timeout); - childProcess.run(); - } catch (Throwable t) { - t.printStackTrace(); - } + private File getTargetDirectory() { + return _targetDirectory; } } Modified: trunk/installer/src/java/org/python/util/install/driver/Autotest.java =================================================================== --- trunk/installer/src/java/org/python/util/install/driver/Autotest.java 2008-11-05 02:56:03 UTC (rev 5543) +++ trunk/installer/src/java/org/python/util/install/driver/Autotest.java 2008-11-05 07:30:28 UTC (rev 5544) @@ -3,6 +3,7 @@ import java.io.File; import java.io.IOException; +import org.python.util.install.FileHelper; import org.python.util.install.InstallationListener; import org.python.util.install.InstallerCommandLine; Deleted: trunk/installer/src/java/org/python/util/install/driver/FileHelper.java =================================================================== --- trunk/installer/src/java/org/python/util/install/driver/FileHelper.java 2008-11-05 02:56:03 UTC (rev 5543) +++ trunk/installer/src/java/org/python/util/install/driver/FileHelper.java 2008-11-05 07:30:28 UTC (rev 5544) @@ -1,24 +0,0 @@ -package org.python.util.install.driver; - -import java.io.File; - -public class FileHelper { - - /** - * create a temporary directory with the same name as the passed in File (which may exist as file, not directory) - * - * @param tempDirectory - * @return <code>true</code> only if the the directory was successfully created (or already existed) - */ - public static boolean createTempDirectory(File tempDirectory) { - if (!tempDirectory.isDirectory()) { - if (tempDirectory.exists()) { - tempDirectory.delete(); - } - return tempDirectory.mkdir(); - } else { - return true; - } - } - -} Modified: trunk/installer/src/java/org/python/util/install/driver/InstallationDriver.java =================================================================== --- trunk/installer/src/java/org/python/util/install/driver/InstallationDriver.java 2008-11-05 02:56:03 UTC (rev 5543) +++ trunk/installer/src/java/org/python/util/install/driver/InstallationDriver.java 2008-11-05 07:30:28 UTC (rev 5544) @@ -110,7 +110,7 @@ private void validate(Autotest autoTest) throws DriverException { autoTest.assertTargetDirNotEmpty(); if (autoTest.getVerifier() != null) { - System.out.println("verifying installation ..."); + System.out.println("verifying installation - this can take a while ..."); autoTest.getVerifier().verify(); System.out.println("... installation ok.\n"); } Modified: trunk/installer/src/java/org/python/util/install/driver/NormalVerifier.java =================================================================== --- trunk/installer/src/java/org/python/util/install/driver/NormalVerifier.java 2008-11-05 02:56:03 UTC (rev 5543) +++ trunk/installer/src/java/org/python/util/install/driver/NormalVerifier.java 2008-11-05 07:30:28 UTC (rev 5544) @@ -1,139 +1,263 @@ -package org.python.util.install.driver; - -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.io.PrintStream; -import java.util.StringTokenizer; - -import org.python.util.install.ChildProcess; -import org.python.util.install.Installation; - -public class NormalVerifier implements Verifier { - - protected static final String AUTOTEST_PY = "autotest.py"; - private static final String JYTHON_UP = "jython up and running"; - private static final String JYTHON = "jython"; - - private File _targetDir; - - public void setTargetDir(File targetDir) { - _targetDir = targetDir; - } - - public File getTargetDir() { - return _targetDir; - } - - public void verify() throws DriverException { - // create the test .py script - createTestScriptFile(); - - // start jython and capture the output - ChildProcess childProcess = new ChildProcess(getCommand()); - childProcess.setDebug(true); - ByteArrayOutputStream redirectedErr = new ByteArrayOutputStream(); - ByteArrayOutputStream redirectedOut = new ByteArrayOutputStream(); - int exitValue = 0; - PrintStream oldErr = System.err; - PrintStream oldOut = System.out; - try { - System.setErr(new PrintStream(redirectedErr)); - System.setOut(new PrintStream(redirectedOut)); - exitValue = childProcess.run(); - } finally { - System.setErr(oldErr); - System.setOut(oldOut); - } - - // verify the output - String output = null; - String error = null; - try { - redirectedErr.flush(); - redirectedOut.flush(); - String encoding = "US-ASCII"; - output = redirectedOut.toString(encoding); - error = redirectedErr.toString(encoding); - } catch (IOException ioe) { - throw new DriverException(ioe); - } - if (exitValue != 0) { - throw new DriverException("start of jython failed, output:\n" + output + "\nerror:\n" + error); - } - verifyError(error); - verifyOutput(output); - } - - /** - * will be overridden in subclass StandaloneVerifier - * - * @return the command array to start jython with - * @throws DriverException if there was a problem getting the target directory path - */ - protected String[] getCommand() throws DriverException { - String parentDirName = null; - try { - parentDirName = getTargetDir().getCanonicalPath() + File.separator; - } catch (IOException ioe) { - throw new DriverException(ioe); - } - String[] command = new String[2]; - if (Installation.isWindows()) { - command[0] = parentDirName + JYTHON + ".bat"; - } else { - command[0] = parentDirName + JYTHON; - } - command[1] = parentDirName + AUTOTEST_PY; - return command; - } - - private void verifyError(String error) throws DriverException { - StringTokenizer tokenizer = new StringTokenizer(error, "\n"); - while (tokenizer.hasMoreTokens()) { - String line = tokenizer.nextToken(); - if (!line.startsWith("*sys-package-mgr*")) { - throw new DriverException(error); - } - } - } - - private void verifyOutput(String output) throws DriverException { - boolean started = false; - StringTokenizer tokenizer = new StringTokenizer(output, "\n"); - while (tokenizer.hasMoreTokens()) { - String line = tokenizer.nextToken(); - if (!line.startsWith("[ChildProcess]")) { - if (line.startsWith(JYTHON_UP)) { - started = true; - } else { - throw new DriverException(output); - } - } - } - if (!started) { - throw new DriverException("start of jython failed:\n" + output); - } - } - - private String getTestScript() { - StringBuffer buf = new StringBuffer(); - buf.append("import sys\n"); - buf.append("print '" + JYTHON_UP + "'\n"); - return buf.toString(); - } - - private void createTestScriptFile() throws DriverException { - File file = new File(getTargetDir(), AUTOTEST_PY); - try { - FileWriter writer = new FileWriter(file); - writer.write(getTestScript()); - writer.flush(); - writer.close(); - } catch (IOException ioe) { - throw new DriverException(ioe); - } - } - -} +package org.python.util.install.driver; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.PrintStream; +import java.text.MessageFormat; +import java.util.StringTokenizer; + +import org.python.util.install.ChildProcess; +import org.python.util.install.FileHelper; +import org.python.util.install.Installation; +import org.python.util.install.JavaVersionTester; + +public class NormalVerifier implements Verifier { + + protected static final String AUTOTEST_PY = "autotest.py"; + + protected static final String JYTHON_TEST = "jython_test"; + + private static final String BIN = "bin"; + + private static final String BAT_EXTENSION = ".bat"; + + private static final String JYTHON_UP = "jython up and running!"; + + private static final String JYTHON = "jython"; + + private static final String TEMPLATE_SUFFIX = ".template"; + + private static final String VERIFYING = "verifying"; + + private File _targetDir; + + public void setTargetDir(File targetDir) { + _targetDir = targetDir; + } + + public File getTargetDir() { + return _targetDir; + } + + public void verify() throws DriverException { + createTestScriptFile(); // create the test .py script + // verify the most simple start of jython works + verifyStart(getSimpleCommand()); + if (doShellScriptTests()) { + // verify more complex versions of starting jython + verifyStart(getShellScriptTestCommand()); + } + } + + /** + * Will be overridden in subclass StandaloneVerifier + * + * @return the command array to start jython with + * @throws DriverException + * if there was a problem getting the target directory path + */ + protected String[] getSimpleCommand() throws DriverException { + String parentDirName = null; + try { + parentDirName = getTargetDir().getCanonicalPath() + File.separator; + } catch (IOException ioe) { + throw new DriverException(ioe); + } + String[] command = new String[2]; + if (Installation.isWindows()) { + command[0] = parentDirName + JYTHON + BAT_EXTENSION; + } else { + command[0] = parentDirName + JYTHON; + } + command[1] = parentDirName + AUTOTEST_PY; + return command; + } + + /** + * @return The command to test the shell script more deeply + * @throws DriverException + */ + protected final String[] getShellScriptTestCommand() throws DriverException { + // first we have to create the shell script + File testCommandDir = getShellScriptTestCommandDir(); + if (!testCommandDir.exists()) { + if (!testCommandDir.mkdirs()) { + throw new DriverException("unable to create directory " + + testCommandDir.getAbsolutePath()); + } + } + String commandName = JYTHON_TEST; + boolean isWindows = Installation.isWindows(); + if (isWindows) { + commandName = commandName.concat(BAT_EXTENSION); + } + File command = new File(testCommandDir, commandName); + try { + if (!command.exists()) { + command.createNewFile(); + } + FileHelper.write(command, getShellScriptTestContents()); + if (!isWindows) { + FileHelper.makeExecutable(command); + } + return new String[] {command.getCanonicalPath()}; + } catch (Exception e) { + throw new DriverException(e); + } + } + + /** + * @return The contents of the shell test script + * @throws DriverException + */ + protected final String getShellScriptTestContents() throws DriverException { + String contents = ""; + String templateName = JYTHON_TEST; + if (Installation.isWindows()) { + templateName = templateName.concat(BAT_EXTENSION); + } + templateName = templateName.concat(TEMPLATE_SUFFIX); + InputStream inputStream = FileHelper.getRelativeURLAsStream(getClass(), templateName); + if (inputStream != null) { + try { + String template = FileHelper.readAll(inputStream); + String targetDirPath = getTargetDir().getCanonicalPath(); + String upScriptPath = getSimpleCommand()[1]; + String javaHomeString = System.getProperty(JavaVersionTester.JAVA_HOME, ""); + contents = MessageFormat.format(template, + targetDirPath, + upScriptPath, + javaHomeString, + VERIFYING); + } catch (Exception e) { + throw new DriverException(e); + } + } + return contents; + } + + /** + * @return The directory where to create the shell script test command in. + * + * @throws DriverException + */ + protected final File getShellScriptTestCommandDir() throws DriverException { + String dirName; + try { + dirName = getTargetDir().getCanonicalPath().concat(File.separator).concat(BIN); + return new File(dirName); + } catch (IOException ioe) { + throw new DriverException(ioe); + } + } + + /** + * Internal method verifying a jython-starting command by capturing the ouptut + * + * @param command + * + * @throws DriverException + */ + private void verifyStart(String[] command) throws DriverException { + ChildProcess childProcess = new ChildProcess(command); + childProcess.setDebug(true); + ByteArrayOutputStream redirectedErr = new ByteArrayOutputStream(); + ByteArrayOutputStream redirectedOut = new ByteArrayOutputStream(); + int exitValue = 0; + PrintStream oldErr = System.err; + PrintStream oldOut = System.out; + try { + System.setErr(new PrintStream(redirectedErr)); + System.setOut(new PrintStream(redirectedOut)); + exitValue = childProcess.run(); + } finally { + System.setErr(oldErr); + System.setOut(oldOut); + } + // verify the output + String output = null; + String error = null; + try { + redirectedErr.flush(); + redirectedOut.flush(); + String encoding = "US-ASCII"; + output = redirectedOut.toString(encoding); + error = redirectedErr.toString(encoding); + } catch (IOException ioe) { + throw new DriverException(ioe); + } + if (exitValue != 0) { + throw new DriverException("start of jython failed, output:\n" + output + "\nerror:\n" + + error); + } + verifyError(error); + verifyOutput(output); + } + + /** + * Will be overridden in subclass StandaloneVerifier + * + * @return <code>true</code> if the jython start shell script should be verified (using + * different options) + */ + protected boolean doShellScriptTests() { + return true; + } + + private void verifyError(String error) throws DriverException { + StringTokenizer tokenizer = new StringTokenizer(error, "\n"); + while (tokenizer.hasMoreTokens()) { + String line = tokenizer.nextToken(); + if (line.startsWith("*sys-package-mgr*")) { + feedback(line); + } else { + throw new DriverException(error); + } + } + } + + private void verifyOutput(String output) throws DriverException { + boolean started = false; + StringTokenizer tokenizer = new StringTokenizer(output, "\n"); + while (tokenizer.hasMoreTokens()) { + String line = tokenizer.nextToken(); + if (line.startsWith("[ChildProcess]") || line.startsWith(VERIFYING)) { + feedback(line); + } else { + if (line.startsWith(JYTHON_UP)) { + started = true; + feedback(line); + } else { + throw new DriverException(output); + } + } + } + if (!started) { + throw new DriverException("start of jython failed:\n" + output); + } + } + + private String getTestScript() { + StringBuilder b = new StringBuilder(80); + b.append("import sys\n"); + b.append("print '"); + b.append(JYTHON_UP); + b.append("'\n"); + return b.toString(); + } + + private void createTestScriptFile() throws DriverException { + File file = new File(getTargetDir(), AUTOTEST_PY); + try { + FileHelper.write(file, getTestScript()); + } catch (IOException ioe) { + throw new DriverException(ioe); + } + } + + private void feedback(String line) { + System.out.println(line); + } +} Modified: trunk/installer/src/java/org/python/util/install/driver/StandaloneVerifier.java =================================================================== --- trunk/installer/src/java/org/python/util/install/driver/StandaloneVerifier.java 2008-11-05 02:56:03 UTC (rev 5543) +++ trunk/installer/src/java/org/python/util/install/driver/StandaloneVerifier.java 2008-11-05 07:30:28 UTC (rev 5544) @@ -1,90 +1,89 @@ -package org.python.util.install.driver; - -import java.io.File; -import java.io.IOException; -import java.util.Enumeration; -import java.util.jar.JarEntry; -import java.util.jar.JarFile; - -import org.python.util.install.JavaVersionTester; - -public class StandaloneVerifier extends NormalVerifier { - - public void verify() throws DriverException { - // make sure only JYTHON_JAR is in the target directory - if (getTargetDir().listFiles().length != 1) { - throw new DriverException("more than " + JYTHON_JAR + " installed"); - } - - // make sure JYTHON_JAR contains a MANIFEST and a /Lib directory - verifyJythonJar(); - - // do the jython startup verification from the superclass - super.verify(); - } - - /** - * overrides superclass method getting the command to start jython - */ - protected String[] getCommand() throws DriverException { - String parentDirName = null; - try { - parentDirName = getTargetDir().getCanonicalPath() + File.separator; - } catch (IOException ioe) { - throw new DriverException(ioe); - } - - String command[] = new String[4]; - command[0] = null; - String javaHomeString = System.getProperty(JavaVersionTester.JAVA_HOME, null); - if (javaHomeString != null) { - File javaHome = new File(javaHomeString); - if (javaHome.exists()) { - try { - command[0] = javaHome.getCanonicalPath() + File.separator + "bin" + File.separator + "java"; - } catch (IOException ioe) { - throw new DriverException(ioe); - } - } - } - if (command[0] == null) { - command[0] = "java"; - } - command[1] = "-jar"; - command[2] = parentDirName + JYTHON_JAR; - command[3] = parentDirName + AUTOTEST_PY; - return command; - } - - private void verifyJythonJar() throws DriverException { - File jythonJar = getTargetDir().listFiles()[0]; - JarFile jar = null; - try { - jar = new JarFile(jythonJar); - if (jar.getManifest() == null) { - throw new DriverException(JYTHON_JAR + " contains no MANIFEST"); - } - boolean hasLibDir = false; - Enumeration entries = jar.entries(); - while (!hasLibDir && entries.hasMoreElements()) { - JarEntry entry = (JarEntry) entries.nextElement(); - if (entry.getName().startsWith("Lib/")) { - hasLibDir = true; - } - } - if (!hasLibDir) { - throw new DriverException(JYTHON_JAR + " contains no /Lib directory"); - } - } catch (IOException e) { - throw new DriverException(e); - } finally { - if (jar != null) { - try { - jar.close(); - } catch (IOException ioe) { - } - } - } - } - -} +package org.python.util.install.driver; + +import java.io.File; +import java.io.IOException; +import java.util.Enumeration; +import java.util.jar.JarEntry; +import java.util.jar.JarFile; + +import org.python.util.install.JavaVersionTester; + +public class StandaloneVerifier extends NormalVerifier { + + public void verify() throws DriverException { + // make sure only JYTHON_JAR is in the target directory + if (getTargetDir().listFiles().length > 1) { + throw new DriverException("more than " + JYTHON_JAR + " installed"); + } + // make sure JYTHON_JAR contains a MANIFEST and a /Lib directory + verifyJythonJar(); + // do the jython startup verification from the superclass + super.verify(); + } + + @Override + protected String[] getSimpleCommand() throws DriverException { + String parentDirName = null; + try { + parentDirName = getTargetDir().getCanonicalPath() + File.separator; + } catch (IOException ioe) { + throw new DriverException(ioe); + } + String command[] = new String[4]; + command[0] = null; + String javaHomeString = System.getProperty(JavaVersionTester.JAVA_HOME, null); + if (javaHomeString != null) { + File javaHome = new File(javaHomeString); + if (javaHome.exists()) { + try { + command[0] = javaHome.getCanonicalPath() + File.separator + "bin" + + File.separator + "java"; + } catch (IOException ioe) { + throw new DriverException(ioe); + } + } + } + if (command[0] == null) { + command[0] = "java"; + } + command[1] = "-jar"; + command[2] = parentDirName + JYTHON_JAR; + command[3] = parentDirName + AUTOTEST_PY; + return command; + } + + @Override + protected boolean doShellScriptTests() { + return false; + } + + private void verifyJythonJar() throws DriverException { + File jythonJar = getTargetDir().listFiles()[0]; + JarFile jar = null; + try { + jar = new JarFile(jythonJar); + if (jar.getManifest() == null) { + throw new DriverException(JYTHON_JAR + " contains no MANIFEST"); + } + boolean hasLibDir = false; + Enumeration<JarEntry> entries = jar.entries(); + while (!hasLibDir && entries.hasMoreElements()) { + JarEntry entry = (JarEntry)entries.nextElement(); + if (entry.getName().startsWith("Lib/")) { + hasLibDir = true; + } + } + if (!hasLibDir) { + throw new DriverException(JYTHON_JAR + " contains no /Lib directory"); + } + } catch (IOException e) { + throw new DriverException(e); + } finally { + if (jar != null) { + try { + jar.close(); + } catch (IOException ioe) {} + } + } + } +} Added: trunk/installer/src/java/org/python/util/install/driver/jython_test.bat.template =================================================================== --- trunk/installer/src/java/org/python/util/install/driver/jython_test.bat.template (rev 0) +++ trunk/installer/src/java/org/python/util/install/driver/jython_test.bat.template 2008-11-05 07:30:28 UTC (rev 5544) @@ -0,0 +1,43 @@ +@echo off + +rem 3 variables to be set from the caller, UNquoted: +set _INSTALL_DIR={0} +set _SCRIPT={1} +set _JAVA_HOME={2} + +rem save old home env vars: +set _OLD_JAVA_HOME=%JAVA_HOME% +set _OLD_JYTHON_HOME=%JYTHON_HOME% + +cd /d "%_INSTALL_DIR%\bin" + +echo {3}: only JAVA_HOME, quoted: +set JAVA_HOME="%_JAVA_HOME%" +set JYTHON_HOME= +call jython.bat "%_SCRIPT%" +set E=%ERRORLEVEL% + +echo {3}: only JAVA_HOME, UNquoted: +set JAVA_HOME=%_JAVA_HOME% +set JYTHON_HOME= +call jython.bat "%_SCRIPT%" +set E=%ERRORLEVEL% + +echo {3}: both homes quoted: +set JAVA_HOME="%_JAVA_HOME%" +set JYTHON_HOME="%_INSTALL_DIR%" +call jython.bat "%_SCRIPT%" +set E=%ERRORLEVEL% + +rem this exposes the last part of issue 1125 +rem echo "{3}: both homes UNquoted:" +rem set JAVA_HOME=%_JAVA_HOME% +rem set JYTHON_HOME=%_INSTALL_DIR% +rem call jython.bat "%_SCRIPT%" +rem set E=%ERRORLEVEL% + +rem cleanup: +set JAVA_HOME=%_OLD_JAVA_HOME% +set JYTHON_HOME=%_OLD_JYTHON_HOME% +cd /d "%~dp0%" +exit /b %E% Added: trunk/installer/src/java/org/python/util/install/driver/jython_test.template =================================================================== --- trunk/installer/src/java/org/python/util/install/driver/jython_test.template (rev 0) +++ trunk/installer/src/java/org/python/util/install/driver/jython_test.template 2008-11-05 07:30:28 UTC (rev 5544) @@ -0,0 +1,30 @@ +# 3 variables to be set from the caller (unquoted) -> quoted in here: +_INSTALL_DIR="{0}" +_SCRIPT="{1}" +_JAVA_HOME="{2}" + +# save old home env vars: +_OLD_JAVA_HOME=$JAVA_HOME +_OLD_JYTHON_HOME=$JYTHON_HOME + +cd "$_INSTALL_DIR/bin" + +# auto detection of JYTHON_HOME does not yet work +#echo "{3}: only JAVA_HOME:" +#export JAVA_HOME="$_JAVA_HOME" +#export JYTHON_HOME= +#./jython "$_SCRIPT" + +echo "{3}: only JYTHON_HOME:" +export JAVA_HOME= +export JYTHON_HOME="$_INSTALL_DIR" +./jython "$_SCRIPT" + +echo "{3}: both homes:" +export JAVA_HOME="$_JAVA_HOME" +export JYTHON_HOME="$_INSTALL_DIR" +./jython "$_SCRIPT" + +# cleanup: +export JAVA_HOME=$_OLD_JAVA_HOME +export JYTHON_HOME=$_OLD_JYTHON_HOME Added: trunk/installer/test/java/org/python/util/install/FileHelperTest.java =================================================================== --- trunk/installer/test/java/org/python/util/install/FileHelperTest.java (rev 0) +++ trunk/installer/test/java/org/python/util/install/FileHelperTest.java 2008-11-05 07:30:28 UTC (rev 5544) @@ -0,0 +1,271 @@ +package org.python.util.install; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.URI; +import java.net.URL; + +import junit.framework.TestCase; +import junit.runner.TestSuiteLoader; + +import org.python.util.install.driver.Autotest; + +public class FileHelperTest extends TestCase { + + private static final String JYTHON_TEST_TEMPLATE = "jython_test.template"; + + private static final String LOGO_GIF = "logo.gif"; + + private static final String JYTHON_SMALL_C_PNG = "jython_small_c.png"; + + public void testCreateTempDirectory_WasFile() throws IOException { + File file = File.createTempFile("some_prefix", ""); + assertTrue(file.exists()); + assertTrue(file.isFile()); + assertTrue(FileHelper.createTempDirectory(file)); + assertTrue(file.exists()); + assertTrue(file.isDirectory()); + } + + public void testCreateTempDirectory_AlreadyPresent() throws IOException { + File dir = new File(System.getProperty("user.dir")); + assertTrue(dir.exists()); + assertTrue(dir.isDirectory()); + assertTrue(FileHelper.createTempDirectory(dir)); + assertTrue(dir.exists()); + assertTrue(dir.isDirectory()); + } + + public void testCreateTempDirectory() throws IOException { + File dir = new File(System.getProperty("user.dir")); + assertTrue(dir.exists()); + assertTrue(dir.isDirectory()); + File tmpDir = new File(dir, "tmp"); + assertFalse(tmpDir.exists()); + try { + assertTrue(FileHelper.createTempDirectory(tmpDir)); + assertTrue(tmpDir.exists()); + assertTrue(dir.isDirectory()); + } finally { + if (tmpDir.exists()) { + assertTrue(tmpDir.delete()); + } + } + } + + public void testCreateTempDirectory_Failure() throws Exception { + File dir = new File(System.getProperty("user.dir")); + assertTrue(dir.exists()); + assertTrue(dir.isDirectory()); + File tmpFile = new File(dir, "tmpFailure"); + assertFalse(tmpFile.exists()); + try { + tmpFile.createNewFile(); + assertTrue(tmpFile.exists()); + assertTrue(tmpFile.isFile()); + Lock lock = null; + try { + lock = new Lock(tmpFile); + boolean created = FileHelper.createTempDirectory(tmpFile); + if (Installation.isWindows()) { + // locking currently only effective on windows + assertFalse(created); + } else { + // change if there is a locking mechanism + assertTrue(created); + } + } finally { + if (lock != null) { + lock.release(); + } + } + } finally { + if (tmpFile.exists()) { + assertTrue(tmpFile.delete()); + } + } + } + + public void testRmdir() throws IOException { + File dir = new File(System.getProperty("java.io.tmpdir"), "StartScriptGeneratorTest"); + if (!dir.exists()) { + assertTrue(dir.mkdirs()); + } + File bin = new File(dir, "bin"); + if (!bin.exists()) { + assertTrue(bin.mkdirs()); + } + File jython = new File(bin, "jython"); + if (!jython.exists()) { + assertTrue(jython.createNewFile()); + } + File jython_bat = new File(bin, "jython.bat"); + if (!jython_bat.exists()) { + assertTrue(jython_bat.createNewFile()); + } + assertTrue(FileHelper.rmdir(dir)); + } + + public void testRmdir_Failure() throws Exception { + File dir = new File(System.getProperty("java.io.tmpdir"), "StartScriptGeneratorTest"); + if (!dir.exists()) { + assertTrue(dir.mkdirs()); + } + File bin = new File(dir, "bin"); + if (!bin.exists()) { + assertTrue(bin.mkdirs()); + } + File jython = new File(bin, "jython"); + if (!jython.exists()) { + assertTrue(jython.createNewFile()); + } + File jython_bat = new File(bin, "jython.bat"); + if (!jython_bat.exists()) { + assertTrue(jython_bat.createNewFile()); + } + Lock lock = null; + try { + lock = new Lock(jython_bat); + boolean removed = FileHelper.rmdir(dir); + if (Installation.isWindows()) { + // locking currently only effective on windows + assertFalse(removed); + } else { + // change if there is a locking mechanism + assertTrue(removed); + } + } finally { + if (lock != null) { + lock.release(); + } + assertTrue(FileHelper.rmdir(dir)); + } + } + + public void testReadAll() throws Exception { + File file = File.createTempFile("testReadAll", ""); + final String contents = new String("line1 \n line2 \n"); + FileHelper.write(file, contents); + String readContents = FileHelper.readAll(file); + assertEquals(contents, readContents); + } + + public void testReadAll_InputStream() throws Exception { + URL url = FileHelper.getRelativeURL(Autotest.class, JYTHON_TEST_TEMPLATE); + assertNotNull(url); + URI uri = new URI(url.toString()); + File file = new File(uri); + assertNotNull(file); + assertTrue(file.exists()); + String expectedContents = FileHelper.readAll(file); + InputStream is = FileHelper.getRelativeURLAsStream(Autotest.class, JYTHON_TEST_TEMPLATE); + assertNotNull(is); + String contents = FileHelper.readAll(is); + assertEquals(expectedContents, contents); + // now from a .jar + is = FileHelper.getRelativeURLAsStream(TestSuiteLoader.class, LOGO_GIF); + assertNotNull(is); + contents = FileHelper.readAll(is); + assertNotNull(contents); + assertEquals(964, contents.length()); + assertTrue(contents.startsWith("GIF89a&")); + } + + public void testReadAll_NonExisting() { + String readContents = null; + try { + readContents = FileHelper.readAll(new File("_non_existing")); + fail("FileNotFoundException expected"); + } catch (IOException e) { + assertNull(readContents); + } + } + + public void testGetRelativeURL() { + URL url = FileHelper.getRelativeURL(Installation.class, JYTHON_SMALL_C_PNG); + assertNotNull(url); + assertTrue(url.getPath().endsWith("org/python/util/install/".concat(JYTHON_SMALL_C_PNG))); + // now from a .jar + ... [truncated message content] |
From: <otm...@us...> - 2008-11-11 23:25:28
|
Revision: 5571 http://jython.svn.sourceforge.net/jython/?rev=5571&view=rev Author: otmarhumbel Date: 2008-11-11 23:25:25 +0000 (Tue, 11 Nov 2008) Log Message: ----------- detect JYTHON_HOME if called from the /bin directory Modified Paths: -------------- trunk/installer/src/java/org/python/util/install/driver/jython_test.template trunk/jython/src/shell/jython Modified: trunk/installer/src/java/org/python/util/install/driver/jython_test.template =================================================================== --- trunk/installer/src/java/org/python/util/install/driver/jython_test.template 2008-11-11 17:48:27 UTC (rev 5570) +++ trunk/installer/src/java/org/python/util/install/driver/jython_test.template 2008-11-11 23:25:25 UTC (rev 5571) @@ -8,15 +8,21 @@ # save old home env vars: _OLD_JAVA_HOME=$JAVA_HOME _OLD_JYTHON_HOME=$JYTHON_HOME +# save current dir +_CURDIR=`pwd` cd "$_INSTALL_DIR/bin" -# auto detection of JYTHON_HOME does not yet work -#echo "{3}: only JAVA_HOME:" -#export JAVA_HOME="$_JAVA_HOME" -#export JYTHON_HOME= -#./jython "$_SCRIPT" +echo "{3}: no home:" +export JAVA_HOME= +export JYTHON_HOME= +./jython "$_SCRIPT" +echo "{3}: only JAVA_HOME:" +export JAVA_HOME="$_JAVA_HOME" +export JYTHON_HOME= +./jython "$_SCRIPT" + echo "{3}: only JYTHON_HOME:" export JAVA_HOME= export JYTHON_HOME="$_INSTALL_DIR" @@ -27,6 +33,14 @@ export JYTHON_HOME="$_INSTALL_DIR" ./jython "$_SCRIPT" +cd ~ + +echo "{3}: no home, calling from another working dir:" +export JAVA_HOME= +export JYTHON_HOME= +"$_INSTALL_DIR/bin/jython" "$_SCRIPT" + # cleanup: +cd "$_CURDIR" export JAVA_HOME=$_OLD_JAVA_HOME export JYTHON_HOME=$_OLD_JYTHON_HOME Modified: trunk/jython/src/shell/jython =================================================================== --- trunk/jython/src/shell/jython 2008-11-11 17:48:27 UTC (rev 5570) +++ trunk/jython/src/shell/jython 2008-11-11 23:25:25 UTC (rev 5571) @@ -44,8 +44,15 @@ fi if [ -z "$JYTHON_HOME" ] ; then - JYTHON_HOME_1=`dirname "$PRG"` # the ./bin dir - JYTHON_HOME=`dirname "$JYTHON_HOME_1"` # the . dir + if [ "$PRG" = "./jython" ] ; then + # current dir is /bin dir + JYTHON_HOME_1=`pwd` # the ./bin dir + JYTHON_HOME=`dirname "$JYTHON_HOME_1"` # the . dir + else + # current dir is not /bin dir + JYTHON_HOME_1=`dirname "$PRG"` # the ./bin dir + JYTHON_HOME=`dirname "$JYTHON_HOME_1"` # the . dir + fi fi if [ -z "$JYTHON_OPTS" ] ; then This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <otm...@us...> - 2008-11-25 14:12:03
|
Revision: 5639 http://jython.svn.sourceforge.net/jython/?rev=5639&view=rev Author: otmarhumbel Date: 2008-11-25 14:11:53 +0000 (Tue, 25 Nov 2008) Log Message: ----------- to enable virtualenv again: do not hardcode JYTHON_HOME this fixes issue #1180 Modified Paths: -------------- trunk/installer/src/java/org/python/util/install/StartScriptGenerator.java trunk/installer/src/java/org/python/util/install/driver/jython_test.bat.template trunk/installer/src/java/org/python/util/install/driver/jython_test.template trunk/installer/test/java/org/python/util/install/StartScriptGeneratorTest.java trunk/jython/src/shell/jython trunk/jython/src/shell/jython.bat Modified: trunk/installer/src/java/org/python/util/install/StartScriptGenerator.java =================================================================== --- trunk/installer/src/java/org/python/util/install/StartScriptGenerator.java 2008-11-25 14:00:26 UTC (rev 5638) +++ trunk/installer/src/java/org/python/util/install/StartScriptGenerator.java 2008-11-25 14:11:53 UTC (rev 5639) @@ -15,6 +15,11 @@ protected final static String WIN_CR_LF; + private final static String JAVA_HOME = "JAVA_HOME"; + + /** do not hard-wire JYTHON_HOME */ + private final static String JYTHON_HOME_FALLBACK = "JYTHON_HOME_FALLBACK"; + private final static String JYTHON = "jython"; private final static String JYTHON_BAT = "jython.bat"; @@ -128,11 +133,17 @@ * @see getStartScript */ private String getWindowsJythonTemplate() { - StringBuffer buffer = getWindowsHeaderTemplate(); - buffer.append("set JAVA_HOME=\"{2}\"" + WIN_CR_LF); - buffer.append("set JYTHON_HOME=\"{3}\"" + WIN_CR_LF); - buffer.append(WIN_CR_LF); - return buffer.toString(); + StringBuilder builder = getWindowsHeaderTemplate(); + builder.append("set "); + builder.append(JAVA_HOME); + builder.append("=\"{2}\""); + builder.append(WIN_CR_LF); + builder.append("set "); + builder.append(JYTHON_HOME_FALLBACK); + builder.append("=\"{3}\""); + builder.append(WIN_CR_LF); + builder.append(WIN_CR_LF); + return builder.toString(); } /** @@ -140,13 +151,16 @@ * * @see getStartScript */ - private StringBuffer getWindowsHeaderTemplate() { - StringBuffer buffer = new StringBuffer(1000); - buffer.append("@echo off" + WIN_CR_LF); - buffer.append("rem This file was generated by the Jython installer" + WIN_CR_LF); - buffer.append("rem Created on {0} by {1}" + WIN_CR_LF); - buffer.append(WIN_CR_LF); - return buffer; + private StringBuilder getWindowsHeaderTemplate() { + StringBuilder builder = new StringBuilder(1000); + builder.append("@echo off"); + builder.append(WIN_CR_LF); + builder.append("rem This file was generated by the Jython installer"); + builder.append(WIN_CR_LF); + builder.append("rem Created on {0} by {1}"); + builder.append(WIN_CR_LF); + builder.append(WIN_CR_LF); + return builder; } /** @@ -155,11 +169,13 @@ * @see getStartScript */ private String getUnixJythonTemplate() { - StringBuffer buffer = getUnixHeaderTemplate(); - buffer.append("JAVA_HOME=\"{2}\"\n"); - buffer.append("JYTHON_HOME=\"{3}\"\n"); - buffer.append("\n"); - return buffer.toString(); + StringBuilder builder = getUnixHeaderTemplate(); + builder.append(JAVA_HOME); + builder.append("=\"{2}\"\n"); + builder.append(JYTHON_HOME_FALLBACK); + builder.append("=\"{3}\"\n"); + builder.append("\n"); + return builder.toString(); } /** @@ -167,14 +183,14 @@ * * @see getStartScript */ - private StringBuffer getUnixHeaderTemplate() { - StringBuffer buffer = new StringBuffer(1000); - buffer.append("#!/usr/bin/env bash\n"); - buffer.append("\n"); - buffer.append("# This file was generated by the Jython installer\n"); - buffer.append("# Created on {0} by {1}\n"); - buffer.append("\n"); - return buffer; + private StringBuilder getUnixHeaderTemplate() { + StringBuilder builder = new StringBuilder(1000); + builder.append("#!/usr/bin/env bash\n"); + builder.append("\n"); + builder.append("# This file was generated by the Jython installer\n"); + builder.append("# Created on {0} by {1}\n"); + builder.append("\n"); + return builder; } /** Modified: trunk/installer/src/java/org/python/util/install/driver/jython_test.bat.template =================================================================== --- trunk/installer/src/java/org/python/util/install/driver/jython_test.bat.template 2008-11-25 14:00:26 UTC (rev 5638) +++ trunk/installer/src/java/org/python/util/install/driver/jython_test.bat.template 2008-11-25 14:11:53 UTC (rev 5639) @@ -35,6 +35,28 @@ call jython.bat "%_SCRIPT%" set E=%ERRORLEVEL% +cd .. + +echo {3}: no home, calling in home dir: +set JAVA_HOME= +set JYTHON_HOME= +call jython.bat "%_SCRIPT%" +set E=%ERRORLEVEL% + +cd .. + +echo {3}: no home, calling /jython.bat from another working dir:" +set JAVA_HOME= +set JYTHON_HOME= +call "%_INSTALL_DIR%\jython.bat" "%_SCRIPT%" +set E=%ERRORLEVEL% + +echo {3}: no home, calling bin/jython.bat from another working dir:" +set JAVA_HOME= +set JYTHON_HOME= +call "%_INSTALL_DIR%\bin\jython.bat" "%_SCRIPT%" +set E=%ERRORLEVEL% + rem cleanup: set JAVA_HOME=%_OLD_JAVA_HOME% set JYTHON_HOME=%_OLD_JYTHON_HOME% Modified: trunk/installer/src/java/org/python/util/install/driver/jython_test.template =================================================================== --- trunk/installer/src/java/org/python/util/install/driver/jython_test.template 2008-11-25 14:00:26 UTC (rev 5638) +++ trunk/installer/src/java/org/python/util/install/driver/jython_test.template 2008-11-25 14:11:53 UTC (rev 5639) @@ -33,11 +33,23 @@ export JYTHON_HOME="$_INSTALL_DIR" ./jython "$_SCRIPT" +cd .. + +echo "{3}: no home, calling in home dir:" +export JAVA_HOME= +export JYTHON_HOME= +./jython "$_SCRIPT" + cd ~ -echo "{3}: no home, calling from another working dir:" +echo "{3}: no home, calling /jython from another working dir:" export JAVA_HOME= export JYTHON_HOME= +"$_INSTALL_DIR/jython" "$_SCRIPT" + +echo "{3}: no home, calling /bin/jython from another working dir:" +export JAVA_HOME= +export JYTHON_HOME= "$_INSTALL_DIR/bin/jython" "$_SCRIPT" # cleanup: Modified: trunk/installer/test/java/org/python/util/install/StartScriptGeneratorTest.java =================================================================== --- trunk/installer/test/java/org/python/util/install/StartScriptGeneratorTest.java 2008-11-25 14:00:26 UTC (rev 5638) +++ trunk/installer/test/java/org/python/util/install/StartScriptGeneratorTest.java 2008-11-25 14:11:53 UTC (rev 5639) @@ -49,7 +49,7 @@ buf.append("JAVA_HOME=\""); buf.append(System.getProperty("java.home")); buf.append("\"\n"); - buf.append("JYTHON_HOME=\""); + buf.append("JYTHON_HOME_FALLBACK=\""); buf.append(_targetDir.getAbsolutePath()); buf.append("\"\n"); // some rudimentary tests - feel free to do more @@ -59,6 +59,11 @@ assertTrue(unixScript.length() > 3500); assertTrue(unixScript.indexOf("-Dpython.home=") > start.length()); assertTrue(unixScript.indexOf("-Dpython.executable=") > start.length()); + // no hard coding of JYTHON_HOME + int jythonHomeIndex = unixScript.indexOf("if [ -z \"$JYTHON_HOME\" ] ; then"); + assertTrue(jythonHomeIndex >= 0); + int definitionIndex = unixScript.indexOf("JYTHON_HOME="); + assertTrue(definitionIndex > jythonHomeIndex || definitionIndex < 0); } public void testWindows() throws IOException { @@ -72,7 +77,7 @@ winBuf.append(System.getProperty("java.home")); winBuf.append("\""); winBuf.append(WIN_CR_LF); - winBuf.append("set JYTHON_HOME=\""); + winBuf.append("set JYTHON_HOME_FALLBACK=\""); winBuf.append(_targetDir.getAbsolutePath()); winBuf.append("\""); winBuf.append(WIN_CR_LF); @@ -84,6 +89,11 @@ assertTrue(winScript.indexOf("if not \"%_TRIMMED_JAVA_HOME%\"==\"\"") > start.length()); assertTrue(winScript.indexOf("-Dpython.home=") > start.length()); assertTrue(winScript.indexOf("-Dpython.executable=") > start.length()); + // no hard coding of JYTHON_HOME + int jythonHomeIndex = winScript.indexOf("if not \"%_TRIMMED_JYTHON_HOME%\"==\"\""); + assertTrue(jythonHomeIndex >= 0); + int definitionIndex = winScript.indexOf("set JYTHON_HOME="); + assertTrue(definitionIndex > jythonHomeIndex || definitionIndex < 0); } public void testFlavour() { Modified: trunk/jython/src/shell/jython =================================================================== --- trunk/jython/src/shell/jython 2008-11-25 14:00:26 UTC (rev 5638) +++ trunk/jython/src/shell/jython 2008-11-25 14:11:53 UTC (rev 5639) @@ -43,16 +43,24 @@ JAVA_CMD=("$JAVA_HOME/bin/java") fi +# try to dynamically determine jython home +# (this script typically resides in jython home, or in the /bin subdirectory) if [ -z "$JYTHON_HOME" ] ; then if [ "$PRG" = "./jython" ] ; then - # current dir is /bin dir - JYTHON_HOME_1=`pwd` # the ./bin dir - JYTHON_HOME=`dirname "$JYTHON_HOME_1"` # the . dir + # current dir is the script dir + JYTHON_HOME_1=`pwd` else - # current dir is not /bin dir - JYTHON_HOME_1=`dirname "$PRG"` # the ./bin dir - JYTHON_HOME=`dirname "$JYTHON_HOME_1"` # the . dir + # current dir is not the script dir + JYTHON_HOME_1=`dirname "$PRG"` fi + if [ -f "$JYTHON_HOME_1"/jython-complete.jar -o -f "$JYTHON_HOME_1"/jython.jar ] ; then + JYTHON_HOME="$JYTHON_HOME_1" + else + JYTHON_HOME=`dirname "$JYTHON_HOME_1"` + fi + if [ ! -f "$JYTHON_HOME"/jython-complete.jar -a ! -f "$JYTHON_HOME"/jython.jar ] ; then + JYTHON_HOME="$JYTHON_HOME_FALLBACK" + fi fi if [ -z "$JYTHON_OPTS" ] ; then @@ -189,7 +197,7 @@ [ -n "$profile_requested" ] && echo "Running with instrumented profiler" java_args=("${java_args[@]}" -classpath "$CP$CP_DELIMITER$CLASSPATH") else - if [ -z $help_requested ] ; then + if [ -z "$help_requested" ] ; then JAVA_CMD=(exec "${JAVA_CMD[@]}") fi java_args=("${java_args[@]}" -Xbootclasspath/a:"$CP" -classpath "$CLASSPATH") Modified: trunk/jython/src/shell/jython.bat =================================================================== --- trunk/jython/src/shell/jython.bat 2008-11-25 14:00:26 UTC (rev 5638) +++ trunk/jython/src/shell/jython.bat 2008-11-25 14:11:53 UTC (rev 5639) @@ -31,9 +31,22 @@ set _JYTHON_HOME="%_TRIMMED_JYTHON_HOME%" goto gotHome ) + +rem try to dynamically determine jython home +rem (this script typically resides in jython home, or in the /bin subdirectory) +pushd "%~dp0%" +set _JYTHON_HOME="%CD%" +popd +if exist %_JYTHON_HOME%\jython.jar goto gotHome +if exist %_JYTHON_HOME%\jython-complete.jar goto gotHome pushd "%~dp0%\.." set _JYTHON_HOME="%CD%" popd +if exist %_JYTHON_HOME%\jython.jar goto gotHome +if exist %_JYTHON_HOME%\jython-complete.jar goto gotHome +rem jython home fallback (if all else fails) +rem if present, %JYTHON_HOME_FALLBACK% is already quoted +set _JYTHON_HOME=%JYTHON_HOME_FALLBACK% :gotHome if not exist %_JYTHON_HOME%\jython.jar goto tryComplete @@ -49,7 +62,7 @@ if exist %_JYTHON_HOME%/jython-complete.jar goto run echo Cannot find jython.jar or jython-complete.jar in %_JYTHON_HOME% -echo Try running this batch file from the 'bin' directory of an installed Jython +echo Try running this batch file from the 'bin' directory of an installed Jython, echo or setting JYTHON_HOME. goto cleanup This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <otm...@us...> - 2009-01-08 22:54:12
|
Revision: 5893 http://jython.svn.sourceforge.net/jython/?rev=5893&view=rev Author: otmarhumbel Date: 2009-01-08 22:54:04 +0000 (Thu, 08 Jan 2009) Log Message: ----------- rename the jython*.jar files: jython.jar is now called jython-dev.jar jython-complete.jar is now called jython.jar the one we distribute is jython.jar, containing the necessary external libraries, mangled jython-dev.jar is intended for local developer usage, containing no external libraries, referencing the real external package names Modified Paths: -------------- trunk/installer/src/java/org/python/util/install/JarInstaller.java trunk/installer/test/java/org/python/util/install/driver/StandaloneVerifierTest.java trunk/jython/bugtests/README.txt trunk/jython/bugtests/test386.py trunk/jython/bugtests/test394.py trunk/jython/bugtests/test394jar/MANIFEST.MF trunk/jython/build.xml trunk/jython/src/org/python/core/PySystemState.java trunk/jython/src/org/python/util/JythoncAntTask.java trunk/jython/src/shell/jython trunk/jython/src/shell/jython.bat Modified: trunk/installer/src/java/org/python/util/install/JarInstaller.java =================================================================== --- trunk/installer/src/java/org/python/util/install/JarInstaller.java 2009-01-08 22:05:28 UTC (rev 5892) +++ trunk/installer/src/java/org/python/util/install/JarInstaller.java 2009-01-08 22:54:04 UTC (rev 5893) @@ -18,7 +18,7 @@ */ public class JarInstaller { - public static final String JYTHON_JAR = "jython-complete.jar"; + public static final String JYTHON_JAR = "jython.jar"; private static final String PATH_SEPARATOR = "/"; Modified: trunk/installer/test/java/org/python/util/install/driver/StandaloneVerifierTest.java =================================================================== --- trunk/installer/test/java/org/python/util/install/driver/StandaloneVerifierTest.java 2009-01-08 22:05:28 UTC (rev 5892) +++ trunk/installer/test/java/org/python/util/install/driver/StandaloneVerifierTest.java 2009-01-08 22:54:04 UTC (rev 5893) @@ -3,6 +3,7 @@ import java.io.File; import org.python.util.install.Installation; +import org.python.util.install.JarInstaller; import junit.framework.TestCase; @@ -58,7 +59,7 @@ assertEquals(4, command.length); assertEquals(expectedCommand, command[0]); assertEquals("-jar", command[1]); - assertEquals(prefix.concat("jython-complete.jar"), command[2]); + assertEquals(prefix.concat(JarInstaller.JYTHON_JAR), command[2]); assertEquals(expectedArgument, command[3]); } Modified: trunk/jython/bugtests/README.txt =================================================================== --- trunk/jython/bugtests/README.txt 2009-01-08 22:05:28 UTC (rev 5892) +++ trunk/jython/bugtests/README.txt 2009-01-08 22:54:04 UTC (rev 5893) @@ -24,7 +24,7 @@ ----- java_home = "/Library/Java/Home" jython_home = "/Users/bzimmer/Development/sourceforge/jython/dist" -classpath = jython_home + "/jython.jar:classes" +classpath = jython_home + "/jython-dev.jar:classes" ----- Run the script "driver.py". Modified: trunk/jython/bugtests/test386.py =================================================================== --- trunk/jython/bugtests/test386.py 2009-01-08 22:05:28 UTC (rev 5892) +++ trunk/jython/bugtests/test386.py 2009-01-08 22:54:04 UTC (rev 5893) @@ -11,7 +11,7 @@ from java.io import File TESTDIR = "test386jar" -JYTHON_JAR = "jython.jar" +JYTHON_DEV_JAR = "jython-dev.jar" TEST_PY_NAME = TESTDIR +"/test386called.py" def checkTestDir(): @@ -21,11 +21,11 @@ raise AssertionError, TEST_PY_NAME + " does not exist" # create a jython standalone jar file: -# add the contents of jython.jar and /Lib files to an new jython.jar +# add the contents of jython-dev.jar and /Lib files to a new jython-dev.jar def mkjar(): - jarFile = File(TESTDIR, JYTHON_JAR) + jarFile = File(TESTDIR, JYTHON_DEV_JAR) jarPacker = support.JarPacker(jarFile) - jarPacker.addJarFile(File(cfg.jython_home + "/%s" % JYTHON_JAR)) + jarPacker.addJarFile(File(cfg.jython_home + "/%s" % JYTHON_DEV_JAR)) jarPacker.addDirectory(File(cfg.jython_home + "/Lib")) jarPacker.close() return jarFile @@ -33,5 +33,5 @@ checkTestDir() mkjar() -jarFileName = "%s/%s" % (TESTDIR, JYTHON_JAR) +jarFileName = "%s/%s" % (TESTDIR, JYTHON_DEV_JAR) support.runJavaJar(jarFileName, TEST_PY_NAME) \ No newline at end of file Modified: trunk/jython/bugtests/test394.py =================================================================== --- trunk/jython/bugtests/test394.py 2009-01-08 22:05:28 UTC (rev 5892) +++ trunk/jython/bugtests/test394.py 2009-01-08 22:54:04 UTC (rev 5893) @@ -7,7 +7,7 @@ error importing site Traceback (innermost last): - File "C:\workspace\jython\bugtests\test394jar\jython.jar\Lib/site.py", line 210, in ? + File "C:\workspace\jython\bugtests\test394jar\jython-dev.jar\Lib/site.py", line 210, in ? TypeError: unsupported operand type(s) for +: 'NoneType' and 'str' Traceback (innermost last): File "C:/workspace/jython/bugtests/test394.py", line 71, in ? @@ -26,7 +26,7 @@ from java.io import File TESTDIR = "test394jar" -JYTHON_JAR = "jython.jar" +JYTHON_DEV_JAR = "jython-dev.jar" RUN_JAR = "run.jar" TEST_PY_NAME = TESTDIR +"/test394called.py" CLAZZ = "Runner" @@ -46,11 +46,11 @@ # create a jython standalone jar file: -# add the contents of jython.jar and /Lib files to an new jython.jar +# add the contents of jython-dev.jar and /Lib files to a new jython-dev.jar def mkJythonJar(): - jarFile = File(TESTDIR, JYTHON_JAR) + jarFile = File(TESTDIR, JYTHON_DEV_JAR) jarPacker = support.JarPacker(jarFile) - jarPacker.addJarFile(File(cfg.jython_home + "/%s" % JYTHON_JAR)) + jarPacker.addJarFile(File(cfg.jython_home + "/%s" % JYTHON_DEV_JAR)) jarPacker.addDirectory(File(cfg.jython_home + "/Lib")) jarPacker.close() return jarFile @@ -59,7 +59,7 @@ def mkJavaClass(): support.compileJava("%s/%s.java" % (TESTDIR, CLAZZ)) -# create a runnable jar file with a manifest referring to jython.jar +# create a runnable jar file with a manifest referring to jython-dev.jar def mkRunJar(): jarFile = File(TESTDIR, RUN_JAR) manifestFile = File(TESTDIR, MANIFEST) Modified: trunk/jython/bugtests/test394jar/MANIFEST.MF =================================================================== --- trunk/jython/bugtests/test394jar/MANIFEST.MF 2009-01-08 22:05:28 UTC (rev 5892) +++ trunk/jython/bugtests/test394jar/MANIFEST.MF 2009-01-08 22:54:04 UTC (rev 5893) @@ -1,4 +1,4 @@ Manifest-Version: 1.0 -Class-Path: . jython.jar +Class-Path: . jython-dev.jar Main-Class: test394jar.Runner Modified: trunk/jython/build.xml =================================================================== --- trunk/jython/build.xml 2009-01-08 22:05:28 UTC (rev 5892) +++ trunk/jython/build.xml 2009-01-08 22:54:04 UTC (rev 5893) @@ -172,8 +172,8 @@ <!-- 64 bit Java 6 needs roughly 96m for regrtest on most platforms, but Apple's needs more --> <property name="regrtest.Xmx" value="-Xmx160m" /> - <property name="jython.dev.jar" value="jython.jar" /> - <property name="jython.deploy.jar" value="jython-complete.jar" /> + <property name="jython.dev.jar" value="jython-dev.jar" /> + <property name="jython.deploy.jar" value="jython.jar" /> </target> <target name="version-init"> @@ -804,6 +804,7 @@ <java classname="org.python.util.jython" fork="true" dir="${bugtests.dir}"> <classpath> <pathelement location="${dist.dir}/${jython.dev.jar}"/> + <fileset dir="${dist.dir}/javalib"/> </classpath> <jvmarg value="-Dpython.home=${dist.dir}"/> <arg value="driver.py"/> Modified: trunk/jython/src/org/python/core/PySystemState.java =================================================================== --- trunk/jython/src/org/python/core/PySystemState.java 2009-01-08 22:05:28 UTC (rev 5892) +++ trunk/jython/src/org/python/core/PySystemState.java 2009-01-08 22:54:04 UTC (rev 5893) @@ -34,7 +34,7 @@ protected static final String CACHEDIR_DEFAULT_NAME = "cachedir"; public static final String JYTHON_JAR = "jython.jar"; - public static final String JYTHON_COMPLETE_JAR = "jython-complete.jar"; + public static final String JYTHON_DEV_JAR = "jython-dev.jar"; private static final String JAR_URL_PREFIX = "jar:file:"; private static final String JAR_SEPARATOR = "!"; @@ -490,9 +490,9 @@ String classpath = preProperties.getProperty("java.class.path"); if (classpath != null) { String lowerCaseClasspath = classpath.toLowerCase(); - int jarIndex = lowerCaseClasspath.indexOf(JYTHON_COMPLETE_JAR); + int jarIndex = lowerCaseClasspath.indexOf(JYTHON_JAR); if (jarIndex < 0) { - jarIndex = lowerCaseClasspath.indexOf(JYTHON_JAR); + jarIndex = lowerCaseClasspath.indexOf(JYTHON_DEV_JAR); } if (jarIndex >= 0) { int start = classpath.lastIndexOf(java.io.File.pathSeparator, jarIndex) + 1; Modified: trunk/jython/src/org/python/util/JythoncAntTask.java =================================================================== --- trunk/jython/src/org/python/util/JythoncAntTask.java 2009-01-08 22:05:28 UTC (rev 5892) +++ trunk/jython/src/org/python/util/JythoncAntTask.java 2009-01-08 22:54:04 UTC (rev 5893) @@ -59,6 +59,7 @@ import org.apache.tools.ant.taskdefs.Java; import org.apache.tools.ant.types.Path; import org.apache.tools.ant.DirectoryScanner; +import org.python.core.PySystemState; import java.io.File; @@ -414,7 +415,7 @@ javaTask.createJvmarg().setValue( "-Dpython.home=" + getPythonHome() ); // classpath - File aJythonJarFile = new File(getPythonHome(), "jython.jar" ); + File aJythonJarFile = new File(getPythonHome(), PySystemState.JYTHON_JAR ); createClasspath().setLocation(aJythonJarFile); javaTask.setClasspath(classpath); Modified: trunk/jython/src/shell/jython =================================================================== --- trunk/jython/src/shell/jython 2009-01-08 22:05:28 UTC (rev 5892) +++ trunk/jython/src/shell/jython 2009-01-08 22:54:04 UTC (rev 5893) @@ -53,12 +53,12 @@ # current dir is not the script dir JYTHON_HOME_1=`dirname "$PRG"` fi - if [ -f "$JYTHON_HOME_1"/jython-complete.jar -o -f "$JYTHON_HOME_1"/jython.jar ] ; then + if [ -f "$JYTHON_HOME_1"/jython.jar -o -f "$JYTHON_HOME_1"/jython-dev.jar ] ; then JYTHON_HOME="$JYTHON_HOME_1" else JYTHON_HOME=`dirname "$JYTHON_HOME_1"` fi - if [ ! -f "$JYTHON_HOME"/jython-complete.jar -a ! -f "$JYTHON_HOME"/jython.jar ] ; then + if [ ! -f "$JYTHON_HOME"/jython.jar -a ! -f "$JYTHON_HOME"/jython-dev.jar ] ; then JYTHON_HOME="$JYTHON_HOME_FALLBACK" fi fi @@ -69,7 +69,7 @@ CP_DELIMITER=":" -CP=$JYTHON_HOME/jython.jar +CP=$JYTHON_HOME/jython-dev.jar if [ -f "$CP" ] ; then # add necessary jars for command-line execution @@ -80,13 +80,13 @@ CP="$j" fi done -elif [ ! -f "$JYTHON_HOME"/jython-complete.jar ] ; then - echo "$0: $JYTHON_HOME contains neither jython.jar nor jython-complete.jar." >&2 +elif [ ! -f "$JYTHON_HOME"/jython.jar ] ; then + echo "$0: $JYTHON_HOME contains neither jython-dev.jar nor jython.jar." >&2 echo "Try running this script from the 'bin' directory of an installed Jython or " >&2 echo 'setting $JYTHON_HOME.' >&2 exit 1 else - CP=$JYTHON_HOME/jython-complete.jar + CP=$JYTHON_HOME/jython.jar fi if $cygwin; then Modified: trunk/jython/src/shell/jython.bat =================================================================== --- trunk/jython/src/shell/jython.bat 2009-01-08 22:05:28 UTC (rev 5892) +++ trunk/jython/src/shell/jython.bat 2009-01-08 22:54:04 UTC (rev 5893) @@ -44,31 +44,31 @@ pushd "%~dp0%" set _JYTHON_HOME="%CD%" popd +if exist %_JYTHON_HOME%\jython-dev.jar goto gotHome if exist %_JYTHON_HOME%\jython.jar goto gotHome -if exist %_JYTHON_HOME%\jython-complete.jar goto gotHome pushd "%~dp0%\.." set _JYTHON_HOME="%CD%" popd +if exist %_JYTHON_HOME%\jython-dev.jar goto gotHome if exist %_JYTHON_HOME%\jython.jar goto gotHome -if exist %_JYTHON_HOME%\jython-complete.jar goto gotHome rem jython home fallback (if all else fails) rem if present, %JYTHON_HOME_FALLBACK% is already quoted set _JYTHON_HOME=%JYTHON_HOME_FALLBACK% :gotHome -if not exist %_JYTHON_HOME%\jython.jar goto tryComplete +if not exist %_JYTHON_HOME%\jython-dev.jar goto tryComplete rem prefer built version -set _CP=%_JYTHON_HOME%\jython.jar +set _CP=%_JYTHON_HOME%\jython-dev.jar for %%j in (%_JYTHON_HOME%\javalib\*.jar) do ( set _CP=!_CP!;"%%j" ) goto run :tryComplete -set _CP=%_JYTHON_HOME%\jython-complete.jar -if exist %_JYTHON_HOME%/jython-complete.jar goto run +set _CP=%_JYTHON_HOME%\jython.jar +if exist %_JYTHON_HOME%/jython.jar goto run -echo Cannot find jython.jar or jython-complete.jar in %_JYTHON_HOME% +echo Cannot find jython-dev.jar or jython.jar in %_JYTHON_HOME% echo Try running this batch file from the 'bin' directory of an installed Jython, echo or setting JYTHON_HOME. goto cleanup This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <otm...@us...> - 2009-01-18 13:46:22
|
Revision: 5946 http://jython.svn.sourceforge.net/jython/?rev=5946&view=rev Author: otmarhumbel Date: 2009-01-18 13:46:12 +0000 (Sun, 18 Jan 2009) Log Message: ----------- enable running jython from a directory with an exclamation mark in it's name due to jdk limitations this is only possible for + jdk 1.6 and higher + directory names not ending with an exclamation mark due to the special treatment of exclamation marks in enabledelayedexpansion, this is currently not possible for jython.bat on windows installer autotests now use an exclamation mark if possible Modified Paths: -------------- trunk/installer/src/java/org/python/util/install/Installation.java trunk/installer/src/java/org/python/util/install/JavaVersionTester.java trunk/installer/src/java/org/python/util/install/driver/Autotest.java trunk/installer/test/java/org/python/util/install/InstallationTest.java trunk/jython/src/org/python/core/PySystemState.java Modified: trunk/installer/src/java/org/python/util/install/Installation.java =================================================================== --- trunk/installer/src/java/org/python/util/install/Installation.java 2009-01-18 10:04:29 UTC (rev 5945) +++ trunk/installer/src/java/org/python/util/install/Installation.java 2009-01-18 13:46:12 UTC (rev 5946) @@ -17,6 +17,9 @@ import org.python.util.install.driver.Tunnel; public class Installation { + public final static int NORMAL_RETURN = 0; + public final static int ERROR_RETURN = 1; + protected static final String ALL = "1"; protected static final String STANDARD = "2"; protected static final String MINIMUM = "3"; @@ -29,9 +32,6 @@ protected static final String HEADLESS_PROPERTY_NAME = "java.awt.headless"; - protected final static int NORMAL_RETURN = 0; - protected final static int ERROR_RETURN = 1; - private static final String RESOURCE_CLASS = "org.python.util.install.TextConstants"; private static ResourceBundle _textConstants = ResourceBundle.getBundle(RESOURCE_CLASS, Locale.getDefault()); @@ -92,24 +92,31 @@ protected static boolean isValidJava(JavaVersionInfo javaVersionInfo) { String specificationVersion = javaVersionInfo.getSpecificationVersion(); verboseOutput("specification version: '" + specificationVersion + "'"); + boolean valid = true; + if (getJavaSpecificationVersion(specificationVersion) < 15) { + valid = false; + } + return valid; + } + + /** + * @return specification version as an int, e.g. 15 or 16 (the micro part is ignored) + * @param specificationVersion + * as system property + */ + public static int getJavaSpecificationVersion(String specificationVersion) { // major.minor.micro // according to http://java.sun.com/j2se/1.5.0/docs/guide/versioning/spec/versioning2.html - int major = 0; - int minor = 0; + String major = "1"; + String minor = "0"; StringTokenizer tokenizer = new StringTokenizer(specificationVersion, "."); if (tokenizer.hasMoreTokens()) { - major = Integer.valueOf(tokenizer.nextToken()).intValue(); + major = tokenizer.nextToken(); } if (tokenizer.hasMoreTokens()) { - minor = Integer.valueOf(tokenizer.nextToken()).intValue(); + minor = tokenizer.nextToken(); } - boolean valid = true; - if (major == 1) { - if (minor < 5) { - valid = false; - } - } - return valid; + return Integer.valueOf(major.concat(minor)).intValue(); } public static boolean isWindows() { @@ -201,6 +208,46 @@ return versionInfo; } + + /** + * @return The system default java version + */ + public static JavaVersionInfo getDefaultJavaVersion() { + JavaVersionInfo versionInfo = new JavaVersionInfo(); + String executableName = "java"; + try { + // launch the java command - temporary file will be written by the child process + File tempFile = File.createTempFile("jython_installation", ".properties"); + if (tempFile.exists() && tempFile.canWrite()) { + String command[] = new String[5]; + command[0] = executableName; + command[1] = "-cp"; + // our own class path should be ok here + command[2] = System.getProperty("java.class.path"); + command[3] = JavaVersionTester.class.getName(); + command[4] = tempFile.getAbsolutePath(); + ChildProcess childProcess = new ChildProcess(command, 10000); // 10 seconds + childProcess.setDebug(false); + int errorCode = childProcess.run(); + if (errorCode != NORMAL_RETURN) { + versionInfo.setErrorCode(errorCode); + versionInfo.setReason(getText(TextKeys.C_NO_VALID_JAVA, executableName)); + } else { + Properties tempProperties = new Properties(); + tempProperties.load(new FileInputStream(tempFile)); + fillJavaVersionInfo(versionInfo, tempProperties); + } + } else { + versionInfo.setErrorCode(ERROR_RETURN); + versionInfo.setReason(getText(TextKeys.C_UNABLE_CREATE_TMPFILE, + tempFile.getAbsolutePath())); + } + } catch (IOException e) { + versionInfo.setErrorCode(ERROR_RETURN); + versionInfo.setReason(getText(TextKeys.C_NO_VALID_JAVA, executableName)); + } + return versionInfo; + } protected static void fillJavaVersionInfo(JavaVersionInfo versionInfo, Properties properties) { versionInfo.setVersion(properties.getProperty(JavaVersionTester.JAVA_VERSION)); @@ -208,7 +255,7 @@ versionInfo.setVendor(properties.getProperty(JavaVersionTester.JAVA_VENDOR)); } - protected static class JavaVersionInfo { + public static class JavaVersionInfo { private String _version; private String _specificationVersion; private String _vendor; @@ -246,7 +293,7 @@ return _version; } - protected String getSpecificationVersion() { + public String getSpecificationVersion() { return _specificationVersion; } @@ -254,7 +301,7 @@ return _vendor; } - protected int getErrorCode() { + public int getErrorCode() { return _errorCode; } Modified: trunk/installer/src/java/org/python/util/install/JavaVersionTester.java =================================================================== --- trunk/installer/src/java/org/python/util/install/JavaVersionTester.java 2009-01-18 10:04:29 UTC (rev 5945) +++ trunk/installer/src/java/org/python/util/install/JavaVersionTester.java 2009-01-18 13:46:12 UTC (rev 5946) @@ -9,7 +9,7 @@ public static final String JAVA_HOME = "java.home"; protected static final String JAVA_VERSION = "java.version"; - protected static final String JAVA_SPECIFICATION_VERSION = "java.specification.version"; + public static final String JAVA_SPECIFICATION_VERSION = "java.specification.version"; protected static final String JAVA_VENDOR = "java.vendor"; private static final String NEWLINE = "\n"; Modified: trunk/installer/src/java/org/python/util/install/driver/Autotest.java =================================================================== --- trunk/installer/src/java/org/python/util/install/driver/Autotest.java 2009-01-18 10:04:29 UTC (rev 5945) +++ trunk/installer/src/java/org/python/util/install/driver/Autotest.java 2009-01-18 13:46:12 UTC (rev 5946) @@ -4,9 +4,12 @@ import java.io.IOException; import org.python.util.install.FileHelper; +import org.python.util.install.Installation; import org.python.util.install.InstallationListener; import org.python.util.install.InstallerCommandLine; import org.python.util.install.JavaHomeHandler; +import org.python.util.install.JavaVersionTester; +import org.python.util.install.Installation.JavaVersionInfo; public abstract class Autotest implements InstallationListener { @@ -14,6 +17,7 @@ private static int _count = 0; // unique test number private static File _rootDirectory = null; + private static JavaVersionInfo _systemDefaultJavaVersion; private String _name; private File _targetDir; @@ -176,6 +180,10 @@ b.append(_count); // explicitly use a blank, to nail down some platform specific problems b.append(' '); + // add an exclamation mark if possible (see issue #1208) + if(canHandleExclamationMarks()) { + b.append('!'); + } b.append(getNameSuffix()); b.append('_'); _name = b.toString(); @@ -230,4 +238,37 @@ } } + /** + * Determine if the target directory may contain an exclamation mark (see also issue #1208). + * <p> + * Autotests can handle exclamation marks, if both the running and the system default java + * specification versions are 1.6 or higher. Class.getResource() was fixed for JDK 1.6, but only if the directory name does not end with '!'... + * <p> + * Currently there is no way on windows, because the enabledelayedexpansion in jython.bat cannot + * handle exclamation marks in variable names. + * + * @return <code>true</code> if we can handle exclamation marks, <code>false</code> otherwise + */ + private boolean canHandleExclamationMarks() { + boolean exclamation = false; + if (!Installation.isWindows()) { + // get the running java specification version + String specificationVersion = System.getProperty(JavaVersionTester.JAVA_SPECIFICATION_VERSION, + ""); + if (Installation.getJavaSpecificationVersion(specificationVersion) > 15) { + // get the system default java version + if (_systemDefaultJavaVersion == null) { + _systemDefaultJavaVersion = Installation.getDefaultJavaVersion(); + } + if (_systemDefaultJavaVersion.getErrorCode() == Installation.NORMAL_RETURN) { + specificationVersion = _systemDefaultJavaVersion.getSpecificationVersion(); + if (Installation.getJavaSpecificationVersion(specificationVersion) > 15) { + exclamation = true; + } + } + } + } + return exclamation; + } + } Modified: trunk/installer/test/java/org/python/util/install/InstallationTest.java =================================================================== --- trunk/installer/test/java/org/python/util/install/InstallationTest.java 2009-01-18 10:04:29 UTC (rev 5945) +++ trunk/installer/test/java/org/python/util/install/InstallationTest.java 2009-01-18 13:46:12 UTC (rev 5946) @@ -73,6 +73,15 @@ assertTrue(Installation.isValidJava(javaVersionInfo)); } + public void testGetJavaSpecificationVersion() { + String specificationVersion = "1.4.2"; + assertEquals(14, Installation.getJavaSpecificationVersion(specificationVersion)); + specificationVersion = "1.5.0"; + assertEquals(15, Installation.getJavaSpecificationVersion(specificationVersion)); + specificationVersion = "1.6.0"; + assertEquals(16, Installation.getJavaSpecificationVersion(specificationVersion)); + } + public void testIsGNUJava() { assertFalse(Installation.isGNUJava()); String originalVmName = System.getProperty(Installation.JAVA_VM_NAME); @@ -85,5 +94,14 @@ assertFalse(Installation.isGNUJava()); } } + + public void testGetDefaultJavaVersion() { + JavaVersionInfo info = Installation.getDefaultJavaVersion(); + assertNotNull(info); + assertEquals(Installation.NORMAL_RETURN, info.getErrorCode()); + String specVersion = info.getSpecificationVersion(); + assertNotNull(specVersion); + assertTrue(specVersion.length() >= 3); + } } Modified: trunk/jython/src/org/python/core/PySystemState.java =================================================================== --- trunk/jython/src/org/python/core/PySystemState.java 2009-01-18 10:04:29 UTC (rev 5945) +++ trunk/jython/src/org/python/core/PySystemState.java 2009-01-18 13:46:12 UTC (rev 5946) @@ -889,7 +889,7 @@ if (url != null) { try { String urlString = URLDecoder.decode(url.toString()); - int jarSeparatorIndex = urlString.indexOf(JAR_SEPARATOR); + int jarSeparatorIndex = urlString.lastIndexOf(JAR_SEPARATOR); if (urlString.startsWith(JAR_URL_PREFIX) && jarSeparatorIndex > 0) { jarFileName = urlString.substring(JAR_URL_PREFIX.length(), jarSeparatorIndex); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <otm...@us...> - 2009-05-28 14:03:17
|
Revision: 6416 http://jython.svn.sourceforge.net/jython/?rev=6416&view=rev Author: otmarhumbel Date: 2009-05-28 13:37:28 +0000 (Thu, 28 May 2009) Log Message: ----------- provide jython.jar as sys.executable (if not otherwise specified), and let subprocesses run it using java -jar Modified Paths: -------------- trunk/installer/src/java/org/python/util/install/driver/NormalVerifier.java trunk/jython/Lib/subprocess.py trunk/jython/src/org/python/core/PySystemState.java Modified: trunk/installer/src/java/org/python/util/install/driver/NormalVerifier.java =================================================================== --- trunk/installer/src/java/org/python/util/install/driver/NormalVerifier.java 2009-05-28 06:12:41 UTC (rev 6415) +++ trunk/installer/src/java/org/python/util/install/driver/NormalVerifier.java 2009-05-28 13:37:28 UTC (rev 6416) @@ -23,7 +23,8 @@ private static final String BAT_EXTENSION = ".bat"; - private static final String JYTHON_UP = "jython up and running!"; + //TODO:Oti re-add an exclamation mark as soon subprocess/jython.bat can handle it + private static final String JYTHON_UP = "jython up and running"; private static final String JYTHON = "jython"; @@ -269,6 +270,23 @@ b.append("print '"); b.append(JYTHON_UP); b.append("'\n"); + b.append("# test subprocess if present\n"); + b.append("try:\n"); + b.append(" import subprocess\n"); + b.append(" proceed=True\n"); + b.append("except:\n"); + b.append(" proceed=False\n"); + b.append("if proceed:\n"); + b.append(" print '"); + b.append(VERIFYING); + b.append(" subprocess"); + b.append("'\n"); + b.append(" exitCode = subprocess.call([sys.executable, '-c', 'print "); + b.append('"'); + b.append(JYTHON_UP); + b.append('"'); + b.append("'])\n"); + b.append(" assert exitCode==0\n"); return b.toString(); } Modified: trunk/jython/Lib/subprocess.py =================================================================== --- trunk/jython/Lib/subprocess.py 2009-05-28 06:12:41 UTC (rev 6415) +++ trunk/jython/Lib/subprocess.py 2009-05-28 13:37:28 UTC (rev 6416) @@ -1236,6 +1236,9 @@ raise TypeError('args must contain only strings') args = _escape_args(args) + if len(args) > 0 and '.jar' == args[0][-4:] and executable is None: + args = ['java', '-jar'] + args + if shell: args = _shell_command + args Modified: trunk/jython/src/org/python/core/PySystemState.java =================================================================== --- trunk/jython/src/org/python/core/PySystemState.java 2009-05-28 06:12:41 UTC (rev 6415) +++ trunk/jython/src/org/python/core/PySystemState.java 2009-05-28 13:37:28 UTC (rev 6416) @@ -856,7 +856,7 @@ // Initialize the path (and add system defaults) defaultPath = initPath(registry, standalone, jarFileName); defaultArgv = initArgv(argv); - defaultExecutable = initExecutable(registry); + defaultExecutable = initExecutable(registry, jarFileName); // Set up the known Java packages initPackages(registry); // Finish up standard Python initialization... @@ -959,16 +959,23 @@ } /** - * Determine the default sys.executable value from the - * registry. Returns Py.None is no executable can be found. - * - * @param props a Properties registry + * Determine the default sys.executable value from the registry. Returns Py.None is no + * executable can be found. + * + * @param props + * a Properties registry + * @param jarFileName + * used as executable if python.executable not otherwise specified * @return a PyObject path string or Py.None */ - private static PyObject initExecutable(Properties props) { + private static PyObject initExecutable(Properties props, String jarFileName) { String executable = props.getProperty("python.executable"); if (executable == null) { - return Py.None; + if (jarFileName != null) { + executable = jarFileName; + } else { + return Py.None; + } } File executableFile = new File(executable); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <otm...@us...> - 2010-01-30 06:31:51
|
Revision: 6965 http://jython.svn.sourceforge.net/jython/?rev=6965&view=rev Author: otmarhumbel Date: 2010-01-30 06:31:45 +0000 (Sat, 30 Jan 2010) Log Message: ----------- handle CLASSPATH containing () - fixes issue #1548 Modified Paths: -------------- trunk/installer/src/java/org/python/util/install/driver/jython_test.bat.template trunk/jython/src/shell/jython.bat Modified: trunk/installer/src/java/org/python/util/install/driver/jython_test.bat.template =================================================================== --- trunk/installer/src/java/org/python/util/install/driver/jython_test.bat.template 2010-01-24 01:19:10 UTC (rev 6964) +++ trunk/installer/src/java/org/python/util/install/driver/jython_test.bat.template 2010-01-30 06:31:45 UTC (rev 6965) @@ -5,9 +5,10 @@ set _SCRIPT={1} set _JAVA_HOME={2} -rem save old home env vars: +rem save old home env vars and classpath: set _OLD_JAVA_HOME=%JAVA_HOME% set _OLD_JYTHON_HOME=%JYTHON_HOME% +set _OLD_CLASSPATH=%CLASSPATH% cd /d "%_INSTALL_DIR%\bin" @@ -57,8 +58,16 @@ call "%_INSTALL_DIR%\bin\jython.bat" "%_SCRIPT%" set E=%ERRORLEVEL% +echo {3}: no home, setting CLASSPATH, calling /jython.bat from another working dir:" +set JAVA_HOME= +set JYTHON_HOME= +set CLASSPATH=.;C:\Program Files (x86)\Java\jre6\lib\ext\QTJava.zip +call "%_INSTALL_DIR%\jython.bat" "%_SCRIPT%" +set E=%ERRORLEVEL% + rem cleanup: set JAVA_HOME=%_OLD_JAVA_HOME% set JYTHON_HOME=%_OLD_JYTHON_HOME% +set CLASSPATH=%_OLD_CLASSPATH% cd /d "%~dp0%" exit /b %E% Modified: trunk/jython/src/shell/jython.bat =================================================================== --- trunk/jython/src/shell/jython.bat 2010-01-24 01:19:10 UTC (rev 6964) +++ trunk/jython/src/shell/jython.bat 2010-01-30 06:31:45 UTC (rev 6965) @@ -168,13 +168,15 @@ goto scanArgs :argsDone -if not defined _BOOT_CP ( - if defined CLASSPATH ( - set CLASSPATH=%_CP:"=%;%CLASSPATH:"=% - ) else ( - set CLASSPATH=%_CP:"=% - ) -) +rem do not use 'if () else ()': this does not work with CLASSPATH containing '(x86)' +if defined _BOOT_CP goto fullCmd +if defined CLASSPATH goto classpathDefined +set CLASSPATH=%_CP:"=% +goto fullCmd +:classpathDefined +set CLASSPATH=%_CP:"=%;%CLASSPATH:"=% + +:fullCmd set _FULL_CMD=%_JAVA_CMD% %_JAVA_OPTS% %_JAVA_MEM% %_JAVA_STACK% %_BOOT_CP% -Dpython.home=%_JYTHON_HOME% -Dpython.executable="%~f0" -classpath "%CLASSPATH%" org.python.util.jython %_JYTHON_OPTS% %_JYTHON_ARGS% %_ARGS% if defined _PRINT ( echo %_FULL_CMD% This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <otm...@us...> - 2010-06-24 22:16:49
|
Revision: 7068 http://jython.svn.sourceforge.net/jython/?rev=7068&view=rev Author: otmarhumbel Date: 2010-06-24 22:16:42 +0000 (Thu, 24 Jun 2010) Log Message: ----------- accept directories containing + signs, both during installation and at runtime in standalone mode Modified Paths: -------------- trunk/installer/src/java/org/python/util/install/JarInfo.java trunk/jython/src/org/python/core/PySystemState.java Modified: trunk/installer/src/java/org/python/util/install/JarInfo.java =================================================================== --- trunk/installer/src/java/org/python/util/install/JarInfo.java 2010-06-23 20:25:08 UTC (rev 7067) +++ trunk/installer/src/java/org/python/util/install/JarInfo.java 2010-06-24 22:16:42 UTC (rev 7068) @@ -111,7 +111,13 @@ URL url = getClass().getResource(className + ".class"); // we expect an URL like: // jar:file:/C:/stuff/jython21i.jar!/org/python/util/install/JarInfo.class - String urlString = URLDecoder.decode(url.toString(), "UTF-8"); + // escape plus signs, since the URLDecoder would turn them into spaces + final String plus = "\\+"; + final String escapedPlus = "__ppluss__"; + String rawUrl = url.toString(); + rawUrl = rawUrl.replaceAll(plus, escapedPlus); + String urlString = URLDecoder.decode(rawUrl, "UTF-8"); + urlString = urlString.replaceAll(escapedPlus, plus); int jarSeparatorIndex = urlString.lastIndexOf(JAR_SEPARATOR); if (!urlString.startsWith(JAR_URL_PREFIX) || jarSeparatorIndex <= 0) { throw new InstallerException(Installation.getText(TextKeys.UNEXPECTED_URL, urlString)); Modified: trunk/jython/src/org/python/core/PySystemState.java =================================================================== --- trunk/jython/src/org/python/core/PySystemState.java 2010-06-23 20:25:08 UTC (rev 7067) +++ trunk/jython/src/org/python/core/PySystemState.java 2010-06-24 22:16:42 UTC (rev 7068) @@ -1073,14 +1073,18 @@ // we expect an URL like jar:file:/install_dir/jython.jar!/org/python/core/PySystemState.class if (url != null) { try { - String urlString = URLDecoder.decode(url.toString(), - Charset.defaultCharset().name()); + // escape plus signs, since the URLDecoder would turn them into spaces + final String plus = "\\+"; + final String escapedPlus = "__ppluss__"; + String rawUrl = url.toString(); + rawUrl = rawUrl.replaceAll(plus, escapedPlus); + String urlString = URLDecoder.decode(rawUrl, "UTF-8"); + urlString = urlString.replaceAll(escapedPlus, plus); int jarSeparatorIndex = urlString.lastIndexOf(JAR_SEPARATOR); if (urlString.startsWith(JAR_URL_PREFIX) && jarSeparatorIndex > 0) { jarFileName = urlString.substring(JAR_URL_PREFIX.length(), jarSeparatorIndex); } - } catch (Exception e) { - } + } catch (Exception e) {} } return jarFileName; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <otm...@us...> - 2010-10-24 21:45:00
|
Revision: 7168 http://jython.svn.sourceforge.net/jython/?rev=7168&view=rev Author: otmarhumbel Date: 2010-10-24 21:44:54 +0000 (Sun, 24 Oct 2010) Log Message: ----------- website preparation for 2.5.2rc2 Modified Paths: -------------- trunk/jython/README.txt trunk/website/index.txt trunk/website/jysite.py trunk/website/redirects/downloads.txt trunk/website/redirects/latest.txt Modified: trunk/jython/README.txt =================================================================== --- trunk/jython/README.txt 2010-10-24 20:39:41 UTC (rev 7167) +++ trunk/jython/README.txt 2010-10-24 21:44:54 UTC (rev 7168) @@ -1,4 +1,4 @@ -Welcome to Jython 2.5.2 rc1 +Welcome to Jython 2.5.2 rc2 =========================== This is the second release candidate of the 2.5.2 version of Jython. Modified: trunk/website/index.txt =================================================================== --- trunk/website/index.txt 2010-10-24 20:39:41 UTC (rev 7167) +++ trunk/website/index.txt 2010-10-24 21:44:54 UTC (rev 7168) @@ -4,6 +4,10 @@ Latest News ~~~~~~~~~~~ +**Jython 2.5.2 RC 2 Has Been Released** (October 24, 2010) + +The Jython development team would like to announce the release of 2.5.2 Release Candidate 2. For a complete listing of changes, please visit the `Release Notes`_. + **Jython 2.5.2 RC 1 Has Been Released** (October 18, 2010) The Jython development team would like to announce the release of 2.5.2 Release Candidate 1. For a complete listing of changes, please visit the `Release Notes`_. @@ -89,7 +93,7 @@ .. _this post: http://blog.springpython.webfactional.com/2009/10/15/see-how-spring-python-works-with-jython/ .. _Release Notes: http://www.jython.org/latest.html .. _the bug tracker: http://bugs.jython.org -.. _download the installer by clicking here: http://sourceforge.net/projects/jython/files/jython-dev/2.5.2rc1/jython_installer-2.5.2rc1.jar/download +.. _download the installer by clicking here: http://sourceforge.net/projects/jython/files/jython-dev/2.5.2rc2/jython_installer-2.5.2rc2.jar/download Modified: trunk/website/jysite.py =================================================================== --- trunk/website/jysite.py 2010-10-24 20:39:41 UTC (rev 7167) +++ trunk/website/jysite.py 2010-10-24 21:44:54 UTC (rev 7168) @@ -80,9 +80,9 @@ buffer.append('<a href="./" ><img class="logoImage" alt="Jython" style="border: 0px; padding-top: 20px; position:absolute; left: 35px" src="css/jython.png" title="Jython"></a>') buffer.append('</div>') buffer.append('<div class="latest_release" style="position:absolute; color:#000; width:180px; top: 15px; right: 30px; padding:0px 10px 10px 30px; font-size:11px; background:url(\'css/latest_release_bg.png\') no-repeat">') - buffer.append('<p style="top: 25px; color:#000">Latest release - 2.5.2 - RC 1<br/>') + buffer.append('<p style="top: 25px; color:#000">Latest release - 2.5.2 - RC 2<br/>') buffer.append('<a style="color:#000" href="latest.html">View Release Notes</a><br/>') - buffer.append('Download: <a style="color:#000" href="http://sourceforge.net/projects/jython/files/jython-dev/2.5.2rc1/jython_installer-2.5.2rc1.jar/download">.jar</a>') + buffer.append('Download: <a style="color:#000" href="http://sourceforge.net/projects/jython/files/jython-dev/2.5.2rc2/jython_installer-2.5.2rc2.jar/download">.jar</a>') buffer.append('</div>') buffer.append('<div class="searchbox">') Modified: trunk/website/redirects/downloads.txt =================================================================== --- trunk/website/redirects/downloads.txt 2010-10-24 20:39:41 UTC (rev 7167) +++ trunk/website/redirects/downloads.txt 2010-10-24 21:44:54 UTC (rev 7168) @@ -1,14 +1,14 @@ Downloads --------- -The current version of Jython is 2.5.2 - Release Candidate 1, please use the link below to download the Java installer. +The current version of Jython is 2.5.2 - Release Candidate 2, please use the link below to download the Java installer. Once downloaded, please double-click on the JAR file to start the installation process. You may also want to read the `Installation instructions`_ or the `Release Notes`_. -`Download Jython 2.5.2`_ RC 1 +`Download Jython 2.5.2`_ RC 2 -- MD5: ``4067d89c58d5596ce85611b2defd0333`` -- SHA1: ``6545eda94e5f3a55cc392c59d1ffa683e094eca3`` +- MD5: ``3f03c9c5a7541d6c47b9beb17777860b`` +- SHA1: ``bc38e7910ff221e260401b84b995a1ad970680b3`` Previous Releases ----------------- @@ -28,7 +28,7 @@ - MD5: ``774543534bef2d68247953882237d448`` - SHA1: ``6fea1e8985af955fc843789e2d60fcfc38a76fd8`` -.. _Download Jython 2.5.2: http://sourceforge.net/projects/jython/files/jython-dev/2.5.2rc1/jython_installer-2.5.2rc1.jar/download +.. _Download Jython 2.5.2: http://sourceforge.net/projects/jython/files/jython-dev/2.5.2rc2/jython_installer-2.5.2rc2.jar/download .. _Jython 2.5.1: http://sourceforge.net/projects/jython/files/jython/2.5.1/jython_installer-2.5.1.jar/download .. _Jython 2.5.0: http://sourceforge.net/projects/jython/files/jython/2.5.0/jython_installer-2.5.0.jar/download .. _Jython 2.2.1: http://sourceforge.net/projects/jython/files/jython/jython_installer-2.2.1.jar Modified: trunk/website/redirects/latest.txt =================================================================== --- trunk/website/redirects/latest.txt 2010-10-24 20:39:41 UTC (rev 7167) +++ trunk/website/redirects/latest.txt 2010-10-24 21:44:54 UTC (rev 7168) @@ -6,6 +6,12 @@ Bugs Fixed ---------- +2.5.2-rc2 +~~~~~~~~~ + - [ 1665 ] cPickle calls __import__ with illegal parameters + - [ 1628 ] getpass.getpass echoes input + - Fix logic to detect that a console is interactive (related to #1133) + 2.5.2-rc1 ~~~~~~~~~ - [ 1133 ] Support ipython and other completers with readline emulation This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <otm...@us...> - 2010-11-10 00:16:43
|
Revision: 7171 http://jython.svn.sourceforge.net/jython/?rev=7171&view=rev Author: otmarhumbel Date: 2010-11-10 00:16:37 +0000 (Wed, 10 Nov 2010) Log Message: ----------- add the latest contributors to both acknowledgements Modified Paths: -------------- trunk/jython/ACKNOWLEDGMENTS trunk/website/redirects/acknowledgments.txt Modified: trunk/jython/ACKNOWLEDGMENTS =================================================================== --- trunk/jython/ACKNOWLEDGMENTS 2010-11-09 22:55:15 UTC (rev 7170) +++ trunk/jython/ACKNOWLEDGMENTS 2010-11-10 00:16:37 UTC (rev 7171) @@ -88,10 +88,10 @@ Leonardo Soto James Robinson Jonathan Feinberg + Josh Juneau Justin Deoliveira Costantino Cerbo - Alex Gr\xF6nholm - Jonathan Feinberg + Alex Groenholm Anselm Kruis Local Variables: Modified: trunk/website/redirects/acknowledgments.txt =================================================================== --- trunk/website/redirects/acknowledgments.txt 2010-11-09 22:55:15 UTC (rev 7170) +++ trunk/website/redirects/acknowledgments.txt 2010-11-10 00:16:37 UTC (rev 7171) @@ -136,7 +136,15 @@ Josh Juneau + Justin Deoliveira + Costantino Cerbo + + Alex Groenholm + + Anselm Kruis + + YourKit is kindly supporting open source projects with its full-featured Java Profiler. YourKit, LLC is creator of innovative and intelligent tools for profiling Java and .NET applications. Take a look at YourKit's leading software products: YourKit Java Profiler and YourKit .NET Profiler. Logo This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |