[PATCH] Kludge to use --git format patch in hg log

tailgunner at smtp.ru tailgunner at smtp.ru
Thu Feb 15 16:31:32 CST 2007


Add -g/--git option to "hg log" to get sensible diff of renamed files


diff -r cc08d2543593 -r 0a593b528bd7 mercurial/cmdutil.py
--- a/mercurial/cmdutil.py	Tue Jan 23 17:41:53 2007 -0600
+++ b/mercurial/cmdutil.py	Wed Feb 14 01:05:09 2007 +0300
@@ -196,7 +196,7 @@ class changeset_printer(object):
 class changeset_printer(object):
     '''show changeset information when templating not requested.'''
 
-    def __init__(self, ui, repo, patch, buffered):
+    def __init__(self, ui, repo, patch, buffered, gitstyle=False):
         self.ui = ui
         self.repo = repo
         self.buffered = buffered
@@ -204,6 +204,7 @@ class changeset_printer(object):
         self.header = {}
         self.hunk = {}
         self.lastheader = None
+        self.gitstyle = gitstyle
 
     def flush(self, rev):
         if rev in self.header:
@@ -305,14 +306,18 @@ class changeset_printer(object):
     def showpatch(self, node):
         if self.patch:
             prev = self.repo.changelog.parents(node)[0]
-            patch.diff(self.repo, prev, node, match=self.patch, fp=self.ui)
+            opts = mdiff.diffopts()
+            if self.gitstyle:
+                opts.git = True
+            patch.diff(self.repo, prev, node, match=self.patch, fp=self.ui,
+                       opts=opts)
             self.ui.write("\n")
 
 class changeset_templater(changeset_printer):
     '''format changeset information.'''
 
-    def __init__(self, ui, repo, patch, mapfile, buffered):
-        changeset_printer.__init__(self, ui, repo, patch, buffered)
+    def __init__(self, ui, repo, patch, mapfile, buffered, gitstyle=False):
+        changeset_printer.__init__(self, ui, repo, patch, buffered, gitstyle)
         self.t = templater.templater(mapfile, templater.common_filters,
                                      cache={'parent': '{rev}:{node|short} ',
                                             'manifest': '{rev}:{node|short}',
@@ -525,6 +530,10 @@ def show_changeset(ui, repo, opts, buffe
             else:
                 mapfile = ui.config('ui', 'style')
 
+    if opts.get("git"):
+        gitstyle = True
+    else:
+        gitstyle = False
     if tmpl or mapfile:
         if mapfile:
             if not os.path.split(mapfile)[0]:
@@ -532,12 +541,12 @@ def show_changeset(ui, repo, opts, buffe
                            or templater.templatepath(mapfile))
                 if mapname: mapfile = mapname
         try:
-            t = changeset_templater(ui, repo, patch, mapfile, buffered)
+            t = changeset_templater(ui, repo, patch, mapfile, buffered, gitstyle)
         except SyntaxError, inst:
             raise util.Abort(inst.args[0])
         if tmpl: t.use_template(tmpl)
         return t
-    return changeset_printer(ui, repo, patch, buffered)
+    return changeset_printer(ui, repo, patch, buffered, gitstyle)
 
 def finddate(ui, repo, date):
     """Find the tipmost changeset that matches the given date spec"""
diff -r cc08d2543593 -r 0a593b528bd7 mercurial/commands.py
--- a/mercurial/commands.py	Tue Jan 23 17:41:53 2007 -0600
+++ b/mercurial/commands.py	Wed Feb 14 01:05:09 2007 +0300
@@ -2760,6 +2760,7 @@ table = {
            _('follow changeset history, or file history across copies and renames')),
           ('', 'follow-first', None,
            _('only follow the first parent of merge changesets')),
+          ('g', 'git', None, _('use git extended diff format')),
           ('d', 'date', '', _('show revs matching date spec')),
           ('C', 'copies', None, _('show copied files')),
           ('k', 'keyword', [], _('search for a keyword')),



More information about the Mercurial-devel mailing list