From 397511514a19eff86db3ff9543d20258788b2abc Mon Sep 17 00:00:00 2001 From: Bart Van Assche Date: Mon, 22 Jan 2018 03:44:33 +0000 Subject: [PATCH 1/2] scripts/list-source-files: Improve robustness of this script git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@7343 d57e44dd-8a1f-0410-8b47-8ef2f437770f --- scripts/list-source-files | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/scripts/list-source-files b/scripts/list-source-files index 21320d197..f1f3e2684 100755 --- a/scripts/list-source-files +++ b/scripts/list-source-files @@ -1,29 +1,25 @@ #!/bin/bash -inode() { - ls -id "$1" | { read a b; echo "$a"; } -} - list_source_files() { local d r d="$(cd "$1" && echo "$PWD")" r="$d" - inode_root="$(inode /)" - while [ $(inode "$r") != "${inode_root}" -a \ - ! -e "$r/.svn" -a ! -e "$r/.git" -a ! -e "$r/.hg" ]; do - r="$r/.." + while [ "$r" != "/" ] && [ ! -e "$r/.svn" ] && [ ! -e "$r/.git" ] && + [ ! -e "$r/.hg" ]; do + r="$(dirname "$r")" done if [ -e "$r/.svn" ]; then ( - cd "$d" + cd "$d" || exit $? svn status -v | \ grep -vE '^[D?]|^Performing|^$' | \ - cut -c41- | \ - while read f; do + cut -c3- | \ + while read -r a b c f; do if [ -f "$f" ]; then - echo "$f" + echo "$a $b $c" >/dev/null + echo "$f" fi done ) From f41c5712d83ae1dacbec5f29bf2a0f96b613c009 Mon Sep 17 00:00:00 2001 From: Bart Van Assche Date: Mon, 22 Jan 2018 03:45:18 +0000 Subject: [PATCH 2/2] scripts/clean-source-tree: Add to repository git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@7344 d57e44dd-8a1f-0410-8b47-8ef2f437770f --- scripts/clean-source-tree | 54 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100755 scripts/clean-source-tree diff --git a/scripts/clean-source-tree b/scripts/clean-source-tree new file mode 100755 index 000000000..53018901b --- /dev/null +++ b/scripts/clean-source-tree @@ -0,0 +1,54 @@ +#!/usr/bin/env bash + +shopt -s nullglob + +remove_empty_directories() { + find . -depth -type d | + sed 's|^\./||' | + grep -Ev '^\.$|^\.svn/|/\.svn/|/\.svn$|^\.hg/|^\.hg$|^\.git/|^\.git$' | + while read -r d; do + for f in "$d"/{*,.*}; do + if ! [ -e "$f" ]; then + rmdir "$d" + fi + break + done + done +} + +if [ $# = 0 ]; then + # shellcheck source=clean-source-tree + . "$0" . +else + for d in "$@"; do + ( + if cd "$d"; then + if [ -e .svn ]; then + if ! type -p svn >&/dev/null; then + echo "$0: svn: not found." + exit 0 + fi + "$(dirname "$0")"/list-non-source-files | + while read -r f; do + if [ "$f" != "TAGS" ]; then rm -rf -- "$f"; fi; + done + elif [ -e .git ] || [ -e ../.git ]; then + if ! type -p git >&/dev/null; then + echo "$0: git: not found." + exit 0 + fi + git clean -f -d -x -e TAGS >/dev/null + remove_empty_directories + elif [ -e .hg ] || [ -e ../.hg ]; then + if ! type -p hg >&/dev/null; then + echo "$0: hg: not found." + exit 0 + fi + hg purge --all + else + echo "$0: $d: not administered by Subversion, Git or Mercurial." + fi + fi + ) + done +fi