101 lines
1.7 KiB
Bash
Executable file
101 lines
1.7 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
word=$(git status -s | sed 's/.* //')
|
|
red="\033[38;5;1m"
|
|
gre="\033[38;5;2m"
|
|
cya="\033[38;5;6m"
|
|
res="\033[0m"
|
|
|
|
elem_in_array ()
|
|
{
|
|
for cur in $2
|
|
do
|
|
if [ "$1" = "$cur" ]
|
|
then
|
|
echo "1"
|
|
return 1
|
|
fi
|
|
done
|
|
echo "0"
|
|
return 0
|
|
}
|
|
|
|
array_in_array ()
|
|
{
|
|
for cur in $1
|
|
do
|
|
match=$(elem_in_array "$cur" "$2")
|
|
if [ "$match" -ne 1 ]
|
|
then
|
|
echo "0"
|
|
return 0
|
|
fi
|
|
done
|
|
echo "1"
|
|
return 1
|
|
}
|
|
|
|
confirm ()
|
|
{
|
|
# call with a prompt string or use a default
|
|
echo "$cya${1:-Are you sure? [y/N]}$res"
|
|
read -r -p " " response
|
|
case "$response" in
|
|
[yY][eE][sS]|[yY])
|
|
true
|
|
;;
|
|
*)
|
|
false
|
|
;;
|
|
esac
|
|
}
|
|
|
|
do_checkout ()
|
|
{
|
|
i_tmp=$(echo $i | sed 's/\//_/g')
|
|
cp $i "$HOME/Documents/.$i_tmp.back"
|
|
git checkout $i
|
|
echo "$gre D - O - N - E $res"
|
|
echo "$cya $i was checked out. A copy still exist in $HOME/Documents/.$i_tmp.back$res\n"
|
|
}
|
|
|
|
for i in $word
|
|
do
|
|
if [ -e $i ]
|
|
then
|
|
if [ -f $i ]
|
|
then
|
|
diff=$(git diff -U0 --exit-code --color $i)
|
|
if [ "$?" -eq 1 ]
|
|
then
|
|
nb_lines=$(echo "$diff" | wc -l)
|
|
if [ "$nb_lines" -eq 7 ]
|
|
then
|
|
match=$(array_in_array "-9 +9 Updated: by ### ########.fr" "$diff")
|
|
if [ $match -eq 1 ]
|
|
then
|
|
echo "\n$cya CHANGES on $i :$res"
|
|
echo "$diff"
|
|
confirm
|
|
if [ $? -eq 0 ]
|
|
then
|
|
do_checkout
|
|
else
|
|
echo "$cya Nothing done for $i$res\n"
|
|
fi
|
|
else
|
|
echo "$gre$i is not concerned (diff on the good lines)$res"
|
|
fi
|
|
else
|
|
echo "$gre$i is not concerned (diff is too big)$res"
|
|
fi
|
|
else
|
|
echo "$gre$i is not concerned (diff is null)$res"
|
|
fi
|
|
else
|
|
echo "$red$i is not a regular file$res"
|
|
fi
|
|
else
|
|
echo "$red$i doesn't exist$res"
|
|
fi
|
|
done
|