From 427adb7a8acd67a5d3fccca5692295e23a9bd64a Mon Sep 17 00:00:00 2001 From: Qiming Teng Date: Thu, 5 Nov 2020 10:40:40 +0800 Subject: [PATCH] Fix logic in lsync script The logic in the previous fix for supporting directory comparison was incorrect. It was using the last commit in the target directory for history checking. However, some files in the target directory might be out of sync long before the last commit to the directory. This PR changes the script to do a history checking on a per-file basis. --- scripts/lsync.sh | 35 +++++++++++++++++++++++++++-------- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/scripts/lsync.sh b/scripts/lsync.sh index 9b4bfe1bb9..934e3b91ef 100755 --- a/scripts/lsync.sh +++ b/scripts/lsync.sh @@ -15,17 +15,36 @@ fi if [ ! -e "$1" ] ; then echo "Path not found: '$1'" >&2 exit 2 -elif [ -d "$1" ] ; then - IS_DIR=1 - EXTRA_FLAGS="--stat" -else - IS_DIR=0 fi + +if [ -d "$1" ] ; then + SYNCED=1 + for f in `find $1 -name "*.md"` ; do + EN_VERSION=`echo $f | sed "s/content\/..\//content\/en\//g"` + if [ ! -e $EN_VERSION ]; then + echo -e "**removed**\t$EN_VERSION" + SYNCED=0 + continue + fi + + LASTCOMMIT=`git log -n 1 --pretty=format:%h -- $f` + git diff --exit-code --numstat $LASTCOMMIT...HEAD $EN_VERSION + if [ $? -ne 0 ] ; then + SYNCED=0 + fi + done + if [ $SYNCED -eq 1 ]; then + echo "$1 is still in sync" + exit 0 + fi + exit 1 +fi + LOCALIZED="$1" # Try get the English version EN_VERSION=`echo $LOCALIZED | sed "s/content\/..\//content\/en\//g"` -if [ $IS_DIR -eq 1 -a ! -e $EN_VERSION ]; then +if [ ! -e $EN_VERSION ]; then echo "$EN_VERSION has been removed." exit 3 fi @@ -33,9 +52,9 @@ fi # Last commit for the localized path LASTCOMMIT=`git log -n 1 --pretty=format:%h -- $LOCALIZED` -git diff --exit-code $EXTRA_FLAGS $LASTCOMMIT...HEAD $EN_VERSION +git diff --exit-code $LASTCOMMIT...HEAD $EN_VERSION if [ "$?" -eq 0 ]; then echo "$LOCALIZED is still in sync" - exit 3 + exit 0 fi