tests/test-hgweb-annotate-whitespace.t
changeset 34389 e16ad1576d71
child 34390 f6492f482c60
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/test-hgweb-annotate-whitespace.t	Sat Sep 30 09:07:00 2017 +0100
@@ -0,0 +1,788 @@
+#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 --config annotate.ignorews=true serve -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 (not implemented)
+
+  $ 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 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": ""
+  }
+
+ignorews=0 query string argument disables when config defaults to enabled (not implemented)
+
+  $ 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 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": ""
+  }
+
+ignorewsamount=1 query string enables whitespace amount skipping (not implemented)
+
+  $ 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 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": ""
+  }
+
+ignorewseol=1 query string enables whitespace end of line skipping (not implemented)
+
+  $ 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 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": ""
+  }
+
+ignoreblanklines=1 query string enables whitespace blank line skipping (not implemented)
+
+  $ 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": ""
+  }