Changelog generator script for contrib

Thomas Arendsen Hein thomas at intevation.de
Wed Aug 10 09:08:29 CDT 2005


* Vincent Wagelaar <vincent at ricardis.tudelft.nl> [20050810 15:04]:
> I created a changelog generator script.  It can be downloaded from:
> 
> http://hannibal.lr-s.tudelft.nl/~vincent/mercurial/hg-changelog

Based on your code I hacked together a 'hg changelog' command.
Here is the patch. Formatting is not perfect, as this is only a demo
of how it could look like.

Thomas


diff -r 2d2fee33ec68 mercurial/commands.py
--- a/mercurial/commands.py	Wed Aug 10 07:41:23 2005
+++ b/mercurial/commands.py	Wed Aug 10 16:07:22 2005
@@ -469,6 +469,30 @@
     fp = make_file(repo, r, opts['output'], node=n)
     fp.write(r.read(n))
 
+def changelog(ui, repo, *changesets):
+    """generate changelog for one or more changesets"""
+    if changesets:
+        revs = list(revrange(ui, repo, changesets))
+    else:
+        revs = map(str, range(repo.changelog.count() - 1, -1, -1))
+    last_date_author = None
+    for cset in revs:
+        node = repo.lookup(cset)
+        changes = repo.changelog.read(node)
+        author = changes[1]
+        date = time.strftime("%Y-%m-%d",
+                             time.localtime(float(changes[2].split(' ')[0])))
+        date_author = "%s  %s\n\n" % (date, author)
+        if last_date_author is None or last_date_author != date_author:
+            if last_date_author:
+                ui.write("\n")
+            ui.write(date_author)
+        description = changes[4].strip()
+        if not ui.verbose:
+            description = description.splitlines()[0]
+        ui.write("\t* %s: %s\n" % (", ".join(changes[3]), description))
+        last_date_author = date_author
+
 def clone(ui, source, dest=None, **opts):
     """make a copy of an existing repository"""
     if dest is None:
@@ -1206,6 +1230,7 @@
         (cat,
          [('o', 'output', "", 'output to file')],
          'hg cat [-o OUTFILE] FILE [REV]'),
+    "changelog": (changelog, [], "hg changelog [REV]..."),
     "^clone":
         (clone,
          [('U', 'noupdate', None, 'skip update after cloning')],

-- 
Email: thomas at intevation.de
http://intevation.de/~thomas/


More information about the Mercurial mailing list