OSDN Git Service

Fixed a bug that obsolete or moved ports were not inspected. For this purpose, the...
[portsreinstall/current.git] / lib / libdatabase_build.sh
index dbee841..bef02a7 100644 (file)
@@ -2,94 +2,19 @@
 # ==============================================================================
 # portsreinstall library script
 # - Operations for building the temporary database -
-# Copyright (C) 2013 Mamoru Sakaue, MwGhennndo, All Rights Reserved.
+# Copyright (C) 2013-2018 Mamoru Sakaue, MwGhennndo, All Rights Reserved.
 # This software is distributed under the 2-Clause BSD License.
 # ==============================================================================
 
-# ============= Variables =============
-DATABASE_VERSION=
-DATABASE_IS_OBSOLETE=no
-
-# ============= Creation =============
-database_build_create ()
-{
-       [ `id -u` -eq 0 -a ! -d "${DBDIR}" ] && mkdir -p "${DBDIR}"
-       misc_lock_duplicated_executions "${DBDIR}/.lock"
-       if [ -e "${DBDIR}/MYVERSION" ]
-       then
-               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
-                       message_echo "       in order to enable the current version." >&2
-                       exit 1
-               fi
-       elif misc_is_superuser_privilege
-       then
-               echo "$MYVERSION" > ${DBDIR}/MYVERSION
-       fi
-       DATABASE_VERSION=`cat "${DBDIR}"/MYVERSION 2> /dev/null || :`
-       misc_is_superuser_privilege || return 0
-       for subdir in initial requires replace targets obsolete backup_packages \
-               stage.loop_list stage.complete stage.reinit_loop stage.depends
-       do
-               [ -d "${DBDIR}/$subdir" ] || mkdir -p "${DBDIR}/$subdir"
-       done
-}
-
-# ============= Refresh the temporary database =============
-database_build_refresh ()
-{
-       misc_is_superuser_privilege || return
-       [ $opt_suppress_obsolete_db_clean = no ] || return
-       message_echo "INFO: The temporary database is cleaned up."
-       message_echo
-       [ -d "${DBDIR}" -a ! -d "${DBDIR}.tmp" ] && mv "${DBDIR}" "${DBDIR}.tmp"
-       database_build_create
-       mv "${DBDIR}.tmp/saved_options.sh" "${DBDIR}" 2> /dev/null || :
-       mv "${DBDIR}.tmp/backup_packages" "${DBDIR}" 2> /dev/null || :
-       mv "${DBDIR}.tmp/backup_pkgarcs.lst" "${DBDIR}" 2> /dev/null || :
-       rm -rf "${DBDIR}.tmp"
-}
-
-# ============= Clean up the temporary database for upgrade of this utility =============
-database_build_clean_for_self_upgrade ()
-{
-       misc_is_superuser_privilege || return
-       [ $opt_suppress_obsolete_db_clean = no ] || return
-       rm -rf "${DBDIR}"
-       database_build_create
-       [ -e "${DBDIR}/MYVERSION" ] && mv "${DBDIR}/MYVERSION" "${DBDIR}/MYVERSION.prev"
-       :
-}
-
-# ============= Check whether the temporary database is newer than the ports tree and refresh if so =============
-database_build_refresh_if_obsolete ()
-{
-       if [ "${PORTS_INDEX_DB}" -nt "${DBDIR}"/MYVERSION ] && misc_is_superuser_privilege
-       then
-               if [ $opt_suppress_obsolete_db_clean = no -a "z${command}" = zclean ]
-               then
-                       DATABASE_IS_OBSOLETE=no
-                       message_echo "WARNING: The temporary database is older than the ports tree." >&2
-                       database_build_refresh || DATABASE_IS_OBSOLETE=yes
-               else
-                       DATABASE_IS_OBSOLETE=yes
-               fi
-       else
-               DATABASE_IS_OBSOLETE=no
-       fi
-}
-
-# ============= Register an obsolete origin =============
+# ============= Register an obsolete flavored origin =============
 database_build_register_obsolete_port ()
 {
        local origin dbpath pkgtag
        origin=$1
        dbpath=${DBDIR}/obsolete/$origin
        [ -e "$dbpath/complete_as_node" ] && return
-       [ -d "${DBDIR}/obsolete/$origin" ] || mkdir -p "${DBDIR}/obsolete/$origin"
-       pkgtag=`pkgsys_pkg_info_qO_init "$origin"`
+       mkdir -p "${DBDIR}/obsolete/$origin"
+       pkgtag=`pkgsys_get_init_pkg_from_orig "$origin"`
        [ -n "$pkgtag" ] || pkgtag='[not installed]'
        echo "$pkgtag" > ${DBDIR}/obsolete/$origin/pkgtag
        for table in dependents requirements
@@ -98,14 +23,15 @@ 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
        touch "$dbpath/complete_as_node"
 }
 
-# ============= Convert and register if an origin is obsolete =============
+# ============= Convert and register if a flavored origin is obsolete =============
 database_build_convert_and_register_origin_if_obsolete ()
 {
        local origin recursedb_in recursedb output_origin iline_db origin_new date_moved why_moved
@@ -113,12 +39,13 @@ database_build_convert_and_register_origin_if_obsolete ()
        recursedb_in=$2
        recursedb=${recursedb_in:-${PORTS_MOVED_DB}}
        echo "$origin" > ${TMPDIR}/database_build_convert_and_register_origin_if_obsolete:origin
-       [ -d "${PORTSDIR}/$origin" ] && return
+       pkgsys_exists_port "$origin" && return
        database_build_register_obsolete_port "$origin"
        grep -n -m 1 -E "^`str_escape_regexp \"$origin\"`\|" "$recursedb" 2> /dev/null > ${TMPDIR}/moved.info || :
        if [ `wc -l < ${TMPDIR}/moved.info` -eq 0 ]
        then
                fileedit_add_a_line_if_new "$origin" "${DBDIR}/obsolete_ports"
+               fileedit_rm_a_line "$origin" "${DBDIR}/moved_ports"
                if [ -n "$recursedb_in" ]
                then
                        message_echo "${DEPTH_INDEX}  ===> Disappeared port (MOVED broken?)"
@@ -135,20 +62,37 @@ database_build_convert_and_register_origin_if_obsolete ()
                if [ -n "$origin_new" ]
                then
                        message_echo "${DEPTH_INDEX}  ===> Moved to $origin_new at $date_moved because \"$why_moved\""
+                       fileedit_add_a_line_if_new "$origin" "${TMPDIR}/database_build_convert_and_register_origin_if_obsolete:origins_old"
+                       fileedit_add_a_line_if_new "$origin" "${DBDIR}/moved_ports"
+                       fileedit_rm_a_line "$origin" "${DBDIR}/obsolete_ports"
                        database_build_convert_and_register_origin_if_obsolete "$origin_new" "${TMPDIR}/MOVED.DB" || return 1
                else
                        message_echo "${DEPTH_INDEX}  ===> Deleted at $date_moved because \"$why_moved\""
                        fileedit_add_a_line_if_new "$origin" "${DBDIR}/obsolete_ports"
+                       fileedit_rm_a_line "$origin" "${DBDIR}/moved_ports"
                        return 1
                fi
        fi
 }
-# ============= [Sub-function] Get the output value of converted origin =============
-_database_build_convert_and_register_origin_if_obsolete__get_origin ()
+
+# ============= [Sub-function] Get the true latest flavored origin =============
+database_build_convert_and_register_origin_if_obsolete__get_origin ()
 {
        cat "${TMPDIR}/database_build_convert_and_register_origin_if_obsolete:origin"
 }
 
+# ============= [Sub-function] Reset the all old origins of the tested flavored origin =============
+database_build_convert_and_register_origin_if_obsolete__reset_origins_old ()
+{
+       rm -rf "${TMPDIR}/database_build_convert_and_register_origin_if_obsolete:origins_old"
+}
+
+# ============= [Sub-function] Save the all old origins of the tested flavored origin =============
+database_build_convert_and_register_origin_if_obsolete__save_origins_old ()
+{
+       cat "${TMPDIR}/database_build_convert_and_register_origin_if_obsolete:origins_old" 2> /dev/null
+}
+
 # ============= Get the make arguments for building the temporary database =============
 database_build_setup_make_args ()
 {
@@ -159,7 +103,6 @@ database_build_setup_make_args ()
                do
                        eval echo $key=\$$key
                done
-               echo 'FORCE_PKG_REGISTER=yes'
                echo 'DISABLE_VULNERABILITIES=yes'
                if [ $opt_apply_default_config = yes ]
                then
@@ -173,6 +116,8 @@ database_build_setup_make_args ()
                dbdir=${DBDIR}/requires/$origin
                [ -d "$dbdir" ] || dbdir=${DBDIR}/conf/each_port/$origin
                cat "$dbdir/MARG.conf" 2> /dev/null || :
+               flavor=`pkgsys_get_flavor_from_origin "$origin"`
+               [ -z "$flavor" ] || echo "FLAVOR=$flavor"
        } | tr '\n' ' '
 }
 
@@ -183,18 +128,20 @@ database_build_setup_make_envs ()
        origin=$1
        dbdir=${DBDIR}/requires/$origin
        [ -d "$dbdir" ] || dbdir=${DBDIR}/conf/each_port/$origin
-       cat "$dbdir/MENV.conf" 2> /dev/null || :
+       cat "$dbdir/MENV.conf" 2> /dev/null | tr '\n' ' '
 }
 
 # ============= Execute make command for building the temporary database =============
 database_build_make ()
 {
-       local origin MAKE_ARGS MAKE_ENVS
+       local origin MAKE_ARGS MAKE_ENVS port_path flavor
        origin=$1
        shift
        MAKE_ARGS=`database_build_setup_make_args "$origin"`
        MAKE_ENVS=`database_build_setup_make_envs "$origin"`
-       env $MAKE_ENVS make -C "${PORTSDIR}/$origin" "$@" $MAKE_ARGS
+       port_path=`pkgsys_get_portpath_from_origin "$origin"`
+       fs_fix_unionfs_image_if_hidden "$port_path"
+       env $MAKE_ENVS make -C "$port_path" "$@" $MAKE_ARGS
 }
 
 # ============= Set up a temporary database node for the initial state of a port =============
@@ -206,7 +153,7 @@ database_build_setup_initial_node ()
        [ -e "$dbpath/complete_as_node" ] && return
        rm -rf "$dbpath"
        mkdir -p "$dbpath"
-       pkg=`pkg_info_qO "$origin"`
+       pkg=`pkgsys_get_installed_pkg_from_origin "$origin"`
        if [ -n "$pkg" ]
        then
                echo "$pkg" > $dbpath/installed_version
@@ -215,11 +162,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,69 +195,93 @@ database_build_setup_initial_node ()
 # ============= Set up a temporary database node for the replaced/moved information of a port =============
 database_build_setup_replace_node ()
 {
-       local origin_orig origin dbpath
+       local origin_orig portoption_before portoption_after origin_trial origin dbpath tmp_msg
        origin_orig=$1
+       portoption_before=$2
+       portoption_after=$3
        dbpath=${DBDIR}/replace/$origin_orig
+       tmp_msg=${TMPDIR}/database_build_setup_replace_node:meg
        if [ ! -e "$dbpath/complete_as_node" ]
        then
                rm -rf "$dbpath"
                mkdir -p "$dbpath"
-               origin=$origin_orig
-               if echo "$origin_orig" | grep -q -E -f "${DBDIR}/conf/REPLACE.grep_from_pattern"
+               origin_trial=$origin_orig
+               if echo "$origin_orig" | grep -q -Fx -f "${DBDIR}/conf/REPLACE.filter" 2> /dev/null
                then
-                       origin=`echo "$origin_orig" | sed -E -f "${DBDIR}/conf/REPLACE.sed_pattern"`
-                       if [ "x$origin_orig" != "x$origin" ]
+                       origin_trial=`echo "$origin_orig" | sed -E -f "${DBDIR}/conf/REPLACE.sed_pattern"`
+                       if [ "x$origin_orig" != "x$origin_trial" ]
                        then
-                               if [ -n "$origin" ]
+                               if [ -n "$origin_trial" ]
                                then
-                                       message_echo "${DEPTH_INDEX}  ===> Replaced with $origin by user configuration"
+                                       message_echo "${DEPTH_INDEX}  ===> Replaced with $origin_trial by user configuration"
                                else
                                        database_build_register_obsolete_port "$origin_orig"
                                        message_echo "${DEPTH_INDEX}  ===> Deleted by user configuration"
                                fi > $dbpath/message
                        fi
                fi
-               if [ -n "$origin" ]
+               if [ -n "$origin_trial" ]
                then
-                       if database_build_convert_and_register_origin_if_obsolete "$origin" >> $dbpath/message
+                       if database_build_convert_and_register_origin_if_obsolete "$origin_trial" >> $dbpath/message
                        then
-                               origin=`_database_build_convert_and_register_origin_if_obsolete__get_origin`
+                               origin_trial=`database_build_convert_and_register_origin_if_obsolete__get_origin`
                        else
-                               if [ "x$origin" != "x$origin_orig" ]
+                               if [ "x$origin_trial" != "x$origin_orig" ]
                                then
                                        message_echo "${DEPTH_INDEX}  ===> Going back to the original port $origin_orig"
                                        if database_build_convert_and_register_origin_if_obsolete "$origin_orig"
                                        then
-                                               origin=`_database_build_convert_and_register_origin_if_obsolete__get_origin`
+                                               origin_trial=`database_build_convert_and_register_origin_if_obsolete__get_origin`
                                        else
-                                               origin=
+                                               origin_trial=
                                        fi
                                else
-                                       origin=
+                                       origin_trial=
                                fi >> $dbpath/message
                        fi
                fi
+               cat "$dbpath/message" 2> /dev/null || :
+               if [ -n "$origin_trial" ]
+               then
+                       database_build_make "$origin_trial" showconfig > $portoption_before 2> /dev/null || :
+                       database_build_determine_port_option "$origin_trial"
+                       database_build_make "$origin_trial" showconfig > $portoption_after 2> /dev/null || :
+                       origin=`database_build_determine_flavored_origin "$origin_trial"`
+                       if [ "x$origin_trial" != "x$origin" ]
+                       then
+                               if [ -n "$origin" ]
+                               then
+                                       message_echo "${DEPTH_INDEX}  ===> Transferred to $origin"
+                               else
+                                       fileedit_add_a_line_if_new "$origin" "${DBDIR}/obsolete_ports"
+                                       message_echo "${DEPTH_INDEX}  ===> Lost (Something is wrong!)"
+                               fi
+                       fi > $tmp_msg
+                       cat "$tmp_msg" >> $dbpath/message
+               else
+                       origin=
+               fi
                [ "x$origin_orig" = "x$origin" ] || echo "$origin" > $dbpath/origin
+               cat "$tmp_msg" 2> /dev/null || :
                touch "$dbpath/complete_as_node"
+       else
+               cat "$dbpath/message" 2> /dev/null || :
        fi
-       cat "$dbpath/message" 2> /dev/null || :
 }
 
 # ============= Get the inspected level for a port with the current option settings =============
 database_build_get_inspected_level ()
 {
-       local origin origin_dependent origin_esc origin_dependent_esc
+       local origin origin_dependent
        origin=$1
        origin_dependent=$2
-       origin_esc='^'`str_escape_regexp "$origin"`'$'
-       origin_dependent_esc='^'`str_escape_regexp "$origin_dependent"`'$'
        if [ $opt_only_target_scope = no ]
        then
                echo full
-       elif ! pkgsys_pkg_info_eO "$origin" \
-               || grep -E "$origin_esc" "${DBDIR}/stage.loop_list/ports_to_inspect" > /dev/null \
-               || [ ! -e "${DBDIR}/requires/$origin_dependent/installed_version" ] \
-               || grep -E "$origin_dependent_esc" "${DBDIR}/stage.loop_list/ports_to_inspect" > /dev/null
+       elif ! pkgsys_exists_or_existed_from_orig "$origin" \
+               || grep -qFx "$origin" "${DBDIR}/stage.loop_list/ports_to_inspect" 2> /dev/null \
+               || [ ! -e "${DBDIR}/moved_from/$origin_dependent/installed_version" ] \
+               || grep -qFx "$origin_dependent" "${DBDIR}/stage.loop_list/ports_to_inspect" 2> /dev/null
        then
                echo direct
        else
@@ -319,34 +292,42 @@ database_build_get_inspected_level ()
 # ============= Check whether a port has been inspected in a required level =============
 database_build_is_port_already_inspected_in_required_level ()
 {
-       local origin origin_dependent origin_actual origin_esc inspected_level
+       local origin origin_dependent origin_actual inspected_level
        origin=$1
        origin_dependent=$2
        origin_actual=`echo "$origin" | sed -E -f "${DBDIR}/REPLACE.complete_sed_pattern" 2> /dev/null || :`
        [ -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 -q -E "^$origin_esc$" "${DBDIR}/ports.inspected.${inspected_level}.list" \
-               "${DBDIR}/obsolete_ports" 2> /dev/null || return
+       {
+               cat "${DBDIR}/ports.inspected.${inspected_level}.list" || :
+               cat "${DBDIR}/moved_ports" || :
+               cat "${DBDIR}/obsolete_ports" || :
+       }  2> /dev/null | grep -q -Fx "$origin_actual" || 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"
-       :
+       echo "$origin_actual"
 }
 
 # ============= Update the current package name of a port =============
 database_build_update_pkgname ()
 {
-       local origin pkg savefile
+       local origin dbdir pkg savefile
        origin=$1
-       savefile=${DBDIR}/requires/$origin/current_version
-       pkg=`pkg_info_qO "$origin" || :`
-       if [ -z "$pkg" -a -e "${DBDIR}/requires/$origin/initial_orig" ]
+       dbdir=${DBDIR}/moved_from/$origin
+       mkdir -p "$dbdir"
+       savefile=$dbdir/current_version
+       pkg=`pkgsys_get_installed_pkg_from_origin "$origin"`
+       if [ -z "$pkg" -a -e "$dbdir/initial_orig" ]
        then
-               origin_orig=`cat "${DBDIR}/requires/$origin/initial_orig"`
-               pkg=`pkg_info_qO "$origin_orig" || :`
-       fi
-       echo -n "$pkg" > $savefile
+               while read orig_init
+               do
+                       pkgsys_get_installed_pkg_from_origin "$orig_init"
+               done < $dbdir/initial_orig
+       elif [ -n "$pkg" ]
+       then
+               echo "$pkg"
+       fi | sort -u > $savefile
        cat "$savefile"
 }
 
@@ -355,7 +336,7 @@ database_build_get_pkgname ()
 {
        local origin savefile
        origin=$1
-       savefile=${DBDIR}/requires/$origin/current_version
+       savefile=${DBDIR}/moved_from/$origin/current_version
        if [ -e "$savefile" ]
        then
                cat "$savefile"
@@ -367,7 +348,7 @@ database_build_get_pkgname ()
 # ============= Get the new package name of a port =============
 database_build_get_new_pkgname ()
 {
-       local origin savefile pkg
+       local origin savefile
        origin=$1
        savefile=${DBDIR}/requires/$origin/new_version
        if [ ! -e "$savefile" ]
@@ -378,12 +359,33 @@ database_build_get_new_pkgname ()
        cat "$savefile"
 }
 
+# ============= Get the package list of full-run-time requirements =============
+database_build_get_full_run_requirement_pkgs ()
+{
+       local origin srcfile savefile
+       origin=$1
+       srcfile=${DBDIR}/requires/$origin/requirements.run.full
+       savefile=${DBDIR}/requires/$origin/pkg_requirements.run.full
+       if [ ! -e "$srcfile" ]
+       then
+               rm -f "$savefile"
+       elif [ ! -e "$savefile" -o "$savefile" -ot "$srcfile" ]
+       then
+               while read origin
+               do
+                       database_build_get_new_pkgname "$origin"
+               done < $srcfile | grep -v '^[[:space:]]*$' | sort -u > $savefile
+       fi
+       cat "$savefile" 2> /dev/null || :
+}
+
 # ============= Build the original message tag showing the version upgrade =============
 database_build_create_pkgtag ()
 {
        local origin dbdir pkg_init pkg_new pkgtag
        origin=$1
-       dbdir=${DBDIR}/requires/$origin
+       dbdir=${DBDIR}/moved_from/$origin
+       mkdir -p "$dbdir"
        pkg_init=`database_build_get_pkgname "$origin"`
        [ -n "$pkg_init" -a ! -e "$dbdir/installed_version" ] && \
                echo -n "$pkg_init" > $dbdir/installed_version
@@ -410,11 +412,13 @@ database_build_create_pkgtag ()
 # ============= Update the message tag showing the version upgrade =============
 database_build_update_pkgtag ()
 {
-       local origin pkg_init pkg_bak pkg_cur detail pkgtag
+       local origin dbdir 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"`
+       dbdir=${DBDIR}/moved_from/$origin
+       mkdir -p "$dbdir"
+       pkg_init=`cat "$dbdir/installed_version" 2> /dev/null | tr '\n' ' ' | sed 's/ *$//'`
+       pkg_bak=`cat "$dbdir/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
@@ -428,8 +432,8 @@ database_build_update_pkgtag ()
                        detail=" [currently deinstalled]"
                fi
        fi
-       pkgtag=`cat "${DBDIR}/requires/$origin/pkgtag.orig"`
-       echo "$pkgtag$detail" > ${DBDIR}/requires/$origin/pkgtag
+       pkgtag=`cat "$dbdir/pkgtag.orig"`
+       echo "$pkgtag$detail" > $dbdir/pkgtag
 }
 
 # ============= Check whether the currently installed package version is the latest =============
@@ -437,194 +441,525 @@ 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" ]
 }
+# ============= Configure the port option to determine the true flavor =============
+database_build_determine_port_option ()
+{
+       local origin
+       origin=$1
+       if [ $opt_apply_default_config = yes ]
+       then
+               if ! pkgsys_is_dialog4ports_used
+               then
+                       printf '\t\n' | database_build_make "$origin" config-conditional > /dev/null
+               fi
+       else
+               database_build_make "$origin" config-conditional
+       fi
+}
+
+# ============= Get the true flavor to determine the flavored port origin =============
+database_build_determine_flavored_origin ()
+{
+       local origin origin_unflavored flavor_trial origin_trial flavors_ptn flavor
+       origin=$1
+       origin_unflavored=`pkgsys_get_unflavored_origin "$origin"`
+       flavor_trial=`pkgsys_get_flavor_from_origin "$origin"`
+       if [ -n "$flavor_trial" ]
+       then
+               flavors_ptn="^("`database_build_make "$origin" -V FLAVORS 2> /dev/null | sed -E 's/[[:space:]]+/|/g'`")$"
+               echo "$flavor_trial" | grep -qE "$flavors_ptn" || flavor_trial=
+       fi
+       origin_trial=`pkgsys_compose_flavored_origin "$origin_unflavored" "$flavor_trial"`
+       flavor=`database_build_make "$origin_trial" -V FLAVOR 2> /dev/null || :`
+       pkgsys_compose_flavored_origin "$origin_unflavored" "$flavor"
+}
+
+# ============= Escape of inspection conflict =============
+database_build_escape_inspect_conflict ()
+{
+       local origin dbpath
+       origin=$1
+       dbpath=${DBDIR}/requires/$origin
+       if [ -e "$dbpath/CONFLICT.conf" ]
+       then
+               message_echo "${DEPTH_INDEX}  ===> Escaping inspection conflict..."
+               pkgsys_eval_ports_glob `cat "$dbpath/CONFLICT.conf"` | database_build_escape "$dbpath/CONFLICT_pkgarc.lst"
+       fi
+}
+
+# ============= Escape of conflicts =============
+# A list of conflict package origins are given by stdin.
+database_build_escape ()
+{
+       local backup_list origin_conflict pkg_conflict pkgarc
+       backup_list=$1
+       while read origin_conflict
+       do
+               pkg_conflict=`pkgsys_get_installed_pkg_from_origin "$origin_conflict"`
+               [ -n "$pkg_conflict" ] || continue
+               message_echo "${DEPTH_INDEX}  ===> Escaping $pkg_conflict..."
+               pkgarc=`pkgsys_create_backup_pkg "$pkg_conflict" "${DBDIR}/backup_packages" 2> /dev/null` || \
+                       message_echo "${DEPTH_INDEX}  ===> (WARNING: Failed to back up)"
+               pkg_delete_f "$pkg_conflict" > /dev/null 2>&1 || \
+                       message_echo "${DEPTH_INDEX}  ===> (WARNING: Failed to delete)"
+               [ -n "$pkgarc" ] && printf '%s\t%s\n' "$pkg_conflict" "$pkgarc" >> $backup_list
+       done
+}
+
+# ============= Restoration of escaped inspection conflict =============
+database_build_restore_inspect_conflict ()
+{
+       local origin dbpath
+       origin=$1
+       dbpath=${DBDIR}/requires/$origin
+       if [ -e "$dbpath/CONFLICT.conf" ]
+       then
+               message_echo "${DEPTH_INDEX}  ===> Restoring inspection conflict..."
+               cat "$dbpath/CONFLICT_pkgarc.lst" 2> /dev/null | database_build_restore
+               rm -f "$dbpath/CONFLICT_pkgarc.lst"
+       fi
+}
+
+# ============= Restoration of escaped conflicts =============
+# The backup list is given by stdin.
+database_build_restore ()
+{
+       local pkg_conflict pkgarc
+       while read pkg_conflict pkgarc
+       do
+               pkg_info_e "$pkg_conflict" && continue
+               message_echo "${DEPTH_INDEX}  ===> Restoring $pkg_conflict..."
+               pkg_add_f "$pkgarc" > /dev/null 2>&1 || \
+                       message_echo "${DEPTH_INDEX}  ===> (WARNING: Failed to restore $pkg_conflict)"
+       done
+}
 
 # ============= Recursively inspect dependencies of a port and build a node database of the information =============
 database_build_inspect_dependencies ()
 {
-       local origin_orig origin_dependent origin_orig_regexp origin origin_regexp tag stage dbpath origin_id origin_dependency DEPTH_INDEX_orig nlines iline dist_subdir_rpl inspected_level inspected_levels_compatible origin_tmp inspected_level_tmp conf_updated
+       local origin_orig origin_dependent origin_orig_regexp origin_replace origin tag stage level dbpath dbpath_prev origin_id tmp_config origin_dependency DEPTH_INDEX_orig nlines iline dist_subdir_rpl inspected_level inspected_levels_compatible origin_tmp inspected_level_tmp conf_updated tmp_portsdb_work tmp_portopt same_as_prevset dbfile installed_version frompath variable pkg_new
        origin_orig=$1
        origin_dependent=$2
        [ -z "$origin_orig" ] && return
-       database_build_is_port_already_inspected_in_required_level "$origin_orig" "$origin_dependent" && return
-       origin_orig_regexp=`str_escape_regexp "$origin_orig"`
-       DEPTH_INDEX_orig=${DEPTH_INDEX}
-       DEPTH_INDEX="${DEPTH_INDEX}--"
-       message_echo "${DEPTH_INDEX} $origin_orig"
-       origin_id=`echo "$origin_orig" | tr / :`
-       database_build_setup_initial_node "$origin_orig"
-       database_build_setup_replace_node "$origin_orig"
-       if [ -e "${DBDIR}/replace/$origin_orig/origin" ]
+       if ! origin=`database_build_is_port_already_inspected_in_required_level "$origin_orig" "$origin_dependent"`
        then
-               origin=`cat "${DBDIR}/replace/$origin_orig/origin"`
-       else
-               origin=$origin_orig
-       fi
-       origin_regexp=`str_escape_regexp "$origin"`
-       inspected_level=
-       inspected_levels_compatible=
-       if [ -n "$origin" ]
-       then
-               fileedit_rm_a_line "$origin" "${DBDIR}/obsolete_ports"
-               dbpath=${DBDIR}/requires/$origin
-               if [ ! -e "$dbpath/complete_as_node" ]
+               DEPTH_INDEX_orig=${DEPTH_INDEX}
+               DEPTH_INDEX="${DEPTH_INDEX}--"
+               message_echo "${DEPTH_INDEX} $origin_orig"
+               database_build_convert_and_register_origin_if_obsolete__reset_origins_old
+               origin_id=`echo "$origin_orig" | tr / :`
+               # Replacement specified by the configuration file, knobs and port options
+               tmp_config=${TMPDIR}/database_build_inspect_dependencies:config
+               database_build_setup_replace_node "$origin_orig" "$tmp_config.before" "$tmp_config.after"
+               if [ -e "${DBDIR}/replace/$origin_orig/origin" ]
                then
-                       conf_updated=
-                       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
-                       fi
-                       rm -rf "$dbpath"
-                       mkdir -p "$dbpath"
-                       [ -n "$conf_updated" ] && touch "$dbpath/conf_updated"
-                       [ "x$origin_orig" = "x$origin" ] || echo "$origin_orig" > $dbpath/initial_orig
-                       [ -e "${DBDIR}/initial/$origin_orig/SUPPRESSED_SELF" ] && touch "$dbpath/SUPPRESSED_SELF"
-                       [ -e "${DBDIR}/initial/$origin_orig/SUPPRESSED_PKGNG" ] && touch "$dbpath/SUPPRESSED_PKGNG"
-                       if [ -d "${DBDIR}/conf/each_port/$origin" ]
-                       then
-                               cp -R "${DBDIR}/conf/each_port/$origin/"* "$dbpath/" > /dev/null 2>&1 || :
-                       fi
-                       tmp_portsdb_work=${TMPDIR}/database_build_inspect_dependencies:portsdb_work
-                       [ -d "$tmp_portsdb_work" ] || mkdir "$tmp_portsdb_work"
-                       ( set -e
-                               export PORT_DBDIR=$tmp_portsdb_work
-                               database_build_make "$origin" showconfig > $dbpath/ports_options.default
-                       )
-                       if [ `wc -c < $dbpath/ports_options.default` -gt 0 ]
+                       origin=`cat "${DBDIR}/replace/$origin_orig/origin"`
+               else
+                       origin=$origin_orig
+               fi
+               # Build the database for this port
+               inspected_level=
+               inspected_levels_compatible=
+               if [ -n "$origin" ]
+               then
+                       frompath=${DBDIR}/moved_from/$origin
+                       mkdir -p "$frompath"
+                       database_build_convert_and_register_origin_if_obsolete__save_origins_old | \
+                               fileedit_add_lines_if_new "$frompath/old_origs"
+                       # Check the package name initially installed
+                       installed_version=`cat "${DBDIR}/initial/$origin_orig/installed_version" 2> /dev/null || :`
+                       [ -n "$installed_version" ] && fileedit_add_a_line_if_new "$installed_version" "$frompath/installed_version"
+                       [ "x$origin_orig" = "x$origin" ] || fileedit_add_a_line_if_new "$origin_orig" "$frompath/initial_orig"
+                       [ -e "${DBDIR}/initial/$origin_orig/SUPPRESSED_SELF" ] && touch "$frompath/SUPPRESSED_SELF"
+                       [ -e "${DBDIR}/initial/$origin_orig/SUPPRESSED_PKGNG" ] && touch "$frompath/SUPPRESSED_PKGNG"
+                       if ! grep -qFx "$origin" "${DBDIR}/done_required_ports_to_inspect" 2> /dev/null
                        then
-                               if [ $opt_apply_default_config = yes ]
+                               fileedit_rm_a_line "$origin" "${DBDIR}/obsolete_ports"
+                               fileedit_rm_a_line "$origin" "${DBDIR}/moved_ports"
+                               dbpath=${DBDIR}/requires/$origin
+                               dbpath_prev=${DBDIR}/prevset/requires/$origin
+                               if [ ! -e "$dbpath/complete_as_node" ] || \
+                                       ! diff "$tmp_config.before" "$tmp_config.after" > /dev/null 2> /dev/null
                                then
-                                       if ! pkgsys_is_dialog4ports_used
+                                       # Notify reconfiguration of the port option
+                                       conf_updated=
+                                       if [ -e "$dbpath/complete_as_node" ] || \
+                                               grep -q -Fx -e "$origin_orig" -e "$origin" "${DBDIR}/to_be_reconf" 2> /dev/null
                                        then
-                                               printf '\t\n' | database_build_make "$origin" config-conditional > /dev/null
+                                               message_echo "${DEPTH_INDEX}  ===> Reconfigured"
+                                               conf_updated=y
                                        fi
+                                       # Reset the database
+                                       rm -rf "$dbpath"
+                                       mkdir -p "$dbpath"
+                                       [ -n "$conf_updated" ] && touch "$dbpath/conf_updated"
+                                       if [ -d "${DBDIR}/conf/each_port/$origin" ]
+                                       then
+                                               cp -R "${DBDIR}/conf/each_port/$origin/"* "$dbpath/" > /dev/null 2>&1 || :
+                                       fi
+                                       # Escape of inspection conflict
+                                       database_build_escape_inspect_conflict "$origin"
+                                       # Check the change of the port option from the default
+                                       tmp_portsdb_work=${TMPDIR}/database_build_inspect_dependencies:portsdb_work
+                                       tmp_portopt=${TMPDIR}/database_build_inspect_dependencies:portopt
+                                       [ -d "$tmp_portsdb_work" ] || mkdir "$tmp_portsdb_work"
+                                       ( set -e
+                                               export PORT_DBDIR=$tmp_portsdb_work
+                                               export __MAKE_CONF=
+                                               if database_build_make "$origin" showconfig > $tmp_portopt
+                                               then
+                                                       cp "$tmp_portopt" "$dbpath"/ports_options.default
+                                               else
+                                                       cat "$tmp_portopt" >&2
+                                                       message_echo 'Error in detecting the default options.' 2>&1
+                                                       exit 1
+                                               fi
+                                       )
+                                       if [ `wc -c < $dbpath/ports_options.default` -gt 0 ]
+                                       then
+                                               if database_build_make "$origin" showconfig > $tmp_portopt
+                                               then
+                                                       cp "$tmp_portopt" "$dbpath"/ports_options.current
+                                               else
+                                                       cat "$tmp_portopt" >&2
+                                                       message_echo 'Error in detecting the current options.' 2>&1
+                                                       exit 1
+                                               fi
+                                       else
+                                               cp /dev/null "$dbpath/ports_options.current"
+                                       fi
+                                       pkgsys_save_port_oprion_timestamp "$origin"
+                                       # Get the lists of requirements in the flavored form
+                                       database_build_create_pkgtag "$origin"
+                                       for variable in PKG_DEPENDS EXTRACT_DEPENDS PATCH_DEPENDS FETCH_DEPENDS BUILD_DEPENDS LIB_DEPENDS
+                                       do
+                                               database_build_make "$origin" -V $variable
+                                       done > ${TMPDIR}/database_build_inspect_dependencies:build_depends_list
+                                       for variable in LIB_DEPENDS RUN_DEPENDS
+                                       do
+                                               database_build_make "$origin" -V $variable
+                                       done > ${TMPDIR}/database_build_inspect_dependencies:run_depends_list
+                                       for tag in run build
+                                       do
+                                               tr ' ' '\n' < ${TMPDIR}/database_build_inspect_dependencies:${tag}_depends_list | \
+                                                       sed -E 's#.*:([^:/]+/[^:/]+|[^:/]+/[^:/]+:[^:/]*)$#\1#' | cut -d : -f 1 | sort -u | \
+                                                       grep -Ev "`pkgsys_pkgtools_ports_filter_regexp`" \
+                                                               | while read origin_flavor_incomplete
+                                                               do
+                                                                       ( set -e
+                                                                               opt_apply_default_config=yes
+                                                                               database_build_determine_port_option "$origin_flavor_incomplete"
+                                                                       )
+                                                                       database_build_determine_flavored_origin "$origin_flavor_incomplete"
+                                                               done | grep -v '^$' | sort -u > $dbpath/requirements.$tag.orig || :
+                                               sed -E -f "${DBDIR}/conf/REPLACE.sed_pattern" "$dbpath/requirements.$tag.orig" \
+                                                       | grep -v '^$' | sort -u > $dbpath/requirements.$tag.src || :
+                                       done
+                                       for stage in orig src
+                                       do
+                                               sort -u "$dbpath/requirements.run.${stage}" "$dbpath/requirements.build.${stage}" \
+                                                       > $dbpath/requirements.all.direct.${stage}
+                                               mv "$dbpath/requirements.build.${stage}" "$dbpath/requirements.build.direct.${stage}"
+                                               mv "$dbpath/requirements.run.${stage}" "$dbpath/requirements.run.direct.${stage}"
+                                       done
+                                       # Record the completion
+                                       touch "$dbpath/complete_as_node"
+                                       fileedit_rm_a_line "$origin_orig" "${DBDIR}/to_be_reconf"
+                                       fileedit_rm_a_line "$origin" "${DBDIR}/to_be_reconf"
+                                       # Restoration of escaped inspection conflict
+                                       database_build_restore_inspect_conflict "$origin"
                                else
-                                       database_build_make "$origin" config-conditional
+                                       # Restoration of escaped inspection conflict
+                                       database_build_restore_inspect_conflict "$origin"
+                                       # Reset the complied lists of requirements
+                                       for level in direct full
+                                       do
+                                               for tag in run build
+                                               do
+                                                       rm -f "$dbpath/requirements.${tag}.${level}"
+                                               done
+                                       done
+                                       for origin_tmp in "$origin" "$origin_orig"
+                                       do
+                                               for inspected_level_tmp in full direct node
+                                               do
+                                                       fileedit_rm_a_line "$origin_tmp" "${DBDIR}/ports.inspected.${inspected_level_tmp}.list"
+                                               done
+                                       done
                                fi
-                               database_build_make "$origin" showconfig > $dbpath/ports_options.current
-                       else
-                               cp /dev/null "$dbpath/ports_options.current"
-                       fi
-                       if [ ! -e "${DBDIR}/initial/$origin_orig/installed_version" ]
-                       then
-                               cp "${DBDIR}/initial/$origin_orig/installed_version" "$dbpath" 2> /dev/null || :
-                       fi
-                       database_build_create_pkgtag "$origin"
-                       for tag in run build
-                       do
-                               database_build_make "$origin" $tag-depends-list \
-                                       | sed -E "s/^`str_escape_regexp "${PORTSDIR}"`\///" \
-                                       > $dbpath/requirements.$tag.orig || :
-                               sed -E -f "${DBDIR}/conf/REPLACE.sed_pattern" "$dbpath/requirements.$tag.orig" \
-                                       | grep -v '^$' > $dbpath/requirements.$tag.src || :
-                       done
-                       for stage in orig src
-                       do
-                               sort -u "$dbpath/requirements.run.${stage}" "$dbpath/requirements.build.${stage}" \
-                                       > $dbpath/requirements.all.direct.${stage}
-                               mv "$dbpath/requirements.build.${stage}" "$dbpath/requirements.build.direct.${stage}"
-                               mv "$dbpath/requirements.run.${stage}" "$dbpath/requirements.run.direct.${stage}"
-                       done
-                       touch "$dbpath/complete_as_node"
-                       fileedit_rm_a_line "$origin_orig" "${DBDIR}/to_be_reconf"
-                       fileedit_rm_a_line "$origin" "${DBDIR}/to_be_reconf"
-               else
-                       for level in direct full
-                       do
-                               for tag in run build
+                               # Inspect the requirements
+                               inspected_level=`database_build_get_inspected_level "$origin" "$origin_dependent"`
+                               case $inspected_level in
+                               full )
+                                       grep -v -Fx -f "${DBDIR}/installed_ports" \
+                                               "$dbpath/requirements.all.direct.src" > ${TMPDIR}/missing.$origin_id || :
+                                       inspected_levels_compatible='full direct node'
+                                       ;;
+                               direct )
+                                       grep -v -Fx -f "${DBDIR}/installed_ports" \
+                                               "$dbpath/requirements.all.direct.src" > ${TMPDIR}/missing.$origin_id || :
+                                       inspected_levels_compatible='direct node'
+                                       ;;
+                               node )
+                                       cp /dev/null "${TMPDIR}/missing.$origin_id"
+                                       inspected_levels_compatible='node'
+                                       ;;
+                               esac
+                               rm -rf "$dbpath/rename_requirements.sed.pattern"
+                               nlines=`wc -l < ${TMPDIR}/missing.$origin_id`
+                               iline=1
+                               while [ $iline -le $nlines ]
                                do
-                                       rm -f "$dbpath/requirements.${tag}.${level}"
+                                       origin_dependency=`sed -n ${iline}p "${TMPDIR}/missing.$origin_id"`
+                                       iline=$(($iline+1))
+                                       grep -q -Fx "$origin_dependency" "${DBDIR}/ports.inspected.list" 2> /dev/null && \
+                                                       continue
+                                       database_build_inspect_dependencies "$origin_dependency" "$origin"
                                done
-                       done
-                       for origin_tmp in "$origin" "$origin_orig"
-                       do
+                               if [ -e "$dbpath/rename_requirements.sed.pattern" ]
+                               then
+                                       for tag in run build all
+                                       do
+                                               sed -E -i .unrenamed -f "$dbpath/rename_requirements.sed.pattern" "$dbpath/requirements.${tag}.direct.src"
+                                       done
+                               fi 
+                               rm -f "${TMPDIR}/missing.$origin_id"
+                               # Inspect the distfiles
+                               dist_subdir_rpl=`database_query_get_makevar_val "$origin" DIST_SUBDIR | str_escape_replaceval_filter` || :
+                               [ -n "$dist_subdir_rpl" ] && dist_subdir_rpl="$dist_subdir_rpl\/"
+                               database_build_make "$origin" fetch-urlall-list \
+                                       | sed -E "s/.*\/([^\/]+)$/$dist_subdir_rpl\1/" \
+                                       | sort -u | fileedit_add_lines_if_new "${DBDIR}/distfiles.inspected"
+                               # Transfer data from the previous database if existent, successful and no change
+                               pkg_new=`cat "$dbpath/new_version"`
+                               if [ ! -e "$dbpath/conf_updated" -a -d "$dbpath_prev" ] && pkg_info_e "$pkg_new" 2> /dev/null && \
+                                       ! grep -qFx "$origin" "$dbpath_prev/to_be_reconf" 2> /dev/null
+                               then
+                                       same_as_prevset=yes
+                                       for dbfile in new_version CONFLICT.conf BUILDCONFLICT.conf MARG.conf MENV.conf \
+                                               ports_options.default ports_options.current \
+                                               rename_requirements.sed.pattern \
+                                               requirements.run.direct.orig requirements.run.direct.src \
+                                               requirements.build.direct.orig requirements.build.direct.src
+                                       do
+                                               [ ! -e "$dbpath/$dbfile" -a ! -e "$dbpath_prev/$dbfile" ] && continue
+                                               if ! diff "$dbpath/$dbfile"  "$dbpath_prev/$dbfile" 2> /dev/null > /dev/null
+                                               then
+                                                       same_as_prevset=no
+                                                       break
+                                               fi
+                                       done
+                                       if [ $same_as_prevset = yes ]
+                                       then
+                                               nlines=`wc -l < $dbpath/requirements.all.direct.src`
+                                               iline=1
+                                               while [ $iline -le $nlines ]
+                                               do
+                                                       origin_dependency=`sed -n ${iline}p "$dbpath/requirements.all.direct.src"`
+                                                       iline=$(($iline+1))
+                                                       if [ ! -e "${DBDIR}/requires/$origin_dependency/same_as_prevset" ]
+                                                       then
+                                                               same_as_prevset=no
+                                                               break
+                                                       fi
+                                               done
+                                       fi
+                                       if [ $same_as_prevset = yes ]
+                                       then
+                                               for dbfile in failed.list damaged_package manually_done.list
+                                               do
+                                                       if grep -qFx "$origin" "${DBDIR}/prevset/$dbfile" 2> /dev/null
+                                                       then
+                                                               same_as_prevset=no
+                                                               break
+                                                       fi
+                                               done
+                                       fi
+                                       if [ $same_as_prevset = yes ]
+                                       then
+                                               rm -rf "$dbpath"
+                                               cp -Rp "$dbpath_prev" "$dbpath"
+                                               if [ -d "${DBDIR}/prevset/notes/$origin" ]
+                                               then
+                                                       rm -rf "${DBDIR}/notes/$origin"
+                                                       mkdir -p "${DBDIR}/notes"
+                                                       cp -Rp "${DBDIR}/prevset/notes/$origin" "${DBDIR}/notes/$origin"
+                                               fi
+                                               {
+                                                       for tag in all run build none
+                                                       do
+                                                               for level in full direct
+                                                               do
+                                                                       echo "success.$tag.$level.list"
+                                                               done
+                                                       done
+                                               } | while read dbfile
+                                               do
+                                                       if grep -Fxq "$origin" "${DBDIR}/prevset/$dbfile" 2> /dev/null
+                                                       then
+                                                               fileedit_add_a_line_if_new "$origin" "${DBDIR}/$dbfile"
+                                                       fi
+                                               done
+                                               touch "$dbpath/same_as_prevset"
+                                               message_echo "${DEPTH_INDEX}  ===> No update from the previous reinstallation. Progress status inherited."
+                                       fi
+                               fi
+                               # Record the completion
+                               if [ "x$origin_orig" != "x$origin" ]
+                               then
+                                       for inspected_level_tmp in $inspected_levels_compatible
+                                       do
+                                               fileedit_add_a_line_if_new "$origin" "${DBDIR}/ports.inspected.${inspected_level_tmp}.list"
+                                       done
+                                       fileedit_add_a_line_if_new "$origin" "${DBDIR}/ports.inspected.list"
+                                       fileedit_add_a_line_if_new "$origin" "${DBDIR}/inspected_ports.update"
+                                       fileedit_rm_a_line "$origin" "${DBDIR}/stage.loop_list/ports_to_inspect.remain"
+                               fi
+                               fileedit_add_a_line_if_new "$origin" "${DBDIR}/done_required_ports_to_inspect"
+                       else
+                               message_echo "${DEPTH_INDEX}  ===> Already inspected merged port"
+                               fileedit_rm_a_line "$origin_orig" "${DBDIR}/to_be_reconf"
                                for inspected_level_tmp in full direct node
                                do
-                                       fileedit_rm_a_line "$origin_tmp" "${DBDIR}/ports.inspected.${inspected_level_tmp}.list"
+                                       fileedit_rm_a_line "$origin_orig" "${DBDIR}/ports.inspected.${inspected_level_tmp}.list"
                                done
-                       done
+                       fi
                fi
-               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.direct.src" > ${TMPDIR}/missing.$origin_id || :
-                       inspected_levels_compatible='full direct node'
-                       ;;
-               direct)
-                       grep -v -E -f "${DBDIR}/installed_ports.grep_pattern" \
-                               "$dbpath/requirements.all.direct.src" > ${TMPDIR}/missing.$origin_id || :
-                       inspected_levels_compatible='direct node'
-                       ;;
-               node)
-                       cp /dev/null "${TMPDIR}/missing.$origin_id"
-                       inspected_levels_compatible='node'
-                       ;;
-               esac
-               nlines=`wc -l < ${TMPDIR}/missing.$origin_id`
-               iline=1
-               while [ $iline -le $nlines ]
+               # Record the completion
+               for inspected_level_tmp in $inspected_levels_compatible
                do
-                       origin_dependency=`sed -n ${iline}p "${TMPDIR}/missing.$origin_id"`
-                       iline=$(($iline+1))
-                       grep -q -E '^'`str_escape_regexp "$origin_dependency"`'$' \
-                               "${DBDIR}/ports.inspected.list" 2> /dev/null && \
-                                       continue
-                       database_build_inspect_dependencies "$origin_dependency" "$origin"
+                       fileedit_add_a_line_if_new "$origin_orig" "${DBDIR}/ports.inspected.${inspected_level_tmp}.list"
                done
-               rm -f "${TMPDIR}/missing.$origin_id"
-               dist_subdir_rpl=`database_query_get_makevar_val "$origin" DIST_SUBDIR | str_escape_replaceval_filter` || :
-               [ -n "$dist_subdir_rpl" ] && dist_subdir_rpl="$dist_subdir_rpl\/"
-               database_build_make "$origin" fetch-urlall-list \
-                       | sed -E "s/.*\/([^\/]+)$/$dist_subdir_rpl\1/" \
-                       | sort -u >> ${DBDIR}/distfiles.inspected
+               fileedit_add_a_line_if_new "$origin_orig" "${DBDIR}/ports.inspected.list"
+               fileedit_add_a_line_if_new "$origin_orig" "${DBDIR}/inspected_ports.update"
+               fileedit_rm_a_line "$origin_orig" "${DBDIR}/stage.loop_list/ports_to_inspect.remain"
+               message_echo "${DEPTH_INDEX}  ===> ok"
+               DEPTH_INDEX=${DEPTH_INDEX_orig}
        fi
-       if [ "x$origin_orig" != "x$origin" ]
+       if [ -n "$origin_dependent" -a "x$origin_orig" != "x$origin" ]
        then
-               if [ -n "$origin" ]
-               then
-                       for inspected_level_tmp in $inspected_levels_compatible
-                       do
-                               fileedit_add_a_line_if_new "$origin" "${DBDIR}/ports.inspected.${inspected_level_tmp}.list"
-                       done
-                       fileedit_add_a_line_if_new "$origin" "${DBDIR}/ports.inspected.list"
-                       fileedit_add_a_line_if_new "$origin" "${DBDIR}/inspected_ports.update"
-                       fileedit_rm_a_line "$origin" "${DBDIR}/stage.loop_list/ports_to_inspect.remain"
-               fi
+               origin_orig_regexp=`str_escape_regexp "$origin_orig"`
+               origin_replace=`str_escape_replaceval "$origin"`
+               fileedit_add_a_line_if_new "s/^$origin_orig_regexp$/$origin_replace/" "${DBDIR}/requires/$origin_dependent/rename_requirements.sed.pattern"
        fi
-       for inspected_level_tmp in $inspected_levels_compatible
-       do
-               fileedit_add_a_line_if_new "$origin_orig" "${DBDIR}/ports.inspected.${inspected_level_tmp}.list"
-       done
-       fileedit_add_a_line_if_new "$origin_orig" "${DBDIR}/ports.inspected.list"
-       fileedit_add_a_line_if_new "$origin_orig" "${DBDIR}/inspected_ports.update"
-       fileedit_rm_a_line "$origin_orig" "${DBDIR}/stage.loop_list/ports_to_inspect.remain"
-       message_echo "${DEPTH_INDEX}  ===> ok"
+}
 
-       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_requirements.filter
+       if [ -e "$pattern" ]
+       then
+               grep -Fxvq -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
-       table=$1
+       local tag origin suffix tmppath dbpath srcfile dstfile num_parents loophead dstfile_tmp tmpdstpath index_loop loop_len origin_target origin_ref dbpath_target
+       tag=$1
        origin=$2
+       suffix=$3
+       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/requirements.${tag}.direct${suffix}
+       dstfile=$dbpath/requirements.${tag}.full${suffix}
+       if [ ! -e "$srcfile" ]
        then
-               while read origin_requirement
+               [ -d "$dbpath" ] && rm -f "$dstfile"
+               return 0
+       fi
+       if [ ! -e "$dstfile" ]
+       then
+               touch "$tmppath.parents"
+               num_parents=`wc -l < $tmppath.parents`
+               if grep -Fxq "$origin" "$tmppath.parents"
+               then
+                       loophead=`grep -Fxn "$origin" "$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 requirements.${tag}${suffix}:" >&2
+                       else
+                               message_echo "WARNING: The following loop was found for requirements.${tag}${suffix}:" >&2
+                       fi
+                       message_echo "  $origin" >&2
+                       ports_in_loop=`sed -n $(($loophead+1)),\$p "$tmppath.parents"`
+                       echo "$ports_in_loop" | sed 's/^/  -->/' | message_cat >&2
+                       message_echo "  -->$origin" >&2
+                       if [ "x$opt_disallow_force_continuation_for_looped_dependency" = xyes ]
+                       then
+                               message_echo 'Resolve the problem manually and then retry by executing' >&2
+                               message_echo "        ${APPNAME} reset keepopts" >&2
+                               message_echo "        ${APPNAME}" >&2
+                               exit 1
+                       else
+                               message_echo 'Exploring a node port to terminate the loop by evaluating only build-and-run-time dependencies as essential ones.' >&2
+                               echo "$origin" > $tmppath.ports_in_loop
+                               echo "$ports_in_loop" >> $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
+                                       if ! grep -Fxq "$origin_ref" "$dbpath_target/requirements.run.direct${suffix}" 2> /dev/null || \
+                                               ! grep -Fxq "$origin_ref" "$dbpath_target/requirements.build.direct${suffix}" 2> /dev/null
+                                       then
+                                               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
+                                       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
+                               for suffix_tmp in '' .orig
+                               do
+                                       for tag_tmp in run build
+                                       do
+                                               grep -Fxq "$origin_ref" "$dbpath_target/requirements.${tag_tmp}.direct${suffix_tmp}" 2> /dev/null && \
+                                                       fileedit_add_a_line_if_new "$origin_ref" "$dbpath_target/ignored_requirements.${tag_tmp}${suffix_tmp}"
+                                       done
+                                       cat "$dbpath_target/ignored_requirements.run${suffix_tmp}" "$dbpath_target/ignored_requirements.build${suffix_tmp}" 2> /dev/null | sort -u > $dbpath_target/ignored_requirements.all${suffix_tmp}
+                               done
+                               cat "$dbpath_target/ignored_requirements.all"* 2> /dev/null | sort -u > $dbpath_target/ignored_requirements.filter
+                       fi
+               fi
+               echo "$origin" >> $tmppath.parents
+               tmpdstpath=${TMPDIR}/requires/$origin
+               dstfile_tmp=$tmpdstpath/requirements.${tag}.full${suffix}
+               mkdir -p "$tmpdstpath"
+               database_build_filter_ignored_requirements "$origin" < $srcfile | while read origin_requirement
                do
+                       # The least requirements of build are the direct build-time requirements and the full run-time requirements of the direct build-time requirements.
+                       tag_dep=$tag
+                       [ "x$tag" = xbuild ] && tag_dep=run
+                       recursive_dependency=`database_build_get_complete_recursive_dependency "$tag_dep" "$origin_requirement" "$suffix"`
+                       [ -e "$dbpath/ignored_requirements.filter" ] && \
+                               echo "$origin_requirement" | grep -Fxq -f "$dbpath/ignored_requirements.filter" 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"
+                       echo "$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" | grep -v '^$' > $dstfile || :
+                       rm "$dstfile_tmp"
+               fi
        fi
        cat "$dstfile"
 }
@@ -638,21 +973,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}"
 }
@@ -670,14 +1002,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
@@ -738,100 +1073,9 @@ eof
 database_build_order_ports_considering_dependencies ()
 {
        touch "${DBDIR}/reinst_order.list.tmp"
-       cat > ${TMPDIR}/order_dependencies.awk << eof
-BEGIN {
-       it = 0;
-       i = 0;
-}
-{
-       if (NF == 0)
-       {
-               i = 0;
-       }
-       else
-       {
-               if (i == 0)
-               {
-                       target = \$0;
-                       sub (/\/requirements.all\.full$/, "", target);
-                       sub (/^\.\//, "", target);
-                       srcikey[it] = target;
-                       srckeyi[target] = it;
-                       it++;
-               }
-               else
-               {
-                       src[it-1,i-1] = \$0;
-                       srcimax[it-1] = srcsize[it-1] = i;
-               }
-               i++;
-       }
-}
-END {
-       ntargets = it;
-       norder = 0;
-       order_str = "";
-       icycle = 0;
-       lf_order_str = "";
-       while (1)
-       {
-               is_operated = 0;
-               for (it = 0; it < ntargets; it++)
-               {
-                       if (!(it in srcikey)) continue;
-                       if (srcsize[it] > 0) continue;
-                       is_operated = 1;
-                       target = srcikey[it];
-                       delete srcikey[it];
-                       order[norder++] = target;
-                       order_str = order_str lf_order_str;
-                       order_str = sprintf ("%s%s", order_str, target);
-                       lf_order_str = "\n";
-                       for (jt = 0; jt < ntargets; jt++)
-                       {
-                               for (j = 0; j < srcimax[jt]; j++)
-                               {
-                                       if ((jt,j) in src && src[jt,j] == target)
-                                       {
-                                               delete src[jt,j];
-                                               srcsize[jt]--;
-                                               break;
-                                       }
-                               }
-                       }
-               }
-               if (is_operated == 0) break;
-               icycle++;
-       }
-       reinst_order_list = sprintf ("%s%s", ENVIRON["DBDIR"], "/reinst_order.list.tmp");
-       print order_str > reinst_order_list;
-       unsatisfied = "";
-       for (it = 0; it < ntargets; it++)
-       {
-               if (srcsize[it] == 0) continue;
-               reqs = "";
-               sp_reqs = "";
-               for (i = 0; i < srcimax[it]; i++)
-               {
-                       if ((it,i) in src)
-                       {
-                               reqs = reqs sp_reqs src[it,i];
-                               sp_reqs = ", ";
-                       }
-               }
-               unsatisfied = sprintf ("%s%s [%d] (%s)\n", unsatisfied, srcikey[it], srcsize[it], reqs);
-       }
-       if (unsatisfied != "")
-       {
-               unsatisfied_list = sprintf ("%s%s", ENVIRON["DBDIR"], "/unsatisfied.list");
-               print unsatisfied > unsatisfied_list;
-               exit 1;
-       }
-}
-eof
        (cd "${DBDIR}/requires" && \
                find . -depth 3 -name requirements.all.full -exec echo {} \; -exec cat {} \; -exec echo \;) | \
-               env "DBDIR=${DBDIR}" awk -f "${TMPDIR}"/order_dependencies.awk || return
+               env "DBDIR=${DBDIR}" awk -f "${LIBEXECDIR}"/order_dependencies.awk || return
        grep -v '^$' "${DBDIR}/reinst_order.list.tmp" > "${DBDIR}/reinst_order.list" || :
 }
 
@@ -851,9 +1095,11 @@ _database_build_reset_a_port_confdb ()
                        for tabel in requirements dependents
                        do
                                cat "${DBDIR}/$dbtag/$origin/$tabel.all.full" 2> /dev/null || :
-                               rm -f "${DBDIR}/$dbtag/$origin/$tabel.run.full" \
-                                       "${DBDIR}/$dbtag/$origin/$tabel.build.full" 2> /dev/null
+                               cat "${DBDIR}/$dbtag/$origin/$tabel.all.full.orig" 2> /dev/null || :
+                               rm -rf "${DBDIR}/$dbtag/$origin/$tabel.run.full" \
+                                       "${DBDIR}/$dbtag/$origin/$tabel.build.full"
                        done
+                       rm -rf "${DBDIR}/$dbtag/$origin/is_customized"
                done
        } | sort -u >> ${DBDIR}/inspected_ports.update
        for level in full direct node
@@ -861,25 +1107,34 @@ _database_build_reset_a_port_confdb ()
                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}/moved_ports"
        fileedit_rm_a_line "$origin" "${DBDIR}/ports.inspected.list"
        cat "${DBDIR}/replace/$origin/origin" 2> /dev/null || :
 }
 
+# ============= Clear database directories for a flavored 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"`
        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 =============
+# ============= Overlay onto the temporary database so as to re-inspect and reinstall ports whose configurations were changed =============
 database_build_patch_reconf ()
 {
        local origin origin_replace
@@ -888,52 +1143,46 @@ database_build_patch_reconf ()
        [ -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"
+       fileedit_rm_a_line "$origin" "${DBDIR}/done_required_ports_to_inspect"
        [ -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 initial dependencies =============
+database_build_post_inspect_initial_dependencies ()
+{
+       find "${DBDIR}/initial" -depth 2 -type d \
+               | sed -E 's|.*/([^/]+/[^/]+)$|\1|' > ${DBDIR}/inspected_ports.initial
+}
+
+# ============= Post-processes after finishing to inspect dependencies =============
 database_build_post_inspect_dependencies ()
 {
-       local table
+       local table tmpfile
+       tmpfile=${TMPDIR}/database_build_post_inspect_dependencies
        touch "${DBDIR}/obsolete_ports" "${DBDIR}/inspected_ports.update"
        find "${DBDIR}/requires" -depth 2 -type d \
                | sed -E 's|.*/([^/]+/[^/]+)$|\1|' > ${DBDIR}/inspected_ports
-       find "${DBDIR}/initial" -depth 2 -type d \
-               | sed -E 's|.*/([^/]+/[^/]+)$|\1|' > ${DBDIR}/inspected_ports.initial
        sort -u "${DBDIR}/inspected_ports" "${DBDIR}/inspected_ports.initial" > ${DBDIR}/inspected_ports.all
-       str_escape_regexp_filter < ${DBDIR}/inspected_ports \
-               | sed 's/^/^/; s/$/$/' > ${DBDIR}/inspected_ports.grep_pattern
-       str_escape_regexp_filter < ${DBDIR}/inspected_ports.initial \
-               | sed 's/^/^/; s/$/$/' > ${DBDIR}/inspected_ports.initial.grep_pattern
-       str_escape_regexp_filter < ${DBDIR}/inspected_ports.all \
-               | sed 's/^/^/; s/$/$/' > ${DBDIR}/inspected_ports.all.grep_pattern
-       cat "${DBDIR}/conf/HOLD_PORTS.grep_pattern" "${DBDIR}/need.grep_pattern" \
-               2> /dev/null > ${TMPDIR}/INSPECT_ALL_DEPENDENCIES:obsolete_ports.exclude.grep_pattern || :
-       grep -v -E -f "${TMPDIR}/INSPECT_ALL_DEPENDENCIES:obsolete_ports.exclude.grep_pattern" \
-               "${DBDIR}/obsolete_ports" > ${DBDIR}/obsolete_ports.can_be_deleted || :
+       {
+               cat "${DBDIR}/conf/HOLD:PORTS.parsed" || :
+               cat "${DBDIR}/need.list" || :
+       } 2> /dev/null | sort -u > $tmpfile.obsolete_ports.exclude
+       grep -v -Fx -f "$tmpfile.obsolete_ports.exclude" "${DBDIR}/obsolete_ports" > ${DBDIR}/obsolete_ports.can_be_deleted || :
        cp /dev/null "${DBDIR}/REPLACE.complete_sed_pattern.tmp"
-       cp /dev/null "${DBDIR}/REVERSE_REPLACE.complete_sed_pattern.tmp"
        find "${DBDIR}/replace" -depth 3 -type f -name origin | while read nodepath
        do
                origin_orig=`expr "$nodepath" : '.*/\([^/][^/]*/[^/][^/]*\)/origin$'`
                origin=`cat "$nodepath"`
                origin_orig_regexp=`str_escape_regexp "$origin_orig"`
-               origin_orig_esc=`str_escape_replaceval "$origin_orig"`
-               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
-               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"
-       mv "${DBDIR}/REVERSE_REPLACE.complete_sed_pattern.tmp" "${DBDIR}/REVERSE_REPLACE.complete_sed_pattern"
        if [ `cat "${DBDIR}/inspected_ports.update" 2> /dev/null | wc -l` -gt 0 ]
        then
-               grep -E -f "${DBDIR}/inspected_ports.all.grep_pattern" "${DBDIR}/inspected_ports.update" \
-                       > ${DBDIR}/inspected_ports.update.tmp || :
+               grep -Fx -f "${DBDIR}/inspected_ports.all" "${DBDIR}/inspected_ports.update" \
+                       > ${DBDIR}/inspected_ports.update.tmp 2> /dev/null || :
                mv "${DBDIR}/inspected_ports.update.tmp" "${DBDIR}/inspected_ports.update"
                if [ $opt_only_target_scope = yes ]
                then
@@ -965,6 +1214,6 @@ database_build_post_inspect_dependencies ()
                sed -E -f "${DBDIR}/REPLACE.complete_sed_pattern" \
                        "${DBDIR}/stage.loop_list/target_$table.specified" \
                        > ${DBDIR}/stage.loop_list/target_$table.replaced.specified
-       done    
+       done
        cp /dev/null "${DBDIR}/update_dependencies"
 }