Revision: 4158
Author: janne.t.harkonen
Date: Wed Sep 29 07:24:51 2010
Log: major cleanup
http://code.google.com/p/robotframework/source/detail?r=4158

Modified:
 /trunk/package.py

=======================================
--- /trunk/package.py   Mon Sep 27 23:59:16 2010
+++ /trunk/package.py   Wed Sep 29 07:24:51 2010
@@ -50,6 +50,7 @@

 import sys
 import os
+from os.path import abspath, dirname, exists, join
 import shutil
 import re
 import time
@@ -58,15 +59,14 @@
 from glob import glob


-ROOT_PATH = os.path.abspath(os.path.dirname(__file__))
-DIST_PATH = os.path.join(ROOT_PATH, 'dist')
-BUILD_PATH = os.path.join(ROOT_PATH, 'build')
-ROBOT_PATH = os.path.join(ROOT_PATH, 'src', 'robot')
-JAVA_SRC_ROOT = os.path.join(ROOT_PATH, 'src', 'java')
-JAVA_PKG = ('org', 'robotframework')
-JYTHON_JAR = glob(os.path.join(ROOT_PATH, 'ext-lib', 'jython-standalone-*.jar'))[0]
-SETUP_PATH = os.path.join(ROOT_PATH, 'setup.py')
-VERSION_PATH = os.path.join(ROBOT_PATH, 'version.py')
+ROOT_PATH = abspath(dirname(__file__))
+DIST_PATH = join(ROOT_PATH, 'dist')
+BUILD_PATH = join(ROOT_PATH, 'build')
+ROBOT_PATH = join(ROOT_PATH, 'src', 'robot')
+JAVA_SRC = join(ROOT_PATH, 'src', 'java', 'org', 'robotframework')
+JYTHON_JAR = glob(join(ROOT_PATH, 'ext-lib', 'jython-standalone-*.jar'))[0]
+SETUP_PATH = join(ROOT_PATH, 'setup.py')
+VERSION_PATH = join(ROBOT_PATH, 'version.py')
 VERSIONS = [re.compile('^2\.\d+(\.\d+)?$'), 'trunk', 'keep']
 RELEASES = [re.compile('^alpha\d*$'), re.compile('^beta\d*$'),
             re.compile('^rc\d*$'), 'final']
@@ -148,7 +148,7 @@
 def _clean():
     print 'Cleaning up...'
     for path in [DIST_PATH, BUILD_PATH]:
-        if os.path.exists(path):
+        if exists(path):
             shutil.rmtree(path)

 def _verify_platform(version_number, release_tag=None):
@@ -178,90 +178,78 @@
 def _announce():
     print 'Created:'
     for path in os.listdir(DIST_PATH):
-        print os.path.abspath(os.path.join(DIST_PATH, path))
+        print abspath(join(DIST_PATH, path))

 def jar(*version_info):
     ver = version(*version_info)
-    _compile_java_classes()
-    _create_jar_distribution(ver)
-
-def _compile_java_classes():
-    source_path = os.path.join(JAVA_SRC_ROOT, *JAVA_PKG)
-    source_files = [ os.path.join(source_path, f) for f
-                     in os.listdir(source_path) if f.endswith('java') ]
-    print 'Compiling %d source files' % len(source_files)
- subprocess.call(['javac', '-target', '1.5', '-cp', JYTHON_JAR] + source_files)
-
-def _create_jar_distribution(version):
     tmpdir = _create_tmpdir()
-    _copy_files_to(tmpdir)
-    jar_path = _create_jar_file(version)
-    _fill_jar(tmpdir, jar_path)
-    _overwrite_manifest(jar_path, version)
+    _compile_java_classes(tmpdir)
+    _unzip_jython_jar(tmpdir)
+    _copy_robot_files(tmpdir)
+    _compile_all_py_files(tmpdir)
+    _overwrite_manifest(tmpdir, ver)
+    jar_path = _create_jar_file(tmpdir, ver)
     shutil.rmtree(tmpdir)
     print 'Created %s based on %s' % (jar_path, JYTHON_JAR)

+def _compile_java_classes(tmpdir):
+    source_files = [join(JAVA_SRC, f)
+                    for f in os.listdir(JAVA_SRC) if f.endswith('.java')]
+    print 'Compiling %d source files' % len(source_files)
+ subprocess.call(['javac', '-d', tmpdir, '-target', '1.5', '-cp', JYTHON_JAR]
+                    + source_files)
+
 def _create_tmpdir():
-    tmpdir = os.path.join(ROOT_PATH, 'tmp-jar-dir')
-    if os.path.exists(tmpdir):
+    tmpdir = join(ROOT_PATH, 'tmp-jar-dir')
+    if exists(tmpdir):
         shutil.rmtree(tmpdir)
     os.mkdir(tmpdir)
     return tmpdir

-def _copy_files_to(tmpdir):
-    for srcdir, todir in [(ROBOT_PATH,
-                           os.path.join(tmpdir, 'Lib', 'robot')),
-                          (os.path.join(JAVA_SRC_ROOT, *JAVA_PKG),
-                           os.path.join(tmpdir, 'org', 'robotframework'))]:
-        # pyc files must be excluded so that compileall works properly.
- shutil.copytree(srcdir, todir, ignore=shutil.ignore_patterns('*.pyc*'))
+def _unzip_jython_jar(tmpdir):
+    zipfile.ZipFile(JYTHON_JAR).extractall(tmpdir)
+
+def _copy_robot_files(tmpdir):
+    # pyc files must be excluded so that compileall works properly.
+    todir = join(tmpdir, 'Lib', 'robot')
+ shutil.copytree(ROBOT_PATH, todir, ignore=shutil.ignore_patterns('*.pyc*'))
+
+def _compile_all_py_files(tmpdir):
subprocess.call(['java', '-jar', JYTHON_JAR, '-m', 'compileall', tmpdir])
-
-def _overwrite_manifest(jarpath, version):
-    jarfile = zipfile.ZipFile(jarpath, 'a')
-    jarfile.writestr('META-INF/MANIFEST.MF','''Manifest-Version: 1.0
+    for root, _, files in os.walk(tmpdir):
+        for f in files:
+            if f.endswith('.py'):
+                os.remove(join(root, f))
+
+def _overwrite_manifest(tmpdir, version):
+    with open(join(tmpdir, 'META-INF', 'MANIFEST.MF'), 'w') as mf:
+        mf.write('''Manifest-Version: 1.0
 Main-Class: org.robotframework.RobotFramework
 Specification-Version: 2
 Implementation-Version: %s
 ''' % version)
-    jarfile.close()
-
-def _create_jar_file(version):
-    jar_path = os.path.join(DIST_PATH, 'robotframework-%s.jar' % version)
-    if not os.path.exists(DIST_PATH):
+
+def _create_jar_file(source, version):
+    path = join(DIST_PATH, 'robotframework-%s.jar' % version)
+    if not exists(DIST_PATH):
         os.mkdir(DIST_PATH)
- for path in [os.path.join(DIST_PATH, name) for name in os.listdir(DIST_PATH)]:
-        if path.endswith('.jar'):
-            print 'removing old jarfile', path
-            os.remove(path)
-    shutil.copyfile(JYTHON_JAR, jar_path)
-    return jar_path
-
-def _fill_jar(tmpdir, jar_path):
-    #jar = zipfile.ZipFile(jar_path, 'a')
-    for dirname in ('Lib', 'org'):
-        _copy_files_to_jar(tmpdir, dirname, jar_path)
-    #jar.close()
-
-def _copy_files_to_jar(tmpdir, dirname, jar_path):
-    targets = []
-    for root, _, files in os.walk(os.path.join(tmpdir, dirname)):
+    _fill_jar(source, path)
+    return path
+
+def _fill_jar(sourcedir, jarpath):
+    subprocess.call(['zip', jarpath, '-r', '.'], cwd=sourcedir)
+    return
+    jar = zipfile.ZipFile(jarpath, 'w', compression=zipfile.ZIP_DEFLATED)
+    for root, _, files in os.walk(sourcedir):
         for name in files:
-            if not name.endswith('.class'):
+            if name.endswith('.py'):
                 continue
-            source = os.path.join(root, name)
-            target = source.replace(tmpdir+os.sep, '')
+            source = join(root, name)
+            target= source.replace(sourcedir+os.sep, '')
             print 'Adding %s' % target
-            targets.append(target)
-    if targets:
-        _update_files_to_jar(targets, jar_path, tmpdir)
-
-def _update_files_to_jar(targets, jar_path, tmpdir):
-       # We have to use M-option to remove the old MANIFEST.MF-file
-    params = ['jar', '-uMf', jar_path]
-    for arg in targets:
-        params.extend(['-C', tmpdir, arg])
-    subprocess.call(params)
+            jar.write(source, target)
+    jar.close()
+

 if __name__ == '__main__':
     try:

Reply via email to