Recongition of new commits for CI

This commit is contained in:
Václav Valíček (YCNet) 2018-02-25 20:00:02 +01:00
parent 4b44a745e4
commit 8aee30f8d2
No known key found for this signature in database
GPG Key ID: 7CF44871CEA75938
3 changed files with 89 additions and 6 deletions

View File

@ -0,0 +1,20 @@
#!/bin/bash
function detectorCheckCommit(){
sha=$1
history=$DET_DIR/detectorExecuted
[ -f $history ] || touch $history
if grep -q $sha $history
then
return 1
else
return 0
fi
}
function detectorSaveCommit(){
sha=$1
history=$DET_DIR/detectorExecuted
echo $sha >> $history
}

View File

@ -32,6 +32,21 @@ function detectorCheckFetchHead(){
function gitListTags(){ function gitListTags(){
local dir=$1 local dir=$1
git --no-paginate --git-dir="$dir" tag -l git --git-dir="$dir" tag -l | cat
} }
function gitListBranches(){
local dir=$1
git --git-dir="$dir" for-each-ref --format='%(refname:short)' refs/heads/
}
function gitPrefBranches(){
local dir=$1
gitListBranches $1 | grep master || true
gitListBranches $1 | grep upstream || true
gitListBranches $1 | sort | grep -vE 'master|upstream'
}

View File

@ -56,6 +56,7 @@ then
fi fi
source $mydir/detector-lib-git source $mydir/detector-lib-git
source $mydir/detector-lib-general
detectorLoadConfig detectorLoadConfig
@ -67,15 +68,61 @@ then
exit 0 exit 0
fi fi
# now, the fun begins!
# first, solve commits # first, solve commits
# branches that were deleted or merged
find $DET_BRANCHES -type f | sort | while read branchpath
do
branch=$(basename $branchpath)
if ! gitListBranches $repodir | grep -q "^$branch$"
then
echo "Unexistent branch <$branch>!!"
# rm it, should be merget etc...
rm $DET_BRANCHES/$branch
fi
done
# new branches or new commits in curent branches
# firstly list master branch, to make first commits in it
gitPrefBranches $repodir | while read branch
do
[ -f $DET_BRANCHES/$branch ] || touch $DET_BRANCHES/$branch
oldsha=$(cat $DET_BRANCHES/$branch)
newsha=$(git --git-dir $repodir show-ref --heads $branch | cut -d' ' -f1)
[ -z "$oldsha" ] || oldsha=$oldsha..
# walk through every commit in branch (since last change)
for commitId in $(git --no-pager --git-dir $repodir log --reverse --format="%H" $oldsha$branch)
do
if detectorCheckCommit $commitId
then
# commit was not processed - start
# COMMIT = $commitId
# COMMIT_AUTHOR = $author
author=$(git --git-dir $repodir log $commitId -1 --format="%an <%ae>")
# BRANCH = $branch
# PORJECT_NAME = $cloner_project_name
set +e
env COMMIT="$commitId" \
COMMIT_AUTHOR="$author" \
COMMIT_BRANCH="$branch" \
PROJECT_NAME="$cloner_project_name" \
notify-commit
rc=$?
[ $rc -eq 0 ] || echo "Notify $branch/$commitId: return code = $rc"
set -e
detectorSaveCommit $commitId
fi
done
echo $newsha > $DET_BRANCHES/$branch
done
# solve tags - remove nonexistent refs # solve tags - remove nonexistent refs
find $DET_TAGS -type f | sort | while read tagname find $DET_TAGS -type f | sort | while read tagname
do do
tag=$(basename $tagname) tag=$(basename $tagname)
if ! git --git-dir $repodir tag -l | grep -q "^$tag$" if ! gitListTags $repodir | grep -q "^$tag$"
then then
echo "Removing tag: $tag (was [$(cat $tagname)])" echo "Removing tag: $tag (was [$(cat $tagname)])"
rm $tagname rm $tagname
@ -83,11 +130,11 @@ do
done done
# tags that changed or were pushed as new # tags that changed or were pushed as new
git --git-dir $repodir tag -l | while read tagname gitListTags $repodir | while read tagname
do do
[ -f $DET_TAGS/$tagname ] || touch $DET_TAGS/$tagname [ -f $DET_TAGS/$tagname ] || touch $DET_TAGS/$tagname
oldsha=$(cat $DET_TAGS/$tagname) oldsha=$(cat $DET_TAGS/$tagname)
newsha=$(git --git-dir $repodir show-ref $tagname | cut -d' ' -f1) newsha=$(git --git-dir $repodir show-ref --tags $tagname | cut -d' ' -f1)
if ! [ "$oldsha" = "$newsha" ] if ! [ "$oldsha" = "$newsha" ]
then then
# TAG_HASH = $newsha # TAG_HASH = $newsha
@ -107,6 +154,7 @@ do
[ $rc -eq 0 ] || echo "Notify $tagname: return code = $rc" [ $rc -eq 0 ] || echo "Notify $tagname: return code = $rc"
set -e set -e
fi fi
echo $newsha > $DET_TAGS/$tagname
done done
# save hash to keep things clear # save hash to keep things clear