new status-all.sh script, summary of many git repos
This commit is contained in:
@@ -27,7 +27,3 @@ DISCORD_SERVER_NAME="<YOUR_SERVER>"
|
||||
|
||||
DISCORD_GENERAL_HOOK="<WEBHOOK_URL_HERE>?wait=true"
|
||||
|
||||
DISCORD_RESTAKE_HOOK="<WEBHOOK_URL_HERE>?wait=true"
|
||||
|
||||
DISCORD_STORAGE_HOOK="<WEBHOOK_URL_HERE>?wait=true"
|
||||
|
||||
|
||||
+4
-4
@@ -26,10 +26,10 @@ fi
|
||||
# function to process each location
|
||||
function process_git_fetch () {
|
||||
startedIn=`pwd`
|
||||
location=$(dirname "$@")
|
||||
echo -n "----- git fetch $location "
|
||||
printf "%*.*s" 0 $((40 - ${#location} )) "----------------------------------------"
|
||||
echo "-----"
|
||||
location=$(realpath $(dirname "$@"))
|
||||
line="--- --- --- --- --- --- --- --- --- ---"
|
||||
# use "--" to tell printf there are no more commands, only strings to print
|
||||
printf -- "--- git fetch %s %s ---\n" "$location" "${line:${#location}}"
|
||||
cd "$location"
|
||||
git fetch --tags --prune
|
||||
cd "$startedIn"
|
||||
|
||||
+4
-4
@@ -26,10 +26,10 @@ fi
|
||||
# function to process each location
|
||||
function process_git_list () {
|
||||
startedIn=`pwd`
|
||||
location=$(dirname "$@")
|
||||
echo -n "----- git remote $location "
|
||||
printf "%*.*s" 0 $((40 - ${#location} )) "----------------------------------------"
|
||||
echo "-----"
|
||||
location=$(realpath $(dirname "$@"))
|
||||
line="--- --- --- --- --- --- --- --- --- ---"
|
||||
# use "--" to tell printf there are no more commands, only strings to print
|
||||
printf -- "--- git remote %s %s ---\n" "$location" "${line:${#location}}"
|
||||
cd "$location"
|
||||
git remote -vv
|
||||
cd "$startedIn"
|
||||
|
||||
@@ -85,6 +85,27 @@ esac
|
||||
|
||||
# ----------------------------------------------------------
|
||||
|
||||
echo "----- Set 'cd' to use physical directory structure -----"
|
||||
read -p 'Add ``alias cd="cd -P"`` in ~/.bashrc? [y/N]: ' add_cd_alias
|
||||
case $add_cd_alias in
|
||||
[Yy]* )
|
||||
echo 'Appending ~/.bashrc'
|
||||
(
|
||||
cat << 'TERM'
|
||||
|
||||
# ABS when changing directory through a symlink, resolve real location
|
||||
alias cd='cd -P'
|
||||
|
||||
TERM
|
||||
) >> "$HOME/.bashrc"
|
||||
;;
|
||||
* )
|
||||
echo 'Skipping'
|
||||
;;
|
||||
esac
|
||||
|
||||
# ----------------------------------------------------------
|
||||
|
||||
echo "----- Add symlink for ssh-ident as ssh --------------"
|
||||
read -p 'Add "ssh alias for ssh-ident"? (REQUIRES python) [y/N]: ' add_ident
|
||||
case $add_ident in
|
||||
|
||||
+4
-4
@@ -26,10 +26,10 @@ fi
|
||||
# function to process each location
|
||||
function process_git_pull () {
|
||||
startedIn=`pwd`
|
||||
location=$(dirname "$@")
|
||||
echo -n "----- git pull $location "
|
||||
printf "%*.*s" 0 $((40 - ${#location} )) "----------------------------------------"
|
||||
echo "-----"
|
||||
location=$(realpath $(dirname "$@"))
|
||||
line="--- --- --- --- --- --- --- --- --- ---"
|
||||
# use "--" to tell printf there are no more commands, only strings to print
|
||||
printf -- "--- git pull %s %s ---\n" "$location" "${line:${#location}}"
|
||||
cd "$location"
|
||||
git pull --ff-only
|
||||
cd "$startedIn"
|
||||
|
||||
Executable
+92
@@ -0,0 +1,92 @@
|
||||
#!/bin/bash
|
||||
|
||||
# perform a "git status" on each location specified (recursively), or current location if none specified.
|
||||
# git will quietly ignore any git repo stored in a folder you lack permission on.
|
||||
# just listing current status of repos,
|
||||
#
|
||||
# will only search symbolic links when passed "-l" option, must be before any locations
|
||||
# status-all.sh [-l] # current location implied
|
||||
# status-all.sh [-l] ~/my-projects /var/group-projects
|
||||
|
||||
# check for "-l" in command prompt
|
||||
followLinks="-H"
|
||||
while getopts "l" option; do
|
||||
case $option in
|
||||
l)
|
||||
followLinks="-L"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
shift "$((OPTIND-1))"
|
||||
|
||||
if [[ "-H" == "$followLinks" ]]; then
|
||||
echo "use -l to follow symbolic links"
|
||||
fi
|
||||
|
||||
# function to process each location
|
||||
function process_git_list () {
|
||||
startedIn=$(pwd)
|
||||
location=$(realpath $(dirname "$@"))
|
||||
line="--- --- --- --- --- --- --- --- --- ---"
|
||||
# use "--" to tell printf there are no more commands, only strings to print
|
||||
printf -- "--- git status %s %s ---\n" "$location" "${line:${#location}}"
|
||||
cd "$location"
|
||||
output=""
|
||||
info=$(git -c color.status=always status)
|
||||
remote=$(git remote -vv)
|
||||
upstream=$(git for-each-ref --format='%(upstream)' $(cat .git/HEAD))
|
||||
# 33 is yellow text
|
||||
|
||||
# display any tracking issue, 43 is yellow background
|
||||
if [[ "$remote" == "" ]]; then
|
||||
output="$output\n[33m * [30;43m no upstream repo [0m"
|
||||
elif [[ "$info" == *"HEAD detached at"* ]]; then
|
||||
output="$output\n[33m * [30;43m on detached head [0m"
|
||||
elif [[ "$upstream" == "" ]]; then
|
||||
output="$output\n[33m * [30;43m on untracked branch [0m"
|
||||
fi
|
||||
|
||||
# various file statuses
|
||||
if [[ "$info" == *"Changes to be committed"* ]]; then
|
||||
# 42 is green background
|
||||
output="$output\n[33m * [0;42m has staged changes [0m"
|
||||
fi
|
||||
if [[ "$info" == *"Changes not staged for commit"* ]]; then
|
||||
# 41 is red background
|
||||
output="$output\n[33m * [0;41m has unstaged changes [0m"
|
||||
fi
|
||||
if [[ "$info" == *"Untracked files"* ]]; then
|
||||
# 31 is red text
|
||||
output="$output\n[33m * [0;31m has new files [0m"
|
||||
fi
|
||||
|
||||
# various branch statuses
|
||||
if [[ "$info" == *"branch is behind"* ]]; then
|
||||
# 45 is magenta background
|
||||
output="$output\n[33m * [0;45m branch is behind [0m"
|
||||
fi
|
||||
if [[ "$info" == *"branch is ahead"* ]]; then
|
||||
# 46 is cyan background
|
||||
output="$output\n[33m * [0;46m branch is ahead [0m"
|
||||
fi
|
||||
if [[ "$info" == *"nothing to commit, working tree clean"* ]]; then
|
||||
# 90 is gray text
|
||||
output="$output\n[90m * [0;90m nothing to commit, working tree clean [0m"
|
||||
fi
|
||||
|
||||
# fallback to displaying the full message
|
||||
if [[ "$output" == "" ]]; then
|
||||
output="\n$info"
|
||||
fi
|
||||
|
||||
# output is prefixed with "\n", skip it
|
||||
printf "${output:2}\n"
|
||||
cd "$startedIn"
|
||||
}
|
||||
|
||||
# find all folders named ".git" under given locations,
|
||||
# and call process_git_list on each location that was found.
|
||||
# we then work on the folder that contained the ".git" folder.
|
||||
|
||||
find "$followLinks" "$@" -type d -name ".git" | while read -r file; do process_git_list "$file"; done
|
||||
|
||||
Reference in New Issue
Block a user