2009-03-11 08:36:57 +00:00
|
|
|
#!/bin/bash
|
|
|
|
#
|
|
|
|
# A simple script help to maintain AutoProxy gfwList easily.
|
|
|
|
#
|
|
|
|
# Function:
|
|
|
|
# Update local svn repository;
|
|
|
|
# Commit decoded changes(by others in your team) to local git repository
|
|
|
|
# with decoded message and authors name;
|
|
|
|
# Update "Last Modified" time;
|
|
|
|
# Update "Checksum";
|
|
|
|
# Commit your changes to local git repository;
|
2009-03-15 01:00:35 +00:00
|
|
|
# Commit your encoded changes to remote svn server with encoded log.
|
2009-03-11 08:36:57 +00:00
|
|
|
# Usage:
|
|
|
|
# Initialize:
|
|
|
|
# $svn checkout https://autoproxy-gfwlist.googlecode.com/svn/trunk/ gfwList --username your-google-user-name
|
|
|
|
# $cd gfwList
|
|
|
|
# $git init
|
2009-03-11 10:16:28 +00:00
|
|
|
# $base64 -d gfwlist.txt > list.txt
|
2009-03-11 08:36:57 +00:00
|
|
|
# $git add list.txt
|
|
|
|
# $git commit -a -m "init"
|
|
|
|
# Normal Usage:
|
|
|
|
# edit list.txt as usual;
|
2009-03-11 08:49:49 +00:00
|
|
|
# $./sendGFWList.sh "say something about this edit"
|
2009-03-11 08:36:57 +00:00
|
|
|
# Note:
|
2010-04-01 07:46:50 +00:00
|
|
|
# 1: You can use "$git log" "$git show" "$git diff"...;
|
2009-08-11 08:32:46 +00:00
|
|
|
# 2: Do NOT commit "list.txt" to svn server (it won't by default);
|
|
|
|
# 3: Do NOT use any unicode character in the list, there is a known bug;
|
|
|
|
# 4: Do NOT "svn update", run this script to update / commit at any time.
|
2009-08-11 08:42:19 +00:00
|
|
|
################################################################################
|
2009-03-11 08:36:57 +00:00
|
|
|
|
|
|
|
# dependence
|
2010-04-18 07:14:09 +00:00
|
|
|
for cmd in sed date base64 gawk svn git perl file
|
2009-03-11 08:36:57 +00:00
|
|
|
do
|
2009-03-11 09:10:07 +00:00
|
|
|
which $cmd &> /dev/null;
|
|
|
|
if [ $? -ne 0 ]; then
|
2010-04-18 07:14:09 +00:00
|
|
|
echo "Error: depends on $cmd, please install it first.";
|
2009-03-11 09:10:07 +00:00
|
|
|
exit 1;
|
|
|
|
fi
|
2009-03-11 08:36:57 +00:00
|
|
|
done
|
|
|
|
|
|
|
|
# get formated author and log information
|
2010-04-18 07:14:09 +00:00
|
|
|
log=$(svn log -r BASE:HEAD) || exit 1;
|
2009-03-11 08:36:57 +00:00
|
|
|
log=$(echo $log | gawk -v RS='------------------------------------------------------------------------'\
|
2009-03-13 04:26:51 +00:00
|
|
|
'NR > 2 { if (NF > 10) printf "%s:%s;", $3, $NF; }' ) &&
|
2009-03-11 08:36:57 +00:00
|
|
|
|
|
|
|
# convert from base64
|
|
|
|
i=0 &&
|
|
|
|
convertedLog="" &&
|
|
|
|
while [ "$log" != "" ]
|
|
|
|
do
|
|
|
|
if (( $i%2 == 0 )); then # author
|
|
|
|
temp=${log%%:*};
|
2009-03-11 16:13:48 +00:00
|
|
|
convertedLog+=${temp%@*}; # don't include "@gmail.com"
|
2009-10-03 16:16:11 +00:00
|
|
|
convertedLog+=": ";
|
2009-03-11 08:45:34 +00:00
|
|
|
# discard used string
|
2009-03-11 08:36:57 +00:00
|
|
|
log=${log#*:};
|
|
|
|
else # log, decode it
|
2010-04-18 07:14:09 +00:00
|
|
|
temp=$( echo ${log%%;*} | base64 -d );
|
2009-03-11 08:36:57 +00:00
|
|
|
convertedLog+=$temp;
|
2009-10-03 16:16:11 +00:00
|
|
|
convertedLog+="\n";
|
2009-03-11 08:36:57 +00:00
|
|
|
log=${log#*;};
|
|
|
|
fi
|
|
|
|
((i++));
|
|
|
|
done
|
|
|
|
|
2010-04-18 07:14:09 +00:00
|
|
|
# modified by others, commit to local git repository
|
2009-03-11 08:36:57 +00:00
|
|
|
if [ "$convertedLog" != "" ]; then
|
2010-04-18 07:14:09 +00:00
|
|
|
git diff > temp.patch &&
|
2009-03-15 01:00:35 +00:00
|
|
|
|
2010-04-18 07:14:09 +00:00
|
|
|
svn update || exit 1;
|
2009-03-15 01:00:35 +00:00
|
|
|
|
2010-04-18 07:14:09 +00:00
|
|
|
base64 -d gfwlist.txt > list.txt && ./validateChecksum.pl list.txt;
|
|
|
|
if [ $? -ne 0 ]; then
|
|
|
|
echo "Error: gfwlist.txt from svn is invalid!";
|
|
|
|
echo "It must be a download error or somebody made a mistake.";
|
|
|
|
echo "Please check with the last committer or report to maintainers group.";
|
|
|
|
exit 1;
|
|
|
|
fi
|
|
|
|
|
|
|
|
echo -e $convertedLog | git commit -a -F - &&
|
2009-03-11 08:36:57 +00:00
|
|
|
|
2009-10-03 16:16:11 +00:00
|
|
|
[ -s temp.patch ] && git apply temp.patch &&
|
2010-04-18 07:14:09 +00:00
|
|
|
rm temp.patch &&
|
|
|
|
|
|
|
|
# remove (if exist) empty temp.patch
|
|
|
|
[ ! -s temp.patch -a -e temp.patch ] && rm temp.patch;
|
2009-03-15 01:00:35 +00:00
|
|
|
fi
|
|
|
|
|
|
|
|
if [ "$(git diff)" == "" ]; then
|
2010-04-18 07:14:09 +00:00
|
|
|
echo "Info: list.txt not modified.";
|
2009-03-15 01:00:35 +00:00
|
|
|
exit 0;
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ "$*" == "" ]; then
|
2010-04-18 07:14:09 +00:00
|
|
|
echo "Error: empty log, please say something about this modification.";
|
2009-03-15 01:00:35 +00:00
|
|
|
exit 1;
|
2009-03-11 08:36:57 +00:00
|
|
|
fi
|
|
|
|
|
2010-04-18 07:14:09 +00:00
|
|
|
if [ "$(file list.txt)" != "list.txt: ASCII text" ]; then
|
|
|
|
echo "Error: list.txt, please make sure:";
|
|
|
|
echo "1. there is no non-ASCII characters;";
|
|
|
|
echo "2. configure your text editor to use unix style line break.";
|
2010-03-26 03:07:38 +00:00
|
|
|
exit 1;
|
2010-04-18 07:14:09 +00:00
|
|
|
fi
|
2010-03-25 17:25:44 +00:00
|
|
|
|
2009-03-11 08:36:57 +00:00
|
|
|
# update date and checksum
|
2010-04-18 07:14:09 +00:00
|
|
|
sed -i s/"Last Modified:.*$"/"Last Modified: $(date -Rr list.txt)"/ list.txt &&
|
2009-03-11 08:36:57 +00:00
|
|
|
./addChecksum.pl list.txt &&
|
|
|
|
|
2010-04-18 07:14:09 +00:00
|
|
|
# save local changes to git & svn
|
|
|
|
# if conflict or network problem occurs: do nothing & throw error message
|
2009-03-11 08:36:57 +00:00
|
|
|
git commit -a -m "$*" &&
|
2009-03-15 01:00:35 +00:00
|
|
|
(
|
2010-04-18 07:14:09 +00:00
|
|
|
base64 list.txt > gfwlist.txt &&
|
|
|
|
|
|
|
|
# may be running under Windows + Cygwin?
|
|
|
|
# convert dos new line to unix style, old mac style ignored
|
|
|
|
sed -i 's/\r$//g' gfwlist.txt &&
|
|
|
|
|
|
|
|
# may be failed because of connection/authentication problems
|
2009-03-15 01:00:35 +00:00
|
|
|
svn ci gfwlist.txt -m $( echo "$*" | base64 -w 0) ||
|
2010-04-18 07:14:09 +00:00
|
|
|
|
|
|
|
# "svn ci" and "git commit" are atomic operations
|
2009-03-15 03:00:18 +00:00
|
|
|
git reset HEAD^ 1> /dev/null;
|
|
|
|
) &&
|
|
|
|
|
2010-04-18 07:14:09 +00:00
|
|
|
# BASE++ if committed
|
2009-03-15 03:00:18 +00:00
|
|
|
svn update 1> /dev/null;
|