summaryrefslogtreecommitdiff
path: root/sh/ccp
blob: f0ba485d0046467c28c0fc987dd9ff0fdf8a0715 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#!/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'