- Sort directories by Lexicographical Depth-First order (find -ds)

With hat:	portmgr
This commit is contained in:
Bryan Drewery 2014-04-21 16:22:20 +00:00
parent 6fdcdb7344
commit e81c57a53d
Notes: svn2git 2021-03-31 03:12:20 +00:00
svn path=/head/; revision=351693

View file

@ -23,6 +23,12 @@ listmtree() { # mtreefile prefix
} | tar -tf- | sed "s,^,$2/,;s,^$2/\.$,$2,;s,^$,/," } | tar -tf- | sed "s,^,$2/,;s,^$2/\.$,$2,;s,^$,/,"
} }
sort_dfs() {
while read dir; do
grep "^[0-9]* ${dir}$" ${WRKDIR}/.staged-dirs-dfs-sorted
done | sort -n | cut -d ' ' -f2-
}
# obtain operating mode from command line # obtain operating mode from command line
makeplist=0 makeplist=0
case "$1" in case "$1" in
@ -234,10 +240,14 @@ comm -13 ${WRKDIR}/.plist-files ${WRKDIR}/.staged-files | \
### HANDLE DIRS ### HANDLE DIRS
cat ${WRKDIR}/.plist-dirs-unsorted ${WRKDIR}/.mtree \ cat ${WRKDIR}/.plist-dirs-unsorted ${WRKDIR}/.mtree \
${WRKDIR}/.run-depends-dirs | sort -u >${WRKDIR}/.traced-dirs ${WRKDIR}/.run-depends-dirs | sort -u >${WRKDIR}/.traced-dirs
find ${STAGEDIR} -type d | sed -e "s,^${STAGEDIR},,;/^$/d" | \ find -sd ${STAGEDIR} -type d | sed -e "s,^${STAGEDIR},,;/^$/d" \
sort >${WRKDIR}/.staged-dirs >${WRKDIR}/.staged-dirs-dfs
comm -13 ${WRKDIR}/.traced-dirs ${WRKDIR}/.staged-dirs \ sort ${WRKDIR}/.staged-dirs-dfs >${WRKDIR}/.staged-dirs-sorted
| sort -r | sed "${sed_dirs}" \ awk '{print FNR, $0}' ${WRKDIR}/.staged-dirs-dfs \
>${WRKDIR}/.staged-dirs-dfs-sorted
# Find all staged dirs and then sort them by depth-first (find -ds)
comm -13 ${WRKDIR}/.traced-dirs ${WRKDIR}/.staged-dirs-sorted \
| sort_dfs | sed "${sed_dirs}" \
>>${WRKDIR}/.staged-plist || : >>${WRKDIR}/.staged-plist || :
# If just making plist, show results and exit successfully. # If just making plist, show results and exit successfully.
@ -270,7 +280,7 @@ cat ${WRKDIR}/.mtree ${WRKDIR}/.run-depends-dirs | sort -u \
>${WRKDIR}/.restricted-dirs >${WRKDIR}/.restricted-dirs
: >${WRKDIR}/.invalid-plist-dependencies : >${WRKDIR}/.invalid-plist-dependencies
comm -12 ${WRKDIR}/.plist-dirs-sorted-no-comments ${WRKDIR}/.restricted-dirs \ comm -12 ${WRKDIR}/.plist-dirs-sorted-no-comments ${WRKDIR}/.restricted-dirs \
| sort -r | sed "${sed_dirs}" \ | sort_dfs | sed "${sed_dirs}" \
>>${WRKDIR}/.invalid-plist-dependencies || : >>${WRKDIR}/.invalid-plist-dependencies || :
if [ -s "${WRKDIR}/.invalid-plist-dependencies" ]; then if [ -s "${WRKDIR}/.invalid-plist-dependencies" ]; then
ret=1 ret=1
@ -285,9 +295,19 @@ comm -23 ${WRKDIR}/.plist-files-no-comments ${WRKDIR}/.staged-files | \
sed -e "${sed_files}" \ sed -e "${sed_files}" \
>>${WRKDIR}/.invalid-plist-missing || : >>${WRKDIR}/.invalid-plist-missing || :
comm -23 ${WRKDIR}/.plist-dirs-sorted-no-comments ${WRKDIR}/.staged-dirs \ # Look for directories, then sort them by DFS. Must create the dirs
| sort -r | sed "${sed_dirs}" \ # so find -ds can be used to sort them.
rm -rf ${WRKDIR}/.missing-dirs > /dev/null 2>&1 || :
mkdir ${WRKDIR}/.missing-dirs
comm -23 ${WRKDIR}/.plist-dirs-sorted-no-comments \
${WRKDIR}/.staged-dirs-sorted > ${WRKDIR}/.missing-plist-dirs
sed "s,^,${WRKDIR}/.missing-dirs," ${WRKDIR}/.missing-plist-dirs | \
xargs mkdir -p
find -ds ${WRKDIR}/.missing-dirs | sed -e "s,^${WRKDIR}/.missing-dirs,," | \
while read dir; do grep -x "${dir}" ${WRKDIR}/.missing-plist-dirs || :; done | \
sed "${sed_dirs}" \
>>${WRKDIR}/.invalid-plist-missing || : >>${WRKDIR}/.invalid-plist-missing || :
rm -rf ${WRKDIR}/.missing-dirs
if [ -s "${WRKDIR}/.invalid-plist-missing" ]; then if [ -s "${WRKDIR}/.invalid-plist-missing" ]; then
ret=1 ret=1
while read line; do while read line; do