diff --git a/CHANGELOG.md b/CHANGELOG.md index b46404e..d4f40f8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.9.0] - 2021-01-19 +### Added +- Added a testing suite for more reliable behavior! + +### Changed +- Fix version prefix handling (example v0.1.0) +- Improved some of the error messages for init. +- Give tips for adding the script to PATH in the README. + ## [0.8.0] - 2021-01-11 ### Added - Added an option to provide a token for the auth command as another argument. @@ -93,7 +102,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Created a proof of concept for a changelog updater. -[Unreleased]: https://github.com/adamtabrams/change/compare/0.8.0...HEAD +[Unreleased]: https://github.com/adamtabrams/change/compare/0.9.0...HEAD +[0.9.0]: https://github.com/adamtabrams/change/compare/0.8.0...0.9.0 [0.8.0]: https://github.com/adamtabrams/change/compare/0.7.1...0.8.0 [0.7.1]: https://github.com/adamtabrams/change/compare/0.7.0...0.7.1 [0.7.0]: https://github.com/adamtabrams/change/compare/0.6.1...0.7.0 diff --git a/change b/change index c881eda..1570f99 100755 --- a/change +++ b/change @@ -35,8 +35,13 @@ usage() { echo " change tag, and then runs change post." } -get_version() { - echo "$1" | sed "s|^[^[:digit:]]*\([[:digit:].]*\).*|\1|" +get_versions() { + reverse=${1:-v} # sending arg "-v" reverses the list + git tag --list "[0-9]*\.[0-9]*.*" "v[0-9]*\.[0-9]*" --sort="${reverse}:refname" +} + +rm_ver_prefix() { + echo "$1" | sed "s|^[^0-9]*\([0-9.]*\).*|\1|" } get_ver_name_date() { @@ -78,7 +83,7 @@ get_needed_log_ver_names() { latest_git_ver_name=$1 latest_log_ver_name=$2 - tags=$(git tag --list "[[:digit:]]*\.[[:digit:]]*" --sort="-v:refname") + tags=$(get_versions -v) ! echo "$tags" | grep -q "$latest_log_ver_name" && return 0 echo "$tags" | sed -n "/$latest_log_ver_name/!p;//q" | sed '1!G;h;$!d' @@ -104,20 +109,20 @@ get_new_version_name() { } increment_major() { - cur_major=$(echo "$1" | sed "s|^[^[:digit:]]*\([[:digit:]]*\)\..*$|\1|") - echo "$1" | sed "s|\.[[:digit:]]*|.0|g" | - sed "s|\(^[^[:digit:]]*\)[[:digit:]]*\(\..*$\)|\1$(( cur_major + 1 ))\2|" + cur_major=$(echo "$1" | sed "s|^[^0-9]*\([0-9]*\)\..*$|\1|") + echo "$1" | sed "s|\.[0-9]*|.0|g" | + sed "s|\(^[^0-9]*\)[0-9]*\(\..*$\)|\1$(( cur_major + 1 ))\2|" } increment_minor() { - cur_minor=$(echo "$1" | sed "s|^.*\.\([[:digit:]]*\)\..*$|\1|") - echo "$1" | sed "s|\.[[:digit:]]*|.0|g" | - sed "s|\(^.*\.\)[[:digit:]]*\(\..*$\)|\1$(( cur_minor + 1 ))\2|" + cur_minor=$(echo "$1" | sed "s|^.*\.\([0-9]*\)\..*$|\1|") + echo "$1" | sed "s|\.[0-9]*|.0|g" | + sed "s|\(^.*\.\)[0-9]*\(\..*$\)|\1$(( cur_minor + 1 ))\2|" } increment_patch() { - cur_patch=$(echo "$1" | sed "s|^.*\.\([[:digit:]]*\).*$|\1|") - echo "$1" | sed "s|\(^.*\.\)[[:digit:]]*\(.*$\)|\1$(( cur_patch + 1 ))\2|" + cur_patch=$(echo "$1" | sed "s|^.*\.\([0-9]*\).*$|\1|") + echo "$1" | sed "s|\(^.*\.\)[0-9]*\(.*$\)|\1$(( cur_patch + 1 ))\2|" } update_diffs() { @@ -125,8 +130,8 @@ update_diffs() { latest_log_ver_name=$2 needed_log_ver_name=$3 - latest_log_ver=$(get_version "$latest_log_ver_name") - needed_log_ver=$(get_version "$needed_log_ver_name") + latest_log_ver=$(rm_ver_prefix "$latest_log_ver_name") + needed_log_ver=$(rm_ver_prefix "$needed_log_ver_name") new_commits=$(get_commits_between "$latest_git_ver_name" \ "$latest_log_ver_name" "$needed_log_ver_name") @@ -140,8 +145,8 @@ update_links() { latest_log_ver_name=$1 needed_log_ver_name=$2 - latest_log_ver=$(get_version "$latest_log_ver_name") - needed_log_ver=$(get_version "$needed_log_ver_name") + latest_log_ver=$(rm_ver_prefix "$latest_log_ver_name") + needed_log_ver=$(rm_ver_prefix "$needed_log_ver_name") repo_url=$(git config --get remote.origin.url | sed "s|\(.*\)\.git|\1|") new_link="[$needed_log_ver]: $repo_url/compare/$latest_log_ver_name...$needed_log_ver_name" @@ -167,7 +172,7 @@ get_commits_between() { } startup_checks() { - ! git rev-parse 2> /dev/null && { echo "you're no in a git repo" >&2; return 1; } + ! git rev-parse 2> /dev/null && { echo "you're not in a git repo" >&2; return 1; } [ ! -e "$change_file" ] && { echo "couldn't find $change_file" >&2; return 1; } return 0 } @@ -201,7 +206,7 @@ post_release() { auth_token=$(base64 --decode < "$auth_file") latest_log_ver_name=$(sed -n "s|^\[Unreleased\]:.*/\(.*\)\.\.\.HEAD$|\1|p" $change_file) - latest_log_ver=$(get_version "$latest_log_ver_name") + latest_log_ver=$(rm_ver_prefix "$latest_log_ver_name") repo_url=$(git config --get remote.origin.url | sed -e "s|\(.*\)\.git|\1|" -e "s|\(^.*\)\(github.com\)|\1api.\2/repos|") @@ -217,16 +222,21 @@ post_release() { } init() { - ! git rev-parse 2> /dev/null && { echo "you're no in a git repo" >&2; return 1; } + [ ! -d .git ] && { echo "the current directory doesn't contain .git" >&2; return 1; } + [ -e "$change_file" ] && { echo "$change_file already exists" >&2; return 1; } - first_ver_name=$(git tag --list "[[:digit:]]*\.[[:digit:]]*" --sort="v:refname" | head -1) - first_ver=$(get_version "$first_ver_name") - first_commits=$(git log --pretty=format:"%s" "$first_ver_name") - repo_url=$(git config --get remote.origin.url | sed "s|\(.*\)\.git|\1|") + first_ver_name=$(get_versions | head -1) + [ ! "$first_ver_name" ] && { echo "couldn't find any valid version tags" >&2; return 2; } - [ -e "$change_file" ] && { echo "$change_file already exists" >&2; return 1; } + first_ver=$(rm_ver_prefix "$first_ver_name") [ ! "$first_ver" ] && { echo "couldn't get first version" >&2; return 2; } + first_commits=$(git log --pretty=format:"%s" "$first_ver_name") + [ ! "$first_commits" ] && { echo "couldn't get first commits" >&2; return 2; } + + repo_url=$(git config --get remote.origin.url | sed "s|\(.*\)\.git|\1|") + [ ! "$repo_url" ] && { echo "remote origin url isn't set for this repo" >&2; return 1; } + echo "# Changelog All notable changes to this project will be documented in this file. @@ -243,7 +253,7 @@ $(format_commits "$first_commits") [ ! -e "$change_file" ] && echo "something when wrong while creating $change_file" >&2 && return 1 - echo "created $change_file" >&2 + echo "created $change_file" } run_all() { @@ -262,11 +272,11 @@ run_all() { modify_file() { ! startup_checks && return 1 - latest_git_ver_name=$(git tag --list "[[:digit:]]*\.[[:digit:]]*" --sort="-v:refname" | head -1) + latest_git_ver_name=$(get_versions -v | head -1) latest_log_ver_name=$(sed -n "s|^\[Unreleased\]:.*/\(.*\)\.\.\.HEAD$|\1|p" $change_file) needed_log_ver_names=$(get_needed_log_ver_names "$latest_git_ver_name" "$latest_log_ver_name") - [ ! "$needed_log_ver_names" ] && { echo "no new versions to add" >&2; return 1; } + [ ! "$needed_log_ver_names" ] && { echo "no new versions to add"; return 1; } IFS="$nl" for needed_log_ver_name in $needed_log_ver_names; do diff --git a/tests/change-prefix/setup-old/CHANGELOG.md b/tests/change-prefix/setup-old/CHANGELOG.md deleted file mode 100644 index 440e743..0000000 --- a/tests/change-prefix/setup-old/CHANGELOG.md +++ /dev/null @@ -1,17 +0,0 @@ -# Changelog -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - -## [Unreleased] - -## [0.0.1] - 2021-01-19 -### Added -- Add first file. - -### Fixed -- Add second file. - -[Unreleased]: https://github.com/adamtabrams/change/compare/v0.0.1...HEAD -[0.0.1]: https://github.com/adamtabrams/change/releases/tag/v0.0.1 diff --git a/tests/change-prefix/setup-old/check-results b/tests/change-prefix/setup-old/check-results deleted file mode 100755 index 0ddc5c9..0000000 --- a/tests/change-prefix/setup-old/check-results +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/sh - -testname="$(basename "$(cd .. && pwd)")" - -if cmp --silent act-stdout exp-stdout; then - echo "PASS" -else - echo "FAIL - $testname: stdout did not match" -fi - -if cmp --silent act-stderr exp-stderr; then - echo "PASS" -else - echo "FAIL - $testname: stderr did not match" -fi - -date=$(date +%Y-%m-%d) -sed "s/~~SUB-DATE~~/$date/" template-CHANGELOG.md > exp-CHANGELOG.md - -if cmp --silent CHANGELOG.md exp-CHANGELOG.md; then - echo "PASS" -else - echo "FAIL - $testname: changelog did not match" -fi diff --git a/tests/change-prefix/setup-old/exp-stderr b/tests/change-prefix/setup-old/exp-stderr deleted file mode 100644 index e69de29..0000000 diff --git a/tests/change-prefix/setup-old/exp-stdout b/tests/change-prefix/setup-old/exp-stdout deleted file mode 100644 index 0603fcf..0000000 --- a/tests/change-prefix/setup-old/exp-stdout +++ /dev/null @@ -1 +0,0 @@ -added 0.0.2 to CHANGELOG.md diff --git a/tests/change-prefix/setup-old/run-test b/tests/change-prefix/setup-old/run-test deleted file mode 100755 index 5f21096..0000000 --- a/tests/change-prefix/setup-old/run-test +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/sh - -git init --quiet - -git add run-test -git commit --quiet -am "feat: add first file" -git add check-results -git commit --quiet -am "fix: add second file" -git tag "v0.0.1" - -git add exp-stderr -git commit --quiet -am "feat: add third file" -git tag "v0.0.2" - -git remote add origin https://github.com/adamtabrams/change.git - -change >act-stdout 2>act-stderr - -rm -rf ./.git diff --git a/tests/change-prefix/setup-old/template-CHANGELOG.md b/tests/change-prefix/setup-old/template-CHANGELOG.md deleted file mode 100644 index a2d96e7..0000000 --- a/tests/change-prefix/setup-old/template-CHANGELOG.md +++ /dev/null @@ -1,22 +0,0 @@ -# Changelog -All notable changes to this project will be documented in this file. - -The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), -and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). - -## [Unreleased] - -## [0.0.2] - ~~SUB-DATE~~ -### Added -- Add third file. - -## [0.0.1] - 2021-01-19 -### Added -- Add first file. - -### Fixed -- Add second file. - -[Unreleased]: https://github.com/adamtabrams/change/compare/v0.0.2...HEAD -[0.0.2]: https://github.com/adamtabrams/change/compare/v0.0.1...v0.0.2 -[0.0.1]: https://github.com/adamtabrams/change/releases/tag/v0.0.1