Mercurial > hg
view tests/test-hgweb-annotate-whitespace.t @ 39872:733db72f0f54
revlog: move revision verification out of verify
File revision verification is performing low-level checks of file
storage, namely that flags are appropriate and revision data can
be resolved.
Since these checks are somewhat revlog-specific and may not
be appropriate for alternate storage backends, this commit moves
those checks from verify.py to revlog.py.
Because we're now emitting warnings/errors that apply to specific
revisions, we taught the iverifyproblem interface to expose the
problematic node and to report this node in verify output. This
was necessary to prevent unwanted test changes.
After this change, revlog.verifyintegrity() and file verify code
in verify.py both iterate over revisions and resolve their fulltext.
But they do so in separate loops. (verify.py needs to resolve
fulltexts as part of calling renamed() - at least when using revlogs.)
This should add overhead.
But on the mozilla-unified repo:
$ hg verify
before: time: real 700.640 secs (user 585.520+0.000 sys 23.480+0.000)
after: time: real 682.380 secs (user 570.370+0.000 sys 22.240+0.000)
I'm not sure what's going on. Maybe avoiding the filelog attribute
proxies shaved off enough time to offset the losses? Maybe fulltext
resolution has less overhead than I thought?
I've left a comment indicating the potential for optimization. But
because it doesn't produce a performance regression on a large
repository, I'm not going to worry about it.
Differential Revision: https://phab.mercurial-scm.org/D4745
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Mon, 24 Sep 2018 11:27:47 -0700 |
parents | 3b4b38130689 |
children |
line wrap: on
line source
#require serve Create a repo with whitespace only changes $ hg init repo-with-whitespace $ cd repo-with-whitespace $ cat > foo << EOF > line 0 > line 1 > line 2 > line 3 > EOF $ hg -q commit -A -m 'commit 0' $ cat > foo << EOF > line 0 > line 1 modified by 1 > line 2 > line 3 > EOF $ hg commit -m 'commit 1' $ cat > foo << EOF > line 0 > line 1 modified by 1 > line 2 > line 3 > EOF $ hg commit -m 'commit 2 (leading whitespace on line 2)' $ cat > foo << EOF > line 0 > line 1 modified by 1 > line 2 > EOF Need to use printf to avoid check-code complaining about trailing whitespace. $ printf 'line 3 \n' >> foo $ hg commit -m 'commit 3 (trailing whitespace on line 3)' $ cat > foo << EOF > line 0 > line 1 modified by 1 > line 2 > EOF $ printf 'line 3 \n' >> foo $ hg commit -m 'commit 4 (intra whitespace on line 0)' $ cat > foo << EOF > line 0 > > line 1 modified by 1 > line 2 > EOF $ printf 'line 3 \n' >> foo $ hg commit -m 'commit 5 (add blank line between line 0 and 1)' $ cat > foo << EOF > line 0 > > > line 1 modified by 1 > line 2 > EOF $ printf 'line 3 \n' >> foo $ hg commit -m 'commit 6 (add another blank line between line 0 and 1)' $ hg log -G -T '{rev}:{node|short} {desc}' @ 6:9d1b2c7db017 commit 6 (add another blank line between line 0 and 1) | o 5:400ef1d40470 commit 5 (add blank line between line 0 and 1) | o 4:08adbe269f24 commit 4 (intra whitespace on line 0) | o 3:dcb62cfbfc9b commit 3 (trailing whitespace on line 3) | o 2:6bdb694e7b8c commit 2 (leading whitespace on line 2) | o 1:23e1e37387dc commit 1 | o 0:b9c578134d72 commit 0 $ hg serve -p $HGPORT -d --pid-file hg.pid $ cat hg.pid >> $DAEMON_PIDS $ hg serve --config annotate.ignorews=true -p $HGPORT1 -d --pid-file hg.pid $ cat hg.pid >> $DAEMON_PIDS $ cd .. Annotate works $ get-with-headers.py --json $LOCALIP:$HGPORT 'json-annotate/9d1b2c7db017/foo' 200 Script output follows { "abspath": "foo", "annotate": [ { "abspath": "foo", "author": "test", "desc": "commit 4 (intra whitespace on line 0)", "line": "line 0\n", "lineno": 1, "node": "08adbe269f24cf22d975eadeec16790c5b22f558", "revdate": [ 0.0, 0 ], "targetline": 1 }, { "abspath": "foo", "author": "test", "desc": "commit 5 (add blank line between line 0 and 1)", "line": "\n", "lineno": 2, "node": "400ef1d404706cfb48afd2b78ce6addf641ced25", "revdate": [ 0.0, 0 ], "targetline": 2 }, { "abspath": "foo", "author": "test", "desc": "commit 6 (add another blank line between line 0 and 1)", "line": "\n", "lineno": 3, "node": "9d1b2c7db0175870a950f8c48c9c4ead1058f2c5", "revdate": [ 0.0, 0 ], "targetline": 3 }, { "abspath": "foo", "author": "test", "desc": "commit 1", "line": "line 1 modified by 1\n", "lineno": 4, "node": "23e1e37387dcfca4c0ed0cc568d1e4b9bfed241a", "revdate": [ 0.0, 0 ], "targetline": 2 }, { "abspath": "foo", "author": "test", "desc": "commit 2 (leading whitespace on line 2)", "line": " line 2\n", "lineno": 5, "node": "6bdb694e7b8cebb68d5b6b27b4bcc2a49d62c602", "revdate": [ 0.0, 0 ], "targetline": 3 }, { "abspath": "foo", "author": "test", "desc": "commit 3 (trailing whitespace on line 3)", "line": "line 3 \n", "lineno": 6, "node": "dcb62cfbfc9b3ab995a5cbbaff6e1971c3e4f865", "revdate": [ 0.0, 0 ], "targetline": 4 } ], "author": "test", "children": [], "date": [ 0.0, 0 ], "desc": "commit 6 (add another blank line between line 0 and 1)", "node": "9d1b2c7db0175870a950f8c48c9c4ead1058f2c5", "parents": [ "400ef1d404706cfb48afd2b78ce6addf641ced25" ], "permissions": "" } annotate.ignorews=1 config option is honored $ get-with-headers.py --json $LOCALIP:$HGPORT1 'json-annotate/9d1b2c7db017/foo' 200 Script output follows { "abspath": "foo", "annotate": [ { "abspath": "foo", "author": "test", "desc": "commit 0", "line": "line 0\n", "lineno": 1, "node": "b9c578134d72b3a9d26afde8ddd76c0a93c5adbc", "revdate": [ 0.0, 0 ], "targetline": 1 }, { "abspath": "foo", "author": "test", "desc": "commit 5 (add blank line between line 0 and 1)", "line": "\n", "lineno": 2, "node": "400ef1d404706cfb48afd2b78ce6addf641ced25", "revdate": [ 0.0, 0 ], "targetline": 2 }, { "abspath": "foo", "author": "test", "desc": "commit 6 (add another blank line between line 0 and 1)", "line": "\n", "lineno": 3, "node": "9d1b2c7db0175870a950f8c48c9c4ead1058f2c5", "revdate": [ 0.0, 0 ], "targetline": 3 }, { "abspath": "foo", "author": "test", "desc": "commit 1", "line": "line 1 modified by 1\n", "lineno": 4, "node": "23e1e37387dcfca4c0ed0cc568d1e4b9bfed241a", "revdate": [ 0.0, 0 ], "targetline": 2 }, { "abspath": "foo", "author": "test", "desc": "commit 0", "line": " line 2\n", "lineno": 5, "node": "b9c578134d72b3a9d26afde8ddd76c0a93c5adbc", "revdate": [ 0.0, 0 ], "targetline": 3 }, { "abspath": "foo", "author": "test", "desc": "commit 0", "line": "line 3 \n", "lineno": 6, "node": "b9c578134d72b3a9d26afde8ddd76c0a93c5adbc", "revdate": [ 0.0, 0 ], "targetline": 4 } ], "author": "test", "children": [], "date": [ 0.0, 0 ], "desc": "commit 6 (add another blank line between line 0 and 1)", "node": "9d1b2c7db0175870a950f8c48c9c4ead1058f2c5", "parents": [ "400ef1d404706cfb48afd2b78ce6addf641ced25" ], "permissions": "" } ignorews=1 query string argument enables whitespace skipping $ get-with-headers.py --json $LOCALIP:$HGPORT 'json-annotate/9d1b2c7db017/foo?ignorews=1' 200 Script output follows { "abspath": "foo", "annotate": [ { "abspath": "foo", "author": "test", "desc": "commit 0", "line": "line 0\n", "lineno": 1, "node": "b9c578134d72b3a9d26afde8ddd76c0a93c5adbc", "revdate": [ 0.0, 0 ], "targetline": 1 }, { "abspath": "foo", "author": "test", "desc": "commit 5 (add blank line between line 0 and 1)", "line": "\n", "lineno": 2, "node": "400ef1d404706cfb48afd2b78ce6addf641ced25", "revdate": [ 0.0, 0 ], "targetline": 2 }, { "abspath": "foo", "author": "test", "desc": "commit 6 (add another blank line between line 0 and 1)", "line": "\n", "lineno": 3, "node": "9d1b2c7db0175870a950f8c48c9c4ead1058f2c5", "revdate": [ 0.0, 0 ], "targetline": 3 }, { "abspath": "foo", "author": "test", "desc": "commit 1", "line": "line 1 modified by 1\n", "lineno": 4, "node": "23e1e37387dcfca4c0ed0cc568d1e4b9bfed241a", "revdate": [ 0.0, 0 ], "targetline": 2 }, { "abspath": "foo", "author": "test", "desc": "commit 0", "line": " line 2\n", "lineno": 5, "node": "b9c578134d72b3a9d26afde8ddd76c0a93c5adbc", "revdate": [ 0.0, 0 ], "targetline": 3 }, { "abspath": "foo", "author": "test", "desc": "commit 0", "line": "line 3 \n", "lineno": 6, "node": "b9c578134d72b3a9d26afde8ddd76c0a93c5adbc", "revdate": [ 0.0, 0 ], "targetline": 4 } ], "author": "test", "children": [], "date": [ 0.0, 0 ], "desc": "commit 6 (add another blank line between line 0 and 1)", "node": "9d1b2c7db0175870a950f8c48c9c4ead1058f2c5", "parents": [ "400ef1d404706cfb48afd2b78ce6addf641ced25" ], "permissions": "" } ignorews=0 query string argument disables when config defaults to enabled $ get-with-headers.py --json $LOCALIP:$HGPORT1 'json-annotate/9d1b2c7db017/foo?ignorews=0' 200 Script output follows { "abspath": "foo", "annotate": [ { "abspath": "foo", "author": "test", "desc": "commit 4 (intra whitespace on line 0)", "line": "line 0\n", "lineno": 1, "node": "08adbe269f24cf22d975eadeec16790c5b22f558", "revdate": [ 0.0, 0 ], "targetline": 1 }, { "abspath": "foo", "author": "test", "desc": "commit 5 (add blank line between line 0 and 1)", "line": "\n", "lineno": 2, "node": "400ef1d404706cfb48afd2b78ce6addf641ced25", "revdate": [ 0.0, 0 ], "targetline": 2 }, { "abspath": "foo", "author": "test", "desc": "commit 6 (add another blank line between line 0 and 1)", "line": "\n", "lineno": 3, "node": "9d1b2c7db0175870a950f8c48c9c4ead1058f2c5", "revdate": [ 0.0, 0 ], "targetline": 3 }, { "abspath": "foo", "author": "test", "desc": "commit 1", "line": "line 1 modified by 1\n", "lineno": 4, "node": "23e1e37387dcfca4c0ed0cc568d1e4b9bfed241a", "revdate": [ 0.0, 0 ], "targetline": 2 }, { "abspath": "foo", "author": "test", "desc": "commit 2 (leading whitespace on line 2)", "line": " line 2\n", "lineno": 5, "node": "6bdb694e7b8cebb68d5b6b27b4bcc2a49d62c602", "revdate": [ 0.0, 0 ], "targetline": 3 }, { "abspath": "foo", "author": "test", "desc": "commit 3 (trailing whitespace on line 3)", "line": "line 3 \n", "lineno": 6, "node": "dcb62cfbfc9b3ab995a5cbbaff6e1971c3e4f865", "revdate": [ 0.0, 0 ], "targetline": 4 } ], "author": "test", "children": [], "date": [ 0.0, 0 ], "desc": "commit 6 (add another blank line between line 0 and 1)", "node": "9d1b2c7db0175870a950f8c48c9c4ead1058f2c5", "parents": [ "400ef1d404706cfb48afd2b78ce6addf641ced25" ], "permissions": "" } ignorewsamount=1 query string enables whitespace amount skipping $ get-with-headers.py --json $LOCALIP:$HGPORT 'json-annotate/9d1b2c7db017/foo?ignorewsamount=1' 200 Script output follows { "abspath": "foo", "annotate": [ { "abspath": "foo", "author": "test", "desc": "commit 0", "line": "line 0\n", "lineno": 1, "node": "b9c578134d72b3a9d26afde8ddd76c0a93c5adbc", "revdate": [ 0.0, 0 ], "targetline": 1 }, { "abspath": "foo", "author": "test", "desc": "commit 5 (add blank line between line 0 and 1)", "line": "\n", "lineno": 2, "node": "400ef1d404706cfb48afd2b78ce6addf641ced25", "revdate": [ 0.0, 0 ], "targetline": 2 }, { "abspath": "foo", "author": "test", "desc": "commit 6 (add another blank line between line 0 and 1)", "line": "\n", "lineno": 3, "node": "9d1b2c7db0175870a950f8c48c9c4ead1058f2c5", "revdate": [ 0.0, 0 ], "targetline": 3 }, { "abspath": "foo", "author": "test", "desc": "commit 1", "line": "line 1 modified by 1\n", "lineno": 4, "node": "23e1e37387dcfca4c0ed0cc568d1e4b9bfed241a", "revdate": [ 0.0, 0 ], "targetline": 2 }, { "abspath": "foo", "author": "test", "desc": "commit 2 (leading whitespace on line 2)", "line": " line 2\n", "lineno": 5, "node": "6bdb694e7b8cebb68d5b6b27b4bcc2a49d62c602", "revdate": [ 0.0, 0 ], "targetline": 3 }, { "abspath": "foo", "author": "test", "desc": "commit 0", "line": "line 3 \n", "lineno": 6, "node": "b9c578134d72b3a9d26afde8ddd76c0a93c5adbc", "revdate": [ 0.0, 0 ], "targetline": 4 } ], "author": "test", "children": [], "date": [ 0.0, 0 ], "desc": "commit 6 (add another blank line between line 0 and 1)", "node": "9d1b2c7db0175870a950f8c48c9c4ead1058f2c5", "parents": [ "400ef1d404706cfb48afd2b78ce6addf641ced25" ], "permissions": "" } ignorewseol=1 query string enables whitespace end of line skipping $ get-with-headers.py --json $LOCALIP:$HGPORT 'json-annotate/9d1b2c7db017/foo?ignorewseol=1' 200 Script output follows { "abspath": "foo", "annotate": [ { "abspath": "foo", "author": "test", "desc": "commit 4 (intra whitespace on line 0)", "line": "line 0\n", "lineno": 1, "node": "08adbe269f24cf22d975eadeec16790c5b22f558", "revdate": [ 0.0, 0 ], "targetline": 1 }, { "abspath": "foo", "author": "test", "desc": "commit 5 (add blank line between line 0 and 1)", "line": "\n", "lineno": 2, "node": "400ef1d404706cfb48afd2b78ce6addf641ced25", "revdate": [ 0.0, 0 ], "targetline": 2 }, { "abspath": "foo", "author": "test", "desc": "commit 6 (add another blank line between line 0 and 1)", "line": "\n", "lineno": 3, "node": "9d1b2c7db0175870a950f8c48c9c4ead1058f2c5", "revdate": [ 0.0, 0 ], "targetline": 3 }, { "abspath": "foo", "author": "test", "desc": "commit 1", "line": "line 1 modified by 1\n", "lineno": 4, "node": "23e1e37387dcfca4c0ed0cc568d1e4b9bfed241a", "revdate": [ 0.0, 0 ], "targetline": 2 }, { "abspath": "foo", "author": "test", "desc": "commit 2 (leading whitespace on line 2)", "line": " line 2\n", "lineno": 5, "node": "6bdb694e7b8cebb68d5b6b27b4bcc2a49d62c602", "revdate": [ 0.0, 0 ], "targetline": 3 }, { "abspath": "foo", "author": "test", "desc": "commit 0", "line": "line 3 \n", "lineno": 6, "node": "b9c578134d72b3a9d26afde8ddd76c0a93c5adbc", "revdate": [ 0.0, 0 ], "targetline": 4 } ], "author": "test", "children": [], "date": [ 0.0, 0 ], "desc": "commit 6 (add another blank line between line 0 and 1)", "node": "9d1b2c7db0175870a950f8c48c9c4ead1058f2c5", "parents": [ "400ef1d404706cfb48afd2b78ce6addf641ced25" ], "permissions": "" } ignoreblanklines=1 query string enables whitespace blank line skipping $ get-with-headers.py --json $LOCALIP:$HGPORT 'json-annotate/9d1b2c7db017/foo?ignoreblanklines=1' 200 Script output follows { "abspath": "foo", "annotate": [ { "abspath": "foo", "author": "test", "desc": "commit 4 (intra whitespace on line 0)", "line": "line 0\n", "lineno": 1, "node": "08adbe269f24cf22d975eadeec16790c5b22f558", "revdate": [ 0.0, 0 ], "targetline": 1 }, { "abspath": "foo", "author": "test", "desc": "commit 5 (add blank line between line 0 and 1)", "line": "\n", "lineno": 2, "node": "400ef1d404706cfb48afd2b78ce6addf641ced25", "revdate": [ 0.0, 0 ], "targetline": 2 }, { "abspath": "foo", "author": "test", "desc": "commit 6 (add another blank line between line 0 and 1)", "line": "\n", "lineno": 3, "node": "9d1b2c7db0175870a950f8c48c9c4ead1058f2c5", "revdate": [ 0.0, 0 ], "targetline": 3 }, { "abspath": "foo", "author": "test", "desc": "commit 1", "line": "line 1 modified by 1\n", "lineno": 4, "node": "23e1e37387dcfca4c0ed0cc568d1e4b9bfed241a", "revdate": [ 0.0, 0 ], "targetline": 2 }, { "abspath": "foo", "author": "test", "desc": "commit 2 (leading whitespace on line 2)", "line": " line 2\n", "lineno": 5, "node": "6bdb694e7b8cebb68d5b6b27b4bcc2a49d62c602", "revdate": [ 0.0, 0 ], "targetline": 3 }, { "abspath": "foo", "author": "test", "desc": "commit 3 (trailing whitespace on line 3)", "line": "line 3 \n", "lineno": 6, "node": "dcb62cfbfc9b3ab995a5cbbaff6e1971c3e4f865", "revdate": [ 0.0, 0 ], "targetline": 4 } ], "author": "test", "children": [], "date": [ 0.0, 0 ], "desc": "commit 6 (add another blank line between line 0 and 1)", "node": "9d1b2c7db0175870a950f8c48c9c4ead1058f2c5", "parents": [ "400ef1d404706cfb48afd2b78ce6addf641ced25" ], "permissions": "" }