repl.sh
download
#!/bin/sh
# DESCR: Refactoring tool, handles CVS
# AUTHOR: Darek Cieslak, cieslakd at gazeta.pl
# USE: repl abd def | sh
#
# In ./.replfilter you can include sed commands to
# delete unwanted filenames. Example:
#
# /images\//d
#
# will ignore all files from images directory
TMP_FILE=$$
REPLFILTER=.replfilter
test -z "$1" -o -z "$2" && {
echo give from, to strings
exit 1;
}
sFrom="$1"
sTo="$2"
if ! test -f $REPLFILTER
then
touch $REPLFILTER
fi
test -d CVS && isCVS=1
test -d .git && isGIT=1
FILES=find . -type f | sed -f $REPLFILTER`
fgrep --count "$sFrom" --recursive $FILES |
awk -v "sFrom=$sFrom" -v "sTo=$sTo" -v "sTmpFile=$TMP_FILE" '
BEGIN {
FS=":"
}
!/CVS/{
sFile = $1
sCount = $2
if(sCount == 0)
next
print "mv " s File " " sTmpFile
print "sed \"s|" sFrom "|" sTo "|g\" <" s Tmp File " >" sFile
print "rm " sTmpFile
}
find . -name "*$sFrom*" |
sed -f $REPLFILTER |
awk -v "sFrom=$sFrom" -v "sTo=$sTo" -v "isCVS=$isCVS" \
-v "isGIT=$isGIT" '
{
sFile = $0
sNewFile = $0
gsub(sFrom, sTo, sNewFile);
print "test -e " s New File " || mv " s File " " sNewFile
if(isCVS) {
print "cvs remove " sFile
print "cvs add " sNewFile
}
if(isGIT) {
print "git-rm -f " sFile
print "git-add " sNewFile
}
}
'
(...)
Nie ma bowiem łatwych odpowiedzi.
Nie istnieje nic takiego jak najlepsze
rozwiązanie - zarówno jeśli chodzi o
narzędzia,
jak i języki czy systemy operacyjne. Są
jedynie systemy, które mogą być bardziej
odpowiednie w konkretnych okolicznościach.
I tu właśnie do gry wchodzi pragmatyzm.
Nie należy przywiązywać się do żadnej
określonej metody, ale mieć na tyle rozległą
wiedzę i doświadczenie, by w danej sytuacji
wybrać dobre rozwiązanie.
(...)
Andrew Hunt, David Thomas
"Pragmatyczny Programista"