| 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.git
 
- import time
 
- import string
 
- import sys
 
- import re
 
- import os
 
- from git import *               # GitPython
 
- from subprocess import *
 
- repo = Repo(os.getcwd())
 
- ref  = 'origin/master..'
 
- path = ''
 
- # Usage: git changelog [COMMITISH] [-- [PATH]]
 
- saw_dashdash = False
 
- if len(sys.argv) > 1:
 
-     for arg in sys.argv[1:]:
 
-         if arg == "--":
 
-             saw_dashdash = True
 
-         elif saw_dashdash:
 
-             path = arg
 
-         else:
 
-             ref = arg
 
- for 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
 
 
  |