Index: mojo/public/tools/bindings/generators/mojom_java_generator.py |
diff --git a/mojo/public/tools/bindings/generators/mojom_java_generator.py b/mojo/public/tools/bindings/generators/mojom_java_generator.py |
index 8b4fd25e0ce51a31782e485179dcc264ca5ff801..3abfa3755f6286d98b639d5fdeb51eb3d2bd61fe 100644 |
--- a/mojo/public/tools/bindings/generators/mojom_java_generator.py |
+++ b/mojo/public/tools/bindings/generators/mojom_java_generator.py |
@@ -6,6 +6,7 @@ |
import argparse |
import ast |
+import contextlib |
import os |
import re |
@@ -350,6 +351,25 @@ def HasMethodWithoutResponse(interface): |
return True |
return False |
+@contextlib.contextmanager |
+def TempDir(): |
+ import tempfile |
+ import shutil |
qsr
2014/09/26 15:57:12
import should not be local.
ppi
2014/09/26 16:12:16
Done.
|
+ dirname = tempfile.mkdtemp() |
+ try: |
+ yield dirname |
+ finally: |
+ shutil.rmtree(dirname) |
+ |
+def ZipContentInto(directory, root, zip_filename): |
qsr
2014/09/26 15:57:12
You can only pass root here, and do a traversal fr
ppi
2014/09/26 16:12:16
Done.
ppi
2014/09/26 16:12:16
Done.
|
+ import zipfile |
qsr
2014/09/26 15:57:12
Same
ppi
2014/09/26 16:12:16
Done.
|
+ with zipfile.ZipFile(zip_filename, 'w') as zip_file: |
+ for dirname, subdirs, files in os.walk(directory): |
qsr
2014/09/26 15:57:12
If you do not use a variable, use _.
ppi
2014/09/26 16:12:16
Done.
|
+ for filename in files: |
+ path = os.path.join(dirname, filename) |
+ arcname = os.path.relpath(path, root) |
qsr
2014/09/26 15:57:12
What does arcname mean? something more descriptive
ppi
2014/09/26 16:12:16
Done.
|
+ zip_file.write(path, arcname) |
+ |
class Generator(generator.Generator): |
java_filters = { |
@@ -417,19 +437,13 @@ class Generator(generator.Generator): |
'constants': module.constants}) |
return exports |
- def GenerateFiles(self, unparsed_args): |
- parser = argparse.ArgumentParser() |
- parser.add_argument('--java_output_directory', dest='java_output_directory') |
- args = parser.parse_args(unparsed_args) |
- if self.output_dir and args.java_output_directory: |
- self.output_dir = os.path.join(args.java_output_directory, |
- GetPackage(self.module).replace('.', '/')) |
- if not os.path.exists(self.output_dir): |
- try: |
- os.makedirs(self.output_dir) |
- except: |
- # Ignore errors on directory creation. |
- pass |
+ def DoGenerateFiles(self): |
+ if not os.path.exists(self.output_dir): |
+ try: |
+ os.makedirs(self.output_dir) |
+ except: |
+ # Ignore errors on directory creation. |
+ pass |
# Keep this above the others as .GetStructs() changes the state of the |
# module, annotating structs with required information. |
@@ -451,6 +465,26 @@ class Generator(generator.Generator): |
self.Write(self.GenerateConstantsSource(self.module), |
'%s.java' % GetConstantsMainEntityName(self.module)) |
+ def GenerateFiles(self, unparsed_args): |
+ parser = argparse.ArgumentParser() |
+ parser.add_argument('--java_output_directory', dest='java_output_directory') |
+ args = parser.parse_args(unparsed_args) |
+ package_path = GetPackage(self.module).replace('.', '/') |
+ |
+ if args.java_output_directory: |
+ # If requested, generate the java files directly into indicated directory. |
+ self.output_dir = os.path.join(args.java_output_directory, package_path) |
+ self.DoGenerateFiles(); |
+ else: |
qsr
2014/09/26 15:57:12
You should always generate the srcjar, this is the
ppi
2014/09/26 16:12:17
Done.
|
+ # Otherwise, generate the java files in a temporary directory and place a |
+ # single srcjar in the output directory. |
+ zip_filename = os.path.join(self.output_dir, |
+ "%s.srcjar" % self.module.name) |
+ with TempDir() as temp_java_root: |
+ self.output_dir = os.path.join(temp_java_root, package_path) |
+ self.DoGenerateFiles(); |
+ ZipContentInto(self.output_dir, temp_java_root, zip_filename) |
+ |
def GetJinjaParameters(self): |
return { |
'lstrip_blocks': True, |