xref: /relibc/core_io/build-src.sh (revision 1a62a818c30009f916188d1ba0d22b1986971698)
1b358934cSJethro Beekman#!/bin/bash
2b358934cSJethro Beekman# Recommended command-line:
3b358934cSJethro Beekman#
460e5225eSJethro Beekman# commit-db.rb list-valid nightly|GIT_DIR=/your/rust/dir/.git ./build-src.sh
5b358934cSJethro Beekman
6b358934cSJethro Beekmanprompt_changes() {
7b358934cSJethro Beekman	local MAIN_GIT_DIR="$GIT_DIR"
8b358934cSJethro Beekman	local GIT_DIR=./.git CORE_IO_COMMIT=$IO_COMMIT
9b358934cSJethro Beekman	git init > /dev/null
10b358934cSJethro Beekman	git add .
1160e5225eSJethro Beekman	git commit -m "rust src import" > /dev/null
12b358934cSJethro Beekman	export CORE_IO_COMMIT
13b358934cSJethro Beekman
14b358934cSJethro Beekman	bold_arrow; echo 'No patch found for' $IO_COMMIT
15b358934cSJethro Beekman	bold_arrow; echo 'Nearby commit(s) with patches:'
16b358934cSJethro Beekman	echo
17b358934cSJethro Beekman	GIT_DIR="$MAIN_GIT_DIR" git_commits_ordered '%H %cd' $(get_patch_commits) $IO_COMMIT | \
18b358934cSJethro Beekman	grep --color=always -1 $IO_COMMIT | sed /$IO_COMMIT/'s/$/ <=== your commit/'
19b358934cSJethro Beekman	echo
2064dd1634SJethro Beekman	bold_arrow; echo -e "Try applying one of those using: \e[1;36mtry_patch COMMIT\e[0m"
21b358934cSJethro Beekman	bold_arrow; echo -e "Remember to test your changes with: \e[1;36mcargo build\e[0m"
22b358934cSJethro Beekman	bold_arrow; echo -e "Make your changes now (\e[1;36mctrl-D\e[0m when finished)"
2360e5225eSJethro Beekman	bash_diff_loop "No changes were made"
24b358934cSJethro Beekman	bold_arrow; echo "Saving changes as $IO_COMMIT.patch"
25b358934cSJethro Beekman	git clean -f -x
26b358934cSJethro Beekman	git diff > ../../patches/$IO_COMMIT.patch
27b358934cSJethro Beekman	rm -rf .git
28b358934cSJethro Beekman}
29b358934cSJethro Beekman
30b358934cSJethro Beekmanif [ ! -t 1 ] || [ ! -t 2 ]; then
31b358934cSJethro Beekman	echo "==> /dev/stdout or /dev/stderr is not attached to a terminal!"
32b358934cSJethro Beekman	echo "==> This script must be run interactively."
33b358934cSJethro Beekman	exit 1
34b358934cSJethro Beekmanfi
35b358934cSJethro Beekman
36b358934cSJethro Beekmancd "$(dirname "$0")"
3760e5225eSJethro Beekman
3860e5225eSJethro Beekman. ./functions.sh
3960e5225eSJethro Beekman
40b358934cSJethro BeekmanPATCH_DIR="$PWD/patches"
41b358934cSJethro BeekmanCOMPILER_COMMITS=$(cat)
42b358934cSJethro BeekmanIO_COMMITS=$(get_io_commits|sort -u)
43b358934cSJethro BeekmanPATCH_COMMITS=$(get_patch_commits|sort -u)
44b358934cSJethro BeekmanNEW_COMMITS=$(comm -2 -3 <(echo_lines $IO_COMMITS) <(echo_lines $PATCH_COMMITS))
45b358934cSJethro BeekmanOLD_COMMITS=$(comm -1 -2 <(echo_lines $IO_COMMITS) <(echo_lines $PATCH_COMMITS))
46b358934cSJethro Beekman
4760e5225eSJethro Beekmanset -e
4860e5225eSJethro Beekmanset -o pipefail
4960e5225eSJethro Beekman
50b358934cSJethro Beekmanfind src -mindepth 1 -type d -prune -exec rm -rf {} \;
51b358934cSJethro Beekman
52b358934cSJethro Beekmanfor IO_COMMIT in $OLD_COMMITS $(git_commits_ordered %H $NEW_COMMITS|tac); do
53b358934cSJethro Beekman	if ! [ -d src/$IO_COMMIT ]; then
54b358934cSJethro Beekman		prepare_version
55b358934cSJethro Beekman
56b358934cSJethro Beekman		if [ -f patches/$IO_COMMIT.patch ]; then
5760e5225eSJethro Beekman			bold_arrow; echo "Patching $IO_COMMIT"
58b358934cSJethro Beekman			patch -s -p1 -d src/$IO_COMMIT < patches/$IO_COMMIT.patch
59b358934cSJethro Beekman		else
60b358934cSJethro Beekman			cd src/$IO_COMMIT
61b358934cSJethro Beekman			prompt_changes
62b358934cSJethro Beekman			cd ../..
63b358934cSJethro Beekman		fi
64b358934cSJethro Beekman	fi
65b358934cSJethro Beekmandone
66b358934cSJethro Beekman
6760e5225eSJethro BeekmanOLD_GIT_PERM=$(stat --printf=%a .git)
6860e5225eSJethro Beekmantrap "chmod $OLD_GIT_PERM .git; exit 1" SIGINT
69b358934cSJethro Beekmanchmod 000 .git
70*1a62a818SJethro Beekmancargo ${1:-package}
7160e5225eSJethro Beekmanchmod $OLD_GIT_PERM .git
72