Add helper script to dump perforce instance state (#38970)

Co-authored-by: Ryan Slade <ryanslade@gmail.com>
This commit is contained in:
Geoffrey Gilmore 2022-12-07 01:25:58 -08:00 committed by GitHub
parent aeb3292416
commit 443252d057
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 124 additions and 0 deletions

78
dev/perforce/p4-dump/p4-dump.sh Executable file
View File

@ -0,0 +1,78 @@
#!/usr/bin/env bash
cd "$(dirname "${BASH_SOURCE[0]}")"
set -euo pipefail
OUTPUT=$(mktemp -d -t p4dump_XXXXXXX)
cleanup() {
rm -rf "$OUTPUT"
}
trap cleanup EXIT
user_group_mapping="${OUTPUT}/user_to_group.txt"
touch "${user_group_mapping}"
mapfile -t P4_USERS < <(p4 users | awk '{print $1}')
echo "USERS:"
for user in "${P4_USERS[@]}"; do
echo "$user"
done
echo ""
mapfile -t P4_GROUPS < <(p4 groups)
echo "GROUPS:"
for group in "${P4_GROUPS[@]}"; do
echo "$group"
done
echo ""
mapfile -t P4_DEPOTS < <(p4 depots)
echo "P4 DEPOTS:"
for depot in "${P4_DEPOTS[@]}"; do
echo "$depot"
done
echo ""
for user in "${P4_USERS[@]}"; do
mapfile -t P4_USER_GROUPS < <(p4 groups "$user")
if [[ ${#P4_USER_GROUPS[@]} == 0 ]]; then
echo "${user}" >>"${user_group_mapping}"
continue
fi
for group in "${P4_USER_GROUPS[@]}"; do
echo "${user} ${group}" >>"${user_group_mapping}"
done
done
echo "USER TO GROUP ASSIGNMENTS:"
gawk -f ./process.awk "${user_group_mapping}"
echo ""
echo "ENTIRE P4 PROECTION TABLE:"
p4 protects -a
echo ""
echo "P4 PROTECTION TABLE BY USER:"
for user in "${P4_USERS[@]}"; do
echo "$user:"
p4 protects -u "$user"
echo ""
done
echo "P4 PROTECTION TABLE BY GROUP:"
for group in "${P4_GROUPS[@]}"; do
echo "$group:"
p4 protects -g "$group"
echo ""
done
mapfile -t P4_DEPOTS < <(p4 depots)

View File

@ -0,0 +1,46 @@
BEGIN {
delete non_group_users[0]
delete groups[0]
}
NF == 1 {
non_group_users[length(non_group_users) + 1]=$1
}
NF == 2 {
groups[$2][length(groups[$2]) + 1]=$1;
}
END {
asorti(groups, sorted_groups)
for (i in sorted_groups) {
group=sorted_groups[i]
printf "%s:", group
asort(groups[group], sorted_users)
for (j in sorted_users) {
printf " %s", sorted_users[j]
}
printf "\n"
}
if (length(non_group_users) >= 1) {
printf "---\n"
printf "The following users are not members of any group:"
asort(non_group_users, sorted_non_group_users)
for (i in sorted_non_group_users) {
printf " %s", sorted_non_group_users[i]
}
printf "\n"
}
printf "\n"
}