You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@yetus.apache.org by aw...@apache.org on 2016/02/08 19:38:04 UTC
yetus git commit: YETUS-284. maven dependency solver needs
enhancements
Repository: yetus
Updated Branches:
refs/heads/master b6b6b0dd2 -> 57d69414a
YETUS-284. maven dependency solver needs enhancements
Signed-off-by: Sean Busbey <bu...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/yetus/repo
Commit: http://git-wip-us.apache.org/repos/asf/yetus/commit/57d69414
Tree: http://git-wip-us.apache.org/repos/asf/yetus/tree/57d69414
Diff: http://git-wip-us.apache.org/repos/asf/yetus/diff/57d69414
Branch: refs/heads/master
Commit: 57d69414a416f10060c1fb13edea98d97188b187
Parents: b6b6b0d
Author: Allen Wittenauer <aw...@apache.org>
Authored: Fri Jan 22 15:38:32 2016 -0800
Committer: Allen Wittenauer <aw...@apache.org>
Committed: Mon Feb 8 10:37:44 2016 -0800
----------------------------------------------------------------------
precommit/test-patch.d/maven.sh | 134 ++++++++++++++++-------------------
1 file changed, 60 insertions(+), 74 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/yetus/blob/57d69414/precommit/test-patch.d/maven.sh
----------------------------------------------------------------------
diff --git a/precommit/test-patch.d/maven.sh b/precommit/test-patch.d/maven.sh
index 861c31c..241ec1a 100755
--- a/precommit/test-patch.d/maven.sh
+++ b/precommit/test-patch.d/maven.sh
@@ -15,8 +15,6 @@
# limitations under the License.
declare -a MAVEN_ARGS=("--batch-mode")
-declare -a MAVEN_ALREADY=()
-declare -a MAVEN_NEWLIST=()
if [[ -z "${MAVEN_HOME:-}" ]]; then
MAVEN=mvn
@@ -348,7 +346,7 @@ function maven_builtin_personality_modules
# copy of everything per pom rules.
if [[ ${repostatus} == branch
&& ${testtype} == mvninstall ]];then
- personality_enqueue_module .
+ personality_enqueue_module "${CHANGED_UNION_MODULES}"
return
fi
@@ -537,77 +535,76 @@ function maven_docker_support
## @stability evolving
## @replaceable no
## @param repostatus
-## @param module
function maven_reorder_module_process
{
declare repostatus=$1
- declare module=$2
- declare indexd
+ declare module
+ declare line
declare indexm
- declare deplist
+ declare indexn
+ declare -a newlist
declare fn
declare basemod
+ declare needroot=false
+ declare found
- yetus_debug "Maven: check order: ${module}"
-
- # this is a recursive function; no need to process
- # modules that we have already seen
- if [[ " ${MAVEN_ALREADY[@]} " =~ \ ${module}\ ]]; then
- return
+ if [[ ${CHANGED_MODULES} =~ \. ]]; then
+ needroot=true
fi
- # immediately place a module in the list to avoid
- # loops
- MAVEN_ALREADY=("${MAVEN_ALREADY[@]}" "${module}")
-
- pushd "${BASEDIR}/${module}" >/dev/null
- fn=$(module_file_fragment "${module}")
-
- # get the dependency list from maven
- #shellcheck disable=SC2046
- echo_and_redirect "${PATCH_DIR}/maven-${repostatus}-dependencylist-${fn}.txt" \
- $("${BUILDTOOL}_executor") dependency:list \
- -DoutputFile="${PATCH_DIR}/${repostatus}-mvndeporder-${fn}.txt"
-
- # if this fails, there's really not much we can do other than tell the
- # user that it did. So we'll press on and just hope for the best
+ fn=$(module_file_fragment "${CHANGED_UNION_MODULES}")
+ pushd "${BASEDIR}/${CHANGED_UNION_MODULES}" >/dev/null
- if [[ $? != 0 ]]; then
- add_vote_table -1 mvndep "${repostatus}'s ${module} dependency:list failed"
- add_footer_table mvndep "${fn}: @@BASE@@/maven-${repostatus}-dependencylist-${fn}.txt"
- fi
+ # get the output of validate
+ # this *should* be pretty darn close to the correct order
+ # shellcheck disable=SC2046
+ echo_and_redirect "${PATCH_DIR}/maven-${repostatus}-validate-${fn}.txt" \
+ $("${BUILDTOOL}_executor") validate
- # take the list from maven, and pull out the artifactids. this means
- # we have an assumption that the module names we are given map
- # 1:1 to the artifactid
- deplist=$(cut -f2 -d: "${PATCH_DIR}/${repostatus}-mvndeporder-${fn}.txt")
-
- # loop through the generated dependency artificatid list
- # and try to match it to any of the other modules we are working on
- # if it is a match, process it. dependencies that aren't being hit
- # by the patch should be irrelevant since maven will pick them up
- # from the repo caches. if a dependency really does matter, then
- # the personality will have a chance to manipulate this list later
- for indexd in ${deplist}; do
+ while read -r line; do
+ if [[ ${line} =~ ^module: ]]; then
+ module=${line##module:}
+ else
+ continue
+ fi
for indexm in ${CHANGED_MODULES}; do
-
# modules could be foo/bar, where bar is the artifactid
# so get the basename and compare that too
- basemod=$(basename "${indexm}")
- if [[ " ${indexd} " = " ${indexm} "
- || " ${indexd} " = " ${basemod} " ]]; then
- maven_reorder_module_process "${repostatus}" "${indexm}"
+ basemod=${indexm##*/}
+ if [[ " ${module} " = " ${indexm} "
+ || " ${module} " = " ${basemod} " ]]; then
+ yetus_debug "mrm: placying ${indexm}"
+ newlist=("${newlist[@]}" " ${indexm} ")
fi
done
- done
+ done < <(sed -e 's,^.* --- .* @ \(.*\) ---$,module:\1,g' \
+ -e '/^\[INFO\]/d' "${PATCH_DIR}/maven-${repostatus}-validate-${fn}.txt")
popd >/dev/null
- # at this point, any modules that we care about should have been placed
- # before us. now add the one we've been working on. if the artificatids
- # don't match, then we're effectively back to the old behavior of
- # using fs globs and the personality will have to do the hard work
- yetus_debug "Maven: placing ${module}"
- MAVEN_NEWLIST=("${MAVEN_NEWLIST[@]}" " ${module} ")
+ if [[ "${needroot}" = true ]]; then
+ newlist=("${newlist[@]}" " . ")
+ fi
+
+ indexm=$(echo "${CHANGED_MODULES}" | wc -w)
+ indexn="${#newlist[@]}"
+
+ if [[ ${indexm} -ne ${indexn} ]]; then
+ yetus_debug "mrm: Missed a module"
+ for indexm in ${CHANGED_MODULES}; do
+ found=false
+ for indexn in ${newlist[*]}; do
+ if [[ "${indexn}" = "${indexm}" ]]; then
+ found=true
+ fi
+ done
+ if [[ ${found} = false ]]; then
+ yetus_debug "mrm: missed ${indexm}"
+ newlist=("${newlist[@]}" " ${indexm} ")
+ fi
+ done
+ fi
+
+ CHANGED_MODULES="${newlist[*]}"
}
## @description take a stab at reordering modules based upon
@@ -622,32 +619,21 @@ function maven_reorder_modules
declare repostatus=$1
declare index
- # sidenote: this code does not get called when there is only one
- # module, so no reason to shortcut that
-
if [[ "${MAVEN_DEPENDENCY_ORDER}" != "true" ]]; then
return
fi
+ # don't bother if there is only one
+ index=$(echo "${CHANGED_MODULES}" | wc -w)
+ if [[ ${index} -eq 1 ]]; then
+ return
+ fi
+
big_console_header "Determining Maven Dependency Order"
start_clock
- # this will get called again, so always make sure we start fresh
- MAVEN_ALREADY=()
- MAVEN_NEWLIST=()
-
- yetus_debug "Maven: start re-ordering modules"
- yetus_debug "Starting list: ${CHANGED_MODULES}"
-
- # sort the list. parents will likely get us most of the
- # dependency list sooner/more correct, esp if . is in the list
- # shellcheck disable=SC2086
- for index in $(echo ${CHANGED_MODULES} | tr ' ' '\n' | sort); do
- maven_reorder_module_process "${repostatus}" "${index}"
- done
-
- CHANGED_MODULES="${MAVEN_NEWLIST[*]}"
+ maven_reorder_module_process "${repostatus}"
yetus_debug "Maven: finish re-ordering modules"
yetus_debug "Finished list: ${CHANGED_MODULES}"