+2013-09-07 nu774 <honeycomb77@gmail.com>
+
+ * updated ChangeLog with new git2changelog.py [HEAD]
+
+2013-06-14 nu774 <honeycomb77@gmail.com>
+
+ * add --moov-before-mdat [v0.3.0]
+
+2013-03-04 nu774 <honeycomb77@gmail.com>
+
+ * fix an error message
+
+2013-03-03 nu774 <honeycomb77@gmail.com>
+
+ * bump version [v0.2.0]
+
+ * add --gapless-mode
+
+2013-02-20 nu774 <honeycomb77@gmail.com>
+
+ * simplify __timeb64 condition
+
+ * use fseeko64() on i686-pc-mingw32
+
+2013-02-18 nu774 <honeycomb77@gmail.com>
+
+ * fix build issue on i686-pc-mingw (struct __timeb64 is missing)
+
+2013-02-17 nu774 <honeycomb77@gmail.com>
+
+ * bump version [v0.1.9]
+
+ * fix to accept option -C
+
+2013-02-16 nu774 <honeycomb77@gmail.com>
+
+ * bump version [v0.1.8]
+
+ * refine json metadata importing
+
+ * m4af: duplication check on adding tags
+
+2013-02-15 nu774 <honeycomb77@gmail.com>
+
+ * add --tag-from-json [v0.1.7]
+
+ * fix implicit int variable decl.
+
+ * update m4af
+
+2013-02-03 nu774 <honeycomb77@gmail.com>
+
+ * bump version [v0.1.6]
+
+ * win32: change _wfopen() -> wfsopen()
+
+2013-01-30 nu774 <honeycomb77@gmail.com>
+
+ * update README (add note for character encoding)
+
+2013-01-28 nu774 <honeycomb77@gmail.com>
+
+ * bump version [v0.1.5]
+
+ * gracefully shutdown on signals
+
+2013-01-27 nu774 <honeycomb77@gmail.com>
+
+ * fix MSVC project build issue
+
+2013-01-25 nu774 <honeycomb77@gmail.com>
+
+ * bump version [v0.1.4]
+
+ * add --tag-from-file
+
+2013-01-24 nu774 <honeycomb77@gmail.com>
+
+ * add --silent
+
+2013-01-19 nu774 <honeycomb77@gmail.com>
+
+ * retab
+
+ * bump version [v0.1.3]
+
+ * fix crash on wrong long option, rename --ignore-length to --ignorelength
+
+2013-01-17 nu774 <honeycomb77@gmail.com>
+
+ * bump version [v0.1.2]
+
+ * compat_win32: free argv with atexit()
+
+ * take care of COPYRIGHT-SIGN in UTF-8
+
+2013-01-15 nu774 <honeycomb77@gmail.com>
+
+ * bump version [v0.1.1]
+
+ * fix return type of put_type_entry() to void
+
+ * add ADTS header size(7) to output byte length
+
+2013-01-13 nu774 <honeycomb77@gmail.com>
+
+ * fix mp4 duration & version calcuration [v0.1.0]
+
+2013-01-11 nu774 <honeycomb77@gmail.com>
+
+ * add support for xid
+
+ * support for i686-pc-mingw32 (missing _vscprintf)
+
+2013-01-10 nu774 <honeycomb77@gmail.com>
+
+ * bump version [v0.0.9]
+
+ * rename basename() -> aacenc_basename() and move to compat layer
+
+2013-01-09 nu774 <honeycomb77@gmail.com>
+
+ * add --tag and --long-tag
+
+ * fix corner case of progress display
+
+ * calculate length from file size
+
+ * raw input support
+
+2013-01-08 nu774 <honeycomb77@gmail.com>
+
+ * insert a white space in progress message
+
+2013-01-07 nu774 <honeycomb77@gmail.com>
+
+ * fix typo of bitrate-mode option [v0.0.8]
+
+ * more static inlining (missed on the previous commit) [v0.0.7]
+
+ * check error of fread() and fwrite() [v0.0.6]
+
+ * change inline->static inline to follow C99 semantics (for Clang)
+
+ * explicitly add -lfdk-aac to LDADD in Makefile.am
+
+ * add some files to EXTRA_DIST in Makefile.am
+
+ * fixed a typo in usage message [v0.0.5]
+
+2013-01-06 nu774 <honeycomb77@gmail.com>
+
+ * add MSVC projects
+
+ * add .gitattributes
+
+ * more tweak on configure.ac and Makefile.am (take care of getopt_long) [v0.0.4]
+
+ * use fstat() to test seekability of input file
+
+ * retrieve bitrate for tool tag with aacEncoder_GetParam()
+
+ * output to current working directory by default
+
+2013-01-05 nu774 <honeycomb77@gmail.com>
+
+ * zero clear LIB_INFO before calling aacEncGetLibInfo() [v0.0.3]
+
+ * tweak configure.ac and Makefile.am
+
+ * update version.h [v0.0.2]
+
+ * fixed to clip before converting float to int
+
+ * initial commit [v0.0.1]
+
--- /dev/null
+#!/usr/bin/env python
+
+# Copyright (C) 2013 nu774
+# For conditions of distribution and use, see copyright notice in COPYING
+
+import sys
+import re
+from subprocess import Popen, PIPE
+from itertools import groupby
+from collections import namedtuple
+
+GITLOG_FMT = 'commit %H%nauthor %cn <%ae>%ndate %ad%nsubject %s%nref %d%n%n'
+GITLOG_CMD = ['git','log','--date=short','--format={0}'.format(GITLOG_FMT)]
+
+Commit = namedtuple('Commit', 'commit author date subject ref')
+
+def parse_gitlog(stream):
+ re_decode_tag = re.compile(r'(?<=\()([^,)]+)')
+ commit = dict()
+ for line in stream:
+ fields = line.decode('utf-8').rstrip('\r\n').split(' ', 1)
+ if len(fields) == 2:
+ key, value = fields
+ if key == 'ref':
+ m = re_decode_tag.search(value)
+ value = ' [{0}]'.format(m.group()) if m else ''
+ commit[key] = value
+ elif commit:
+ yield Commit(**commit)
+ commit = dict()
+
+output=sys.stdout.write
+
+with Popen(GITLOG_CMD, shell=False, stdout=PIPE).stdout as pipe:
+ commits = parse_gitlog(pipe)
+ commits_by_date_author = groupby(commits, key=lambda x: (x.date, x.author))
+ for (date, author), commits in commits_by_date_author:
+ output('{0} {1}\n\n'.format(date, author))
+ for c in commits:
+ output(' * {0}{1}\n\n'.format(c.subject, c.ref))