#!/bin/bash list_source_files() { local r r="$1" while [ "$r" != "/" -a ! -e "$r/.svn" -a ! -e "$r/.git" -a ! -e "$r/.hg" ]; do r="$(dirname "$r")" done if [ -e "$r/.svn" ]; then ( cd "$1" svn status -v | \ grep -vE '^[D?]|^Performing|^$' | \ cut -c41- | \ while read f; do if [ -f "$f" ]; then echo "$f" fi done ) elif [ -e "$r/.git" ]; then git_dir="$PWD" while [ "$git_dir" != "" -a ! -e "$git_dir/.git" ]; do git_dir="$(dirname "$git_dir")" done subdir="${PWD#${git_dir}}" if [ "$git_dir" != "" ]; then git ls-tree --name-only -r HEAD | sed "s|^$subdir/||" else echo "Ignored directory $PWD" >&2 fi elif [ -e "$r/.hg" ]; then hg manifest else echo "Not under source control: $PWD ?" >&2 fi } if [ $# = 0 ]; then list_source_files "$PWD" else for d in "$@"; do list_source_files "$d"; done fi