OSDN Git Service

[BUG FIX] Evaluation of old origins was incomplete for merged ports.
authorMamoru Sakaue / MwGhennndo <glmwghennndo@users.sourceforge.jp>
Sun, 8 Jul 2018 06:46:26 +0000 (14:46 +0800)
committerMamoru Sakaue / MwGhennndo <glmwghennndo@users.sourceforge.jp>
Sun, 8 Jul 2018 06:46:26 +0000 (14:46 +0800)
modified:   lib/libcommand_forget.sh
modified:   lib/libcommand_pkgs.sh
modified:   lib/libdatabase_build.sh
modified:   lib/libdatabase_query.sh
modified:   lib/libmain.sh
modified:   lib/libreinstall.sh
modified:   man/portsreinstall.8

lib/libcommand_forget.sh
lib/libcommand_pkgs.sh
lib/libdatabase_build.sh
lib/libdatabase_query.sh
lib/libmain.sh
lib/libreinstall.sh
man/portsreinstall.8

index ad2fc06..58f0223 100644 (file)
@@ -35,17 +35,10 @@ command_forget ()
        PROGRAM_DEPENDS='FORGET::PREPARATION_INSPECT_MASTER'
        _program_exec_restartable_loop_operation__routine ()
        {
-               local origin origin_orig
+               local origin origins_init
                origin=$1
-               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 [ ! -e "${DBDIR}/initial/$origin/installed_version" \
-                       -a ! -e "${DBDIR}/initial/$origin_orig/installed_version" \
+               origins_init=`database_query_initial_orgins "$origin"`
+               if [ -z "$origins_init" \
                        -a `cat "${DBDIR}/requires/$origin/dependents.all.full" 2> /dev/null | wc -l` -eq 0 ]
                then
                        message_echo "$origin"
@@ -77,17 +70,10 @@ command_forget ()
        PROGRAM_DEPENDS='FORGET::INSPECT_MASTER'
        _program_exec_restartable_loop_operation__routine ()
        {
-               local origin origin_orig
+               local origin origins_init
                origin=$1
-               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 [ ! -e "${DBDIR}/initial/$origin/installed_version" \
-                       -a ! -e "${DBDIR}/initial/$origin_orig/installed_version" ] \
+               origins_init=`database_query_initial_orgins "$origin"`
+               if [ -z "$origins_init" ] \
                        && ! grep -qv -Fx -f "${DBDIR}/forget/remove.scope.filter" \
                                "${DBDIR}/requires/$origin/dependents.all.full" \
                                2> /dev/null
index a99c8f8..ea3f306 100644 (file)
@@ -68,7 +68,7 @@ command_pkgs_escape ()
 # ============= Operation of restore command =============
 command_pkgs_restore ()
 {
-       local tmp_done_orig origin pkg origin_orig pkg_orig origin_replace pkg_replace backup_pkg
+       local tmp_done_orig origin pkg exists_old_origins origin_orig pkg_orig origin_replace pkg_replace backup_pkg
        message_echo "Restoring the following temporary escaped packages:"
        message_echo
        tmp_done_orig=${TMPDIR}/command_pkgs_restore::restore::done_orig
@@ -85,15 +85,18 @@ command_pkgs_restore ()
                        message_echo >&2
                        continue
                fi
-               origin_orig=`echo "$origin" \
-                       | sed -E -f "${DBDIR}/REVERSE_REPLACE.complete_sed_pattern"`
-               if [ "x$origin_orig" = "x$origin" ] && pkgsys_exists_from_orig "$origin_orig"
-               then
-                       pkg_orig=`pkgsys_get_installed_pkg_from_origin "$origin_orig"`
-                       message_echo "WARNING: An original version of $origin ($pkg_orig, $origin_orig) is already installed." >&2
-                       message_echo >&2
-                       continue
-               fi
+               exists_old_origins=no
+               for origin_orig in `database_query_initial_orgins "$origin"`
+               do
+                       if [ "x$origin_orig" = "x$origin" ] && pkgsys_exists_from_orig "$origin_orig"
+                       then
+                               pkg_orig=`pkgsys_get_installed_pkg_from_origin "$origin_orig"`
+                               message_echo "WARNING: An original version of $origin ($pkg_orig, $origin_orig) is already installed." >&2
+                               message_echo >&2
+                               exists_old_origins=yes
+                       fi
+               done
+               [ $exists_old_origins = yes ] && continue
                origin_replace=`echo "$origin" \
                        | sed -E -f "${DBDIR}/REPLACE.complete_sed_pattern"`
                if [ "x$origin_replace" != "x$origin" ]
index a8e38f6..ab41e2b 100644 (file)
@@ -1125,21 +1125,15 @@ database_build_post_inspect_dependencies ()
        } 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
-               [ -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"
-       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 -Fx -f "${DBDIR}/inspected_ports.all" "${DBDIR}/inspected_ports.update" \
index 1d63468..3807be0 100644 (file)
@@ -705,3 +705,20 @@ database_query_is_any_progress ()
 {
        [ `cat "${DBDIR}/new_success_in_current_run" 2> /dev/null | wc -l` -gt 0 ]
 }
+
+# ============= Get the all initial origins, separated by line feed =============
+database_query_initial_orgins ()
+{
+       local origin origin_init
+       origin=$1
+       if [ -e "${DBDIR}/moved_from/$origin/old_origs" ]
+       then
+               for origin_init in `cat "${DBDIR}/moved_from/$origin/old_origs"`
+               do
+                       [ -e "${DBDIR}/initial/$origin_init/installed_version" ] && echo "$origin_init"
+               done
+       else
+               [ -e "${DBDIR}/initial/$origin/installed_version" ] && echo "$origin"
+       fi
+       :
+}
index 04d65d2..860a8e1 100644 (file)
@@ -12,7 +12,7 @@ main_set_version ()
        MYVERSION=4.0.0
        COMPATIBLE_VERSIONS='^(4\.[0]\.[0])$'
        # Template for development versions
-       MYVERSION=4.0.0+toward_4.0.1_20180708010800
+       MYVERSION=4.0.0+toward_4.0.1_20180708144349
        COMPATIBLE_VERSIONS='^(4\.[0]\.[0]|4\.[0]\.[0]+(|\+toward_4\.[0]\.[1]+_[0-9]+))$'
 }
 
index d0c1299..ac6af26 100644 (file)
@@ -364,20 +364,24 @@ reinstall_restore_conflicts ()
        while read origin pkg
        do
                pkg_regexp_esc=`str_escape_regexp "$pkg"`
-               origin_orig=`echo "$origin" \
-                       | sed -E -f "${DBDIR}/REVERSE_REPLACE.complete_sed_pattern"`
-               [ "x$origin_orig" = "x$origin" ] && origin_orig=
+               origins_init=`database_query_initial_orgins "$origin" | grep -vFx "$origin"`
                origin_replace=`echo "$origin" \
                        | sed -E -f "${DBDIR}/REPLACE.complete_sed_pattern"`
                [ "x$origin_replace" = "x$origin" ] && origin_replace=
+               is_to_dereg_from_list=no
                if [ -n "$origin_current" -a "x$origin" = "x$origin_current" ] || \
-                       pkg_info_e "$pkg" || pkgsys_exists_from_orig "$origin" || \
-                       { [ -n "$origin_orig" ] && pkgsys_exists_from_orig "$origin_orig"; } || \
-                       { [ -n "$origin_replace" ] && pkgsys_exists_from_orig "$origin_replace"; }
+                       pkg_info_e "$pkg" || pkgsys_exists_from_orig "$origin"
                then
                        is_to_dereg_from_list=yes
                else
-                       is_to_dereg_from_list=no
+                       for origin_orig in $origins_init $origin_replace
+                       do
+                               if [ -n "$origin_orig" ] && pkgsys_exists_from_orig "$origin_orig"
+                               then
+                                       is_to_dereg_from_list=yes
+                                       break
+                               fi
+                       done
                fi
                if pkgsys_chk_conflict_by_a_pkg install "$REINSTALL_ORIGIN" "$pkg"
                then
@@ -395,18 +399,17 @@ reinstall_restore_conflicts ()
                fi
                if [ $is_to_dereg_from_list = yes ]
                then
-                       origin_current=$origin
-                       pkg_current=`pkgsys_get_installed_pkg_from_origin "$origin"` || :
-                       if [ -z "$pkg_current" -a -n "$origin_orig" ]
-                       then
-                               pkg_current=`pkgsys_get_installed_pkg_from_origin "$origin_orig"` || :
-                               origin_current=$origin_orig
-                       fi
-                       if [ -z "$pkg_current" -a -n "$origin_replace" ]
-                       then
-                               pkg_current=`pkgsys_get_installed_pkg_from_origin "$origin_replace"` || :
-                               origin_current=$origin_replace
-                       fi
+                       pkg_current=
+                       origin_current=
+                       for origin_trial in $origin $origins_init $origin_replace
+                       do
+                               pkg_trial=`pkgsys_get_installed_pkg_from_origin "$origin_trial" || :`
+                               [ -z "$pkg_trial" ] && continue
+                               pkg_current="$pkg_current, $pkg_trial"
+                               origin_current="$origin_current, $origin_trial"
+                       done
+                       pkg_current=`expr "$pkg_current" : ', \(.*\)' || pkg_current=none
+                       origin_current=`expr "$origin_current" : ', \(.*\)' || origin_current=none
                        pkgname_msg=$pkg
                        origin_msg=$origin
                        [ "x$pkg_current" = "x$pkg" ] || pkgname_msg="$pkg => $pkg_current"
@@ -473,20 +476,34 @@ reinstall_chk_and_restore_requirements ()
                        touch "$tmp_isfailed"
                        break
                fi
-               origin_orig=`echo "$origin" \
-                       | sed -E -f "${DBDIR}/REVERSE_REPLACE.complete_sed_pattern"`
-               if [ "x$origin_orig" != "x$origin" ]
-               then
-                       pkgsys_exists_from_orig "$origin_orig" && continue
+               origins_init=`database_query_initial_orgins "$origin" | grep -vFx "$origin"`
+               origin_replace=`echo "$origin" \
+                       | sed -E -f "${DBDIR}/REPLACE.complete_sed_pattern"`
+               [ "x$origin_replace" = "x$origin" ] && origin_replace=
+               is_installed=no
+               for origin_orig in $origins_init $origin_replace
+               do
+                       [ "x$origin_orig" = "x$origin" ] && continue
+                       if pkgsys_exists_from_orig "$origin_orig"
+                       then
+                               is_installed=yes
+                               break
+                       fi
                        if grep -q -Fx "$origin_orig" "${DBDIR}/taboo.all.list" 2> /dev/null
                        then
                                message_echo "INFO: Restoration of a requirement [$origin_orig] is avoided because it is set taboo."
                                touch "$tmp_isfailed"
+                               is_installed=taboo
                                break
                        fi
-               fi
-               if ! pkgarc=`pkgsys_get_backup_pkg "$origin"` && \
-                       ! pkgarc=`pkgsys_get_backup_pkg "$origin_orig"`
+               done
+               [ $is_installed = yes ] && continue
+               [ $is_installed = taboo ] && break
+               for origin_orig in $origin $origins_init $origin_replace
+               do
+                       pkgarc=`pkgsys_get_backup_pkg "$origin_orig"` && break
+               done
+               if [ -z "$pkgarc" ]
                then
                        if grep -q -Fx "$origin" "${DBDIR}/failed.list" 2> /dev/null
                        then
index 218781b..c103b68 100644 (file)
@@ -1084,6 +1084,8 @@ Configuration file of \fBportupgrade\fR(1).
 [IMPROVED] It is changed to show messages of reset ports at the stage of reloading ${LOCALBASE}/etc/portsreinstall.conf.
 .PP
 [BUG FIX] Changes made by commands or in ${LOCALBASE}/etc/portsreinstall.conf were not reflected to dependents of the specified ports in the redo runs with incorrect messages notifying as already inspected merged ports.
+.PP
+[BUG FIX] Evaluation of old origins was incomplete for merged ports.
 .RE
 .TP
 4.0.0 (29 June 2018)