From 53fc7c9dfc7c53a3534573a8fedfc8b787dfb18f Mon Sep 17 00:00:00 2001 From: Marco Stronati Date: Wed, 9 Jan 2019 16:24:55 +0100 Subject: [PATCH] Scripts: add snapshot_alpha.sh --- scripts/snapshot_alpha.sh | 124 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100755 scripts/snapshot_alpha.sh diff --git a/scripts/snapshot_alpha.sh b/scripts/snapshot_alpha.sh new file mode 100755 index 000000000..99235cfd5 --- /dev/null +++ b/scripts/snapshot_alpha.sh @@ -0,0 +1,124 @@ +#! /bin/bash + +set -e + +usage="Usage: +$ ./scripts/snapshot_alpha.sh babylon_005 from athens_004 +Packs the current proto_alpha directory in a new proto_005_ +directory with all the necessary renamings. +With option --master prepares the protocol for master." + +script_dir="$(cd "$(dirname "$0")" && echo "$(pwd -P)/")" +cd "$script_dir"/.. + +current=$1 +label=$(echo $current | cut -d'_' -f1) +version=$(echo $current | cut -d'_' -f2) + +if ! ( [[ "$label" =~ ^[a-z]+$ ]] && [[ "$version" =~ ^[0-9][0-9][0-9]$ ]] ); then + echo "Wrong protocol version" + echo + echo "$usage" + exit 1 +fi + +predecessor=$3 +previous_label=$(echo $predecessor | cut -d'_' -f1) +previous_version=$(echo $predecessor | cut -d'_' -f2) +if ! ( [[ "$2" == "from" ]] && [[ "$3" ]] && [[ "$previous_label" =~ ^[a-z]+$ ]] && [[ "$previous_version" =~ ^[0-9][0-9][0-9]$ ]] ); then + if [[ "$2" == "--master" ]]; then master="true" + else + echo 'pass a predecessor such as "from athens_004" or "--master"' + echo + echo "$usage" + exit 1 + fi +fi + +if [ -d src/proto_${version} ] ; then + echo "Error: you should remove the directory 'src/proto_${version}'" + exit 1 +fi + +#create a temporary directory until the hash is known +cp -r src/proto_alpha/ src/proto_${version} + +# set current version +sed -i --follow-symlink \ + -e 's/let version_value = "alpha_current"/let version_value = "'${current}'"/' \ + src/proto_${version}/lib_protocol/src/raw_context.ml + +# set previous version +if [[ "$master" ]]; then + #in master our predecessor is alpha_current + sed -i --follow-symlink \ + -e 's/s = "alpha_previous"/s = "alpha_current"/' \ + src/proto_${version}/lib_protocol/src/raw_context.ml +else + # set previous version + sed -i --follow-symlink \ + -e 's/Alpha_previous/'${predecessor^}'/' \ + src/proto_${version}/lib_protocol/src/{raw_context.ml,raw_context.mli,init_storage.ml} + + # set previous version + sed -i --follow-symlink \ + -e 's/s = "alpha_previous"/s = "'${predecessor}'"/' \ + src/proto_${version}/lib_protocol/src/raw_context.ml +fi + +long_hash=$(./tezos-protocol-compiler -hash-only src/proto_${version}/lib_protocol/src) +short_hash=$(echo $long_hash | head -c 8) + +if [ -d src/proto_${version}_${short_hash} ] ; then + echo "Error: you should remove the directory 'src/proto_${version}_${short_hash}'" + exit 1 +fi + +mv src/proto_${version} src/proto_${version}_${short_hash} + +cd src/proto_${version}_${short_hash} + +# the following files do not influence the hash + +# replace fake hash with real hash +sed -i --follow-symlink \ + -e 's/"hash": "[^"]*",/"hash": "'$long_hash'",/' \ + lib_protocol/src/TEZOS_PROTOCOL + +sed -i --follow-symlink \ + -e 's/"alpha"/"'${version}-${short_hash}'"/' \ + lib_client/proto_alpha.ml + +sed -i --follow-symlink \ + -e s/protocol_alpha/protocol_${version}_${short_hash}/ \ + $(find -name \*.ml -or -name \*.mli) + +# rename main_*.ml{,i} files of the binaries +rename s/_alpha/_${version}_${short_hash}/ $(find -name main_\*.ml -or -name main_\*.mli) + +# change version in opam files +sed -i --follow-symlink \ + -e 's/Some \\"alpha\\"/Some \\"'${version}_${short_hash}'\\"/' \ + lib_protocol/tezos{,-embedded}-protocol-alpha.opam + +# rename .opam files +rename s/alpha/${version}-${short_hash}/ $(find -name \*.opam) + +# fix content of dune and opam files +sed -i --follow-symlink \ + -e s/_alpha/_${version}_${short_hash}/g \ + -e s/-alpha/-${version}-${short_hash}/g \ + $(find . -name dune -or -name \*.opam) + +# rename genesis except if in master +if [[ ! "$master" ]]; then + #rename genesis + sed -i --follow-symlink \ + -e "s/-genesis/-000-Ps9mPmXa/" \ + $(find . -name dune -or -name \*.opam) + + sed -i --follow-symlink \ + -e "s/_genesis/_000_Ps9mPmXa/" \ + $(find lib_delegate/test -type f) + +fi