mirror of
https://github.com/sourcegraph/sourcegraph.git
synced 2026-02-06 16:11:57 +00:00
Add helper script to dump perforce instance state (#38970)
Co-authored-by: Ryan Slade <ryanslade@gmail.com>
This commit is contained in:
parent
aeb3292416
commit
443252d057
78
dev/perforce/p4-dump/p4-dump.sh
Executable file
78
dev/perforce/p4-dump/p4-dump.sh
Executable 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)
|
||||
46
dev/perforce/p4-dump/process.awk
Normal file
46
dev/perforce/p4-dump/process.awk
Normal 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"
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user