Skip to content

Instantly share code, notes, and snippets.

@wybczu
Last active December 27, 2015 13:39
Show Gist options
  • Save wybczu/7334471 to your computer and use it in GitHub Desktop.
Save wybczu/7334471 to your computer and use it in GitHub Desktop.
#!/bin/bash
[[ -z $DEBUG ]] || set -x
HOST="gerrit.example.com"
PORT="29418"
function usage
{
echo "usage: $(basename $0) [-eg] project-name"
echo
echo " -e tworzy pusty commit w repozytorium"
echo " -g nie twórz grup 'project-name' i 'project-name Lead'"
}
GERRIT="ssh $HOST -p $PORT gerrit"
TEMP="$( mktemp -d )"
trap "rm -rf $TEMP; exit" EXIT INT TERM
while getopts ":eg" option; do
case $option in
e)
CREATE_EMPTY_COMMIT="yes"
;;
g)
DO_NOT_CREATE_GROUPS="yes"
;;
*)
usage
exit 1
;;
esac
done
shift $(($OPTIND - 1))
PROJECT="$1"
PROJECT_GROUP="$PROJECT"
PROJECT_LEAD_GROUP="$PROJECT Lead"
READONLY_GROUP="Non-Interactive Users"
if [ -z $PROJECT ]; then
usage
exit 1
fi
$GERRIT ls-projects | grep -q $PROJECT
if [ $? -eq 0 ]; then
echo "Błąd: Projekt $PROJECT już istnieje"
exit 1
fi
cd $TEMP
if [ -z "$DO_NOT_CREATE_GROUPS" ]; then
echo "[+] Tworze grupe '$PROJECT_LEAD_GROUP'"
$GERRIT create-group "'$PROJECT_LEAD_GROUP'"
echo "[+] Tworze grupe '$PROJECT_GROUP'"
$GERRIT create-group "$PROJECT_GROUP" -o "'$PROJECT_LEAD_GROUP'" -g "'$PROJECT_LEAD_GROUP'"
else
if ! $GERRIT ls-groups | grep -q -e "^$PROJECT_GROUP$"; then
echo "Błąd: Grupa '$PROJECT' nie istnieje."
exit 1
fi
if ! $GERRIT ls-groups | grep -q -e "^$PROJECT_LEAD_GROUP$"; then
echo "Błąd: Grupa '$PROJECT_LEAD_GROUP' nie istnieje."
exit 1
fi
fi
if ! $GERRIT ls-groups | grep -q -e "^$READONLY_GROUP$"; then
echo "Błąd: Grupa '$READONLY_GROUP' nie istnieje."
exit 1
fi
GERRIT_CREATE_PROJECT_OPTS=""
if [ -z "$CREATE_EMPTY_COMMIT" ]; then
GERRIT_CREATE_PROJECT_OPTS="--empty-commit"
fi
echo "[+] Tworze projekt $PROJECT"
$GERRIT create-project $GERRIT_CREATE_PROJECT_OPTS $PROJECT
git clone ssh://${HOST}:${PORT}/$PROJECT
cd $PROJECT
git fetch origin refs/meta/config:refs/remotes/origin/meta/config
git checkout meta/config
cat <<EOF > project.config
[project]
state = active
[access "refs/*"]
read = group $READONLY_GROUP
read = group $PROJECT_GROUP
create = group $PROJECT_LEAD_GROUP
forgeAuthor = group $PROJECT_LEAD_GROUP
pushTag = group $PROJECT_GROUP
owner = group $PROJECT_LEAD_GROUP
[access "refs/for/*"]
push = group $PROJECT_GROUP
pushMerge = group $PROJECT_GROUP
[access "refs/heads/*"]
label-Code-Review = -2..+2 group $PROJECT_GROUP
label-Verified = -1..+1 group $READONLY_GROUP
label-Verified = -1..+1 group $PROJECT_LEAD_GROUP
rebase = group $PROJECT_GROUP
submit = group $PROJECT_LEAD_GROUP
EOF
cat <<EOF > groups
# UUID Group Name
#
EOF
$GERRIT ls-groups -v -q "'$PROJECT_GROUP'" | awk -F'\t' '{print $2, "\t", $1}' >> groups
$GERRIT ls-groups -v -q "'$PROJECT_LEAD_GROUP'" | awk -F'\t' '{print $2, "\t", $1}' >> groups
$GERRIT ls-groups -v -q "'$READONLY_GROUP'" | awk -F'\t' '{print $2, "\t", $1}' >> groups
git add project.config groups
git commit -a -m 'Initial project configuration.'
git push origin meta/config:meta/config
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment