[PATCH 2 of 3] debugdirstate: don't hide date field with --nodate, just show 'set'/'unset'

Mads Kiilerich mads at kiilerich.com
Fri Jan 9 18:50:11 CST 2015


# HG changeset patch
# User Mads Kiilerich <madski at unity3d.com>
# Date 1420825082 -3600
#      Fri Jan 09 18:38:02 2015 +0100
# Node ID 3efb0c54f8e86ea5e78a2509c6746ccdd219196b
# Parent  2fc589aaa62b1835993454c3eee223a8cd0da9d1
debugdirstate: don't hide date field with --nodate, just show 'set'/'unset'

The value of the dirstate date field cannot be used in tests and we thus have
to use debugdirstate with --nodate. It is however still very helpful to be able
to see whether the date field has been set or still is unset. The absence of
that information made it hard to debug some largefile dirstate issues.

This change _could_ make the test suite more unstable ... but that would be
places where the test suite or the code should be made more stable. (Note:
'unset' with the magic negative sizes is reliable. 'unset' for normal sizes
would probably not be reliable, but there is no such occurrences in the test
suite and it should thus be reliable.)

This output wastes more horizontal space in the --nodate output, but it also
makes things simpler that the output format always is the same. It is just a
debug command so let's keep it simple.

diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -2887,18 +2887,18 @@ def debugsetparents(ui, repo, rev1, rev2
 def debugstate(ui, repo, nodates=None, datesort=None):
     """show the contents of the current dirstate"""
     timestr = ""
-    showdate = not nodates
     if datesort:
         keyfunc = lambda x: (x[1][3], x[0]) # sort by mtime, then by filename
     else:
         keyfunc = None # sort by filename
     for file_, ent in sorted(repo.dirstate._map.iteritems(), key=keyfunc):
-        if showdate:
-            if ent[3] == -1:
-                timestr = 'unset               '
-            else:
-                timestr = time.strftime("%Y-%m-%d %H:%M:%S ",
-                                        time.localtime(ent[3]))
+        if ent[3] == -1:
+            timestr = 'unset               '
+        elif nodates:
+            timestr = 'set                 '
+        else:
+            timestr = time.strftime("%Y-%m-%d %H:%M:%S ",
+                                    time.localtime(ent[3]))
         if ent[1] & 020000:
             mode = 'lnk'
         else:
diff --git a/tests/test-largefiles-update.t b/tests/test-largefiles-update.t
--- a/tests/test-largefiles-update.t
+++ b/tests/test-largefiles-update.t
@@ -31,13 +31,13 @@ prevents unnecessary hashing of content 
   $ sleep 1
   $ hg st
   $ hg debugdirstate --large --nodate
-  n 644          7 large1
-  n 644         13 large2
+  n 644          7 set                 large1
+  n 644         13 set                 large2
   $ hg up
   0 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ hg debugdirstate --large --nodate
-  n 644          7 large1
-  n 644         13 large2
+  n 644          7 set                 large1
+  n 644         13 set                 large2
 
 Test that "hg merge" updates largefiles from "other" correctly
 
@@ -337,8 +337,8 @@ Test a linear merge to a revision contai
   remote turned local largefile large2 into a normal file
   keep (l)argefile or use (n)ormal file? l
   $ hg debugdirstate --nodates | grep large2
-  a   0         -1 .hglf/large2
-  r   0          0 large2
+  a   0         -1 unset               .hglf/large2
+  r   0          0 set                 large2
   $ hg status -A large2
   A large2
   $ cat large2
@@ -353,8 +353,8 @@ Test a linear merge to a revision contai
   remote turned local largefile large3 into a normal file
   keep (l)argefile or use (n)ormal file? l
   $ hg debugdirstate --nodates | grep large3
-  a   0         -1 .hglf/large3
-  r   0          0 large3
+  a   0         -1 unset               .hglf/large3
+  r   0          0 set                 large3
   $ hg status -A large3
   A large3
   $ cat large3
diff --git a/tests/test-largefiles.t b/tests/test-largefiles.t
--- a/tests/test-largefiles.t
+++ b/tests/test-largefiles.t
@@ -44,13 +44,13 @@ Test status and dirstate of largefiles a
   $ sleep 1
   $ hg st
   $ hg debugstate --nodates
-  n 644         41 .hglf/large1
-  n 644         41 .hglf/sub/large2
-  n 644          8 normal1
-  n 644          8 sub/normal2
+  n 644         41 set                 .hglf/large1
+  n 644         41 set                 .hglf/sub/large2
+  n 644          8 set                 normal1
+  n 644          8 set                 sub/normal2
   $ hg debugstate --large --nodates
-  n 644          7 large1
-  n 644          7 sub/large2
+  n 644          7 set                 large1
+  n 644          7 set                 sub/large2
   $ echo normal11 > normal1
   $ echo normal22 > sub/normal2
   $ echo large11 > large1
diff --git a/tests/test-merge-remove.t b/tests/test-merge-remove.t
--- a/tests/test-merge-remove.t
+++ b/tests/test-merge-remove.t
@@ -21,8 +21,8 @@
   (branch merge, don't forget to commit)
 
   $ hg debugstate --nodates
-  m   0         -2 bar
-  m   0         -2 foo1
+  m   0         -2 unset               bar
+  m   0         -2 unset               foo1
   copy: foo -> foo1
 
   $ hg st -q
@@ -37,8 +37,8 @@ Removing foo1 and bar:
   $ hg rm -f foo1 bar
 
   $ hg debugstate --nodates
-  r   0         -1 bar
-  r   0         -1 foo1
+  r   0         -1 set                 bar
+  r   0         -1 set                 foo1
   copy: foo -> foo1
 
   $ hg st -qC
@@ -55,8 +55,8 @@ Re-adding foo1 and bar:
   adding foo1
 
   $ hg debugstate --nodates
-  n   0         -2 bar
-  n   0         -2 foo1
+  n   0         -2 unset               bar
+  n   0         -2 unset               foo1
   copy: foo -> foo1
 
   $ hg st -qC
@@ -74,8 +74,8 @@ Reverting foo1 and bar:
   reverting foo1
 
   $ hg debugstate --nodates
-  n   0         -2 bar
-  n   0         -2 foo1
+  n   0         -2 unset               bar
+  n   0         -2 unset               foo1
   copy: foo -> foo1
 
   $ hg st -qC
diff --git a/tests/test-rebuildstate.t b/tests/test-rebuildstate.t
--- a/tests/test-rebuildstate.t
+++ b/tests/test-rebuildstate.t
@@ -17,8 +17,8 @@ basic test for hg debugrebuildstate
 state dump after
 
   $ hg debugstate --nodates | sort
-  n 644         -1 bar
-  n 644         -1 foo
+  n 644         -1 set                 bar
+  n 644         -1 set                 foo
 
 status
 


More information about the Mercurial-devel mailing list