| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- #! /usr/bin/env bash
- # Copyright (c) Meta Platforms, Inc. and affiliates.
- set -e
- if [ ! -d unreleased_history ]; then
- echo "Can't find unreleased_history/ directory"
- exit 1
- fi
- GIT_PATHS="unreleased_history/ HISTORY.md"
- if [ ! "$DRY_RUN" ]; then
- # Check for uncommitted changes
- UNCOMMITTED="$(git diff -- $GIT_PATHS)"
- if [ "$UNCOMMITTED" ]; then
- echo 'Uncommitted changes to files to be modified. Please commit first to'
- echo 'ensure a clean revert path. You can always `git commit -a --amend`'
- echo 'to add more changes to your commit.'
- exit 2
- fi
- fi
- # Add first part of existing HISTORY file to new version
- awk '{ print } /NOTE/ { exit(0) }' < HISTORY.md > HISTORY.new
- # And a blank line separator
- echo >> HISTORY.new
- # Add new version header
- awk '/#define ROCKSDB_MAJOR/ { major = $3 }
- /#define ROCKSDB_MINOR/ { minor = $3 }
- /#define ROCKSDB_PATCH/ { patch = $3 }
- END { printf "## " major "." minor "." patch }' < include/rocksdb/version.h >> HISTORY.new
- echo " (`git log -n1 --date=format:"%m/%d/%Y" --format="%ad"`)" >> HISTORY.new
- function process_file () {
- # use awk to correct
- # * extra or missing newlines
- # * leading or trailing whitespace
- # * missing '* ' on first line
- awk '/./ { gsub(/^[ \t]+/, ""); gsub(/[ \t]+$/, "");
- if (notfirstline || $1 == "*") print;
- else print "* " $0;
- notfirstline=1; }' < $1 >> HISTORY.new
- echo git rm $1
- if [ ! "$DRY_RUN" ]; then
- git rm $1
- fi
- }
- PROCESSED_DIRECTORIES=""
- function process_dir () {
- PROCESSED_DIRECTORIES="$PROCESSED_DIRECTORIES $1"
- # ls will sort the files, including the permanent header file
- FILES="$(ls unreleased_history/$1/)"
- if [ "$FILES" ]; then
- echo "### $2" >> HISTORY.new
- for FILE in $FILES; do
- process_file "unreleased_history/$1/$FILE"
- done
- echo >> HISTORY.new
- echo "Saved entries from $1"
- else
- echo "Nothing new in $1"
- fi
- }
- # Process dirs and files
- process_dir new_features "New Features"
- process_dir public_api_changes "Public API Changes"
- process_dir behavior_changes "Behavior Changes"
- process_dir bug_fixes "Bug Fixes"
- process_dir performance_improvements "Performance Improvements"
- # Check for unexpected files or dirs at top level. process_dir/process_file
- # will deal with contents of these directories
- EXPECTED_REGEX="[^/]*[.]sh|README[.]txt|$(echo $PROCESSED_DIRECTORIES | tr ' ' '|')"
- platform=`uname`
- if [ $platform = 'Darwin' ]; then
- UNEXPECTED="$(find -E unreleased_history -mindepth 1 -maxdepth 1 -not -regex "[^/]*/($EXPECTED_REGEX)")"
- else
- UNEXPECTED="$(find unreleased_history/ -mindepth 1 -maxdepth 1 -regextype egrep -not -regex "[^/]*/($EXPECTED_REGEX)")"
- fi
- if [ "$UNEXPECTED" ]; then
- echo "Unexpected files I don't know how to process:"
- echo "$UNEXPECTED"
- rm HISTORY.new
- exit 3
- fi
- # Add rest of existing HISTORY file to new version (collapsing newlines)
- awk '/./ { if (note) pr=1 }
- /NOTE/ { note=1 }
- { if (pr) print }' < HISTORY.md >> HISTORY.new
- if [ "$DRY_RUN" ]; then
- echo '==========================================='
- diff -U3 HISTORY.md HISTORY.new || true
- rm HISTORY.new
- else
- mv HISTORY.new HISTORY.md
- echo "Done. Revert command: git checkout HEAD -- $GIT_PATHS"
- fi
|