[PATCH] report correct mtime in hg diff

Andrea Arcangeli andrea at suse.de
Tue Jun 20 08:46:38 CDT 2006


Hello,

Another (minor) annoyance I run into is that hg diff keeps changing its
output at every invocation, despite nothing has changed in the
repository.

So I've fixed it, this should reduce the size of patchqueues too if hg
diff is use to regenerate the diffs.

After:

andrea at opteron:~/devel/python/network> mkdir x
andrea at opteron:~/devel/python/network> cd x
andrea at opteron:~/devel/python/network/x> hg init
andrea at opteron:~/devel/python/network/x> echo ciao > x
andrea at opteron:~/devel/python/network/x> hg add x
andrea at opteron:~/devel/python/network/x> hg diff >1
andrea at opteron:~/devel/python/network/x> hg diff >2
andrea at opteron:~/devel/python/network/x> diff 1 2
andrea at opteron:~/devel/python/network/x> 

Before:

andrea at opteron:~/devel/python/network> mkdir x
andrea at opteron:~/devel/python/network> cd x
andrea at opteron:~/devel/python/network/x> hg init
andrea at opteron:~/devel/python/network/x> echo ciao >x
andrea at opteron:~/devel/python/network/x> hg add x
andrea at opteron:~/devel/python/network/x> hg diff > 1
andrea at opteron:~/devel/python/network/x> hg diff > 2
andrea at opteron:~/devel/python/network/x> diff 1 2
3c3
< +++ b/x       Tue Jun 20 15:44:35 2006 +0200
---
> +++ b/x       Tue Jun 20 15:44:36 2006 +0200
andrea at opteron:~/devel/python/network/x> 

For file modification is the same (above is only the add operation).
Remove still shows the epoch with /dev/null, it seems to work by
simply trapping the exception and returning the current time, which is a
safe fallback.

# HG changeset patch
# User andrea at suse.de
# Date 1150810661 -7200
# Node ID ee0ef2eb452d06b55dafcc993baa3cced6919a0e
# Parent  9f83ed74829eba5a0ddff517b070c0603d8b7d37
report correct mtime in the hg diff output

diff -r 9f83ed74829e -r ee0ef2eb452d mercurial/commands.py
--- a/mercurial/commands.py	Tue Jun 20 04:06:42 2006 +0200
+++ b/mercurial/commands.py	Tue Jun 20 15:37:41 2006 +0200
@@ -8,7 +8,7 @@ from demandload import demandload
 from demandload import demandload
 from node import *
 from i18n import gettext as _
-demandload(globals(), "os re sys signal shutil imp urllib pdb")
+demandload(globals(), "os re sys signal shutil imp urllib pdb stat")
 demandload(globals(), "fancyopts ui hg util lock revlog templater bundlerepo")
 demandload(globals(), "fnmatch mdiff random signal tempfile time")
 demandload(globals(), "traceback errno socket version struct atexit sets bz2")
@@ -379,11 +379,22 @@ def dodiff(fp, ui, repo, node1, node2, f
     if node2:
         change = repo.changelog.read(node2)
         mmap2 = repo.manifest.read(change[0])
-        date2 = util.datestr(change[2])
+        _date2 = util.datestr(change[2])
+        def date2(f):
+            return _date2
         def read(f):
             return repo.file(f).read(mmap2[f])
     else:
-        date2 = util.datestr()
+        _date2 = util.datestr()
+        _tz = util.makedate()[1]
+        def date2(f):
+            try:
+                _f = repo.wopener(f)
+            except IOError, err:
+                if err[0] != errno.ENOENT:
+                    raise
+                return _date2
+            return util.datestr((os.fstat(_f.fileno())[stat.ST_MTIME], _tz))
         def read(f):
             return repo.wread(f)
 
@@ -401,17 +412,17 @@ def dodiff(fp, ui, repo, node1, node2, f
         if f in mmap:
             to = repo.file(f).read(mmap[f])
         tn = read(f)
-        fp.write(mdiff.unidiff(to, date1, tn, date2, f, r, text=text,
+        fp.write(mdiff.unidiff(to, date1, tn, date2(f), f, r, text=text,
                                showfunc=showfunc, ignorews=ignorews))
     for f in added:
         to = None
         tn = read(f)
-        fp.write(mdiff.unidiff(to, date1, tn, date2, f, r, text=text,
+        fp.write(mdiff.unidiff(to, date1, tn, date2(f), f, r, text=text,
                                showfunc=showfunc, ignorews=ignorews))
     for f in removed:
         to = repo.file(f).read(mmap[f])
         tn = None
-        fp.write(mdiff.unidiff(to, date1, tn, date2, f, r, text=text,
+        fp.write(mdiff.unidiff(to, date1, tn, date2(f), f, r, text=text,
                                showfunc=showfunc, ignorews=ignorews))
 
 def trimuser(ui, name, rev, revcache):


More information about the Mercurial mailing list