Detect when the archive does not contain a single top-level directory,
and abort in that case. Otherwise, --strip-components would result
in unpredictable mess.
Signed-off-by: Michał Górny
---
eclass/vcs-snapshot.eclass | 16 ++--
1 file changed, 14 insertions(+), 2 deletions(-)
diff --git a/eclass/vcs-snapshot.eclass b/eclass/vcs-snapshot.eclass
index 312e9a4611e1..dbca6fd586d2 100644
--- a/eclass/vcs-snapshot.eclass
+++ b/eclass/vcs-snapshot.eclass
@@ -68,8 +68,20 @@ vcs-snapshot_src_unpack() {
debug-print "${FUNCNAME}: unpacking ${f} to
${destdir}"
- # XXX: check whether the directory structure
inside is
- # fine? i.e. if the tarball has actually a
parent dir.
+ local topdirs=()
+ readarray -t topdirs \
+ < <(tar -t -f "${DISTDIR}/${f}" | cut
-d/ -f1 | sort -u)
+ if [[ ${#topdirs[@]} -gt 1 ]]; then
+ eerror "The archive ${f} contains
multiple or no top directory."
+ eerror "It is impossible for
vcs-snapshot to unpack this correctly."
+ eerror "Top directories found:"
+ local d
+ for d in "${topdirs[@]}"; do
+ eerror "${d}"
+ done
+ die "${FUNCNAME}: Invalid directory
structure in archive ${f}"
+ fi
+
mkdir "${destdir}" || die
# -o (--no-same-owner) to avoid restoring
original owner
einfo "Unpacking ${f}"
--
2.22.0