[PATCH STABLE v2] debugrevlog: improve handling of empty manifests/changelogs

timeless timeless at mozdev.org
Fri Jan 29 18:04:53 UTC 2016


# HG changeset patch
# User timeless <timeless at mozdev.org>
# Date 1453754438 0
#      Mon Jan 25 20:40:38 2016 +0000
# Branch stable
# Node ID 8811fe5c3ab8808191f1eddbb2467718285f7b14
# Parent  7cb7264cfd52d2672644db4bc16a0bd50aa093ca
debugrevlog: improve handling of empty manifests/changelogs

issue5062

diff --git a/mercurial/cmdutil.py b/mercurial/cmdutil.py
--- a/mercurial/cmdutil.py
+++ b/mercurial/cmdutil.py
@@ -507,8 +507,8 @@
             filelog = repo.file(file_)
             if len(filelog):
                 r = filelog
-    if not r:
-        if not file_:
+    if r is None:
+        if not any([cl, dir, mf, file_]):
             raise error.CommandError(cmd, _('invalid arguments'))
         if not os.path.isfile(file_):
             raise error.Abort(_("revlog '%s' not found") % file_)
diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -2634,8 +2634,8 @@
         except IndexError:
             prevrev = -1
 
-        chainratio = float(chainsize) / float(uncomp)
-        extraratio = float(extradist) / float(chainsize)
+        chainratio = uncomp and float(chainsize) / float(uncomp)
+        extraratio = chainsize and float(extradist) / float(chainsize)
 
         fm.startitem()
         fm.write('rev chainid chainlen prevrev deltatype compsize '
@@ -3283,18 +3283,19 @@
     numdeltas = numrevs - numfull
     numoprev = numprev - nump1prev - nump2prev
     totalrawsize = datasize[2]
-    datasize[2] /= numrevs
-    fulltotal = fullsize[2]
-    fullsize[2] /= numfull
-    deltatotal = deltasize[2]
-    if numrevs - numfull > 0:
-        deltasize[2] /= numrevs - numfull
-    totalsize = fulltotal + deltatotal
-    avgchainlen = sum(chainlengths) / numrevs
-    maxchainlen = max(chainlengths)
-    compratio = 1
-    if totalsize:
-        compratio = totalrawsize / totalsize
+    if numrevs:
+        datasize[2] /= numrevs
+        fulltotal = fullsize[2]
+        fullsize[2] /= numfull
+        deltatotal = deltasize[2]
+        if numdeltas > 0:
+            deltasize[2] /= numdeltas
+        totalsize = fulltotal + deltatotal
+        avgchainlen = sum(chainlengths) / numrevs
+        maxchainlen = max(chainlengths)
+        compratio = 1
+        if totalsize:
+            compratio = totalrawsize / totalsize
 
     basedfmtstr = '%%%dd\n'
     basepcfmtstr = '%%%dd %s(%%5.2f%%%%)\n'
@@ -3313,24 +3314,32 @@
     ui.write(('format : %d\n') % format)
     ui.write(('flags  : %s\n') % ', '.join(flags))
 
-    ui.write('\n')
-    fmt = pcfmtstr(totalsize)
-    fmt2 = dfmtstr(totalsize)
-    ui.write(('revisions     : ') + fmt2 % numrevs)
-    ui.write(('    merges    : ') + fmt % pcfmt(nummerges, numrevs))
-    ui.write(('    normal    : ') + fmt % pcfmt(numrevs - nummerges, numrevs))
-    ui.write(('revisions     : ') + fmt2 % numrevs)
-    ui.write(('    full      : ') + fmt % pcfmt(numfull, numrevs))
-    ui.write(('    deltas    : ') + fmt % pcfmt(numdeltas, numrevs))
-    ui.write(('revision size : ') + fmt2 % totalsize)
-    ui.write(('    full      : ') + fmt % pcfmt(fulltotal, totalsize))
-    ui.write(('    deltas    : ') + fmt % pcfmt(deltatotal, totalsize))
-
-    ui.write('\n')
-    fmt = dfmtstr(max(avgchainlen, compratio))
-    ui.write(('avg chain length  : ') + fmt % avgchainlen)
-    ui.write(('max chain length  : ') + fmt % maxchainlen)
-    ui.write(('compression ratio : ') + fmt % compratio)
+    if numrevs:
+        ui.write('\n')
+        if totalrawsize:
+            fmt = pcfmtstr(totalsize)
+            fmt2 = dfmtstr(totalsize)
+        else:
+            fmt = pcfmtstr(numrevs)
+            fmt2 = dfmtstr(numrevs)
+        ui.write(('revisions     : ') + fmt2 % numrevs)
+        ui.write(('    merges    : ') + fmt % pcfmt(nummerges, numrevs))
+        ui.write(('    normal    : ') + fmt %
+                 pcfmt(numrevs - nummerges, numrevs))
+        ui.write(('revisions     : ') + fmt2 % numrevs)
+        ui.write(('    full      : ') + fmt % pcfmt(numfull, numrevs))
+        ui.write(('    deltas    : ') + fmt % pcfmt(numdeltas, numrevs))
+    if totalrawsize:
+        ui.write(('revision size : ') + fmt2 % totalsize)
+        ui.write(('    full      : ') + fmt % pcfmt(fulltotal, totalsize))
+        ui.write(('    deltas    : ') + fmt % pcfmt(deltatotal, totalsize))
+
+    if chainlengths:
+        ui.write('\n')
+        fmt = dfmtstr(max(avgchainlen, compratio))
+        ui.write(('avg chain length  : ') + fmt % avgchainlen)
+        ui.write(('max chain length  : ') + fmt % maxchainlen)
+        ui.write(('compression ratio : ') + fmt % compratio)
 
     if format > 0:
         ui.write('\n')
diff --git a/tests/bundles/issue5062.hg b/tests/bundles/issue5062.hg
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..4ab60c676af49435fd7f8761d7e91f8bd2e8de9b
GIT binary patch
literal 360
zc$@)f0hj(rM=~$~000g{Z*6dLWpi_BZ*Dz8T0&ZAIWa+5CR16qrt7l+00sZw_?`p;
zL<j%yYTMEPzwQ5^3jh%U0CWN%A_xK?Kv6IN`(}hGJrU at DG|&wI28 at Fs00Yth4^XOm
zN`9hb$OeD_X`!G7gVX~c13&{%nvY1)qd?GlfB*mh00w{nqF1wt;XoECH?m+rsXz-9
ziNd{??V4!P;wMS3_9j!!eKAw!jP%q%m9#Lq!8mZGK{S(*BBJ?3Y>1RZ!~i-00W=G3
zK^00yR9Q6>c>If$A7*R9;EJ!1kP}>WoH;RKZ}6CRjW2_nR=6K_8r2D8+F)bNCUh}a
zD57hSOLe45!BgK}JV>t_=mvEq<3$7sMOC*S0A14o3Nj8=2QXumaOE(|)SpRgH|VH9
zK!jnfgk&;cf)j`t9a%{qMIfkglY3ubPM>po936!J9**x`#O?{i=M_MIi at 744C`emV
Gb=iP~qL29i

diff --git a/tests/test-debugcommands.t b/tests/test-debugcommands.t
--- a/tests/test-debugcommands.t
+++ b/tests/test-debugcommands.t
@@ -5,18 +5,69 @@
 
   $ hg init debugrevlog
   $ cd debugrevlog
-  $ echo a > a
-  $ hg ci -Am adda
-  adding a
+  $ hg debugrevlog -c
+  format : 1
+  flags  : inline
+  
+  uncompressed data size (min/max/avg) : 0 / 0 / 0
+  full revision size (min/max/avg)     : 0 / 0 / 0
+  delta size (min/max/avg)             : 0 / 0 / 0
   $ hg debugrevlog -m
   format : 1
   flags  : inline, generaldelta
   
-  revisions     :  1
+  uncompressed data size (min/max/avg) : 0 / 0 / 0
+  full revision size (min/max/avg)     : 0 / 0 / 0
+  delta size (min/max/avg)             : 0 / 0 / 0
+  $ hg commit --config ui.allowemptycommit=True -m 'empty'
+  $ hg debugrevlog -m
+  format : 1
+  flags  : inline, generaldelta
+  
+  uncompressed data size (min/max/avg) : 0 / 0 / 0
+  full revision size (min/max/avg)     : 0 / 0 / 0
+  delta size (min/max/avg)             : 0 / 0 / 0
+  $ hg rollback
+  repository tip rolled back to revision -1 (undo commit)
+  working directory now based on revision -1
+  $ hg pull "$TESTDIR/bundles/issue5062.hg" -r 0
+  pulling from /home/timeless/hg/crew/tests/bundles/issue5062.hg
+  adding changesets
+  adding manifests
+  adding file changes
+  added 1 changesets with 0 changes to 0 files
+  (run 'hg update' to get a working copy)
+  $ hg debugrevlog -m
+  format : 1
+  flags  : inline, generaldelta
+  
+  revisions     : 1
+      merges    : 0 ( 0.00%)
+      normal    : 1 (100.00%)
+  revisions     : 1
+      full      : 1 (100.00%)
+      deltas    : 0 ( 0.00%)
+  
+  avg chain length  : 0
+  max chain length  : 0
+  compression ratio : 1
+  
+  uncompressed data size (min/max/avg) : 0 / 0 / 0
+  full revision size (min/max/avg)     : 0 / 0 / 0
+  delta size (min/max/avg)             : 0 / 0 / 0
+  $ echo a > a
+  $ hg ci -Am adda
+  adding a
+  created new head
+  $ hg debugrevlog -m
+  format : 1
+  flags  : inline, generaldelta
+  
+  revisions     :  2
       merges    :  0 ( 0.00%)
-      normal    :  1 (100.00%)
-  revisions     :  1
-      full      :  1 (100.00%)
+      normal    :  2 (100.00%)
+  revisions     :  2
+      full      :  2 (100.00%)
       deltas    :  0 ( 0.00%)
   revision size : 44
       full      : 44 (100.00%)
@@ -26,38 +77,54 @@
   max chain length  : 0
   compression ratio : 0
   
-  uncompressed data size (min/max/avg) : 43 / 43 / 43
-  full revision size (min/max/avg)     : 44 / 44 / 44
+  uncompressed data size (min/max/avg) : 0 / 43 / 21
+  full revision size (min/max/avg)     : 0 / 44 / 22
   delta size (min/max/avg)             : 0 / 0 / 0
 
 Test debugindex, with and without the --debug flag
   $ hg debugindex a
      rev    offset  length  ..... linkrev nodeid       p1           p2 (re)
-       0         0       3   ....       0 b789fdd96dc2 000000000000 000000000000 (re)
+       0         0       3   ....       1 b789fdd96dc2 000000000000 000000000000 (re)
   $ hg --debug debugindex a
      rev    offset  length  ..... linkrev nodeid                                   p1                                       p2 (re)
-       0         0       3   ....       0 b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 (re)
+       0         0       3   ....       1 b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3 0000000000000000000000000000000000000000 0000000000000000000000000000000000000000 (re)
   $ hg debugindex -f 1 a
      rev flag   offset   length     size  .....   link     p1     p2       nodeid (re)
-       0 0000        0        3        2   ....      0     -1     -1 b789fdd96dc2 (re)
+       0 0000        0        3        2   ....      1     -1     -1 b789fdd96dc2 (re)
   $ hg --debug debugindex -f 1 a
      rev flag   offset   length     size  .....   link     p1     p2                                   nodeid (re)
-       0 0000        0        3        2   ....      0     -1     -1 b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3 (re)
+       0 0000        0        3        2   ....      1     -1     -1 b789fdd96dc2f3bd229c1dd8eedf0fc60e2b68e3 (re)
 
 debugdelta chain basic output
 
   $ hg debugdeltachain -m
       rev  chain# chainlen     prev   delta       size    rawsize  chainsize     ratio   lindist extradist extraratio
-        0       1        1       -1    base         44         43         44   1.02326        44         0    0.00000
+        0       1        1       -1    base          0          0          0   0.00000         0         0    0.00000
+        1       2        1       -1    base         44         43         44   1.02326        44         0    0.00000
 
   $ hg debugdeltachain -m -T '{rev} {chainid} {chainlen}\n'
   0 1 1
+  1 2 1
 
   $ hg debugdeltachain -m -Tjson
   [
    {
     "chainid": 1,
     "chainlen": 1,
+    "chainratio": 0,
+    "chainsize": 0,
+    "compsize": 0,
+    "deltatype": "base",
+    "extradist": 0,
+    "extraratio": 0,
+    "lindist": 0,
+    "prevrev": -1,
+    "rev": 0,
+    "uncompsize": 0
+   },
+   {
+    "chainid": 2,
+    "chainlen": 1,
     "chainratio": 1.02325581395,
     "chainsize": 44,
     "compsize": 44,
@@ -66,7 +133,7 @@
     "extraratio": 0.0,
     "lindist": 44,
     "prevrev": -1,
-    "rev": 0,
+    "rev": 1,
     "uncompsize": 43
    }
   ]


More information about the Mercurial-devel mailing list