| #!/usr/bin/env bash | |
| set -e | |
| TOOLCHAIN=${TOOLCHAIN:-$(date +%Y-%m-%d)} | |
| function check_git_fixed_subtree() { | |
| if [[ ! -e ./git-fixed-subtree.sh ]]; then | |
| echo "Missing git-fixed-subtree.sh. Please run the following commands to download it:" | |
| echo "curl --proto '=https' --tlsv1.2 -sSf https://raw.githubusercontent.com/bjorn3/git/tqc-subtree-portable/contrib/subtree/git-subtree.sh -o git-fixed-subtree.sh" | |
| echo "chmod u+x git-fixed-subtree.sh" | |
| exit 1 | |
| fi | |
| if [[ ! -x ./git-fixed-subtree.sh ]]; then | |
| echo "git-fixed-subtree.sh is not executable. Please run the following command to make it executable:" | |
| echo "chmod u+x git-fixed-subtree.sh" | |
| exit 1 | |
| fi | |
| } | |
| case $1 in | |
| "prepare") | |
| echo "=> Installing new nightly" | |
| rustup toolchain install --profile minimal "nightly-${TOOLCHAIN}" # Sanity check to see if the nightly exists | |
| sed -i "s/\"nightly-.*\"/\"nightly-${TOOLCHAIN}\"/" rust-toolchain.toml | |
| echo "=> Uninstalling all old nightlies" | |
| for nightly in $(rustup toolchain list | grep nightly | grep -v "$TOOLCHAIN" | grep -v nightly-x86_64); do | |
| rustup toolchain uninstall "$nightly" | |
| done | |
| ./clean_all.sh | |
| ./y.sh prepare | |
| ;; | |
| "commit") | |
| git add rust-toolchain.toml | |
| git commit -m "Rustup to $(rustc -V)" | |
| ;; | |
| "push") | |
| check_git_fixed_subtree | |
| cg_clif=$(pwd) | |
| pushd ../rust | |
| git pull origin main | |
| branch=sync_cg_clif-$(date +%Y-%m-%d) | |
| git checkout -b "$branch" | |
| "$cg_clif/git-fixed-subtree.sh" pull --prefix=compiler/rustc_codegen_cranelift/ https://github.com/rust-lang/rustc_codegen_cranelift.git main | |
| git push -u my "$branch" | |
| # immediately merge the merge commit into cg_clif to prevent merge conflicts when syncing | |
| # from rust-lang/rust later | |
| "$cg_clif/git-fixed-subtree.sh" push --prefix=compiler/rustc_codegen_cranelift/ "$cg_clif" sync_from_rust | |
| popd | |
| git merge sync_from_rust | |
| ;; | |
| "pull") | |
| check_git_fixed_subtree | |
| RUST_VERS=$(curl "https://static.rust-lang.org/dist/$TOOLCHAIN/channel-rust-nightly-git-commit-hash.txt") | |
| echo "Pulling $RUST_VERS ($TOOLCHAIN)" | |
| cg_clif=$(pwd) | |
| pushd ../rust | |
| git fetch origin main | |
| git -c advice.detachedHead=false checkout "$RUST_VERS" | |
| "$cg_clif/git-fixed-subtree.sh" push --prefix=compiler/rustc_codegen_cranelift/ "$cg_clif" sync_from_rust | |
| popd | |
| git merge sync_from_rust -m "Sync from rust $RUST_VERS" | |
| git branch -d sync_from_rust | |
| ;; | |
| *) | |
| echo "Unknown command '$1'" | |
| echo "Usage: ./rustup.sh prepare|commit" | |
| ;; | |
| esac |