Script 'game-add': make regular expressions to be global.

This commit is contained in:
vonavi 2014-12-28 17:09:30 +03:00
parent 038be5ab4c
commit 526b3f2bd7

View File

@ -12,6 +12,9 @@ VERSION="0.4"
# Firefox User Agent # Firefox User Agent
FIREFOX_UA="Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0" FIREFOX_UA="Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0"
# Regular expressions
URL_RE="^(http://[^/]*)/(.{8}).*"
DATE_RE="[0-9?]{2}\.[0-9?]{2}\.[0-9?]{4}"
argv0=${0##*/} argv0=${0##*/}
@ -58,13 +61,11 @@ function game_check_args {
# Don't add and clean up games simultaneously # Don't add and clean up games simultaneously
$ADD_GAMES && $CLEANUP_GAMES && usage 1 $ADD_GAMES && $CLEANUP_GAMES && usage 1
# Check for duplicate game ID # Check for duplicate game ID
local uniq_ids=$(xargs -n1 <<< $@ | sed -E "s|^http://[^/]*/([^/]{8}).*|\1|" \ local uniq_ids=$(xargs -n1 <<< $@ | sed -E "s|${URL_RE}|\2|" | sort -u | wc -l)
| sort -u | wc -l)
(( $# == $uniq_ids )) || die "Game IDs not unique." (( $# == $uniq_ids )) || die "Game IDs not unique."
} }
function game_setup { function game_setup {
date_re="[0-9?]{2}\.[0-9?]{2}\.[0-9?]{4}"
: ${REPO_DIR:=`dirname "$0"`} : ${REPO_DIR:=`dirname "$0"`}
# Synchronize the repository # Synchronize the repository
git --git-dir=${REPO_DIR}/.git pull git --git-dir=${REPO_DIR}/.git pull
@ -90,13 +91,13 @@ function game_tmp_pgns {
for url in $@; do for url in $@; do
local timestamp= local timestamp=
[[ $url =~ ^(http://[^/]*)/([^/]*) ]] [[ $url =~ $URL_RE ]]
# Link to annotated game PGN # Link to annotated game PGN
local game_url=${BASH_REMATCH[1]}/game/export/${BASH_REMATCH[2]::8}.pgn local game_url=${BASH_REMATCH[1]}/game/export/${BASH_REMATCH[2]}.pgn
# Get the timestamp of game for sorting # Get the timestamp of game for sorting
if $SORT_GAMES; then if $SORT_GAMES; then
local game_api=${BASH_REMATCH[1]}/api/game/${BASH_REMATCH[2]::8} local game_api=${BASH_REMATCH[1]}/api/game/${BASH_REMATCH[2]}
local api_response=$(curl -q --fail --location --silent "$game_api") local api_response=$(curl -q --fail --location --silent "$game_api")
[[ -z $api_response ]] && die "Unreachable game API ${game_api}" [[ -z $api_response ]] && die "Unreachable game API ${game_api}"
timestamp=$(sed -En "s/.*\"timestamp\":([0-9]+).*/\1/p" <<< "$api_response") timestamp=$(sed -En "s/.*\"timestamp\":([0-9]+).*/\1/p" <<< "$api_response")
@ -127,7 +128,7 @@ function game_get_info {
local line1=$(grep " ${players[1]}" $tour_info) local line1=$(grep " ${players[1]}" $tour_info)
[[ -z $line0 || -z $line1 || $line0 != $line1 ]] \ [[ -z $line0 || -z $line1 || $line0 != $line1 ]] \
&& die "No game between ${players[0]} and ${players[1]} found in ${tour_info}." && die "No game between ${players[0]} and ${players[1]} found in ${tour_info}."
[[ $line0 =~ ^(${date_re}\ +([^\ ]+)\ +-\ +([^\ ]+))(.*)$ ]] [[ $line0 =~ ^(${DATE_RE}\ +([^\ ]+)\ +-\ +([^\ ]+))(.*)$ ]]
white=${BASH_REMATCH[2]} white=${BASH_REMATCH[2]}
black=${BASH_REMATCH[3]} black=${BASH_REMATCH[3]}
@ -280,7 +281,7 @@ function game_store_pgns {
function game_update_info { function game_update_info {
# The maximal length of game records, excepting results # The maximal length of game records, excepting results
local length_max=$(grep -Eo "^${date_re} +[^ ]+ +- +[^ ]+" $tour_info \ local length_max=$(grep -Eo "^${DATE_RE} +[^ ]+ +- +[^ ]+" $tour_info \
| awk '{print length}' | sort -nr | head -1) | awk '{print length}' | sort -nr | head -1)
local spaces=$(( length_max - rec_length )) sep= local spaces=$(( length_max - rec_length )) sep=
(( spaces == 0 )) || sep=$(printf "%${spaces}s" " ") (( spaces == 0 )) || sep=$(printf "%${spaces}s" " ")
@ -291,7 +292,7 @@ function game_update_info {
echo "Updating file ${tour_info}..." echo "Updating file ${tour_info}..."
local date=${game_date:8:2}.${game_date:5:2}.${game_date::4} local date=${game_date:8:2}.${game_date:5:2}.${game_date::4}
sed -E -i.orig \ sed -E -i.orig \
"s|^${date_re}( +${white} +- +${black}).*|${date}\1${sep}${result}|" \ "s|^${DATE_RE}( +${white} +- +${black}).*|${date}\1${sep}${result}|" \
$tour_info $tour_info
rm ${tour_info}.orig rm ${tour_info}.orig