mirror of
https://github.com/flatcar/scripts.git
synced 2025-08-08 05:26:58 +02:00
license filtering
This commit is contained in:
parent
0dae23c0e5
commit
f1dfd810b6
@ -15,6 +15,92 @@ source "$(dirname "${BASH_SOURCE[0]}")/util.sh"
|
|||||||
source "${PKG_AUTO_IMPL_DIR}/debug.sh"
|
source "${PKG_AUTO_IMPL_DIR}/debug.sh"
|
||||||
source "${PKG_AUTO_IMPL_DIR}/gentoo_ver.sh"
|
source "${PKG_AUTO_IMPL_DIR}/gentoo_ver.sh"
|
||||||
|
|
||||||
|
#
|
||||||
|
# Misc
|
||||||
|
#
|
||||||
|
|
||||||
|
function evaluate_license_group() {
|
||||||
|
local license_group_name=${1}; shift
|
||||||
|
local -n use_flags_map_ref=${1}; shift
|
||||||
|
local -n used_licenses_ref=${1}; shift
|
||||||
|
|
||||||
|
local -a groups_to_process=( "${license_group_name}" )
|
||||||
|
|
||||||
|
while [[ ${#groups_to_process[*]} -gt 0 ]]; do
|
||||||
|
local -n group_ref=${groups_to_process[-1]}
|
||||||
|
unset 'groups_to_process[-1]'
|
||||||
|
|
||||||
|
local -n group_items_ref=${group_ref[GROUP_ITEMS_IDX]}
|
||||||
|
case ${group_ref[GROUP_TYPE_IDX]} in
|
||||||
|
"${GROUP_ALL_OF}")
|
||||||
|
local name=${group_ref[GROUP_USE_IDX]}
|
||||||
|
if [[ -n ${name} ]]; then
|
||||||
|
local -i mode
|
||||||
|
case ${group_ref[GROUP_ENABLED_IDX]} in
|
||||||
|
"${GROUP_USE_ENABLED}")
|
||||||
|
mode=IUSE_ENABLED
|
||||||
|
;;
|
||||||
|
"${GROUP_USE_DISABLED}")
|
||||||
|
mode=IUSE_DISABLED
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
if [[ -n ${use_flags_map_ref["${name}"]:+unset} ]]; then
|
||||||
|
# TODO: warning
|
||||||
|
fail "emerge did not report USE flag ${name@Q} to exist in the processed package"
|
||||||
|
fi
|
||||||
|
local -i flag_mode=${use_flags_map_ref["${mode}"]}
|
||||||
|
if [[ mode -eq flag_mode ]]; then
|
||||||
|
local item_var_name
|
||||||
|
for item_var_name in "${group_items_ref[@]}"; do
|
||||||
|
local -n item_ref=${item_var_name}
|
||||||
|
case ${item_ref:0:1} in
|
||||||
|
'e')
|
||||||
|
: # nothing to do here
|
||||||
|
;;
|
||||||
|
'g')
|
||||||
|
groups_to_process+=( "${item_ref:2}" )
|
||||||
|
;;
|
||||||
|
'l')
|
||||||
|
used_licenses_ref+=( "${item_ref:2}" )
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
fail "item ${item_ref} is bad"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
unset -n item_ref
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
unset name
|
||||||
|
;;
|
||||||
|
"${GROUP_ANY_OF}")
|
||||||
|
local item_var_name
|
||||||
|
for item_var_name in "${group_items_ref[@]}"; do
|
||||||
|
local -n item_ref=${item_var_name}
|
||||||
|
case ${item_ref:0:1} in
|
||||||
|
'e')
|
||||||
|
: # nothing to do here
|
||||||
|
;;
|
||||||
|
'g')
|
||||||
|
groups_to_process+=( "${item_ref:2}" )
|
||||||
|
;;
|
||||||
|
'l')
|
||||||
|
used_licenses_ref+=( "${item_ref:2}" )
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
fail "item ${item_ref} is bad"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
unset -n item_ref
|
||||||
|
done
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
unset -n group_items_ref
|
||||||
|
|
||||||
|
unset -n group_ref
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
#
|
#
|
||||||
# Cache file
|
# Cache file
|
||||||
#
|
#
|
||||||
|
@ -2099,6 +2099,8 @@ function handle_one_package_change() {
|
|||||||
generate_full_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}"
|
generate_package_mention_reports "${update_dir_non_slot}" "${NEW_STATE}" "${old_name}" "${new_name}"
|
||||||
|
|
||||||
|
local -A hopc_used_licenses_set=()
|
||||||
|
|
||||||
local hopc_changed=''
|
local hopc_changed=''
|
||||||
local old_verminmax new_verminmax
|
local old_verminmax new_verminmax
|
||||||
local hopc_slot_dirname
|
local hopc_slot_dirname
|
||||||
@ -2137,6 +2139,7 @@ function handle_one_package_change() {
|
|||||||
parse_cache_file hopc_new_cache_file "${new_cache_path}/${new_name}-${new_version}" "${ARCHES[@]}"
|
parse_cache_file hopc_new_cache_file "${new_cache_path}/${new_name}-${new_version}" "${ARCHES[@]}"
|
||||||
|
|
||||||
diff_cache_data hopc_old_cache_file hopc_new_cache_file "${diff_lib_filters_var_name}" hopc_diff_report
|
diff_cache_data hopc_old_cache_file hopc_new_cache_file "${diff_lib_filters_var_name}" hopc_diff_report
|
||||||
|
evaluate_licenses hopc_new_cache_file "{kvr_reports_var_name}" "${new_name}" "${s}" "${new_version}" hopc_used_licenses_set
|
||||||
|
|
||||||
gentoo_ver_cmp_out "${new_version}" "${old_version}" hopc_cmp_result
|
gentoo_ver_cmp_out "${new_version}" "${old_version}" hopc_cmp_result
|
||||||
case ${hopc_cmp_result} in
|
case ${hopc_cmp_result} in
|
||||||
@ -2198,6 +2201,7 @@ function handle_one_package_change() {
|
|||||||
parse_cache_file hopc_new_cache_file "${new_cache_path}/${new_name}-${new_version}" "${ARCHES[@]}"
|
parse_cache_file hopc_new_cache_file "${new_cache_path}/${new_name}-${new_version}" "${ARCHES[@]}"
|
||||||
|
|
||||||
diff_cache_data hopc_old_cache_file hopc_new_cache_file "${diff_lib_filters_var_name}" hopc_diff_report
|
diff_cache_data hopc_old_cache_file hopc_new_cache_file "${diff_lib_filters_var_name}" hopc_diff_report
|
||||||
|
evaluate_licenses hopc_new_cache_file "{kvr_reports_var_name}" "${new_name}" "${hopc_new_s}" "${new_version}" hopc_used_licenses_set
|
||||||
|
|
||||||
gentoo_ver_cmp_out "${new_version}" "${old_version}" hopc_cmp_result
|
gentoo_ver_cmp_out "${new_version}" "${old_version}" hopc_cmp_result
|
||||||
case ${hopc_cmp_result} in
|
case ${hopc_cmp_result} in
|
||||||
@ -2246,11 +2250,23 @@ function handle_one_package_change() {
|
|||||||
done
|
done
|
||||||
manual_d "${warnings_dir}" "${lines[@]}"
|
manual_d "${warnings_dir}" "${lines[@]}"
|
||||||
unset lines
|
unset lines
|
||||||
# TODO: evaluate used licenses here, remember that the values
|
|
||||||
# in USE may albo be in parentheses or have some other extra
|
# But we still want to evaluate the licenses.
|
||||||
# symbols there (percents, asterisks and whatnot)
|
for s in "${!hopc_new_filtered_slots_set[@]}"; do
|
||||||
|
new_verminmax=${new_slot_verminmax_map_ref["${s}"]:-}
|
||||||
|
new_version=${new_verminmax##*:}
|
||||||
|
|
||||||
|
cache_file_declare hopc_new_cache_file
|
||||||
|
|
||||||
|
parse_cache_file hopc_new_cache_file "${new_cache_path}/${new_name}-${new_version}" "${ARCHES[@]}"
|
||||||
|
|
||||||
|
evaluate_licenses hopc_new_cache_file "{kvr_reports_var_name}" "${new_name}" "${s}" "${new_version}" hopc_used_licenses_set
|
||||||
|
cache_file_unset hopc_new_cache_file
|
||||||
|
done
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
printf '%s\n' "${!hopc_used_licenses_set[@]}" >"${used_licenses_file}"
|
||||||
|
|
||||||
package_output_paths_unset hopc_package_output_paths
|
package_output_paths_unset hopc_package_output_paths
|
||||||
unset -n new_slot_verminmax_map_ref old_slot_verminmax_map_ref
|
unset -n new_slot_verminmax_map_ref old_slot_verminmax_map_ref
|
||||||
# if nothing changed, drop the entire update directory for the
|
# if nothing changed, drop the entire update directory for the
|
||||||
@ -2511,7 +2527,7 @@ function kvr_read_reports() {
|
|||||||
function handle_package_changes() {
|
function handle_package_changes() {
|
||||||
local -n renamed_old_to_new_map_ref=${1}; shift
|
local -n renamed_old_to_new_map_ref=${1}; shift
|
||||||
local pkg_to_tags_mvm_var_name=${1}; shift
|
local pkg_to_tags_mvm_var_name=${1}; shift
|
||||||
local -n used_licenses_map_ref=${1}; shift
|
local -n used_licenses_set_ref=${1}; shift
|
||||||
|
|
||||||
# shellcheck source=for-shellcheck/globals
|
# shellcheck source=for-shellcheck/globals
|
||||||
source "${WORKDIR}/globals"
|
source "${WORKDIR}/globals"
|
||||||
@ -2759,7 +2775,7 @@ function handle_package_changes() {
|
|||||||
next_idx=${idx}
|
next_idx=${idx}
|
||||||
done
|
done
|
||||||
|
|
||||||
local some_job_failed='' hpc_filename
|
local some_job_failed='' hpc_filename license
|
||||||
local -i hpc_rv
|
local -i hpc_rv
|
||||||
truncate --size=0 "${REPORTS_DIR}/updates/summary_stubs" "${REPORTS_DIR}/updates/changelog_stubs"
|
truncate --size=0 "${REPORTS_DIR}/updates/summary_stubs" "${REPORTS_DIR}/updates/changelog_stubs"
|
||||||
for pkg_job_state_name in "${pkg_job_state_names[@]}"; do
|
for pkg_job_state_name in "${pkg_job_state_names[@]}"; do
|
||||||
@ -2771,6 +2787,9 @@ function handle_package_changes() {
|
|||||||
if [[ hpc_rv -ne 0 ]]; then
|
if [[ hpc_rv -ne 0 ]]; then
|
||||||
some_job_failed=x
|
some_job_failed=x
|
||||||
fi
|
fi
|
||||||
|
while read -r license; do
|
||||||
|
used_licenses_set_ref["${license}"]=x
|
||||||
|
done <"${pkg_job_dir}/used-licenses"
|
||||||
for file in "${pkg_job_dir}/warnings/"*; do
|
for file in "${pkg_job_dir}/warnings/"*; do
|
||||||
basename_out "${file}" hpc_filename
|
basename_out "${file}" hpc_filename
|
||||||
cat "${file}" >>"${REPORTS_DIR}/${hpc_filename}"
|
cat "${file}" >>"${REPORTS_DIR}/${hpc_filename}"
|
||||||
@ -2787,6 +2806,8 @@ function handle_package_changes() {
|
|||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
|
printf '%s\n' "${!used_licenses_set_ref[@]}" | sort -u >"${REPORTS_DIR}/used-licenses"
|
||||||
|
|
||||||
pkg_job_state_unset "${pkg_job_state_names[@]}"
|
pkg_job_state_unset "${pkg_job_state_names[@]}"
|
||||||
bunch_of_maps_unset hpc_bunch_of_maps
|
bunch_of_maps_unset hpc_bunch_of_maps
|
||||||
|
|
||||||
@ -3219,6 +3240,63 @@ function generate_ebuild_diff() {
|
|||||||
xdiff --unified=3 "${old_path}" "${new_path}" >"${out_dir}/ebuild.diff"
|
xdiff --unified=3 "${old_path}" "${new_path}" >"${out_dir}/ebuild.diff"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function evaluate_licenses() {
|
||||||
|
local cache_file_var_name=${1}; shift
|
||||||
|
local kvr_reports_var_name=${1}; shift
|
||||||
|
local pkg=${1}; shift
|
||||||
|
local slot=${1}; shift
|
||||||
|
local version=${1}; shift
|
||||||
|
local -n used_licenses_set_ref=${1}; shift
|
||||||
|
|
||||||
|
local -n cache_ref=${cache_var_name}
|
||||||
|
local -n reports_ref=${kvr_reports_var_name}
|
||||||
|
|
||||||
|
local license_group_name=${cache_ref[PCF_LICENSE_IDX]}
|
||||||
|
local -n map_names_ref=${reports_ref[KVR_MAPS_IDX]}
|
||||||
|
|
||||||
|
local pkg_map_name pkg_map_key=${pkg}-${version}:${slot}
|
||||||
|
local kv_map_name use_flags_array_name use
|
||||||
|
local -i mode
|
||||||
|
|
||||||
|
local -a el_used_licenses
|
||||||
|
local -A el_use_flags_map
|
||||||
|
|
||||||
|
for pkg_map_name in "${map_names_ref[@]}"; do
|
||||||
|
local -n pkg_map_ref=${pkg_map_name}
|
||||||
|
kv_map_name=${pkg_map_ref["${pkg_map_key}"]:-EMPTY_MAP}
|
||||||
|
unset -n pkg_map_ref
|
||||||
|
local -n kv_map_ref=${kv_map_name}
|
||||||
|
use_flags_array_name=${kv_map_ref['USE']:-EMPTY_ARRAY}
|
||||||
|
unset -n kv_map_ref
|
||||||
|
local -n use_flags_array_ref=${use_flags_array_name}
|
||||||
|
|
||||||
|
el_use_flags_map=()
|
||||||
|
for use in "${use_flags_array_ref[@]}"; do
|
||||||
|
use=${use//'('/}
|
||||||
|
use=${use//')'/}
|
||||||
|
use=${use//'{'/}
|
||||||
|
use=${use//'}'/}
|
||||||
|
use=${use//'%'/}
|
||||||
|
use=${use//'*'/}
|
||||||
|
mode=IUSE_ENABLED
|
||||||
|
if [[ ${use:0:1} = '-' ]]; then
|
||||||
|
mode=IUSE_DISABLED
|
||||||
|
use=${use:1}
|
||||||
|
fi
|
||||||
|
el_use_flags_map["${use}"]=${mode}
|
||||||
|
done
|
||||||
|
|
||||||
|
evaluate_license_group "${license_group_name}" el_use_flags_map el_used_licenses
|
||||||
|
|
||||||
|
unset -n use_flags_array_ref
|
||||||
|
done
|
||||||
|
|
||||||
|
local license
|
||||||
|
for license in "${el_used_licenses[@]}"; do
|
||||||
|
used_licenses_set_ref["${license}"]=x
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
# Generate a report with information where the old and new packages
|
# Generate a report with information where the old and new packages
|
||||||
# are mentioned in entire scripts repository. May result in two
|
# are mentioned in entire scripts repository. May result in two
|
||||||
# separate reports if the package got renamed.
|
# separate reports if the package got renamed.
|
||||||
@ -3352,12 +3430,12 @@ function handle_gentoo_sync() {
|
|||||||
source "${WORKDIR}/globals"
|
source "${WORKDIR}/globals"
|
||||||
|
|
||||||
local -A hgs_renames_old_to_new_map=()
|
local -A hgs_renames_old_to_new_map=()
|
||||||
local -A hgs_used_licenses_map=()
|
local -A hgs_used_licenses_set=()
|
||||||
process_profile_updates_directory hgs_renames_old_to_new_map
|
process_profile_updates_directory hgs_renames_old_to_new_map
|
||||||
|
|
||||||
mkdir -p "${REPORTS_DIR}/updates"
|
mkdir -p "${REPORTS_DIR}/updates"
|
||||||
|
|
||||||
handle_package_changes hgs_renames_old_to_new_map hgs_pkg_to_tags_mvm hgs_used_licenses_map
|
handle_package_changes hgs_renames_old_to_new_map hgs_pkg_to_tags_mvm hgs_used_licenses_set
|
||||||
|
|
||||||
mvm_unset hgs_pkg_to_tags_mvm
|
mvm_unset hgs_pkg_to_tags_mvm
|
||||||
#mvm_debug_disable hgs_pkg_to_tags_mvm
|
#mvm_debug_disable hgs_pkg_to_tags_mvm
|
||||||
@ -3404,7 +3482,7 @@ function handle_gentoo_sync() {
|
|||||||
handle_eclass "${entry}"
|
handle_eclass "${entry}"
|
||||||
;;
|
;;
|
||||||
licenses)
|
licenses)
|
||||||
handle_licenses
|
handle_licenses hgs_used_licenses_set
|
||||||
;;
|
;;
|
||||||
metadata)
|
metadata)
|
||||||
info "not handling metadata updates, skipping"
|
info "not handling metadata updates, skipping"
|
||||||
@ -3650,11 +3728,42 @@ function handle_profiles() {
|
|||||||
# Handles changes in license directory. Generates brief reports and
|
# Handles changes in license directory. Generates brief reports and
|
||||||
# diffs about dropped, added or modified licenses.
|
# diffs about dropped, added or modified licenses.
|
||||||
function handle_licenses() {
|
function handle_licenses() {
|
||||||
|
local -n used_licenses_set_ref=${1}; shift
|
||||||
|
|
||||||
# shellcheck source=for-shellcheck/globals
|
# shellcheck source=for-shellcheck/globals
|
||||||
source "${WORKDIR}/globals"
|
source "${WORKDIR}/globals"
|
||||||
|
|
||||||
info "handling update of licenses"
|
info "handling update of licenses"
|
||||||
|
|
||||||
|
local file hl_license
|
||||||
|
local -a to_be_dropped=()
|
||||||
|
for file in "${NEW_PORTAGE_STABLE}/licenses/"*; do
|
||||||
|
basename_out "${file}" hl_license
|
||||||
|
if [[ -z ${used_licenses_set_ref["${license}"]:-} ]]; then
|
||||||
|
to_be_dropped+=( "${license}" )
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ ${#to_be_dropped[@]} -gt 0 ]]; then
|
||||||
|
local -x "${GIT_ENV_VARS[@]}"
|
||||||
|
setup_git_env
|
||||||
|
|
||||||
|
git -C "${NEW_PORTAGE_STABLE}/licenses" rm -f "${to_be_dropped[@]}"
|
||||||
|
local old_head maybe_new_commit
|
||||||
|
old_head=$(git -C "${OLD_STATE}" rev-parse HEAD)
|
||||||
|
maybe_new_commit=$(git -C "${NEW_STATE}" log "${old_head}..HEAD" -- "${PORTAGE_STABLE_SUFFIX}/licenses" | head -n 1 | cut -f1 -d' ')
|
||||||
|
if [[ -n ${maybe_new_commit} ]]; then
|
||||||
|
# licenses directory was updated during last sync, so
|
||||||
|
# amend it with the removals
|
||||||
|
git -C "${NEW_STATE}" commit --fixup "${maybe_new_commit}"
|
||||||
|
git -C "${NEW_STATE}" rebase --autosquash "${old_head}"
|
||||||
|
else
|
||||||
|
# no licenses werew updated during last sync, create the
|
||||||
|
# removals commit
|
||||||
|
git -C "${NEW_STATE}" commit -m 'licenses: Drop unused licenses'
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
local -a dropped=() added=() changed=()
|
local -a dropped=() added=() changed=()
|
||||||
local line hl_stripped
|
local line hl_stripped
|
||||||
# Lines are:
|
# Lines are:
|
||||||
|
Loading…
Reference in New Issue
Block a user