#! /bin/bash # tla-uncommit: remove the most recently committed revision set -e -u LAST_REVISION="$(tla logs -f | tail -1)" echo "* un-committing revision: $LAST_REVISION" ARCHIVE="$(tla parse-package-name -a $LAST_REVISION)" CATEGORY="$(tla parse-package-name -c $LAST_REVISION)" BRANCH="$(tla parse-package-name -b $LAST_REVISION)" VERSION="$(tla parse-package-name -v $LAST_REVISION)" PATCH="$(tla parse-package-name -l $LAST_REVISION)" LOCATION="$(cat $HOME/.arch-params/=locations/$ARCHIVE)" if ! echo "$LOCATION" | grep -q "^/"; then echo "Archive $ARCHIVE is not on a local filesystem." exit 1 fi echo "This operation will change history." echo "Type 'yes' if you are sure you want to proceed." echo -n "> " read ans if ! [ "$ans" = "yes" ]; then echo "Aborting." exit 1 fi tla library-remove $LAST_REVISION || true echo "* removing patch log for $PATCH" mv "{arch}/$CATEGORY/$CATEGORY--$BRANCH/$CATEGORY--$BRANCH--$VERSION/$ARCHIVE/patch-log/$PATCH" "++removed-log-$PATCH" PREV_PATCH="$(tla logs | tail -1)" echo "* new latest revision will be $PREV_PATCH" echo "* removing $CATEGORY--$BRANCH--$VERSION--$PATCH from the archive" echo "* archive location is $LOCATION" (cd $LOCATION/$CATEGORY/$CATEGORY--$BRANCH/$CATEGORY--$BRANCH--$VERSION/; mv $PATCH/++revision-lock $PREV_PATCH tar cvfz - $PATCH/ rm -rf $PATCH/) > ++removed-changeset-$PATCH.tar.gz echo "* rebuilding .listing files" tla archive-fixup $ARCHIVE >/dev/null echo "* revision un-committed" # arch-id: 4d135a45-c0f8-4a7d-bd29-4650dfedc593