X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=lib%2Flibdatabase_build.sh;h=5097269116337d35d085e23eaee560ca654b4345;hb=d96b588bedf38d902207ef60d7c12b648dac8a78;hp=22e9ed67085efbbf10e8b4f0a18e31cb70a844e2;hpb=9cc914bdb7351ad564c01df213fef7407f1a866d;p=portsreinstall%2Fcurrent.git diff --git a/lib/libdatabase_build.sh b/lib/libdatabase_build.sh index 22e9ed6..5097269 100644 --- a/lib/libdatabase_build.sh +++ b/lib/libdatabase_build.sh @@ -2,7 +2,7 @@ # ============================================================================== # portsreinstall library script # - Operations for building the temporary database - -# Copyright (C) 2013 Mamoru Sakaue, MwGhennndo, All Rights Reserved. +# Copyright (C) 2013-2016 Mamoru Sakaue, MwGhennndo, All Rights Reserved. # This software is distributed under the 2-Clause BSD License. # ============================================================================== @@ -17,7 +17,7 @@ database_build_create () misc_lock_duplicated_executions "${DBDIR}/.lock" if [ -e "${DBDIR}/MYVERSION" ] then - if ! grep -m 1 -E "$COMPATIBLE_VERSIONS" "${DBDIR}/MYVERSION" > /dev/null 2>&1 + if ! grep -q -E "$COMPATIBLE_VERSIONS" "${DBDIR}/MYVERSION" 2> /dev/null then message_echo "ERROR: The current temporary database is incompatible. You must delete it by" >&2 message_echo " ${APPNAME} clean force" >&2 @@ -98,7 +98,8 @@ database_build_register_obsolete_port () do for tag in all run build do - ln -f "${DBDIR}/initial/$origin/${table}.${tag}.${level}" "$dbpath/${table}.${tag}.${level}.src" + srcfile=${DBDIR}/initial/$origin/${table}.${tag}.${level} + [ -e "$srcfile" ] && ln -f "$srcfile" "$dbpath/${table}.${tag}.${level}.src" done done done @@ -159,9 +160,16 @@ database_build_setup_make_args () do eval echo $key=\$$key done - echo 'FORCE_PKG_REGISTER=yes' echo 'DISABLE_VULNERABILITIES=yes' - [ $opt_apply_default_config = yes ] && echo 'BATCH=yes' + if [ $opt_apply_default_config = yes ] + then + if pkgsys_is_dialog4ports_used + then + echo 'NO_DIALOG=yes' + else + echo 'BATCH=yes' + fi + fi dbdir=${DBDIR}/requires/$origin [ -d "$dbdir" ] || dbdir=${DBDIR}/conf/each_port/$origin cat "$dbdir/MARG.conf" 2> /dev/null || : @@ -207,11 +215,13 @@ database_build_setup_initial_node () do origin_requirement=`pkgsys_init_pkg_orig_by_ambiguous_matching "$requirement" || :` [ -n "$origin_requirement" ] && echo "$origin_requirement" + : done > $dbpath/requirements.all.full pkg_info_qR "$pkg" | while read dependent do origin_dependent=`pkgsys_init_pkg_orig_by_ambiguous_matching "$dependent" || :` [ -n "$origin_dependent" ] && echo "$origin_dependent" + : done > $dbpath/dependents.all.full for table in dependents requirements do @@ -246,7 +256,7 @@ database_build_setup_replace_node () rm -rf "$dbpath" mkdir -p "$dbpath" origin=$origin_orig - if echo "$origin_orig" | grep -m 1 -E -f "${DBDIR}/conf/REPLACE.grep_from_pattern" > /dev/null + if echo "$origin_orig" | grep -q -E -f "${DBDIR}/conf/REPLACE.grep_from_pattern" then origin=`echo "$origin_orig" | sed -E -f "${DBDIR}/conf/REPLACE.sed_pattern"` if [ "x$origin_orig" != "x$origin" ] @@ -318,8 +328,8 @@ database_build_is_port_already_inspected_in_required_level () [ -n "$origin_actual" ] || origin_actual=$origin origin_esc='^'`str_escape_regexp "$origin_actual"`'$' inspected_level=`database_build_get_inspected_level "$origin_actual" "$origin_dependent"` - grep -m 1 -E "^$origin_esc$" "${DBDIR}/ports.inspected.${inspected_level}.list" \ - "${DBDIR}/obsolete_ports" > /dev/null 2>&1 || return + grep -q -E "^$origin_esc$" "${DBDIR}/ports.inspected.${inspected_level}.list" \ + "${DBDIR}/obsolete_ports" 2> /dev/null || return fileedit_rm_a_line "$origin" "${DBDIR}/stage.loop_list/ports_to_inspect.remain" [ "x$origin" = "$origin_actual" ] || \ fileedit_rm_a_line "$origin_actual" "${DBDIR}/stage.loop_list/ports_to_inspect.remain" @@ -329,16 +339,28 @@ database_build_is_port_already_inspected_in_required_level () # ============= Update the current package name of a port ============= database_build_update_pkgname () { - local origin pkg savefile + local origin pkg savefile origin_orig origin=$1 savefile=${DBDIR}/requires/$origin/current_version - pkg=`pkg_info_qO "$origin" || :` - if [ -z "$pkg" -a -e "${DBDIR}/requires/$origin/initial_orig" ] + if [ -e "${DBDIR}/REVERSE_REPLACE.complete_sed_pattern" ] then - origin_orig=`cat "${DBDIR}/requires/$origin/initial_orig"` - pkg=`pkg_info_qO "$origin_orig" || :` + origin_orig=`echo "$origin" \ + | sed -E -f "${DBDIR}/REVERSE_REPLACE.complete_sed_pattern"` || : + [ "x$origin_orig" = "x$origin" ] && origin_orig= + else + origin_orig= fi - echo -n "$pkg" > $savefile + echo "$origin_orig" "$origin" | tr ' ' '\n' | grep -v '^$' | while read orig + do + pkg=`pkg_info_qO "$orig" || :` + if [ -z "$pkg" -a -e "${DBDIR}/requires/$orig/initial_orig" ] + then + orig_init=`cat "${DBDIR}/requires/$orig/initial_orig"` + pkg=`pkg_info_qO "$orig_init" || :` + fi + [ -n "$pkg" ] && echo "$pkg" + : + done > $savefile cat "$savefile" } @@ -404,9 +426,9 @@ database_build_update_pkgtag () { local origin pkg_init pkg_bak pkg_cur detail pkgtag origin=$1 - pkg_init=`cat "${DBDIR}/requires/$origin/installed_version" 2> /dev/null || :` - pkg_bak=`cat "${DBDIR}/requires/$origin/backedup_version" 2> /dev/null || :` - pkg_cur=`database_build_get_pkgname "$origin"` + pkg_init=`cat "${DBDIR}/requires/$origin/installed_version" 2> /dev/null | tr '\n' ' ' | sed 's/ *$//'` + pkg_bak=`cat "${DBDIR}/requires/$origin/backedup_version" 2> /dev/null | tr '\n' ' ' | sed 's/ *$//'` + pkg_cur=`database_build_get_pkgname "$origin" | tr '\n' ' ' | sed 's/ *$//'` detail= if [ "x$pkg_init" != "x$pkg_cur" ] then @@ -429,7 +451,7 @@ database_build_is_currentpkg_latest () { local origin pkg_cur pkg_new origin=$1 - pkg_cur=`database_build_get_pkgname "$origin"` + pkg_cur=`database_build_get_pkgname "$origin" | tr '\n' ' ' | sed 's/ *$//'` pkg_new=`database_build_get_new_pkgname "$origin"` [ "x$pkg_cur" = "x$pkg_new" ] } @@ -465,7 +487,7 @@ database_build_inspect_dependencies () if [ ! -e "$dbpath/complete_as_node" ] then conf_updated= - if grep -m 1 -E -e "^$origin_orig_regexp$" -e "^$origin_regexp$" "${DBDIR}/to_be_reconf" > /dev/null 2>&1 + if grep -q -E -e "^$origin_orig_regexp$" -e "^$origin_regexp$" "${DBDIR}/to_be_reconf" 2> /dev/null then message_echo "${DEPTH_INDEX} ===> Reconfigured" conf_updated=y @@ -490,17 +512,8 @@ database_build_inspect_dependencies () then if [ $opt_apply_default_config = yes ] then - if pkgsys_is_dialog4ports_used + if ! pkgsys_is_dialog4ports_used then - if [ -n "$SCRIPT" ] - then - message_echo "ERROR: script(1) prevents automatic configurations of port options via dialog4ports(1) (at least found for dialog4ports-0.1.3)." >&2 - message_echo "If you want to enable the automatic configurations, rerun outside of script(1) environment at least until the end of section [Inspecting dependencies of the all installed packages]." >&2 - message_echo "If you can accept interactive configurations, disable -C option with the aid of -M option." >&2 - exit 1 - fi - printf '\n' | database_build_make "$origin" config-conditional - else printf '\t\n' | database_build_make "$origin" config-conditional > /dev/null fi else @@ -515,11 +528,11 @@ database_build_inspect_dependencies () cp "${DBDIR}/initial/$origin_orig/installed_version" "$dbpath" 2> /dev/null || : fi database_build_create_pkgtag "$origin" -# for tag in all run build for tag in run build do database_build_make "$origin" $tag-depends-list \ | sed -E "s/^`str_escape_regexp "${PORTSDIR}"`\///" \ + | grep -Ev "`pkgsys_pkgtools_ports_filter_regexp`" \ > $dbpath/requirements.$tag.orig || : sed -E -f "${DBDIR}/conf/REPLACE.sed_pattern" "$dbpath/requirements.$tag.orig" \ | grep -v '^$' > $dbpath/requirements.$tag.src || : @@ -528,13 +541,9 @@ database_build_inspect_dependencies () do sort -u "$dbpath/requirements.run.${stage}" "$dbpath/requirements.build.${stage}" \ > $dbpath/requirements.all.direct.${stage} -# mv "$dbpath/requirements.all.${stage}" "$dbpath/requirements.all.full.${stage}" mv "$dbpath/requirements.build.${stage}" "$dbpath/requirements.build.direct.${stage}" mv "$dbpath/requirements.run.${stage}" "$dbpath/requirements.run.direct.${stage}" done - # grep -E -f "${DBDIR}/conf/REPLACE.grep_from_pattern" "$dbpath/requirements.all.full.orig" \ - # | grep -v -E "^`str_escape_regexp \"$origin\"`$" \ - # | fileedit_add_lines_if_new "${DBDIR}/replaced_dest_ports.list" || : touch "$dbpath/complete_as_node" fileedit_rm_a_line "$origin_orig" "${DBDIR}/to_be_reconf" fileedit_rm_a_line "$origin" "${DBDIR}/to_be_reconf" @@ -557,8 +566,6 @@ database_build_inspect_dependencies () inspected_level=`database_build_get_inspected_level "$origin" "$origin_dependent"` case $inspected_level in full) -# grep -v -E -f "${DBDIR}/installed_ports.grep_pattern" \ -# "$dbpath/requirements.all.full.src" > ${TMPDIR}/missing.$origin_id || : grep -v -E -f "${DBDIR}/installed_ports.grep_pattern" \ "$dbpath/requirements.all.direct.src" > ${TMPDIR}/missing.$origin_id || : inspected_levels_compatible='full direct node' @@ -566,7 +573,6 @@ database_build_inspect_dependencies () direct) grep -v -E -f "${DBDIR}/installed_ports.grep_pattern" \ "$dbpath/requirements.all.direct.src" > ${TMPDIR}/missing.$origin_id || : -# cp "$dbpath/requirements.all.direct.src" "${TMPDIR}/missing.$origin_id" inspected_levels_compatible='direct node' ;; node) @@ -580,8 +586,8 @@ database_build_inspect_dependencies () do origin_dependency=`sed -n ${iline}p "${TMPDIR}/missing.$origin_id"` iline=$(($iline+1)) - grep -m 1 -E '^'`str_escape_regexp "$origin_dependency"`'$' \ - "${DBDIR}/ports.inspected.list" > /dev/null 2>&1 && \ + grep -q -E '^'`str_escape_regexp "$origin_dependency"`'$' \ + "${DBDIR}/ports.inspected.list" 2> /dev/null && \ continue database_build_inspect_dependencies "$origin_dependency" "$origin" done @@ -617,23 +623,112 @@ database_build_inspect_dependencies () DEPTH_INDEX=${DEPTH_INDEX_orig} } +# ============= Filter ignored dependencies from a list given by the standard input ============= +database_build_filter_ignored_requirements () +{ + local origin pattern + origin=$1 + pattern=${DBDIR}/requires/$origin/ignored_dependencies_to_break_loops.regexp + if [ -e "$pattern" ] + then + grep -Evq -f "$pattern" + else + cat + fi 2> /dev/null || : +} + # ============= Build and get a list of the complete recursive dependencies of a port ============= database_build_get_complete_recursive_dependency () { - local table origin dbpath dstfile + local table tag origin suffix tmppath dbpath srcfile dstfile origin_esc num_parents loophead dstfile_tmp tmpdstpath index_loop loop_len origin_target origin_ref dbpath_target origin_ref_esc table=$1 - origin=$2 + tag=$2 + origin=$3 + suffix=$4 + tmppath=${TMPDIR}/database_build_get_complete_recursive_dependency dbpath=${DBDIR}/requires/$origin - [ -e "$dbpath/$table.direct" ] || return 0 - dstfile=$dbpath/$table.full - if [ ! -e "$dbpath/$table" -a ! -e "$dstfile" ] + srcfile=$dbpath/${table}.${tag}.direct${suffix} + dstfile=$dbpath/${table}.${tag}.full${suffix} + if [ ! -e "$srcfile" ] + then + [ -d "$dbpath" ] && rm -f "$dstfile" + return 0 + fi + if [ ! -e "$dstfile" ] then - while read origin_requirement + origin_esc=`str_escape_regexp "$origin"` + touch "$tmppath.parents" + num_parents=`wc -l < $tmppath.parents` + if grep -Eq "^$origin_esc$" "$tmppath.parents" + then + loophead=`grep -En "^$origin_esc$" "$tmppath.parents" | tail -n 1 | cut -d : -f 1` + if [ "x$opt_force_continuation_for_looped_dependency" = xno ] + then + message_echo "ERROR: The following loop was found for ${table}.${tag}${suffix}:" >&2 + else + message_echo "WARNING: The following loop was found for ${table}.${tag}${suffix}:" >&2 + fi + message_echo " $origin" >&2 + sed -n $(($loophead+1)),\$p "$tmppath.parents" > $tmppath.ports_in_loop.tmp + sed 's/^/ -->/' "$tmppath.ports_in_loop.tmp" | message_cat >&2 + message_echo " -->$origin" >&2 + if [ "x$opt_disallow_force_continuation_for_looped_dependency" = xyes ] + then + message_echo 'Resolve the problem manually if possible, and then restart by executing' >&2 + message_echo " ${APPNAME} reset keepopts" >&2 + message_echo " ${APPNAME}" >&2 + message_echo 'Otherwise, you may attempt a forcible continuation by executing' >&2 + message_echo " ${APPNAME} -f" >&2 + exit 1 + else + message_echo 'Exploring a node port to terminate the loop by evaluating only build-and-run-time dependencies as essential.' >&2 + echo "$origin" > $tmppath.ports_in_loop + cat "$tmppath.ports_in_loop.tmp" >> $tmppath.ports_in_loop + echo "$origin" >> $tmppath.ports_in_loop + index_loop=1 + loop_len=`wc -l < $tmppath.ports_in_loop` + while [ $index_loop -lt $loop_len ] + do + origin_target=`sed -n ${index_loop}p "$tmppath.ports_in_loop"` + origin_ref=`sed -n $((${index_loop}+1))p "$tmppath.ports_in_loop"` + dbpath_target=${DBDIR}/requires/$origin_target + origin_ref_esc=`str_escape_regexp "$origin_ref"` + if ! grep -Eq "^$origin_ref_esc$" "$dbpath_target/${table}.run.direct${suffix}" 2> /dev/null || \ + ! grep -Eq "^$origin_ref_esc$" "$dbpath_target/${table}.build.direct${suffix}" 2> /dev/null + then + fileedit_add_a_line_if_new "$origin_ref" "$dbpath_target/ignored_dependencies_to_break_loops" + message_echo 'INFO: The dependency of '$origin_target' on '$origin_ref' is ignored to terminate the loop.' >&2 + break + fi + index_loop=$((${index_loop}+1)) + done + if [ $index_loop -eq $loop_len ] + then + fileedit_add_a_line_if_new "$origin_ref" "$dbpath_target/ignored_dependencies_to_break_loops" + message_echo 'WARNING: The loop cannot be resolved. Continuing by forcible ignorance of the dependency of '$origin_target' on '$origin_ref'. This may cause confusion in the later processes.' >&2 + fi + str_escape_regexp_filter < $dbpath_target/ignored_dependencies_to_break_loops | sed 's/^/^/;s/$/$/' > $dbpath_target/ignored_dependencies_to_break_loops.regexp + fi + fi + echo "$origin" >> $tmppath.parents + tmpdstpath=${TMPDIR}/requires/$origin + dstfile_tmp=$tmpdstpath/${table}.${tag}.full${suffix} + [ -d "$tmpdstpath" ] || mkdir -p "$tmpdstpath" + database_build_filter_ignored_requirements "$origin" < $srcfile | while read origin_requirement do + database_build_get_complete_recursive_dependency "$table" "$tag" "$origin_requirement" "$suffix" > $tmppath.recursive_dependency + origin_requirement_esc=`str_escape_regexp "$origin_requirement"` + grep -Eq "^$origin_requirement_esc$" "$dbpath/ignored_dependencies_to_break_loops" 2> /dev/null && continue echo "$origin_requirement" - database_build_get_complete_recursive_dependency "$table" "$origin_requirement" - done < $dbpath/$table.direct | sort -u > $dstfile.tmp - mv "$dstfile.tmp" "$dstfile" + cat "$tmppath.recursive_dependency" + done > $dstfile_tmp + sed -n ${num_parents}p "$tmppath.parents" > $tmppath.parents.tmp + mv "$tmppath.parents.tmp" "$tmppath.parents" + if [ ! -e "$dstfile" ] + then + sort -u "$dstfile_tmp" > $dstfile + rm "$dstfile_tmp" + fi fi cat "$dstfile" } @@ -647,21 +742,18 @@ database_build_inspect_necessity_for_only_new_upgrade () origin=$1 level=$2 dbpath=${DBDIR}/requires/$origin - [ -e "$dbpath/necessary_port.${level}" ] && return + [ ! -d "$dbpath" -o -e "$dbpath/necessary_port.${level}" ] && return tmpfile=${TMPDIR}/database_build_inspect_necessity_for_only_new_upgrade:`echo "$origin" | tr / :` if database_query_does_a_port_need_update "$origin" then sort -u "$dbpath/requirements.build.direct" "$dbpath/requirements.run.${level}" || : else cat "$dbpath/requirements.run.${level}" || : - fi 2> /dev/null > $tmpfile - if [ `wc -l < $tmpfile` -gt 0 ] - then - while read origin_requirement - do - database_build_inspect_necessity_for_only_new_upgrade "$origin_requirement" "$level" - done < $tmpfile - fi + fi 2> /dev/null | database_build_filter_ignored_requirements "$origin" > $tmpfile + while read origin_requirement + do + database_build_inspect_necessity_for_only_new_upgrade "$origin_requirement" "$level" + done < $tmpfile rm "$tmpfile" touch "$dbpath/necessary_port.${level}" } @@ -679,14 +771,17 @@ database_build_complement_to_new_dependents_for_targets () then for level in direct full do - cat "$reqdir/requirements.all.${level}" 2> /dev/null | while read origin_requirement + cat "$reqdir/requirements.all.${level}" 2> /dev/null | \ + database_build_filter_ignored_requirements "$origin" | \ + while read origin_requirement do fileedit_add_a_line_if_new "$origin" \ "${DBDIR}/targets/$origin_requirement/complement_for_new_dependents.${level}" done done - cat "$reqdir/requirements.all.direct" "$reqdir/requirements.all.full" 2> /dev/null \ - | sort -u | while read origin_requirement + cat "$reqdir/requirements.all.direct" "$reqdir/requirements.all.full" 2> /dev/null | \ + sort -u | database_build_filter_ignored_requirements "$origin" | \ + while read origin_requirement do database_build_complement_to_new_dependents_for_targets "$origin_requirement" done @@ -741,63 +836,6 @@ eof done done touch "$dbdir/COMPLETE_ATTRS" -# local origin dbdir reqdir _is_all _is_target _is_requires_requirements _is_initial_requirements _is_requires_dependents _is_initial_dependents _is_requires_requirements_complement _is_relevant tag level database table -# _is_all=y -# _is_target= -# _is_requires_requirements= -# _is_initial_requirements= -# _is_requires_dependents= -# _is_initial_dependents= -# _is_relevant=y -# origin_esc=`str_escape_regexp "$origin"` -# target_${database}_${table}.${tag}.${level} -# if [ `cat "${DBDIR}/stage.loop_list/target_requirements.specified" 2> /dev/null | wc -l` -gt 0 ] -# then -# if [ -e "$nodedir_req/installed_version" ] -# then -# deptag=`options_get_dependency_type` -# else -# deptag=all -# fi -# _is_all= -# if grep -m 1 -E "^$origin_esc$" \ -# "${DBDIR}/stage.loop_list/target_requirements.specified" > /dev/null 2>&1 -# then -# _is_target=y -# elif [ -e "$nodedir_req/dependents.$deptag.pattern" ] && \ -# grep -m 1 -E -f "$nodedir_req/dependents.$deptag.pattern" \ -# "${DBDIR}/stage.loop_list/target_requirements.specified" > /dev/null 2>&1 -# then -# _is_requires_requirements=y -# elif [ -e "$nodedir_ini/dependents.$deptag.pattern" ] && \ -# grep -m 1 -E -f "$nodedir_ini/dependents.$deptag.pattern" \ -# "${DBDIR}/stage.loop_list/target_requirements.specified" > /dev/null 2>&1 -# then -# _is_initial_requirements=y -# fi -# fi -# if [ `cat "${DBDIR}/stage.loop_list/target_dependents.specified" 2> /dev/null | wc -l` -gt 0 ] -# then -# deptag=`options_get_dependency_type` -# _is_all= -# if [ -n "${_is_target}" ] \ -# || grep -m 1 -E "^$origin_esc$" "${DBDIR}/stage.loop_list/target_dependents.specified" \ -# > /dev/null 2>&1 -# then -# _is_target=y -# elif [ -e "$nodedir_req/requirements.$deptag.pattern" ] && \ -# grep -m 1 -E -f "$nodedir_req/requirements.$deptag.pattern" \ -# "${DBDIR}/stage.loop_list/target_dependents.specified" > /dev/null 2>&1 -# then -# _is_requires_dependents=y -# elif [ -e "$nodedir_ini/requirements.$deptag.pattern" ] && \ -# grep -m 1 -E -f "$nodedir_ini/requirements.$deptag.pattern" \ -# "${DBDIR}/stage.loop_list/target_dependents.specified" > /dev/null 2>&1 -# then -# _is_initial_dependents=y -# fi -# fi -# eof } # ============= Order the ports considering dependencies ============= @@ -848,7 +886,6 @@ END { if (srcsize[it] > 0) continue; is_operated = 1; target = srcikey[it]; -# print "[" icycle "]-- " target; delete srcikey[it]; order[norder++] = target; order_str = order_str lf_order_str; @@ -918,8 +955,10 @@ _database_build_reset_a_port_confdb () for tabel in requirements dependents do cat "${DBDIR}/$dbtag/$origin/$tabel.all.full" 2> /dev/null || : + cat "${DBDIR}/$dbtag/$origin/$tabel.all.full.orig" 2> /dev/null || : rm -f "${DBDIR}/$dbtag/$origin/$tabel.run.full" \ - "${DBDIR}/$dbtag/$origin/$tabel.build.full" 2> /dev/null + "${DBDIR}/$dbtag/$origin/$tabel.build.full" \ + "${DBDIR}/$dbtag/$origin/is_customized" 2> /dev/null done done } | sort -u >> ${DBDIR}/inspected_ports.update @@ -930,119 +969,47 @@ _database_build_reset_a_port_confdb () fileedit_rm_a_line "$origin" "${DBDIR}/obsolete_ports" fileedit_rm_a_line "$origin" "${DBDIR}/ports.inspected.list" cat "${DBDIR}/replace/$origin/origin" 2> /dev/null || : -# if [ ! -d "${PORTSDIR}/$origin" ] || \ -# echo "$origin" | grep -m 1 -E -f "${DBDIR}/conf/REPLACE.grep_from_pattern" > /dev/null -# then -# rm -rf "${DBDIR}/requires/$origin" -# else -# rm -f "${DBDIR}/requires/$origin/complete_as_node" -# fi +} + +# ============= Clear database directories for an origin ============= +database_build_clear_db_dirs () +{ + local origin db + origin=$1 + for db in requires replace targets obsolete + do + rm -rf "${DBDIR}/$db/$origin" + done } # ============= Remove configurations for a port permanently ============= database_build_forget () { - local origin origin_replace db + local origin origin_replace origin=$1 origin_replace=`_database_build_reset_a_port_confdb "$origin"` -# [ -d "${DBDIR}/initial/$origin" -o -d "${DBDIR}/replace/$origin" \ -# -o -d "${DBDIR}/requires/$origin" -o -d "${DBDIR}/targets/$origin" ] || return 0 -# touch "${DBDIR}/inspected_ports_only_partially" -# { -# echo "$origin" -# cat "${DBDIR}/replace/$origin/origin" || : -# for dbtag in initial requires -# do -# for tabel in requirements dependents -# do -# cat "${DBDIR}/$dbtag/$origin/$tabel.all.full" || : -# rm -f "${DBDIR}/$dbtag/$origin/$tabel.run.full" \ -# "${DBDIR}/$dbtag/$origin/$tabel.build.full" -# done -# done -# } 2> /dev/null | sort -u >> ${DBDIR}/inspected_ports.update -# for level in full direct node -# do -# fileedit_rm_a_line "$origin" "${DBDIR}/ports.inspected.${level}.list" -# done -# fileedit_rm_a_line "$origin" "${DBDIR}/obsolete_ports" -# fileedit_rm_a_line "$origin" "${DBDIR}/ports.inspected.list" -# fileedit_add_a_line_if_new "$origin" "${DBDIR}/stage.loop_list/ports_to_inspect.remain" -# fileedit_add_a_line_if_new "$origin" "${DBDIR}/to_be_reconf" -# origin_replace=`cat "${DBDIR}/replace/$origin/origin" 2> /dev/null` || : -# if [ ! -d "${PORTSDIR}/$origin" ] || \ -# echo "$origin" | grep -m 1 -E -f "${DBDIR}/conf/REPLACE.grep_from_pattern" > /dev/null -# then -# rm -rf "${DBDIR}/requires/$origin" -# else -# rm -f "${DBDIR}/requires/$origin/complete_as_node" -# fi -# for db in replace targets obsolete -# do -# rm -rf "${DBDIR}/$db/$origin" -# done fileedit_rm_a_line "$origin" "${DBDIR}/targets_specified_so_far" [ -z "$origin_replace" ] || database_build_forget "$origin_replace" - for db in requires replace targets obsolete - do - rm -rf "${DBDIR}/$db/$origin" - done + database_build_clear_db_dirs "$origin" } # ============= Patch to the temporary database so as to re-inspect and reinstall ports whose configurations were changed ============= database_build_patch_reconf () { local origin origin_replace -# local origin origin_replace db origin=$1 origin_replace=`_database_build_reset_a_port_confdb "$origin"` -# [ -d "${DBDIR}/initial/$origin" -o -d "${DBDIR}/replace/$origin" \ -# -o -d "${DBDIR}/requires/$origin" -o -d "${DBDIR}/targets/$origin" ] || return 0 -# touch "${DBDIR}/inspected_ports_only_partially" -# { -# echo "$origin" -# cat "${DBDIR}/replace/$origin/origin" || : -# for dbtag in initial requires -# do -# for tabel in requirements dependents -# do -# cat "${DBDIR}/$dbtag/$origin/$tabel.all.full" || : -# rm -f "${DBDIR}/$dbtag/$origin/$tabel.run.full" \ -# "${DBDIR}/$dbtag/$origin/$tabel.build.full" -# done -# done -# } 2> /dev/null >> ${DBDIR}/inspected_ports.update -# for level in full direct node -# do -# fileedit_rm_a_line "$origin" "${DBDIR}/ports.inspected.${level}.list" -# done -# fileedit_rm_a_line "$origin" "${DBDIR}/obsolete_ports" -# fileedit_rm_a_line "$origin" "${DBDIR}/ports.inspected.list" [ -d "${DBDIR}/initial/$origin" -o -d "${DBDIR}/requires/$origin" ] && \ fileedit_add_a_line_if_new "$origin" "${DBDIR}/stage.loop_list/ports_to_inspect" fileedit_add_a_line_if_new "$origin" "${DBDIR}/to_be_reconf" -# origin_replace=`cat "${DBDIR}/replace/$origin/origin" 2> /dev/null` || : -# if [ ! -d "${PORTSDIR}/$origin" ] || \ -# echo "$origin" | grep -m 1 -E -f "${DBDIR}/conf/REPLACE.grep_from_pattern" > /dev/null -# then -# rm -rf "${DBDIR}/requires/$origin" -# else -# rm -f "${DBDIR}/requires/$origin/complete_as_node" -# fi -# for db in replace targets obsolete -# do -# rm -rf "${DBDIR}/$db/$origin" -# done [ -z "$origin_replace" ] || database_build_patch_reconf "$origin_replace" - for db in requires replace targets obsolete - do - rm -rf "${DBDIR}/$db/$origin" - done + database_build_clear_db_dirs "$origin" } -# ============= Post`processes after finishing to inspect dependencies ============= +# ============= Post-processes after finishing to inspect dependencies ============= database_build_post_inspect_dependencies () { + local table touch "${DBDIR}/obsolete_ports" "${DBDIR}/inspected_ports.update" find "${DBDIR}/requires" -depth 2 -type d \ | sed -E 's|.*/([^/]+/[^/]+)$|\1|' > ${DBDIR}/inspected_ports @@ -1070,6 +1037,7 @@ database_build_post_inspect_dependencies () origin_regexp=`str_escape_regexp "$origin"` origin_esc=`str_escape_replaceval "$origin"` echo "s/^$origin_orig_regexp$/$origin_esc/" >> ${DBDIR}/REPLACE.complete_sed_pattern.tmp + [ -z "$origin_regexp" ] && continue echo "s/^$origin_regexp$/$origin_orig_esc/" >> ${DBDIR}/REVERSE_REPLACE.complete_sed_pattern.tmp done mv "${DBDIR}/REPLACE.complete_sed_pattern.tmp" "${DBDIR}/REPLACE.complete_sed_pattern" @@ -1091,43 +1059,24 @@ database_build_post_inspect_dependencies () else cat "${DBDIR}/inspected_ports.update" "${DBDIR}/stage.loop_list/convert_dependency_lists" \ 2> /dev/null | sort -u > ${DBDIR}/stage.loop_list/convert_dependency_lists.tmp - mv "${DBDIR}/stage.loop_list/convert_dependency_lists.tmp" "${DBDIR}/stage.loop_list/convert_dependency_lists" + mv "${DBDIR}/stage.loop_list/convert_dependency_lists.tmp" \ + "${DBDIR}/stage.loop_list/convert_dependency_lists" rm -f "${DBDIR}/inspected_ports.update" fi else - program_chk_stage_loop_complete CONVERT_REQUIREMENTS_LIST && rm -f "${DBDIR}/stage.loop_list/convert_dependency_lists" + program_chk_stage_loop_complete CONVERT_REQUIREMENTS_LIST \ + && rm -f "${DBDIR}/stage.loop_list/convert_dependency_lists" fi + { + sed -E -f "${DBDIR}/REPLACE.complete_sed_pattern" "${DBDIR}/need.list" || : + cat "${DBDIR}/need.list" || : + } 2> /dev/null | sort -u > ${DBDIR}/need.with_replaced.list + for table in requirements dependents itself + do + [ -e "${DBDIR}/stage.loop_list/target_$table.specified" ] || continue + sed -E -f "${DBDIR}/REPLACE.complete_sed_pattern" \ + "${DBDIR}/stage.loop_list/target_$table.specified" \ + > ${DBDIR}/stage.loop_list/target_$table.replaced.specified + done cp /dev/null "${DBDIR}/update_dependencies" } - -# # ============= Remove configurations for a port with its requirements permanently unless initially installed ============= -# database_build_rm_new_port_conf () -# { -# local origin src_scope dst_dependents dst_requirements origin_orig -# origin=$1 -# src_scope=$2 -# dst_dependents=$3 -# dst_requirements=$4 -# if [ -e "${DBDIR}/REVERSE_REPLACE.complete_sed_pattern" ] -# then -# origin_orig=`echo "$origin" | sed -E -f "${DBDIR}/REVERSE_REPLACE.complete_sed_pattern"` -# else -# origin_orig=$origin -# fi -# if [ -n "$dst_requirements" ] -# then -# cat "${DBDIR}/requires/$origin/requirements.all.full" 2> /dev/null >> $dst_requirements || : -# fi -# if [ -n "$dst_dependents" ] -# then -# cat "${DBDIR}/requires/$origin/dependents.all.full" 2> /dev/null >> $dst_dependents || : -# fi -# if [ -e "${DBDIR}/initial/$origin/installed_version" -o -e "${DBDIR}/initial/$origin_orig/installed_version" ] -# then -# message_echo "$origin (reset)" -# database_build_patch_reconf "$origin" -# else -# message_echo "$origin (removed)" -# database_build_forget "$origin" -# fi -# }