Skip to content

Instantly share code, notes, and snippets.

@annibal
Last active September 13, 2024 01:10
Show Gist options
  • Save annibal/43d73112b83063c07cad50cda6351bc6 to your computer and use it in GitHub Desktop.
Save annibal/43d73112b83063c07cad50cda6351bc6 to your computer and use it in GitHub Desktop.
repostatus - Shell code for Colmeia's Multi-Repo status quick management
# ...
# export ZSH="$HOME/.oh-my-zsh"
# ZSH_THEME="robbyrussell"
# ...
# source $ZSH/oh-my-zsh.sh
# ...
source ~/scripts/repostatus.sh;
colmrepostatus() {
#clear
repostatus ./server ./client ./core ./core-server ./colm*
}
#...
# if [[ -n $ZSH_INIT_COMMAND ]]; then
# eval "$ZSH_INIT_COMMAND"
# fi
#...
#!/bin/bash
repostatus() {
FG_C="\033[38;5;4m";
# ForeGround _ Cyan, Magenta, Yellow, blacK, Red
FG_K="\033[38;5;0m"
FG_R="\033[38;5;1m"
FG_G="\033[38;5;2m"
FG_Y="\033[38;5;3m"
FG_B="\033[38;5;4m"
FG_M="\033[38;5;5m"
FG_C="\033[38;5;6m"
FG_W="\033[38;5;7m"
# ForeGround _ Bright Cyan, Bright Magenta, Bright Yellow, Bright blacK, Bright Red
FG_BK="\033[38;5;8m"
FG_BR="\033[38;5;9m"
FG_BG="\033[38;5;10m"
FG_BY="\033[38;5;11m"
FG_BB="\033[38;5;12m"
FG_BM="\033[38;5;13m"
FG_BC="\033[38;5;14m"
FG_BW="\033[38;5;15m"
# Reset all Colors
RSTCOL="\033[0m";
# ForeGround _ Extended Gray 1, 2, 3
FG_EG1="\033[38;5;239m";
FG_EG2="\033[38;5;243m";
FG_EG3="\033[38;5;247m";
FG_EG4="\033[38;5;251m";
FG_EG5="\033[38;5;255m";
# ┫
BX_H="${RSTCOL}${FG_EG1}┃${RSTCOL}\n${FG_EG1}┣━┯┫${RSTCOL}"
ARROW_ITEM="${RSTCOL}${FG_EG1}┃ ├───➜${RSTCOL} "
ARROW_ITEMLAST="${RSTCOL}${FG_EG1}┃ └───➜${RSTCOL} "
BX_HL="${RSTCOL}${FG_EG1}┃${RSTCOL}\n${FG_EG1}┗━┯┫${RSTCOL}"
ARROW_LASTITEM="${RSTCOL}${FG_EG1} ├───➜${RSTCOL} "
ARROW_LASTITEMLAST="${RSTCOL}${FG_EG1} └───➜${RSTCOL} "
if [ "$1" ]; then
folders=();
for var in "$@"; do
folders+=( $var );
done
len=${#folders[@]};
i=0;
# echo "len=$len";
# echo "i=$i";
for folder in "$@"; do
if [ -d "$folder/.git" ]; then
ARROW_HEAD="${BX_H}";
ARROW_LAST="${ARROW_ITEMLAST}";
ARROW_IT="${ARROW_ITEM}";
VCOL="${RSTCOL}${FG_EG1}┃ │ "
i=$(($i + 1));
if [ $i -eq $len ]; then
ARROW_HEAD="${BX_HL}";
ARROW_LAST="${ARROW_LASTITEMLAST}";
ARROW_IT="${ARROW_LASTITEM}";
VCOL="${RSTCOL}${FG_EG1} │ "
fi
echo -n "${ARROW_HEAD} ${FG_G}${folder}${RSTCOL}${FG_EG1} ┠";
FILL=$(($COLUMNS - ${#folder} - 11));
printf '%.s─' $(seq 1 $FILL);
echo "${RSTCOL}";
cd $folder;
if [ -L node_modules ]; then
echo "${ARROW_IT}${FG_BY}node_modules ${FG_EG1}:${RSTCOL} sym link"
else
if [ -d node_modules ]; then
nodemods=$(ls node_modules | wc -l);
echo -n "${ARROW_IT}${FG_BC}node_modules ${FG_EG1}:${RSTCOL} $nodemods deps";
else
echo -n "${ARROW_IT}${FG_BR}node_modules ${FG_EG1}:${RSTCOL} ${FG_BR}✕${RSTCOL} ${FG_EG2}not found${RSTCOL}"
fi
echo -n " ${FG_EG1}¦${RSTCOL} "
if [ -e package-lock.json ];
then echo -n "${FG_BG}✓ ${FG_EG5}npm${RSTCOL}"
else echo -n "${FG_BR}✕ ${FG_EG2}npm${RSTCOL}"
fi
echo -n " ${FG_EG1}¦${RSTCOL} "
if [ -e yarn.lock ];
then echo -n "${FG_BG}✓ ${FG_EG5}yarn${RSTCOL}"
else echo -n "${FG_BR}✕ ${FG_EG2}yarn${RSTCOL}"
fi
echo -n " ${FG_EG1}¦${RSTCOL} "
if [ -e pnpm-lock.yaml ];
then echo -n "${FG_BG}✓ ${FG_EG5}pnpm${RSTCOL}"
else echo -n "${FG_BR}✕ ${FG_EG2}pnpm${RSTCOL}"
fi
echo -n "\n"
fi
if [ -L node_modules/@colmeia ]; then
echo "${ARROW_IT}${FG_BY}@colmeia ${FG_EG1}:${RSTCOL} sym link"
else
if [ -d node_modules/@colmeia ]; then
incolmeia=$(ls node_modules/@colmeia);
echo -n "${ARROW_IT}${FG_BC}@colmeia ${FG_EG1}: ${RSTCOL}"
ls -C --format=commas node_modules/@colmeia
# echo "${FG_EG1}: (${RSTCOL} "
# echo " ${FG_EG1})${RSTCOL}"
else
echo "${ARROW_IT}${FG_BR}@colmeia ${FG_EG1}:${RSTCOL} ${FG_BR}✕${RSTCOL} ${FG_EG2}not found${RSTCOL}"
fi
fi
branch=$(git branch --show-current);
if [ "$branch" = "homolog" ] || [ "$branch" = "devel" ];
then echo "${ARROW_IT}${FG_EG5}git branch ${FG_EG1}:${RSTCOL} ${FG_EG5}$branch${RSTCOL}"
else echo "${ARROW_IT}${FG_BC}git branch ${FG_EG1}:${RSTCOL} $branch"
fi
ARROW_IT=$ARROW_LAST;
gstats=$(git --no-pager diff --shortstat)
if [ ! "$gstats" ]; then
gstats=" ✓ ${FG_EG2}working tree clean${RSTCOL}";
echo "${ARROW_IT}${FG_BC}git status ${FG_EG1}:${FG_BG}$gstats${RSTCOL}";
else
echo "${ARROW_IT}${FG_BY}git status ${FG_EG1}:${RSTCOL}$gstats";
fi
cd - >/dev/null;
fi
done
else
echo "usage: repostatus ./server ./client ./co* ...";
fi
echo "";
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment