]> granicus.if.org Git - strace/commitdiff
maint: make gen-contributors-list.sh suitable for generation of CREDITS
authorEugene Syromyatnikov <evgsyr@gmail.com>
Mon, 13 Nov 2017 14:21:13 +0000 (15:21 +0100)
committerDmitry V. Levin <ldv@altlinux.org>
Mon, 13 Nov 2017 20:21:22 +0000 (20:21 +0000)
Implement various features in order to make it suitable for the
generation of the CREDITS file:
- add an option for including contributor e-mail;
- add an option to read additional list of contributors from stdin;
- add shorthand for referring to the initial commit of the branch;
- document all of the above in a help message.

* maint/gen-contributors-list.sh (print_help): New function.
(script): Rename to SCRIPT.
(SCRIPT_NORM_EMAILS, MATCH_OUT, OUT_EMAILS, OUT_NO_EMAILS, read_stdin,
include_email): New variables.
Add parsing of options, rewrite input processing.

maint/gen-contributors-list.sh

index 76ce69d07dd20af4526ef338e4a61cd2cadf3f1b..4185706339b105d2347993f54d4eb0866faced4a 100755 (executable)
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 
+print_help()
+{
+       cat <<__EOF__
+$0 [-h|--help] [-e|--include-email] [-|--stdin] [LAST_COMMIT [FIRST_COMMIT|--initial]]"
+
+Prints list of contributors for the specified range of commits.
+
+Options:
+  -h, --help    Print this message and exit.
+  -e, --include-email
+                Include e-mail address of each contributer in the output.
+  -, --stdin    Read the list of additional contributors from stdin.
+  LAST_COMMIT   Last commit of the range. Default value is HEAD.
+  FIRST_COMMIT  First commit in the range. Default is the last commit tagged
+                with a tag started with the character 'v'. If "--initial"
+                is specified, the first commit of the branch is used.
+__EOF__
+}
+
 get_commit_id()
 {
        git rev-parse --verify "$1^{commit}"
 }
 
+SCRIPT='s/^[^:@<]\+:[[:space:]]*"\?\([^"<@[:space:]][^"<@]*\)"\?[[:space:]]\(<[^<@]\+@[^>]\+>\).*/\1 \2/p'
+# Script for adding angle brackets to e-mail addresses in case they are absent
+SCRIPT_NORM_EMAILS='s/[^[:space:]<@]\+@[^>]\+$/<\0>/'
+MATCH_OUT='^\([^<@[:space:]][^<@]*\)[[:space:]]\(<[^<@]\+@[^>]\+>\)$'
+OUT_EMAILS='\1 \2'
+OUT_NO_EMAILS='\1'
+
+read_stdin=0
+include_email=0
+
+while true; do
+       case "${1:-}" in
+       -h|--help)
+               print_help
+               exit 1
+               ;;
+       -e|--include-email)
+               include_email=1
+               ;;
+       -|--stdin)
+               read_stdin=1
+               ;;
+       *)
+               break
+               ;;
+       esac
+
+       shift
+done
+
 what="$(get_commit_id "${1:-@}")"
 since="${2:-$(git describe --abbrev=0 --match='v*' "$what")}"
-since="$(get_commit_id "$since")"
-script='s/^[^:@<]\+:[[:space:]]*\([^<@[:space:]][^<@]*\)[[:space:]]<[^<@]\+@.*/\1/p'
 
-git log --use-mailmap "^$since" "$what" |
-       sed -n "$script" |
-       LC_COLLATE=C sort -u
+case "$since" in
+--initial)
+       since="$(git rev-list --max-parents=0 $what)"
+       ;;
+*)
+       since="$(get_commit_id "$since")"
+       ;;
+esac
+
+if [ 0 = "$include_email" ]; then
+       out="$OUT_NO_EMAILS"
+else
+       out="$OUT_EMAILS"
+fi
+
+{
+       git log "^$since" "$what" | sed -n "$SCRIPT"
+       [ 0 = "$read_stdin" ] || sed "$SCRIPT_NORM_EMAILS"
+} \
+       | git check-mailmap --stdin \
+       | LC_COLLATE=C sort -u \
+       | sed "s/$MATCH_OUT/$out/"