Gentoo Archives: gentoo-commits

From: Zac Medico <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/portage:master commit in: bin/, lib/portage/tests/resolver/
Date: Thu, 02 Jul 2020 17:35:42
Message-Id: 1593709885.aef49531a084eb39c7e1cde16fc1a22c060135fd.zmedico@gentoo
1 commit: aef49531a084eb39c7e1cde16fc1a22c060135fd
2 Author: Zac Medico <zmedico <AT> gentoo <DOT> org>
3 AuthorDate: Sun Jun 28 19:30:10 2020 +0000
4 Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
5 CommitDate: Thu Jul 2 17:11:25 2020 +0000
6 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=aef49531
7
8 ecompress: optimize docompress -x precompressed comparison
9
10 Use sort and comm with temporary files in order to compare lists
11 of docompress -x and precompressed files, since the file lists
12 can be extremely large. Also strip ${D%/} from paths in order to
13 reduce length.
14
15 Bug: https://bugs.gentoo.org/721516
16 Suggested-by: Robin H. Johnson <robbat2 <AT> gentoo.org>
17 Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>
18
19 bin/ecompress | 27 ++++++++++++------------
20 lib/portage/tests/resolver/ResolverPlayground.py | 1 +
21 2 files changed, 15 insertions(+), 13 deletions(-)
22
23 diff --git a/bin/ecompress b/bin/ecompress
24 index 60b083834..7991bcfbe 100755
25 --- a/bin/ecompress
26 +++ b/bin/ecompress
27 @@ -19,29 +19,30 @@ while [[ $# -gt 0 ]] ; do
28 shift
29
30 skip_dirs=()
31 - skip_files=()
32 + > "${T}/.ecompress_skip_files" || die
33 for skip; do
34 if [[ -d ${ED%/}/${skip#/} ]]; then
35 skip_dirs+=( "${ED%/}/${skip#/}" )
36 else
37 rm -f "${ED%/}/${skip#/}.ecompress" || die
38 - skip_files+=("${ED%/}/${skip#/}")
39 + printf -- '%s\n' "${EPREFIX}/${skip#/}" >> "${T}/.ecompress_skip_files" || die
40 fi
41 done
42
43 if [[ ${#skip_dirs[@]} -gt 0 ]]; then
44 - while read -r -d ''; do
45 - skip_files+=("${REPLY%.ecompress}")
46 + while read -r -d '' skip; do
47 + skip=${skip%.ecompress}
48 + printf -- '%s\n' "${skip#${D%/}}" >> "${T}/.ecompress_skip_files" || die
49 done < <(find "${skip_dirs[@]}" -name '*.ecompress' -print0 -delete || die)
50 fi
51
52 - if [[ ${#skip_files[@]} -gt 0 && -s ${T}/.ecompress_had_precompressed ]]; then
53 - sed_args=()
54 - for f in "${skip_files[@]}"; do
55 - sed_args+=("s|^${f}\$||;")
56 - done
57 - sed_args+=('/^$/d')
58 - sed -f - -i "${T}/.ecompress_had_precompressed" <<< "${sed_args[@]}" || die
59 + if [[ -s ${T}/.ecompress_skip_files && -s ${T}/.ecompress_had_precompressed ]]; then
60 + # Filter skipped files from ${T}/.ecompress_had_precompressed,
61 + # using temporary files since these lists can be extremely large.
62 + LC_COLLATE=C sort -u "${T}/.ecompress_skip_files" > "${T}/.ecompress_skip_files_sorted" || die
63 + LC_COLLATE=C sort -u "${T}/.ecompress_had_precompressed" > "${T}/.ecompress_had_precompressed_sorted" || die
64 + LC_COLLATE=C comm -13 "${T}/.ecompress_skip_files_sorted" "${T}/.ecompress_had_precompressed_sorted" > "${T}/.ecompress_had_precompressed" || die
65 + rm -f "${T}/.ecompress_had_precompressed_sorted" "${T}/.ecompress_skip_files"{,_sorted}
66 fi
67
68 exit 0
69 @@ -81,7 +82,7 @@ while [[ $# -gt 0 ]] ; do
70 continue 2
71 fi
72 done
73 - echo "${path}" >> "${T}"/.ecompress_had_precompressed
74 + printf -- '%s\n' "${path#${D%/}}" >> "${T}"/.ecompress_had_precompressed || die
75 ;;
76 esac
77
78 @@ -196,7 +197,7 @@ if [[ -s ${T}/.ecompress_had_precompressed ]]; then
79 eqawarn
80 n=0
81 while read -r f; do
82 - eqawarn " ${f#${D%/}}"
83 + eqawarn " ${f}"
84 if [[ $(( n++ )) -eq 10 ]]; then
85 eqawarn " ..."
86 break
87
88 diff --git a/lib/portage/tests/resolver/ResolverPlayground.py b/lib/portage/tests/resolver/ResolverPlayground.py
89 index de80a0cc1..ec2e31ae9 100644
90 --- a/lib/portage/tests/resolver/ResolverPlayground.py
91 +++ b/lib/portage/tests/resolver/ResolverPlayground.py
92 @@ -91,6 +91,7 @@ class ResolverPlayground(object):
93 "chgrp",
94 "chmod",
95 "chown",
96 + "comm",
97 "cp",
98 "egrep",
99 "env",