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