Patchwork [Bug,4236] New: hg log on a normal file aborts with the largefiles extension enabled

login
register
mail settings
Submitter mercurial-bugs@selenic.com
Date May 1, 2014, 5:15 a.m.
Message ID <bug-4236-285@http.bz.selenic.com/>
Download mbox | patch
Permalink /patch/4460/
State Not Applicable
Headers show

Comments

mercurial-bugs@selenic.com - May 1, 2014, 5:15 a.m.
http://bz.selenic.com/show_bug.cgi?id=4236

          Priority: normal
            Bug ID: 4236
                CC: mercurial-devel@selenic.com, natosha@gmail.com
          Assignee: bugzilla@selenic.com
           Summary: hg log on a normal file aborts with the largefiles
                    extension enabled
          Severity: bug
    Classification: Unclassified
                OS: All
          Reporter: matt_harbison@yahoo.com
          Hardware: PC
            Status: UNCONFIRMED
           Version: 3.0-rc
         Component: largefiles
           Product: Mercurial

I ran the test suite like so, to see where the largefiles extension diverges
from when it isn't loaded:

  $ run-tests.py -l --extra-config-opt extensions.largefiles= test-glog.t

and got several changes.  The first thing I noticed was the path in the abort
message would change from run to run, and sometimes the path didn't look
reasonable.  This appears to be caused by the order of the entries in the set
'pats' in largefiles.overrides.overridelog() changing from run to run- it
appears that it gets 2 entries for each file listed on the command line.

I "fixed" the bad path by changing this line in overridelog():

            pats.update(back + lfutil.standin(m._cwd + '/' + f) for f in p)

to:
            pats.update(m._root + '/' + lfutil.standin(f) for f in p)

but it still complained about the .hglf/<file> missing for these normal files. 
Maybe it shouldn't be adding a standin file when the item isn't a largefile?


The culprit is this commit from a couple of weeks ago.  Reverting it yields a
clean run on test-glog.t.

  changeset:   21134:49e13e76ec5a
  user:        Lucas Moscovicz <lmoscovicz@fb.com>
  date:        Wed Mar 05 15:55:09 2014 -0800
  summary:     largefiles: changed overridelog to work with graphlog


The initial diff against e9c2f76be74b (the latest stable without the "fix") is
this:


ERROR: test-glog.t output changed

It switches back and forth between the different paths pretty regularly.  I
also reproduced this on Fedora 16.

Patch

diff --git a/tests/test-glog.t b/tests/test-glog.t
--- a/tests/test-glog.t
+++ b/tests/test-glog.t
@@ -1138,22 +1138,14 @@ 

 From outer space:
   $ hg log -G -l1 repo
-  @  changeset:   34:fea3ac5810e0
-  |  tag:         tip
-  |  parent:      32:d06dffa21a31
-  |  user:        test
-  |  date:        Thu Jan 01 00:00:34 1970 +0000
-  |  summary:     (34) head
-  |
+  abort: ../.hglf/$TESTTMP/repo not under root '$TESTTMP\repo'
+  [255]
   $ hg log -G -l1 repo/a
-  @  changeset:   34:fea3ac5810e0
-  |  tag:         tip
-  |  parent:      32:d06dffa21a31
-  |  user:        test
-  |  date:        Thu Jan 01 00:00:34 1970 +0000
-  |  summary:     (34) head
-  |
+  abort: ../.hglf/$TESTTMP/repo/a not under root '$TESTTMP\repo'
+  [255]
   $ hg log -G -l1 repo/missing
+  abort: ../.hglf/$TESTTMP/repo/missing not under root '$TESTTMP\repo'
+  [255]

 #endif

@@ -1858,76 +1850,17 @@ 
   |

   $ hg log -G --git --patch --follow b
-  o  changeset:   1:216d4c92cf98
-  |  user:        test
-  |  date:        Thu Jan 01 00:00:00 1970 +0000
-  |  summary:     copy a b
-  |
-  |  diff --git a/a b/b
-  |  copy from a
-  |  copy to b
-  |
-  o  changeset:   0:f8035bb17114
-     user:        test
-     date:        Thu Jan 01 00:00:00 1970 +0000
-     summary:     add a
-  
-     diff --git a/a b/a
-     new file mode 100644
-     --- /dev/null
-     +++ b/a
-     @@ -0,0 +1,1 @@
-     +a
-  
+  abort: .hglf/b@5918b8d165d1: not found in manifest!
+  [255]

   $ hg log -G --git --stat --follow b
-  o  changeset:   1:216d4c92cf98
-  |  user:        test
-  |  date:        Thu Jan 01 00:00:00 1970 +0000
-  |  summary:     copy a b
-  |
-  |   b |  0
-  |   1 files changed, 0 insertions(+), 0 deletions(-)
-  |
-  o  changeset:   0:f8035bb17114
-     user:        test
-     date:        Thu Jan 01 00:00:00 1970 +0000
-     summary:     add a
-  
-      a |  1 +
-      1 files changed, 1 insertions(+), 0 deletions(-)
-  
+  abort: .hglf/b@5918b8d165d1: not found in manifest!
+  [255]

   $ hg up -q 6
   $ hg log -G --git --patch --follow-first e
-  @    changeset:   6:fc281d8ff18d
-  |\   tag:         tip
-  | |  parent:      5:99b31f1c2782
-  | |  parent:      4:17d952250a9d
-  | |  user:        test
-  | |  date:        Thu Jan 01 00:00:00 1970 +0000
-  | |  summary:     merge 5 and 4
-  | |
-  | |  diff --git a/e b/e
-  | |  --- a/e
-  | |  +++ b/e
-  | |  @@ -1,1 +1,1 @@
-  | |  -ee
-  | |  +merge
-  | |
-  o |  changeset:   5:99b31f1c2782
-  | |  parent:      3:5918b8d165d1
-  | |  user:        test
-  | |  date:        Thu Jan 01 00:00:00 1970 +0000
-  | |  summary:     add another e
-  | |
-  | |  diff --git a/e b/e
-  | |  new file mode 100644
-  | |  --- /dev/null
-  | |  +++ b/e
-  | |  @@ -0,0 +1,1 @@
-  | |  +ee
-  | |
+  abort: .hglf/e@fc281d8ff18d: not found in manifest!
+  [255]

 Test old-style --rev


A subsequent run then yielded this diff, without any code changes (and without
the m._root + ... "fix"):

$ ./run-tests.py -l -i --extra-config-opt extensions.largefiles= test-glog.t

--- c:\Users\Matt\Projects\hg\tests\test-glog.t
+++ c:\Users\Matt\Projects\hg\tests\test-glog.t.err
@@ -1138,13 +1138,13 @@ 

 From outer space:
   $ hg log -G -l1 repo
-  abort: ../.hglf/$TESTTMP/repo not under root '$TESTTMP\repo'
+  abort: .hglf/. not under root '$TESTTMP\repo'
   [255]
   $ hg log -G -l1 repo/a
-  abort: ../.hglf/$TESTTMP/repo/a not under root '$TESTTMP\repo'
+  abort: .hglf/a not under root '$TESTTMP\repo'
   [255]
   $ hg log -G -l1 repo/missing
-  abort: ../.hglf/$TESTTMP/repo/missing not under root '$TESTTMP\repo'
+  abort: .hglf/missing not under root '$TESTTMP\repo'
   [255]

 #endif