NetworkManager/contrib/scripts/nm-setup-git.sh

135 lines
3.3 KiB
Bash
Executable file

#!/bin/bash
set -e
usage() {
printf "%s [--no-test]\n" "$CMD_NAME"
printf "\n"
printf "This script configures (or shows configuration) to the local git, with\n"
printf "settings that might be useful when working on NetworkManager.\n"
printf "\n"
printf "RUn it without arguments, it only prints and shows what it would do.\n"
printf "\n"
printf " --no-test: by default, the script only prints what it\n"
printf " would do. You can also set NO_TEST=1 environment variable.\n"
printf "\n"
}
get_bool() {
local name="$1"
local val="${!name}"
case "$val" in
1|y|yes|Yes|YES|true|True|TRUE|on|On|ON)
echo -n 1
return 0
;;
0|n|no|No|NO|false|False|FALSE|off|Off|OFF)
echo -n 0
return 0
;;
*)
printf "%s" "$2"
;;
esac
}
die() {
echo "ERROR: $*"
exit 1
}
_pprint() {
local a
local sp=''
for a; do
printf "$sp%q" "$a"
sp=' '
done
}
call() {
local m=""
[ "$SKIP" = 1 ] && m="SKIP: "
if [ "$NO_TEST" != 1 ]; then
printf "WOULD: %s%s\n" "$m" "$(_pprint "$@")"
return 0
fi
printf "CALL: %s%s\n" "$m" "$(_pprint "$@")"
[ "$SKIP" = 1 ] || "$@"
}
git_config_reset() {
local key="$1"
local val="$2"
local c=(git config --replace-all "$key" "$val")
test "$#" -eq 2 || die "invalid arguments to git_config_add(): $@"
if [ "$(git config --get-all "$key")" = "$val" ]; then
SKIP=1 call "${c[@]}"
return 0
fi
call "${c[@]}"
}
git_config_add() {
local key="$1"
local val="$2"
local c=(git config --add "$key" "$val")
test "$#" -eq 2 || die "invalid arguments to git_config_add(): $@"
if git config --get-all "$key" | grep -qFx "$val"; then
SKIP=1 call "${c[@]}"
return 0
fi
call "${c[@]}"
}
CMD_NAME="$0"
NO_TEST="$(get_bool NO_TEST 0)"
for a; do
case "$a" in
--no-test)
NO_TEST=1
;;
-h|--help)
usage
exit 0
;;
*)
usage
die "Invalid argument \"$a\""
;;
esac
done
case "$(git config --get-all remote.origin.url)" in
"https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git"| \
"git@gitlab.freedesktop.org:NetworkManager/NetworkManager.git"| \
"ssh://git@gitlab.freedesktop.org/NetworkManager/NetworkManager")
;;
*)
die "unexpected git repository. Expected that remote.origin.url is set to \"https://gitlab.freedesktop.org/NetworkManager/NetworkManager.git\""
;;
esac
git_config_add blame.ignoreRevsFile '.git-blame-ignore-revs'
git_config_reset blame.markIgnoredLines true
git_config_reset blame.markUnblamableLines true
git_config_add notes.displayref 'refs/notes/bugs'
git_config_add remote.origin.fetch 'refs/notes/bugs:refs/notes/bugs'
git_config_reset remote.origin.pushurl 'git@gitlab.freedesktop.org:NetworkManager/NetworkManager.git'
git_config_add 'alias.backport-merge' '! (git show main:contrib/scripts/git-backport-merge || git show origin/main:contrib/scripts/git-backport-merge) | bash -s -'
if [ "$NO_TEST" != 1 ]; then
printf "Run with \"--no-test\" or see \"-h\"\n" >&2
printf "\n" >&2
printf " \"%s\" --no-test\n" "$CMD_NAME" >&2
fi