#!/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 # so I choose to use for instead of `... | while read ...` 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 names to cherry pick this commit: (a for all, space to seperate multiple branches, enter to skip)\n' read -r branch_pick if [ "$branch_pick" = a ]; then # !/master/ to not cherry pick to master branch branch_pick="$(git branch | awk '!/master/{print ($1=="*")?$2:$1}')" fi for branch in $branch_pick; do git checkout "$branch" git cherry-pick "$commit" git status done 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'