From e81c57a53de2f384b52b53ece704ce0fefa25c3c Mon Sep 17 00:00:00 2001 From: Bryan Drewery Date: Mon, 21 Apr 2014 16:22:20 +0000 Subject: [PATCH] - Sort directories by Lexicographical Depth-First order (find -ds) With hat: portmgr --- Mk/Scripts/check-stagedir.sh | 34 +++++++++++++++++++++++++++------- 1 file changed, 27 insertions(+), 7 deletions(-) diff --git a/Mk/Scripts/check-stagedir.sh b/Mk/Scripts/check-stagedir.sh index 0f7af97956c4..dfab7de31c67 100644 --- a/Mk/Scripts/check-stagedir.sh +++ b/Mk/Scripts/check-stagedir.sh @@ -23,6 +23,12 @@ listmtree() { # mtreefile prefix } | 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 makeplist=0 case "$1" in @@ -234,10 +240,14 @@ comm -13 ${WRKDIR}/.plist-files ${WRKDIR}/.staged-files | \ ### HANDLE DIRS cat ${WRKDIR}/.plist-dirs-unsorted ${WRKDIR}/.mtree \ ${WRKDIR}/.run-depends-dirs | sort -u >${WRKDIR}/.traced-dirs -find ${STAGEDIR} -type d | sed -e "s,^${STAGEDIR},,;/^$/d" | \ - sort >${WRKDIR}/.staged-dirs -comm -13 ${WRKDIR}/.traced-dirs ${WRKDIR}/.staged-dirs \ - | sort -r | sed "${sed_dirs}" \ +find -sd ${STAGEDIR} -type d | sed -e "s,^${STAGEDIR},,;/^$/d" \ + >${WRKDIR}/.staged-dirs-dfs +sort ${WRKDIR}/.staged-dirs-dfs >${WRKDIR}/.staged-dirs-sorted +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 || : # 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}/.invalid-plist-dependencies 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 || : if [ -s "${WRKDIR}/.invalid-plist-dependencies" ]; then ret=1 @@ -285,9 +295,19 @@ comm -23 ${WRKDIR}/.plist-files-no-comments ${WRKDIR}/.staged-files | \ sed -e "${sed_files}" \ >>${WRKDIR}/.invalid-plist-missing || : -comm -23 ${WRKDIR}/.plist-dirs-sorted-no-comments ${WRKDIR}/.staged-dirs \ - | sort -r | sed "${sed_dirs}" \ +# Look for directories, then sort them by DFS. Must create the 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 || : +rm -rf ${WRKDIR}/.missing-dirs if [ -s "${WRKDIR}/.invalid-plist-missing" ]; then ret=1 while read line; do