2018-02-08 15:09:47 +01:00
|
|
|
#!/bin/bash
|
|
|
|
set -euo pipefail
|
|
|
|
IFS=$'\n\t'
|
|
|
|
|
|
|
|
# source libs
|
|
|
|
mydir=$(dirname $(realpath $0))
|
|
|
|
source $mydir/cloner-lib-general
|
|
|
|
source $mydir/cloner-lib-auth
|
|
|
|
source $mydir/cloner-lib-cfg
|
2018-02-22 22:09:11 +01:00
|
|
|
source $mydir/detector-lib-cfg
|
2018-02-08 15:09:47 +01:00
|
|
|
|
|
|
|
|
|
|
|
# interval - in minutes
|
|
|
|
interval=${cloner_interval:-0}
|
|
|
|
stampfile=$CCLONE_CACHE/last-check-time
|
|
|
|
|
|
|
|
# does it exist - if not, sync
|
|
|
|
[ -d $CCLONE_CACHE ] || mkdir $CCLONE_CACHE
|
|
|
|
[ -f $stampfile ] || echo 0 > $stampfile
|
|
|
|
|
|
|
|
|
|
|
|
now=$(date +"%s")
|
|
|
|
last=$(cat $stampfile)
|
|
|
|
diff=$(($now - $last))
|
|
|
|
mindiff=$(($interval * 60))
|
|
|
|
unset now last
|
|
|
|
|
|
|
|
if [ $diff -lt $mindiff ]
|
|
|
|
then
|
|
|
|
echo "Limit not reached - not syncing now"
|
|
|
|
exit 0
|
|
|
|
fi
|
|
|
|
|
|
|
|
# check and clone repo
|
|
|
|
submodules=${cloner_submodules:-0}
|
|
|
|
depth=${cloner_submodule_depth:-}
|
|
|
|
|
2018-02-23 10:17:37 +01:00
|
|
|
export HOME=$CCLONE_CACHE
|
|
|
|
|
2018-02-08 15:09:47 +01:00
|
|
|
prepareGitAuth $CONFIG_DIR
|
|
|
|
|
|
|
|
# without submodule support
|
|
|
|
if [ ! "x$submodules" = "x1" ]
|
|
|
|
then
|
|
|
|
mirror-main-repo $repo
|
|
|
|
else
|
|
|
|
mirror-recursive $repo $depth
|
|
|
|
fi
|
|
|
|
|
|
|
|
date +"%s" > $stampfile
|
|
|
|
|
2018-02-22 22:09:11 +01:00
|
|
|
# if detector is not enabled, quit quietly
|
|
|
|
if ! detectorRunCapable
|
|
|
|
then
|
|
|
|
exit 0
|
|
|
|
fi
|
|
|
|
|
|
|
|
source $mydir/detector-lib-git
|
|
|
|
|
|
|
|
detectorLoadConfig
|
|
|
|
|
|
|
|
repodir=$(gen-mirror-path $repo)
|
|
|
|
|
|
|
|
if detectorCheckFetchHead $repodir
|
|
|
|
then
|
|
|
|
# nothing changed, just die
|
|
|
|
exit 0
|
|
|
|
fi
|
|
|
|
|
|
|
|
# now, the fun begins!
|
|
|
|
|
|
|
|
# first, solve commits
|
|
|
|
|
|
|
|
# solve tags - remove nonexistent refs
|
|
|
|
find $DET_TAGS -type f | sort | while read tagname
|
|
|
|
do
|
|
|
|
tag=$(basename $tagname)
|
|
|
|
if ! git --git-dir $repodir tag -l | grep -q "^$tag$"
|
|
|
|
then
|
|
|
|
echo "Removing tag: $tag (was [$(cat $tagname)])"
|
|
|
|
rm $tagname
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
# tags that changed or was pushed as new
|
|
|
|
git --git-dir $repodir tag -l | while read tagname
|
|
|
|
do
|
|
|
|
[ -f $DET_TAGS/$tagname ] || touch $DET_TAGS/$tagname
|
|
|
|
oldsha=$(cat $DET_TAGS/$tagname)
|
|
|
|
newsha=$(git --git-dir $repodir show-ref $tagname | cut -d' ' -f1)
|
|
|
|
if ! [ "$oldsha" = "$newsha" ]
|
|
|
|
then
|
|
|
|
# TAG_HASH = $newsha
|
|
|
|
# TAG_AUTHOR
|
|
|
|
git --git-dir $repodir log $newsha -1 --pretty=format:"%an"
|
|
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# save hash to keep things clear
|
|
|
|
#detectorSumPersist $repodir
|
2018-02-08 15:09:47 +01:00
|
|
|
|