OSDN Git Service

[BUG FIX] Packages of the same origin with different flavors were not processed corre...
[portsreinstall/current.git] / lib / libpkgsys.sh
index 2135359..d3ec488 100644 (file)
@@ -438,20 +438,29 @@ pkgsys_def_pkgtools ()
                        # Return the total storage space occupied by the installed files in bytes
                        pkg info -qs "$@" 2> /dev/null | sed 's/KiB$/*1024/;s/MiB$/*1024^2/;s/GiB$/*1024^3/;s/B$//' | tr '\n' + | sed 's/+$//' | bc -l
                }
-               pkg_info_flavor ()
+               pkg_info_flavors ()
+               # For an unflavored pattern, all matching flavors are returned.
                {
                        local glob_unflavored
                        glob_unflavored=$1
                        pkg query -g '%At\t%Av' "$glob_unflavored" 2> /dev/null | env LANG=C grep -E '^flavor[[:space:]]' | cut -f 2
                }
-               pkg_info_flavored_origin ()
+               pkg_info_flavored_origins ()
+               # For an unflavored pattern, all matching flavors are returned.
                {
                        local glob_unflavored origin_unflavored
                        glob_unflavored=$1
                        origin_unflavored=`pkg_info_qo "$glob_unflavored" 2> /dev/null || :`
-                       flavor=`pkg_info_flavor "$glob_unflavored" 2> /dev/null || :`
-                       [ -z "$flavor" ] || flavor=@$flavor
-                       echo "$origin_unflavored$flavor"
+                       flavors=`pkg_info_flavors "$glob_unflavored" 2> /dev/null || :`
+                       if [ -z "$flavors" ]
+                       then
+                               echo "$origin_unflavored"
+                       else
+                               for flavor in $flavors
+                               do
+                                       echo "$origin_unflavored@$flavor"
+                               done
+                       fi
                }
                pkg_info_all_flavored_origins ()
                {
@@ -866,7 +875,7 @@ pkgsys_def_pkgtools ()
                        # Return the total storage space occupied by the installed files in bytes
                        pkg_info -qs "$@" 2> /dev/null | sed 's/[^0-9]*/*1024/' | tr '\n' + | sed 's/+$//' | bc -l
                }
-               pkg_info_flavor ()
+               pkg_info_flavors ()
                {
                        pkg_info -qe "$@" 2> /dev/null && echo
                        :
@@ -1105,15 +1114,22 @@ pkgsys_get_installed_pkg_from_origin ()
        origin=$1
        origin_unflavored=`pkgsys_get_unflavored_origin "$origin"`
        flavor_origin=`pkgsys_get_flavor_from_origin "$origin"`
-       pkg_info_qO "$origin_unflavored" 2> /dev/null | while read pkgname
-       do
-               flavor_pkg=`pkg_info_flavor "$pkgname"`
-               if [ "x$flavor_origin" = "x$flavor_pkg" ]
-               then
-                       echo "$pkgname"
-                       break
-               fi
-       done
+       if [ -n "$flavor_origin" ]
+       then
+               for pkgname in `pkg_info_qO "$origin_unflavored" 2> /dev/null`
+               do
+                       for flavor_pkg in `pkg_info_flavors "$pkgname"`
+                       do
+                               if [ "x$flavor_origin" = "x$flavor_pkg" ]
+                               then
+                                       echo "$pkgname"
+                                       return
+                               fi
+                       done
+               done
+       else
+               pkg_info_qO "$origin_unflavored" 2> /dev/null
+       fi
        :
 }
 
@@ -1141,8 +1157,11 @@ pkgsys_exists_from_orig ()
        origin_unflavored=`pkgsys_get_unflavored_origin "$origin"`
        pkg_info_eO "$origin_unflavored" 2> /dev/null || return
        flavor_origin=`pkgsys_get_flavor_from_origin "$origin"`
-       flavor_pkg=`pkg_info_flavor "$origin_unflavored"`
-       [ "x$flavor_origin" = "x$flavor_pkg" ]
+       for flavor_pkg in `pkg_info_flavors "$origin_unflavored"`
+       do
+               [ "x$flavor_origin" = "x$flavor_pkg" ] && return
+       done
+       false
 }
 
 # ============= Generate the package names vs origins table at the initial state =============
@@ -1178,14 +1197,16 @@ pkgsys_get_init_pkg_from_orig ()
        else
                origin_unflavored=`pkgsys_get_unflavored_origin "$origin"`
                flavor_origin=`pkgsys_get_flavor_from_origin "$origin"`
-               pkg_info_qO "$origin_unflavored" 2> /dev/null | while read pkgname
+               for pkgname in `pkg_info_qO "$origin_unflavored" 2> /dev/null`
                do
-                       flavor_pkg=`pkg_info_flavor "$pkgname"`
-                       if [ "x$flavor_origin" = "x$flavor_pkg" ]
-                       then
-                               echo "$pkgname"
-                               break
-                       fi
+                       for flavor_pkg in `pkg_info_flavors "$pkgname"`
+                       do
+                               if [ "x$flavor_origin" = "x$flavor_pkg" ]
+                               then
+                                       echo "$pkgname"
+                                       return
+                               fi
+                       done
                done
        fi
        :
@@ -1671,13 +1692,13 @@ pkgsys_sanitychk_pkgcontents ()
 }
 
 # ============= Check whether the port options database is once saved =============
-pkgsys_exists_saved_port_oprions_timestamps ()
+pkgsys_exists_saved_port_options_timestamps ()
 {
        [ -d "${DBDIR}/ls_dbdir" ]
 }
 
 # ============= Get the current all timestamp information of port options =============
-pkgsys_get_current_port_oprions_timestamp ()
+pkgsys_get_current_port_options_timestamp ()
 {
        local portdb_needle_regexp
        portdb_needle_regexp=`str_escape_regexp "$1"`
@@ -1700,20 +1721,20 @@ pkgsys_get_current_port_oprions_timestamp ()
 }
 
 # ============= Get the saved all timestamp information of port options =============
-pkgsys_get_saved_port_oprions_timestamps_all ()
+pkgsys_get_saved_port_options_timestamps_all ()
 {
        mkdir -p "${DBDIR}/ls_dbdir"
        cat "${DBDIR}/ls_dbdir/"*.log 2> /dev/null || :
 }
 
 # ============= Convert a list of port origins to port options timestamp log names =============
-pkgsys_conv_portorigin_to_port_oprion_timestamp_logname ()
+pkgsys_conv_portorigin_to_port_option_timestamp_logname ()
 {
        sed 's|/|_|'
 }
 
 # ============= Get the file name of the port options database of a port =============
-pkgsys_get_port_oprion_database ()
+pkgsys_get_port_option_database ()
 {
        local origin
        origin=$1
@@ -1726,23 +1747,23 @@ pkgsys_get_port_oprion_database ()
 }
 
 # ============= Save the timestamp information of port options of a port =============
-pkgsys_save_port_oprion_timestamp ()
+pkgsys_save_port_option_timestamp ()
 {
        local origin portoptlog portoptdb
        origin=$1
-       portoptlog=`echo "$origin" | pkgsys_conv_portorigin_to_port_oprion_timestamp_logname`
-       portoptdb=`pkgsys_get_port_oprion_database "$origin"`
+       portoptlog=`echo "$origin" | pkgsys_conv_portorigin_to_port_option_timestamp_logname`
+       portoptdb=`pkgsys_get_port_option_database "$origin"`
        mkdir -p "${DBDIR}/ls_dbdir"
-       pkgsys_get_current_port_oprions_timestamp "$portoptdb" > ${DBDIR}/ls_dbdir/$portoptlog.log 2> /dev/null || :
+       pkgsys_get_current_port_options_timestamp "$portoptdb" > ${DBDIR}/ls_dbdir/$portoptlog.log 2> /dev/null || :
 }
 
 # ============= Get changed port options from the saved point =============
-pkgsys_get_changed_port_oprions ()
+pkgsys_get_changed_port_options ()
 {
        local saved_log current_log tmp_log
        saved_log=$1
        current_log=$2
-       tmp_log=${TMPDIR}/pkgsys_get_changed_port_oprions.log
+       tmp_log=${TMPDIR}/pkgsys_get_changed_port_options.log
        {
                env LANG=C grep -vxF -f "$current_log" "$saved_log" || :
                env LANG=C grep -vxF -f "$saved_log" "$current_log" || :