#!/bin/sh # Cfg git Cherry Pick interactive helper ssh pp 'gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type nothing' cd "$HOME/programs/config_local_arch" || exit 1 # https://www.shellcheck.net/wiki/SC2095 # ssh may swallow stdin, use read need file descriptor workaround or ssh disable stdin # I choose to use for ... in ... alternative instead for branch in $(git branch | awk '{print ($1=="*")?$2:$1}'); do if [ "$branch" != master ]; then echo "sshing to server $branch..." # note need \$ else it will run cfg on current computer instead of remote server ssh -t "$branch" "[ \"\$(cfg -l rev-list origin/$branch..HEAD)\" ] && cfg -l push" fi git checkout "$branch" git pull done < "$XDG_DATA_HOME/mydata/cfgl_cherry_picked" read -r picked # need checkout to master branch to list new master branch commits git checkout master for commit in $(git rev-list --reverse "$picked..HEAD"); do git show "$commit" printf 'Enter branch name to cherry pick this commit: (a for all, enter to skip)\n' read -r branch_pick if [ "$branch_pick" = a ]; then # !/master/ to not cherry pick to master branch git branch | awk '!/master/{print ($1=="*")?$2:$1}' | while read -r branch; do git checkout "$branch" git cherry-pick "$commit" git status # wait to check if git status if good or need manual intervention #echo 'Enter to continue.' # place holder var a because POSIX read no var is undefined #read a done elif [ "$branch_pick" ]; then while [ "$branch_pick" ]; do git checkout "$branch_pick" git cherry-pick "$commit" git status echo 'Enter branch name to cherry pick this commit: (enter to skip)' read -r branch_pick done fi done cp "$XDG_DATA_HOME/mydata/cfgl_cherry_picked" "$XDG_DATA_HOME/mydata/cfgl_cherry_picked.bak" git checkout master git rev-parse HEAD > "$XDG_DATA_HOME/mydata/cfgl_cherry_picked" # !/master/ to not ssh to master for branch in $(git branch | awk '!/master/{print ($1=="*")?$2:$1}'); do git checkout "$branch" git push echo "sshing to server $branch..." ssh -t "$branch" 'cfg -l pull; cfg -lM; cfg -l status' done ssh pp 'gsettings set org.gnome.settings-daemon.plugins.power sleep-inactive-ac-type suspend'