2011-02-20 14:15:22 +00:00
|
|
|
#!/bin/sh
|
|
|
|
|
|
2014-04-29 17:14:30 +00:00
|
|
|
export LANG=POSIX
|
|
|
|
|
|
2012-01-30 14:59:21 +00:00
|
|
|
filter_deleted()
|
|
|
|
|
{
|
|
|
|
|
local rc_file="$1"
|
|
|
|
|
shift
|
|
|
|
|
local cand
|
|
|
|
|
for cand in "$@"; do
|
|
|
|
|
grep -q "^R ./$cand/" $rc_file && continue
|
|
|
|
|
echo $cand
|
|
|
|
|
done
|
|
|
|
|
}
|
|
|
|
|
|
2017-05-07 20:33:41 +00:00
|
|
|
output()
|
|
|
|
|
{
|
|
|
|
|
if [ "$zero_terminate" = 1 ]; then
|
|
|
|
|
echo -en "$*\x00"
|
|
|
|
|
else
|
|
|
|
|
echo "$*"
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
2012-01-31 18:42:51 +00:00
|
|
|
list_dirents_cvs()
|
2011-02-20 14:15:22 +00:00
|
|
|
{
|
|
|
|
|
local dirs=`sed '/^D\// !d; s%^D/%%; s%/.*%%' $1/CVS/Entries`
|
2012-01-30 14:59:21 +00:00
|
|
|
dirs="`filter_deleted $1/CVS/Entries $dirs`"
|
|
|
|
|
local cands
|
2011-02-20 14:15:22 +00:00
|
|
|
if [ -f $1/CVS/Entries.Log ]; then
|
2012-01-30 14:59:21 +00:00
|
|
|
cands="`sed '/^A D\// !d; s%^A D/%%; s%/.*%%' $1/CVS/Entries.Log`"
|
|
|
|
|
dirs="$dirs `filter_deleted $1/CVS/Entries.Log $cands`"
|
2011-02-20 14:15:22 +00:00
|
|
|
fi
|
|
|
|
|
local files=`sed '/^\// !d; s%/%%; s%/.*%%; s%^%%' $1/CVS/Entries`
|
2012-01-30 14:59:21 +00:00
|
|
|
files="`filter_deleted $1/CVS/Entries $files`"
|
2011-02-20 14:15:22 +00:00
|
|
|
local d f
|
|
|
|
|
for f in $files; do
|
2017-05-07 20:33:41 +00:00
|
|
|
output "$1/$f"
|
2011-02-20 14:15:22 +00:00
|
|
|
done
|
|
|
|
|
for d in $dirs; do
|
2017-05-07 20:33:41 +00:00
|
|
|
[ "$opt_only_regular_files" = 1 ] || output $1/$d
|
2012-01-31 18:42:51 +00:00
|
|
|
list_dirents_cvs $1/$d
|
2011-02-20 14:15:22 +00:00
|
|
|
done
|
|
|
|
|
}
|
|
|
|
|
|
2012-01-31 18:42:51 +00:00
|
|
|
list_dirents_git()
|
|
|
|
|
{
|
2017-05-07 20:33:41 +00:00
|
|
|
git ls-files $git_ls_files_opts $1
|
2017-05-08 10:26:19 +00:00
|
|
|
[ "$opt_no_submodules" = 1 ] || git submodule foreach "git ls-files $git_ls_files_opts | sed \"s|^|\$path/|\""
|
2012-01-31 18:42:51 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
list_dirents()
|
|
|
|
|
{
|
|
|
|
|
if [ -d $1/CVS ]; then
|
|
|
|
|
list_dirents_cvs $1
|
2016-04-30 16:22:30 +00:00
|
|
|
return
|
|
|
|
|
fi
|
|
|
|
|
git status >/dev/null 2>&1 || {
|
2012-01-31 18:42:51 +00:00
|
|
|
echo "failed to list versioned files in $1: no VCS" >&2
|
|
|
|
|
exit 1
|
2016-04-30 16:22:30 +00:00
|
|
|
}
|
|
|
|
|
list_dirents_git $1
|
2012-01-31 18:42:51 +00:00
|
|
|
}
|
|
|
|
|
|
2017-06-02 09:06:24 +00:00
|
|
|
set -- `getopt fnzt "$@"`
|
2012-01-30 14:59:21 +00:00
|
|
|
|
|
|
|
|
while [ "$1" != -- ]; do
|
|
|
|
|
case $1 in
|
|
|
|
|
-f)
|
|
|
|
|
opt_only_regular_files=1
|
|
|
|
|
;;
|
2017-05-07 19:08:43 +00:00
|
|
|
-n)
|
|
|
|
|
opt_no_submodules=1
|
|
|
|
|
;;
|
2017-05-07 20:33:41 +00:00
|
|
|
-z)
|
|
|
|
|
zero_terminate=1
|
|
|
|
|
git_ls_files_opts="$git_ls_files_opts -z"
|
|
|
|
|
opt_sort="$opt_sort -z"
|
|
|
|
|
;;
|
2017-06-02 09:06:24 +00:00
|
|
|
-t)
|
|
|
|
|
text_files=1
|
|
|
|
|
;;
|
2012-01-30 14:59:21 +00:00
|
|
|
esac
|
|
|
|
|
shift
|
|
|
|
|
done
|
|
|
|
|
shift
|
|
|
|
|
|
2017-05-07 19:08:43 +00:00
|
|
|
proj_dir="$1"
|
|
|
|
|
[ "$proj_dir" ] && cd $proj_dir
|
|
|
|
|
|
2017-06-02 09:06:24 +00:00
|
|
|
if [ "$text_files" ]; then
|
|
|
|
|
list_dirents . | sort $opt_sort | xargs file -N | grep ":.*text" | cut -d: -f1
|
|
|
|
|
else
|
|
|
|
|
list_dirents . | sort $opt_sort
|
|
|
|
|
fi
|
2017-05-07 19:08:43 +00:00
|
|
|
|