| #!/usr/bin/env python |
| # |
| # gen-javahl-errors.py: Generate a Java class containing an enum for the |
| # C error codes |
| # |
| # ==================================================================== |
| # Copyright (c) 2007 CollabNet. All rights reserved. |
| # |
| # * This software is licensed as described in the file COPYING, which |
| # you should have received as part of this distribution. The terms |
| # are also available at http://subversion.tigris.org/license-1.html. |
| # If newer versions of this license are posted there, you may use a |
| # newer version instead, at your option. |
| # |
| # * This software consists of voluntary contributions made by many |
| # individuals. For exact contribution history, see the revision |
| # history and logs, available at http://subversion.tigris.org/. |
| # ==================================================================== |
| # |
| |
| import sys, os |
| |
| try: |
| from svn import core |
| except ImportError, e: |
| print >> sys.stderr, \ |
| "ERROR: Unable to import Subversion's Python bindings: '%s'\n" \ |
| "Hint: Set your PYTHONPATH environment variable, or adjust your " \ |
| "PYTHONSTARTUP\nfile to point to your Subversion install " \ |
| "location's svn-python directory." % e |
| sys.exit(1) |
| |
| def get_errors(): |
| errs = {} |
| for key in vars(core): |
| if key.find('SVN_ERR_') == 0: |
| try: |
| val = int(vars(core)[key]) |
| errs[val] = key |
| except: |
| pass |
| return errs |
| |
| def gen_javahl_class(error_codes, output_filename): |
| jfile = open(output_filename, 'w') |
| jfile.write( |
| """/** ErrorCodes.java - This file is autogenerated by gen-javahl-errors.py |
| */ |
| |
| package org.tigris.subversion.javahl; |
| |
| /** |
| * Provide mappings from error codes generated by the C runtime to meaningful |
| * Java values. For a better description of each error, please see |
| * svn_error_codes.h in the C source. |
| */ |
| public class ErrorCodes |
| { |
| """) |
| |
| keys = error_codes.keys() |
| keys.sort() |
| |
| for key in keys: |
| # Format the code name to be more Java-esque |
| code_name = error_codes[key][8:].replace('_', ' ').title().replace(' ', '') |
| code_name = code_name[0].lower() + code_name[1:] |
| |
| jfile.write(" public static final int %s = %d;\n" % (code_name, key)) |
| |
| jfile.write("}\n") |
| jfile.close() |
| |
| if __name__ == "__main__": |
| if len(sys.argv) > 1: |
| output_filename = sys.argv[1] |
| else: |
| output_filename = os.path.join('..', '..', 'subversion', 'bindings', |
| 'javahl', 'src', 'org', 'tigris', |
| 'subversion', 'javahl', 'ErrorCodes.java') |
| |
| gen_javahl_class(get_errors(), output_filename) |