diff --git a/pkg_auto/impl/pkg_auto_lib.sh b/pkg_auto/impl/pkg_auto_lib.sh index ee229bdab1..78dae67607 100644 --- a/pkg_auto/impl/pkg_auto_lib.sh +++ b/pkg_auto/impl/pkg_auto_lib.sh @@ -1875,18 +1875,16 @@ function consistency_checks() { # 1 - name of a map variable, will contain a mapping of package name # to repository name function read_package_sources() { + local which=${1}; shift local -n package_sources_map_ref=${1}; shift # shellcheck source=for-shellcheck/globals source "${WORKDIR}/globals" - local -a files=() - local which arch - for which in "${WHICH[@]}"; do - files+=( "${WORKDIR}/pkg-reports/${which}/sdk-package-repos" ) - for arch in "${ARCHES[@]}"; do - files+=( "${WORKDIR}/pkg-reports/${which}/${arch}-board-package-repos" ) - done + local -a files=( "${WORKDIR}/pkg-reports/${which}/sdk-package-repos" ) + local arch + for arch in "${ARCHES[@]}"; do + files+=( "${WORKDIR}/pkg-reports/${which}/${arch}-board-package-repos" ) done local file pkg repo saved_repo @@ -1934,14 +1932,17 @@ function read_package_sources() { # BOM_NEW_PKG_SLOT_VERMINMAX_MAP_MVM_IDX - same as above, but for # packages after the update # -# BOM_PKG_SOURCES_MAP_IDX - mapping of package name to the repository -# name +# BOM_OLD_PKG_SOURCES_MAP_IDX - mapping of old package name to the +# repository name +# +# BOM_NEW_PKG_SOURCES_MAP_IDX - mapping of new package name to the +# repository name # # BOM_DIFF_LIB_FILTERS_IDX - filtering information used to skip # irrelevant parts when processing # md5-cache entries for automated change # reporting -declare -gri BOM_PKG_TO_TAGS_MVM_IDX=0 BOM_PKG_SLOTS_SET_MVM_IDX=1 BOM_OLD_PKG_SLOT_VERMINMAX_MAP_MVM_IDX=2 BOM_NEW_PKG_SLOT_VERMINMAX_MAP_MVM_IDX=3 BOM_PKG_SOURCES_MAP_IDX=4 BOM_DIFF_LIB_FILTERS_IDX=5 +declare -gri BOM_PKG_TO_TAGS_MVM_IDX=0 BOM_PKG_SLOTS_SET_MVM_IDX=1 BOM_OLD_PKG_SLOT_VERMINMAX_MAP_MVM_IDX=2 BOM_NEW_PKG_SLOT_VERMINMAX_MAP_MVM_IDX=3 BOM_OLD_PKG_SOURCES_MAP_IDX=4 BOM_NEW_PKG_SOURCES_MAP_IDX=5 BOM_DIFF_LIB_FILTERS_IDX=6 # Declare bunch of maps variables. # @@ -1949,7 +1950,7 @@ declare -gri BOM_PKG_TO_TAGS_MVM_IDX=0 BOM_PKG_SLOTS_SET_MVM_IDX=1 BOM_OLD_PKG_S # # @ - names of variables to be used for bunch of maps function bunch_of_maps_declare() { - struct_declare -ga "${@}" "( '' '' '' '' '' '' )" + struct_declare -ga "${@}" "( '' '' '' '' '' '' '' )" } # Unset bunch of maps variables. @@ -2104,7 +2105,8 @@ function handle_one_package_change() { local pkg_slots_set_mvm_var_name=${bunch_of_maps_ref[BOM_PKG_SLOTS_SET_MVM_IDX]} local old_pkg_slot_verminmax_map_mvm_var_name=${bunch_of_maps_ref[BOM_OLD_PKG_SLOT_VERMINMAX_MAP_MVM_IDX]} local new_pkg_slot_verminmax_map_mvm_var_name=${bunch_of_maps_ref[BOM_NEW_PKG_SLOT_VERMINMAX_MAP_MVM_IDX]} - local -n pkg_sources_map_ref=${bunch_of_maps_ref[BOM_PKG_SOURCES_MAP_IDX]} + local -n pkg_old_sources_map_ref=${bunch_of_maps_ref[BOM_OLD_PKG_SOURCES_MAP_IDX]} + local -n pkg_new_sources_map_ref=${bunch_of_maps_ref[BOM_NEW_PKG_SOURCES_MAP_IDX]} local diff_lib_filters_var_name=${bunch_of_maps_ref[BOM_DIFF_LIB_FILTERS_IDX]} # The function goes over a pair of old and new package names. For @@ -2130,8 +2132,8 @@ function handle_one_package_change() { fi pkg_debug_enable "${old_name}" "${new_name}" pkg_debug 'handling updates' - local old_repo=${pkg_sources_map_ref["${old_name}"]:-} - local new_repo=${pkg_sources_map_ref["${new_name}"]:-} + local old_repo=${pkg_old_sources_map_ref["${old_name}"]:-} + local new_repo=${pkg_new_sources_map_ref["${new_name}"]:-} if [[ -z ${old_repo} ]]; then pkg_warn_d "${warnings_dir}" \ '- package not in old state' \ @@ -2148,22 +2150,46 @@ function handle_one_package_change() { pkg_debug_disable return 0 fi - if [[ ${old_repo} != "${new_repo}" ]]; then - # This is pretty much an arbitrary limitation and I don't - # remember any more why we have it. - pkg_warn_d "${warnings_dir}" \ - '- package has moved between repos? unsupported for now' \ - " - old package and repo: ${old_name} ${old_repo}" \ - " - new package and repo: ${new_name} ${new_repo}" - pkg_debug_disable - return 0 - fi - if [[ ${new_repo} != 'portage-stable' ]]; then - # coreos-overlay packages will need a separate handling - pkg_debug 'not a portage-stable package' - pkg_debug_disable - return 0 - fi + + local old_repo_path new_repo_path old_cache_path new_cache_path + case ${old_repo} in + 'portage-stable') + old_repo_path=${OLD_PORTAGE_STABLE} + old_cache_path="${WORKDIR}/pkg-reports/old/portage-stable-cache" + ;; + 'coreos-overlay') + old_repo_path=${OLD_COREOS_OVERLAY} + old_cache_path="${WORKDIR}/pkg-reports/old/coreos-overlay-cache" + ;; + *) + pkg_warn_d "${warnings_dir}" \ + '- package coming from unknown repo' \ + ' - which: old' \ + " - package: ${old_name}" \ + " - repo: ${old_repo}" + pkg_debug_disable + return 0 + ;; + esac + case ${new_repo} in + 'portage-stable') + new_repo_path=${NEW_PORTAGE_STABLE} + new_cache_path="${WORKDIR}/pkg-reports/new/portage-stable-cache" + ;; + 'coreos-overlay') + new_repo_path=${NEW_COREOS_OVERLAY} + new_cache_path="${WORKDIR}/pkg-reports/new/coreos-overlay-cache" + ;; + *) + pkg_warn_d "${warnings_dir}" \ + '- package coming from unknown repo' \ + ' - which: new' \ + " - package: ${new_name}" \ + " - repo: ${new_repo}" + pkg_debug_disable + return 0 + ;; + esac local hopc_old_slots_set_var_name hopc_new_slots_set_var_name mvm_get "${pkg_slots_set_mvm_var_name}" "${old_name}" hopc_old_slots_set_var_name @@ -2231,8 +2257,8 @@ function handle_one_package_change() { hopc_package_output_paths[POP_PKG_OUT_DIR_IDX]=${update_dir_non_slot} # POP_PKG_SLOT_OUT_DIR_IDX will be set in loops below - generate_non_ebuild_diffs "${update_dir_non_slot}" "${OLD_PORTAGE_STABLE}" "${NEW_PORTAGE_STABLE}" "${old_name}" "${new_name}" - generate_full_diffs "${update_dir_non_slot}" "${OLD_PORTAGE_STABLE}" "${NEW_PORTAGE_STABLE}" "${old_name}" "${new_name}" + generate_non_ebuild_diffs "${update_dir_non_slot}" "${old_repo_path}" "${new_repo_path}" "${old_name}" "${new_name}" + generate_full_diffs "${update_dir_non_slot}" "${old_repo_path}" "${new_repo_path}" "${old_name}" "${new_name}" generate_package_mention_reports "${update_dir_non_slot}" "${NEW_STATE}" "${old_name}" "${new_name}" local hopc_changed='' @@ -2266,12 +2292,12 @@ function handle_one_package_change() { gentoo_ver_cmp_out "${new_version}" "${old_version}" hopc_cmp_result case ${hopc_cmp_result} in "${GV_GT}") - handle_pkg_update hopc_package_output_paths "${pkg_to_tags_mvm_var_name}" "${diff_lib_filters_var_name}" "${old_name}" "${new_name}" "${old_version}" "${new_version}" + handle_pkg_update hopc_package_output_paths "${pkg_to_tags_mvm_var_name}" "${diff_lib_filters_var_name}" "${old_repo_path}" "${new_repo_path}" "${old_cache_path}" "${new_cache_path}" "${old_name}" "${new_name}" "${old_version}" "${new_version}" hopc_changed=x ;; "${GV_EQ}") hopc_slot_changed= - handle_pkg_as_is hopc_package_output_paths "${pkg_to_tags_mvm_var_name}" "${diff_lib_filters_var_name}" "${old_name}" "${new_name}" "${old_version}" hopc_slot_changed + handle_pkg_as_is hopc_package_output_paths "${pkg_to_tags_mvm_var_name}" "${diff_lib_filters_var_name}" "${old_repo_path}" "${new_repo_path}" "${old_cache_path}" "${new_cache_path}" "${old_name}" "${new_name}" "${old_version}" hopc_slot_changed if [[ -z ${hopc_slot_changed} ]]; then rm -rf "${update_dir}" else @@ -2279,7 +2305,7 @@ function handle_one_package_change() { fi ;; "${GV_LT}") - handle_pkg_downgrade hopc_package_output_paths "${pkg_to_tags_mvm_var_name}" "${diff_lib_filters_var_name}" "${old_name}" "${new_name}" "${s}" "${s}" "${old_version}" "${new_version}" + handle_pkg_downgrade hopc_package_output_paths "${pkg_to_tags_mvm_var_name}" "${diff_lib_filters_var_name}" "${old_repo_path}" "${new_repo_path}" "${old_cache_path}" "${new_cache_path}" "${old_name}" "${new_name}" "${s}" "${s}" "${old_version}" "${new_version}" hopc_changed=x ;; esac @@ -2313,12 +2339,12 @@ function handle_one_package_change() { gentoo_ver_cmp_out "${new_version}" "${old_version}" hopc_cmp_result case ${hopc_cmp_result} in "${GV_GT}") - handle_pkg_update hopc_package_output_paths "${pkg_to_tags_mvm_var_name}" "${diff_lib_filters_var_name}" "${old_name}" "${new_name}" "${old_version}" "${new_version}" + handle_pkg_update hopc_package_output_paths "${pkg_to_tags_mvm_var_name}" "${diff_lib_filters_var_name}" "${old_repo_path}" "${new_repo_path}" "${old_cache_path}" "${new_cache_path}" "${old_name}" "${new_name}" "${old_version}" "${new_version}" hopc_changed=x ;; "${GV_EQ}") hopc_slot_changed= - handle_pkg_as_is hopc_package_output_paths "${pkg_to_tags_mvm_var_name}" "${diff_lib_filters_var_name}" "${old_name}" "${new_name}" "${old_version}" hopc_slot_changed + handle_pkg_as_is hopc_package_output_paths "${pkg_to_tags_mvm_var_name}" "${diff_lib_filters_var_name}" "${old_repo_path}" "${new_repo_path}" "${old_cache_path}" "${new_cache_path}" "${old_name}" "${new_name}" "${old_version}" hopc_slot_changed if [[ -z ${hopc_slot_changed} ]]; then rm -rf "${update_dir}" else @@ -2326,7 +2352,7 @@ function handle_one_package_change() { fi ;; "${GV_LT}") - handle_pkg_downgrade hopc_package_output_paths "${pkg_to_tags_mvm_var_name}" "${diff_lib_filters_var_name}" "${old_name}" "${new_name}" "${hopc_old_s}" "${hopc_new_s}" "${old_version}" "${new_version}" + handle_pkg_downgrade hopc_package_output_paths "${pkg_to_tags_mvm_var_name}" "${diff_lib_filters_var_name}" "${old_repo_path}" "${new_repo_path}" "${old_cache_path}" "${new_cache_path}" "${old_name}" "${new_name}" "${hopc_old_s}" "${hopc_new_s}" "${old_version}" "${new_version}" hopc_changed=x ;; esac @@ -2517,11 +2543,9 @@ function handle_package_changes() { info "preparing for handling package changes" - # TODO: when we handle moving packages between repos, then there - # should be two maps, for old and new state - local -A hpc_package_sources_map - hpc_package_sources_map=() - read_package_sources hpc_package_sources_map + local -A hpc_old_package_sources_map=() hpc_new_package_sources_map=() + read_package_sources old hpc_old_package_sources_map + read_package_sources new hpc_new_package_sources_map local -a old_pkgs new_pkgs old_pkgs=() @@ -2610,7 +2634,8 @@ function handle_package_changes() { hpc_bunch_of_maps[BOM_PKG_SLOTS_SET_MVM_IDX]=hpc_pkg_slots_set_mvm hpc_bunch_of_maps[BOM_OLD_PKG_SLOT_VERMINMAX_MAP_MVM_IDX]=hpc_old_pkg_slot_verminmax_map_mvm hpc_bunch_of_maps[BOM_NEW_PKG_SLOT_VERMINMAX_MAP_MVM_IDX]=hpc_new_pkg_slot_verminmax_map_mvm - hpc_bunch_of_maps[BOM_PKG_SOURCES_MAP_IDX]=hpc_package_sources_map + hpc_bunch_of_maps[BOM_OLD_PKG_SOURCES_MAP_IDX]=hpc_old_package_sources_map + hpc_bunch_of_maps[BOM_NEW_PKG_SOURCES_MAP_IDX]=hpc_new_package_sources_map hpc_bunch_of_maps[BOM_DIFF_LIB_FILTERS_IDX]="${hpc_diff_lib_filters_name}" # We will be spawning as many jobs below as there are available @@ -2812,14 +2837,15 @@ function handle_pkg_update() { local -n package_output_paths_ref=${1}; shift local pkg_to_tags_mvm_var_name=${1}; shift local diff_lib_filters_var_name=${1}; shift + local old_repo_path=${1}; shift + local new_repo_path=${1}; shift + local old_cache_path=${1}; shift + local new_cache_path=${1}; shift local old_pkg=${1}; shift local new_pkg=${1}; shift local old=${1}; shift local new=${1}; shift - # shellcheck source=for-shellcheck/globals - source "${WORKDIR}/globals" - local old_no_r=${old%-r+([0-9])} local new_no_r=${new%-r+([0-9])} @@ -2829,12 +2855,12 @@ function handle_pkg_update() { lines+=( "0:renamed from ${old_pkg}" ) fi local out_dir=${package_output_paths_ref[POP_PKG_SLOT_OUT_DIR_IDX]} - generate_ebuild_diff "${out_dir}" "${OLD_PORTAGE_STABLE}" "${NEW_PORTAGE_STABLE}" "${old_pkg}" "${new_pkg}" "${old}" "${new}" + generate_ebuild_diff "${out_dir}" "${old_repo_path}" "${new_repo_path}" "${old_pkg}" "${new_pkg}" "${old}" "${new}" local diff_report_name gen_varname diff_report_name diff_report_declare "${diff_report_name}" - generate_cache_diff_report "${diff_report_name}" "${diff_lib_filters_var_name}" "${WORKDIR}/pkg-reports/old/portage-stable-cache" "${WORKDIR}/pkg-reports/new/portage-stable-cache" "${old_pkg}" "${new_pkg}" "${old}" "${new}" + generate_cache_diff_report "${diff_report_name}" "${diff_lib_filters_var_name}" "${old_cache_path}" "${new_cache_path}" "${old_pkg}" "${new_pkg}" "${old}" "${new}" local -n diff_report_ref=${diff_report_name} local -n diff_lines_ref=${diff_report_ref[${DR_LINES_IDX}]} @@ -2887,14 +2913,15 @@ function handle_pkg_as_is() { local -n package_output_paths_ref=${1}; shift local pkg_to_tags_mvm_var_name=${1}; shift local diff_lib_filters_var_name=${1}; shift + local old_repo_path=${1}; shift + local new_repo_path=${1}; shift + local old_cache_path=${1}; shift + local new_cache_path=${1}; shift local old_pkg=${1}; shift local new_pkg=${1}; shift local v=${1}; shift local -n changed_ref=${1}; shift - # shellcheck source=for-shellcheck/globals - source "${WORKDIR}/globals" - local pkg_name=${new_pkg#/} local -a lines=( "0:still at ${v}" ) @@ -2905,14 +2932,14 @@ function handle_pkg_as_is() { fi local out_dir=${package_output_paths_ref[POP_PKG_SLOT_OUT_DIR_IDX]} - generate_ebuild_diff "${out_dir}" "${OLD_PORTAGE_STABLE}" "${NEW_PORTAGE_STABLE}" "${old_pkg}" "${new_pkg}" "${v}" "${v}" + generate_ebuild_diff "${out_dir}" "${old_repo_path}" "${new_repo_path}" "${old_pkg}" "${new_pkg}" "${v}" "${v}" local modified='' local diff_report_name gen_varname diff_report_name diff_report_declare "${diff_report_name}" - generate_cache_diff_report "${diff_report_name}" "${diff_lib_filters_var_name}" "${WORKDIR}/pkg-reports/old/portage-stable-cache" "${WORKDIR}/pkg-reports/new/portage-stable-cache" "${old_pkg}" "${new_pkg}" "${v}" "${v}" + generate_cache_diff_report "${diff_report_name}" "${diff_lib_filters_var_name}" "${old_cache_path}" "${new_cache_path}" "${old_pkg}" "${new_pkg}" "${v}" "${v}" local -n diff_report_ref=${diff_report_name} local -n diff_lines_ref=${diff_report_ref[${DR_LINES_IDX}]} @@ -2966,14 +2993,15 @@ function handle_pkg_downgrade() { local -n package_output_paths_ref=${1}; shift local pkg_to_tags_mvm_var_name=${1}; shift local diff_lib_filters_var_name=${1}; shift + local old_repo_path=${1}; shift + local new_repo_path=${1}; shift + local old_cache_path=${1}; shift + local new_cache_path=${1}; shift local old_pkg=${1}; shift local new_pkg=${1}; shift local old=${1}; shift local new=${1}; shift - # shellcheck source=for-shellcheck/globals - source "${WORKDIR}/globals" - local old_no_r=${old%-r+([0-9])} local new_no_r=${new%-r+([0-9])} @@ -2984,12 +3012,12 @@ function handle_pkg_downgrade() { fi local out_dir=${package_output_paths_ref[POP_PKG_SLOT_OUT_DIR_IDX]} - generate_ebuild_diff "${out_dir}" "${OLD_PORTAGE_STABLE}" "${NEW_PORTAGE_STABLE}" "${old_pkg}" "${new_pkg}" "${old}" "${new}" + generate_ebuild_diff "${out_dir}" "${old_repo_path}" "${new_repo_path}" "${old_pkg}" "${new_pkg}" "${old}" "${new}" local diff_report_name gen_varname diff_report_name diff_report_declare "${diff_report_name}" - generate_cache_diff_report "${diff_report_name}" "${diff_lib_filters_var_name}" "${WORKDIR}/pkg-reports/old/portage-stable-cache" "${WORKDIR}/pkg-reports/new/portage-stable-cache" "${old_pkg}" "${new_pkg}" "${old}" "${new}" + generate_cache_diff_report "${diff_report_name}" "${diff_lib_filters_var_name}" "${old_cache_path}" "${new_cache_path}" "${old_pkg}" "${new_pkg}" "${old}" "${new}" local -n diff_report_ref=${diff_report_name} local -n diff_lines_ref=${diff_report_ref[${DR_LINES_IDX}]}