# HG changeset patch # User Patrick Mezard # Date 2011-04-29 06:04:46 # Node ID 3eb632d9cf4268beea329e197feb9a1c6b9960f1 # Parent 42d5165975adf057b9a1015fdd025a278a096b68 extdiff: fix broken symlinks handling (issue1909) diff --git a/hgext/extdiff.py b/hgext/extdiff.py --- a/hgext/extdiff.py +++ b/hgext/extdiff.py @@ -100,7 +100,8 @@ def snapshot(ui, repo, files, node, tmpr if 'x' in fctx.flags(): util.set_flags(dest, False, True) if node is None: - fns_and_mtime.append((dest, repo.wjoin(fn), os.path.getmtime(dest))) + fns_and_mtime.append((dest, repo.wjoin(fn), + os.lstat(dest).st_mtime)) return dirname, fns_and_mtime def dodiff(ui, repo, diffcmd, diffopts, pats, opts): @@ -222,7 +223,7 @@ def dodiff(ui, repo, diffcmd, diffopts, util.system(cmdline, cwd=tmproot) for copy_fn, working_fn, mtime in fns_and_mtime: - if os.path.getmtime(copy_fn) != mtime: + if os.lstat(copy_fn).st_mtime != mtime: ui.debug('file changed while diffing. ' 'Overwriting: %s (src: %s)\n' % (working_fn, copy_fn)) util.copyfile(copy_fn, working_fn) diff --git a/tests/test-extdiff.t b/tests/test-extdiff.t --- a/tests/test-extdiff.t +++ b/tests/test-extdiff.t @@ -167,4 +167,18 @@ Test extdiff with --option: $ hg falabala -o this -c 1 diffing this a.8a5febb7f867/a a.34eed99112ab/a [1] + $ cd .. + $ hg init testsymlinks + $ cd testsymlinks + $ echo a > a + $ hg ci -Am adda + adding a + $ echo a >> a + $ ln -s missing linka + $ hg add linka + $ hg falabala -r 0 --traceback + diffing testsymlinks.07f494440405 testsymlinks + [1] + $ cd .. +