python,python3: make deletion tolerant for paths with spaces

Piping to xargs does not handle spaces in paths too well, because it splits
up the paths.
For deleting empty dirs, we also need to do several retries, otherwise
`find` will try to go through the directories after they're deleted.

Signed-off-by: Alexandru Ardelean <ardeleanalex@gmail.com>
This commit is contained in:
Alexandru Ardelean 2019-02-05 12:04:43 +02:00
parent 14d0a9c58d
commit 1bf7679211
3 changed files with 25 additions and 16 deletions

View file

@ -40,6 +40,17 @@ process_filespec() {
)
}
delete_empty_dirs() {
local dst_dir="$1"
if [ -d "$dst_dir/usr" ] ; then
for _ in $(seq 1 10) ; do
find "$dst_dir/usr" -empty -type d -exec rmdir {} \; || continue
break
done
rmdir "$dst_dir/usr" || true
fi
}
ver="$1"
src_dir="$2"
dst_dir="$3"
@ -47,7 +58,7 @@ python="$4"
mode="$5"
filespec="$6"
find "$src_dir" -name "*\.exe" | xargs rm -f
find "$src_dir" -name "*\.exe" -exec rm -f {} \;
process_filespec "$src_dir" "$dst_dir" "$filespec" || {
echo "process filespec error-ed"
@ -56,13 +67,9 @@ process_filespec "$src_dir" "$dst_dir" "$filespec" || {
if [ "$mode" == "sources" ] ; then
# Copy only python source files
find $dst_dir -not -type d -not -name "*\.py" | xargs rm -f
find "$dst_dir" -not -type d -not -name "*\.py" -exec rm -f {} \;
# Delete empty folders (if the case)
if [ -d "$dst_dir/usr" ] ; then
find $dst_dir/usr -type d | xargs rmdir --ignore-fail-on-non-empty
rmdir --ignore-fail-on-non-empty $dst_dir/usr
fi
delete_empty_dirs "$dst_dir"
exit 0
fi
@ -75,19 +82,15 @@ legacy=
# So, we just stuck to un-optimized byte-codes,
# which is still way better/faster than running
# Python sources all the time.
$python -m compileall $legacy -d '/' $dst_dir || {
$python -m compileall $legacy -d '/' "$dst_dir" || {
echo "python -m compileall err-ed"
exit 1
}
# Delete source files and pyc [ un-optimized bytecode files ]
# We may want to make this optimization thing configurable later, but not sure atm
find $dst_dir -type f -name "*\.py" | xargs rm -f
find "$dst_dir" -type f -name "*\.py" -exec rm -f {} \;
# Delete empty folders (if the case)
if [ -d "$dst_dir/usr" ] ; then
find $dst_dir/usr -type d | xargs rmdir --ignore-fail-on-non-empty
rmdir --ignore-fail-on-non-empty $dst_dir/usr
fi
delete_empty_dirs "$dst_dir"
exit 0

View file

@ -21,7 +21,10 @@ define Package/python3-pip/install
$(PKG_BUILD_DIR)/install-pip/lib/python$(PYTHON3_VERSION)/site-packages/pip \
$(PKG_BUILD_DIR)/install-pip/lib/python$(PYTHON3_VERSION)/site-packages/pip-$(PYTHON3_PIP_VERSION).dist-info \
$(1)/usr/lib/python$(PYTHON3_VERSION)/site-packages/
find $(1)/usr/lib/python$(PYTHON3_VERSION)/site-packages/ -name __pycache__ | xargs rm -rf
for _ in \$(seq 1 10) ; do \
find $(1)/usr/lib/python$(PYTHON3_VERSION)/site-packages/ -name __pycache__ -exec rm -rf {} \; || continue ; \
break ; \
done
endef
$(eval $(call Py3BasePackage,python3-pip, \

View file

@ -24,7 +24,10 @@ define Py3Package/python3-setuptools/install
$(PKG_BUILD_DIR)/install-setuptools/lib/python$(PYTHON3_VERSION)/site-packages/setuptools-$(PYTHON3_SETUPTOOLS_VERSION).dist-info \
$(PKG_BUILD_DIR)/install-setuptools/lib/python$(PYTHON3_VERSION)/site-packages/easy_install.py \
$(1)/usr/lib/python$(PYTHON3_VERSION)/site-packages
find $(1)/usr/lib/python$(PYTHON3_VERSION)/site-packages/ -name __pycache__ | xargs rm -rf
for _ in \$(seq 1 10) ; do \
find $(1)/usr/lib/python$(PYTHON3_VERSION)/site-packages/ -name __pycache__ -exec rm -rf {} \; || continue ; \
break ; \
done
endef
$(eval $(call Py3BasePackage,python3-setuptools, \