#!/bin/bash function die { echo Error: "$*" 1>&2 echo "Usage bk newkeys [filename]" 1>&2 echo " If a file with new keys is not specified, they are expected" 1>&2 echo " on the standard input." 1>&2 exit 1 } [ "$2" ] && die unexpected argument [ "X$1" = "X-" ] && shift if [ "$1" ] then [ -f "$1" ] || die "No such input file '$1'" [ -r "$1" ] || die "Unable to read input file '$1'" if [ "${1##/*}" ] then infile="$(pwd)/$1" else infile="$1" fi else infile=/dev/stdin fi root=$(bk root) [ "$root" ] || exit 1 cd "$root" if [ "$1" ] then # in case windows will break with ../'s or something being unmounted after # the cd [ -f "$infile" ] || die "No such input file '$infile'" [ -r "$infile" ] || die "Unable to read input file '$infile'" fi bk sfiles -lg | grep -q BitKeeper/etc/config && \ die "BitKeeper/etc/config already checked out. Cannot continue" unset old_keys declare -a old_keys old_keys=( $(bk get -qkp BitKeeper/etc/config |egrep '^lic(ense|sign[123]): ') ) [ "${old_keys[0]}" = "license:" ] || die "No existing license key line" [ "${old_keys[1]}" ] || die "No existing license key" [ "${old_keys[2]}" = "licsign1:" ] || die "No existing license signature line 1" [ "${old_keys[3]}" ] || die "No existing license signature 1" [ "${old_keys[4]}" = "licsign2:" ] || die "No existing license signature line 2" [ "${old_keys[5]}" ] || die "No existing license signature 2" [ "${old_keys[6]}" = "licsign3:" ] || die "No existing license signature line 3" [ "${old_keys[7]}" ] || die "No existing license signature 3" [ ${#old_keys} -eq 8 ] || die "Confused by existing license keys" [ "${old_keys[8]}" = "" ] || die "Confused by existing license keys." # this last test is because ${#array} is not very reliable unset new_keys declare -a new_keys new_keys=( $(cat "$infile" | egrep '^lic(ense|sign[123]): ') ) [ "${new_keys[0]}" = "license:" ] || die "No new license key line" [ "${new_keys[1]}" ] || die "No new license key" [ "${new_keys[2]}" = "licsign1:" ] || die "No new license signature line 1" [ "${new_keys[3]}" ] || die "No new license signature 1" [ "${new_keys[4]}" = "licsign2:" ] || die "No new license signature line 2" [ "${new_keys[5]}" ] || die "No new license signature 2" [ "${new_keys[6]}" = "licsign3:" ] || die "No new license signature line 3" [ "${new_keys[7]}" ] || die "No new license signature 3" [ ${#new_keys} -eq 8 ] || die "Confused by new license keys" [ "${new_keys[8]}" = "" ] || die "Confused by new license keys." # this last test is because ${#array} is not very reliable if [ "${new_keys[1]}" = "${old_keys[1]}" -a \ "${new_keys[3]}" = "${old_keys[3]}" -a \ "${new_keys[5]}" = "${old_keys[5]}" -a \ "${new_keys[7]}" = "${old_keys[7]}" ] then echo "This repo is already configured with this key" exit 1 fi set -e bk edit BitKeeper/etc/config bk get -qkp BitKeeper/etc/config | sed \ -e "s#^license: ${old_keys[1]}\$#license: ${new_keys[1]}#" \ -e "s#^licsign1: ${old_keys[3]}\$#licsign1: ${new_keys[3]}#" \ -e "s#^licsign2: ${old_keys[5]}\$#licsign2: ${new_keys[5]}#" \ -e "s#^licsign3: ${old_keys[7]}\$#licsign3: ${new_keys[7]}#" \ > BitKeeper/etc/config if bk pending | grep -q . then bk ci -y'Updated license key' BitKeeper/etc/config echo "Pending deltas. Not committing a ChangeSet for the new key" else bk ci -y'Updated license key' BitKeeper/etc/config bk commit -y'Updated license key' BitKeeper/etc/config fi # vim:set sw=4: