From d3c792f613b4302abf2bfad36726452259fdb79e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ensar=20Saraj=C4=8Di=C4=87?= Date: Mon, 9 May 2022 11:01:42 +0200 Subject: [PATCH] Add git-pr-review command for easy local pr reviewing --- symlinks/bin/git-pr-review | 40 +++++++++++++++++++ .../fish/completions/git-pr-review.fish | 13 ++++++ symlinks/config/fish/completions/lsp.fish | 31 ++++++++++++++ 3 files changed, 84 insertions(+) create mode 100755 symlinks/bin/git-pr-review create mode 100644 symlinks/config/fish/completions/git-pr-review.fish create mode 100644 symlinks/config/fish/completions/lsp.fish diff --git a/symlinks/bin/git-pr-review b/symlinks/bin/git-pr-review new file mode 100755 index 0000000..a67a3d0 --- /dev/null +++ b/symlinks/bin/git-pr-review @@ -0,0 +1,40 @@ +#!/bin/sh + +set -e + +if [ -z "$1" ]; then + echo "Missing origin branch. Pass in the branch to compare as the first parameter!" + exit 1 +fi +ORIGIN_BRANCH="$1" + +if [ "${1}" = "${1#origin/}" ]; then + read -p "Origin branch does not seem to be from the 'origin/' remote. Proceed? [y/n]" ANSWER + if [ ! "$ANSWER" = "y" ]; then + exit 2 + fi +fi + +TARGET_BRANCH="$2" +if [ -z "$2" ]; then + TARGET_BRANCH="origin/main" + echo "Missing target branch. Assuming $TARGET_BRANCH!" +fi +if [ "${TARGET_BRANCH}" = "${TARGET_BRANCH#origin/}" ]; then + read -p "Target branch does not seem to be from the 'origin/' remote. Proceed? [y/n]" ANSWER + if [ ! "$ANSWER" = "y" ]; then + exit 2 + fi +fi + +if [ ! "$(git rev-parse --is-inside-work-tree 2>/dev/null)" = "true" ]; then + echo "Not inside a git repository." + exit 128 +fi + +echo "Updating origin..." +git fetch + +git checkout $ORIGIN_BRANCH +echo "You are now checked out to the PR branch. Feel free to build the project and test it out." +git difftool $TARGET_BRANCH diff --git a/symlinks/config/fish/completions/git-pr-review.fish b/symlinks/config/fish/completions/git-pr-review.fish new file mode 100644 index 0000000..5da44a0 --- /dev/null +++ b/symlinks/config/fish/completions/git-pr-review.fish @@ -0,0 +1,13 @@ +set -l needs_fetch 1 +function __fish-git-pr-review-fetch + git fetch & + set -l needs_fetch 0 + return 1 +end + +function __fish-git-pr-review-in-git-repo + git rev-parse --is-inside-work-tree 2>/dev/null +end + +complete -c git-pr-review -f +complete -c git-pr-review -n '__fish-git-pr-review-in-git-repo; and __fish-git-pr-review-fetch' -w 'git branch' diff --git a/symlinks/config/fish/completions/lsp.fish b/symlinks/config/fish/completions/lsp.fish new file mode 100644 index 0000000..3b49616 --- /dev/null +++ b/symlinks/config/fish/completions/lsp.fish @@ -0,0 +1,31 @@ +set -l commands status link install uninstall + +function __fish-lsp-available-servers + lsp status --all | grep 'Server.*:' | awk '{print $2}' | sed 's/[:,]//g' | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]//g" +end + +function __fish-lsp-installed-servers + lsp status | grep 'Server.*:' | awk '{print $2}' | sed 's/[:,]//g' | sed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]//g" +end + +complete -c lsp -x -l help -s h -d "print usage help" +complete -c lsp -x -l verbose -s v -d "verbose output" +complete -c lsp -x -n "__fish_use_subcommand" -a status -d "status of installed servers" +complete -c lsp -x -n "__fish_use_subcommand" -a link -d "link installed server to location in PATH (~/.local/bin)" +complete -c lsp -x -n "__fish_use_subcommand" -a install -d "install a new server" +complete -c lsp -x -n "__fish_use_subcommand" -a uninstall -d "uninstall an installed server" + +# Install +complete -c lsp -x -n "__fish_seen_subcommand_from install" -l link -s l -d "link server after installation" +complete -c lsp -x -n "__fish_seen_subcommand_from install" -a '(__fish-lsp-available-servers)' + +# Link +complete -c lsp -x -n "__fish_seen_subcommand_from link" -a '(__fish-lsp-installed-servers)' + +# Uninstall +complete -c lsp -x -n "__fish_seen_subcommand_from uninstall" -a '(__fish-lsp-installed-servers)' + +# Status +complete -c lsp -x -n "__fish_seen_subcommand_from status" -l known-only -s k -d "show only known servers" +complete -c lsp -x -n "__fish_seen_subcommand_from status" -l all -s a -d "show all supported servers" +complete -c lsp -x -n "__fish_seen_subcommand_from status" -a '(__fish-lsp-available-servers)'