#!/bin/sh proc usage { echo "Usage: $0 [--spec] " exit 2 } test -z $1 && usage if test $1 = "--spec" { setglobal spec_format = '1' shift test -z $1 && usage } setglobal TARGET = $1 setglobal GIT_DIR = $[git rev-parse --git-dir] test -z $GIT_DIR && usage export GIT_DIR export GIT_PAGER="" export PAGER="" proc mkchlog { setglobal target = $1 setglobal format = $2 setglobal prev_tag = ''"" for tag in [$[git tag -l $(target)-'*]] { setglobal obj = $[git cat-file tag $tag | awk '/^object /{print $2}] setglobal base = $[git merge-base $obj HEAD] if test -z $base -o $base != $obj { continue } setglobal all_vers = ""$prev_tag$tag $all_vers"" setglobal prev_tag = "$tag.." } if test -z $prev_tag { setglobal all_vers = 'HEAD' } else { setglobal all_vers = ""$(prev_tag)HEAD $all_vers"" } for ver in [$all_vers] { setglobal log_out = $[git log $ver -- $target] if test -z $log_out { continue } setglobal ver_name = $[echo $ver | sed -e 's/^.*\.\.//] echo "" echo "** Version: $ver_name" echo "" git log --no-merges $(format) $ver -- $target setglobal prev_t = "$tag.." } } if test -z $spec_format { mkchlog $TARGET --pretty=format:"%ad %an%n%H%n%n* %s%n" \ | sed -e 's/^\* /\t* /' } else { echo "%changelog" mkchlog $TARGET --pretty=format:"- %ad %an: %s" echo "" }