| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 | #!/usr/bin/env python# git-changelog## version 2.0, by John Wiegley## The purpose of this code is to turn "git log" output into a complete# ChangeLog, for projects who wish to begin using a ChangeLog, but haven't# been.## This version of git-changelog depends on GitPython:#   git://gitorious.org/git-python/mainline.gitimport timeimport stringimport sysimport reimport osfrom git import *               # GitPythonfrom subprocess import *repo = Repo(os.getcwd())ref  = 'origin/master..'path = ''# Usage: git changelog [COMMITISH] [-- [PATH]]saw_dashdash = Falseif len(sys.argv) > 1:    for arg in sys.argv[1:]:        if arg == "--":            saw_dashdash = True        elif saw_dashdash:            path = arg        else:            ref = argfor commit in repo.iter_commits(ref, paths=path):    hash_id  = commit.sha    author   = commit.author    date     = commit.committed_date    log_text = commit.message.split('\n')[0]    log_text_remainder = commit.message.split('\n\n')[1:]    while len(log_text_remainder) > 0 and not log_text_remainder[0]:        log_text_remainder = log_text_remainder[1:]    log_text_remainder = string.join(log_text_remainder, '\n\t')    if log_text_remainder:        log_text_remainder = '\n\t' + log_text_remainder    diff = commit.diff(commit.parents[0])    files = []    for f in diff:        if not f.a_blob:            p = f.b_blob.path        elif not f.b_blob:            p = f.a_blob.path        else:            continue        p2 = re.sub('^' + path + '/', '', p)        if p != p2:            files.append(p2)    fp = Popen(["fmt", "-72"], shell = True, stdin = PIPE, stdout = PIPE)    if files:        fp.stdin.write("\t* %s: %s" % (string.join(files, ",\n\t"), log_text))    else:        fp.stdin.write("\t* %s" % log_text)    fp.stdin.close()    log_text = fp.stdout.read()    del fp    print "%s  %s  <%s>\n" % \        (time.strftime("%Y-%m-%d", time.gmtime(date)),         author.name, author.email)    if path:        log_text = re.sub(' ' + path + '/', ' ', log_text)        log_text_remainder = re.sub(' ' + path + '/', ' ', log_text_remainder)    # If the log_text_remainder already begins with a *, then use that as the    # changelog text.    if re.match('\s+\* ', log_text_remainder):        if log_text_remainder[0] == '\n':            print log_text_remainder[1:]        else:            print log_text_remainder    else:        print "%s%s" % (log_text, log_text_remainder)# git-changelog ends here
 |