xref: /relibc/core_io/edit-patches.sh (revision 60e5225eaa7a0b5c93b064f7dbba8cf99e0d19e5)
1*60e5225eSJethro Beekman#!/bin/bash
2*60e5225eSJethro Beekman# Recommended command-line:
3*60e5225eSJethro Beekman#
4*60e5225eSJethro Beekman# GIT_DIR=/your/rust/dir/.git ./edit-patches.sh
5*60e5225eSJethro Beekman
6*60e5225eSJethro Beekmanprompt_changes() {
7*60e5225eSJethro Beekman	bold_arrow; echo "Editing $IO_COMMIT"
8*60e5225eSJethro Beekman	bold_arrow; echo -e "Remember to test your changes with: \e[1;36mcargo build\e[0m"
9*60e5225eSJethro Beekman
10*60e5225eSJethro Beekman	local MAIN_GIT_DIR="$GIT_DIR"
11*60e5225eSJethro Beekman	local GIT_DIR=./.git CORE_IO_COMMIT=$IO_COMMIT
12*60e5225eSJethro Beekman	export CORE_IO_COMMIT
13*60e5225eSJethro Beekman
14*60e5225eSJethro Beekman	git init > /dev/null
15*60e5225eSJethro Beekman	git add .
16*60e5225eSJethro Beekman	git commit -m "rust src import" > /dev/null
17*60e5225eSJethro Beekman	IMPORT_COMMIT=$(git log -n1 --pretty=format:%H)
18*60e5225eSJethro Beekman	patch -s -p1 < $PATCH_DIR/$IO_COMMIT.patch
19*60e5225eSJethro Beekman	git commit -a -m "existing patch for $IO_COMMIT" > /dev/null
20*60e5225eSJethro Beekman
21*60e5225eSJethro Beekman	bold_arrow; echo -e "Applying patch from \e[1;36m$TMP_PATCH\e[0m"
22*60e5225eSJethro Beekman	patch -p1 < $TMP_PATCH || true
23*60e5225eSJethro Beekman	bold_arrow; echo -e "Make your changes now (\e[1;36mctrl-D\e[0m when finished)"
24*60e5225eSJethro Beekman	bash_diff_loop "No changes were made"
25*60e5225eSJethro Beekman	bold_arrow; echo "Replacing $IO_COMMIT.patch with updated version"
26*60e5225eSJethro Beekman	git diff > $TMP_PATCH
27*60e5225eSJethro Beekman	git clean -f -x
28*60e5225eSJethro Beekman	git diff > $PATCH_DIR/$IO_COMMIT.patch
29*60e5225eSJethro Beekman	rm -rf .git
30*60e5225eSJethro Beekman}
31*60e5225eSJethro Beekman
32*60e5225eSJethro Beekmanif [ ! -t 1 ] || [ ! -t 2 ]; then
33*60e5225eSJethro Beekman	echo "==> /dev/stdout or /dev/stderr is not attached to a terminal!"
34*60e5225eSJethro Beekman	echo "==> This script must be run interactively."
35*60e5225eSJethro Beekman	exit 1
36*60e5225eSJethro Beekmanfi
37*60e5225eSJethro Beekman
38*60e5225eSJethro Beekmancd "$(dirname "$0")"
39*60e5225eSJethro Beekman
40*60e5225eSJethro Beekman. ./functions.sh
41*60e5225eSJethro Beekman
42*60e5225eSJethro BeekmanPATCH_DIR="$PWD/patches"
43*60e5225eSJethro BeekmanPATCH_COMMITS=$(get_patch_commits|sort -u)
44*60e5225eSJethro Beekman
45*60e5225eSJethro BeekmanTMP_PATCH=$(mktemp)
46*60e5225eSJethro Beekman
47*60e5225eSJethro Beekmanset -e
48*60e5225eSJethro Beekmanset -o pipefail
49*60e5225eSJethro Beekman
50*60e5225eSJethro Beekmanfind src -mindepth 1 -type d -prune -exec rm -rf {} \;
51*60e5225eSJethro Beekman
52*60e5225eSJethro Beekmanfor IO_COMMIT in $(git_commits_ordered %H $PATCH_COMMITS|tac); do
53*60e5225eSJethro Beekman	prepare_version
54*60e5225eSJethro Beekman	cd src/$IO_COMMIT
55*60e5225eSJethro Beekman	prompt_changes
56*60e5225eSJethro Beekman	cd ../..
57*60e5225eSJethro Beekmandone
58*60e5225eSJethro Beekman
59*60e5225eSJethro Beekmanrm -rf $TMP_PATCH
60*60e5225eSJethro Beekman
61*60e5225eSJethro Beekmanbold_arrow; echo "Done"
62