blob: 4cce7d1b8d472908f3c7cb74b0e6a326c1355432 [file] [log] [blame]
#!/bin/bash
#
#
# example usage - you must have your repos checked out on the branch you
# expect to tag.
#
# USAGE: repoRoot buildTag relengRoot repoURL [repoURL]*
# repoRoot - absolute path to a folder containing cloned git repositories
# buildTag - build tag to tag all repositories
# relengRoot - asolute path to releng project containing map files
# repoURL - git repository urls to tag, must match entries in the map files
# EXAMPLE: git-map.sh \
# /opt/pwebster/git/eclipse \
# I20111122-0800 \
# /opt/pwebster/workspaces/gitMigration/org.eclipse.releng \
# git://git.eclipse.org/gitroot/platform/eclipse.platform.runtime.git \
# git://git.eclipse.org/gitroot/platform/eclipse.platform.ui.git >maps.txt
# examine the file
# grep -v ^OK maps.txt >run.txt
# /bin/bash run.txt
#
PLATFORM=$( uname -s )
writableBuildRoot=/shared/eclipse/e4
relengProject=org.eclipse.e4.releng
relengBranch=master
buildType=I
date=$(date +%Y%m%d)
time=$(date +%H%M)
timestamp=$date$time
committerId=pwebster
gitEmail=pwebster@ca.ibm.com
gitName="E4 Build"
tag=true
noTag=false
ARGS="$@"
tag_repo_commit () {
REPO=$1
REPO_DIR=$( basename $REPO .git )
NEW_TAG=$2
pushd "$gitCache/$REPO_DIR" >/dev/null
REPO_COMMIT=$( git rev-list -1 HEAD )
if ! ( git log -1 --format="%d" "$REPO_COMMIT" | grep "[ (]$NEW_TAG[,)]" >/dev/null); then
echo "pushd \"$gitCache/$REPO_DIR\" \; git tag \"$NEW_TAG\" \"$REPO_COMMIT\" \; popd"
fi
popd >/dev/null
}
update_map () {
#echo update_map "$@"
REPO=$1
REPO_DIR=$( basename $REPO .git )
MAP=$2
pushd "$gitCache/$REPO_DIR" >/dev/null
grep "repo=${REPO}," "$MAP" >/tmp/maplines_$$.txt
if [ ! -s /tmp/maplines_$$.txt ]; then
return
fi
while read LINE; do
LINE_START=$( echo $LINE | sed 's/^\([^=]*\)=.*$/\1/g' )
PROJ_PATH=$( echo $LINE | sed 's/^.*path=//g' )
CURRENT_TAG=$( echo $LINE | sed 's/.*tag=\([^,]*\),.*$/\1/g' )
LAST_COMMIT=$( git rev-list -1 HEAD -- "$PROJ_PATH" )
if [ -z "$LAST_COMMIT" ]; then
echo "#SKIPPING $LINE_START, no commits for $PROJ_PATH"
continue
fi
if ! ( git tag --contains $LAST_COMMIT | grep $CURRENT_TAG >/dev/null ); then
NEW_DATE=$( git log -1 --format="%ct" "$LAST_COMMIT" )
if [ "$PLATFORM" == "Darwin" ]; then
NEW_TAG=v$( date -u -j -f "%s" "$NEW_DATE" "+%Y%m%d-%H%M" )
else
NEW_TAG=v$( date -u --date="@$NEW_DATE" "+%Y%m%d-%H%M" )
fi
if ! ( git log -1 --format="%d" "$LAST_COMMIT" | grep "[ (]$NEW_TAG[,)]" >/dev/null); then
echo "pushd \"$gitCache/$REPO_DIR\" \; git tag \"$NEW_TAG\" \"$LAST_COMMIT\" \; popd"
fi
echo sed "'s/$LINE_START=GIT,tag=$CURRENT_TAG/$LINE_START=GIT,tag=$NEW_TAG/g'" \"$MAP\" \>/tmp/t1_$$.txt \; mv /tmp/t1_$$.txt \"$MAP\"
else
echo OK $LINE_START $CURRENT_TAG
fi
done </tmp/maplines_$$.txt
rm -f /tmp/maplines_$$.txt
popd >/dev/null
}
STATUS=OK
STATUS_MSG=""
LATEST_SUBMISSION=""
if [ $# -lt 4 ]; then
echo "USAGE: $0 repoRoot buildTag relengRoot repoURL [repoURL]*"
exit 1
fi
gitCache=$1; shift
buildTag=$1; shift
RELENG=$1; shift
REPOS="$@"
cd $gitCache
for REPO in $REPOS; do
tag_repo_commit $REPO $buildTag
MAPS=$( find $RELENG -name "*.map" -exec grep -l "repo=${REPO}," {} \; )
if [ ! -z "$MAPS" ]; then
for MAP in $MAPS; do
update_map $REPO $MAP
done
fi
REPO_DIR=$( basename $REPO .git )
echo pushd \"$gitCache/$REPO_DIR\" \; git push --tags \; popd
done