From 808ba65738640f8ae770899477ae31b5e5524f10 Mon Sep 17 00:00:00 2001 From: Daniel Stonier <d.stonier@gmail.com> Date: Fri, 20 Feb 2015 14:03:27 +0900 Subject: [PATCH] a rebuild avoidance check integrated into the catkin api. --- cmake/genjava-catkin-api.cmake.em | 1 + src/genjava/genjava_main.py | 11 ++++++++++- src/genjava/gradle_project.py | 13 +++++++++++-- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/cmake/genjava-catkin-api.cmake.em b/cmake/genjava-catkin-api.cmake.em index 670beac..9f8a7a4 100644 --- a/cmake/genjava-catkin-api.cmake.em +++ b/cmake/genjava-catkin-api.cmake.em @@ -41,6 +41,7 @@ macro(generate_rosjava_messages) ALL COMMAND ${CATKIN_ENV} ${PYTHON_EXECUTABLE} ${GENJAVA_BIN} ${verbosity} + --avoid-rebuilding -o ${CMAKE_CURRENT_BINARY_DIR} -p ${ARG_PACKAGES} # this has to be a list argument so it separates each arg (not a single string!) DEPENDS diff --git a/src/genjava/genjava_main.py b/src/genjava/genjava_main.py index c732d7c..9a192e4 100644 --- a/src/genjava/genjava_main.py +++ b/src/genjava/genjava_main.py @@ -90,6 +90,7 @@ def standalone_parse_arguments(argv): parser.add_argument('-o', '--output-dir', action='store', default='build', help='output directory for the java code (e.g. build/foo_msgs)') parser.add_argument('-v', '--verbose', default=False, action='store_true', help='enable verbosity in debugging (false)') parser.add_argument('-f', '--fakeit', default=False, action='store_true', help='dont build, just list the packages it would build (false)') + parser.add_argument('-a', '--avoid-rebuilding', default=False, action='store_true', help='avoid rebuilding if the working directory is already present (false)') parsed_arguments = parser.parse_args(argv) return parsed_arguments @@ -105,7 +106,15 @@ def standalone_main(argv): sorted_package_tuples = rosjava_build_tools.catkin.index_message_package_dependencies_from_local_environment(package_name_list=args.packages) + print("") print("Generating message artifacts for: \n%s" % [p.name for (unused_relative_path, p) in sorted_package_tuples]) + did_not_rebuild_these_packages = [] if not args.fakeit: for unused_relative_path, p in sorted_package_tuples: - gradle_project.standalone_create_and_build(p.name, args.output_dir, args.verbose) + result = gradle_project.standalone_create_and_build(p.name, args.output_dir, args.verbose, args.avoid_rebuilding) + if not result: + did_not_rebuild_these_packages.append(p.name) + if did_not_rebuild_these_packages: + print("") + print("Skipped re-generation of these message artifacts (clean first): %s" % did_not_rebuild_these_packages) + print("") diff --git a/src/genjava/gradle_project.py b/src/genjava/gradle_project.py index 6bf5a57..bdb0a83 100644 --- a/src/genjava/gradle_project.py +++ b/src/genjava/gradle_project.py @@ -172,12 +172,20 @@ def build(msg_pkg_name, output_dir, verbosity): subprocess.call(cmd, stderr=subprocess.STDOUT,) -def standalone_create_and_build(msg_pkg_name, output_dir, verbosity): +def standalone_create_and_build(msg_pkg_name, output_dir, verbosity, avoid_rebuilding=False): ''' - Brute force create and build the message artifact distregarding any smarts + Brute force create and build the message artifact disregarding any smarts such as whether message files changed or not. For use with the standalone package builder. + :param str msg_pkg_name: + :param str output_dir: + :param bool verbosity: + :param bool avoid_rebuilding: don't rebuild if working dir is already there + :return bool : whether it built, or skipped because it was avoiding a rebuild ''' + genjava_gradle_dir = os.path.join(output_dir, msg_pkg_name) + if os.path.exists(genjava_gradle_dir) and avoid_rebuilding: + return False create(msg_pkg_name, output_dir) working_directory = os.path.join(os.path.abspath(output_dir), msg_pkg_name) gradle_wrapper = os.path.join(os.path.abspath(output_dir), msg_pkg_name, 'gradlew') @@ -186,3 +194,4 @@ def standalone_create_and_build(msg_pkg_name, output_dir, verbosity): cmd.append('--quiet') #print("COMMAND........................%s" % cmd) subprocess.call(cmd, stderr=subprocess.STDOUT,) + return True -- GitLab