2019-05-20 01:08:25 +02:00
|
|
|
#!/bin/bash
|
2019-05-20 15:55:09 +02:00
|
|
|
export LC_ALL=POSIX
|
2019-05-20 02:36:19 +02:00
|
|
|
WORK_DIR=$HOME"/.gitAutoPull"
|
2019-05-20 01:08:25 +02:00
|
|
|
|
2019-05-20 15:55:09 +02:00
|
|
|
work_array="."
|
2019-05-20 02:36:19 +02:00
|
|
|
|
2019-05-20 15:55:09 +02:00
|
|
|
if [ $# -gt 0 ]; then
|
|
|
|
work_array=$@
|
2019-05-20 01:08:25 +02:00
|
|
|
fi
|
|
|
|
|
2019-05-20 15:55:09 +02:00
|
|
|
for GIT_REPO in $work_array ; do
|
2019-05-20 01:08:25 +02:00
|
|
|
|
2019-05-20 15:55:09 +02:00
|
|
|
GIT_REPO_NAME="$(echo '$GIT_REPO' | tr '/' '_' | tr -d '~')"
|
|
|
|
CHECK_TIMER_FILE=$WORK_DIR/localCommitsCheck"$GIT_REPO_NAME"
|
|
|
|
|
|
|
|
cd $GIT_REPO > /dev/null
|
|
|
|
|
|
|
|
if [ $? -ne 0 ]; then
|
|
|
|
echo $GIT_REPO" Does not exist or is not a directory"
|
|
|
|
exit -2
|
2019-05-20 01:08:25 +02:00
|
|
|
fi
|
2019-05-20 15:55:09 +02:00
|
|
|
|
|
|
|
if [ -z "$(git rev-parse --git-dir 2>/dev/null)" ]; then
|
|
|
|
echo $GIT_REPO" is not a git repository"
|
|
|
|
exit -2
|
2019-05-20 01:08:25 +02:00
|
|
|
fi
|
2019-05-20 15:55:09 +02:00
|
|
|
|
|
|
|
if [ ! -d $WORK_DIR ]; then
|
|
|
|
mkdir $WORK_DIR > /dev/null
|
2019-05-20 01:08:25 +02:00
|
|
|
fi
|
2019-05-20 15:55:09 +02:00
|
|
|
|
|
|
|
if [ ! -d $WORK_DIR ]; then
|
|
|
|
echo "Could not create work directory, aborting"
|
|
|
|
exit -4
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ -e $CHECK_TIMER_FILE ]; then
|
|
|
|
read count < $CHECK_TIMER_FILE
|
|
|
|
if [ $cout -ne 0 ]; then
|
|
|
|
echo $(( $count - 1 )) > $CHECK_TIMER_FILE
|
|
|
|
exit -1
|
|
|
|
else
|
|
|
|
rm -f $CHECK_TIMER_FILE
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
remoteStatus="$(git fetch --dry-run 2>&1 | tail -n 1 | grep -v -e'+')" # Empty if there are no commits to fetch
|
|
|
|
localStatus="$(git push -n --porcelain | grep -e'up to date')" # Empty if there are commits to push
|
|
|
|
|
2019-05-20 17:05:13 +02:00
|
|
|
output=$(
|
2019-05-20 15:55:09 +02:00
|
|
|
if [ -z "$remoteStatus" ]; then
|
|
|
|
if [ -z "$localStatus" ]; then
|
|
|
|
echo "Pushing "$GIT_REPO" updates to origin"
|
|
|
|
git push 2>&1
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
if [ -z "localStatus" ]; then
|
|
|
|
echo "Local and remote diverged, stopping auto-update for 30 iterations..."
|
|
|
|
echo 30 > $WORK_DIR/localCommitsCheck"$GIT_REPO_NAME"
|
|
|
|
else
|
|
|
|
echo "Updating "$GIT_REPO" with remote commits"
|
|
|
|
git fetch --all 2>&1
|
|
|
|
git remote update 2>&1
|
|
|
|
exit 1
|
|
|
|
fi
|
2019-05-20 17:05:13 +02:00
|
|
|
fi )
|
2019-05-20 15:55:09 +02:00
|
|
|
|
2019-05-20 17:05:13 +02:00
|
|
|
if [ ! -z "$output" ]; then
|
|
|
|
echo "$output" | wall
|
|
|
|
fi
|
|
|
|
|
2019-05-20 15:55:09 +02:00
|
|
|
done
|
2019-05-20 01:08:25 +02:00
|
|
|
|
|
|
|
exit 0
|