| #!/bin/bash |
| |
| export LC_ALL=C |
| |
| prefix_matches() { |
| local f |
| |
| f="$1" |
| shift |
| for s in "$@"; do |
| if [ "$f" = "$s" ] || [ "${f#s/}" != "$f" ]; then |
| return 0 |
| fi |
| done |
| return 1 |
| } |
| |
| for d in "${@-.}"; do |
| ( |
| cd "$d" && |
| if [ -e .svn ]; then |
| svn status --no-ignore | |
| grep '^[I?] ' | |
| cut -c8- |
| elif git branch >&/dev/null; then |
| exec 3< <(find . -type f | cut -c3- | grep -v '^\.git/' | sort) |
| git ls-tree -r HEAD | cut -f2 -d' ' | sort | |
| while read -r f; do |
| while { read -r g; } <&3 && [ "$g" '<' "$f" ]; do echo "$g"; done |
| done |
| while { read -r g; } <&3; do echo "$g"; done |
| exec 3<&- |
| elif hg branch >&/dev/null; then |
| subrepos=$(if [ -e .hgsub ]; then sed 's/ = .*//' .hgsub; fi)"" |
| exec 3< <(find . -type f | cut -c3- | grep -Ev '^$|^\.hg/' | sort) |
| hg locate | |
| sort | |
| while read -r f; do |
| while { read -r g; } <&3 && [ "$g" '<' "$f" ]; do |
| if ! prefix_matches "$g" "$subrepos"; then |
| echo "$g" |
| fi |
| done |
| done |
| while { read -r g; } <&3; do echo "$g"; done |
| exec 3<&- |
| for s in $subrepos; do |
| $0 "$s" |
| done |
| else |
| echo "Ignored directory $PWD" |
| fi |
| ) |
| done |