61dfce7390
Gerrit is missing a feature to remove Gerrit groups. This is a helper script to remove the group from the database. Reference: https://code.google.com/p/gerrit/issues/detail?id=44 Change-Id: I1cb6cf852622fa5697c64666b132ac2205120595
64 lines
2.6 KiB
Bash
Executable File
64 lines
2.6 KiB
Bash
Executable File
#!/bin/bash
|
|
# Gerrit does not have a feature to delete Groups. This is a
|
|
# helper script to delete Gerrit groups from the database.
|
|
# This script will remove a Gerrit group but does not remove the
|
|
# group from the project's groups file (in refs/meta/config).
|
|
# If the group was previously used to provide/restrict access to a
|
|
# project label, branch, etc.. then it will still appear
|
|
# on the project access page. Since Gerrit doesn't know
|
|
# about the group anymore it will just get ignored. Basically
|
|
# you might be left with access rules that may not have
|
|
# any meaning. You would need to manually cleanup the deleted
|
|
# groups from the project access page.
|
|
#
|
|
# Reference:
|
|
# Directions for db manipulation documented in this gerrit issue:
|
|
# https://code.google.com/p/gerrit/issues/detail?id=44
|
|
#
|
|
# To execute:
|
|
# ./gerrit-delete-group.sh /home/gerrit2/review_site "group to remove"
|
|
|
|
|
|
function get_config_data {
|
|
# Get DB config from existing gerrit site
|
|
local config_path=$1
|
|
local config="$1/etc/gerrit.config"
|
|
local secure="$1/etc/secure.config"
|
|
|
|
[[ ! -e "${config}" ]] && { echo "No gerrit config file supplied!"; exit 2; }
|
|
[[ ! -e "${secure}" ]] && { echo "No gerrit secure file supplied!"; exit 2; }
|
|
|
|
CONFIG=${config}
|
|
DB_HOST=$(git config --file ${config} --get database.hostname)
|
|
DB_PORT=$(git config --file ${config} --get database.port)
|
|
if [ -z "${DB_PORT}" ] ; then
|
|
DB_PORT="3306"
|
|
fi
|
|
DB_NAME=$(git config --file ${config} --get database.database)
|
|
DB_USER=$(git config --file ${config} --get database.username)
|
|
DB_PASSWD=$(git config --file ${secure} --get database.password)
|
|
}
|
|
|
|
function delete_group {
|
|
local name="$1"
|
|
|
|
mysql -h ${DB_HOST} -P ${DB_PORT} -u ${DB_USER} ${DB_PASSWD:+-p${DB_PASSWD}} ${DB_NAME} -e "DELETE FROM account_groups WHERE name='${name}';"
|
|
mysql -h ${DB_HOST} -P ${DB_PORT} -u ${DB_USER} ${DB_PASSWD:+-p${DB_PASSWD}} ${DB_NAME} -e "DELETE FROM account_group_names WHERE group_id NOT IN (SELECT group_id FROM account_groups);"
|
|
|
|
}
|
|
|
|
function cleanup {
|
|
# clean up the database a bit to remove the now orphaned records:
|
|
|
|
mysql -h ${DB_HOST} -P ${DB_PORT} -u ${DB_USER} ${DB_PASSWD:+-p${DB_PASSWD}} ${DB_NAME} -e "DELETE FROM account_group_members WHERE group_id NOT IN (SELECT group_id FROM account_groups);"
|
|
mysql -h ${DB_HOST} -P ${DB_PORT} -u ${DB_USER} ${DB_PASSWD:+-p${DB_PASSWD}} ${DB_NAME} -e "DELETE FROM account_group_members_audit WHERE group_id NOT IN (SELECT group_id FROM account_groups);"
|
|
|
|
}
|
|
|
|
# main
|
|
REVIEW_SITE_PATH=$1
|
|
GROUP=$2
|
|
get_config_data ${REVIEW_SITE_PATH}
|
|
delete_group "${GROUP}"
|
|
cleanup
|