summaryrefslogtreecommitdiffstats
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--test/CMakeLists.txt7
-rw-r--r--test/Makefile.am89
-rw-r--r--test/bad-config/formats/invalid-file-format/format.json27
-rw-r--r--test/bad-config/formats/invalid-no-tscap/format.json32
-rw-r--r--test/bad-config2/configs/invalid-annotation/config.json14
-rw-r--r--test/bad-config2/configs/invalid-theme/config.json20
-rw-r--r--test/books.json14
-rw-r--r--test/books.xml39
-rw-r--r--test/configs/installed/anno-test.json12
-rwxr-xr-xtest/configs/installed/anno-test.sh3
-rw-r--r--test/configs/installed/hw-url-handler.json10
-rw-r--r--test/configs/installed/hw-url-handler.lnav10
-rw-r--r--test/datafile_c.011
-rw-r--r--test/datafile_simple.116
-rw-r--r--test/datafile_simple.1417
-rw-r--r--test/datafile_simple.1583
-rw-r--r--test/datafile_simple.1825
-rw-r--r--test/datafile_simple.1953
-rw-r--r--test/datafile_simple.2017
-rw-r--r--test/datafile_simple.211
-rw-r--r--test/datafile_simple.2382
-rw-r--r--test/datafile_simple.2452
-rw-r--r--test/datafile_simple.2515
-rw-r--r--test/datafile_simple.711
-rw-r--r--test/datafile_simple.833
-rw-r--r--test/document.sections.tests.cc53
-rw-r--r--test/drive_data_scanner.cc7
-rw-r--r--test/drive_doc_discovery.cc120
-rw-r--r--test/drive_grep_proc.cc17
-rw-r--r--test/drive_listview.cc41
-rw-r--r--test/drive_logfile.cc4
-rw-r--r--test/drive_shlexer.cc61
-rw-r--r--test/drive_view_colors.cc6
-rw-r--r--test/example.patch102
-rw-r--r--test/example.toml38
-rw-r--r--test/expected/expected.am326
-rw-r--r--test/expected/test_cli.sh_0b3639753916f71254e8c9cce4ebb8bfd9978d3e.err (renamed from test/expected/test_cli.sh_a1a09f890f4604309d0a81bbbec8e50fb7d5e887.err)0
-rw-r--r--test/expected/test_cli.sh_0b3639753916f71254e8c9cce4ebb8bfd9978d3e.out5263
-rw-r--r--test/expected/test_cli.sh_108c6922cde063429f76abc3fdb8a81ad9a2f671.err (renamed from test/expected/test_cmds.sh_a0e6214b2a85c90d31aee12efde850441cca7eb3.err)0
-rw-r--r--test/expected/test_cli.sh_108c6922cde063429f76abc3fdb8a81ad9a2f671.out1
-rw-r--r--test/expected/test_cli.sh_10c33e465ef7681c6b5519d05d557426b26cd43d.err4
-rw-r--r--test/expected/test_cli.sh_10c33e465ef7681c6b5519d05d557426b26cd43d.out1
-rw-r--r--test/expected/test_cli.sh_3114508cf42fb2608ef77f4bc294a84885c97a79.err (renamed from test/expected/test_cmds.sh_d7eebacdcf2cb194f25fa4ef97b7b5376b442467.out)0
-rw-r--r--test/expected/test_cli.sh_3114508cf42fb2608ef77f4bc294a84885c97a79.out1
-rw-r--r--test/expected/test_cli.sh_4327033cfae0d4c170a38a3c4a570520bfabb493.err (renamed from test/expected/test_config.sh_5105c29004e297521310ca0bd0fd560b01c2c549.out)0
-rw-r--r--test/expected/test_cli.sh_4327033cfae0d4c170a38a3c4a570520bfabb493.out1
-rw-r--r--test/expected/test_cli.sh_76aa57821598962e59063a40c20171040c95a731.err (renamed from test/expected/test_format_loader.sh_3f1d6f35e8a9ae4fd3e91ffaa82a037b5a847ab7.out)0
-rw-r--r--test/expected/test_cli.sh_76aa57821598962e59063a40c20171040c95a731.out9
-rw-r--r--test/expected/test_cli.sh_a1a09f890f4604309d0a81bbbec8e50fb7d5e887.out3
-rw-r--r--test/expected/test_cli.sh_af3ace7762b4cc150fcdcac86083b379bded7b32.err (renamed from test/expected/test_format_loader.sh_a47f2b090a5d8a226783835c7ff7d1c8821f11ed.out)0
-rw-r--r--test/expected/test_cli.sh_af3ace7762b4cc150fcdcac86083b379bded7b32.out9
-rw-r--r--test/expected/test_cli.sh_c69c835a3c43210225cf62564b3e9584c899af20.err (renamed from test/expected/test_json_format.sh_90a037c7d9d70ac4ca97158271ea242787313377.err)0
-rw-r--r--test/expected/test_cli.sh_c69c835a3c43210225cf62564b3e9584c899af20.out4
-rw-r--r--test/expected/test_cli.sh_cc06341dd560f927512e92c7c0985ed8b25827ae.err (renamed from test/expected/test_json_format.sh_a6be47f1311ed92feaf303142fcb103deb80f456.err)0
-rw-r--r--test/expected/test_cli.sh_cc06341dd560f927512e92c7c0985ed8b25827ae.out1187
-rw-r--r--test/expected/test_cli.sh_f2e41555f1a5f40f54ce241207af602ed1503a2b.out4
-rw-r--r--test/expected/test_cli.sh_ff7da172f4350a2adb74b8764575823d798ed8b6.err (renamed from test/expected/test_logfile.sh_1c6eee38f66356fcd9a9f0faedaea6dbcc901060.err)0
-rw-r--r--test/expected/test_cli.sh_ff7da172f4350a2adb74b8764575823d798ed8b6.out2
-rw-r--r--test/expected/test_cmds.sh_015ffe79a08f4c9f0cd1cb84c6afa4398f879fc7.err7
-rw-r--r--test/expected/test_cmds.sh_015ffe79a08f4c9f0cd1cb84c6afa4398f879fc7.out (renamed from test/expected/test_sessions.sh_8732dad5481be991ca7f291d9c5451c7b016cea7.err)0
-rw-r--r--test/expected/test_cmds.sh_017b495b95218b7c083951e2dba331cfec6e90be.err4
-rw-r--r--test/expected/test_cmds.sh_1d92c5bc12f5e7aaa6d84c5ed47f0b9f96e36c6a.out45
-rw-r--r--test/expected/test_cmds.sh_2e123104cdd2087ac40731a0aa533ba6a87ea744.out2
-rw-r--r--test/expected/test_cmds.sh_2e67bdbbc9a14aa772b2a9f755ed8f8124708558.out32
-rw-r--r--test/expected/test_cmds.sh_2ff0fe712c9b0012e42282c5f77b0b83cad37ddf.out2
-rw-r--r--test/expected/test_cmds.sh_3b4bea458c59d2bac492e568616b610625037ad0.err (renamed from test/expected/test_sessions.sh_e39648f425c3f291c9d1c0d14595a019abd0cb48.err)0
-rw-r--r--test/expected/test_cmds.sh_3b4bea458c59d2bac492e568616b610625037ad0.out2
-rw-r--r--test/expected/test_cmds.sh_453054e29aaca4c2662c45c2a1f2f63f3510d8dd.out4
-rw-r--r--test/expected/test_cmds.sh_4f06183ed231669965965f5042fbbb507fa7deab.out2
-rw-r--r--test/expected/test_cmds.sh_55c2fd15ec2c7d96dbef7b36a42a1b7b42f90dbc.err2
-rw-r--r--test/expected/test_cmds.sh_5630626e6f68c3d4a2c3e5f27d024df5950b88b5.err (renamed from test/expected/test_sql_str_func.sh_3855d2cc0ab29171cae8e722f130adec25eae36e.out)0
-rw-r--r--test/expected/test_cmds.sh_5630626e6f68c3d4a2c3e5f27d024df5950b88b5.out2
-rw-r--r--test/expected/test_cmds.sh_68c774418bac897bd4d4fe9dbbf08454886b2e15.err (renamed from test/expected/test_sql_yaml_func.sh_41c6abde708a69e74f5b7fde865d88fa75f91e0a.out)0
-rw-r--r--test/expected/test_cmds.sh_68c774418bac897bd4d4fe9dbbf08454886b2e15.out3
-rw-r--r--test/expected/test_cmds.sh_7cb644890c4b945ff3f1e15c86a58c85cb5425c0.out10
-rw-r--r--test/expected/test_cmds.sh_949826cc086c7a5c87270be172e3caa3bf8f928d.err (renamed from test/expected/test_text_file.sh_2e69c22dcfa37b5c3e8490a6026eacb7ca953998.out)0
-rw-r--r--test/expected/test_cmds.sh_949826cc086c7a5c87270be172e3caa3bf8f928d.out1
-rw-r--r--test/expected/test_cmds.sh_9527f941dc84a2ac3a030f222e41c6ccd1961cbe.err (renamed from test/expected/test_text_file.sh_801414c6bb6d3f9225973eafa3c6dfa49cd2081d.err)0
-rw-r--r--test/expected/test_cmds.sh_9527f941dc84a2ac3a030f222e41c6ccd1961cbe.out1
-rw-r--r--test/expected/test_cmds.sh_a00943ef715598c7554b85de8502454e41bb9e28.out8
-rw-r--r--test/expected/test_cmds.sh_a0e6214b2a85c90d31aee12efde850441cca7eb3.out2
-rw-r--r--test/expected/test_cmds.sh_a8006c4169d76baecd99a0699c2fc66a583ad676.err4
-rw-r--r--test/expected/test_cmds.sh_ac45fb0f8f9578c3ded0855f694698ec38ce31ad.out12
-rw-r--r--test/expected/test_cmds.sh_af0fcbd30b3fd0d13477aa3325ef0302052a4d9f.out2
-rw-r--r--test/expected/test_cmds.sh_b3d0588ad144a841200692b46125bddf66f5d8bb.err (renamed from test/expected/test_text_file.sh_c21295f131c221861568bda5014b76ef99bdd11f.err)0
-rw-r--r--test/expected/test_cmds.sh_b3d0588ad144a841200692b46125bddf66f5d8bb.out1
-rw-r--r--test/expected/test_cmds.sh_b6a3bb78e9d60e5e1f5ce5b18e40d2f1662707ab.out1673
-rw-r--r--test/expected/test_cmds.sh_b755a8b48c0f602f0270500b0117b76e11db546e.out5
-rw-r--r--test/expected/test_cmds.sh_c7fabc25374ff47c47931f63b1d697061b816a28.out4
-rw-r--r--test/expected/test_cmds.sh_ccd326da92d1cacda63501cd1a3077381a18e8f2.out2
-rw-r--r--test/expected/test_cmds.sh_d0d0ff9b68adc17136329f457fe52d5addcb12c0.err6
-rw-r--r--test/expected/test_cmds.sh_d0d0ff9b68adc17136329f457fe52d5addcb12c0.out0
-rw-r--r--test/expected/test_cmds.sh_d1afefacbdd387f02562c8633968b0162a588502.err6
-rw-r--r--test/expected/test_cmds.sh_d1afefacbdd387f02562c8633968b0162a588502.out0
-rw-r--r--test/expected/test_cmds.sh_d7eebacdcf2cb194f25fa4ef97b7b5376b442467.err7
-rw-r--r--test/expected/test_cmds.sh_d836c84398c831c976df46f46fe3bf5983c44c37.out2
-rw-r--r--test/expected/test_cmds.sh_da5f7160b967e60dbd772573614e2da89c5e22b2.err0
-rw-r--r--test/expected/test_cmds.sh_da5f7160b967e60dbd772573614e2da89c5e22b2.out1
-rw-r--r--test/expected/test_cmds.sh_dbdd62995fdefc8318053af05a32416eccfa79fc.out2
-rw-r--r--test/expected/test_cmds.sh_df6f4cea16bb8f20e6408fe4b40335e6de8a7f18.out6
-rw-r--r--test/expected/test_cmds.sh_e7e8244fac65bc51dbd5af31be476fe3b8776bfc.out18
-rw-r--r--test/expected/test_cmds.sh_eb22c3e94c536a1bfaeae0c40d271b5b4b08f4fc.out6
-rw-r--r--test/expected/test_cmds.sh_ec3a64cad41b070a1d04e2bfc3dc14cb2d964091.err6
-rw-r--r--test/expected/test_cmds.sh_ec3a64cad41b070a1d04e2bfc3dc14cb2d964091.out0
-rw-r--r--test/expected/test_config.sh_13fa2428c26fa12e732209620e21466b36bab252.err0
-rw-r--r--test/expected/test_config.sh_13fa2428c26fa12e732209620e21466b36bab252.out1
-rw-r--r--test/expected/test_config.sh_5105c29004e297521310ca0bd0fd560b01c2c549.err20
-rw-r--r--test/expected/test_config.sh_a0907769aba112d628e7ebe39c4ec252e5e0bc69.err46
-rw-r--r--test/expected/test_config.sh_d708b6fd32d83ce0ee00ca5383388308ba5a06e1.err2
-rw-r--r--test/expected/test_format_installer.sh_1e08efc3b8c7b67d944a1f8c475cd31d98d5b4f6.err2
-rw-r--r--test/expected/test_format_installer.sh_1e08efc3b8c7b67d944a1f8c475cd31d98d5b4f6.out0
-rw-r--r--test/expected/test_format_installer.sh_6cd73153a8990b8ddb8ce489e90ec667a442f7f9.err0
-rw-r--r--test/expected/test_format_installer.sh_6cd73153a8990b8ddb8ce489e90ec667a442f7f9.out2
-rw-r--r--test/expected/test_format_installer.sh_947cbc64a150c7fe2a17e1c7a69e9a932aeaa16b.err0
-rw-r--r--test/expected/test_format_installer.sh_947cbc64a150c7fe2a17e1c7a69e9a932aeaa16b.out1
-rw-r--r--test/expected/test_format_loader.sh_15e861d2327512a721fd42ae51dc5427689e0bb6.out18
-rw-r--r--test/expected/test_format_loader.sh_3f1d6f35e8a9ae4fd3e91ffaa82a037b5a847ab7.err171
-rw-r--r--test/expected/test_format_loader.sh_5992e2695b7e6cf1f3520dbb87af8fc2b8f27088.err15
-rw-r--r--test/expected/test_format_loader.sh_a47f2b090a5d8a226783835c7ff7d1c8821f11ed.err61
-rw-r--r--test/expected/test_format_loader.sh_fca6c1fb9f3aaa69b3ffb2d1a8a86434b2f4a247.err4
-rw-r--r--test/expected/test_gantt.sh_3af11588ee36bab7e2caea0f7a24d3c9cafd2310.err0
-rw-r--r--test/expected/test_gantt.sh_3af11588ee36bab7e2caea0f7a24d3c9cafd2310.out86
-rw-r--r--test/expected/test_gantt.sh_63500be50fc6743d8312133e2030cbbc39ca15ff.err0
-rw-r--r--test/expected/test_gantt.sh_63500be50fc6743d8312133e2030cbbc39ca15ff.out0
-rw-r--r--test/expected/test_gantt.sh_74a94ee9103eac5e8e78ca57bccf49efa3827a9d.err0
-rw-r--r--test/expected/test_gantt.sh_74a94ee9103eac5e8e78ca57bccf49efa3827a9d.out0
-rw-r--r--test/expected/test_gantt.sh_83db753dd2669f801810f311e2d7d74397e10f26.err0
-rw-r--r--test/expected/test_gantt.sh_83db753dd2669f801810f311e2d7d74397e10f26.out0
-rw-r--r--test/expected/test_gantt.sh_8fed8a7400042814ba13e50be5e3bd1741d82119.err0
-rw-r--r--test/expected/test_gantt.sh_8fed8a7400042814ba13e50be5e3bd1741d82119.out85
-rw-r--r--test/expected/test_gantt.sh_b013ab41c3cca76cf05a01ca1ba65888be247ada.err0
-rw-r--r--test/expected/test_gantt.sh_b013ab41c3cca76cf05a01ca1ba65888be247ada.out70
-rw-r--r--test/expected/test_gantt.sh_cde7947f361e5f3d4cd1bbc3f7458f426b6a8eb4.err0
-rw-r--r--test/expected/test_gantt.sh_cde7947f361e5f3d4cd1bbc3f7458f426b6a8eb4.out4
-rw-r--r--test/expected/test_gantt.sh_e6a4681a5a671c84c020dc91d7ce03c9d17fde07.err0
-rw-r--r--test/expected/test_gantt.sh_e6a4681a5a671c84c020dc91d7ce03c9d17fde07.out70
-rw-r--r--test/expected/test_json_format.sh_168cac40c27f547044c89d39eb0ff2ef81da4b21.out10
-rw-r--r--test/expected/test_json_format.sh_1bb0fd243e916546aea22029245ac590dae17a86.out28
-rw-r--r--test/expected/test_json_format.sh_40223ac4742883f883ccc61044bfffd6e102cca6.out208
-rw-r--r--test/expected/test_json_format.sh_4315a3d6124c14cbe3c474b6dbf4cc8720a9859f.out6
-rw-r--r--test/expected/test_json_format.sh_469f005b0708d629bc95f0c48a5e390f440c1fef.out26
-rw-r--r--test/expected/test_json_format.sh_5795c5ffd98ae581b30c6f0983349bf7a6a84501.err0
-rw-r--r--test/expected/test_json_format.sh_5795c5ffd98ae581b30c6f0983349bf7a6a84501.out52
-rw-r--r--test/expected/test_json_format.sh_6767b91d715338c24c67e928b59c560c84ddf4be.out20
-rw-r--r--test/expected/test_json_format.sh_6fbe20faa161ab9fa77df7568fff84bf3e47e920.out8
-rw-r--r--test/expected/test_json_format.sh_7724d1a96d74d4418dd44d7416270f9bb64b2564.out26
-rw-r--r--test/expected/test_json_format.sh_7c6529f6bf4a0cb565f5665fdcba032f0ae1ebbe.out8
-rw-r--r--test/expected/test_json_format.sh_80959e2bb6a7fdf938c2e4dbd7d7c81eb84fa072.out4
-rw-r--r--test/expected/test_json_format.sh_84a71e94dc34661a70bb9015b67ba00e93e9cfb5.out4
-rw-r--r--test/expected/test_json_format.sh_85d03b1b41a7f819af135d2521a8f2c59418e907.out28
-rw-r--r--test/expected/test_json_format.sh_895283eeb4c10e9c1702fafd13723c8085944f88.err0
-rw-r--r--test/expected/test_json_format.sh_895283eeb4c10e9c1702fafd13723c8085944f88.out20
-rw-r--r--test/expected/test_json_format.sh_90a037c7d9d70ac4ca97158271ea242787313377.out3
-rw-r--r--test/expected/test_json_format.sh_952297a90e312d2184fe3e4df795ddc731b096c9.out2
-rw-r--r--test/expected/test_json_format.sh_a06b3cdd46b387e72d6faa4cce648b8b11ae870b.out48
-rw-r--r--test/expected/test_json_format.sh_a6be47f1311ed92feaf303142fcb103deb80f456.out4
-rw-r--r--test/expected/test_json_format.sh_ad3a238d03493de305544f9b30a0c69d4f474d3a.out2
-rw-r--r--test/expected/test_json_format.sh_c1a23804c39b0f74642286d69865ee9d0961a58a.out4
-rw-r--r--test/expected/test_json_format.sh_c60050b3469f37c5b0864e1dc7eb354e91d6ec81.out4
-rw-r--r--test/expected/test_json_format.sh_d0ec34389274affb70a5a76ba4789d51fd60f602.out8
-rw-r--r--test/expected/test_json_format.sh_d7362cffc8335c2fe6b6527315de59bd6f5dcc7f.out6
-rw-r--r--test/expected/test_json_format.sh_dfff27a651650a04d93de9a06ab5480e94ce3a79.out8
-rw-r--r--test/expected/test_json_format.sh_e36401aa54bc61de71f8dcbe66ea16effa59ea52.out2
-rw-r--r--test/expected/test_json_format.sh_f740026626ab554dacb249762d8be7d6539b8c6e.out2
-rw-r--r--test/expected/test_json_format.sh_fe19b7ebd349cd689b3f5c22618eab5ce995e68e.out2
-rw-r--r--test/expected/test_logfile.sh_00877d2e9dadab916a02005a068410dfbd85ec74.err0
-rw-r--r--test/expected/test_logfile.sh_00877d2e9dadab916a02005a068410dfbd85ec74.out4
-rw-r--r--test/expected/test_logfile.sh_08d731a04c877a34819b35de185e30a74c9fd497.out6
-rw-r--r--test/expected/test_logfile.sh_18d9a7beeb09041993d0d6da488fc8192d111bd9.err0
-rw-r--r--test/expected/test_logfile.sh_18d9a7beeb09041993d0d6da488fc8192d111bd9.out3
-rw-r--r--test/expected/test_logfile.sh_1c6eee38f66356fcd9a9f0faedaea6dbcc901060.out2
-rw-r--r--test/expected/test_logfile.sh_218ecb88b4753010c4264b3ac351260b4811612f.out4
-rw-r--r--test/expected/test_logfile.sh_290a3c49e53c2229a7400c107338fa0bb38375e2.out4
-rw-r--r--test/expected/test_logfile.sh_2e72d848a51ac1eb476b973c61fe43a65d579ba5.err0
-rw-r--r--test/expected/test_logfile.sh_2e72d848a51ac1eb476b973c61fe43a65d579ba5.out2
-rw-r--r--test/expected/test_logfile.sh_341e491abcf8772422bafb8b0eaea6492da230f6.err0
-rw-r--r--test/expected/test_logfile.sh_341e491abcf8772422bafb8b0eaea6492da230f6.out3
-rw-r--r--test/expected/test_logfile.sh_3fc6bfd8a6160817211f3e14fde957af75b9dbe7.out5
-rw-r--r--test/expected/test_logfile.sh_82d65f4dac07b1623f8202444d5b9144096e8243.err0
-rw-r--r--test/expected/test_logfile.sh_82d65f4dac07b1623f8202444d5b9144096e8243.out3
-rw-r--r--test/expected/test_logfile.sh_8a5e754cd471e5fdcdaede49c9290903acd7aad6.err0
-rw-r--r--test/expected/test_logfile.sh_8a5e754cd471e5fdcdaede49c9290903acd7aad6.out3
-rw-r--r--test/expected/test_logfile.sh_c18e14a26d8261c9f72747118a469266121d5459.out6
-rw-r--r--test/expected/test_logfile.sh_cc368d4b4bb6a9b9c79bd5a70ffa1f2d9d01e286.err15
-rw-r--r--test/expected/test_logfile.sh_cc368d4b4bb6a9b9c79bd5a70ffa1f2d9d01e286.out0
-rw-r--r--test/expected/test_logfile.sh_ccb0d31813367c8d9dc5b5df383fac5b780711c1.err0
-rw-r--r--test/expected/test_logfile.sh_ccb0d31813367c8d9dc5b5df383fac5b780711c1.out3
-rw-r--r--test/expected/test_logfile.sh_d14f6d8888652321206549df8a9535399f0fd372.err0
-rw-r--r--test/expected/test_logfile.sh_d14f6d8888652321206549df8a9535399f0fd372.out4
-rw-r--r--test/expected/test_logfile.sh_de8d59879fe6aa5a012b0748ff77ae26c07aea89.err0
-rw-r--r--test/expected/test_logfile.sh_de8d59879fe6aa5a012b0748ff77ae26c07aea89.out4
-rw-r--r--test/expected/test_logfile.sh_e840b674cd65936a72bd64b1dac1524d16fe44c3.out12
-rw-r--r--test/expected/test_logfile.sh_f171f265d8d45a2707e8b9f53e938f574c614d25.err0
-rw-r--r--test/expected/test_logfile.sh_f171f265d8d45a2707e8b9f53e938f574c614d25.out3
-rw-r--r--test/expected/test_meta.sh_0ae5840c0758ec95a397493ac3c3d4fabd397a34.err7
-rw-r--r--test/expected/test_meta.sh_0ae5840c0758ec95a397493ac3c3d4fabd397a34.out0
-rw-r--r--test/expected/test_meta.sh_41f643bb4f720130625b042563e9591bee4ae588.out2
-rw-r--r--test/expected/test_meta.sh_4283bf9128e0396c4ff141faf68279d5a3d8ac63.err0
-rw-r--r--test/expected/test_meta.sh_4283bf9128e0396c4ff141faf68279d5a3d8ac63.out41
-rw-r--r--test/expected/test_meta.sh_65325d1bcb58e530a8d681685fea56803f67a2eb.err0
-rw-r--r--test/expected/test_meta.sh_65325d1bcb58e530a8d681685fea56803f67a2eb.out2
-rw-r--r--test/expected/test_meta.sh_aae427fe704f131f8466fbfc9e7967c2e874530a.err0
-rw-r--r--test/expected/test_meta.sh_aae427fe704f131f8466fbfc9e7967c2e874530a.out2
-rw-r--r--test/expected/test_meta.sh_ad2f396f332d14ed6e95936983bc7e4aeea0bfac.err0
-rw-r--r--test/expected/test_meta.sh_ad2f396f332d14ed6e95936983bc7e4aeea0bfac.out7
-rw-r--r--test/expected/test_meta.sh_b622c04c2bede5371bfa6f2627b0474049ecc5e9.err6
-rw-r--r--test/expected/test_meta.sh_b622c04c2bede5371bfa6f2627b0474049ecc5e9.out0
-rw-r--r--test/expected/test_meta.sh_c75128169049bd88d5eaf8b84a7f617e5ae5d936.out4
-rw-r--r--test/expected/test_meta.sh_d6af0b41066ca3be0bbce89c83c011f4ecfa516e.out2
-rw-r--r--test/expected/test_meta.sh_f7c55356df0d71c51eb7629c5a81f347083ce1ef.err0
-rw-r--r--test/expected/test_meta.sh_f7c55356df0d71c51eb7629c5a81f347083ce1ef.out2
-rw-r--r--test/expected/test_pretty_print.sh_3c255c3c8b28df9d694b329a265e8b8140dae4a2.out12
-rw-r--r--test/expected/test_pretty_print.sh_7192f8f68adb14705c8a60e73ff8248c61c7fd03.out4
-rw-r--r--test/expected/test_pretty_print.sh_a5bee322ea3374690e44a88a16cb6b84feaa11d3.out1
-rw-r--r--test/expected/test_prql.sh_06900fac5c2e854b1208320b753fcd43d4ba63a3.err0
-rw-r--r--test/expected/test_prql.sh_06900fac5c2e854b1208320b753fcd43d4ba63a3.out2
-rw-r--r--test/expected/test_prql.sh_15ebcd913f56cde35af26c6300533d6e76bf1b55.err10
-rw-r--r--test/expected/test_prql.sh_15ebcd913f56cde35af26c6300533d6e76bf1b55.out0
-rw-r--r--test/expected/test_prql.sh_451e242cdfa2db9005d4fe752a7b05d1ab5cba29.err10
-rw-r--r--test/expected/test_prql.sh_451e242cdfa2db9005d4fe752a7b05d1ab5cba29.out0
-rw-r--r--test/expected/test_prql.sh_45d57a042092ffdcd28ea35a892f02859e78f33d.err0
-rw-r--r--test/expected/test_prql.sh_45d57a042092ffdcd28ea35a892f02859e78f33d.out2
-rw-r--r--test/expected/test_prql.sh_5aea925b5ad95f55ce6b1b07b7046bc3d7310137.err0
-rw-r--r--test/expected/test_prql.sh_5aea925b5ad95f55ce6b1b07b7046bc3d7310137.out4
-rw-r--r--test/expected/test_regex101.sh_2158f1f011ba8e1b152396c072790c076fdb8ce8.err3
-rw-r--r--test/expected/test_regex101.sh_366730cac50b4a09b7de4b84641791470b1cb9a3.out2
-rw-r--r--test/expected/test_regex101.sh_3d18474a3e472fff6e23e0c41337ec9188fee591.err47
-rw-r--r--test/expected/test_regex101.sh_7991a5b617867cf37c9f7baa85ffa425f7d455a2.err6
-rw-r--r--test/expected/test_regex101.sh_8e93a3b6b941847c71409a297779fbb0a6666a51.err2
-rw-r--r--test/expected/test_regex101.sh_cbd859487e4ea011cd6e0f0f114d70158bfd8b43.out23
-rw-r--r--test/expected/test_regex101.sh_d84597760285c3964b258726341e018f6cd49954.err6
-rw-r--r--test/expected/test_sessions.sh_33ab03afda2c9331a289fcbd1abdbc1c37b2e87b.err0
-rw-r--r--test/expected/test_sessions.sh_33ab03afda2c9331a289fcbd1abdbc1c37b2e87b.out11
-rw-r--r--test/expected/test_sessions.sh_639b83ce8f67975dfdc7086946ec287b43b6fa8c.err0
-rw-r--r--test/expected/test_sessions.sh_639b83ce8f67975dfdc7086946ec287b43b6fa8c.out89
-rw-r--r--test/expected/test_sessions.sh_6d87ff483d5785c58fb271a405ff1c35e4f83cd9.out6
-rw-r--r--test/expected/test_sessions.sh_8732dad5481be991ca7f291d9c5451c7b016cea7.out33
-rw-r--r--test/expected/test_sessions.sh_9978aaa475513f9981840e612f853a7707ffcf90.out1
-rw-r--r--test/expected/test_sessions.sh_ba1ded92531350668301431db64df2d2f4a2e9ee.err0
-rw-r--r--test/expected/test_sessions.sh_ba1ded92531350668301431db64df2d2f4a2e9ee.out5
-rw-r--r--test/expected/test_sessions.sh_e57697be4d81ac8e5b2b2fa84f919b2d494978f3.err0
-rw-r--r--test/expected/test_sessions.sh_e57697be4d81ac8e5b2b2fa84f919b2d494978f3.out11
-rw-r--r--test/expected/test_sessions.sh_e988439404f2e97604641c8d087855f3efe052e4.err0
-rw-r--r--test/expected/test_sessions.sh_e988439404f2e97604641c8d087855f3efe052e4.out (renamed from test/expected/test_sessions.sh_e39648f425c3f291c9d1c0d14595a019abd0cb48.out)15
-rw-r--r--test/expected/test_shlexer.sh_14dd967cb2af90899c9e5e45d00b676b5a3163aa.out5
-rw-r--r--test/expected/test_shlexer.sh_2781f5dd570580cbe746ad91b58a28b8371283b3.out5
-rw-r--r--test/expected/test_shlexer.sh_2af44d06fc137a77bc230be86376ccad23a2806b.out2
-rw-r--r--test/expected/test_shlexer.sh_6858e530a8ecb77cbaec1a7507768dd5a1942ac9.out3
-rw-r--r--test/expected/test_shlexer.sh_7f31e16ea2469da7a4328c93c7bcc8e109f84d2f.out3
-rw-r--r--test/expected/test_shlexer.sh_8aeebcdef56edd783579eaaddaff7c5cc127bb86.out3
-rw-r--r--test/expected/test_shlexer.sh_8e9addb0e5b6f4254d81dd89ecf12783109644bb.out3
-rw-r--r--test/expected/test_shlexer.sh_90961e6728e96d0a44535a6c9907cc990c10316c.out3
-rw-r--r--test/expected/test_shlexer.sh_95c4e861804a5434900fdb4d67b149d1baa2edf4.out3
-rw-r--r--test/expected/test_shlexer.sh_d7fe5f6b8fc9ba00539fad0fa0bfb08319d8b04b.out3
-rw-r--r--test/expected/test_shlexer.sh_d9d46422a913e3a06ddbd262933ef5352c30e68f.out7
-rw-r--r--test/expected/test_shlexer.sh_e0599f0b53d1bd27af767113853f8e84291f137d.out3
-rw-r--r--test/expected/test_shlexer.sh_e8fa2239ab17e7563d0c524f5400a79d6ff8bfda.out3
-rw-r--r--test/expected/test_shlexer.sh_e99fe1cde36b85ebbab86ca820f55ec861cdc20b.err0
-rw-r--r--test/expected/test_shlexer.sh_e99fe1cde36b85ebbab86ca820f55ec861cdc20b.out6
-rw-r--r--test/expected/test_sql.sh_09416e332d9b2f76743836b72e71b6e4492e594e.err0
-rw-r--r--test/expected/test_sql.sh_09416e332d9b2f76743836b72e71b6e4492e594e.out3
-rw-r--r--test/expected/test_sql.sh_0a5d13b62da4cb66a59a51b0240b5fe0b6036b7e.out2
-rw-r--r--test/expected/test_sql.sh_13429aed81d7edfd47b57e9cdb8a25c43aff35c4.out4
-rw-r--r--test/expected/test_sql.sh_19c92996bcc884bfdb70e3d24606cf5070556a74.err0
-rw-r--r--test/expected/test_sql.sh_19c92996bcc884bfdb70e3d24606cf5070556a74.out46
-rw-r--r--test/expected/test_sql.sh_1cbb81cfe40ee16332c5c775a74d06b945aa65c2.out6
-rw-r--r--test/expected/test_sql.sh_1f892b85dc9008c7b3bab7fdf8aa372a6d5ae22c.err0
-rw-r--r--test/expected/test_sql.sh_1f892b85dc9008c7b3bab7fdf8aa372a6d5ae22c.out23
-rw-r--r--test/expected/test_sql.sh_26ace94793c68c44801e1ec496e7ab6a02304ce3.err0
-rw-r--r--test/expected/test_sql.sh_26ace94793c68c44801e1ec496e7ab6a02304ce3.out2
-rw-r--r--test/expected/test_sql.sh_2a16a6fd0ff235a7877e1ea93b22d873a3609402.err3
-rw-r--r--test/expected/test_sql.sh_2c60ed41369d667d1e2a563d54f8edf84682e526.err0
-rw-r--r--test/expected/test_sql.sh_2c60ed41369d667d1e2a563d54f8edf84682e526.out2
-rw-r--r--test/expected/test_sql.sh_2ed3f3b18ef4ecc68e4dd3cc8041b61fcf2a59af.err0
-rw-r--r--test/expected/test_sql.sh_2ed3f3b18ef4ecc68e4dd3cc8041b61fcf2a59af.out5
-rw-r--r--test/expected/test_sql.sh_2f15b8a38673ac4db45dc6ed2eafe609c332575b.out6
-rw-r--r--test/expected/test_sql.sh_31df37f254255115611fc321b63374a2fa4a1cd5.out2
-rw-r--r--test/expected/test_sql.sh_3445b783808f174b76f55dc6b998f721a1aae271.err0
-rw-r--r--test/expected/test_sql.sh_3445b783808f174b76f55dc6b998f721a1aae271.out83
-rw-r--r--test/expected/test_sql.sh_4563a807311d0ce3d1f912843e615a6ca579cffa.err0
-rw-r--r--test/expected/test_sql.sh_4563a807311d0ce3d1f912843e615a6ca579cffa.out40
-rw-r--r--test/expected/test_sql.sh_4a13356ccbdeb5f73fa063e292b5a6cb25e6c23e.err0
-rw-r--r--test/expected/test_sql.sh_4a13356ccbdeb5f73fa063e292b5a6cb25e6c23e.out2
-rw-r--r--test/expected/test_sql.sh_5532c7a21e3f6b7df3aad10d7bdfbb7a812ae6c7.out4
-rw-r--r--test/expected/test_sql.sh_57edc93426e6767aa44ab2356c55327553dcdc8d.err3
-rw-r--r--test/expected/test_sql.sh_61471583c5e2f8ede3a8adefce682c27bf3924c8.err0
-rw-r--r--test/expected/test_sql.sh_61471583c5e2f8ede3a8adefce682c27bf3924c8.out11
-rw-r--r--test/expected/test_sql.sh_62eb85c9569e71a630d72065238559528a16114c.out2
-rw-r--r--test/expected/test_sql.sh_753c343a256d1286750314957d1b4e155464e03e.out2
-rw-r--r--test/expected/test_sql.sh_7593b39f4be6fd2124ec7cf10835ee015d475b16.err0
-rw-r--r--test/expected/test_sql.sh_7593b39f4be6fd2124ec7cf10835ee015d475b16.out2
-rw-r--r--test/expected/test_sql.sh_764306f0e5f610ba71f521ba3d19fe158ece0ba5.out2
-rw-r--r--test/expected/test_sql.sh_7f664c9cda0ae1c48333e21051b5e0eeafd5b4bc.err3
-rw-r--r--test/expected/test_sql.sh_859af4cc5f57345be8dcece599419d58f332841a.err0
-rw-r--r--test/expected/test_sql.sh_859af4cc5f57345be8dcece599419d58f332841a.out4
-rw-r--r--test/expected/test_sql.sh_8ee288f1508eaab0367e465e9f382e848f3282aa.out4
-rw-r--r--test/expected/test_sql.sh_9aaaa810f883f5dcf8a4d5cda4051fdf4640a65c.err0
-rw-r--r--test/expected/test_sql.sh_9aaaa810f883f5dcf8a4d5cda4051fdf4640a65c.out4
-rw-r--r--test/expected/test_sql.sh_a7955e89791db9a252d8323436fabc51e2960731.err0
-rw-r--r--test/expected/test_sql.sh_a7955e89791db9a252d8323436fabc51e2960731.out3
-rw-r--r--test/expected/test_sql.sh_ae7b1f1684e14bf9c16e0d789257b6ef57cfb2b1.out2
-rw-r--r--test/expected/test_sql.sh_afe9cdc4898df5c4e112c13dfe3db6dc089c0d7c.out4
-rw-r--r--test/expected/test_sql.sh_b085d26043f9661d70f82cb90ecb3c5245d25eac.out4
-rw-r--r--test/expected/test_sql.sh_b5aa0561a65de7e8e22085db184c72a94b1a89a9.out2
-rw-r--r--test/expected/test_sql.sh_b9330763dea550bbd006d7ae6ae7ea367f831fa3.err0
-rw-r--r--test/expected/test_sql.sh_b9330763dea550bbd006d7ae6ae7ea367f831fa3.out10
-rw-r--r--test/expected/test_sql.sh_bad03a996c0750733ab99c592b9011851f521a69.out10
-rw-r--r--test/expected/test_sql.sh_bd46ca4560f8be6307a914e39539bbac0368080a.out2
-rw-r--r--test/expected/test_sql.sh_c17933125df910588b806a9d07c2655bc71198ef.err0
-rw-r--r--test/expected/test_sql.sh_c17933125df910588b806a9d07c2655bc71198ef.out6
-rw-r--r--test/expected/test_sql.sh_c353ef036c505b75996252138fbd4c8d22e8149c.out4
-rw-r--r--test/expected/test_sql.sh_c5b8da04734fadf3b9eea80e0af997e38e0fb811.out4
-rw-r--r--test/expected/test_sql.sh_c7e1dbf4605914720b55787785abfafdf2c4178a.out2
-rw-r--r--test/expected/test_sql.sh_d4d540f0ef7e34b693fc72078d1cf2e069f86d81.err0
-rw-r--r--test/expected/test_sql.sh_d4d540f0ef7e34b693fc72078d1cf2e069f86d81.out4
-rw-r--r--test/expected/test_sql.sh_dd540973a0dc86320d84706845a15608196ae5be.err3
-rw-r--r--test/expected/test_sql.sh_e44c0e2834038ec8d9b0b10b993967edb711c03c.err0
-rw-r--r--test/expected/test_sql.sh_e44c0e2834038ec8d9b0b10b993967edb711c03c.out11
-rw-r--r--test/expected/test_sql.sh_ef3cecab4ae0b90760f728add5652378e26b2fe6.err0
-rw-r--r--test/expected/test_sql.sh_ef3cecab4ae0b90760f728add5652378e26b2fe6.out2
-rw-r--r--test/expected/test_sql.sh_fea98f976873ee7b55e6f322dda42719a19fb3f0.err0
-rw-r--r--test/expected/test_sql.sh_fea98f976873ee7b55e6f322dda42719a19fb3f0.out2
-rw-r--r--test/expected/test_sql.sh_ffbc3dbf8464455358a77acffa10a8dd8a080374.err0
-rw-r--r--test/expected/test_sql.sh_ffbc3dbf8464455358a77acffa10a8dd8a080374.out4
-rw-r--r--test/expected/test_sql_anno.sh_1398146cf8b4f074ec8b9752f021cf47d011bebc.err0
-rw-r--r--test/expected/test_sql_anno.sh_1398146cf8b4f074ec8b9752f021cf47d011bebc.out9
-rw-r--r--test/expected/test_sql_anno.sh_de46094b6e005285dc0921ef9979e36240c5042d.err0
-rw-r--r--test/expected/test_sql_anno.sh_de46094b6e005285dc0921ef9979e36240c5042d.out7
-rw-r--r--test/expected/test_sql_anno.sh_e7dae4ba18c42c416ed03afd8819200f63e89ac8.err0
-rw-r--r--test/expected/test_sql_anno.sh_e7dae4ba18c42c416ed03afd8819200f63e89ac8.out17
-rw-r--r--test/expected/test_sql_fs_func.sh_2aa83fc90c850cdd11e3136a1a02b79c5879824b.err0
-rw-r--r--test/expected/test_sql_fs_func.sh_2aa83fc90c850cdd11e3136a1a02b79c5879824b.out0
-rw-r--r--test/expected/test_sql_fs_func.sh_34baa8050f8278d7b68c29e53bdd9f37da0f34c8.err0
-rw-r--r--test/expected/test_sql_fs_func.sh_34baa8050f8278d7b68c29e53bdd9f37da0f34c8.out2
-rw-r--r--test/expected/test_sql_fs_func.sh_9234a453403934587bbbdde355281a956d1fbe5f.err0
-rw-r--r--test/expected/test_sql_fs_func.sh_9234a453403934587bbbdde355281a956d1fbe5f.out2
-rw-r--r--test/expected/test_sql_fs_func.sh_9e2c0a90ce333365ff7354375f2c609bc27135c8.err2
-rw-r--r--test/expected/test_sql_fs_func.sh_cf670dfa1ae7ac5a074baa642068c6d26ac8e096.err2
-rw-r--r--test/expected/test_sql_indexes.sh_1614ebb5e2e83bab11023354dea8a0885ddf64b4.out6
-rw-r--r--test/expected/test_sql_indexes.sh_2b4945247332d01b08e6f17340f7d17f3b3649b8.err0
-rw-r--r--test/expected/test_sql_indexes.sh_2b4945247332d01b08e6f17340f7d17f3b3649b8.out5
-rw-r--r--test/expected/test_sql_indexes.sh_541a8e35f34a206e340a3880128b6ce137847872.out10
-rw-r--r--test/expected/test_sql_indexes.sh_59a1497c13a5e09bc8f95ef02552b2835ebea6e5.out4
-rw-r--r--test/expected/test_sql_indexes.sh_69fd19d56a8cd1fc9c7eb9351270eabb491f8233.out10
-rw-r--r--test/expected/test_sql_indexes.sh_6f707b6e856dbaab6f95e7e89b98dc3652021f85.out6
-rw-r--r--test/expected/test_sql_indexes.sh_b615b6737b1e0d383c8ce4a1db56332f11dbc158.out4
-rw-r--r--test/expected/test_sql_indexes.sh_dab07d8de7728752ae938a174468d75e85f3ae7e.out4
-rw-r--r--test/expected/test_sql_indexes.sh_f7681c234d4f60df16c997a05163aeb058c52870.out10
-rw-r--r--test/expected/test_sql_json_func.sh_026077f4d573ee034467065b7e4f1878bdd4e2f2.err5
-rw-r--r--test/expected/test_sql_json_func.sh_5f2feef079a51410e1f8661bfe92da1c3277f665.err2
-rw-r--r--test/expected/test_sql_json_func.sh_e0ab80f50fb008700ab6cfb90694ed014d40e44b.err2
-rw-r--r--test/expected/test_sql_json_func.sh_f34f5dfa938a1ac7721f924beb16bbceec127a1b.err5
-rw-r--r--test/expected/test_sql_regexp.sh_02ef03572fd2bcf39bab8e29cf1c735ff7c3f297.err0
-rw-r--r--test/expected/test_sql_regexp.sh_02ef03572fd2bcf39bab8e29cf1c735ff7c3f297.out3
-rw-r--r--test/expected/test_sql_regexp.sh_03257c56e85558aa0cc925b68d3af962afc25125.out4
-rw-r--r--test/expected/test_sql_regexp.sh_219a579cf7744fa08ab79fadd08b521b2f18a661.err7
-rw-r--r--test/expected/test_sql_regexp.sh_219a579cf7744fa08ab79fadd08b521b2f18a661.out0
-rw-r--r--test/expected/test_sql_regexp.sh_51293df041b6969ccecc60204dce3676d0fb006d.out4
-rw-r--r--test/expected/test_sql_regexp.sh_a610798fefdacd8d0179a4b17cd757d00fb731be.err7
-rw-r--r--test/expected/test_sql_regexp.sh_a610798fefdacd8d0179a4b17cd757d00fb731be.out0
-rw-r--r--test/expected/test_sql_regexp.sh_b841a0c09601e2419eeb99e85f7e286c889e4801.out54
-rw-r--r--test/expected/test_sql_regexp.sh_bbd1128cf61a9af8f9dc937b46217443f42e1a7a.out4
-rw-r--r--test/expected/test_sql_regexp.sh_d61af17ff19d640ddfc879460910991825eedd05.out4
-rw-r--r--test/expected/test_sql_regexp.sh_ed6e9f13f178def009ee58c2aeea8c3c70fdb580.out4
-rw-r--r--test/expected/test_sql_search_table.sh_1a0d872ebc492fcecb2e79a0993170d5fc771a5b.out4
-rw-r--r--test/expected/test_sql_search_table.sh_3f5f74863d065418bca5a000e6ad3d9344635164.out24
-rw-r--r--test/expected/test_sql_search_table.sh_5aaae556ecb1661602f176215e28f661d3404032.out8
-rw-r--r--test/expected/test_sql_search_table.sh_df0fd242f57a96d40f466493938cda0789a094fa.out48
-rw-r--r--test/expected/test_sql_search_table.sh_ef9373a76853f345d06234f6e0fe11b5d40da27b.out12
-rw-r--r--test/expected/test_sql_str_func.sh_00363f89638cb968584afc1ca0a4f52b2cf7a2ae.err0
-rw-r--r--test/expected/test_sql_str_func.sh_00363f89638cb968584afc1ca0a4f52b2cf7a2ae.out2
-rw-r--r--test/expected/test_sql_str_func.sh_0947bfe7ec626eaa0409a45b10fcbb634fb12eb7.out2
-rw-r--r--test/expected/test_sql_str_func.sh_0db1c1b406ba6ef2dadcbe90a3fdbe794a664eb5.err0
-rw-r--r--test/expected/test_sql_str_func.sh_0db1c1b406ba6ef2dadcbe90a3fdbe794a664eb5.out2
-rw-r--r--test/expected/test_sql_str_func.sh_11d458fdadd00df1239a0eeaac049abb49ed212d.out198
-rw-r--r--test/expected/test_sql_str_func.sh_1a1e07b6f72bce5402037761fa8afd66c05b4c34.err1
-rw-r--r--test/expected/test_sql_str_func.sh_1a1e07b6f72bce5402037761fa8afd66c05b4c34.out0
-rw-r--r--test/expected/test_sql_str_func.sh_3855d2cc0ab29171cae8e722f130adec25eae36e.err1
-rw-r--r--test/expected/test_sql_str_func.sh_51766b600fd158a9e0677f6b0fa31b83537b2e5b.out2
-rw-r--r--test/expected/test_sql_str_func.sh_57fc889eefb98571ecf3892ad670646613bf13a3.err1
-rw-r--r--test/expected/test_sql_str_func.sh_57fc889eefb98571ecf3892ad670646613bf13a3.out0
-rw-r--r--test/expected/test_sql_str_func.sh_68860c50e91cd6c1f2004ee0414a6e930ed42c87.err1
-rw-r--r--test/expected/test_sql_str_func.sh_68860c50e91cd6c1f2004ee0414a6e930ed42c87.out0
-rw-r--r--test/expected/test_sql_str_func.sh_6ac7ab1f90c064944ff66bef5974f050c8227d4b.err0
-rw-r--r--test/expected/test_sql_str_func.sh_6ac7ab1f90c064944ff66bef5974f050c8227d4b.out2
-rw-r--r--test/expected/test_sql_str_func.sh_6ff984d8ed3e5099376d19f0dd20d5fd1ed42494.out2
-rw-r--r--test/expected/test_sql_str_func.sh_805ca5e97fbf1ed56f2e920befd963255ba190b6.out2
-rw-r--r--test/expected/test_sql_str_func.sh_80c1fb9affbfac609ebf1cc5556aafb1ecd223c1.err2
-rw-r--r--test/expected/test_sql_str_func.sh_949ffd5b2ef9fbcbe17f2e61ef7750f7038f6fd6.out2
-rw-r--r--test/expected/test_sql_str_func.sh_a515ba81cc3655c602da28cd0fa1a186d5e9a6e1.err2
-rw-r--r--test/expected/test_sql_str_func.sh_b088735cf46f23ca3d5fb3da41f07a6a3b1cba35.out2
-rw-r--r--test/expected/test_sql_str_func.sh_b8ebe81c4881f704624a65ec91be0868c310f6ed.err0
-rw-r--r--test/expected/test_sql_str_func.sh_b8ebe81c4881f704624a65ec91be0868c310f6ed.out2
-rw-r--r--test/expected/test_sql_str_func.sh_bac7f6531a2adf70cd1871fb13eab26dff133b7c.out2
-rw-r--r--test/expected/test_sql_str_func.sh_cdc7b869132c33cae3c2565806c2396e1b4d6253.err0
-rw-r--r--test/expected/test_sql_str_func.sh_cdc7b869132c33cae3c2565806c2396e1b4d6253.out2
-rw-r--r--test/expected/test_sql_str_func.sh_d4bc869850f5b7e53353fc2506fea0c8e96f29c5.err2
-rw-r--r--test/expected/test_sql_str_func.sh_d54a759f5683a22ad289129b2096b80652b1cc0c.out37
-rw-r--r--test/expected/test_sql_time_func.sh_42f0fc1a154b0d79b4f6e846f283426be498040f.err2
-rw-r--r--test/expected/test_sql_time_func.sh_4364c7f5354fe108874dd22571115e012303e001.err4
-rw-r--r--test/expected/test_sql_time_func.sh_4364c7f5354fe108874dd22571115e012303e001.out0
-rw-r--r--test/expected/test_sql_time_func.sh_63f22db8689c238d51c9b9efe9837147ea5318e6.err0
-rw-r--r--test/expected/test_sql_time_func.sh_63f22db8689c238d51c9b9efe9837147ea5318e6.out2
-rw-r--r--test/expected/test_sql_time_func.sh_6fd8504e94688c4e7915f3a9eb5b030713141d03.out0
-rw-r--r--test/expected/test_sql_time_func.sh_72862ec9c8f261a8507d237eb673c7ddfaafd898.err2
-rw-r--r--test/expected/test_sql_time_func.sh_7ae9dbbb69dbc50ee6a34afc03d2579f09363068.err0
-rw-r--r--test/expected/test_sql_time_func.sh_7ae9dbbb69dbc50ee6a34afc03d2579f09363068.out2
-rw-r--r--test/expected/test_sql_time_func.sh_b3c00f049fdeb551a9165c281630e36359832d1f.err0
-rw-r--r--test/expected/test_sql_time_func.sh_b3c00f049fdeb551a9165c281630e36359832d1f.out2
-rw-r--r--test/expected/test_sql_time_func.sh_c1d7dc8a4bd3b8cb86a2f893f58a56f0f6ea1bc3.err8
-rw-r--r--test/expected/test_sql_time_func.sh_c1d7dc8a4bd3b8cb86a2f893f58a56f0f6ea1bc3.out0
-rw-r--r--test/expected/test_sql_time_func.sh_c5a5fc2edb54d10f1475afa7fed0b62bc05e1dc6.err0
-rw-r--r--test/expected/test_sql_time_func.sh_c5a5fc2edb54d10f1475afa7fed0b62bc05e1dc6.out2
-rw-r--r--test/expected/test_sql_time_func.sh_c7fc60392a2e52b163da1e1dde6978c16f415a9e.err0
-rw-r--r--test/expected/test_sql_time_func.sh_c7fc60392a2e52b163da1e1dde6978c16f415a9e.out2
-rw-r--r--test/expected/test_sql_views_vtab.sh_32acc1a8bb5028636fdbf08f077f9a835ab51bec.out3
-rw-r--r--test/expected/test_sql_views_vtab.sh_4363d60040424a573ed79ee4260a32e3cd72f62c.err0
-rw-r--r--test/expected/test_sql_views_vtab.sh_4363d60040424a573ed79ee4260a32e3cd72f62c.out46
-rw-r--r--test/expected/test_sql_views_vtab.sh_45dbef06572b43cb997682436e753a13e003f792.err0
-rw-r--r--test/expected/test_sql_views_vtab.sh_45dbef06572b43cb997682436e753a13e003f792.out47
-rw-r--r--test/expected/test_sql_views_vtab.sh_485a6ac7c69bd4b5d34d3399a9c17f6a2dc89ad3.out2
-rw-r--r--test/expected/test_sql_views_vtab.sh_62d15cb9d5a9259f198aa01ca8ed200d6da38d68.out6
-rw-r--r--test/expected/test_sql_views_vtab.sh_6ffd89498b9a7758ded6717148fc2ce77a12621b.out2
-rw-r--r--test/expected/test_sql_views_vtab.sh_81dc3eb51ec4dc3066a2365524001242c423a9cf.out4
-rw-r--r--test/expected/test_sql_views_vtab.sh_a2c0f0e51b3f85ea2a05ecdcacaad962b4fe5d4f.out4
-rw-r--r--test/expected/test_sql_views_vtab.sh_a7a7fd577f710aa8b0ad5a94fdfb35daea75e06c.err4
-rw-r--r--test/expected/test_sql_views_vtab.sh_a7a7fd577f710aa8b0ad5a94fdfb35daea75e06c.out0
-rw-r--r--test/expected/test_sql_views_vtab.sh_c851bdf3ba2f56fac5a216457b2d11a109e77f03.err4
-rw-r--r--test/expected/test_sql_views_vtab.sh_d99d884ba6668b66e3ca9ea4ed2d0e236497c35d.out2
-rw-r--r--test/expected/test_sql_xml_func.sh_81ad7678f080870956db37174bcf1054586cfbad.err11
-rw-r--r--test/expected/test_sql_xml_func.sh_81ad7678f080870956db37174bcf1054586cfbad.out0
-rw-r--r--test/expected/test_sql_xml_func.sh_b036c73528a446cba46625767517cdac868aba72.err2
-rw-r--r--test/expected/test_sql_xml_func.sh_bcbd691bb24c4f7bcb9fe0e035b290815f1c8874.err7
-rw-r--r--test/expected/test_sql_xml_func.sh_bcbd691bb24c4f7bcb9fe0e035b290815f1c8874.out0
-rw-r--r--test/expected/test_sql_xml_func.sh_fefeb387ae14d4171225ea06cbbff3ec43990cf0.err2
-rw-r--r--test/expected/test_sql_yaml_func.sh_41c6abde708a69e74f5b7fde865d88fa75f91e0a.err4
-rw-r--r--test/expected/test_text_file.sh_02a0514e0e384e5511ae202ea519552ba04030ed.err0
-rw-r--r--test/expected/test_text_file.sh_02a0514e0e384e5511ae202ea519552ba04030ed.out3
-rw-r--r--test/expected/test_text_file.sh_0bba304f34ae07c4fa9e91e0b42f5fe98654a6a8.err0
-rw-r--r--test/expected/test_text_file.sh_0bba304f34ae07c4fa9e91e0b42f5fe98654a6a8.out26
-rw-r--r--test/expected/test_text_file.sh_11fd274911e45a743b4de616888a64183d07cb76.err0
-rw-r--r--test/expected/test_text_file.sh_11fd274911e45a743b4de616888a64183d07cb76.out2
-rw-r--r--test/expected/test_text_file.sh_143a40164c93c7ec44a66e7940b92b128a421147.err0
-rw-r--r--test/expected/test_text_file.sh_143a40164c93c7ec44a66e7940b92b128a421147.out5
-rw-r--r--test/expected/test_text_file.sh_1ce4056d72b871f8bb844c86aade2a9b1da58030.err0
-rw-r--r--test/expected/test_text_file.sh_1ce4056d72b871f8bb844c86aade2a9b1da58030.out49
-rw-r--r--test/expected/test_text_file.sh_25cef06efcbe106c2e1cc4a166b673e7b244c6d7.err0
-rw-r--r--test/expected/test_text_file.sh_25cef06efcbe106c2e1cc4a166b673e7b244c6d7.out25
-rw-r--r--test/expected/test_text_file.sh_265a8a5825e6c7dbc85cbe496dab6be7a349f3db.err0
-rw-r--r--test/expected/test_text_file.sh_265a8a5825e6c7dbc85cbe496dab6be7a349f3db.out1
-rw-r--r--test/expected/test_text_file.sh_2e69c22dcfa37b5c3e8490a6026eacb7ca953998.err2
-rw-r--r--test/expected/test_text_file.sh_4226123565a53b4e3f80e602c1f294721e8e07bf.err0
-rw-r--r--test/expected/test_text_file.sh_4226123565a53b4e3f80e602c1f294721e8e07bf.out9
-rw-r--r--test/expected/test_text_file.sh_4dd174410d702a7b4be794fb6fa2c8889bd768d6.err0
-rw-r--r--test/expected/test_text_file.sh_4dd174410d702a7b4be794fb6fa2c8889bd768d6.out6
-rw-r--r--test/expected/test_text_file.sh_596b120fbea638472a27964444e262b4572afacc.err0
-rw-r--r--test/expected/test_text_file.sh_596b120fbea638472a27964444e262b4572afacc.out5
-rw-r--r--test/expected/test_text_file.sh_5b51b55dff7332c5bee2c9b797c401c5614d574a.out157
-rw-r--r--test/expected/test_text_file.sh_5e9320f18d066e6fc930dbbffc357af64312bd4b.err0
-rw-r--r--test/expected/test_text_file.sh_5e9320f18d066e6fc930dbbffc357af64312bd4b.out42
-rw-r--r--test/expected/test_text_file.sh_6a24078983cf1b7a80b6fb65d5186cd125498136.out109
-rw-r--r--test/expected/test_text_file.sh_73f69c883f60761bff9f8874f61d21a189e92912.err0
-rw-r--r--test/expected/test_text_file.sh_73f69c883f60761bff9f8874f61d21a189e92912.out43
-rw-r--r--test/expected/test_text_file.sh_786c7262f977201af36b0e69ba1a2aba130bbb06.err0
-rw-r--r--test/expected/test_text_file.sh_786c7262f977201af36b0e69ba1a2aba130bbb06.out4
-rw-r--r--test/expected/test_text_file.sh_78f252288519c8f767bb2759ea32959dab2ebc46.err0
-rw-r--r--test/expected/test_text_file.sh_78f252288519c8f767bb2759ea32959dab2ebc46.out98
-rw-r--r--test/expected/test_text_file.sh_7b00f32a3fff7fc2d78a87045ae842e58be88480.out2
-rw-r--r--test/expected/test_text_file.sh_801414c6bb6d3f9225973eafa3c6dfa49cd2081d.out111
-rw-r--r--test/expected/test_text_file.sh_87943c6be50d701a03e901f16493314c839af1ab.out56
-rw-r--r--test/expected/test_text_file.sh_8a4954af3e536b3789b1fd5b33519e9d444cc933.err0
-rw-r--r--test/expected/test_text_file.sh_8a4954af3e536b3789b1fd5b33519e9d444cc933.out6
-rw-r--r--test/expected/test_text_file.sh_8b2cd055e6a1db2ed9b2af2a917f8556395fa653.out4
-rw-r--r--test/expected/test_text_file.sh_a87c18c643994c3dbbbbb619a06a601d3668ea71.err0
-rw-r--r--test/expected/test_text_file.sh_a87c18c643994c3dbbbbb619a06a601d3668ea71.out2
-rw-r--r--test/expected/test_text_file.sh_ac486314c4e02e480d829ea2f077b86c49fedcec.out2
-rw-r--r--test/expected/test_text_file.sh_c21295f131c221861568bda5014b76ef99bdd11f.out159
-rw-r--r--test/expected/test_text_file.sh_c2a346ca1da2da4346f1d310212e166767993ce9.out22
-rw-r--r--test/expected/test_text_file.sh_d59b67113864ef5e77267d7fd8ad4072f5aef0fc.err0
-rw-r--r--test/expected/test_text_file.sh_d59b67113864ef5e77267d7fd8ad4072f5aef0fc.out51
-rw-r--r--test/expected/test_text_file.sh_e088ea61a5382458cc48a2607e2639e52b0be1da.out109
-rw-r--r--test/expected/test_text_file.sh_e556fa91b91579df20d38540a5db9cedbaf68a62.err0
-rw-r--r--test/expected/test_text_file.sh_e556fa91b91579df20d38540a5db9cedbaf68a62.out40
-rw-r--r--test/expected/test_text_file.sh_f586ef080a86dfe1f981b345bcf8d7a279b2b247.err0
-rw-r--r--test/expected/test_text_file.sh_f586ef080a86dfe1f981b345bcf8d7a279b2b247.out38
-rw-r--r--test/expected/test_text_file.sh_f7522b0a99550a3ff91aae6582eb861547c535e1.err0
-rw-r--r--test/expected/test_text_file.sh_f7522b0a99550a3ff91aae6582eb861547c535e1.out25
-rw-r--r--test/formats/jsontest/format.json13
-rw-r--r--test/formats/jsontest/lnav-logstash.json56
-rw-r--r--test/formats/jsontest/rewrite-user.lnav3
-rw-r--r--test/formats/partitions/format.json11
-rw-r--r--test/gharchive_log.jsonl50
-rw-r--r--test/invalid-books.xml132
-rw-r--r--test/listview_output_cursor.410
-rw-r--r--test/listview_output_cursor.520
-rw-r--r--test/listview_output_cursor.620
-rw-r--r--test/lnav_doctests.cc69
-rw-r--r--test/log-samples/sample-057d6c669632ef9d07b6adec605f6bdeae19af27.txt14
-rw-r--r--test/log-samples/sample-06aaa6f48a801f592558575d886864d6c3ab9ed4.txt72
-rw-r--r--test/log-samples/sample-0a470b1dae069dda03984e8e67994d8a.txt26
-rw-r--r--test/log-samples/sample-0edd747bbc6d5c173423c079b61c27a4.txt13
-rw-r--r--test/log-samples/sample-1aeb47c0a97d19bb7418f0172480e05e49c6e53e.txt24
-rw-r--r--test/log-samples/sample-207655c886794bc55da226bcb86e3c91.txt33
-rw-r--r--test/log-samples/sample-27353a72ba4025448f261dcfa6ea16e474187795.txt32
-rw-r--r--test/log-samples/sample-3136b918134d37827ee97f35adb130a5.txt43
-rw-r--r--test/log-samples/sample-5cbaeeb96f1f0c11a93656107801efc3.txt52
-rw-r--r--test/log-samples/sample-63068cd0931f8cbd22c2f15ac318af12.txt135
-rw-r--r--test/log-samples/sample-67484ecc8091237a27f12863d36b4d03.txt26
-rw-r--r--test/log-samples/sample-70c906b3c1a1cf03f15bde92ee78edfa6f9b7960.txt35
-rw-r--r--test/log-samples/sample-8a6527cdf27015a0204702430b6eca09.txt135
-rw-r--r--test/log-samples/sample-97f2106d5fa94132715730416e86b3de.txt16
-rw-r--r--test/log-samples/sample-aca2878a2e50779c6697c0747ab1f60e4b368dcb.txt1
-rw-r--r--test/log-samples/sample-ad31f12d2adabd07e3ddda3ad5b0dbf6b49c4c99.txt15
-rw-r--r--test/log-samples/sample-bc6f6cf689fa5455616b4d9fbe121a48d3c9de59.txt17
-rw-r--r--test/log-samples/sample-bed6bfb07b2af767547cedbf489c15ce.txt15
-rw-r--r--test/log-samples/sample-c15acd32844669d23d0cbc88ec548129ed2c592e.txt35
-rw-r--r--test/log-samples/sample-c23f22c1b932b904203e018f78dead95fb89b15d.txt37
-rw-r--r--test/log-samples/sample-d0d6b3fc6766caac5ac3fac4a3754ceaab785eb8.txt29
-rw-r--r--test/log-samples/sample-dd7d406352ec6a11d966b6f015a9482b060f2b29.txt31
-rw-r--r--test/log-samples/sample-e779d1771e34f5203ae73e85802e78002be63db6.txt17
-rw-r--r--test/log-samples/sample-e8729677c1b443d8f65124db0d5b6f04.txt22
-rw-r--r--test/log-samples/sample-eef32793daf841a576d8a5cd27239d5d.txt16
-rw-r--r--test/log-samples/sample-f2fba0d0b1e57f9a707ea96a8a4efcdc.txt31
-rw-r--r--test/log-samples/sample-f632067ddac054da85b5cade949c6d94.txt27
-rw-r--r--test/logfile_haproxy.012
-rw-r--r--test/logfile_json.json10
-rw-r--r--test/logfile_json_subsec.json2
-rw-r--r--test/logfile_nextcloud.05
-rw-r--r--test/logfile_partitions.082
-rw-r--r--test/logfile_regexp_access_log.02
-rw-r--r--test/logfile_rollover.2375
-rw-r--r--test/logfile_with_zones.03
-rw-r--r--test/man_echo.txt38
-rwxr-xr-xtest/naughty_files.py28
-rwxr-xr-xtest/parser_debugger.py68
-rw-r--r--test/pyfile_0.py9
-rw-r--r--test/scripty.cc50
-rw-r--r--test/test_ansi_scrubber.cc114
-rw-r--r--test/test_cli.sh32
-rw-r--r--test/test_cmds.sh46
-rwxr-xr-xtest/test_config.sh3
-rw-r--r--test/test_date_time_scanner.cc76
-rw-r--r--test/test_events.sh1
-rw-r--r--test/test_format_installer.sh14
-rw-r--r--test/test_gantt.sh43
-rw-r--r--test/test_json_format.sh7
-rw-r--r--test/test_logfile.sh75
-rw-r--r--test/test_meta.sh26
-rw-r--r--test/test_prql.sh17
-rw-r--r--test/test_sessions.sh37
-rw-r--r--test/test_shlexer.sh2
-rw-r--r--test/test_sql.sh282
-rw-r--r--test/test_sql_anno.sh6
-rw-r--r--test/test_sql_fs_func.sh6
-rw-r--r--test/test_sql_indexes.sh5
-rw-r--r--test/test_sql_regexp.sh10
-rw-r--r--test/test_sql_search_table.sh1
-rw-r--r--test/test_sql_str_func.sh31
-rw-r--r--test/test_sql_time_func.sh14
-rw-r--r--test/test_sql_views_vtab.sh19
-rw-r--r--test/test_sql_xml_func.sh10
-rw-r--r--test/test_stubs.cc5
-rw-r--r--test/test_text_anonymizer.cc4
-rw-r--r--test/test_text_file.sh88
-rw-r--r--test/textfile_0.md51
-rw-r--r--test/textfile_cjk.03
-rw-r--r--test/textfile_nonl.txt1
-rw-r--r--test/textfile_plain.09
568 files changed, 14128 insertions, 2803 deletions
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index df39caa..fc5fc38 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -2,6 +2,7 @@ enable_testing()
include_directories(
. ${CMAKE_SOURCE_DIR}/src ${CMAKE_SOURCE_DIR}/src/fmtlib
+ ${CMAKE_SOURCE_DIR}/src/third-party/date/include
${CMAKE_CURRENT_BINARY_DIR}/../src ${CMAKE_CURRENT_BINARY_DIR})
add_executable(test_abbrev test_abbrev.cc test_stubs.cc)
@@ -35,7 +36,8 @@ target_link_libraries(test_bookmarks diag)
add_test(NAME test_bookmarks COMMAND test_bookmarks)
add_executable(test_date_time_scanner test_date_time_scanner.cc)
-target_link_libraries(test_date_time_scanner base lnavdt)
+target_include_directories(test_date_time_scanner PUBLIC ../src/third-party/doctest-root)
+target_link_libraries(test_date_time_scanner base lnavdt diag)
add_test(NAME test_date_time_scanner COMMAND test_date_time_scanner)
add_executable(test_grep_proc2 test_grep_proc2.cc)
@@ -84,5 +86,8 @@ target_link_libraries(drive_sql_anno diag)
add_executable(drive_data_scanner drive_data_scanner.cc test_stubs.cc)
target_link_libraries(drive_data_scanner diag logfmt)
+add_executable(drive_doc_discovery drive_doc_discovery.cc test_stubs.cc)
+target_link_libraries(drive_doc_discovery diag logfmt)
+
add_executable(scripty scripty.cc test_stubs.cc)
target_link_libraries(scripty diag)
diff --git a/test/Makefile.am b/test/Makefile.am
index a92ceb8..f7d83f7 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -12,17 +12,29 @@ AM_LIBS = $(CODE_COVERAGE_LIBS)
AM_CFLAGS = $(CODE_COVERAGE_CFLAGS)
AM_CXXFLAGS = $(CODE_COVERAGE_CXXFLAGS)
+if HAVE_CARGO
+RUST_DEPS_CPPFLAGS = -I$(top_srcdir)/src/third-party/prqlc-c -DHAVE_RUST_DEPS=1
+PRQLC_DIR = ../src/third-party/prqlc-c/target
+RUST_DEPS_LIBS = $(PRQLC_DIR)/release/libprqlc_c.a
+else
+RUST_DEPS =
+RUST_DEPS_CPPFLAGS =
+RUST_DEPS_LIBS =
+endif
+
AM_CPPFLAGS = \
-Wall \
-I$(top_srcdir)/src \
-I$(top_srcdir)/src/fmtlib \
-I$(top_srcdir)/src/third-party \
+ -I$(top_srcdir)/src/third-party/date/include \
-I$(top_srcdir)/src/third-party/scnlib/include \
$(CODE_COVERAGE_CPPFLAGS) \
$(LIBARCHIVE_CFLAGS) \
$(READLINE_CFLAGS) \
$(PCRE_CFLAGS) \
- $(SQLITE3_CFLAGS)
+ $(SQLITE3_CFLAGS) \
+ $(RUST_DEPS_CPPFLAGS)
# AM_CFLAGS = -fprofile-arcs -ftest-coverage
# AM_CXXFLAGS = -fprofile-arcs -ftest-coverage
@@ -51,6 +63,7 @@ DUMMY_OBJS = \
check_PROGRAMS = \
drive_data_scanner \
+ drive_doc_discovery \
drive_line_buffer \
drive_grep_proc \
drive_listview \
@@ -113,13 +126,15 @@ LDADD = \
$(top_builddir)/src/base/libbase.a \
$(top_builddir)/src/pugixml/libpugixml.a \
$(top_builddir)/src/third-party/base64/lib/libbase64.a \
+ $(top_builddir)/src/third-party/date/src/libdatepp.a \
$(top_builddir)/src/third-party/scnlib/src/libscnlib.a \
$(READLINE_LIBS) \
$(CURSES_LIB) \
$(LIBARCHIVE_LIBS) \
$(SQLITE3_LIBS) \
$(PCRE_LIBS) \
- $(LIBCURL)
+ $(LIBCURL) \
+ $(RUST_DEPS_LIBS)
test_ansi_scrubber_SOURCES = test_ansi_scrubber.cc
@@ -162,6 +177,9 @@ drive_shlexer_SOURCES = drive_shlexer.cc
drive_data_scanner_SOURCES = \
drive_data_scanner.cc
+drive_doc_discovery_SOURCES = \
+ drive_doc_discovery.cc
+
drive_mvwattrline_SOURCES = drive_mvwattrline.cc
drive_view_colors_SOURCES = drive_view_colors.cc
@@ -188,6 +206,7 @@ dist_noinst_SCRIPTS = \
test_events.sh \
test_format_installer.sh \
test_format_loader.sh \
+ test_gantt.sh \
test_grep_proc.sh \
test_json_format.sh \
test_line_buffer.sh \
@@ -195,6 +214,7 @@ dist_noinst_SCRIPTS = \
test_logfile.sh \
test_meta.sh \
test_mvwattrline.sh \
+ test_prql.sh \
test_regex101.sh \
test_remote.sh \
test_scripts.sh \
@@ -226,7 +246,10 @@ dist_noinst_DATA = \
expected/test_tailer.sh_12f539e535df04364316699f9edeac461aa9f9de.err \
expected/test_tailer.sh_12f539e535df04364316699f9edeac461aa9f9de.out \
ansi-colors.0.in \
+ bad-config/formats/invalid-file-format/format.json \
bad-config/formats/invalid-json-format/format.json \
+ bad-config/formats/invalid-name/format.json \
+ bad-config/formats/invalid-no-tscap/format.json \
bad-config/formats/invalid-properties/format.json \
bad-config/formats/invalid-regex/format.json \
bad-config/formats/invalid-sample/format.json \
@@ -235,12 +258,15 @@ dist_noinst_DATA = \
bad-config/formats/invalid-sql/init2.sql \
bad-config/formats/no-regexes/format.json \
bad-config/formats/no-samples/format.json \
+ bad-config2/configs/invalid-annotation/config.json \
+ bad-config2/configs/invalid-theme/config.json \
bad-config2/formats/invalid-config/config.json \
bad-config2/formats/invalid-config/config.bad-schema.json \
bad-config2/formats/invalid-config/config.malformed.json \
bad-config2/formats/invalid-config/config.truncated.json \
bad-config-json/formats/invalid-json/format.json \
bad-config-json/formats/invalid-key/format.json \
+ books.json \
books.xml \
file_for_dot_read.sql \
datafile_simple.0 \
@@ -269,7 +295,11 @@ dist_noinst_DATA = \
datafile_xml.0 \
dhcp.pcapng \
dhcp-trunc.pcapng \
+ example.patch \
+ example.toml \
expected_help.txt \
+ gharchive_log.jsonl \
+ invalid-books.xml \
listview_output.0 \
listview_output.1 \
listview_output.2 \
@@ -324,10 +354,13 @@ dist_noinst_DATA = \
logfile_logfmt.0 \
logfile_multiline.0 \
logfile_nested_json.json \
+ logfile_nextcloud.0 \
logfile_openam.0 \
+ logfile_partitions.0 \
logfile_plain.0 \
logfile_pretty.0 \
logfile_procstate.0 \
+ logfile_regexp_access_log.0 \
logfile_rollover.0 \
logfile_rollover.1 \
logfile_strace_log.0 \
@@ -357,15 +390,20 @@ dist_noinst_DATA = \
logfile_w3c.6 \
logfile_w3c_big.0 \
logfile_with_a_really_long_name_to_test_a_bug_with_long_names.0 \
+ logfile_with_zones.0 \
logfile_xml_msg.0 \
+ man_echo.txt \
multiline.lnav \
- nested.lnav \
mvwattrline_output.0 \
+ nested.lnav \
+ pyfile_0.py \
textfile_0.md \
textfile_ansi.0 \
textfile_ansi_expanding.0 \
textfile_json_indented.0 \
textfile_json_one_line.0 \
+ textfile_nonl.txt \
+ textfile_plain.0 \
textfile_quoted_json.0 \
toplevel.lnav \
UTF-8-test.txt \
@@ -375,6 +413,10 @@ dist_noinst_DATA = \
vt52_curses_output.0 \
vt52_curses_output.1 \
xpath_tui.0 \
+ configs/installed/anno-test.json \
+ configs/installed/anno-test.sh \
+ configs/installed/hw-url-handler.json \
+ configs/installed/hw-url-handler.lnav \
formats/collision/format.json \
formats/customlevel/format.json \
formats/jsontest/format.json \
@@ -384,15 +426,41 @@ dist_noinst_DATA = \
formats/jsontest3/format.json \
formats/jsontest-subsec/format.json \
formats/nestedjson/format.json \
+ formats/partitions/format.json \
formats/scripts/multiline-echo.lnav \
formats/scripts/redirecting.lnav \
formats/scripts/nested-redirecting.lnav \
formats/sqldir/init.sql \
formats/timestamp/format.json \
formats/xmlmsg/format.json \
- log-samples/sample-27353a72ba4025448f261dcfa6ea16e474187795.txt \
- log-samples/sample-70c906b3c1a1cf03f15bde92ee78edfa6f9b7960.txt \
- log-samples/sample-ad31f12d2adabd07e3ddda3ad5b0dbf6b49c4c99.txt \
+ log-samples/sample-057d6c669632ef9d07b6adec605f6bdeae19af27.txt \
+ log-samples/sample-06aaa6f48a801f592558575d886864d6c3ab9ed4.txt \
+ log-samples/sample-1aeb47c0a97d19bb7418f0172480e05e49c6e53e.txt \
+ log-samples/sample-27353a72ba4025448f261dcfa6ea16e474187795.txt \
+ log-samples/sample-3856ad0f551a04fde41a020158d6b33ef97c870a.txt \
+ log-samples/sample-45364b3fd51af92a4ad8a309b5f4fd88.txt \
+ log-samples/sample-500c9e492e04f5f58862c8086ca301de0dd976ce.txt \
+ log-samples/sample-55ac97afae4b0650ccb62e2dbc8d89bb.txt \
+ log-samples/sample-6049d4309f26eefb1a3406d937a9ba8a0df592a7.txt \
+ log-samples/sample-62315d884afdc4155b35f905415c74bfcfd39fc2.txt \
+ log-samples/sample-70c906b3c1a1cf03f15bde92ee78edfa6f9b7960.txt \
+ log-samples/sample-9cf7fbb3546c676c686fac0ed096d026f46c875f.txt \
+ log-samples/sample-a74570613c082c7fe283672031e18e54e8887ffb.txt \
+ log-samples/sample-aca2878a2e50779c6697c0747ab1f60e4b368dcb.txt \
+ log-samples/sample-ad31f12d2adabd07e3ddda3ad5b0dbf6b49c4c99.txt \
+ log-samples/sample-bc6f6cf689fa5455616b4d9fbe121a48d3c9de59.txt \
+ log-samples/sample-c15acd32844669d23d0cbc88ec548129ed2c592e.txt \
+ log-samples/sample-c23f22c1b932b904203e018f78dead95fb89b15d.txt \
+ log-samples/sample-d0d6b3fc6766caac5ac3fac4a3754ceaab785eb8.txt \
+ log-samples/sample-d4a0aedc8350f64b22403eeef4eca71fbf749d2b.txt \
+ log-samples/sample-d714b5e8cd354321f376ed1c0a70ec9a2f58076d.txt \
+ log-samples/sample-dd7d406352ec6a11d966b6f015a9482b060f2b29.txt \
+ log-samples/sample-e779d1771e34f5203ae73e85802e78002be63db6.txt \
+ log-samples/sample-eef32793daf841a576d8a5cd27239d5d.txt \
+ log-samples/sample-f2fba0d0b1e57f9a707ea96a8a4efcdc.txt \
+ log-samples/sample-f5afbee90a8c054061c4e9ffe673293cce7761de.txt \
+ log-samples/sample-fc8923633e57bacd641d80dde3ff878212230552.txt \
+ naughty_files.py \
remote-log-dir/logfile_access_log.0 \
remote-log-dir/logfile_access_log.1 \
tui-captures/tui_echo.0 \
@@ -415,6 +483,7 @@ TESTS = \
test_listview.sh \
test_meta.sh \
test_mvwattrline.sh \
+ test_gantt.sh \
test_grep_proc.sh \
test_grep_proc2 \
test_json_format.sh \
@@ -445,6 +514,10 @@ TESTS = \
test_view_colors.sh \
test_vt52_curses.sh
+if HAVE_CARGO
+TESTS += test_prql.sh
+endif
+
DISABLED_TESTS = \
test_regex101.sh \
test_remote.sh \
@@ -507,8 +580,12 @@ distclean-local:
$(RM_V)rm -rf remote remote-tmp not:a:remote:dir
$(RM_V)rm -rf sessions
$(RM_V)rm -rf tmp
+ $(RM_V)rm -rf piper-tmp
$(RM_V)rm -rf rotmp
$(RM_V)rm -rf meta-sessions
+ $(RM_V)rm -rf mgmt-config
+ $(RM_V)rm -rf naughty
+ $(RM_V)rm -rf piper-config
$(RM_V)rm -rf nested
$(RM_V)rm -rf test-config
$(RM_V)rm -rf .lnav
diff --git a/test/bad-config/formats/invalid-file-format/format.json b/test/bad-config/formats/invalid-file-format/format.json
new file mode 100644
index 0000000..cca2b47
--- /dev/null
+++ b/test/bad-config/formats/invalid-file-format/format.json
@@ -0,0 +1,27 @@
+{
+ "$schema": "https://lnav.org/schemas/format-v1.schema.json",
+ "bad_file_format1": {
+ "title": "bad file format",
+ "regex": {
+ "std": {
+ "pattern": "(?<timestamp>\\d+): (?<body>.*)$"
+ }
+ },
+ "converter": {
+ "header": {
+ "expr": {
+ "default": ":header REGEXP 'foobar"
+ },
+ "size": 8
+ }
+ },
+ "timestamp-format": [
+ "%i"
+ ],
+ "sample": [
+ {
+ "line": "1234: abcd"
+ }
+ ]
+ }
+} \ No newline at end of file
diff --git a/test/bad-config/formats/invalid-no-tscap/format.json b/test/bad-config/formats/invalid-no-tscap/format.json
new file mode 100644
index 0000000..5e8eb14
--- /dev/null
+++ b/test/bad-config/formats/invalid-no-tscap/format.json
@@ -0,0 +1,32 @@
+{
+ "$schema": "https://lnav.org/schemas/format-v1.schema.json",
+ "no_tscap_log": {
+ "title": "Sample with no captured timestamp",
+ "multiline": true,
+ "ordered-by-time": false,
+ "regex": {
+ "std": {
+ "pattern": "^(?<container>[\\w-]+)\\s+\\|( (?<timestamp>\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{9}[+-]\\d{2}:\\d{2}))?( (?<body>.*))?$"
+ }
+ },
+ "level-field": "timestamp",
+ "module-field": "container",
+ "value": {
+ "container": {
+ "kind": "string",
+ "identifier": true
+ }
+ },
+ "sample": [
+ {
+ "line": "gitea | 2023-09-24T22:15:55.346526305+02:00 2023/09/24 22:15:55 cmd/web.go:223:runWeb() [I] Starting Gitea on PID: 7"
+ },
+ {
+ "line": "gitea | 2023/09/24 22:15:55 cmd/web.go:223:runWeb() [I] Starting Gitea on PID: 7"
+ },
+ {
+ "line": "gitea-db-1 | 2023-09-24T22:15:37.981051393+02:00 [migrations] started"
+ }
+ ]
+ }
+} \ No newline at end of file
diff --git a/test/bad-config2/configs/invalid-annotation/config.json b/test/bad-config2/configs/invalid-annotation/config.json
new file mode 100644
index 0000000..9fae7de
--- /dev/null
+++ b/test/bad-config2/configs/invalid-annotation/config.json
@@ -0,0 +1,14 @@
+{
+ "$schema": "https://lnav.org/schemas/config-v1.schema.json",
+ "log": {
+ "annotations": {
+ "org.lnav.test.no-handler": {
+ "description": "annotation without a handler"
+ },
+ "org.lnav.test.no-condition": {
+ "description": "annotation without a condition",
+ "handler": "my-handler"
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/test/bad-config2/configs/invalid-theme/config.json b/test/bad-config2/configs/invalid-theme/config.json
new file mode 100644
index 0000000..cfbeda5
--- /dev/null
+++ b/test/bad-config2/configs/invalid-theme/config.json
@@ -0,0 +1,20 @@
+{
+ "$schema": "https://lnav.org/schemas/config-v1.schema.json",
+ "ui": {
+ "theme-defs": {
+ "invalid-theme": {
+ "styles": {
+ "text": {
+ "color": "InvalidColor",
+ "bad-property": "abc"
+ }
+ },
+ "highlights": {
+ "foobar": {
+ "pattern": "abc("
+ }
+ }
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/test/books.json b/test/books.json
new file mode 100644
index 0000000..c885559
--- /dev/null
+++ b/test/books.json
@@ -0,0 +1,14 @@
+{
+ "catalog": [
+ {
+ "author": "Gambardella, Matthew",
+ "title": "XML Developer's Guide",
+ "description": "An in-depth look at creating applications with XML."
+ },
+ {
+ "author": "Ralls, Kim",
+ "title": "Midnight Rain",
+ "description": "A former architect battles corporate zombies, an evil sorceress, and her own childhood to become queen of the world."
+ }
+ ]
+} \ No newline at end of file
diff --git a/test/books.xml b/test/books.xml
index 19c4f73..62158fa 100644
--- a/test/books.xml
+++ b/test/books.xml
@@ -1,5 +1,8 @@
<?xml version="1.0"?>
<catalog>
+ <!--
+ - A comment for testing.
+ -->
<book id="bk101">
<author>Gambardella, Matthew</author>
<title>XML Developer's Guide</title>
@@ -7,7 +10,8 @@
<price>44.95</price>
<publish_date>2000-10-01</publish_date>
<description>An in-depth look at creating applications
- with XML.</description>
+ with XML.
+ </description>
</book>
<book id="bk102">
<author>Ralls, Kim</author>
@@ -17,7 +21,8 @@
<publish_date>2000-12-16</publish_date>
<description>A former architect battles corporate zombies,
an evil sorceress, and her own childhood to become queen
- of the world.</description>
+ of the world.
+ </description>
</book>
<book id="bk103">
<author>Corets, Eva</author>
@@ -27,7 +32,8 @@
<publish_date>2000-11-17</publish_date>
<description>After the collapse of a nanotechnology
society in England, the young survivors lay the
- foundation for a new society.</description>
+ foundation for a new society.
+ </description>
</book>
<book id="bk104">
<author>Corets, Eva</author>
@@ -38,7 +44,8 @@
<description>In post-apocalypse England, the mysterious
agent known only as Oberon helps to create a new life
for the inhabitants of London. Sequel to Maeve
- Ascendant.</description>
+ Ascendant.
+ </description>
</book>
<book id="bk105">
<author>Corets, Eva</author>
@@ -48,7 +55,8 @@
<publish_date>2001-09-10</publish_date>
<description>The two daughters of Maeve, half-sisters,
battle one another for control of England. Sequel to
- Oberon's Legacy.</description>
+ Oberon's Legacy.
+ </description>
</book>
<book id="bk106">
<author>Randall, Cynthia</author>
@@ -57,7 +65,8 @@
<price>4.95</price>
<publish_date>2000-09-02</publish_date>
<description>When Carla meets Paul at an ornithology
- conference, tempers fly as feathers get ruffled.</description>
+ conference, tempers fly as feathers get ruffled.
+ </description>
</book>
<book id="bk107">
<author>Thurman, Paula</author>
@@ -66,7 +75,8 @@
<price>4.95</price>
<publish_date>2000-11-02</publish_date>
<description>A deep sea diver finds true love twenty
- thousand leagues beneath the sea.</description>
+ thousand leagues beneath the sea.
+ </description>
</book>
<book id="bk108">
<author>Knorr, Stefan</author>
@@ -75,7 +85,8 @@
<price>4.95</price>
<publish_date>2000-12-06</publish_date>
<description>An anthology of horror stories about roaches,
- centipedes, scorpions and other insects.</description>
+ centipedes, scorpions and other insects.
+ </description>
</book>
<book id="bk109">
<author>Kress, Peter</author>
@@ -85,7 +96,8 @@
<publish_date>2000-11-02</publish_date>
<description>After an inadvertant trip through a Heisenberg
Uncertainty Device, James Salway discovers the problems
- of being quantum.</description>
+ of being quantum.
+ </description>
</book>
<book id="bk110">
<author>O'Brien, Tim</author>
@@ -94,7 +106,8 @@
<price>36.95</price>
<publish_date>2000-12-09</publish_date>
<description>Microsoft's .NET initiative is explored in
- detail in this deep programmer's reference.</description>
+ detail in this deep programmer's reference.
+ </description>
</book>
<book id="bk111">
<author>O'Brien, Tim</author>
@@ -104,7 +117,8 @@
<publish_date>2000-12-01</publish_date>
<description>The Microsoft MSXML3 parser is covered in
detail, with attention to XML DOM interfaces, XSLT processing,
- SAX and more.</description>
+ SAX and more.
+ </description>
</book>
<book id="bk112">
<author>Galos, Mike</author>
@@ -115,6 +129,7 @@
<description>Microsoft Visual Studio 7 is explored in depth,
looking at how Visual Basic, Visual C++, C#, and ASP+ are
integrated into a comprehensive development
- environment.</description>
+ environment.
+ </description>
</book>
</catalog>
diff --git a/test/configs/installed/anno-test.json b/test/configs/installed/anno-test.json
new file mode 100644
index 0000000..24806c5
--- /dev/null
+++ b/test/configs/installed/anno-test.json
@@ -0,0 +1,12 @@
+{
+ "$schema": "https://lnav.org/schemas/config-v1.schema.json",
+ "log": {
+ "annotations": {
+ "org.lnav.test": {
+ "description": "test annotation",
+ "condition": ":c_ip IS NOT NULL AND $TEST_ANNO = '1'",
+ "handler": "anno-test.sh"
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/test/configs/installed/anno-test.sh b/test/configs/installed/anno-test.sh
new file mode 100755
index 0000000..7633240
--- /dev/null
+++ b/test/configs/installed/anno-test.sh
@@ -0,0 +1,3 @@
+#!/usr/bin/env bash
+
+echo 'Hello, <span style="color: #f00">World</span>!'
diff --git a/test/configs/installed/hw-url-handler.json b/test/configs/installed/hw-url-handler.json
new file mode 100644
index 0000000..f1d3c73
--- /dev/null
+++ b/test/configs/installed/hw-url-handler.json
@@ -0,0 +1,10 @@
+{
+ "$schema": "https://lnav.org/schemas/config-v1.schema.json",
+ "tuning": {
+ "url-scheme": {
+ "hw": {
+ "handler": "hw-url-handler"
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/test/configs/installed/hw-url-handler.lnav b/test/configs/installed/hw-url-handler.lnav
new file mode 100644
index 0000000..dcf9ec1
--- /dev/null
+++ b/test/configs/installed/hw-url-handler.lnav
@@ -0,0 +1,10 @@
+#
+# @synopsis: hw-url-handler
+# @description: Hello, World! URL handler
+#
+
+;SELECT jget(url, '/host') AS hostname,
+ jget(url, '/path') AS upath
+ FROM (SELECT parse_url($1) AS url)
+
+:sh echo "Hello, $upath at $hostname!"
diff --git a/test/datafile_c.0 b/test/datafile_c.0
new file mode 100644
index 0000000..9a99dd4
--- /dev/null
+++ b/test/datafile_c.0
@@ -0,0 +1,11 @@
+/*
+ * 📂 HELLO, WORLD!
+ */
+
+#include <stdio.h>
+
+int
+main()
+{
+ printf("Hello, World!\n");
+}
diff --git a/test/datafile_simple.1 b/test/datafile_simple.1
index 48bb61a..ed595e3 100644
--- a/test/datafile_simple.1
+++ b/test/datafile_simple.1
@@ -1,13 +1,15 @@
current speed: 38 mph
- key 0:0
key 0:13 ^-----------^ current speed
-pair 0:13 ^-----------^ current speed
- key 15:15 ^
num 15:17 ^^ 38
-pair 15:17 ^^ 38
+ val 15:17 ^^ 38
+pair 0:17 ^---------------^ current speed: 38
+ key 18:18 ^
+word 18:21 ^-^ mph
+ val 18:21 ^-^ mph
+pair 18:21 ^-^ mph
msg :current speed: 38 mph
-format :#: # mph
+format :current speed: # #
{
- "col_0": "current speed",
- "col_1": 38
+ "current speed": 38,
+ "col_0": "mph"
}
diff --git a/test/datafile_simple.14 b/test/datafile_simple.14
index 4c548b9..03bdf90 100644
--- a/test/datafile_simple.14
+++ b/test/datafile_simple.14
@@ -1,8 +1,5 @@
FSChange(Direction.DOWNLOAD, Action.CREATE, name=Fanime 2015, route=[CloudEntry(doc_id=1g5Yho6JmysVGRO-Xmfurra_cQRFb0nTIfZRhGompweg,filename=Baby Names)])
- key 0:0
- sym 0:8 ^------^ FSChange
-pair 0:8 ^------^ FSChange
- key 9:9 ^
+ key 0:8 ^------^ FSChange
key 9:9 ^
sym 9:27 ^----------------^ Direction.DOWNLOAD
val 9:27 ^----------------^ Direction.DOWNLOAD
@@ -13,19 +10,17 @@ pair 9:27 ^----------------^
pair 29:42 ^-----------^ Action.CREATE
key 44:48 ^--^ name
word 49:55 ^----^ Fanime
-wspc 55:56 ^
num 56:60 ^--^ 2015
val 49:60 ^---------^ Fanime 2015
pair 44:60 ^--------------^ name=Fanime 2015
key 62:67 ^---^ route
key 69:79 ^--------^ CloudEntry
key 80:86 ^----^ doc_id
- sym 87:131 ^------------------------------------------^ 1g5Yho6JmysVGRO-Xmfurra_cQRFb0nTIfZRhGompweg
+ id 87:131 ^------------------------------------------^ 1g5Yho6JmysVGRO-Xmfurra_cQRFb0nTIfZRhGompweg
val 87:131 ^------------------------------------------^ 1g5Yho6JmysVGRO-Xmfurra_cQRFb0nTIfZRhGompweg
pair 80:131 ^-------------------------------------------------^ doc_id=1g5Yho6JmysVGRO-Xmfurra_cQRFb0nTIfZRhGompweg
key 132:140 ^------^ filename
word 141:145 ^--^ Baby
-wspc 145:146 ^
word 146:151 ^---^ Names
val 141:151 ^--------^ Baby Names
pair 132:151 ^-----------------^ filename=Baby Names
@@ -36,12 +31,12 @@ pair 69:151
val 69:151 ^--------------------------------------------------------------------------------^ CloudEntry(doc_id=1g5Yho6JmysVGRO-Xmfurra_cQRFb0nTIfZRhGompweg,filename=Baby Names
pair 62:151 ^---------------------------------------------------------------------------------------^ route=[CloudEntry(doc_id=1g5Yho6JmysVGRO-Xmfurra_cQRFb0nTIfZRhGompweg,filename=Baby Names
grp 9:151 ^--------------------------------------------------------------------------------------------------------------------------------------------^ Direction.DOWNLOAD, Action.CREATE, name=Fanime 2015, route=[CloudEntry(doc_id=1g5Yho6JmysVGRO-Xmfurra_cQRFb0nTIfZRhGompweg,filename=Baby Names
-pair 9:151 ^--------------------------------------------------------------------------------------------------------------------------------------------^ Direction.DOWNLOAD, Action.CREATE, name=Fanime 2015, route=[CloudEntry(doc_id=1g5Yho6JmysVGRO-Xmfurra_cQRFb0nTIfZRhGompweg,filename=Baby Names
+ val 9:151 ^--------------------------------------------------------------------------------------------------------------------------------------------^ Direction.DOWNLOAD, Action.CREATE, name=Fanime 2015, route=[CloudEntry(doc_id=1g5Yho6JmysVGRO-Xmfurra_cQRFb0nTIfZRhGompweg,filename=Baby Names
+pair 0:151 ^-----------------------------------------------------------------------------------------------------------------------------------------------------^ FSChange(Direction.DOWNLOAD, Action.CREATE, name=Fanime 2015, route=[CloudEntry(doc_id=1g5Yho6JmysVGRO-Xmfurra_cQRFb0nTIfZRhGompweg,filename=Baby Names
msg :FSChange(Direction.DOWNLOAD, Action.CREATE, name=Fanime 2015, route=[CloudEntry(doc_id=1g5Yho6JmysVGRO-Xmfurra_cQRFb0nTIfZRhGompweg,filename=Baby Names)])
-format :#(#)])
+format :FSChange(#)])
{
- "col_0": "FSChange",
- "col_1": {
+ "FSChange": {
"col_0": "Direction.DOWNLOAD",
"col_1": "Action.CREATE",
"name": "Fanime 2015",
diff --git a/test/datafile_simple.15 b/test/datafile_simple.15
index f0e053d..d921d60 100644
--- a/test/datafile_simple.15
+++ b/test/datafile_simple.15
@@ -1,5 +1,5 @@
Worker successfully completed [ImmutableChange(Direction.UPLOAD, Action.CREATE, ino=LocalID(inode=5567236), path=u'/Users/stack/Google Drive', name=u'pyjsonpath1.patch', parent_ino=LocalID(inode=46166734), is_folder=False)]
- key 31:31 ^
+ key 0:29 ^---------------------------^ Worker successfully completed
key 31:46 ^-------------^ ImmutableChange
key 47:47 ^
sym 47:63 ^--------------^ Direction.UPLOAD
@@ -10,15 +10,17 @@ pair 47:63 ^--------------^
val 65:78 ^-----------^ Action.CREATE
pair 65:78 ^-----------^ Action.CREATE
key 80:83 ^-^ ino
- sym 84:91 ^-----^ LocalID
+quot 84:84 ^
+ val 84:84 ^
+pair 80:84 ^--^ ino=
+ key 84:91 ^-----^ LocalID
key 92:97 ^---^ inode
num 98:105 ^-----^ 5567236
val 98:105 ^-----^ 5567236
pair 92:105 ^-----------^ inode=5567236
grp 92:105 ^-----------^ inode=5567236
+ val 92:105 ^-----------^ inode=5567236
pair 84:105 ^-------------------^ LocalID(inode=5567236
- val 84:105 ^-------------------^ LocalID(inode=5567236
-pair 80:105 ^-----------------------^ ino=LocalID(inode=5567236
key 108:112 ^--^ path
quot 115:140 ^-----------------------^ /Users/stack/Google Drive
val 115:140 ^-----------------------^ /Users/stack/Google Drive
@@ -28,15 +30,17 @@ quot 150:167
val 150:167 ^---------------^ pyjsonpath1.patch
pair 143:167 ^----------------------^ name=u'pyjsonpath1.patch
key 170:180 ^--------^ parent_ino
- sym 181:188 ^-----^ LocalID
+quot 181:181 ^
+ val 181:181 ^
+pair 170:181 ^---------^ parent_ino=
+ key 181:188 ^-----^ LocalID
key 189:194 ^---^ inode
num 195:203 ^------^ 46166734
val 195:203 ^------^ 46166734
pair 189:203 ^------------^ inode=46166734
grp 189:203 ^------------^ inode=46166734
+ val 189:203 ^------------^ inode=46166734
pair 181:203 ^--------------------^ LocalID(inode=46166734
- val 181:203 ^--------------------^ LocalID(inode=46166734
-pair 170:203 ^-------------------------------^ parent_ino=LocalID(inode=46166734
key 206:215 ^-------^ is_folder
cnst 216:221 ^---^ False
val 216:221 ^---^ False
@@ -45,31 +49,46 @@ pair 206:221
val 47:221 ^----------------------------------------------------------------------------------------------------------------------------------------------------------------------------^ Direction.UPLOAD, Action.CREATE, ino=LocalID(inode=5567236), path=u'/Users/stack/Google Drive', name=u'pyjsonpath1.patch', parent_ino=LocalID(inode=46166734), is_folder=False
pair 31:221 ^--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------^ ImmutableChange(Direction.UPLOAD, Action.CREATE, ino=LocalID(inode=5567236), path=u'/Users/stack/Google Drive', name=u'pyjsonpath1.patch', parent_ino=LocalID(inode=46166734), is_folder=False
grp 31:221 ^--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------^ ImmutableChange(Direction.UPLOAD, Action.CREATE, ino=LocalID(inode=5567236), path=u'/Users/stack/Google Drive', name=u'pyjsonpath1.patch', parent_ino=LocalID(inode=46166734), is_folder=False
-pair 31:221 ^--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------^ ImmutableChange(Direction.UPLOAD, Action.CREATE, ino=LocalID(inode=5567236), path=u'/Users/stack/Google Drive', name=u'pyjsonpath1.patch', parent_ino=LocalID(inode=46166734), is_folder=False
+ val 31:221 ^--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------^ ImmutableChange(Direction.UPLOAD, Action.CREATE, ino=LocalID(inode=5567236), path=u'/Users/stack/Google Drive', name=u'pyjsonpath1.patch', parent_ino=LocalID(inode=46166734), is_folder=False
+pair 0:221 ^---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------^ Worker successfully completed [ImmutableChange(Direction.UPLOAD, Action.CREATE, ino=LocalID(inode=5567236), path=u'/Users/stack/Google Drive', name=u'pyjsonpath1.patch', parent_ino=LocalID(inode=46166734), is_folder=False
msg :Worker successfully completed [ImmutableChange(Direction.UPLOAD, Action.CREATE, ino=LocalID(inode=5567236), path=u'/Users/stack/Google Drive', name=u'pyjsonpath1.patch', parent_ino=LocalID(inode=46166734), is_folder=False)]
format :Worker successfully completed [#)]
-[
- {
- "ImmutableChange": {
- "col_0": "Direction.UPLOAD",
- "col_1": "Action.CREATE",
- "ino": {
- "LocalID": [
- {
- "inode": 5567236
- }
- ]
- },
- "path": "/Users/stack/Google Drive",
- "name": "pyjsonpath1.patch",
- "parent_ino": {
- "LocalID": [
- {
- "inode": 46166734
- }
- ]
- },
- "is_folder": false
+{
+ "Worker successfully completed": [
+ {
+ "ImmutableChange": [
+ "Direction.UPLOAD",
+ "Action.CREATE",
+ {
+ "ino": ""
+ },
+ {
+ "LocalID": [
+ {
+ "inode": 5567236
+ }
+ ]
+ },
+ {
+ "path": "/Users/stack/Google Drive"
+ },
+ {
+ "name": "pyjsonpath1.patch"
+ },
+ {
+ "parent_ino": ""
+ },
+ {
+ "LocalID": [
+ {
+ "inode": 46166734
+ }
+ ]
+ },
+ {
+ "is_folder": false
+ }
+ ]
}
- }
-]
+ ]
+}
diff --git a/test/datafile_simple.18 b/test/datafile_simple.18
index 55f125b..aff90b1 100644
--- a/test/datafile_simple.18
+++ b/test/datafile_simple.18
@@ -1,5 +1,5 @@
list [foo(bar=1)]
- key 6:6 ^
+ key 0:4 ^--^ list
key 6:9 ^-^ foo
key 10:13 ^-^ bar
num 14:15 ^ 1
@@ -9,15 +9,18 @@ pair 10:15 ^---^ bar=1
val 10:15 ^---^ bar=1
pair 6:15 ^-------^ foo(bar=1
grp 6:15 ^-------^ foo(bar=1
-pair 6:15 ^-------^ foo(bar=1
+ val 6:15 ^-------^ foo(bar=1
+pair 0:15 ^-------------^ list [foo(bar=1
msg :list [foo(bar=1)]
format :list [#)]
-[
- {
- "foo": [
- {
- "bar": 1
- }
- ]
- }
-]
+{
+ "list": [
+ {
+ "foo": [
+ {
+ "bar": 1
+ }
+ ]
+ }
+ ]
+}
diff --git a/test/datafile_simple.19 b/test/datafile_simple.19
index ce58fc9..4ba0ba4 100644
--- a/test/datafile_simple.19
+++ b/test/datafile_simple.19
@@ -1,5 +1,5 @@
list [foo(bar=1), foo(bar=2), foo(bar=3)]
- key 6:6 ^
+ key 0:4 ^--^ list
key 6:9 ^-^ foo
key 10:13 ^-^ bar
num 14:15 ^ 1
@@ -25,29 +25,32 @@ pair 34:39 ^---^ bar=3
val 34:39 ^---^ bar=3
pair 30:39 ^-------^ foo(bar=3
grp 6:39 ^-------------------------------^ foo(bar=1), foo(bar=2), foo(bar=3
-pair 6:39 ^-------------------------------^ foo(bar=1), foo(bar=2), foo(bar=3
+ val 6:39 ^-------------------------------^ foo(bar=1), foo(bar=2), foo(bar=3
+pair 0:39 ^-------------------------------------^ list [foo(bar=1), foo(bar=2), foo(bar=3
msg :list [foo(bar=1), foo(bar=2), foo(bar=3)]
format :list [#)]
-[
- {
- "foo": [
- {
- "bar": 1
- }
- ]
- },
- {
- "foo": [
- {
- "bar": 2
- }
- ]
- },
- {
- "foo": [
- {
- "bar": 3
- }
- ]
- }
-]
+{
+ "list": [
+ {
+ "foo": [
+ {
+ "bar": 1
+ }
+ ]
+ },
+ {
+ "foo": [
+ {
+ "bar": 2
+ }
+ ]
+ },
+ {
+ "foo": [
+ {
+ "bar": 3
+ }
+ ]
+ }
+ ]
+}
diff --git a/test/datafile_simple.20 b/test/datafile_simple.20
index ea81659..76d5463 100644
--- a/test/datafile_simple.20
+++ b/test/datafile_simple.20
@@ -1,5 +1,5 @@
list ["abc", "def", "ghi"]
- key 7:7 ^
+ key 0:4 ^--^ list
quot 7:10 ^-^ abc
val 7:10 ^-^ abc
quot 14:17 ^-^ def
@@ -7,11 +7,14 @@ quot 14:17 ^-^ def
quot 21:24 ^-^ ghi
val 21:24 ^-^ ghi
grp 7:24 ^---------------^ abc", "def", "ghi
-pair 7:24 ^---------------^ abc", "def", "ghi
+ val 7:24 ^---------------^ abc", "def", "ghi
+pair 0:24 ^----------------------^ list ["abc", "def", "ghi
msg :list ["abc", "def", "ghi"]
format :list [#]
-[
- "abc",
- "def",
- "ghi"
-]
+{
+ "list": [
+ "abc",
+ "def",
+ "ghi"
+ ]
+}
diff --git a/test/datafile_simple.21 b/test/datafile_simple.21
index e570241..3206184 100644
--- a/test/datafile_simple.21
+++ b/test/datafile_simple.21
@@ -13,6 +13,7 @@ quot 59:71 ^-------
quot 74:78 ^--^ test
val 74:78 ^--^ test
grp 2:78 ^--------------------------------------------------------------------------^ correctProperty":"test", "incorrectProperty": "test\"", "nextProperty":"test
+ val 2:78 ^--------------------------------------------------------------------------^ correctProperty":"test", "incorrectProperty": "test\"", "nextProperty":"test
pair 2:78 ^--------------------------------------------------------------------------^ correctProperty":"test", "incorrectProperty": "test\"", "nextProperty":"test
msg :{"correctProperty":"test", "incorrectProperty": "test\"", "nextProperty":"test"}
format :{#}
diff --git a/test/datafile_simple.23 b/test/datafile_simple.23
index d649941..c2b457d 100644
--- a/test/datafile_simple.23
+++ b/test/datafile_simple.23
@@ -1,88 +1,78 @@
2022-06-02T12:26:22.072Z info vpxd[47413] [Originator@6876 sub=vpxLro opID=21fa61e9-3e] [VpxLRO] -- BEGIN lro-954041 -- AuthorizationManager -- vim.AuthorizationManager.hasUserPrivilegeOnEntities -- 52768da7-4006-3d4a-4917-ee027373630f(522e0475-8901-e8b8-1eb8-07ec729ac50c)
- key 23:23 ^
- sym 23:24 ^ Z
-pair 23:24 ^ Z
- key 30:30 ^
- sym 30:34 ^--^ vpxd
-pair 30:34 ^--^ vpxd
- key 35:35 ^
+ key 0:0
+ dt 0:23 ^---------------------^ 2022-06-02T12:26:22.072
+ val 0:23 ^---------------------^ 2022-06-02T12:26:22.072
+pair 0:23 ^---------------------^ 2022-06-02T12:26:22.072
+ key 30:34 ^--^ vpxd
num 35:40 ^---^ 47413
val 35:40 ^---^ 47413
grp 35:40 ^---^ 47413
-pair 35:40 ^---^ 47413
+ val 35:40 ^---^ 47413
+pair 30:40 ^--------^ vpxd[47413
+ key 43:43 ^
key 43:43 ^
- key 43:62 ^-----------------^ Originator@6876 sub
+ id 43:58 ^-------------^ Originator@6876
+ val 43:58 ^-------------^ Originator@6876
+pair 43:58 ^-------------^ Originator@6876
+ key 59:62 ^-^ sub
sym 63:69 ^----^ vpxLro
val 63:69 ^----^ vpxLro
-pair 43:69 ^------------------------^ Originator@6876 sub=vpxLro
+pair 59:69 ^--------^ sub=vpxLro
key 70:74 ^--^ opID
- sym 75:86 ^---------^ 21fa61e9-3e
+ id 75:86 ^---------^ 21fa61e9-3e
val 75:86 ^---------^ 21fa61e9-3e
pair 70:86 ^--------------^ opID=21fa61e9-3e
grp 43:86 ^-----------------------------------------^ Originator@6876 sub=vpxLro opID=21fa61e9-3e
+ val 43:86 ^-----------------------------------------^ Originator@6876 sub=vpxLro opID=21fa61e9-3e
pair 43:86 ^-----------------------------------------^ Originator@6876 sub=vpxLro opID=21fa61e9-3e
key 89:89 ^
sym 89:95 ^----^ VpxLRO
val 89:95 ^----^ VpxLRO
grp 89:95 ^----^ VpxLRO
+ val 89:95 ^----^ VpxLRO
pair 89:95 ^----^ VpxLRO
- key 97:97 ^
- sym 97:99 ^^ --
-pair 97:99 ^^ --
- key 100:100 ^
- sym 100:105 ^---^ BEGIN
-pair 100:105 ^---^ BEGIN
- key 106:106 ^
- sym 106:116 ^--------^ lro-954041
-pair 106:116 ^--------^ lro-954041
- key 117:117 ^
- sym 117:119 ^^ --
-pair 117:119 ^^ --
+ key 100:105 ^---^ BEGIN
+ id 106:116 ^--------^ lro-954041
+ val 106:116 ^--------^ lro-954041
+pair 100:116 ^--------------^ BEGIN lro-954041
key 120:120 ^
sym 120:140 ^------------------^ AuthorizationManager
+ val 120:140 ^------------------^ AuthorizationManager
pair 120:140 ^------------------^ AuthorizationManager
- key 141:141 ^
- sym 141:143 ^^ --
-pair 141:143 ^^ --
key 144:144 ^
sym 144:195 ^-------------------------------------------------^ vim.AuthorizationManager.hasUserPrivilegeOnEntities
+ val 144:195 ^-------------------------------------------------^ vim.AuthorizationManager.hasUserPrivilegeOnEntities
pair 144:195 ^-------------------------------------------------^ vim.AuthorizationManager.hasUserPrivilegeOnEntities
- key 196:196 ^
- sym 196:198 ^^ --
-pair 196:198 ^^ --
key 199:199 ^
uuid 199:235 ^----------------------------------^ 52768da7-4006-3d4a-4917-ee027373630f
+ val 199:235 ^----------------------------------^ 52768da7-4006-3d4a-4917-ee027373630f
pair 199:235 ^----------------------------------^ 52768da7-4006-3d4a-4917-ee027373630f
key 236:236 ^
uuid 236:272 ^----------------------------------^ 522e0475-8901-e8b8-1eb8-07ec729ac50c
val 236:272 ^----------------------------------^ 522e0475-8901-e8b8-1eb8-07ec729ac50c
grp 236:272 ^----------------------------------^ 522e0475-8901-e8b8-1eb8-07ec729ac50c
+ val 236:272 ^----------------------------------^ 522e0475-8901-e8b8-1eb8-07ec729ac50c
pair 236:272 ^----------------------------------^ 522e0475-8901-e8b8-1eb8-07ec729ac50c
msg :2022-06-02T12:26:22.072Z info vpxd[47413] [Originator@6876 sub=vpxLro opID=21fa61e9-3e] [VpxLRO] -- BEGIN lro-954041 -- AuthorizationManager -- vim.AuthorizationManager.hasUserPrivilegeOnEntities -- 52768da7-4006-3d4a-4917-ee027373630f(522e0475-8901-e8b8-1eb8-07ec729ac50c)
-format :2022-06-02T12:26:22.072# info #[#] [#] [#] # # # # # # # # #(#)
+format :#Z info vpxd[#] [#] [#] -- BEGIN # -- # -- # -- #(#)
{
- "col_0": "Z",
- "col_1": "vpxd",
- "col_2": [
+ "col_0": "2022-06-02T12:26:22.072",
+ "vpxd": [
47413
],
- "col_3": {
- "Originator@6876 sub": "vpxLro",
+ "col_1": {
+ "col_0": "Originator@6876",
+ "sub": "vpxLro",
"opID": "21fa61e9-3e"
},
- "col_4": [
+ "col_2": [
"VpxLRO"
],
- "col_5": "--",
- "col_6": "BEGIN",
- "col_7": "lro-954041",
- "col_8": "--",
- "col_9": "AuthorizationManager",
- "col_10": "--",
- "col_11": "vim.AuthorizationManager.hasUserPrivilegeOnEntities",
- "col_12": "--",
- "col_13": "52768da7-4006-3d4a-4917-ee027373630f",
- "col_14": [
+ "BEGIN": "lro-954041",
+ "col_3": "AuthorizationManager",
+ "col_4": "vim.AuthorizationManager.hasUserPrivilegeOnEntities",
+ "col_5": "52768da7-4006-3d4a-4917-ee027373630f",
+ "col_6": [
"522e0475-8901-e8b8-1eb8-07ec729ac50c"
]
}
diff --git a/test/datafile_simple.24 b/test/datafile_simple.24
new file mode 100644
index 0000000..213fb83
--- /dev/null
+++ b/test/datafile_simple.24
@@ -0,0 +1,52 @@
+ LoadResources path (./locale/) locale (en) removeable (false) resMap (00007f9ee4195fa0) extKeys (0000000000000000)
+ key 0:18 ^----------------^ LoadResources path
+ key 20:20 ^
+path 20:30 ^--------^ ./locale/)
+ val 20:30 ^--------^ ./locale/)
+pair 20:30 ^--------^ ./locale/)
+ key 31:37 ^----^ locale
+word 39:41 ^^ en
+ val 39:41 ^^ en
+ grp 39:41 ^^ en
+ val 39:41 ^^ en
+pair 31:41 ^--------^ locale (en
+ key 43:53 ^--------^ removeable
+cnst 55:60 ^---^ false
+ val 55:60 ^---^ false
+ grp 55:60 ^---^ false
+ val 55:60 ^---^ false
+pair 43:60 ^---------------^ removeable (false
+ key 62:68 ^----^ resMap
+ hex 70:86 ^--------------^ 00007f9ee4195fa0
+ val 70:86 ^--------------^ 00007f9ee4195fa0
+ grp 70:86 ^--------------^ 00007f9ee4195fa0
+ val 70:86 ^--------------^ 00007f9ee4195fa0
+pair 62:86 ^----------------------^ resMap (00007f9ee4195fa0
+ key 88:95 ^-----^ extKeys
+ cc 97:113 ^--------------^ 0000000000000000
+ val 97:113 ^--------------^ 0000000000000000
+ grp 97:113 ^--------------^ 0000000000000000
+ val 97:113 ^--------------^ 0000000000000000
+pair 88:113 ^-----------------------^ extKeys (0000000000000000
+ grp 20:113 ^-------------------------------------------------------------------------------------------^ ./locale/) locale (en) removeable (false) resMap (00007f9ee4195fa0) extKeys (0000000000000000
+ val 20:113 ^-------------------------------------------------------------------------------------------^ ./locale/) locale (en) removeable (false) resMap (00007f9ee4195fa0) extKeys (0000000000000000
+pair 0:113 ^---------------------------------------------------------------------------------------------------------------^ LoadResources path (./locale/) locale (en) removeable (false) resMap (00007f9ee4195fa0) extKeys (0000000000000000
+msg :LoadResources path (./locale/) locale (en) removeable (false) resMap (00007f9ee4195fa0) extKeys (0000000000000000)
+format :LoadResources path (#)
+{
+ "LoadResources path": {
+ "col_0": "./locale/)",
+ "locale": [
+ "en"
+ ],
+ "removeable": [
+ false
+ ],
+ "resMap": [
+ "00007f9ee4195fa0"
+ ],
+ "extKeys": [
+ "0000000000000000"
+ ]
+ }
+}
diff --git a/test/datafile_simple.25 b/test/datafile_simple.25
new file mode 100644
index 0000000..db330d1
--- /dev/null
+++ b/test/datafile_simple.25
@@ -0,0 +1,15 @@
+ a=1 b=2
+ key 0:1 ^ a
+ num 2:3 ^ 1
+ val 2:3 ^ 1
+pair 0:3 ^-^ a=1
+ key 4:5 ^ b
+ num 6:7 ^ 2
+ val 6:7 ^ 2
+pair 4:7 ^-^ b=2
+msg :a=1 b=2
+format :a=# b=#
+{
+ "a": 1,
+ "b": 2
+}
diff --git a/test/datafile_simple.7 b/test/datafile_simple.7
index 3c0810f..90dc6e5 100644
--- a/test/datafile_simple.7
+++ b/test/datafile_simple.7
@@ -1,5 +1,5 @@
func(arg1="a", arg2="b")
- key 5:5 ^
+ key 0:4 ^--^ func
key 5:9 ^--^ arg1
quot 11:12 ^ a
val 11:12 ^ a
@@ -9,10 +9,13 @@ quot 21:22 ^ b
val 21:22 ^ b
pair 15:22 ^-----^ arg2="b
grp 5:22 ^---------------^ arg1="a", arg2="b
-pair 5:22 ^---------------^ arg1="a", arg2="b
+ val 5:22 ^---------------^ arg1="a", arg2="b
+pair 0:22 ^--------------------^ func(arg1="a", arg2="b
msg :func(arg1="a", arg2="b")
format :func(#)
{
- "arg1": "a",
- "arg2": "b"
+ "func": {
+ "arg1": "a",
+ "arg2": "b"
+ }
}
diff --git a/test/datafile_simple.8 b/test/datafile_simple.8
index c6363c3..5119ec9 100644
--- a/test/datafile_simple.8
+++ b/test/datafile_simple.8
@@ -1,22 +1,30 @@
Succeeded authorizing right 'system.privilege.taskport.debug' by client '/usr/libexec/taskgated' [76339] for authorization created by '/usr/libexec/taskgated' [77395] (100003,1)
- key 29:29 ^
+word 22:27 ^---^ right
+ key 22:27 ^---^ right
quot 29:60 ^-----------------------------^ system.privilege.taskport.debug
-pair 29:60 ^-----------------------------^ system.privilege.taskport.debug
- key 73:73 ^
+ val 29:60 ^-----------------------------^ system.privilege.taskport.debug
+pair 22:60 ^------------------------------------^ right 'system.privilege.taskport.debug
+word 65:71 ^----^ client
+ key 65:71 ^----^ client
quot 73:95 ^--------------------^ /usr/libexec/taskgated
-pair 73:95 ^--------------------^ /usr/libexec/taskgated
+ val 73:95 ^--------------------^ /usr/libexec/taskgated
+pair 65:95 ^----------------------------^ client '/usr/libexec/taskgated
key 98:98 ^
num 98:103 ^---^ 76339
val 98:103 ^---^ 76339
grp 98:103 ^---^ 76339
+ val 98:103 ^---^ 76339
pair 98:103 ^---^ 76339
- key 135:135 ^
+word 131:133 ^^ by
+ key 131:133 ^^ by
quot 135:157 ^--------------------^ /usr/libexec/taskgated
-pair 135:157 ^--------------------^ /usr/libexec/taskgated
+ val 135:157 ^--------------------^ /usr/libexec/taskgated
+pair 131:157 ^------------------------^ by '/usr/libexec/taskgated
key 160:160 ^
num 160:165 ^---^ 77395
val 160:165 ^---^ 77395
grp 160:165 ^---^ 77395
+ val 160:165 ^---^ 77395
pair 160:165 ^---^ 77395
key 168:168 ^
num 168:174 ^----^ 100003
@@ -24,20 +32,21 @@ pair 160:165
num 175:176 ^ 1
val 175:176 ^ 1
grp 168:176 ^------^ 100003,1
+ val 168:176 ^------^ 100003,1
pair 168:176 ^------^ 100003,1
msg :Succeeded authorizing right 'system.privilege.taskport.debug' by client '/usr/libexec/taskgated' [76339] for authorization created by '/usr/libexec/taskgated' [77395] (100003,1)
format :Succeeded authorizing right # by client # [#] for authorization created by # [#] (#)
{
- "col_0": "system.privilege.taskport.debug",
- "col_1": "/usr/libexec/taskgated",
- "col_2": [
+ "right": "system.privilege.taskport.debug",
+ "client": "/usr/libexec/taskgated",
+ "col_0": [
76339
],
- "col_3": "/usr/libexec/taskgated",
- "col_4": [
+ "by": "/usr/libexec/taskgated",
+ "col_1": [
77395
],
- "col_5": [
+ "col_2": [
100003,
1
]
diff --git a/test/document.sections.tests.cc b/test/document.sections.tests.cc
index 8e88b75..ccafe7e 100644
--- a/test/document.sections.tests.cc
+++ b/test/document.sections.tests.cc
@@ -141,6 +141,59 @@ DESCRIPTION
});
}
+TEST_CASE("lnav::document::sections::doc for diff")
+{
+ attr_line_t INPUT = R"(
+[sql] add json_group_object aggregate function
+
+diff --git a/NEWS b/NEWS
+index d239d2f..7a06070 100644
+--- a/NEWS
++++ b/NEWS
+@@ -4,6 +4,8 @@ lnav v0.8.1:
+ * Log formats can now create SQL views and execute other statements
+ by adding '.sql' files to their format directories. The SQL scripts
+ will be executed on startup.
++ * Added a 'json_group_object' aggregate SQL function that collects values
++ from a GROUP BY query into an JSON object.
+
+ Interface Changes:
+ * The 'o/O' hotkeys have been reassigned to navigate through log
+diff --git a/configure.ac b/configure.ac
+index 718a2d4..10f5580 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -39,8 +39,8 @@ AC_PROG_CXX
+
+ CPPFLAGS="$CPPFLAGS -D_ISOC99_SOURCE -D__STDC_LIMIT_MACROS"
+
+-# CFLAGS=`echo $CFLAGS | sed 's/-O2//g'`
+-# CXXFLAGS=`echo $CXXFLAGS | sed 's/-O2//g'`
++CFLAGS=`echo $CFLAGS | sed 's/-O2//g'`
++CXXFLAGS=`echo $CXXFLAGS | sed 's/-O2//g'`
+
+ AC_ARG_VAR(SFTP_TEST_URL)
+)";
+
+ auto meta = lnav::document::discover_structure(INPUT, line_range{0, -1});
+
+ meta.m_sections_tree.visit_all([](const auto& intv) {
+ auto ser = intv.value.match(
+ [](const std::string& name) { return name; },
+ [](const size_t index) { return fmt::format("{}", index); });
+ printf("interval %d:%d %s\n", intv.start, intv.stop, ser.c_str());
+ });
+ lnav::document::hier_node::depth_first(
+ meta.m_sections_root.get(), [](const auto* node) {
+ printf("node %p %d\n", node, node->hn_start);
+ for (const auto& pair : node->hn_named_children) {
+ printf(" child: %p %s\n", pair.second, pair.first.c_str());
+ }
+ });
+
+ CHECK(meta.m_sections_root->hn_named_children.size() == 2);
+}
+
TEST_CASE("lnav::document::sections::sql")
{
attr_line_t INPUT
diff --git a/test/drive_data_scanner.cc b/test/drive_data_scanner.cc
index a7a0fb7..63e7579 100644
--- a/test/drive_data_scanner.cc
+++ b/test/drive_data_scanner.cc
@@ -37,6 +37,7 @@
#include <stdio.h>
#include <stdlib.h>
+#include "base/injector.bind.hh"
#include "base/injector.hh"
#include "config.h"
#include "data_parser.hh"
@@ -51,6 +52,9 @@
const char* TMP_NAME = "scanned.tmp";
+static auto bound_file_options_hier
+ = injector::bind<lnav::safe_file_options_hier>::to_singleton();
+
int
main(int argc, char* argv[])
{
@@ -190,11 +194,12 @@ main(int argc, char* argv[])
string_attrs_t sa;
if (format.get() != nullptr) {
- format->annotate(0, sa, ll_values);
+ format->annotate(0, sa, ll_values, false);
body = find_string_attr_range(sa, &SA_BODY);
}
data_parser::TRACE_FILE = fopen("scanned.dpt", "w");
+ setvbuf(data_parser::TRACE_FILE, nullptr, _IONBF, 0);
data_scanner ds(sub_line, body.lr_start);
diff --git a/test/drive_doc_discovery.cc b/test/drive_doc_discovery.cc
new file mode 100644
index 0000000..d12f231
--- /dev/null
+++ b/test/drive_doc_discovery.cc
@@ -0,0 +1,120 @@
+/**
+ * Copyright (c) 2024, Timothy Stack
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * * Neither the name of Timothy Stack nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ''AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stdlib.h>
+
+#include "base/fs_util.hh"
+#include "document.sections.hh"
+#include "fmt/color.h"
+
+int
+main(int argc, char* argv[])
+{
+ int retval = EXIT_SUCCESS;
+
+ if (argc < 2) {
+ fprintf(stderr, "error: expecting file to discover\n");
+ retval = EXIT_FAILURE;
+ } else {
+ const auto fn = ghc::filesystem::path(argv[1]);
+ auto read_res = lnav::filesystem::read_file(fn);
+ if (read_res.isErr()) {
+ fprintf(stderr,
+ "error: unable to read %s -- %s\n",
+ fn.c_str(),
+ read_res.unwrapErr().c_str());
+ retval = EXIT_FAILURE;
+ } else {
+ auto content = attr_line_t(read_res.unwrap());
+ const auto& content_sf
+ = string_fragment::from_str(content.get_string());
+ auto tf = detect_text_format(content_sf, fn);
+ auto lr = line_range{0, static_cast<int>(content.length())};
+ auto meta = lnav::document::discover_structure(content, lr, tf);
+
+ auto remaining = content_sf;
+ while (!remaining.empty()) {
+ auto line_pair
+ = remaining.split_when(string_fragment::tag1{'\n'});
+ auto line_sf = line_pair.first;
+ fmt::print(FMT_STRING("{}\n"), line_sf);
+ size_t indent = 0;
+ meta.m_sections_tree.visit_overlapping(
+ line_sf.sf_begin,
+ line_sf.sf_end,
+ [&line_sf, &indent](const auto& iv) {
+ if (iv.start < line_sf.sf_begin) {
+ return;
+ }
+ auto this_indent = iv.start - line_sf.sf_begin;
+ if (this_indent < indent) {
+ return;
+ }
+ auto indent_diff = this_indent - indent;
+ indent = this_indent;
+ fmt::print(FMT_STRING("{}^"),
+ std::string(indent_diff, ' '));
+ if (iv.stop >= line_sf.sf_end + 1) {
+ fmt::print(FMT_STRING(" [{}:{}) - {}"),
+ iv.start,
+ iv.stop,
+ iv.value);
+ return;
+ }
+ auto dot_len = iv.stop - iv.start - 1;
+ fmt::print(FMT_STRING("{}^"),
+ std::string(dot_len, '-'));
+ fmt::print(FMT_STRING(" [{}:{})"), iv.start, iv.stop);
+ });
+ fmt::print(FMT_STRING("\nPath for line[{}:{}): "),
+ line_sf.sf_begin,
+ line_sf.sf_end);
+ meta.m_sections_tree.visit_overlapping(
+ line_sf.sf_begin,
+ line_sf.sf_end,
+ [&line_sf](const auto& iv) {
+ fmt::print(
+ fmt::fg(iv.start < line_sf.sf_begin
+ ? fmt::terminal_color::yellow
+ : fmt::terminal_color::green),
+ FMT_STRING("\uff1a{}"),
+ iv.value.match(
+ [](const std::string& str) { return str; },
+ [](size_t ind) {
+ return fmt::format(FMT_STRING("[{}]"), ind);
+ }));
+ });
+ fmt::print(FMT_STRING("\n"));
+ remaining = line_pair.second;
+ }
+ }
+ }
+
+ return retval;
+}
diff --git a/test/drive_grep_proc.cc b/test/drive_grep_proc.cc
index 4118f43..d90cde4 100644
--- a/test/drive_grep_proc.cc
+++ b/test/drive_grep_proc.cc
@@ -89,7 +89,7 @@ public:
void grep_match(grep_proc<vis_line_t>& gp,
vis_line_t line,
int start,
- int end)
+ int end) override
{
printf("%d:%d:%d\n", (int) line, start, end);
}
@@ -98,12 +98,21 @@ public:
vis_line_t line,
int start,
int end,
- char* capture)
+ const string_fragment& capture) override
{
- fprintf(stderr, "%d(%d:%d)%s\n", (int) line, start, end, capture);
+ fprintf(stderr,
+ "%d(%d:%d)%.*s\n",
+ (int) line,
+ start,
+ end,
+ capture.length(),
+ capture.data());
}
- void grep_end(grep_proc<vis_line_t>& gp) { this->ms_finished = true; }
+ void grep_end(grep_proc<vis_line_t>& gp) override
+ {
+ this->ms_finished = true;
+ }
bool ms_finished;
};
diff --git a/test/drive_listview.cc b/test/drive_listview.cc
index 76d3df8..96fe459 100644
--- a/test/drive_listview.cc
+++ b/test/drive_listview.cc
@@ -41,12 +41,9 @@ static listview_curses lv;
class my_source : public list_data_source {
public:
- my_source() : ms_rows(2){};
+ my_source() : ms_rows(2) {}
- size_t listview_rows(const listview_curses& lv)
- {
- return this->ms_rows;
- };
+ size_t listview_rows(const listview_curses& lv) { return this->ms_rows; }
void listview_value_for_rows(const listview_curses& lv,
vis_line_t row,
@@ -67,12 +64,12 @@ public:
}
++row;
}
- };
+ }
size_t listview_size_for_row(const listview_curses& lv, vis_line_t row)
{
return 100;
- };
+ }
bool attrline_next_token(const view_curses& vc,
int line,
@@ -80,7 +77,7 @@ public:
int& attrs_out)
{
return false;
- };
+ }
int ms_rows;
};
@@ -90,9 +87,14 @@ main(int argc, char* argv[])
{
int c, retval = EXIT_SUCCESS;
bool wait_for_input = false, set_height = false;
+ const char* keys = nullptr;
my_source ms;
WINDOW* win;
+ setenv("DUMP_CRASH", "1", 1);
+ log_install_handlers();
+ lnav_log_crash_dir = "/tmp";
+
win = initscr();
lv.set_data_source(&ms);
lv.set_window(win);
@@ -111,15 +113,9 @@ main(int argc, char* argv[])
lv.set_height(vis_line_t(atoi(optarg)));
set_height = true;
break;
- case 'k': {
- // Treats the string argument as sequence of key presses (only
- // individual characters supported as key input)
- for (char* ptr = optarg; ptr != nullptr && *ptr != '\0'; ++ptr)
- {
- lv.handle_key(static_cast<int>(*ptr));
- }
+ case 'k':
+ keys = optarg;
break;
- }
case 't':
lv.set_selection(vis_line_t(atoi(optarg)));
break;
@@ -141,6 +137,19 @@ main(int argc, char* argv[])
lv.set_height(vis_line_t(height - lv.get_y()));
}
+ if (keys != nullptr) {
+ // Treats the string argument as sequence of key presses (only
+ // individual characters supported as key input)
+ for (const char* ptr = keys; ptr != nullptr && *ptr != '\0'; ++ptr) {
+ lv.do_update();
+ if (wait_for_input) {
+ getch();
+ refresh();
+ }
+ lv.handle_key(static_cast<int>(*ptr));
+ }
+ }
+
lv.do_update();
refresh();
if (wait_for_input) {
diff --git a/test/drive_logfile.cc b/test/drive_logfile.cc
index 2da37dd..52f8baa 100644
--- a/test/drive_logfile.cc
+++ b/test/drive_logfile.cc
@@ -37,6 +37,7 @@
#include <sys/types.h>
#include <unistd.h>
+#include "base/injector.bind.hh"
#include "base/injector.hh"
#include "base/opt_util.hh"
#include "config.h"
@@ -54,6 +55,9 @@ typedef enum {
MODE_LEVELS,
} dl_mode_t;
+static auto bound_file_options_hier
+ = injector::bind<lnav::safe_file_options_hier>::to_singleton();
+
time_t
time(time_t* _unused)
{
diff --git a/test/drive_shlexer.cc b/test/drive_shlexer.cc
index fe6f15f..ffbfc32 100644
--- a/test/drive_shlexer.cc
+++ b/test/drive_shlexer.cc
@@ -35,7 +35,7 @@
using namespace std;
const char* ST_TOKEN_NAMES[] = {
- "err",
+ "eof",
"wsp",
"esc",
"dst",
@@ -47,6 +47,22 @@ const char* ST_TOKEN_NAMES[] = {
"til",
};
+static void
+put_underline(FILE* file, string_fragment frag)
+{
+ for (int lpc = 0; lpc < frag.sf_end; lpc++) {
+ if (lpc == frag.sf_begin) {
+ fputc('^', stdout);
+ } else if (lpc == (frag.sf_end - 1)) {
+ fputc('^', stdout);
+ } else if (lpc > frag.sf_begin) {
+ fputc('-', stdout);
+ } else {
+ fputc(' ', stdout);
+ }
+ }
+}
+
int
main(int argc, char* argv[])
{
@@ -56,39 +72,44 @@ main(int argc, char* argv[])
}
shlex lexer(argv[1], strlen(argv[1]));
- string_fragment cap;
- shlex_token_t token;
+ bool done = false;
printf(" %s\n", argv[1]);
- while (lexer.tokenize(cap, token)) {
- int lpc;
+ while (!done) {
+ auto tokenize_res = lexer.tokenize();
+ if (tokenize_res.isErr()) {
+ auto te = tokenize_res.unwrapErr();
+
+ printf("err ");
+ put_underline(stdout, te.te_source);
+ printf(" -- %s\n", te.te_msg);
+ break;
+ }
- printf("%s ", ST_TOKEN_NAMES[(int) token]);
- for (lpc = 0; lpc < cap.sf_end; lpc++) {
- if (lpc == cap.sf_begin) {
- fputc('^', stdout);
- } else if (lpc == (cap.sf_end - 1)) {
- fputc('^', stdout);
- } else if (lpc > cap.sf_begin) {
- fputc('-', stdout);
- } else {
- fputc(' ', stdout);
- }
+ auto tr = tokenize_res.unwrap();
+ if (tr.tr_token == shlex_token_t::eof) {
+ done = true;
}
+ printf("%s ", ST_TOKEN_NAMES[(int) tr.tr_token]);
+ put_underline(stdout, tr.tr_frag);
printf("\n");
}
lexer.reset();
std::string result;
- if (lexer.eval(result, map<string, string>())) {
+ std::map<std::string, scoped_value_t> vars;
+ if (lexer.eval(result, scoped_resolver{&vars})) {
printf("eval -- %s\n", result.c_str());
}
lexer.reset();
- std::vector<std::string> sresult;
- if (lexer.split(sresult, map<string, string>())) {
+ auto split_res = lexer.split(scoped_resolver{&vars});
+ if (split_res.isOk()) {
+ auto sresult = split_res.unwrap();
printf("split:\n");
for (size_t lpc = 0; lpc < sresult.size(); lpc++) {
- printf(" %zu -- %s\n", lpc, sresult[lpc].c_str());
+ printf("% 3zu ", lpc);
+ put_underline(stdout, sresult[lpc].se_origin);
+ printf(" -- %s\n", sresult[lpc].se_value.c_str());
}
}
diff --git a/test/drive_view_colors.cc b/test/drive_view_colors.cc
index f7b38c1..e806192 100644
--- a/test/drive_view_colors.cc
+++ b/test/drive_view_colors.cc
@@ -38,7 +38,7 @@ class test_colors : public view_curses {
public:
test_colors() : tc_window(nullptr) {}
- void do_update() override
+ bool do_update() override
{
auto& vc = view_colors::singleton();
int lpc;
@@ -68,7 +68,9 @@ public:
al.with_attr(
{line_range{8, 11}, VC_STYLE.value(text_attrs{A_REVERSE})});
test_colors::mvwattrline(this->tc_window, lpc, 0, al, lr);
- };
+
+ return true;
+ }
WINDOW* tc_window;
};
diff --git a/test/example.patch b/test/example.patch
new file mode 100644
index 0000000..fe03d05
--- /dev/null
+++ b/test/example.patch
@@ -0,0 +1,102 @@
+[tests] fix export session test
+
+diff --git a/test/Makefile.am b/test/Makefile.am
+index aad96a87..07afe2d5 100644
+--- a/test/Makefile.am
++++ b/test/Makefile.am
+@@ -483,6 +483,7 @@ distclean-local:
+ $(RM_V)rm -rf .lnav
+ $(RM_V)rm -rf regex101-home
+ $(RM_V)rm -rf events-home
++ $(RM_V)rm -rf support-dump
+ $(RM_V)rm -rf ../installer-test-home
+
+ expected:
+diff --git a/test/expected/expected.am b/test/expected/expected.am
+index 99823624..2fa3d9fd 100644
+--- a/test/expected/expected.am
++++ b/test/expected/expected.am
+@@ -414,6 +414,8 @@ EXPECTED_FILES = \
+ $(srcdir)/%reldir%/test_sessions.sh_b932b33dd087b94d4306dd179c5d4f9ddd394960.out \
+ $(srcdir)/%reldir%/test_sessions.sh_ddf45811e9906de9f3930fe802ac7b2cc6e48106.err \
+ $(srcdir)/%reldir%/test_sessions.sh_ddf45811e9906de9f3930fe802ac7b2cc6e48106.out \
++ $(srcdir)/%reldir%/test_sessions.sh_e39648f425c3f291c9d1c0d14595a019abd0cb48.err \
++ $(srcdir)/%reldir%/test_sessions.sh_e39648f425c3f291c9d1c0d14595a019abd0cb48.out \
+ $(srcdir)/%reldir%/test_shlexer.sh_14dd967cb2af90899c9e5e45d00b676b5a3163aa.err \
+ $(srcdir)/%reldir%/test_shlexer.sh_14dd967cb2af90899c9e5e45d00b676b5a3163aa.out \
+ $(srcdir)/%reldir%/test_shlexer.sh_2781f5dd570580cbe746ad91b58a28b8371283b3.err \
+diff --git a/test/expected/test_sessions.sh_8732dad5481be991ca7f291d9c5451c7b016cea7.out b/test/expected/test_sessions.sh_8732dad5481be991ca7f291d9c5451c7b016cea7.out
+index 7b4c3036..a1e2e6f2 100644
+--- a/test/expected/test_sessions.sh_8732dad5481be991ca7f291d9c5451c7b016cea7.out
++++ b/test/expected/test_sessions.sh_8732dad5481be991ca7f291d9c5451c7b016cea7.out
+@@ -11,6 +11,7 @@
+
+ ;INSERT OR IGNORE INTO environ (name, value) VALUES ('LOG_DIR_0', '{top_srcdir_parent}')
+ :open $LOG_DIR_0/lnav/test/logfile_access_log.0
++
+ :rebuild
+
+
+diff --git a/test/expected/test_sessions.sh_e39648f425c3f291c9d1c0d14595a019abd0cb48.err b/test/expected/test_sessions.sh_e39648f425c3f291c9d1c0d14595a019abd0cb48.err
+new file mode 100644
+index 00000000..e69de29b
+diff --git a/test/expected/test_sessions.sh_e39648f425c3f291c9d1c0d14595a019abd0cb48.out b/test/expected/test_sessions.sh_e39648f425c3f291c9d1c0d14595a019abd0cb48.out
+new file mode 100644
+index 00000000..6cc4bc8c
+--- /dev/null
++++ b/test/expected/test_sessions.sh_e39648f425c3f291c9d1c0d14595a019abd0cb48.out
+@@ -0,0 +1,33 @@
++#!lnav -Nf
++# This file is an export of an lnav session. You can type
++# '|/path/to/this/file' in lnav to execute this file and
++# restore the state of the session.
++
++;SELECT raise_error('This session export was made with a newer version of lnav, please upgrade to ' || '0.11.0' || ' or later')
++ WHERE lnav_version() < '0.11.0' COLLATE naturalcase
++
++# The files loaded into the session were:
++
++
++;INSERT OR IGNORE INTO environ (name, value) VALUES ('LOG_DIR_0', '{builddir}')
++:open $LOG_DIR_0/support-dump/logfile_access_log.0
++
++:rebuild
++
++
++# The following SQL statements will restore the bookmarks,
++# comments, and tags that were added in the session.
++
++;SELECT total_changes() AS before_mark_changes
++;UPDATE all_logs SET log_mark = 1, log_comment = NULL, log_tags = NULL WHERE log_time_msecs = 1248130769000 AND log_format = 'access_log' AND log_line_hash = 'v1:b05c1bdfe75cde41e151c89087e31951'
++
++;SELECT 1 - (total_changes() - $before_mark_changes) AS failed_mark_changes
++;SELECT echoln(printf('%sERROR%s: failed to restore %d bookmarks',
++ $ansi_red, $ansi_norm, $failed_mark_changes))
++ WHERE $failed_mark_changes != 0
++
++
++# The following commands will restore the state of the LOG view.
++
++:switch-to-view log
++:goto 1
+diff --git a/test/test_sessions.sh b/test/test_sessions.sh
+index a2c59bbe..31d6d376 100644
+--- a/test/test_sessions.sh
++++ b/test/test_sessions.sh
+@@ -26,11 +26,15 @@ run_cap_test ${lnav_test} -nq \
+ -c ":save-session" \
+ ${test_dir}/logfile_access_log.0
+
++mkdir -p support-dump
++echo 'Hello' > support-dump/readme
++cp ${test_dir}/logfile_access_log.0 support-dump/
++
+ run_cap_test ${lnav_test} -nq \
+ -c ";update access_log set log_mark = 1 where sc_bytes > 60000" \
+ -c ":goto 1" \
+ -c ":export-session-to -" \
+- ${test_dir}/logfile_access_log.0
++ support-dump/logfile_access_log.0
+
+ run_cap_test ${lnav_test} -nq \
+ -c ";update access_log set log_mark = 1 where sc_bytes > 60000" \
diff --git a/test/example.toml b/test/example.toml
new file mode 100644
index 0000000..909e5b4
--- /dev/null
+++ b/test/example.toml
@@ -0,0 +1,38 @@
+# This is a TOML document
+
+title = "TOML Example"
+
+[owner]
+name = "Tom Preston-Werner"
+dob = 1979-05-27T07:32:00-08:00
+
+[database]
+enabled = true
+ports = [
+ 8000,
+ 8001,
+ 8002,
+ 8003,
+ 8004,
+ 8005,
+ 8006,
+ 8007,
+ 8008,
+ 8009,
+ 8010,
+ 8011,
+ 8012,
+ 8013,
+]
+data = [["delta", "phi"], [3.14]]
+temp_targets = { cpu = 79.5, case = 72.0 }
+
+[servers]
+
+[servers.alpha]
+ip = "10.0.0.1"
+role = "frontend"
+
+[servers.beta]
+ip = "10.0.0.2"
+role = "backend"
diff --git a/test/expected/expected.am b/test/expected/expected.am
index 6a88ee8..bedc4dc 100644
--- a/test/expected/expected.am
+++ b/test/expected/expected.am
@@ -1,15 +1,35 @@
EXPECTED_FILES = \
+ $(srcdir)/%reldir%/test_cli.sh_0b3639753916f71254e8c9cce4ebb8bfd9978d3e.err \
+ $(srcdir)/%reldir%/test_cli.sh_0b3639753916f71254e8c9cce4ebb8bfd9978d3e.out \
+ $(srcdir)/%reldir%/test_cli.sh_108c6922cde063429f76abc3fdb8a81ad9a2f671.err \
+ $(srcdir)/%reldir%/test_cli.sh_108c6922cde063429f76abc3fdb8a81ad9a2f671.out \
+ $(srcdir)/%reldir%/test_cli.sh_10c33e465ef7681c6b5519d05d557426b26cd43d.err \
+ $(srcdir)/%reldir%/test_cli.sh_10c33e465ef7681c6b5519d05d557426b26cd43d.out \
$(srcdir)/%reldir%/test_cli.sh_17a68b798354f9a6cdfab372006caeb74038d15c.err \
$(srcdir)/%reldir%/test_cli.sh_17a68b798354f9a6cdfab372006caeb74038d15c.out \
+ $(srcdir)/%reldir%/test_cli.sh_3114508cf42fb2608ef77f4bc294a84885c97a79.err \
+ $(srcdir)/%reldir%/test_cli.sh_3114508cf42fb2608ef77f4bc294a84885c97a79.out \
+ $(srcdir)/%reldir%/test_cli.sh_4327033cfae0d4c170a38a3c4a570520bfabb493.err \
+ $(srcdir)/%reldir%/test_cli.sh_4327033cfae0d4c170a38a3c4a570520bfabb493.out \
$(srcdir)/%reldir%/test_cli.sh_5524542b1a6954ff9741155101497270a2f0c557.err \
$(srcdir)/%reldir%/test_cli.sh_5524542b1a6954ff9741155101497270a2f0c557.out \
+ $(srcdir)/%reldir%/test_cli.sh_76aa57821598962e59063a40c20171040c95a731.err \
+ $(srcdir)/%reldir%/test_cli.sh_76aa57821598962e59063a40c20171040c95a731.out \
$(srcdir)/%reldir%/test_cli.sh_97e19b9ff3775d84074455a2e8993a0611b1c269.err \
$(srcdir)/%reldir%/test_cli.sh_97e19b9ff3775d84074455a2e8993a0611b1c269.out \
- $(srcdir)/%reldir%/test_cli.sh_a1a09f890f4604309d0a81bbbec8e50fb7d5e887.err \
- $(srcdir)/%reldir%/test_cli.sh_a1a09f890f4604309d0a81bbbec8e50fb7d5e887.out \
+ $(srcdir)/%reldir%/test_cli.sh_af3ace7762b4cc150fcdcac86083b379bded7b32.err \
+ $(srcdir)/%reldir%/test_cli.sh_af3ace7762b4cc150fcdcac86083b379bded7b32.out \
+ $(srcdir)/%reldir%/test_cli.sh_c69c835a3c43210225cf62564b3e9584c899af20.err \
+ $(srcdir)/%reldir%/test_cli.sh_c69c835a3c43210225cf62564b3e9584c899af20.out \
+ $(srcdir)/%reldir%/test_cli.sh_cc06341dd560f927512e92c7c0985ed8b25827ae.err \
+ $(srcdir)/%reldir%/test_cli.sh_cc06341dd560f927512e92c7c0985ed8b25827ae.out \
$(srcdir)/%reldir%/test_cli.sh_f2e41555f1a5f40f54ce241207af602ed1503a2b.err \
$(srcdir)/%reldir%/test_cli.sh_f2e41555f1a5f40f54ce241207af602ed1503a2b.out \
+ $(srcdir)/%reldir%/test_cli.sh_ff7da172f4350a2adb74b8764575823d798ed8b6.err \
+ $(srcdir)/%reldir%/test_cli.sh_ff7da172f4350a2adb74b8764575823d798ed8b6.out \
+ $(srcdir)/%reldir%/test_cmds.sh_015ffe79a08f4c9f0cd1cb84c6afa4398f879fc7.err \
+ $(srcdir)/%reldir%/test_cmds.sh_015ffe79a08f4c9f0cd1cb84c6afa4398f879fc7.out \
$(srcdir)/%reldir%/test_cmds.sh_017b495b95218b7c083951e2dba331cfec6e90be.err \
$(srcdir)/%reldir%/test_cmds.sh_017b495b95218b7c083951e2dba331cfec6e90be.out \
$(srcdir)/%reldir%/test_cmds.sh_0b1e4b1523dfca71927b1fe721c74490c51361d1.err \
@@ -74,6 +94,8 @@ EXPECTED_FILES = \
$(srcdir)/%reldir%/test_cmds.sh_38fa2a95b703d4ce12e82882eca1938264822690.out \
$(srcdir)/%reldir%/test_cmds.sh_3b20a298e2c059d7f6045cbc0c07ca3db3917695.err \
$(srcdir)/%reldir%/test_cmds.sh_3b20a298e2c059d7f6045cbc0c07ca3db3917695.out \
+ $(srcdir)/%reldir%/test_cmds.sh_3b4bea458c59d2bac492e568616b610625037ad0.err \
+ $(srcdir)/%reldir%/test_cmds.sh_3b4bea458c59d2bac492e568616b610625037ad0.out \
$(srcdir)/%reldir%/test_cmds.sh_453054e29aaca4c2662c45c2a1f2f63f3510d8dd.err \
$(srcdir)/%reldir%/test_cmds.sh_453054e29aaca4c2662c45c2a1f2f63f3510d8dd.out \
$(srcdir)/%reldir%/test_cmds.sh_4b2d91b19008d5b775090e3ef87c111f9e603b15.err \
@@ -88,6 +110,8 @@ EXPECTED_FILES = \
$(srcdir)/%reldir%/test_cmds.sh_53a9686102f69b07b034df291f554a00b265ed20.out \
$(srcdir)/%reldir%/test_cmds.sh_55c2fd15ec2c7d96dbef7b36a42a1b7b42f90dbc.err \
$(srcdir)/%reldir%/test_cmds.sh_55c2fd15ec2c7d96dbef7b36a42a1b7b42f90dbc.out \
+ $(srcdir)/%reldir%/test_cmds.sh_5630626e6f68c3d4a2c3e5f27d024df5950b88b5.err \
+ $(srcdir)/%reldir%/test_cmds.sh_5630626e6f68c3d4a2c3e5f27d024df5950b88b5.out \
$(srcdir)/%reldir%/test_cmds.sh_5bfd08c1639701476d7b9348c36afd46fdbe6f2a.err \
$(srcdir)/%reldir%/test_cmds.sh_5bfd08c1639701476d7b9348c36afd46fdbe6f2a.out \
$(srcdir)/%reldir%/test_cmds.sh_624a41e152675575f4b07c19b2cf0e3a028429a2.err \
@@ -96,6 +120,8 @@ EXPECTED_FILES = \
$(srcdir)/%reldir%/test_cmds.sh_62d68c0a11757c996f24c8f003e6b4059c3e30b2.out \
$(srcdir)/%reldir%/test_cmds.sh_661ec61acdd8f6fa6ec1e3c2cf5f896eef431351.err \
$(srcdir)/%reldir%/test_cmds.sh_661ec61acdd8f6fa6ec1e3c2cf5f896eef431351.out \
+ $(srcdir)/%reldir%/test_cmds.sh_68c774418bac897bd4d4fe9dbbf08454886b2e15.err \
+ $(srcdir)/%reldir%/test_cmds.sh_68c774418bac897bd4d4fe9dbbf08454886b2e15.out \
$(srcdir)/%reldir%/test_cmds.sh_6a6031113aca32fabc5a3da64b7be46f5ce5a312.err \
$(srcdir)/%reldir%/test_cmds.sh_6a6031113aca32fabc5a3da64b7be46f5ce5a312.out \
$(srcdir)/%reldir%/test_cmds.sh_6e016c0ed61fc652be1a79b864875ffede64f281.err \
@@ -130,6 +156,10 @@ EXPECTED_FILES = \
$(srcdir)/%reldir%/test_cmds.sh_8d5b43c693e78804a8fb06989392fa8cccb46b7b.out \
$(srcdir)/%reldir%/test_cmds.sh_9445861db011dfa2d21a44788047de345ee291e8.err \
$(srcdir)/%reldir%/test_cmds.sh_9445861db011dfa2d21a44788047de345ee291e8.out \
+ $(srcdir)/%reldir%/test_cmds.sh_949826cc086c7a5c87270be172e3caa3bf8f928d.err \
+ $(srcdir)/%reldir%/test_cmds.sh_949826cc086c7a5c87270be172e3caa3bf8f928d.out \
+ $(srcdir)/%reldir%/test_cmds.sh_9527f941dc84a2ac3a030f222e41c6ccd1961cbe.err \
+ $(srcdir)/%reldir%/test_cmds.sh_9527f941dc84a2ac3a030f222e41c6ccd1961cbe.out \
$(srcdir)/%reldir%/test_cmds.sh_95beaabe41d72cf4c6810e79c623da759ac1c71b.err \
$(srcdir)/%reldir%/test_cmds.sh_95beaabe41d72cf4c6810e79c623da759ac1c71b.out \
$(srcdir)/%reldir%/test_cmds.sh_968dac54dc80d91a5da2322890c6c26dfa0d8462.err \
@@ -150,6 +180,8 @@ EXPECTED_FILES = \
$(srcdir)/%reldir%/test_cmds.sh_ac45fb0f8f9578c3ded0855f694698ec38ce31ad.out \
$(srcdir)/%reldir%/test_cmds.sh_af0fcbd30b3fd0d13477aa3325ef0302052a4d9f.err \
$(srcdir)/%reldir%/test_cmds.sh_af0fcbd30b3fd0d13477aa3325ef0302052a4d9f.out \
+ $(srcdir)/%reldir%/test_cmds.sh_b3d0588ad144a841200692b46125bddf66f5d8bb.err \
+ $(srcdir)/%reldir%/test_cmds.sh_b3d0588ad144a841200692b46125bddf66f5d8bb.out \
$(srcdir)/%reldir%/test_cmds.sh_b5a530d16c982cf769151291f0bfd612ea71183f.err \
$(srcdir)/%reldir%/test_cmds.sh_b5a530d16c982cf769151291f0bfd612ea71183f.out \
$(srcdir)/%reldir%/test_cmds.sh_b6a3bb78e9d60e5e1f5ce5b18e40d2f1662707ab.err \
@@ -184,16 +216,18 @@ EXPECTED_FILES = \
$(srcdir)/%reldir%/test_cmds.sh_ca66660c973f76a3c2a147c7f5035bcb4e8a8bbc.out \
$(srcdir)/%reldir%/test_cmds.sh_ccd326da92d1cacda63501cd1a3077381a18e8f2.err \
$(srcdir)/%reldir%/test_cmds.sh_ccd326da92d1cacda63501cd1a3077381a18e8f2.out \
+ $(srcdir)/%reldir%/test_cmds.sh_d1afefacbdd387f02562c8633968b0162a588502.err \
+ $(srcdir)/%reldir%/test_cmds.sh_d1afefacbdd387f02562c8633968b0162a588502.out \
$(srcdir)/%reldir%/test_cmds.sh_d3b69abdfb39e4bfa5828c2f9593e2b2b7ed4d5d.err \
$(srcdir)/%reldir%/test_cmds.sh_d3b69abdfb39e4bfa5828c2f9593e2b2b7ed4d5d.out \
$(srcdir)/%reldir%/test_cmds.sh_d76d77ad95b9f120825417a6a8220c13df9541fc.err \
$(srcdir)/%reldir%/test_cmds.sh_d76d77ad95b9f120825417a6a8220c13df9541fc.out \
- $(srcdir)/%reldir%/test_cmds.sh_d7eebacdcf2cb194f25fa4ef97b7b5376b442467.err \
- $(srcdir)/%reldir%/test_cmds.sh_d7eebacdcf2cb194f25fa4ef97b7b5376b442467.out \
$(srcdir)/%reldir%/test_cmds.sh_d836c84398c831c976df46f46fe3bf5983c44c37.err \
$(srcdir)/%reldir%/test_cmds.sh_d836c84398c831c976df46f46fe3bf5983c44c37.out \
$(srcdir)/%reldir%/test_cmds.sh_d8eeef53a58bdeddbc1028d7c525413e3ca1c8df.err \
$(srcdir)/%reldir%/test_cmds.sh_d8eeef53a58bdeddbc1028d7c525413e3ca1c8df.out \
+ $(srcdir)/%reldir%/test_cmds.sh_da5f7160b967e60dbd772573614e2da89c5e22b2.err \
+ $(srcdir)/%reldir%/test_cmds.sh_da5f7160b967e60dbd772573614e2da89c5e22b2.out \
$(srcdir)/%reldir%/test_cmds.sh_dbdd62995fdefc8318053af05a32416eccfa79fc.err \
$(srcdir)/%reldir%/test_cmds.sh_dbdd62995fdefc8318053af05a32416eccfa79fc.out \
$(srcdir)/%reldir%/test_cmds.sh_dd41fbbcd71699314af232156d4155fbdf849131.err \
@@ -210,12 +244,16 @@ EXPECTED_FILES = \
$(srcdir)/%reldir%/test_cmds.sh_eb22c3e94c536a1bfaeae0c40d271b5b4b08f4fc.out \
$(srcdir)/%reldir%/test_cmds.sh_ec2b28c6ea328e3ea56b13ab8ca3d9ee856a9dda.err \
$(srcdir)/%reldir%/test_cmds.sh_ec2b28c6ea328e3ea56b13ab8ca3d9ee856a9dda.out \
+ $(srcdir)/%reldir%/test_cmds.sh_ec3a64cad41b070a1d04e2bfc3dc14cb2d964091.err \
+ $(srcdir)/%reldir%/test_cmds.sh_ec3a64cad41b070a1d04e2bfc3dc14cb2d964091.out \
$(srcdir)/%reldir%/test_cmds.sh_ed5b73be0b991e0e8d6735e31df5b37c4286321b.err \
$(srcdir)/%reldir%/test_cmds.sh_ed5b73be0b991e0e8d6735e31df5b37c4286321b.out \
$(srcdir)/%reldir%/test_cmds.sh_f788d5f5932905d09ecbd581040ec5ce76459da5.err \
$(srcdir)/%reldir%/test_cmds.sh_f788d5f5932905d09ecbd581040ec5ce76459da5.out \
$(srcdir)/%reldir%/test_cmds.sh_ff6faebbde8586e04bfadba14a3d2bb4451784ad.err \
$(srcdir)/%reldir%/test_cmds.sh_ff6faebbde8586e04bfadba14a3d2bb4451784ad.out \
+ $(srcdir)/%reldir%/test_config.sh_13fa2428c26fa12e732209620e21466b36bab252.err \
+ $(srcdir)/%reldir%/test_config.sh_13fa2428c26fa12e732209620e21466b36bab252.out \
$(srcdir)/%reldir%/test_config.sh_2765ea0d4c037b8c935840604edb0ae796c97a04.err \
$(srcdir)/%reldir%/test_config.sh_2765ea0d4c037b8c935840604edb0ae796c97a04.out \
$(srcdir)/%reldir%/test_config.sh_5fd9fbccc35e9b06abdd913da0c16bdb306b926e.err \
@@ -244,12 +282,34 @@ EXPECTED_FILES = \
$(srcdir)/%reldir%/test_events.sh_d9c7907f907b2335e1328b23fdc46d0968a608d9.out \
$(srcdir)/%reldir%/test_events.sh_ed8dc44add223341c03ccb7b3e18371bdb42b710.err \
$(srcdir)/%reldir%/test_events.sh_ed8dc44add223341c03ccb7b3e18371bdb42b710.out \
+ $(srcdir)/%reldir%/test_format_installer.sh_1e08efc3b8c7b67d944a1f8c475cd31d98d5b4f6.err \
+ $(srcdir)/%reldir%/test_format_installer.sh_1e08efc3b8c7b67d944a1f8c475cd31d98d5b4f6.out \
+ $(srcdir)/%reldir%/test_format_installer.sh_6cd73153a8990b8ddb8ce489e90ec667a442f7f9.err \
+ $(srcdir)/%reldir%/test_format_installer.sh_6cd73153a8990b8ddb8ce489e90ec667a442f7f9.out \
+ $(srcdir)/%reldir%/test_format_installer.sh_947cbc64a150c7fe2a17e1c7a69e9a932aeaa16b.err \
+ $(srcdir)/%reldir%/test_format_installer.sh_947cbc64a150c7fe2a17e1c7a69e9a932aeaa16b.out \
$(srcdir)/%reldir%/test_format_loader.sh_15e861d2327512a721fd42ae51dc5427689e0bb6.err \
$(srcdir)/%reldir%/test_format_loader.sh_15e861d2327512a721fd42ae51dc5427689e0bb6.out \
$(srcdir)/%reldir%/test_format_loader.sh_5992e2695b7e6cf1f3520dbb87af8fc2b8f27088.err \
$(srcdir)/%reldir%/test_format_loader.sh_5992e2695b7e6cf1f3520dbb87af8fc2b8f27088.out \
$(srcdir)/%reldir%/test_format_loader.sh_fca6c1fb9f3aaa69b3ffb2d1a8a86434b2f4a247.err \
$(srcdir)/%reldir%/test_format_loader.sh_fca6c1fb9f3aaa69b3ffb2d1a8a86434b2f4a247.out \
+ $(srcdir)/%reldir%/test_gantt.sh_3af11588ee36bab7e2caea0f7a24d3c9cafd2310.err \
+ $(srcdir)/%reldir%/test_gantt.sh_3af11588ee36bab7e2caea0f7a24d3c9cafd2310.out \
+ $(srcdir)/%reldir%/test_gantt.sh_63500be50fc6743d8312133e2030cbbc39ca15ff.err \
+ $(srcdir)/%reldir%/test_gantt.sh_63500be50fc6743d8312133e2030cbbc39ca15ff.out \
+ $(srcdir)/%reldir%/test_gantt.sh_74a94ee9103eac5e8e78ca57bccf49efa3827a9d.err \
+ $(srcdir)/%reldir%/test_gantt.sh_74a94ee9103eac5e8e78ca57bccf49efa3827a9d.out \
+ $(srcdir)/%reldir%/test_gantt.sh_83db753dd2669f801810f311e2d7d74397e10f26.err \
+ $(srcdir)/%reldir%/test_gantt.sh_83db753dd2669f801810f311e2d7d74397e10f26.out \
+ $(srcdir)/%reldir%/test_gantt.sh_8fed8a7400042814ba13e50be5e3bd1741d82119.err \
+ $(srcdir)/%reldir%/test_gantt.sh_8fed8a7400042814ba13e50be5e3bd1741d82119.out \
+ $(srcdir)/%reldir%/test_gantt.sh_b013ab41c3cca76cf05a01ca1ba65888be247ada.err \
+ $(srcdir)/%reldir%/test_gantt.sh_b013ab41c3cca76cf05a01ca1ba65888be247ada.out \
+ $(srcdir)/%reldir%/test_gantt.sh_cde7947f361e5f3d4cd1bbc3f7458f426b6a8eb4.err \
+ $(srcdir)/%reldir%/test_gantt.sh_cde7947f361e5f3d4cd1bbc3f7458f426b6a8eb4.out \
+ $(srcdir)/%reldir%/test_gantt.sh_e6a4681a5a671c84c020dc91d7ce03c9d17fde07.err \
+ $(srcdir)/%reldir%/test_gantt.sh_e6a4681a5a671c84c020dc91d7ce03c9d17fde07.out \
$(srcdir)/%reldir%/test_json_format.sh_168cac40c27f547044c89d39eb0ff2ef81da4b21.err \
$(srcdir)/%reldir%/test_json_format.sh_168cac40c27f547044c89d39eb0ff2ef81da4b21.out \
$(srcdir)/%reldir%/test_json_format.sh_1bb0fd243e916546aea22029245ac590dae17a86.err \
@@ -260,6 +320,8 @@ EXPECTED_FILES = \
$(srcdir)/%reldir%/test_json_format.sh_4315a3d6124c14cbe3c474b6dbf4cc8720a9859f.out \
$(srcdir)/%reldir%/test_json_format.sh_469f005b0708d629bc95f0c48a5e390f440c1fef.err \
$(srcdir)/%reldir%/test_json_format.sh_469f005b0708d629bc95f0c48a5e390f440c1fef.out \
+ $(srcdir)/%reldir%/test_json_format.sh_5795c5ffd98ae581b30c6f0983349bf7a6a84501.err \
+ $(srcdir)/%reldir%/test_json_format.sh_5795c5ffd98ae581b30c6f0983349bf7a6a84501.out \
$(srcdir)/%reldir%/test_json_format.sh_6767b91d715338c24c67e928b59c560c84ddf4be.err \
$(srcdir)/%reldir%/test_json_format.sh_6767b91d715338c24c67e928b59c560c84ddf4be.out \
$(srcdir)/%reldir%/test_json_format.sh_6fbe20faa161ab9fa77df7568fff84bf3e47e920.err \
@@ -276,6 +338,8 @@ EXPECTED_FILES = \
$(srcdir)/%reldir%/test_json_format.sh_84a71e94dc34661a70bb9015b67ba00e93e9cfb5.out \
$(srcdir)/%reldir%/test_json_format.sh_85d03b1b41a7f819af135d2521a8f2c59418e907.err \
$(srcdir)/%reldir%/test_json_format.sh_85d03b1b41a7f819af135d2521a8f2c59418e907.out \
+ $(srcdir)/%reldir%/test_json_format.sh_895283eeb4c10e9c1702fafd13723c8085944f88.err \
+ $(srcdir)/%reldir%/test_json_format.sh_895283eeb4c10e9c1702fafd13723c8085944f88.out \
$(srcdir)/%reldir%/test_json_format.sh_8f2ebcd319afc7966ef11e31f9dd646bf6f001dd.err \
$(srcdir)/%reldir%/test_json_format.sh_8f2ebcd319afc7966ef11e31f9dd646bf6f001dd.out \
$(srcdir)/%reldir%/test_json_format.sh_952297a90e312d2184fe3e4df795ddc731b096c9.err \
@@ -302,18 +366,24 @@ EXPECTED_FILES = \
$(srcdir)/%reldir%/test_json_format.sh_f740026626ab554dacb249762d8be7d6539b8c6e.out \
$(srcdir)/%reldir%/test_json_format.sh_fe19b7ebd349cd689b3f5c22618eab5ce995e68e.err \
$(srcdir)/%reldir%/test_json_format.sh_fe19b7ebd349cd689b3f5c22618eab5ce995e68e.out \
+ $(srcdir)/%reldir%/test_logfile.sh_00877d2e9dadab916a02005a068410dfbd85ec74.err \
+ $(srcdir)/%reldir%/test_logfile.sh_00877d2e9dadab916a02005a068410dfbd85ec74.out \
$(srcdir)/%reldir%/test_logfile.sh_05d1505168bf34b89fc0d1a39f1409cfe798119e.err \
$(srcdir)/%reldir%/test_logfile.sh_05d1505168bf34b89fc0d1a39f1409cfe798119e.out \
$(srcdir)/%reldir%/test_logfile.sh_08d731a04c877a34819b35de185e30a74c9fd497.err \
$(srcdir)/%reldir%/test_logfile.sh_08d731a04c877a34819b35de185e30a74c9fd497.out \
$(srcdir)/%reldir%/test_logfile.sh_09bd16e044302f6b121092534708594bdad11b5a.err \
$(srcdir)/%reldir%/test_logfile.sh_09bd16e044302f6b121092534708594bdad11b5a.out \
- $(srcdir)/%reldir%/test_logfile.sh_1c6eee38f66356fcd9a9f0faedaea6dbcc901060.err \
- $(srcdir)/%reldir%/test_logfile.sh_1c6eee38f66356fcd9a9f0faedaea6dbcc901060.out \
+ $(srcdir)/%reldir%/test_logfile.sh_18d9a7beeb09041993d0d6da488fc8192d111bd9.err \
+ $(srcdir)/%reldir%/test_logfile.sh_18d9a7beeb09041993d0d6da488fc8192d111bd9.out \
$(srcdir)/%reldir%/test_logfile.sh_218ecb88b4753010c4264b3ac351260b4811612f.err \
$(srcdir)/%reldir%/test_logfile.sh_218ecb88b4753010c4264b3ac351260b4811612f.out \
$(srcdir)/%reldir%/test_logfile.sh_290a3c49e53c2229a7400c107338fa0bb38375e2.err \
$(srcdir)/%reldir%/test_logfile.sh_290a3c49e53c2229a7400c107338fa0bb38375e2.out \
+ $(srcdir)/%reldir%/test_logfile.sh_2e72d848a51ac1eb476b973c61fe43a65d579ba5.err \
+ $(srcdir)/%reldir%/test_logfile.sh_2e72d848a51ac1eb476b973c61fe43a65d579ba5.out \
+ $(srcdir)/%reldir%/test_logfile.sh_341e491abcf8772422bafb8b0eaea6492da230f6.err \
+ $(srcdir)/%reldir%/test_logfile.sh_341e491abcf8772422bafb8b0eaea6492da230f6.out \
$(srcdir)/%reldir%/test_logfile.sh_3fc6bfd8a6160817211f3e14fde957af75b9dbe7.err \
$(srcdir)/%reldir%/test_logfile.sh_3fc6bfd8a6160817211f3e14fde957af75b9dbe7.out \
$(srcdir)/%reldir%/test_logfile.sh_4a2a907fcb069b8d6e65961a7b2e796d6c3a87b1.err \
@@ -322,12 +392,28 @@ EXPECTED_FILES = \
$(srcdir)/%reldir%/test_logfile.sh_6602faf7817c494c33e32da7ee95f13aa9210d01.out \
$(srcdir)/%reldir%/test_logfile.sh_7c2e11488bccc59458b5775db4b90de964858259.err \
$(srcdir)/%reldir%/test_logfile.sh_7c2e11488bccc59458b5775db4b90de964858259.out \
+ $(srcdir)/%reldir%/test_logfile.sh_82d65f4dac07b1623f8202444d5b9144096e8243.err \
+ $(srcdir)/%reldir%/test_logfile.sh_82d65f4dac07b1623f8202444d5b9144096e8243.out \
+ $(srcdir)/%reldir%/test_logfile.sh_8a5e754cd471e5fdcdaede49c9290903acd7aad6.err \
+ $(srcdir)/%reldir%/test_logfile.sh_8a5e754cd471e5fdcdaede49c9290903acd7aad6.out \
$(srcdir)/%reldir%/test_logfile.sh_a7037efd0c4bbf51940137a44e57d94e9307e83e.err \
$(srcdir)/%reldir%/test_logfile.sh_a7037efd0c4bbf51940137a44e57d94e9307e83e.out \
$(srcdir)/%reldir%/test_logfile.sh_c18e14a26d8261c9f72747118a469266121d5459.err \
$(srcdir)/%reldir%/test_logfile.sh_c18e14a26d8261c9f72747118a469266121d5459.out \
+ $(srcdir)/%reldir%/test_logfile.sh_cc368d4b4bb6a9b9c79bd5a70ffa1f2d9d01e286.err \
+ $(srcdir)/%reldir%/test_logfile.sh_cc368d4b4bb6a9b9c79bd5a70ffa1f2d9d01e286.out \
+ $(srcdir)/%reldir%/test_logfile.sh_ccb0d31813367c8d9dc5b5df383fac5b780711c1.err \
+ $(srcdir)/%reldir%/test_logfile.sh_ccb0d31813367c8d9dc5b5df383fac5b780711c1.out \
+ $(srcdir)/%reldir%/test_logfile.sh_d14f6d8888652321206549df8a9535399f0fd372.err \
+ $(srcdir)/%reldir%/test_logfile.sh_d14f6d8888652321206549df8a9535399f0fd372.out \
+ $(srcdir)/%reldir%/test_logfile.sh_de8d59879fe6aa5a012b0748ff77ae26c07aea89.err \
+ $(srcdir)/%reldir%/test_logfile.sh_de8d59879fe6aa5a012b0748ff77ae26c07aea89.out \
$(srcdir)/%reldir%/test_logfile.sh_e840b674cd65936a72bd64b1dac1524d16fe44c3.err \
$(srcdir)/%reldir%/test_logfile.sh_e840b674cd65936a72bd64b1dac1524d16fe44c3.out \
+ $(srcdir)/%reldir%/test_logfile.sh_f171f265d8d45a2707e8b9f53e938f574c614d25.err \
+ $(srcdir)/%reldir%/test_logfile.sh_f171f265d8d45a2707e8b9f53e938f574c614d25.out \
+ $(srcdir)/%reldir%/test_meta.sh_0ae5840c0758ec95a397493ac3c3d4fabd397a34.err \
+ $(srcdir)/%reldir%/test_meta.sh_0ae5840c0758ec95a397493ac3c3d4fabd397a34.out \
$(srcdir)/%reldir%/test_meta.sh_154047fb52e4831aabf7d36512247bad6a6a2cf7.err \
$(srcdir)/%reldir%/test_meta.sh_154047fb52e4831aabf7d36512247bad6a6a2cf7.out \
$(srcdir)/%reldir%/test_meta.sh_3c9b5940f7533c5fc3d4956a6efce50a9e7132d4.err \
@@ -340,6 +426,8 @@ EXPECTED_FILES = \
$(srcdir)/%reldir%/test_meta.sh_48e85ba0c0945a5085fb4ee255771406061a9c17.out \
$(srcdir)/%reldir%/test_meta.sh_4c39b356748c67ccf8a6027a1af88da532f8252a.err \
$(srcdir)/%reldir%/test_meta.sh_4c39b356748c67ccf8a6027a1af88da532f8252a.out \
+ $(srcdir)/%reldir%/test_meta.sh_65325d1bcb58e530a8d681685fea56803f67a2eb.err \
+ $(srcdir)/%reldir%/test_meta.sh_65325d1bcb58e530a8d681685fea56803f67a2eb.out \
$(srcdir)/%reldir%/test_meta.sh_7b75763926d832bf9784ca234a060859770aabe7.err \
$(srcdir)/%reldir%/test_meta.sh_7b75763926d832bf9784ca234a060859770aabe7.out \
$(srcdir)/%reldir%/test_meta.sh_811b1a8a176b25001a89e35b295a1117ab76969b.err \
@@ -348,6 +436,10 @@ EXPECTED_FILES = \
$(srcdir)/%reldir%/test_meta.sh_83ac877aa9d38b25945cf96d6326a2468187c40f.out \
$(srcdir)/%reldir%/test_meta.sh_a7489c1f0e001adc732b7e2ab31bb30960fda078.err \
$(srcdir)/%reldir%/test_meta.sh_a7489c1f0e001adc732b7e2ab31bb30960fda078.out \
+ $(srcdir)/%reldir%/test_meta.sh_aae427fe704f131f8466fbfc9e7967c2e874530a.err \
+ $(srcdir)/%reldir%/test_meta.sh_aae427fe704f131f8466fbfc9e7967c2e874530a.out \
+ $(srcdir)/%reldir%/test_meta.sh_b622c04c2bede5371bfa6f2627b0474049ecc5e9.err \
+ $(srcdir)/%reldir%/test_meta.sh_b622c04c2bede5371bfa6f2627b0474049ecc5e9.out \
$(srcdir)/%reldir%/test_meta.sh_c063f96398650f130941bbbf4cf63c1244fdbee5.err \
$(srcdir)/%reldir%/test_meta.sh_c063f96398650f130941bbbf4cf63c1244fdbee5.out \
$(srcdir)/%reldir%/test_meta.sh_c75128169049bd88d5eaf8b84a7f617e5ae5d936.err \
@@ -356,6 +448,8 @@ EXPECTED_FILES = \
$(srcdir)/%reldir%/test_meta.sh_c8fb22932af2467a2651797a8a8d8cddcd09431d.out \
$(srcdir)/%reldir%/test_meta.sh_d6af0b41066ca3be0bbce89c83c011f4ecfa516e.err \
$(srcdir)/%reldir%/test_meta.sh_d6af0b41066ca3be0bbce89c83c011f4ecfa516e.out \
+ $(srcdir)/%reldir%/test_meta.sh_f7c55356df0d71c51eb7629c5a81f347083ce1ef.err \
+ $(srcdir)/%reldir%/test_meta.sh_f7c55356df0d71c51eb7629c5a81f347083ce1ef.out \
$(srcdir)/%reldir%/test_meta.sh_fd09cb565f44a114d8c9a519e571918e30262eaf.err \
$(srcdir)/%reldir%/test_meta.sh_fd09cb565f44a114d8c9a519e571918e30262eaf.out \
$(srcdir)/%reldir%/test_meta.sh_fdf4a91aa55262255816dff7d605f1f0a5d6fe92.err \
@@ -376,16 +470,78 @@ EXPECTED_FILES = \
$(srcdir)/%reldir%/test_pretty_print.sh_cd361eeca7e91bfab942b75d6c3422c7a456a111.out \
$(srcdir)/%reldir%/test_pretty_print.sh_f8feb52a321026d9562b271eb37a2c56dfaed329.err \
$(srcdir)/%reldir%/test_pretty_print.sh_f8feb52a321026d9562b271eb37a2c56dfaed329.out \
+ $(srcdir)/%reldir%/test_prql.sh_06900fac5c2e854b1208320b753fcd43d4ba63a3.err \
+ $(srcdir)/%reldir%/test_prql.sh_06900fac5c2e854b1208320b753fcd43d4ba63a3.out \
+ $(srcdir)/%reldir%/test_prql.sh_15ebcd913f56cde35af26c6300533d6e76bf1b55.err \
+ $(srcdir)/%reldir%/test_prql.sh_15ebcd913f56cde35af26c6300533d6e76bf1b55.out \
+ $(srcdir)/%reldir%/test_prql.sh_5aea925b5ad95f55ce6b1b07b7046bc3d7310137.err \
+ $(srcdir)/%reldir%/test_prql.sh_5aea925b5ad95f55ce6b1b07b7046bc3d7310137.out \
+ $(srcdir)/%reldir%/test_regex101.sh_0fa3663a45aca6a328cb728872af7ed7ee896f1c.err \
+ $(srcdir)/%reldir%/test_regex101.sh_0fa3663a45aca6a328cb728872af7ed7ee896f1c.out \
+ $(srcdir)/%reldir%/test_regex101.sh_182ae9244db314a953af2bee969726e381bc5a32.err \
+ $(srcdir)/%reldir%/test_regex101.sh_182ae9244db314a953af2bee969726e381bc5a32.out \
+ $(srcdir)/%reldir%/test_regex101.sh_2158f1f011ba8e1b152396c072790c076fdb8ce8.err \
+ $(srcdir)/%reldir%/test_regex101.sh_2158f1f011ba8e1b152396c072790c076fdb8ce8.out \
+ $(srcdir)/%reldir%/test_regex101.sh_281af24141680330791db7f7c5fa70833ce08a6b.err \
+ $(srcdir)/%reldir%/test_regex101.sh_281af24141680330791db7f7c5fa70833ce08a6b.out \
+ $(srcdir)/%reldir%/test_regex101.sh_35703b13990785632cca82123fb3883797959c0b.err \
+ $(srcdir)/%reldir%/test_regex101.sh_35703b13990785632cca82123fb3883797959c0b.out \
+ $(srcdir)/%reldir%/test_regex101.sh_366730cac50b4a09b7de4b84641791470b1cb9a3.err \
+ $(srcdir)/%reldir%/test_regex101.sh_366730cac50b4a09b7de4b84641791470b1cb9a3.out \
+ $(srcdir)/%reldir%/test_regex101.sh_3d18474a3e472fff6e23e0c41337ec9188fee591.err \
+ $(srcdir)/%reldir%/test_regex101.sh_3d18474a3e472fff6e23e0c41337ec9188fee591.out \
+ $(srcdir)/%reldir%/test_regex101.sh_442cc58676590a3604d5c2183f5fe0a75c98351a.err \
+ $(srcdir)/%reldir%/test_regex101.sh_442cc58676590a3604d5c2183f5fe0a75c98351a.out \
+ $(srcdir)/%reldir%/test_regex101.sh_566fd88d216a44bc1c6e23f2d6f2d0caf99d42f9.err \
+ $(srcdir)/%reldir%/test_regex101.sh_566fd88d216a44bc1c6e23f2d6f2d0caf99d42f9.out \
+ $(srcdir)/%reldir%/test_regex101.sh_5f2f7ecb6ab9cbec4b41385b91bd038906b8a7b2.err \
+ $(srcdir)/%reldir%/test_regex101.sh_5f2f7ecb6ab9cbec4b41385b91bd038906b8a7b2.out \
+ $(srcdir)/%reldir%/test_regex101.sh_629bde30483e0a6461076e9058f3a5eb81ae0425.err \
+ $(srcdir)/%reldir%/test_regex101.sh_629bde30483e0a6461076e9058f3a5eb81ae0425.out \
+ $(srcdir)/%reldir%/test_regex101.sh_630db454054cf92ec9bd0f4e3e83300047f583ff.err \
+ $(srcdir)/%reldir%/test_regex101.sh_630db454054cf92ec9bd0f4e3e83300047f583ff.out \
+ $(srcdir)/%reldir%/test_regex101.sh_771af6f3d29b8350542d5c6e98bdbf4c223cd531.err \
+ $(srcdir)/%reldir%/test_regex101.sh_771af6f3d29b8350542d5c6e98bdbf4c223cd531.out \
+ $(srcdir)/%reldir%/test_regex101.sh_7991a5b617867cf37c9f7baa85ffa425f7d455a2.err \
+ $(srcdir)/%reldir%/test_regex101.sh_7991a5b617867cf37c9f7baa85ffa425f7d455a2.out \
+ $(srcdir)/%reldir%/test_regex101.sh_79ee3f5fe71ccec97b2619d8c1f74ca97ffd2243.err \
+ $(srcdir)/%reldir%/test_regex101.sh_79ee3f5fe71ccec97b2619d8c1f74ca97ffd2243.out \
+ $(srcdir)/%reldir%/test_regex101.sh_7de76c174c58d67bf93e8f01d6d55ebb6a023f10.err \
+ $(srcdir)/%reldir%/test_regex101.sh_7de76c174c58d67bf93e8f01d6d55ebb6a023f10.out \
+ $(srcdir)/%reldir%/test_regex101.sh_8a43e6657d4f60e68d31eb8302542ca28e80d077.err \
+ $(srcdir)/%reldir%/test_regex101.sh_8a43e6657d4f60e68d31eb8302542ca28e80d077.out \
+ $(srcdir)/%reldir%/test_regex101.sh_8e93a3b6b941847c71409a297779fbb0a6666a51.err \
+ $(srcdir)/%reldir%/test_regex101.sh_8e93a3b6b941847c71409a297779fbb0a6666a51.out \
+ $(srcdir)/%reldir%/test_regex101.sh_95c56a9d146ec9a7c2196559d316f928b2ae6ae9.err \
+ $(srcdir)/%reldir%/test_regex101.sh_95c56a9d146ec9a7c2196559d316f928b2ae6ae9.out \
+ $(srcdir)/%reldir%/test_regex101.sh_9d101ee29c45cdb8c0f117ad736c9a5dd5da5839.err \
+ $(srcdir)/%reldir%/test_regex101.sh_9d101ee29c45cdb8c0f117ad736c9a5dd5da5839.out \
+ $(srcdir)/%reldir%/test_regex101.sh_c43e07df9b3068696fdc8759c7561135db981b38.err \
+ $(srcdir)/%reldir%/test_regex101.sh_c43e07df9b3068696fdc8759c7561135db981b38.out \
+ $(srcdir)/%reldir%/test_regex101.sh_cbd859487e4ea011cd6e0f0f114d70158bfd8b43.err \
+ $(srcdir)/%reldir%/test_regex101.sh_cbd859487e4ea011cd6e0f0f114d70158bfd8b43.out \
+ $(srcdir)/%reldir%/test_regex101.sh_cf6c0a9f0f04e24ce1fae7a0a434830b14447f83.err \
+ $(srcdir)/%reldir%/test_regex101.sh_cf6c0a9f0f04e24ce1fae7a0a434830b14447f83.out \
+ $(srcdir)/%reldir%/test_regex101.sh_d84597760285c3964b258726341e018f6cd49954.err \
+ $(srcdir)/%reldir%/test_regex101.sh_d84597760285c3964b258726341e018f6cd49954.out \
+ $(srcdir)/%reldir%/test_regex101.sh_f23e393dbf23d0d8e276e9b7610c7b74d79980f8.err \
+ $(srcdir)/%reldir%/test_regex101.sh_f23e393dbf23d0d8e276e9b7610c7b74d79980f8.out \
+ $(srcdir)/%reldir%/test_regex101.sh_fc41b6ee90cbf038620151f16d164b361acf82dd.err \
+ $(srcdir)/%reldir%/test_regex101.sh_fc41b6ee90cbf038620151f16d164b361acf82dd.out \
$(srcdir)/%reldir%/test_sessions.sh_0300a1391c33b1c45ddfa90198a6bd0a5404a77f.err \
$(srcdir)/%reldir%/test_sessions.sh_0300a1391c33b1c45ddfa90198a6bd0a5404a77f.out \
$(srcdir)/%reldir%/test_sessions.sh_17b85654b929b2a8fc1705a170ced544783292fa.err \
$(srcdir)/%reldir%/test_sessions.sh_17b85654b929b2a8fc1705a170ced544783292fa.out \
+ $(srcdir)/%reldir%/test_sessions.sh_33ab03afda2c9331a289fcbd1abdbc1c37b2e87b.err \
+ $(srcdir)/%reldir%/test_sessions.sh_33ab03afda2c9331a289fcbd1abdbc1c37b2e87b.out \
$(srcdir)/%reldir%/test_sessions.sh_345b0e66dab7b881397c4b38380da81092ab70dd.err \
$(srcdir)/%reldir%/test_sessions.sh_345b0e66dab7b881397c4b38380da81092ab70dd.out \
$(srcdir)/%reldir%/test_sessions.sh_430b9522ba1a37983138f3c4935cba91b781e415.err \
$(srcdir)/%reldir%/test_sessions.sh_430b9522ba1a37983138f3c4935cba91b781e415.out \
$(srcdir)/%reldir%/test_sessions.sh_4f13dd3858546b6e04a27e244159d355e368f2ae.err \
$(srcdir)/%reldir%/test_sessions.sh_4f13dd3858546b6e04a27e244159d355e368f2ae.out \
+ $(srcdir)/%reldir%/test_sessions.sh_639b83ce8f67975dfdc7086946ec287b43b6fa8c.err \
+ $(srcdir)/%reldir%/test_sessions.sh_639b83ce8f67975dfdc7086946ec287b43b6fa8c.out \
$(srcdir)/%reldir%/test_sessions.sh_68a89b56c5e7f7db620084cca1eb547cbb19a2c9.err \
$(srcdir)/%reldir%/test_sessions.sh_68a89b56c5e7f7db620084cca1eb547cbb19a2c9.out \
$(srcdir)/%reldir%/test_sessions.sh_6d87ff483d5785c58fb271a405ff1c35e4f83cd9.err \
@@ -404,8 +560,14 @@ EXPECTED_FILES = \
$(srcdir)/%reldir%/test_sessions.sh_b3d71a87fcb4e3487f71ccad8c6ce681db220572.out \
$(srcdir)/%reldir%/test_sessions.sh_b932b33dd087b94d4306dd179c5d4f9ddd394960.err \
$(srcdir)/%reldir%/test_sessions.sh_b932b33dd087b94d4306dd179c5d4f9ddd394960.out \
+ $(srcdir)/%reldir%/test_sessions.sh_ba1ded92531350668301431db64df2d2f4a2e9ee.err \
+ $(srcdir)/%reldir%/test_sessions.sh_ba1ded92531350668301431db64df2d2f4a2e9ee.out \
$(srcdir)/%reldir%/test_sessions.sh_ddf45811e9906de9f3930fe802ac7b2cc6e48106.err \
$(srcdir)/%reldir%/test_sessions.sh_ddf45811e9906de9f3930fe802ac7b2cc6e48106.out \
+ $(srcdir)/%reldir%/test_sessions.sh_e57697be4d81ac8e5b2b2fa84f919b2d494978f3.err \
+ $(srcdir)/%reldir%/test_sessions.sh_e57697be4d81ac8e5b2b2fa84f919b2d494978f3.out \
+ $(srcdir)/%reldir%/test_sessions.sh_e988439404f2e97604641c8d087855f3efe052e4.err \
+ $(srcdir)/%reldir%/test_sessions.sh_e988439404f2e97604641c8d087855f3efe052e4.out \
$(srcdir)/%reldir%/test_shlexer.sh_14dd967cb2af90899c9e5e45d00b676b5a3163aa.err \
$(srcdir)/%reldir%/test_shlexer.sh_14dd967cb2af90899c9e5e45d00b676b5a3163aa.out \
$(srcdir)/%reldir%/test_shlexer.sh_2781f5dd570580cbe746ad91b58a28b8371283b3.err \
@@ -432,44 +594,62 @@ EXPECTED_FILES = \
$(srcdir)/%reldir%/test_shlexer.sh_e0599f0b53d1bd27af767113853f8e84291f137d.out \
$(srcdir)/%reldir%/test_shlexer.sh_e8fa2239ab17e7563d0c524f5400a79d6ff8bfda.err \
$(srcdir)/%reldir%/test_shlexer.sh_e8fa2239ab17e7563d0c524f5400a79d6ff8bfda.out \
+ $(srcdir)/%reldir%/test_shlexer.sh_e99fe1cde36b85ebbab86ca820f55ec861cdc20b.err \
+ $(srcdir)/%reldir%/test_shlexer.sh_e99fe1cde36b85ebbab86ca820f55ec861cdc20b.out \
$(srcdir)/%reldir%/test_sql.sh_02def66745b063518473df862987747909f56ccc.err \
$(srcdir)/%reldir%/test_sql.sh_02def66745b063518473df862987747909f56ccc.out \
+ $(srcdir)/%reldir%/test_sql.sh_09416e332d9b2f76743836b72e71b6e4492e594e.err \
+ $(srcdir)/%reldir%/test_sql.sh_09416e332d9b2f76743836b72e71b6e4492e594e.out \
$(srcdir)/%reldir%/test_sql.sh_0a5d13b62da4cb66a59a51b0240b5fe0b6036b7e.err \
$(srcdir)/%reldir%/test_sql.sh_0a5d13b62da4cb66a59a51b0240b5fe0b6036b7e.out \
$(srcdir)/%reldir%/test_sql.sh_0d46ee142f80f262c8c14a22751571cc567df525.err \
$(srcdir)/%reldir%/test_sql.sh_0d46ee142f80f262c8c14a22751571cc567df525.out \
$(srcdir)/%reldir%/test_sql.sh_13429aed81d7edfd47b57e9cdb8a25c43aff35c4.err \
$(srcdir)/%reldir%/test_sql.sh_13429aed81d7edfd47b57e9cdb8a25c43aff35c4.out \
+ $(srcdir)/%reldir%/test_sql.sh_19c92996bcc884bfdb70e3d24606cf5070556a74.err \
+ $(srcdir)/%reldir%/test_sql.sh_19c92996bcc884bfdb70e3d24606cf5070556a74.out \
$(srcdir)/%reldir%/test_sql.sh_1cbb81cfe40ee16332c5c775a74d06b945aa65c2.err \
$(srcdir)/%reldir%/test_sql.sh_1cbb81cfe40ee16332c5c775a74d06b945aa65c2.out \
+ $(srcdir)/%reldir%/test_sql.sh_1f892b85dc9008c7b3bab7fdf8aa372a6d5ae22c.err \
+ $(srcdir)/%reldir%/test_sql.sh_1f892b85dc9008c7b3bab7fdf8aa372a6d5ae22c.out \
$(srcdir)/%reldir%/test_sql.sh_2532083f215ed44630621f18df3dd7b77c06ae10.err \
$(srcdir)/%reldir%/test_sql.sh_2532083f215ed44630621f18df3dd7b77c06ae10.out \
+ $(srcdir)/%reldir%/test_sql.sh_26ace94793c68c44801e1ec496e7ab6a02304ce3.err \
+ $(srcdir)/%reldir%/test_sql.sh_26ace94793c68c44801e1ec496e7ab6a02304ce3.out \
$(srcdir)/%reldir%/test_sql.sh_26c0d94d7837792144f2d0f866fb3c12a0bd410d.err \
$(srcdir)/%reldir%/test_sql.sh_26c0d94d7837792144f2d0f866fb3c12a0bd410d.out \
$(srcdir)/%reldir%/test_sql.sh_2959f0c70fca61a07c6c772f193e73022f7794f1.err \
$(srcdir)/%reldir%/test_sql.sh_2959f0c70fca61a07c6c772f193e73022f7794f1.out \
$(srcdir)/%reldir%/test_sql.sh_2a16a6fd0ff235a7877e1ea93b22d873a3609402.err \
$(srcdir)/%reldir%/test_sql.sh_2a16a6fd0ff235a7877e1ea93b22d873a3609402.out \
+ $(srcdir)/%reldir%/test_sql.sh_2c60ed41369d667d1e2a563d54f8edf84682e526.err \
+ $(srcdir)/%reldir%/test_sql.sh_2c60ed41369d667d1e2a563d54f8edf84682e526.out \
$(srcdir)/%reldir%/test_sql.sh_2cc8a92c6eb73741080b187a2670d309b8171c90.err \
$(srcdir)/%reldir%/test_sql.sh_2cc8a92c6eb73741080b187a2670d309b8171c90.out \
+ $(srcdir)/%reldir%/test_sql.sh_2ed3f3b18ef4ecc68e4dd3cc8041b61fcf2a59af.err \
+ $(srcdir)/%reldir%/test_sql.sh_2ed3f3b18ef4ecc68e4dd3cc8041b61fcf2a59af.out \
$(srcdir)/%reldir%/test_sql.sh_2f15b8a38673ac4db45dc6ed2eafe609c332575b.err \
$(srcdir)/%reldir%/test_sql.sh_2f15b8a38673ac4db45dc6ed2eafe609c332575b.out \
$(srcdir)/%reldir%/test_sql.sh_31df37f254255115611fc321b63374a2fa4a1cd5.err \
$(srcdir)/%reldir%/test_sql.sh_31df37f254255115611fc321b63374a2fa4a1cd5.out \
+ $(srcdir)/%reldir%/test_sql.sh_3445b783808f174b76f55dc6b998f721a1aae271.err \
+ $(srcdir)/%reldir%/test_sql.sh_3445b783808f174b76f55dc6b998f721a1aae271.out \
$(srcdir)/%reldir%/test_sql.sh_3d77a2092192caf98e141a6039e886ede836f044.err \
$(srcdir)/%reldir%/test_sql.sh_3d77a2092192caf98e141a6039e886ede836f044.out \
$(srcdir)/%reldir%/test_sql.sh_4090f96ea11a344c1e2939211da778992dab47d8.err \
$(srcdir)/%reldir%/test_sql.sh_4090f96ea11a344c1e2939211da778992dab47d8.out \
+ $(srcdir)/%reldir%/test_sql.sh_4563a807311d0ce3d1f912843e615a6ca579cffa.err \
+ $(srcdir)/%reldir%/test_sql.sh_4563a807311d0ce3d1f912843e615a6ca579cffa.out \
$(srcdir)/%reldir%/test_sql.sh_4629b626c65a85d7a5595571e195b67afca272ba.err \
$(srcdir)/%reldir%/test_sql.sh_4629b626c65a85d7a5595571e195b67afca272ba.out \
+ $(srcdir)/%reldir%/test_sql.sh_4a13356ccbdeb5f73fa063e292b5a6cb25e6c23e.err \
+ $(srcdir)/%reldir%/test_sql.sh_4a13356ccbdeb5f73fa063e292b5a6cb25e6c23e.out \
$(srcdir)/%reldir%/test_sql.sh_50c0b2c93b646b848a017764bde8a4282c556e2d.err \
$(srcdir)/%reldir%/test_sql.sh_50c0b2c93b646b848a017764bde8a4282c556e2d.out \
$(srcdir)/%reldir%/test_sql.sh_528e48a03cdfa7cfbe263a6e22a65606247a8a95.err \
$(srcdir)/%reldir%/test_sql.sh_528e48a03cdfa7cfbe263a6e22a65606247a8a95.out \
$(srcdir)/%reldir%/test_sql.sh_5532c7a21e3f6b7df3aad10d7bdfbb7a812ae6c7.err \
$(srcdir)/%reldir%/test_sql.sh_5532c7a21e3f6b7df3aad10d7bdfbb7a812ae6c7.out \
- $(srcdir)/%reldir%/test_sql.sh_56047c9470e515bc3e3709354c01e5d50462cde7.err \
- $(srcdir)/%reldir%/test_sql.sh_56047c9470e515bc3e3709354c01e5d50462cde7.out \
$(srcdir)/%reldir%/test_sql.sh_57427f3c4b4ec785ffff7c5802c10db0d3e547cf.err \
$(srcdir)/%reldir%/test_sql.sh_57427f3c4b4ec785ffff7c5802c10db0d3e547cf.out \
$(srcdir)/%reldir%/test_sql.sh_57edc93426e6767aa44ab2356c55327553dcdc8d.err \
@@ -478,6 +658,8 @@ EXPECTED_FILES = \
$(srcdir)/%reldir%/test_sql.sh_5801770f3e0ecc1d62c7a97116d6da1981bbc7bd.out \
$(srcdir)/%reldir%/test_sql.sh_5fe26fe4fc22f23f8dbe3a6aab394602886f2971.err \
$(srcdir)/%reldir%/test_sql.sh_5fe26fe4fc22f23f8dbe3a6aab394602886f2971.out \
+ $(srcdir)/%reldir%/test_sql.sh_61471583c5e2f8ede3a8adefce682c27bf3924c8.err \
+ $(srcdir)/%reldir%/test_sql.sh_61471583c5e2f8ede3a8adefce682c27bf3924c8.out \
$(srcdir)/%reldir%/test_sql.sh_62eb85c9569e71a630d72065238559528a16114c.err \
$(srcdir)/%reldir%/test_sql.sh_62eb85c9569e71a630d72065238559528a16114c.out \
$(srcdir)/%reldir%/test_sql.sh_6ad9d0adf85c36363f6b24f49950dcdc13dd34ab.err \
@@ -486,16 +668,22 @@ EXPECTED_FILES = \
$(srcdir)/%reldir%/test_sql.sh_6edb0c8d5323d1b962d90dd6ecdd7eee9008d7b5.out \
$(srcdir)/%reldir%/test_sql.sh_753c343a256d1286750314957d1b4e155464e03e.err \
$(srcdir)/%reldir%/test_sql.sh_753c343a256d1286750314957d1b4e155464e03e.out \
+ $(srcdir)/%reldir%/test_sql.sh_7593b39f4be6fd2124ec7cf10835ee015d475b16.err \
+ $(srcdir)/%reldir%/test_sql.sh_7593b39f4be6fd2124ec7cf10835ee015d475b16.out \
$(srcdir)/%reldir%/test_sql.sh_764306f0e5f610ba71f521ba3d19fe158ece0ba5.err \
$(srcdir)/%reldir%/test_sql.sh_764306f0e5f610ba71f521ba3d19fe158ece0ba5.out \
$(srcdir)/%reldir%/test_sql.sh_7f664c9cda0ae1c48333e21051b5e0eeafd5b4bc.err \
$(srcdir)/%reldir%/test_sql.sh_7f664c9cda0ae1c48333e21051b5e0eeafd5b4bc.out \
+ $(srcdir)/%reldir%/test_sql.sh_859af4cc5f57345be8dcece599419d58f332841a.err \
+ $(srcdir)/%reldir%/test_sql.sh_859af4cc5f57345be8dcece599419d58f332841a.out \
$(srcdir)/%reldir%/test_sql.sh_85fe3b9803254ea54b864d4865d7bd4d7a7f86c6.err \
$(srcdir)/%reldir%/test_sql.sh_85fe3b9803254ea54b864d4865d7bd4d7a7f86c6.out \
$(srcdir)/%reldir%/test_sql.sh_8ee288f1508eaab0367e465e9f382e848f3282aa.err \
$(srcdir)/%reldir%/test_sql.sh_8ee288f1508eaab0367e465e9f382e848f3282aa.out \
$(srcdir)/%reldir%/test_sql.sh_9a209f3ee1b1f543ca2587b695d2eb0e63e74c51.err \
$(srcdir)/%reldir%/test_sql.sh_9a209f3ee1b1f543ca2587b695d2eb0e63e74c51.out \
+ $(srcdir)/%reldir%/test_sql.sh_9aaaa810f883f5dcf8a4d5cda4051fdf4640a65c.err \
+ $(srcdir)/%reldir%/test_sql.sh_9aaaa810f883f5dcf8a4d5cda4051fdf4640a65c.out \
$(srcdir)/%reldir%/test_sql.sh_9b03e9f7a1bc35e408b3a17ee90cfdadea164df6.err \
$(srcdir)/%reldir%/test_sql.sh_9b03e9f7a1bc35e408b3a17ee90cfdadea164df6.out \
$(srcdir)/%reldir%/test_sql.sh_9ceccab07fbf7130bffe3c201c710719e4a3e9af.err \
@@ -504,6 +692,8 @@ EXPECTED_FILES = \
$(srcdir)/%reldir%/test_sql.sh_9e1d05b821822ee40e13fadb24ec558f4bfcff10.out \
$(srcdir)/%reldir%/test_sql.sh_a6b68b9f0044d18e7fa8f9287ddc9110701edc33.err \
$(srcdir)/%reldir%/test_sql.sh_a6b68b9f0044d18e7fa8f9287ddc9110701edc33.out \
+ $(srcdir)/%reldir%/test_sql.sh_a7955e89791db9a252d8323436fabc51e2960731.err \
+ $(srcdir)/%reldir%/test_sql.sh_a7955e89791db9a252d8323436fabc51e2960731.out \
$(srcdir)/%reldir%/test_sql.sh_ae7b1f1684e14bf9c16e0d789257b6ef57cfb2b1.err \
$(srcdir)/%reldir%/test_sql.sh_ae7b1f1684e14bf9c16e0d789257b6ef57cfb2b1.out \
$(srcdir)/%reldir%/test_sql.sh_afe9cdc4898df5c4e112c13dfe3db6dc089c0d7c.err \
@@ -514,10 +704,14 @@ EXPECTED_FILES = \
$(srcdir)/%reldir%/test_sql.sh_b2694e4fbecdd128798af25ee0d069e7e35fb499.out \
$(srcdir)/%reldir%/test_sql.sh_b5aa0561a65de7e8e22085db184c72a94b1a89a9.err \
$(srcdir)/%reldir%/test_sql.sh_b5aa0561a65de7e8e22085db184c72a94b1a89a9.out \
+ $(srcdir)/%reldir%/test_sql.sh_b9330763dea550bbd006d7ae6ae7ea367f831fa3.err \
+ $(srcdir)/%reldir%/test_sql.sh_b9330763dea550bbd006d7ae6ae7ea367f831fa3.out \
$(srcdir)/%reldir%/test_sql.sh_bad03a996c0750733ab99c592b9011851f521a69.err \
$(srcdir)/%reldir%/test_sql.sh_bad03a996c0750733ab99c592b9011851f521a69.out \
$(srcdir)/%reldir%/test_sql.sh_bd46ca4560f8be6307a914e39539bbac0368080a.err \
$(srcdir)/%reldir%/test_sql.sh_bd46ca4560f8be6307a914e39539bbac0368080a.out \
+ $(srcdir)/%reldir%/test_sql.sh_c17933125df910588b806a9d07c2655bc71198ef.err \
+ $(srcdir)/%reldir%/test_sql.sh_c17933125df910588b806a9d07c2655bc71198ef.out \
$(srcdir)/%reldir%/test_sql.sh_c20b0320096342c180146a5d18a6de82319d70b2.err \
$(srcdir)/%reldir%/test_sql.sh_c20b0320096342c180146a5d18a6de82319d70b2.out \
$(srcdir)/%reldir%/test_sql.sh_c353ef036c505b75996252138fbd4c8d22e8149c.err \
@@ -528,20 +722,30 @@ EXPECTED_FILES = \
$(srcdir)/%reldir%/test_sql.sh_c73dec2706fc0b9a124f5da3a83f40d8d3255beb.out \
$(srcdir)/%reldir%/test_sql.sh_c7e1dbf4605914720b55787785abfafdf2c4178a.err \
$(srcdir)/%reldir%/test_sql.sh_c7e1dbf4605914720b55787785abfafdf2c4178a.out \
- $(srcdir)/%reldir%/test_sql.sh_cc77a633a66d1778705a34e3657737547b3fb08d.err \
- $(srcdir)/%reldir%/test_sql.sh_cc77a633a66d1778705a34e3657737547b3fb08d.out \
+ $(srcdir)/%reldir%/test_sql.sh_d4d540f0ef7e34b693fc72078d1cf2e069f86d81.err \
+ $(srcdir)/%reldir%/test_sql.sh_d4d540f0ef7e34b693fc72078d1cf2e069f86d81.out \
$(srcdir)/%reldir%/test_sql.sh_dd540973a0dc86320d84706845a15608196ae5be.err \
$(srcdir)/%reldir%/test_sql.sh_dd540973a0dc86320d84706845a15608196ae5be.out \
+ $(srcdir)/%reldir%/test_sql.sh_e44c0e2834038ec8d9b0b10b993967edb711c03c.err \
+ $(srcdir)/%reldir%/test_sql.sh_e44c0e2834038ec8d9b0b10b993967edb711c03c.out \
$(srcdir)/%reldir%/test_sql.sh_e70dc7d2b686c7f91c2b41b10f3920c50f3ea405.err \
$(srcdir)/%reldir%/test_sql.sh_e70dc7d2b686c7f91c2b41b10f3920c50f3ea405.out \
+ $(srcdir)/%reldir%/test_sql.sh_ef3cecab4ae0b90760f728add5652378e26b2fe6.err \
+ $(srcdir)/%reldir%/test_sql.sh_ef3cecab4ae0b90760f728add5652378e26b2fe6.out \
+ $(srcdir)/%reldir%/test_sql.sh_fea98f976873ee7b55e6f322dda42719a19fb3f0.err \
+ $(srcdir)/%reldir%/test_sql.sh_fea98f976873ee7b55e6f322dda42719a19fb3f0.out \
$(srcdir)/%reldir%/test_sql.sh_ff8a978fc0de0fed675a3cd1454cf435a6856fd5.err \
$(srcdir)/%reldir%/test_sql.sh_ff8a978fc0de0fed675a3cd1454cf435a6856fd5.out \
+ $(srcdir)/%reldir%/test_sql.sh_ffbc3dbf8464455358a77acffa10a8dd8a080374.err \
+ $(srcdir)/%reldir%/test_sql.sh_ffbc3dbf8464455358a77acffa10a8dd8a080374.out \
$(srcdir)/%reldir%/test_sql_anno.sh_028d5d5af2f3519b59d349d41cb7ecf385253b51.err \
$(srcdir)/%reldir%/test_sql_anno.sh_028d5d5af2f3519b59d349d41cb7ecf385253b51.out \
$(srcdir)/%reldir%/test_sql_anno.sh_0a37c43350ddd7a2d0d75695be32fac083ad04a4.err \
$(srcdir)/%reldir%/test_sql_anno.sh_0a37c43350ddd7a2d0d75695be32fac083ad04a4.out \
$(srcdir)/%reldir%/test_sql_anno.sh_1151e5b727f6b57070bf2c8f047f1d7e02b803a6.err \
$(srcdir)/%reldir%/test_sql_anno.sh_1151e5b727f6b57070bf2c8f047f1d7e02b803a6.out \
+ $(srcdir)/%reldir%/test_sql_anno.sh_1398146cf8b4f074ec8b9752f021cf47d011bebc.err \
+ $(srcdir)/%reldir%/test_sql_anno.sh_1398146cf8b4f074ec8b9752f021cf47d011bebc.out \
$(srcdir)/%reldir%/test_sql_anno.sh_1b29488b949c294479aa6054f80a35bc106b454b.err \
$(srcdir)/%reldir%/test_sql_anno.sh_1b29488b949c294479aa6054f80a35bc106b454b.out \
$(srcdir)/%reldir%/test_sql_anno.sh_331a152080d2e278b7cc0a37728eca1ded36ed72.err \
@@ -568,6 +772,10 @@ EXPECTED_FILES = \
$(srcdir)/%reldir%/test_sql_anno.sh_c909647ed0e585002074f55c946f3033df1815b2.out \
$(srcdir)/%reldir%/test_sql_anno.sh_ce0506ee7a12eb0f7b970522cc6a79180ecb20cc.err \
$(srcdir)/%reldir%/test_sql_anno.sh_ce0506ee7a12eb0f7b970522cc6a79180ecb20cc.out \
+ $(srcdir)/%reldir%/test_sql_anno.sh_de46094b6e005285dc0921ef9979e36240c5042d.err \
+ $(srcdir)/%reldir%/test_sql_anno.sh_de46094b6e005285dc0921ef9979e36240c5042d.out \
+ $(srcdir)/%reldir%/test_sql_anno.sh_e7dae4ba18c42c416ed03afd8819200f63e89ac8.err \
+ $(srcdir)/%reldir%/test_sql_anno.sh_e7dae4ba18c42c416ed03afd8819200f63e89ac8.out \
$(srcdir)/%reldir%/test_sql_anno.sh_f3c64191d6016767a5857fbb1bad26548586bb96.err \
$(srcdir)/%reldir%/test_sql_anno.sh_f3c64191d6016767a5857fbb1bad26548586bb96.out \
$(srcdir)/%reldir%/test_sql_coll_func.sh_077cab6e271c914daf5b221cc512853077891f35.err \
@@ -606,8 +814,12 @@ EXPECTED_FILES = \
$(srcdir)/%reldir%/test_sql_fs_func.sh_18ddc138b263dd06f3fe81fec05bc4330caffef7.out \
$(srcdir)/%reldir%/test_sql_fs_func.sh_20a76db446a0a558dcbdf41033f97d4a22ca1bfa.err \
$(srcdir)/%reldir%/test_sql_fs_func.sh_20a76db446a0a558dcbdf41033f97d4a22ca1bfa.out \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_2aa83fc90c850cdd11e3136a1a02b79c5879824b.err \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_2aa83fc90c850cdd11e3136a1a02b79c5879824b.out \
$(srcdir)/%reldir%/test_sql_fs_func.sh_2c3f66e78deb8721b1d1fe5a787e9958895401d7.err \
$(srcdir)/%reldir%/test_sql_fs_func.sh_2c3f66e78deb8721b1d1fe5a787e9958895401d7.out \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_34baa8050f8278d7b68c29e53bdd9f37da0f34c8.err \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_34baa8050f8278d7b68c29e53bdd9f37da0f34c8.out \
$(srcdir)/%reldir%/test_sql_fs_func.sh_3ed11101a413e47c3dfe219557b7a6df04a64253.err \
$(srcdir)/%reldir%/test_sql_fs_func.sh_3ed11101a413e47c3dfe219557b7a6df04a64253.out \
$(srcdir)/%reldir%/test_sql_fs_func.sh_469380561dccd79c7249562067107c330838eaad.err \
@@ -624,6 +836,8 @@ EXPECTED_FILES = \
$(srcdir)/%reldir%/test_sql_fs_func.sh_7b5d7dd8d0003ab83e3e5cb0a5ce802fe9a0e3b3.out \
$(srcdir)/%reldir%/test_sql_fs_func.sh_917ffde411c1425e8a6addae0170900dcd553986.err \
$(srcdir)/%reldir%/test_sql_fs_func.sh_917ffde411c1425e8a6addae0170900dcd553986.out \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_9234a453403934587bbbdde355281a956d1fbe5f.err \
+ $(srcdir)/%reldir%/test_sql_fs_func.sh_9234a453403934587bbbdde355281a956d1fbe5f.out \
$(srcdir)/%reldir%/test_sql_fs_func.sh_9e2c0a90ce333365ff7354375f2c609bc27135c8.err \
$(srcdir)/%reldir%/test_sql_fs_func.sh_9e2c0a90ce333365ff7354375f2c609bc27135c8.out \
$(srcdir)/%reldir%/test_sql_fs_func.sh_a247b137e71124e496f1beab56c7fe85717c4199.err \
@@ -648,6 +862,8 @@ EXPECTED_FILES = \
$(srcdir)/%reldir%/test_sql_indexes.sh_026dd9752b6101e0791689d3a2026f7e517e36f5.out \
$(srcdir)/%reldir%/test_sql_indexes.sh_1614ebb5e2e83bab11023354dea8a0885ddf64b4.err \
$(srcdir)/%reldir%/test_sql_indexes.sh_1614ebb5e2e83bab11023354dea8a0885ddf64b4.out \
+ $(srcdir)/%reldir%/test_sql_indexes.sh_2b4945247332d01b08e6f17340f7d17f3b3649b8.err \
+ $(srcdir)/%reldir%/test_sql_indexes.sh_2b4945247332d01b08e6f17340f7d17f3b3649b8.out \
$(srcdir)/%reldir%/test_sql_indexes.sh_541a8e35f34a206e340a3880128b6ce137847872.err \
$(srcdir)/%reldir%/test_sql_indexes.sh_541a8e35f34a206e340a3880128b6ce137847872.out \
$(srcdir)/%reldir%/test_sql_indexes.sh_59a1497c13a5e09bc8f95ef02552b2835ebea6e5.err \
@@ -740,10 +956,16 @@ EXPECTED_FILES = \
$(srcdir)/%reldir%/test_sql_json_func.sh_f34205b59e04f261897ad89f659595c743a18ca9.out \
$(srcdir)/%reldir%/test_sql_json_func.sh_f34f5dfa938a1ac7721f924beb16bbceec127a1b.err \
$(srcdir)/%reldir%/test_sql_json_func.sh_f34f5dfa938a1ac7721f924beb16bbceec127a1b.out \
+ $(srcdir)/%reldir%/test_sql_regexp.sh_02ef03572fd2bcf39bab8e29cf1c735ff7c3f297.err \
+ $(srcdir)/%reldir%/test_sql_regexp.sh_02ef03572fd2bcf39bab8e29cf1c735ff7c3f297.out \
$(srcdir)/%reldir%/test_sql_regexp.sh_03257c56e85558aa0cc925b68d3af962afc25125.err \
$(srcdir)/%reldir%/test_sql_regexp.sh_03257c56e85558aa0cc925b68d3af962afc25125.out \
+ $(srcdir)/%reldir%/test_sql_regexp.sh_219a579cf7744fa08ab79fadd08b521b2f18a661.err \
+ $(srcdir)/%reldir%/test_sql_regexp.sh_219a579cf7744fa08ab79fadd08b521b2f18a661.out \
$(srcdir)/%reldir%/test_sql_regexp.sh_51293df041b6969ccecc60204dce3676d0fb006d.err \
$(srcdir)/%reldir%/test_sql_regexp.sh_51293df041b6969ccecc60204dce3676d0fb006d.out \
+ $(srcdir)/%reldir%/test_sql_regexp.sh_a610798fefdacd8d0179a4b17cd757d00fb731be.err \
+ $(srcdir)/%reldir%/test_sql_regexp.sh_a610798fefdacd8d0179a4b17cd757d00fb731be.out \
$(srcdir)/%reldir%/test_sql_regexp.sh_b841a0c09601e2419eeb99e85f7e286c889e4801.err \
$(srcdir)/%reldir%/test_sql_regexp.sh_b841a0c09601e2419eeb99e85f7e286c889e4801.out \
$(srcdir)/%reldir%/test_sql_regexp.sh_bbd1128cf61a9af8f9dc937b46217443f42e1a7a.err \
@@ -764,12 +986,16 @@ EXPECTED_FILES = \
$(srcdir)/%reldir%/test_sql_search_table.sh_df0fd242f57a96d40f466493938cda0789a094fa.out \
$(srcdir)/%reldir%/test_sql_search_table.sh_ef9373a76853f345d06234f6e0fe11b5d40da27b.err \
$(srcdir)/%reldir%/test_sql_search_table.sh_ef9373a76853f345d06234f6e0fe11b5d40da27b.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_00363f89638cb968584afc1ca0a4f52b2cf7a2ae.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_00363f89638cb968584afc1ca0a4f52b2cf7a2ae.out \
$(srcdir)/%reldir%/test_sql_str_func.sh_005b9365ac99596e539f47c9fe432668c209b21f.err \
$(srcdir)/%reldir%/test_sql_str_func.sh_005b9365ac99596e539f47c9fe432668c209b21f.out \
$(srcdir)/%reldir%/test_sql_str_func.sh_04712488fe50554eb36d3ced80f9a033602f3daa.err \
$(srcdir)/%reldir%/test_sql_str_func.sh_04712488fe50554eb36d3ced80f9a033602f3daa.out \
$(srcdir)/%reldir%/test_sql_str_func.sh_0947bfe7ec626eaa0409a45b10fcbb634fb12eb7.err \
$(srcdir)/%reldir%/test_sql_str_func.sh_0947bfe7ec626eaa0409a45b10fcbb634fb12eb7.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_0db1c1b406ba6ef2dadcbe90a3fdbe794a664eb5.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_0db1c1b406ba6ef2dadcbe90a3fdbe794a664eb5.out \
$(srcdir)/%reldir%/test_sql_str_func.sh_11bcc5d32eabbedb6974f160dace9ef1ef0009e9.err \
$(srcdir)/%reldir%/test_sql_str_func.sh_11bcc5d32eabbedb6974f160dace9ef1ef0009e9.out \
$(srcdir)/%reldir%/test_sql_str_func.sh_11d458fdadd00df1239a0eeaac049abb49ed212d.err \
@@ -778,6 +1004,8 @@ EXPECTED_FILES = \
$(srcdir)/%reldir%/test_sql_str_func.sh_129e58679e72f3cc5864812026e49a7917baf3d0.out \
$(srcdir)/%reldir%/test_sql_str_func.sh_151a0fd71ef6837c8cbd8a67e315019b5812b079.err \
$(srcdir)/%reldir%/test_sql_str_func.sh_151a0fd71ef6837c8cbd8a67e315019b5812b079.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_1a1e07b6f72bce5402037761fa8afd66c05b4c34.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_1a1e07b6f72bce5402037761fa8afd66c05b4c34.out \
$(srcdir)/%reldir%/test_sql_str_func.sh_1e7362ac3d9690b1b2cfbd320b6129c46ecfbb8a.err \
$(srcdir)/%reldir%/test_sql_str_func.sh_1e7362ac3d9690b1b2cfbd320b6129c46ecfbb8a.out \
$(srcdir)/%reldir%/test_sql_str_func.sh_211c5428db0590795072c31cb116ef35281e02b5.err \
@@ -790,8 +1018,6 @@ EXPECTED_FILES = \
$(srcdir)/%reldir%/test_sql_str_func.sh_352434d199f7b493668c9f2774472eb69ef0d9f0.out \
$(srcdir)/%reldir%/test_sql_str_func.sh_36fc9005464f1106f969559e640d9fa36d5fadad.err \
$(srcdir)/%reldir%/test_sql_str_func.sh_36fc9005464f1106f969559e640d9fa36d5fadad.out \
- $(srcdir)/%reldir%/test_sql_str_func.sh_3855d2cc0ab29171cae8e722f130adec25eae36e.err \
- $(srcdir)/%reldir%/test_sql_str_func.sh_3855d2cc0ab29171cae8e722f130adec25eae36e.out \
$(srcdir)/%reldir%/test_sql_str_func.sh_3de72fe5c1751dd212a1cd45cf2caa7f3b52bced.err \
$(srcdir)/%reldir%/test_sql_str_func.sh_3de72fe5c1751dd212a1cd45cf2caa7f3b52bced.out \
$(srcdir)/%reldir%/test_sql_str_func.sh_4b402274da152135c6c99456b693e1ecabca0256.err \
@@ -802,6 +1028,8 @@ EXPECTED_FILES = \
$(srcdir)/%reldir%/test_sql_str_func.sh_51766b600fd158a9e0677f6b0fa31b83537b2e5b.out \
$(srcdir)/%reldir%/test_sql_str_func.sh_5203db1a4a81e43a693f339fd26e1ed635da9d5a.err \
$(srcdir)/%reldir%/test_sql_str_func.sh_5203db1a4a81e43a693f339fd26e1ed635da9d5a.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_57fc889eefb98571ecf3892ad670646613bf13a3.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_57fc889eefb98571ecf3892ad670646613bf13a3.out \
$(srcdir)/%reldir%/test_sql_str_func.sh_5abe3717393fba14ec510a37b4b94fedc67aae8e.err \
$(srcdir)/%reldir%/test_sql_str_func.sh_5abe3717393fba14ec510a37b4b94fedc67aae8e.out \
$(srcdir)/%reldir%/test_sql_str_func.sh_5e436fbd4efb140600999c5208886a5a57b8a30e.err \
@@ -814,8 +1042,12 @@ EXPECTED_FILES = \
$(srcdir)/%reldir%/test_sql_str_func.sh_660288b48d9b30244621d873944938f7ef043976.out \
$(srcdir)/%reldir%/test_sql_str_func.sh_6607c0dd8baff16930eb3e0daf6354af5b50052b.err \
$(srcdir)/%reldir%/test_sql_str_func.sh_6607c0dd8baff16930eb3e0daf6354af5b50052b.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_68860c50e91cd6c1f2004ee0414a6e930ed42c87.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_68860c50e91cd6c1f2004ee0414a6e930ed42c87.out \
$(srcdir)/%reldir%/test_sql_str_func.sh_69f5d49e62da48e188bd9d6af4bd3adeb21eb7d1.err \
$(srcdir)/%reldir%/test_sql_str_func.sh_69f5d49e62da48e188bd9d6af4bd3adeb21eb7d1.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_6ac7ab1f90c064944ff66bef5974f050c8227d4b.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_6ac7ab1f90c064944ff66bef5974f050c8227d4b.out \
$(srcdir)/%reldir%/test_sql_str_func.sh_6ff984d8ed3e5099376d19f0dd20d5fd1ed42494.err \
$(srcdir)/%reldir%/test_sql_str_func.sh_6ff984d8ed3e5099376d19f0dd20d5fd1ed42494.out \
$(srcdir)/%reldir%/test_sql_str_func.sh_71f37db33504b2c08a7a3323c482556f53d88100.err \
@@ -868,6 +1100,8 @@ EXPECTED_FILES = \
$(srcdir)/%reldir%/test_sql_str_func.sh_b2aafbcaa7befe426d3f9df71c24f16fdc9d2856.out \
$(srcdir)/%reldir%/test_sql_str_func.sh_b81b27abfafbd357d41c407428d41ae0f4bb75e2.err \
$(srcdir)/%reldir%/test_sql_str_func.sh_b81b27abfafbd357d41c407428d41ae0f4bb75e2.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_b8ebe81c4881f704624a65ec91be0868c310f6ed.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_b8ebe81c4881f704624a65ec91be0868c310f6ed.out \
$(srcdir)/%reldir%/test_sql_str_func.sh_bac7f6531a2adf70cd1871fb13eab26dff133b7c.err \
$(srcdir)/%reldir%/test_sql_str_func.sh_bac7f6531a2adf70cd1871fb13eab26dff133b7c.out \
$(srcdir)/%reldir%/test_sql_str_func.sh_bfb7088916412360f77683009058b0747784630a.err \
@@ -880,6 +1114,8 @@ EXPECTED_FILES = \
$(srcdir)/%reldir%/test_sql_str_func.sh_c9e2f41431bef879364dc37a472ab01f64d89f89.out \
$(srcdir)/%reldir%/test_sql_str_func.sh_cc53348c585ee71a7456157ad6b125689813bafe.err \
$(srcdir)/%reldir%/test_sql_str_func.sh_cc53348c585ee71a7456157ad6b125689813bafe.out \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_cdc7b869132c33cae3c2565806c2396e1b4d6253.err \
+ $(srcdir)/%reldir%/test_sql_str_func.sh_cdc7b869132c33cae3c2565806c2396e1b4d6253.out \
$(srcdir)/%reldir%/test_sql_str_func.sh_ce9db1dbc2e5fee87247135d17787ff3af014d77.err \
$(srcdir)/%reldir%/test_sql_str_func.sh_ce9db1dbc2e5fee87247135d17787ff3af014d77.out \
$(srcdir)/%reldir%/test_sql_str_func.sh_d3367527118052081a541a660b091f6f495b1c0d.err \
@@ -916,12 +1152,16 @@ EXPECTED_FILES = \
$(srcdir)/%reldir%/test_sql_time_func.sh_4035ee76938269e9247f9a696927a9ac18cce80a.out \
$(srcdir)/%reldir%/test_sql_time_func.sh_42f0fc1a154b0d79b4f6e846f283426be498040f.err \
$(srcdir)/%reldir%/test_sql_time_func.sh_42f0fc1a154b0d79b4f6e846f283426be498040f.out \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_4364c7f5354fe108874dd22571115e012303e001.err \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_4364c7f5354fe108874dd22571115e012303e001.out \
$(srcdir)/%reldir%/test_sql_time_func.sh_4b96fe71bc2d18955e3625b765a6095ab1f7a75d.err \
$(srcdir)/%reldir%/test_sql_time_func.sh_4b96fe71bc2d18955e3625b765a6095ab1f7a75d.out \
$(srcdir)/%reldir%/test_sql_time_func.sh_53b76b094e47691b5bca106142ee470e82e8e420.err \
$(srcdir)/%reldir%/test_sql_time_func.sh_53b76b094e47691b5bca106142ee470e82e8e420.out \
$(srcdir)/%reldir%/test_sql_time_func.sh_6288a9e690d381602b2be5665cc1cd3552733bc2.err \
$(srcdir)/%reldir%/test_sql_time_func.sh_6288a9e690d381602b2be5665cc1cd3552733bc2.out \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_63f22db8689c238d51c9b9efe9837147ea5318e6.err \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_63f22db8689c238d51c9b9efe9837147ea5318e6.out \
$(srcdir)/%reldir%/test_sql_time_func.sh_652bbd00b5159e22d94970ab1e882997d14b5777.err \
$(srcdir)/%reldir%/test_sql_time_func.sh_652bbd00b5159e22d94970ab1e882997d14b5777.out \
$(srcdir)/%reldir%/test_sql_time_func.sh_6832a58259168622af8b3370b0c89534f98f3f9f.err \
@@ -930,14 +1170,24 @@ EXPECTED_FILES = \
$(srcdir)/%reldir%/test_sql_time_func.sh_72862ec9c8f261a8507d237eb673c7ddfaafd898.out \
$(srcdir)/%reldir%/test_sql_time_func.sh_7797302b63d73234c9ec9f0405c7c0a748daf8e9.err \
$(srcdir)/%reldir%/test_sql_time_func.sh_7797302b63d73234c9ec9f0405c7c0a748daf8e9.out \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_7ae9dbbb69dbc50ee6a34afc03d2579f09363068.err \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_7ae9dbbb69dbc50ee6a34afc03d2579f09363068.out \
$(srcdir)/%reldir%/test_sql_time_func.sh_9569ab40cb2e51c60f818a6c2729c60d86565e7e.err \
$(srcdir)/%reldir%/test_sql_time_func.sh_9569ab40cb2e51c60f818a6c2729c60d86565e7e.out \
$(srcdir)/%reldir%/test_sql_time_func.sh_9e649c4bc10f4d178519983358f7092e9c5dfe71.err \
$(srcdir)/%reldir%/test_sql_time_func.sh_9e649c4bc10f4d178519983358f7092e9c5dfe71.out \
$(srcdir)/%reldir%/test_sql_time_func.sh_b0257ced663fc444801a5e6cba89c3053acca11e.err \
$(srcdir)/%reldir%/test_sql_time_func.sh_b0257ced663fc444801a5e6cba89c3053acca11e.out \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_b3c00f049fdeb551a9165c281630e36359832d1f.err \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_b3c00f049fdeb551a9165c281630e36359832d1f.out \
$(srcdir)/%reldir%/test_sql_time_func.sh_b5f9ec3ea8b4551fd40017398d74c524fb54ebc9.err \
$(srcdir)/%reldir%/test_sql_time_func.sh_b5f9ec3ea8b4551fd40017398d74c524fb54ebc9.out \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_c1d7dc8a4bd3b8cb86a2f893f58a56f0f6ea1bc3.err \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_c1d7dc8a4bd3b8cb86a2f893f58a56f0f6ea1bc3.out \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_c5a5fc2edb54d10f1475afa7fed0b62bc05e1dc6.err \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_c5a5fc2edb54d10f1475afa7fed0b62bc05e1dc6.out \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_c7fc60392a2e52b163da1e1dde6978c16f415a9e.err \
+ $(srcdir)/%reldir%/test_sql_time_func.sh_c7fc60392a2e52b163da1e1dde6978c16f415a9e.out \
$(srcdir)/%reldir%/test_sql_time_func.sh_dbe786c096d5a7a5e1d05311b929f1427d8bac79.err \
$(srcdir)/%reldir%/test_sql_time_func.sh_dbe786c096d5a7a5e1d05311b929f1427d8bac79.out \
$(srcdir)/%reldir%/test_sql_time_func.sh_f3b1ea49779117bf45f85ad5615fdc5e89193db6.err \
@@ -946,6 +1196,10 @@ EXPECTED_FILES = \
$(srcdir)/%reldir%/test_sql_views_vtab.sh_28e23f4e98b1acd6478e39844fd9306b444550c3.out \
$(srcdir)/%reldir%/test_sql_views_vtab.sh_32acc1a8bb5028636fdbf08f077f9a835ab51bec.err \
$(srcdir)/%reldir%/test_sql_views_vtab.sh_32acc1a8bb5028636fdbf08f077f9a835ab51bec.out \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_4363d60040424a573ed79ee4260a32e3cd72f62c.err \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_4363d60040424a573ed79ee4260a32e3cd72f62c.out \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_45dbef06572b43cb997682436e753a13e003f792.err \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_45dbef06572b43cb997682436e753a13e003f792.out \
$(srcdir)/%reldir%/test_sql_views_vtab.sh_485a6ac7c69bd4b5d34d3399a9c17f6a2dc89ad3.err \
$(srcdir)/%reldir%/test_sql_views_vtab.sh_485a6ac7c69bd4b5d34d3399a9c17f6a2dc89ad3.out \
$(srcdir)/%reldir%/test_sql_views_vtab.sh_62d15cb9d5a9259f198aa01ca8ed200d6da38d68.err \
@@ -970,6 +1224,8 @@ EXPECTED_FILES = \
$(srcdir)/%reldir%/test_sql_views_vtab.sh_a1e6ee4f098d525330d5f58a9d71cbbd816d51bb.out \
$(srcdir)/%reldir%/test_sql_views_vtab.sh_a2c0f0e51b3f85ea2a05ecdcacaad962b4fe5d4f.err \
$(srcdir)/%reldir%/test_sql_views_vtab.sh_a2c0f0e51b3f85ea2a05ecdcacaad962b4fe5d4f.out \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_a7a7fd577f710aa8b0ad5a94fdfb35daea75e06c.err \
+ $(srcdir)/%reldir%/test_sql_views_vtab.sh_a7a7fd577f710aa8b0ad5a94fdfb35daea75e06c.out \
$(srcdir)/%reldir%/test_sql_views_vtab.sh_ac1f6e9a88608ef8939f9c2f7061a25a86742d46.err \
$(srcdir)/%reldir%/test_sql_views_vtab.sh_ac1f6e9a88608ef8939f9c2f7061a25a86742d46.out \
$(srcdir)/%reldir%/test_sql_views_vtab.sh_ade121f29bedea0d1a54452cc994b2302ad9dabb.err \
@@ -990,32 +1246,74 @@ EXPECTED_FILES = \
$(srcdir)/%reldir%/test_sql_xml_func.sh_46dfa23e2effabf3fa150c4b871fd8d22b1c834d.out \
$(srcdir)/%reldir%/test_sql_xml_func.sh_4effabf11b59580e5f0727199eb74fba049c0cda.err \
$(srcdir)/%reldir%/test_sql_xml_func.sh_4effabf11b59580e5f0727199eb74fba049c0cda.out \
+ $(srcdir)/%reldir%/test_sql_xml_func.sh_81ad7678f080870956db37174bcf1054586cfbad.err \
+ $(srcdir)/%reldir%/test_sql_xml_func.sh_81ad7678f080870956db37174bcf1054586cfbad.out \
$(srcdir)/%reldir%/test_sql_xml_func.sh_8912b59d5b515ab1373a3d9bc635ebabacd01dfd.err \
$(srcdir)/%reldir%/test_sql_xml_func.sh_8912b59d5b515ab1373a3d9bc635ebabacd01dfd.out \
$(srcdir)/%reldir%/test_sql_xml_func.sh_b036c73528a446cba46625767517cdac868aba72.err \
$(srcdir)/%reldir%/test_sql_xml_func.sh_b036c73528a446cba46625767517cdac868aba72.out \
+ $(srcdir)/%reldir%/test_sql_xml_func.sh_bcbd691bb24c4f7bcb9fe0e035b290815f1c8874.err \
+ $(srcdir)/%reldir%/test_sql_xml_func.sh_bcbd691bb24c4f7bcb9fe0e035b290815f1c8874.out \
$(srcdir)/%reldir%/test_sql_xml_func.sh_fefeb387ae14d4171225ea06cbbff3ec43990cf0.err \
$(srcdir)/%reldir%/test_sql_xml_func.sh_fefeb387ae14d4171225ea06cbbff3ec43990cf0.out \
- $(srcdir)/%reldir%/test_sql_yaml_func.sh_41c6abde708a69e74f5b7fde865d88fa75f91e0a.err \
- $(srcdir)/%reldir%/test_sql_yaml_func.sh_41c6abde708a69e74f5b7fde865d88fa75f91e0a.out \
$(srcdir)/%reldir%/test_sql_yaml_func.sh_dc189d02e8979b7ed245d5d750f68b9965984699.err \
$(srcdir)/%reldir%/test_sql_yaml_func.sh_dc189d02e8979b7ed245d5d750f68b9965984699.out \
+ $(srcdir)/%reldir%/test_text_file.sh_02a0514e0e384e5511ae202ea519552ba04030ed.err \
+ $(srcdir)/%reldir%/test_text_file.sh_02a0514e0e384e5511ae202ea519552ba04030ed.out \
+ $(srcdir)/%reldir%/test_text_file.sh_0bba304f34ae07c4fa9e91e0b42f5fe98654a6a8.err \
+ $(srcdir)/%reldir%/test_text_file.sh_0bba304f34ae07c4fa9e91e0b42f5fe98654a6a8.out \
+ $(srcdir)/%reldir%/test_text_file.sh_11fd274911e45a743b4de616888a64183d07cb76.err \
+ $(srcdir)/%reldir%/test_text_file.sh_11fd274911e45a743b4de616888a64183d07cb76.out \
+ $(srcdir)/%reldir%/test_text_file.sh_143a40164c93c7ec44a66e7940b92b128a421147.err \
+ $(srcdir)/%reldir%/test_text_file.sh_143a40164c93c7ec44a66e7940b92b128a421147.out \
+ $(srcdir)/%reldir%/test_text_file.sh_1ce4056d72b871f8bb844c86aade2a9b1da58030.err \
+ $(srcdir)/%reldir%/test_text_file.sh_1ce4056d72b871f8bb844c86aade2a9b1da58030.out \
+ $(srcdir)/%reldir%/test_text_file.sh_25cef06efcbe106c2e1cc4a166b673e7b244c6d7.err \
+ $(srcdir)/%reldir%/test_text_file.sh_25cef06efcbe106c2e1cc4a166b673e7b244c6d7.out \
+ $(srcdir)/%reldir%/test_text_file.sh_265a8a5825e6c7dbc85cbe496dab6be7a349f3db.err \
+ $(srcdir)/%reldir%/test_text_file.sh_265a8a5825e6c7dbc85cbe496dab6be7a349f3db.out \
+ $(srcdir)/%reldir%/test_text_file.sh_4226123565a53b4e3f80e602c1f294721e8e07bf.err \
+ $(srcdir)/%reldir%/test_text_file.sh_4226123565a53b4e3f80e602c1f294721e8e07bf.out \
+ $(srcdir)/%reldir%/test_text_file.sh_4dd174410d702a7b4be794fb6fa2c8889bd768d6.err \
+ $(srcdir)/%reldir%/test_text_file.sh_4dd174410d702a7b4be794fb6fa2c8889bd768d6.out \
+ $(srcdir)/%reldir%/test_text_file.sh_596b120fbea638472a27964444e262b4572afacc.err \
+ $(srcdir)/%reldir%/test_text_file.sh_596b120fbea638472a27964444e262b4572afacc.out \
$(srcdir)/%reldir%/test_text_file.sh_5b51b55dff7332c5bee2c9b797c401c5614d574a.err \
$(srcdir)/%reldir%/test_text_file.sh_5b51b55dff7332c5bee2c9b797c401c5614d574a.out \
+ $(srcdir)/%reldir%/test_text_file.sh_5e9320f18d066e6fc930dbbffc357af64312bd4b.err \
+ $(srcdir)/%reldir%/test_text_file.sh_5e9320f18d066e6fc930dbbffc357af64312bd4b.out \
$(srcdir)/%reldir%/test_text_file.sh_6a24078983cf1b7a80b6fb65d5186cd125498136.err \
$(srcdir)/%reldir%/test_text_file.sh_6a24078983cf1b7a80b6fb65d5186cd125498136.out \
+ $(srcdir)/%reldir%/test_text_file.sh_73f69c883f60761bff9f8874f61d21a189e92912.err \
+ $(srcdir)/%reldir%/test_text_file.sh_73f69c883f60761bff9f8874f61d21a189e92912.out \
+ $(srcdir)/%reldir%/test_text_file.sh_786c7262f977201af36b0e69ba1a2aba130bbb06.err \
+ $(srcdir)/%reldir%/test_text_file.sh_786c7262f977201af36b0e69ba1a2aba130bbb06.out \
+ $(srcdir)/%reldir%/test_text_file.sh_78f252288519c8f767bb2759ea32959dab2ebc46.err \
+ $(srcdir)/%reldir%/test_text_file.sh_78f252288519c8f767bb2759ea32959dab2ebc46.out \
$(srcdir)/%reldir%/test_text_file.sh_7b00f32a3fff7fc2d78a87045ae842e58be88480.err \
$(srcdir)/%reldir%/test_text_file.sh_7b00f32a3fff7fc2d78a87045ae842e58be88480.out \
$(srcdir)/%reldir%/test_text_file.sh_87943c6be50d701a03e901f16493314c839af1ab.err \
$(srcdir)/%reldir%/test_text_file.sh_87943c6be50d701a03e901f16493314c839af1ab.out \
+ $(srcdir)/%reldir%/test_text_file.sh_8a4954af3e536b3789b1fd5b33519e9d444cc933.err \
+ $(srcdir)/%reldir%/test_text_file.sh_8a4954af3e536b3789b1fd5b33519e9d444cc933.out \
$(srcdir)/%reldir%/test_text_file.sh_8b2cd055e6a1db2ed9b2af2a917f8556395fa653.err \
$(srcdir)/%reldir%/test_text_file.sh_8b2cd055e6a1db2ed9b2af2a917f8556395fa653.out \
+ $(srcdir)/%reldir%/test_text_file.sh_a87c18c643994c3dbbbbb619a06a601d3668ea71.err \
+ $(srcdir)/%reldir%/test_text_file.sh_a87c18c643994c3dbbbbb619a06a601d3668ea71.out \
$(srcdir)/%reldir%/test_text_file.sh_ac486314c4e02e480d829ea2f077b86c49fedcec.err \
$(srcdir)/%reldir%/test_text_file.sh_ac486314c4e02e480d829ea2f077b86c49fedcec.out \
$(srcdir)/%reldir%/test_text_file.sh_ac872aadda29b9a824361a2c711d62ec1c75d40f.err \
$(srcdir)/%reldir%/test_text_file.sh_ac872aadda29b9a824361a2c711d62ec1c75d40f.out \
$(srcdir)/%reldir%/test_text_file.sh_c2a346ca1da2da4346f1d310212e166767993ce9.err \
$(srcdir)/%reldir%/test_text_file.sh_c2a346ca1da2da4346f1d310212e166767993ce9.out \
+ $(srcdir)/%reldir%/test_text_file.sh_d59b67113864ef5e77267d7fd8ad4072f5aef0fc.err \
+ $(srcdir)/%reldir%/test_text_file.sh_d59b67113864ef5e77267d7fd8ad4072f5aef0fc.out \
$(srcdir)/%reldir%/test_text_file.sh_e088ea61a5382458cc48a2607e2639e52b0be1da.err \
$(srcdir)/%reldir%/test_text_file.sh_e088ea61a5382458cc48a2607e2639e52b0be1da.out \
+ $(srcdir)/%reldir%/test_text_file.sh_e556fa91b91579df20d38540a5db9cedbaf68a62.err \
+ $(srcdir)/%reldir%/test_text_file.sh_e556fa91b91579df20d38540a5db9cedbaf68a62.out \
+ $(srcdir)/%reldir%/test_text_file.sh_f586ef080a86dfe1f981b345bcf8d7a279b2b247.err \
+ $(srcdir)/%reldir%/test_text_file.sh_f586ef080a86dfe1f981b345bcf8d7a279b2b247.out \
+ $(srcdir)/%reldir%/test_text_file.sh_f7522b0a99550a3ff91aae6582eb861547c535e1.err \
+ $(srcdir)/%reldir%/test_text_file.sh_f7522b0a99550a3ff91aae6582eb861547c535e1.out \
$()
diff --git a/test/expected/test_cli.sh_a1a09f890f4604309d0a81bbbec8e50fb7d5e887.err b/test/expected/test_cli.sh_0b3639753916f71254e8c9cce4ebb8bfd9978d3e.err
index e69de29..e69de29 100644
--- a/test/expected/test_cli.sh_a1a09f890f4604309d0a81bbbec8e50fb7d5e887.err
+++ b/test/expected/test_cli.sh_0b3639753916f71254e8c9cce4ebb8bfd9978d3e.err
diff --git a/test/expected/test_cli.sh_0b3639753916f71254e8c9cce4ebb8bfd9978d3e.out b/test/expected/test_cli.sh_0b3639753916f71254e8c9cce4ebb8bfd9978d3e.out
new file mode 100644
index 0000000..1a62b0e
--- /dev/null
+++ b/test/expected/test_cli.sh_0b3639753916f71254e8c9cce4ebb8bfd9978d3e.out
@@ -0,0 +1,5263 @@
+{
+ "tuning": {
+ "archive-manager": {
+ "min-free-space": 33554432,
+ "cache-ttl": "2d"
+ },
+ "piper": {
+ "max-size": 10485760,
+ "rotations": 4,
+ "ttl": "2d"
+ },
+ "file-vtab": {
+ "max-content-size": 33554432
+ },
+ "logfile": {
+ "max-unrecognized-lines": 1000
+ },
+ "remote": {
+ "cache-ttl": "2d",
+ "ssh": {
+ "command": "ssh",
+ "transfer-command": "cat > {0:} && chmod ugo+rx ./{0:}",
+ "start-command": "bash -c ./{0:}",
+ "flags": "",
+ "options": {
+
+ },
+ "config": {
+ "BatchMode": "yes",
+ "ConnectTimeout": "10"
+ }
+ }
+ },
+ "clipboard": {
+ "impls": {
+ "MacOS": {
+ "test": "command -v pbcopy",
+ "general": {
+ "write": "pbcopy",
+ "read": "pbpaste -Prefer txt"
+ },
+ "find": {
+ "write": "pbcopy -pboard find",
+ "read": "pbpaste -pboard find -Prefer txt"
+ }
+ },
+ "NeoVim": {
+ "test": "command -v win32yank.exe",
+ "general": {
+ "write": "win32yank.exe -i --crlf",
+ "read": "win32yank.exe -o --lf"
+ },
+ "find": {
+ "write": "",
+ "read": ""
+ }
+ },
+ "Wayland": {
+ "test": "test -n \"$WAYLAND_DISPLAY\"",
+ "general": {
+ "write": "wl-copy --foreground --type text/plain",
+ "read": "wl-paste --no-newline"
+ },
+ "find": {
+ "write": "",
+ "read": ""
+ }
+ },
+ "Windows": {
+ "test": "command -v clip.exe",
+ "general": {
+ "write": "clip.exe",
+ "read": ""
+ },
+ "find": {
+ "write": "",
+ "read": ""
+ }
+ },
+ "X11-xclip": {
+ "test": "test -n \"$DISPLAY\" && command -v xclip",
+ "general": {
+ "write": "xclip -i -selection clipboard",
+ "read": "xclip -o -selection clipboard"
+ },
+ "find": {
+ "write": "",
+ "read": ""
+ }
+ },
+ "tmux": {
+ "test": "test -n \"$TMUX\" -a -z \"$SSH_CLIENT\"",
+ "general": {
+ "write": "tmux load-buffer -",
+ "read": "tmux save-buffer -"
+ },
+ "find": {
+ "write": "",
+ "read": ""
+ }
+ }
+ }
+ },
+ "url-scheme": {
+ "docker": {
+ "handler": "docker-url-handler"
+ },
+ "docker-compose": {
+ "handler": "docker-compose-url-handler"
+ },
+ "hw": {
+ "handler": "hw-url-handler"
+ },
+ "journald": {
+ "handler": "journald-url-handler"
+ },
+ "piper": {
+ "handler": "piper-url-handler"
+ },
+ "podman": {
+ "handler": "docker-url-handler"
+ }
+ }
+ },
+ "ui": {
+ "clock-format": "%Y-%m-%dT%H:%M:%S %Z",
+ "dim-text": false,
+ "default-colors": true,
+ "keymap": "default",
+ "theme": "default",
+ "theme-defs": {
+ "default": {
+ "vars": {
+ "semantic_highlight_color": "semantic()"
+ },
+ "styles": {
+ "identifier": {
+ "color": "semantic()",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "text": {
+ "color": "Silver",
+ "background-color": "Black",
+ "underline": false,
+ "bold": false
+ },
+ "selected-text": {
+ "color": "",
+ "background-color": "DarkCyan",
+ "underline": false,
+ "bold": false
+ },
+ "alt-text": {
+ "color": "",
+ "background-color": "#262626",
+ "underline": false,
+ "bold": false
+ },
+ "error": {
+ "color": "Red",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "ok": {
+ "color": "Green",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "info": {
+ "color": "Maroon",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "warning": {
+ "color": "Yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "hidden": {
+ "color": "Yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "cursor-line": {
+ "color": "Cyan1",
+ "background-color": "Red",
+ "underline": true,
+ "bold": true
+ },
+ "disabled-cursor-line": {
+ "color": "Cyan1",
+ "background-color": "#5f005f",
+ "underline": false,
+ "bold": false
+ },
+ "adjusted-time": {
+ "color": "Maroon",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "skewed-time": {
+ "color": "Yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "file-offset": {
+ "color": "Silver",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "offset-time": {
+ "color": "Teal",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "invalid-msg": {
+ "color": "Yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "popup": {
+ "color": "Silver",
+ "background-color": "Teal",
+ "underline": false,
+ "bold": false
+ },
+ "focused": {
+ "color": "Black",
+ "background-color": "Silver",
+ "underline": false,
+ "bold": false
+ },
+ "disabled-focused": {
+ "color": "Black",
+ "background-color": "#888",
+ "underline": false,
+ "bold": false
+ },
+ "scrollbar": {
+ "color": "Black",
+ "background-color": "Silver",
+ "underline": false,
+ "bold": false
+ },
+ "h1": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "h2": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "h3": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "h4": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "h5": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "h6": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "hr": {
+ "color": "#444",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "hyperlink": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "list-glyph": {
+ "color": "Yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "breadcrumb": {
+ "color": "Teal",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "table-border": {
+ "color": "#444",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "table-header": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "quote-border": {
+ "color": "#666",
+ "background-color": "#444",
+ "underline": false,
+ "bold": false
+ },
+ "quoted-text": {
+ "color": "",
+ "background-color": "#444",
+ "underline": false,
+ "bold": false
+ },
+ "footnote-border": {
+ "color": "Blue",
+ "background-color": "#444",
+ "underline": false,
+ "bold": false
+ },
+ "footnote-text": {
+ "color": "#eee",
+ "background-color": "#444",
+ "underline": false,
+ "bold": false
+ },
+ "snippet-border": {
+ "color": "Teal",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "indent-guide": {
+ "color": "#444",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ }
+ },
+ "syntax-styles": {
+ "inline-code": {
+ "color": "Red",
+ "background-color": "#121212",
+ "underline": false,
+ "bold": false
+ },
+ "quoted-code": {
+ "color": "Silver",
+ "background-color": "#121212",
+ "underline": false,
+ "bold": false
+ },
+ "code-border": {
+ "color": "#444",
+ "background-color": "#121212",
+ "underline": false,
+ "bold": false
+ },
+ "keyword": {
+ "color": "#00f",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "string": {
+ "color": "Green",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "comment": {
+ "color": "Green",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "doc-directive": {
+ "color": "Teal",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "variable": {
+ "color": "Teal",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "symbol": {
+ "color": "Blue",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "null": {
+ "color": "Silver",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "ascii-control": {
+ "color": "Green",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "non-ascii": {
+ "color": "Yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "number": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "type": {
+ "color": "Blue",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "function": {
+ "color": "Cyan1",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "separators-references-accessors": {
+ "color": "Silver",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "re-special": {
+ "color": "Teal",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "re-repeat": {
+ "color": "Yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "diff-delete": {
+ "color": "Red",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "diff-add": {
+ "color": "Green",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "diff-section": {
+ "color": "Maroon",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "spectrogram-low": {
+ "color": "",
+ "background-color": "Green",
+ "underline": false,
+ "bold": false
+ },
+ "spectrogram-medium": {
+ "color": "",
+ "background-color": "Yellow",
+ "underline": false,
+ "bold": false
+ },
+ "spectrogram-high": {
+ "color": "",
+ "background-color": "Red",
+ "underline": false,
+ "bold": false
+ },
+ "file": {
+ "color": "Blue",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ }
+ },
+ "status-styles": {
+ "text": {
+ "color": "Black",
+ "background-color": "Silver",
+ "underline": false,
+ "bold": false
+ },
+ "warn": {
+ "color": "Yellow",
+ "background-color": "Silver",
+ "underline": false,
+ "bold": false
+ },
+ "alert": {
+ "color": "Red",
+ "background-color": "Silver",
+ "underline": false,
+ "bold": false
+ },
+ "active": {
+ "color": "Green",
+ "background-color": "Silver",
+ "underline": false,
+ "bold": false
+ },
+ "inactive-alert": {
+ "color": "Red",
+ "background-color": "Grey37",
+ "underline": false,
+ "bold": false
+ },
+ "inactive": {
+ "color": "Silver",
+ "background-color": "Grey37",
+ "underline": false,
+ "bold": false
+ },
+ "title-hotkey": {
+ "color": "Teal",
+ "background-color": "Blue",
+ "underline": true,
+ "bold": false
+ },
+ "title": {
+ "color": "Silver",
+ "background-color": "Blue",
+ "underline": false,
+ "bold": true
+ },
+ "disabled-title": {
+ "color": "Black",
+ "background-color": "Silver",
+ "underline": false,
+ "bold": true
+ },
+ "subtitle": {
+ "color": "Black",
+ "background-color": "Teal",
+ "underline": false,
+ "bold": false
+ },
+ "info": {
+ "color": "Silver",
+ "background-color": "Grey37",
+ "underline": false,
+ "bold": false
+ },
+ "hotkey": {
+ "color": "Purple",
+ "background-color": "",
+ "underline": true,
+ "bold": true
+ },
+ "suggestion": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ }
+ },
+ "log-level-styles": {
+ "trace": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "debug5": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "debug4": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "debug3": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "debug2": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "debug": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "info": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "stats": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "notice": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "warning": {
+ "color": "Yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "error": {
+ "color": "Red",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "critical": {
+ "color": "Red",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "fatal": {
+ "color": "Red",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "invalid": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ }
+ },
+ "highlights": {
+ "colors": {
+ "pattern": "(?:#[a-fA-F0-9]{6}|#[a-fA-F0-9]{3}\\b)",
+ "style": {
+ "color": "${semantic_highlight_color}",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ }
+ },
+ "ipv4": {
+ "pattern": "\\b(?<!\\d\\.)\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\b(?!\\.\\d)",
+ "style": {
+ "color": "${semantic_highlight_color}",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ }
+ },
+ "xml": {
+ "pattern": "</?([^ >=!]+)[^>]*>",
+ "style": {
+ "color": "${semantic_highlight_color}",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ }
+ },
+ "xml-decl": {
+ "pattern": "<!([^ >=!]+)[^>]*>",
+ "style": {
+ "color": "${semantic_highlight_color}",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ }
+ }
+ }
+ },
+ "dracula": {
+ "vars": {
+ "black": "#282A36",
+ "blue": "#BD93F9",
+ "cyan": "#8BE9FD",
+ "green": "#50FA7B",
+ "magenta": "#FF79C6",
+ "orange": "#FFB86C",
+ "pink": "#FF79C6",
+ "purple": "#BD93F9",
+ "red": "#FF5555",
+ "semantic_highlight_color": "semantic()",
+ "white": "#F8F8F2",
+ "yellow": "#F1FA8C"
+ },
+ "styles": {
+ "identifier": {
+ "color": "semantic()",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "text": {
+ "color": "#f6f6f6",
+ "background-color": "$black",
+ "underline": false,
+ "bold": false
+ },
+ "selected-text": {
+ "color": "",
+ "background-color": "$cyan",
+ "underline": false,
+ "bold": false
+ },
+ "alt-text": {
+ "color": "",
+ "background-color": "#1c1c1c",
+ "underline": false,
+ "bold": false
+ },
+ "error": {
+ "color": "$red",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "ok": {
+ "color": "$green",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "info": {
+ "color": "$magenta",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "warning": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "hidden": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "cursor-line": {
+ "color": "$cyan",
+ "background-color": "#44475A",
+ "underline": false,
+ "bold": true
+ },
+ "disabled-cursor-line": {
+ "color": "$cyan",
+ "background-color": "#2a2c38",
+ "underline": false,
+ "bold": false
+ },
+ "adjusted-time": {
+ "color": "$magenta",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "skewed-time": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "file-offset": {
+ "color": "#888",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "offset-time": {
+ "color": "$cyan",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "invalid-msg": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "popup": {
+ "color": "$black",
+ "background-color": "$cyan",
+ "underline": false,
+ "bold": false
+ },
+ "focused": {
+ "color": "$black",
+ "background-color": "$white",
+ "underline": false,
+ "bold": false
+ },
+ "disabled-focused": {
+ "color": "$white",
+ "background-color": "#333",
+ "underline": false,
+ "bold": false
+ },
+ "scrollbar": {
+ "color": "$black",
+ "background-color": "#888",
+ "underline": false,
+ "bold": false
+ },
+ "h1": {
+ "color": "$purple",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "h2": {
+ "color": "$purple",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "h3": {
+ "color": "$purple",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "h4": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "h5": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "h6": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "hr": {
+ "color": "#6272A4",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "hyperlink": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "list-glyph": {
+ "color": "$cyan",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "breadcrumb": {
+ "color": "#99a",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "table-border": {
+ "color": "#444",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "table-header": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "quote-border": {
+ "color": "#666",
+ "background-color": "#444",
+ "underline": false,
+ "bold": false
+ },
+ "quoted-text": {
+ "color": "$yellow",
+ "background-color": "#444",
+ "underline": false,
+ "bold": false
+ },
+ "footnote-border": {
+ "color": "$blue",
+ "background-color": "#444",
+ "underline": false,
+ "bold": false
+ },
+ "footnote-text": {
+ "color": "$cyan",
+ "background-color": "#444",
+ "underline": false,
+ "bold": false
+ },
+ "snippet-border": {
+ "color": "$cyan",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "indent-guide": {
+ "color": "#444",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ }
+ },
+ "syntax-styles": {
+ "inline-code": {
+ "color": "$green",
+ "background-color": "#121212",
+ "underline": false,
+ "bold": false
+ },
+ "quoted-code": {
+ "color": "$orange",
+ "background-color": "#121212",
+ "underline": false,
+ "bold": false
+ },
+ "code-border": {
+ "color": "#444",
+ "background-color": "#121212",
+ "underline": false,
+ "bold": false
+ },
+ "keyword": {
+ "color": "$pink",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "string": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "comment": {
+ "color": "#6272A4",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "doc-directive": {
+ "color": "$pink",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "variable": {
+ "color": "$orange",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "symbol": {
+ "color": "#78dce8",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "null": {
+ "color": "#888",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "ascii-control": {
+ "color": "$green",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "non-ascii": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "number": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "type": {
+ "color": "$cyan",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "function": {
+ "color": "$green",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "separators-references-accessors": {
+ "color": "$pink",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "re-special": {
+ "color": "$cyan",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "re-repeat": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "diff-delete": {
+ "color": "#f00",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "diff-add": {
+ "color": "#0f0",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "diff-section": {
+ "color": "#6272A4",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "spectrogram-low": {
+ "color": "",
+ "background-color": "$green",
+ "underline": false,
+ "bold": false
+ },
+ "spectrogram-medium": {
+ "color": "",
+ "background-color": "$yellow",
+ "underline": false,
+ "bold": false
+ },
+ "spectrogram-high": {
+ "color": "",
+ "background-color": "$red",
+ "underline": false,
+ "bold": false
+ },
+ "file": {
+ "color": "$blue",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ }
+ },
+ "status-styles": {
+ "text": {
+ "color": "#f6f6f6",
+ "background-color": "#353535",
+ "underline": false,
+ "bold": false
+ },
+ "warn": {
+ "color": "$yellow",
+ "background-color": "#353535",
+ "underline": false,
+ "bold": false
+ },
+ "alert": {
+ "color": "$red",
+ "background-color": "#353535",
+ "underline": false,
+ "bold": false
+ },
+ "active": {
+ "color": "$green",
+ "background-color": "#353535",
+ "underline": false,
+ "bold": false
+ },
+ "inactive-alert": {
+ "color": "$red",
+ "background-color": "#2f2f2f",
+ "underline": false,
+ "bold": false
+ },
+ "inactive": {
+ "color": "#555",
+ "background-color": "#2f2f2f",
+ "underline": false,
+ "bold": false
+ },
+ "title-hotkey": {
+ "color": "$black",
+ "background-color": "#5394ec",
+ "underline": true,
+ "bold": false
+ },
+ "title": {
+ "color": "#f6f6f6",
+ "background-color": "#5394ec",
+ "underline": false,
+ "bold": true
+ },
+ "disabled-title": {
+ "color": "#5394ec",
+ "background-color": "#353535",
+ "underline": false,
+ "bold": true
+ },
+ "subtitle": {
+ "color": "#555",
+ "background-color": "#66d9ee",
+ "underline": false,
+ "bold": true
+ },
+ "info": {
+ "color": "#aaa",
+ "background-color": "#2f2f2f",
+ "underline": false,
+ "bold": false
+ },
+ "hotkey": {
+ "color": "#fff",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "suggestion": {
+ "color": "#888",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ }
+ },
+ "log-level-styles": {
+ "trace": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "debug5": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "debug4": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "debug3": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "debug2": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "debug": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "info": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "stats": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "notice": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "warning": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "error": {
+ "color": "$red",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "critical": {
+ "color": "$red",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "fatal": {
+ "color": "$red",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "invalid": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ }
+ },
+ "highlights": {
+
+ }
+ },
+ "eldar": {
+ "vars": {
+ "black": "#000000",
+ "blue": "#729fcf",
+ "cyan": "#34e2e2",
+ "green": "#8ae234",
+ "magenta": "#ad7fa8",
+ "orange": "#ef8c29",
+ "red": "#ef2929",
+ "semantic_highlight_color": "semantic()",
+ "white": "#ffffff",
+ "yellow": "#fce94f"
+ },
+ "styles": {
+ "identifier": {
+ "color": "semantic()",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "text": {
+ "color": "$white",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "selected-text": {
+ "color": "",
+ "background-color": "$cyan",
+ "underline": false,
+ "bold": false
+ },
+ "alt-text": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "error": {
+ "color": "$red",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "ok": {
+ "color": "$green",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "info": {
+ "color": "$magenta",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "warning": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "hidden": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "cursor-line": {
+ "color": "$cyan",
+ "background-color": "$red",
+ "underline": true,
+ "bold": true
+ },
+ "disabled-cursor-line": {
+ "color": "$cyan",
+ "background-color": "#5f005f",
+ "underline": false,
+ "bold": false
+ },
+ "adjusted-time": {
+ "color": "$magenta",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "skewed-time": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "file-offset": {
+ "color": "#888",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "offset-time": {
+ "color": "$cyan",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "invalid-msg": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "popup": {
+ "color": "$black",
+ "background-color": "Grey37",
+ "underline": false,
+ "bold": false
+ },
+ "focused": {
+ "color": "$black",
+ "background-color": "$white",
+ "underline": false,
+ "bold": false
+ },
+ "disabled-focused": {
+ "color": "$white",
+ "background-color": "#333",
+ "underline": false,
+ "bold": false
+ },
+ "scrollbar": {
+ "color": "$black",
+ "background-color": "$white",
+ "underline": false,
+ "bold": false
+ },
+ "h1": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "h2": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "h3": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "h4": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "h5": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "h6": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "hr": {
+ "color": "#444",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "hyperlink": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "list-glyph": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "breadcrumb": {
+ "color": "#448",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "table-border": {
+ "color": "#444",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "table-header": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "quote-border": {
+ "color": "#666",
+ "background-color": "#444",
+ "underline": false,
+ "bold": false
+ },
+ "quoted-text": {
+ "color": "",
+ "background-color": "#444",
+ "underline": false,
+ "bold": false
+ },
+ "footnote-border": {
+ "color": "$blue",
+ "background-color": "#444",
+ "underline": false,
+ "bold": false
+ },
+ "footnote-text": {
+ "color": "#eee",
+ "background-color": "#444",
+ "underline": false,
+ "bold": false
+ },
+ "snippet-border": {
+ "color": "$cyan",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "indent-guide": {
+ "color": "#444",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ }
+ },
+ "syntax-styles": {
+ "inline-code": {
+ "color": "$red",
+ "background-color": "#121212",
+ "underline": false,
+ "bold": false
+ },
+ "quoted-code": {
+ "color": "#eee",
+ "background-color": "#121212",
+ "underline": false,
+ "bold": false
+ },
+ "code-border": {
+ "color": "#444",
+ "background-color": "#121212",
+ "underline": false,
+ "bold": false
+ },
+ "keyword": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "string": {
+ "color": "$magenta",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "comment": {
+ "color": "$cyan",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "doc-directive": {
+ "color": "$green",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "variable": {
+ "color": "$green",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "symbol": {
+ "color": "$green",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "null": {
+ "color": "#888",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "ascii-control": {
+ "color": "$green",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "non-ascii": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "number": {
+ "color": "$red",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "type": {
+ "color": "$blue",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "function": {
+ "color": "$cyan",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "separators-references-accessors": {
+ "color": "$red",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "re-special": {
+ "color": "$cyan",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "re-repeat": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "diff-delete": {
+ "color": "$red",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "diff-add": {
+ "color": "$green",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "diff-section": {
+ "color": "$magenta",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "spectrogram-low": {
+ "color": "",
+ "background-color": "$green",
+ "underline": false,
+ "bold": false
+ },
+ "spectrogram-medium": {
+ "color": "",
+ "background-color": "$yellow",
+ "underline": false,
+ "bold": false
+ },
+ "spectrogram-high": {
+ "color": "",
+ "background-color": "$red",
+ "underline": false,
+ "bold": false
+ },
+ "file": {
+ "color": "$blue",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ }
+ },
+ "status-styles": {
+ "text": {
+ "color": "$black",
+ "background-color": "#999",
+ "underline": false,
+ "bold": false
+ },
+ "warn": {
+ "color": "$yellow",
+ "background-color": "#999",
+ "underline": false,
+ "bold": false
+ },
+ "alert": {
+ "color": "$red",
+ "background-color": "#999",
+ "underline": false,
+ "bold": false
+ },
+ "active": {
+ "color": "$green",
+ "background-color": "#999",
+ "underline": false,
+ "bold": false
+ },
+ "inactive-alert": {
+ "color": "$red",
+ "background-color": "Grey",
+ "underline": false,
+ "bold": false
+ },
+ "inactive": {
+ "color": "$black",
+ "background-color": "Grey",
+ "underline": false,
+ "bold": false
+ },
+ "title-hotkey": {
+ "color": "$black",
+ "background-color": "#5394ec",
+ "underline": true,
+ "bold": false
+ },
+ "title": {
+ "color": "$black",
+ "background-color": "$blue",
+ "underline": false,
+ "bold": true
+ },
+ "disabled-title": {
+ "color": "#5394ec",
+ "background-color": "#353535",
+ "underline": false,
+ "bold": true
+ },
+ "subtitle": {
+ "color": "$black",
+ "background-color": "$cyan",
+ "underline": false,
+ "bold": true
+ },
+ "info": {
+ "color": "$black",
+ "background-color": "Grey",
+ "underline": false,
+ "bold": false
+ },
+ "hotkey": {
+ "color": "#fff",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "suggestion": {
+ "color": "#888",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ }
+ },
+ "log-level-styles": {
+ "trace": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "debug5": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "debug4": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "debug3": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "debug2": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "debug": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "info": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "stats": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "notice": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "warning": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "error": {
+ "color": "$red",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "critical": {
+ "color": "$red",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "fatal": {
+ "color": "$red",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "invalid": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ }
+ },
+ "highlights": {
+
+ }
+ },
+ "grayscale": {
+ "vars": {
+ "black": "#2d2a2e",
+ "blue": "#5394ec",
+ "cyan": "#66d9ee",
+ "green": "#a7e22e",
+ "magenta": "#ae81ff",
+ "plaintext": "#ccc",
+ "red": "#f92772",
+ "white": "#f6f6f6",
+ "yellow": "#fe9720"
+ },
+ "styles": {
+ "identifier": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "text": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "selected-text": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "alt-text": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "error": {
+ "color": "$red",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "ok": {
+ "color": "$green",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "info": {
+ "color": "#aaa",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "warning": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "hidden": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "cursor-line": {
+ "color": "#fff",
+ "background-color": "#555",
+ "underline": true,
+ "bold": true
+ },
+ "disabled-cursor-line": {
+ "color": "#888",
+ "background-color": "#333",
+ "underline": false,
+ "bold": false
+ },
+ "adjusted-time": {
+ "color": "$magenta",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "skewed-time": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "file-offset": {
+ "color": "#888",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "offset-time": {
+ "color": "$cyan",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "invalid-msg": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "popup": {
+ "color": "$plaintext",
+ "background-color": "#626262",
+ "underline": false,
+ "bold": false
+ },
+ "focused": {
+ "color": "$black",
+ "background-color": "$plaintext",
+ "underline": false,
+ "bold": false
+ },
+ "disabled-focused": {
+ "color": "$plaintext",
+ "background-color": "#333",
+ "underline": false,
+ "bold": false
+ },
+ "scrollbar": {
+ "color": "$black",
+ "background-color": "#888",
+ "underline": false,
+ "bold": false
+ },
+ "h1": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "h2": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "h3": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "h4": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "h5": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "h6": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "hr": {
+ "color": "#444",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "hyperlink": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "list-glyph": {
+ "color": "#444",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "breadcrumb": {
+ "color": "#999",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "table-border": {
+ "color": "#444",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "table-header": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "quote-border": {
+ "color": "#666",
+ "background-color": "#444",
+ "underline": false,
+ "bold": false
+ },
+ "quoted-text": {
+ "color": "",
+ "background-color": "#444",
+ "underline": false,
+ "bold": false
+ },
+ "footnote-border": {
+ "color": "#888",
+ "background-color": "#444",
+ "underline": false,
+ "bold": false
+ },
+ "footnote-text": {
+ "color": "#eee",
+ "background-color": "#444",
+ "underline": false,
+ "bold": false
+ },
+ "snippet-border": {
+ "color": "#888",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "indent-guide": {
+ "color": "#444",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ }
+ },
+ "syntax-styles": {
+ "inline-code": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "quoted-code": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "code-border": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "keyword": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "string": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "comment": {
+ "color": "#888",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "doc-directive": {
+ "color": "#aaa",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "variable": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "symbol": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "null": {
+ "color": "#888",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "ascii-control": {
+ "color": "#aaa",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "non-ascii": {
+ "color": "#ccc",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "number": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "type": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "function": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "separators-references-accessors": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "re-special": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "re-repeat": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "diff-delete": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "diff-add": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "diff-section": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "spectrogram-low": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "spectrogram-medium": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "spectrogram-high": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "file": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ }
+ },
+ "status-styles": {
+ "text": {
+ "color": "#f6f6f6",
+ "background-color": "#353535",
+ "underline": false,
+ "bold": false
+ },
+ "warn": {
+ "color": "$yellow",
+ "background-color": "#353535",
+ "underline": false,
+ "bold": false
+ },
+ "alert": {
+ "color": "$red",
+ "background-color": "#353535",
+ "underline": false,
+ "bold": false
+ },
+ "active": {
+ "color": "$green",
+ "background-color": "#353535",
+ "underline": false,
+ "bold": false
+ },
+ "inactive-alert": {
+ "color": "$red",
+ "background-color": "#2f2f2f",
+ "underline": false,
+ "bold": false
+ },
+ "inactive": {
+ "color": "#555",
+ "background-color": "#2f2f2f",
+ "underline": false,
+ "bold": false
+ },
+ "title-hotkey": {
+ "color": "$black",
+ "background-color": "#5394ec",
+ "underline": true,
+ "bold": false
+ },
+ "title": {
+ "color": "#f6f6f6",
+ "background-color": "#8a8a8a",
+ "underline": false,
+ "bold": true
+ },
+ "disabled-title": {
+ "color": "#5394ec",
+ "background-color": "#353535",
+ "underline": false,
+ "bold": true
+ },
+ "subtitle": {
+ "color": "#e4e4e4",
+ "background-color": "#626262",
+ "underline": false,
+ "bold": true
+ },
+ "info": {
+ "color": "#555",
+ "background-color": "#2f2f2f",
+ "underline": false,
+ "bold": false
+ },
+ "hotkey": {
+ "color": "#fff",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "suggestion": {
+ "color": "#888",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ }
+ },
+ "log-level-styles": {
+ "trace": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "debug5": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "debug4": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "debug3": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "debug2": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "debug": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "info": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "stats": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "notice": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "warning": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "error": {
+ "color": "$red",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "critical": {
+ "color": "$red",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "fatal": {
+ "color": "$red",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "invalid": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ }
+ },
+ "highlights": {
+
+ }
+ },
+ "monocai": {
+ "vars": {
+ "black": "#2d2a2e",
+ "blue": "#5394ec",
+ "cyan": "#66d9ee",
+ "green": "#a7e22e",
+ "magenta": "#ae81ff",
+ "orange": "#fc9867",
+ "red": "#f92772",
+ "semantic_highlight_color": "semantic()",
+ "white": "#808080",
+ "yellow": "#fe9720"
+ },
+ "styles": {
+ "identifier": {
+ "color": "semantic()",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "text": {
+ "color": "#f6f6f6",
+ "background-color": "$black",
+ "underline": false,
+ "bold": false
+ },
+ "selected-text": {
+ "color": "",
+ "background-color": "$cyan",
+ "underline": false,
+ "bold": false
+ },
+ "alt-text": {
+ "color": "",
+ "background-color": "#1c1c1c",
+ "underline": false,
+ "bold": false
+ },
+ "error": {
+ "color": "$red",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "ok": {
+ "color": "$green",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "info": {
+ "color": "$magenta",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "warning": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "hidden": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "cursor-line": {
+ "color": "$cyan",
+ "background-color": "#7f005f",
+ "underline": false,
+ "bold": true
+ },
+ "disabled-cursor-line": {
+ "color": "$cyan",
+ "background-color": "#5f005f",
+ "underline": false,
+ "bold": false
+ },
+ "adjusted-time": {
+ "color": "$magenta",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "skewed-time": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "file-offset": {
+ "color": "#888",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "offset-time": {
+ "color": "$cyan",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "invalid-msg": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "popup": {
+ "color": "$white",
+ "background-color": "$cyan",
+ "underline": false,
+ "bold": false
+ },
+ "focused": {
+ "color": "$black",
+ "background-color": "$white",
+ "underline": false,
+ "bold": false
+ },
+ "disabled-focused": {
+ "color": "$white",
+ "background-color": "#333",
+ "underline": false,
+ "bold": false
+ },
+ "scrollbar": {
+ "color": "$black",
+ "background-color": "#888",
+ "underline": false,
+ "bold": false
+ },
+ "h1": {
+ "color": "$magenta",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "h2": {
+ "color": "$magenta",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "h3": {
+ "color": "$magenta",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "h4": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "h5": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "h6": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "hr": {
+ "color": "#444",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "hyperlink": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "list-glyph": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "breadcrumb": {
+ "color": "$orange",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "table-border": {
+ "color": "#444",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "table-header": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "quote-border": {
+ "color": "#666",
+ "background-color": "#444",
+ "underline": false,
+ "bold": false
+ },
+ "quoted-text": {
+ "color": "",
+ "background-color": "#444",
+ "underline": false,
+ "bold": false
+ },
+ "footnote-border": {
+ "color": "$blue",
+ "background-color": "#444",
+ "underline": false,
+ "bold": false
+ },
+ "footnote-text": {
+ "color": "#eee",
+ "background-color": "#444",
+ "underline": false,
+ "bold": false
+ },
+ "snippet-border": {
+ "color": "$cyan",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "indent-guide": {
+ "color": "#444",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ }
+ },
+ "syntax-styles": {
+ "inline-code": {
+ "color": "$red",
+ "background-color": "#121212",
+ "underline": false,
+ "bold": false
+ },
+ "quoted-code": {
+ "color": "#eee",
+ "background-color": "#121212",
+ "underline": false,
+ "bold": false
+ },
+ "code-border": {
+ "color": "#444",
+ "background-color": "#121212",
+ "underline": false,
+ "bold": false
+ },
+ "keyword": {
+ "color": "#ff6188",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "string": {
+ "color": "#ffd866",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "comment": {
+ "color": "#949194",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "doc-directive": {
+ "color": "#a9dc76",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "variable": {
+ "color": "#a9dc76",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "symbol": {
+ "color": "#78dce8",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "null": {
+ "color": "#888",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "ascii-control": {
+ "color": "$green",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "non-ascii": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "number": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "type": {
+ "color": "$blue",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "function": {
+ "color": "$cyan",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "separators-references-accessors": {
+ "color": "$red",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "re-special": {
+ "color": "$cyan",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "re-repeat": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "diff-delete": {
+ "color": "#f00",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "diff-add": {
+ "color": "#0f0",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "diff-section": {
+ "color": "#656e76",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "spectrogram-low": {
+ "color": "",
+ "background-color": "$green",
+ "underline": false,
+ "bold": false
+ },
+ "spectrogram-medium": {
+ "color": "",
+ "background-color": "$yellow",
+ "underline": false,
+ "bold": false
+ },
+ "spectrogram-high": {
+ "color": "",
+ "background-color": "$red",
+ "underline": false,
+ "bold": false
+ },
+ "file": {
+ "color": "$blue",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ }
+ },
+ "status-styles": {
+ "text": {
+ "color": "#f6f6f6",
+ "background-color": "#353535",
+ "underline": false,
+ "bold": false
+ },
+ "warn": {
+ "color": "$yellow",
+ "background-color": "#353535",
+ "underline": false,
+ "bold": false
+ },
+ "alert": {
+ "color": "$red",
+ "background-color": "#353535",
+ "underline": false,
+ "bold": false
+ },
+ "active": {
+ "color": "$green",
+ "background-color": "#353535",
+ "underline": false,
+ "bold": false
+ },
+ "inactive-alert": {
+ "color": "$red",
+ "background-color": "#2f2f2f",
+ "underline": false,
+ "bold": false
+ },
+ "inactive": {
+ "color": "#555",
+ "background-color": "#2f2f2f",
+ "underline": false,
+ "bold": false
+ },
+ "title-hotkey": {
+ "color": "$black",
+ "background-color": "#5394ec",
+ "underline": true,
+ "bold": false
+ },
+ "title": {
+ "color": "#f6f6f6",
+ "background-color": "#5394ec",
+ "underline": false,
+ "bold": true
+ },
+ "disabled-title": {
+ "color": "#5394ec",
+ "background-color": "#353535",
+ "underline": false,
+ "bold": true
+ },
+ "subtitle": {
+ "color": "#555",
+ "background-color": "#66d9ee",
+ "underline": false,
+ "bold": true
+ },
+ "info": {
+ "color": "#aaa",
+ "background-color": "#2f2f2f",
+ "underline": false,
+ "bold": false
+ },
+ "hotkey": {
+ "color": "#fff",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "suggestion": {
+ "color": "#888",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ }
+ },
+ "log-level-styles": {
+ "trace": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "debug5": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "debug4": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "debug3": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "debug2": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "debug": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "info": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "stats": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "notice": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "warning": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "error": {
+ "color": "$red",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "critical": {
+ "color": "$red",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "fatal": {
+ "color": "$red",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "invalid": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ }
+ },
+ "highlights": {
+
+ }
+ },
+ "night-owl": {
+ "vars": {
+ "black": "#011627",
+ "blue": "#5394ec",
+ "cyan": "#33cccc",
+ "green": "#007f00",
+ "magenta": "#ff70ff",
+ "red": "#ff6868",
+ "semantic_highlight_color": "semantic()",
+ "white": "#d6deeb",
+ "yellow": "#cdcd00"
+ },
+ "styles": {
+ "identifier": {
+ "color": "semantic()",
+ "background-color": "#011627",
+ "underline": false,
+ "bold": false
+ },
+ "text": {
+ "color": "#d6deeb",
+ "background-color": "#011627",
+ "underline": false,
+ "bold": false
+ },
+ "selected-text": {
+ "color": "",
+ "background-color": "$cyan",
+ "underline": false,
+ "bold": false
+ },
+ "alt-text": {
+ "color": "",
+ "background-color": "#1c1c1c",
+ "underline": false,
+ "bold": false
+ },
+ "error": {
+ "color": "#ef5350",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "ok": {
+ "color": "$green",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "info": {
+ "color": "$magenta",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "warning": {
+ "color": "#b39554",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "hidden": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "cursor-line": {
+ "color": "$cyan",
+ "background-color": "$red",
+ "underline": true,
+ "bold": true
+ },
+ "disabled-cursor-line": {
+ "color": "$cyan",
+ "background-color": "#5f005f",
+ "underline": false,
+ "bold": false
+ },
+ "adjusted-time": {
+ "color": "$magenta",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "skewed-time": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "file-offset": {
+ "color": "#888",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "offset-time": {
+ "color": "$cyan",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "invalid-msg": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "popup": {
+ "color": "$base00",
+ "background-color": "$base3",
+ "underline": false,
+ "bold": false
+ },
+ "focused": {
+ "color": "$black",
+ "background-color": "#666",
+ "underline": false,
+ "bold": false
+ },
+ "disabled-focused": {
+ "color": "$white",
+ "background-color": "#333",
+ "underline": false,
+ "bold": false
+ },
+ "scrollbar": {
+ "color": "$black",
+ "background-color": "$white",
+ "underline": false,
+ "bold": false
+ },
+ "h1": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "h2": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "h3": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "h4": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "h5": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "h6": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "hr": {
+ "color": "#444",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "hyperlink": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "list-glyph": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "breadcrumb": {
+ "color": "#2d5a80",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "table-border": {
+ "color": "#444",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "table-header": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "quote-border": {
+ "color": "#666",
+ "background-color": "#444",
+ "underline": false,
+ "bold": false
+ },
+ "quoted-text": {
+ "color": "",
+ "background-color": "#444",
+ "underline": false,
+ "bold": false
+ },
+ "footnote-border": {
+ "color": "$blue",
+ "background-color": "#444",
+ "underline": false,
+ "bold": false
+ },
+ "footnote-text": {
+ "color": "#eee",
+ "background-color": "#444",
+ "underline": false,
+ "bold": false
+ },
+ "snippet-border": {
+ "color": "$cyan",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "indent-guide": {
+ "color": "#444",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ }
+ },
+ "syntax-styles": {
+ "inline-code": {
+ "color": "$red",
+ "background-color": "#222",
+ "underline": false,
+ "bold": false
+ },
+ "quoted-code": {
+ "color": "#eee",
+ "background-color": "#222",
+ "underline": false,
+ "bold": false
+ },
+ "code-border": {
+ "color": "#444",
+ "background-color": "#222",
+ "underline": false,
+ "bold": false
+ },
+ "keyword": {
+ "color": "#c792ea",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "string": {
+ "color": "#ecc48d",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "comment": {
+ "color": "#676e95",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "doc-directive": {
+ "color": "#addb67",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "variable": {
+ "color": "#addb67",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "symbol": {
+ "color": "#82aaff",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "null": {
+ "color": "#888",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "ascii-control": {
+ "color": "$green",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "non-ascii": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "number": {
+ "color": "#f78c6c",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "type": {
+ "color": "$blue",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "function": {
+ "color": "$cyan",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "separators-references-accessors": {
+ "color": "$red",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "re-special": {
+ "color": "$cyan",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "re-repeat": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "diff-delete": {
+ "color": "#b03435",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "diff-add": {
+ "color": "#264b33",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "diff-section": {
+ "color": "$magenta",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "spectrogram-low": {
+ "color": "",
+ "background-color": "$green",
+ "underline": false,
+ "bold": false
+ },
+ "spectrogram-medium": {
+ "color": "",
+ "background-color": "$yellow",
+ "underline": false,
+ "bold": false
+ },
+ "spectrogram-high": {
+ "color": "",
+ "background-color": "$red",
+ "underline": false,
+ "bold": false
+ },
+ "file": {
+ "color": "#82aaff",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ }
+ },
+ "status-styles": {
+ "text": {
+ "color": "#f8f8f0",
+ "background-color": "#162d40",
+ "underline": false,
+ "bold": false
+ },
+ "warn": {
+ "color": "#b39554",
+ "background-color": "#162d40",
+ "underline": false,
+ "bold": false
+ },
+ "alert": {
+ "color": "#ef5350",
+ "background-color": "#162d40",
+ "underline": false,
+ "bold": false
+ },
+ "active": {
+ "color": "#264b33",
+ "background-color": "#162d40",
+ "underline": false,
+ "bold": false
+ },
+ "inactive-alert": {
+ "color": "#ef5350",
+ "background-color": "#0F1F2B",
+ "underline": false,
+ "bold": false
+ },
+ "inactive": {
+ "color": "#f0f0f0",
+ "background-color": "#0F1F2B",
+ "underline": false,
+ "bold": false
+ },
+ "title-hotkey": {
+ "color": "$black",
+ "background-color": "#2d5a80",
+ "underline": true,
+ "bold": true
+ },
+ "title": {
+ "color": "#f8f0f0",
+ "background-color": "#2d5a80",
+ "underline": false,
+ "bold": true
+ },
+ "disabled-title": {
+ "color": "#5394ec",
+ "background-color": "#353535",
+ "underline": false,
+ "bold": true
+ },
+ "subtitle": {
+ "color": "#f8f8f0",
+ "background-color": "#005f5f",
+ "underline": false,
+ "bold": false
+ },
+ "info": {
+ "color": "#aaa",
+ "background-color": "#0F1F2B",
+ "underline": false,
+ "bold": false
+ },
+ "hotkey": {
+ "color": "#2d5a80",
+ "background-color": "",
+ "underline": true,
+ "bold": true
+ },
+ "suggestion": {
+ "color": "#888",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ }
+ },
+ "log-level-styles": {
+ "trace": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "debug5": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "debug4": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "debug3": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "debug2": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "debug": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "info": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "stats": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "notice": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "warning": {
+ "color": "#b39554",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "error": {
+ "color": "#ef5350",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "critical": {
+ "color": "#ef5350",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "fatal": {
+ "color": "#ef5350",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "invalid": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ }
+ },
+ "highlights": {
+
+ }
+ },
+ "solarized-dark": {
+ "vars": {
+ "base0": "#839496",
+ "base00": "#657b83",
+ "base01": "#586e75",
+ "base02": "#073642",
+ "base03": "#002b36",
+ "base1": "#93a1a1",
+ "base2": "#eee8d5",
+ "base3": "#fdf6e3",
+ "black": "#002b36",
+ "blue": "#268bd2",
+ "cyan": "#2aa198",
+ "green": "#859900",
+ "magenta": "#d33682",
+ "orange": "#cb4b16",
+ "red": "#dc322f",
+ "semantic_highlight_color": "semantic()",
+ "violet": "#6c71c4",
+ "yellow": "#b58900"
+ },
+ "styles": {
+ "identifier": {
+ "color": "semantic()",
+ "background-color": "$base03",
+ "underline": false,
+ "bold": false
+ },
+ "text": {
+ "color": "$base0",
+ "background-color": "$base03",
+ "underline": false,
+ "bold": false
+ },
+ "selected-text": {
+ "color": "",
+ "background-color": "$cyan",
+ "underline": false,
+ "bold": false
+ },
+ "alt-text": {
+ "color": "",
+ "background-color": "$base02",
+ "underline": false,
+ "bold": false
+ },
+ "error": {
+ "color": "$red",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "ok": {
+ "color": "$green",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "info": {
+ "color": "$magenta",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "warning": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "hidden": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "cursor-line": {
+ "color": "$cyan",
+ "background-color": "$red",
+ "underline": true,
+ "bold": true
+ },
+ "disabled-cursor-line": {
+ "color": "$cyan",
+ "background-color": "#5f005f",
+ "underline": false,
+ "bold": false
+ },
+ "adjusted-time": {
+ "color": "$magenta",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "skewed-time": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "file-offset": {
+ "color": "#888",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "offset-time": {
+ "color": "$cyan",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "invalid-msg": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "popup": {
+ "color": "$base00",
+ "background-color": "$base3",
+ "underline": false,
+ "bold": false
+ },
+ "focused": {
+ "color": "$base03",
+ "background-color": "$base01",
+ "underline": false,
+ "bold": false
+ },
+ "disabled-focused": {
+ "color": "$base0",
+ "background-color": "$base02",
+ "underline": false,
+ "bold": false
+ },
+ "scrollbar": {
+ "color": "$base03",
+ "background-color": "$base0",
+ "underline": false,
+ "bold": false
+ },
+ "h1": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "h2": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "h3": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "h4": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "h5": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "h6": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "hr": {
+ "color": "#444",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "hyperlink": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "list-glyph": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "breadcrumb": {
+ "color": "#99a",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "table-border": {
+ "color": "#444",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "table-header": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "quote-border": {
+ "color": "#666",
+ "background-color": "#444",
+ "underline": false,
+ "bold": false
+ },
+ "quoted-text": {
+ "color": "",
+ "background-color": "#444",
+ "underline": false,
+ "bold": false
+ },
+ "footnote-border": {
+ "color": "$blue",
+ "background-color": "#444",
+ "underline": false,
+ "bold": false
+ },
+ "footnote-text": {
+ "color": "#eee",
+ "background-color": "#444",
+ "underline": false,
+ "bold": false
+ },
+ "snippet-border": {
+ "color": "$cyan",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "indent-guide": {
+ "color": "#444",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ }
+ },
+ "syntax-styles": {
+ "inline-code": {
+ "color": "$red",
+ "background-color": "#121212",
+ "underline": false,
+ "bold": false
+ },
+ "quoted-code": {
+ "color": "#eee",
+ "background-color": "#121212",
+ "underline": false,
+ "bold": false
+ },
+ "code-border": {
+ "color": "#444",
+ "background-color": "#121212",
+ "underline": false,
+ "bold": false
+ },
+ "keyword": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "string": {
+ "color": "$cyan",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "comment": {
+ "color": "$base01",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "doc-directive": {
+ "color": "$cyan",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "variable": {
+ "color": "$blue",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "symbol": {
+ "color": "$blue",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "null": {
+ "color": "#888",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "ascii-control": {
+ "color": "$green",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "non-ascii": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "number": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "type": {
+ "color": "$blue",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "function": {
+ "color": "$cyan",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "separators-references-accessors": {
+ "color": "$red",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "re-special": {
+ "color": "$cyan",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "re-repeat": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "diff-delete": {
+ "color": "$red",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "diff-add": {
+ "color": "$green",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "diff-section": {
+ "color": "$magenta",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "spectrogram-low": {
+ "color": "",
+ "background-color": "$green",
+ "underline": false,
+ "bold": false
+ },
+ "spectrogram-medium": {
+ "color": "",
+ "background-color": "$yellow",
+ "underline": false,
+ "bold": false
+ },
+ "spectrogram-high": {
+ "color": "",
+ "background-color": "$red",
+ "underline": false,
+ "bold": false
+ },
+ "file": {
+ "color": "$blue",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ }
+ },
+ "status-styles": {
+ "text": {
+ "color": "$base2",
+ "background-color": "$base01",
+ "underline": false,
+ "bold": false
+ },
+ "warn": {
+ "color": "$yellow",
+ "background-color": "$base01",
+ "underline": false,
+ "bold": false
+ },
+ "alert": {
+ "color": "$red",
+ "background-color": "$base01",
+ "underline": false,
+ "bold": false
+ },
+ "active": {
+ "color": "$green",
+ "background-color": "$base01",
+ "underline": false,
+ "bold": false
+ },
+ "inactive-alert": {
+ "color": "$red",
+ "background-color": "$base02",
+ "underline": false,
+ "bold": false
+ },
+ "inactive": {
+ "color": "$base1",
+ "background-color": "$base02",
+ "underline": false,
+ "bold": false
+ },
+ "title-hotkey": {
+ "color": "$black",
+ "background-color": "#5394ec",
+ "underline": true,
+ "bold": false
+ },
+ "title": {
+ "color": "$base02",
+ "background-color": "$blue",
+ "underline": false,
+ "bold": true
+ },
+ "disabled-title": {
+ "color": "$base01",
+ "background-color": "$base03",
+ "underline": false,
+ "bold": true
+ },
+ "subtitle": {
+ "color": "$base00",
+ "background-color": "$cyan",
+ "underline": false,
+ "bold": true
+ },
+ "info": {
+ "color": "$base1",
+ "background-color": "$base02",
+ "underline": false,
+ "bold": false
+ },
+ "hotkey": {
+ "color": "#fff",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "suggestion": {
+ "color": "$base02",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ }
+ },
+ "log-level-styles": {
+ "trace": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "debug5": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "debug4": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "debug3": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "debug2": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "debug": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "info": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "stats": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "notice": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "warning": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "error": {
+ "color": "$red",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "critical": {
+ "color": "$red",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "fatal": {
+ "color": "$red",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "invalid": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ }
+ },
+ "highlights": {
+
+ }
+ },
+ "solarized-light": {
+ "vars": {
+ "base0": "#839496",
+ "base00": "#657b83",
+ "base01": "#586e75",
+ "base02": "#073642",
+ "base03": "#002b36",
+ "base1": "#93a1a1",
+ "base2": "#ededb0",
+ "base3": "#fdf6e3",
+ "black": "#002b36",
+ "blue": "#268bd2",
+ "cyan": "#2aa198",
+ "green": "#859900",
+ "magenta": "#d33682",
+ "orange": "#cb4b16",
+ "red": "#dc322f",
+ "semantic_highlight_color": "semantic()",
+ "violet": "#6c71c4",
+ "yellow": "#b58900"
+ },
+ "styles": {
+ "identifier": {
+ "color": "semantic()",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "text": {
+ "color": "$base00",
+ "background-color": "$base3",
+ "underline": false,
+ "bold": false
+ },
+ "selected-text": {
+ "color": "",
+ "background-color": "$cyan",
+ "underline": false,
+ "bold": false
+ },
+ "alt-text": {
+ "color": "",
+ "background-color": "$base2",
+ "underline": false,
+ "bold": false
+ },
+ "error": {
+ "color": "$red",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "ok": {
+ "color": "$green",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "info": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "warning": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "hidden": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "cursor-line": {
+ "color": "$base0",
+ "background-color": "#fafa4a",
+ "underline": true,
+ "bold": true
+ },
+ "disabled-cursor-line": {
+ "color": "$cyan",
+ "background-color": "$yellow",
+ "underline": false,
+ "bold": false
+ },
+ "adjusted-time": {
+ "color": "$magenta",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "skewed-time": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "file-offset": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "offset-time": {
+ "color": "$cyan",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "invalid-msg": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "popup": {
+ "color": "$base00",
+ "background-color": "$base2",
+ "underline": false,
+ "bold": false
+ },
+ "focused": {
+ "color": "$base03",
+ "background-color": "$base01",
+ "underline": false,
+ "bold": false
+ },
+ "disabled-focused": {
+ "color": "$base0",
+ "background-color": "$base02",
+ "underline": false,
+ "bold": false
+ },
+ "scrollbar": {
+ "color": "$base3",
+ "background-color": "$base00",
+ "underline": false,
+ "bold": false
+ },
+ "h1": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "h2": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "h3": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "h4": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "h5": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "h6": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "hr": {
+ "color": "#444",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "hyperlink": {
+ "color": "",
+ "background-color": "",
+ "underline": true,
+ "bold": false
+ },
+ "list-glyph": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "breadcrumb": {
+ "color": "#99a",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "table-border": {
+ "color": "#444",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "table-header": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "quote-border": {
+ "color": "#666",
+ "background-color": "#444",
+ "underline": false,
+ "bold": false
+ },
+ "quoted-text": {
+ "color": "",
+ "background-color": "#444",
+ "underline": false,
+ "bold": false
+ },
+ "footnote-border": {
+ "color": "$blue",
+ "background-color": "#444",
+ "underline": false,
+ "bold": false
+ },
+ "footnote-text": {
+ "color": "#eee",
+ "background-color": "#444",
+ "underline": false,
+ "bold": false
+ },
+ "snippet-border": {
+ "color": "$cyan",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "indent-guide": {
+ "color": "$base1",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ }
+ },
+ "syntax-styles": {
+ "inline-code": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "quoted-code": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "code-border": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "keyword": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "string": {
+ "color": "$cyan",
+ "background-color": "",
+ "underline": false,
+ "bold": true
+ },
+ "comment": {
+ "color": "$base1",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "doc-directive": {
+ "color": "$blue",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "variable": {
+ "color": "$blue",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "symbol": {
+ "color": "$blue",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "null": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "ascii-control": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "non-ascii": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "number": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "type": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "function": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "separators-references-accessors": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "re-special": {
+ "color": "$cyan",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "re-repeat": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "diff-delete": {
+ "color": "$red",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "diff-add": {
+ "color": "$green",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "diff-section": {
+ "color": "$magenta",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "spectrogram-low": {
+ "color": "",
+ "background-color": "$green",
+ "underline": false,
+ "bold": false
+ },
+ "spectrogram-medium": {
+ "color": "",
+ "background-color": "$yellow",
+ "underline": false,
+ "bold": false
+ },
+ "spectrogram-high": {
+ "color": "",
+ "background-color": "$red",
+ "underline": false,
+ "bold": false
+ },
+ "file": {
+ "color": "$blue",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ }
+ },
+ "status-styles": {
+ "text": {
+ "color": "$base2",
+ "background-color": "$base03",
+ "underline": false,
+ "bold": false
+ },
+ "warn": {
+ "color": "$yellow",
+ "background-color": "$base03",
+ "underline": false,
+ "bold": false
+ },
+ "alert": {
+ "color": "$red",
+ "background-color": "$base03",
+ "underline": false,
+ "bold": false
+ },
+ "active": {
+ "color": "$green",
+ "background-color": "$base03",
+ "underline": false,
+ "bold": false
+ },
+ "inactive-alert": {
+ "color": "$red",
+ "background-color": "$base03",
+ "underline": false,
+ "bold": false
+ },
+ "inactive": {
+ "color": "$base1",
+ "background-color": "$base03",
+ "underline": false,
+ "bold": false
+ },
+ "title-hotkey": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "title": {
+ "color": "$base2",
+ "background-color": "$base00",
+ "underline": false,
+ "bold": true
+ },
+ "disabled-title": {
+ "color": "$base2",
+ "background-color": "$base02",
+ "underline": false,
+ "bold": true
+ },
+ "subtitle": {
+ "color": "$base2",
+ "background-color": "$base01",
+ "underline": false,
+ "bold": true
+ },
+ "info": {
+ "color": "$base1",
+ "background-color": "$base03",
+ "underline": false,
+ "bold": false
+ },
+ "hotkey": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "suggestion": {
+ "color": "$base1",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ }
+ },
+ "log-level-styles": {
+ "trace": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "debug5": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "debug4": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "debug3": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "debug2": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "debug": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "info": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "stats": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "notice": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "warning": {
+ "color": "$yellow",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "error": {
+ "color": "$red",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "critical": {
+ "color": "$red",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "fatal": {
+ "color": "$red",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ },
+ "invalid": {
+ "color": "",
+ "background-color": "",
+ "underline": false,
+ "bold": false
+ }
+ },
+ "highlights": {
+
+ }
+ }
+ },
+ "mouse": {
+ "mode": "disabled"
+ },
+ "movement": {
+ "mode": "cursor"
+ },
+ "keymap-defs": {
+ "de": {
+ "x21": {
+ "id": "",
+ "command": ":goto last 10 minutes after the hour",
+ "alt-msg": ""
+ },
+ "x22": {
+ "id": "",
+ "command": ":goto last 20 minutes after the hour",
+ "alt-msg": ""
+ },
+ "x24": {
+ "id": "",
+ "command": ":goto last 40 minutes after the hour",
+ "alt-msg": ""
+ },
+ "x25": {
+ "id": "",
+ "command": ":goto last 50 minutes after the hour",
+ "alt-msg": ""
+ },
+ "x26": {
+ "id": "",
+ "command": ":goto last hour",
+ "alt-msg": ""
+ },
+ "x31": {
+ "id": "",
+ "command": ":goto next 10 minutes after the hour",
+ "alt-msg": ""
+ },
+ "x32": {
+ "id": "",
+ "command": ":goto next 20 minutes after the hour",
+ "alt-msg": ""
+ },
+ "x33": {
+ "id": "",
+ "command": ":goto next 30 minutes after the hour",
+ "alt-msg": ""
+ },
+ "x34": {
+ "id": "",
+ "command": ":goto next 40 minutes after the hour",
+ "alt-msg": ""
+ },
+ "x35": {
+ "id": "",
+ "command": ":goto next 50 minutes after the hour",
+ "alt-msg": ""
+ },
+ "x36": {
+ "id": "",
+ "command": ":goto next hour",
+ "alt-msg": ""
+ },
+ "x37": {
+ "id": "",
+ "command": ":goto previous minute",
+ "alt-msg": ""
+ },
+ "x38": {
+ "id": "",
+ "command": ":goto next minute",
+ "alt-msg": ""
+ },
+ "xc2xa7": {
+ "id": "",
+ "command": ":goto last 30 minutes after the hour",
+ "alt-msg": ""
+ }
+ },
+ "default": {
+ "x04": {
+ "id": "",
+ "command": ";UPDATE lnav_views SET top = top + (height / 2), selection = (CASE movement WHEN 'top' THEN selection ELSE top + (height / 2) + (selection - top) END) WHERE name = (SELECT name FROM lnav_top_view)",
+ "alt-msg": ""
+ },
+ "x06": {
+ "id": "",
+ "command": ";UPDATE lnav_view_filters SET enabled = 1 - enabled WHERE view_name = (SELECT name FROM lnav_view_stack WHERE name in ('log', 'text') ORDER BY rowid DESC LIMIT 1)",
+ "alt-msg": ""
+ },
+ "x0c": {
+ "id": "",
+ "command": ":write-screen-to -",
+ "alt-msg": ""
+ },
+ "x12": {
+ "id": "",
+ "command": ":reset-session",
+ "alt-msg": ""
+ },
+ "x15": {
+ "id": "",
+ "command": ";UPDATE lnav_views SET top = max(0, top - (height / 2)), selection = (CASE movement WHEN 'top' THEN selection ELSE max(0, top - (height / 2) + (selection - top)) END) WHERE name = (SELECT name FROM lnav_top_view)",
+ "alt-msg": ""
+ },
+ "x17": {
+ "id": "",
+ "command": ";UPDATE lnav_views SET options = json_set(options, '$.word-wrap', CASE jget(options, '/word-wrap', 'none') WHEN 'none' THEN 'normal' ELSE 'none' END) WHERE name = (SELECT name FROM lnav_top_view)",
+ "alt-msg": ""
+ },
+ "x18": {
+ "id": "",
+ "command": ";UPDATE lnav_views SET movement = (CASE movement WHEN 'top' THEN 'cursor' ELSE 'top' END) WHERE name = (SELECT name FROM lnav_top_view)",
+ "alt-msg": ""
+ },
+ "x21": {
+ "id": "",
+ "command": ":goto last 10 minutes after the hour",
+ "alt-msg": ""
+ },
+ "x23": {
+ "id": "",
+ "command": ":goto last 30 minutes after the hour",
+ "alt-msg": ""
+ },
+ "x24": {
+ "id": "",
+ "command": ":goto last 40 minutes after the hour",
+ "alt-msg": ""
+ },
+ "x25": {
+ "id": "",
+ "command": ":goto last 50 minutes after the hour",
+ "alt-msg": ""
+ },
+ "x2f": {
+ "id": "",
+ "command": ":prompt search",
+ "alt-msg": ""
+ },
+ "x31": {
+ "id": "",
+ "command": ":goto next 10 minutes after the hour",
+ "alt-msg": ""
+ },
+ "x32": {
+ "id": "",
+ "command": ":goto next 20 minutes after the hour",
+ "alt-msg": ""
+ },
+ "x33": {
+ "id": "",
+ "command": ":goto next 30 minutes after the hour",
+ "alt-msg": ""
+ },
+ "x34": {
+ "id": "",
+ "command": ":goto next 40 minutes after the hour",
+ "alt-msg": ""
+ },
+ "x35": {
+ "id": "",
+ "command": ":goto next 50 minutes after the hour",
+ "alt-msg": ""
+ },
+ "x36": {
+ "id": "",
+ "command": ":goto next hour",
+ "alt-msg": ""
+ },
+ "x37": {
+ "id": "",
+ "command": ":goto previous minute",
+ "alt-msg": ""
+ },
+ "x38": {
+ "id": "",
+ "command": ":goto next minute",
+ "alt-msg": ""
+ },
+ "x3a": {
+ "id": "",
+ "command": ":prompt command",
+ "alt-msg": ""
+ },
+ "x3b": {
+ "id": "",
+ "command": ":prompt sql",
+ "alt-msg": ""
+ },
+ "x3d": {
+ "id": "",
+ "command": ";UPDATE lnav_views SET paused = 1 - paused",
+ "alt-msg": ""
+ },
+ "x3f": {
+ "id": "",
+ "command": ":toggle-view help",
+ "alt-msg": ""
+ },
+ "x40": {
+ "id": "",
+ "command": ":goto last 20 minutes after the hour",
+ "alt-msg": ""
+ },
+ "x45": {
+ "id": "",
+ "command": ":prev-mark error",
+ "alt-msg": "${keymap_def_alt_warning}"
+ },
+ "x4e": {
+ "id": "",
+ "command": ":prev-mark search",
+ "alt-msg": "${keymap_def_scroll_horiz}"
+ },
+ "x50": {
+ "id": "",
+ "command": ":toggle-view pretty",
+ "alt-msg": "${keymap_def_pop_view}"
+ },
+ "x51": {
+ "id": "",
+ "command": "|lnav-pop-view ${keyseq}",
+ "alt-msg": ""
+ },
+ "x54": {
+ "id": "",
+ "command": ";UPDATE lnav_views SET options = json_set(options, '$.row-time-offset', CASE jget(options, '/row-time-offset', 'hide') WHEN 'hide' THEN 'show' ELSE 'hide' END) WHERE name = (SELECT name FROM lnav_top_view)",
+ "alt-msg": "${keymap_def_time_offset}"
+ },
+ "x55": {
+ "id": "",
+ "command": ":prev-mark",
+ "alt-msg": ""
+ },
+ "x57": {
+ "id": "",
+ "command": ":prev-mark warning",
+ "alt-msg": "${keymap_def_alt_hour_boundary}"
+ },
+ "x58": {
+ "id": "",
+ "command": ":close",
+ "alt-msg": ""
+ },
+ "x5e": {
+ "id": "",
+ "command": ":goto last hour",
+ "alt-msg": ""
+ },
+ "x60": {
+ "id": "org.lnav.key.breadcrumb.focus",
+ "command": ":prompt breadcrumb",
+ "alt-msg": ""
+ },
+ "x63": {
+ "id": "",
+ "command": "|lnav-copy-text",
+ "alt-msg": "${keymap_def_clear}"
+ },
+ "x65": {
+ "id": "",
+ "command": ":next-mark error",
+ "alt-msg": "${keymap_def_alt_warning}"
+ },
+ "x67": {
+ "id": "",
+ "command": ":goto 0",
+ "alt-msg": ""
+ },
+ "x69": {
+ "id": "",
+ "command": ":toggle-view histogram",
+ "alt-msg": "${keymap_def_zoom}"
+ },
+ "x6d": {
+ "id": "",
+ "command": ":mark",
+ "alt-msg": "${keymap_def_next_user_mark}"
+ },
+ "x6e": {
+ "id": "",
+ "command": ":next-mark search",
+ "alt-msg": "${keymap_def_scroll_horiz}"
+ },
+ "x70": {
+ "id": "",
+ "command": ";UPDATE lnav_views SET options = json_set(options, '$.row-details', CASE jget(options, '/row-details', 'hide') WHEN 'hide' THEN 'show' ELSE 'hide' END) WHERE name = (SELECT name FROM lnav_top_view)",
+ "alt-msg": ""
+ },
+ "x71": {
+ "id": "",
+ "command": "|lnav-pop-view ${keyseq}",
+ "alt-msg": ""
+ },
+ "x75": {
+ "id": "",
+ "command": ":next-mark",
+ "alt-msg": "${keymap_def_next_mark}"
+ },
+ "x76": {
+ "id": "",
+ "command": ":toggle-view db",
+ "alt-msg": ""
+ },
+ "x77": {
+ "id": "",
+ "command": ":next-mark warning",
+ "alt-msg": "${keymap_def_alt_hour_boundary}"
+ },
+ "x78": {
+ "id": "",
+ "command": ";UPDATE lnav_views SET options = json_set(options, '$.hidden-fields', CASE jget(options, '/hidden-fields', 'hide') WHEN 'hide' THEN 'show' ELSE 'hide' END) WHERE name = (SELECT name FROM lnav_top_view)",
+ "alt-msg": ""
+ },
+ "x7b": {
+ "id": "",
+ "command": ":prev-section",
+ "alt-msg": "${keymap_def_next_location}"
+ },
+ "x7c": {
+ "id": "",
+ "command": ":prompt script",
+ "alt-msg": ""
+ },
+ "x7d": {
+ "id": "",
+ "command": ":next-section",
+ "alt-msg": "${keymap_def_prev_location}"
+ }
+ },
+ "fr": {
+ "x22": {
+ "id": "",
+ "command": ":goto next 30 minutes after the hour",
+ "alt-msg": ""
+ },
+ "x26": {
+ "id": "",
+ "command": ":goto next 10 minutes after the hour",
+ "alt-msg": ""
+ },
+ "x27": {
+ "id": "",
+ "command": ":goto next 40 minutes after the hour",
+ "alt-msg": ""
+ },
+ "x28": {
+ "id": "",
+ "command": ":goto next 50 minutes after the hour",
+ "alt-msg": ""
+ },
+ "x2d": {
+ "id": "",
+ "command": ":goto next hour",
+ "alt-msg": ""
+ },
+ "x31": {
+ "id": "",
+ "command": ":goto last 10 minutes after the hour",
+ "alt-msg": ""
+ },
+ "x32": {
+ "id": "",
+ "command": ":goto last 20 minutes after the hour",
+ "alt-msg": ""
+ },
+ "x33": {
+ "id": "",
+ "command": ":goto last 30 minutes after the hour",
+ "alt-msg": ""
+ },
+ "x34": {
+ "id": "",
+ "command": ":goto last 40 minutes after the hour",
+ "alt-msg": ""
+ },
+ "x35": {
+ "id": "",
+ "command": ":goto last 50 minutes after the hour",
+ "alt-msg": ""
+ },
+ "x36": {
+ "id": "",
+ "command": ":goto last hour",
+ "alt-msg": ""
+ },
+ "x37": {
+ "id": "",
+ "command": ":goto previous minute",
+ "alt-msg": ""
+ },
+ "xc3xa8": {
+ "id": "",
+ "command": ":goto next minute",
+ "alt-msg": ""
+ },
+ "xc3xa9": {
+ "id": "",
+ "command": ":goto next 20 minutes after the hour",
+ "alt-msg": ""
+ }
+ },
+ "sv": {
+ "x22": {
+ "id": "",
+ "command": ":goto last 20 minutes after the hour",
+ "alt-msg": ""
+ },
+ "x26": {
+ "id": "",
+ "command": ":goto last hour",
+ "alt-msg": ""
+ },
+ "x2b": {
+ "id": "",
+ "command": ";UPDATE lnav_views SET paused = 1 - paused",
+ "alt-msg": ""
+ },
+ "x3d": {
+ "id": "",
+ "command": ":goto last day",
+ "alt-msg": ""
+ },
+ "x60": {
+ "id": "",
+ "command": ":prompt breadcrumb",
+ "alt-msg": ""
+ },
+ "xc2xa4": {
+ "id": "",
+ "command": ":goto last 40 minutes after the hour",
+ "alt-msg": ""
+ },
+ "xc2xa7": {
+ "id": "org.lnav.key.breadcrumb.focus",
+ "command": ":prompt breadcrumb",
+ "alt-msg": ""
+ },
+ "xe2x82xac": {
+ "id": "",
+ "command": ":goto last 40 minutes after the hour",
+ "alt-msg": ""
+ }
+ },
+ "uk": {
+ "x22": {
+ "id": "",
+ "command": ":goto last 20 minutes after the hour",
+ "alt-msg": ""
+ },
+ "xc2xa3": {
+ "id": "",
+ "command": ":goto last 30 minutes after the hour",
+ "alt-msg": ""
+ }
+ },
+ "us": {
+ "x21": {
+ "id": "",
+ "command": ":goto last 10 minutes after the hour",
+ "alt-msg": ""
+ },
+ "x23": {
+ "id": "",
+ "command": ":goto last 30 minutes after the hour",
+ "alt-msg": ""
+ },
+ "x24": {
+ "id": "",
+ "command": ":goto last 40 minutes after the hour",
+ "alt-msg": ""
+ },
+ "x25": {
+ "id": "",
+ "command": ":goto last 50 minutes after the hour",
+ "alt-msg": ""
+ },
+ "x31": {
+ "id": "",
+ "command": ":goto next 10 minutes after the hour",
+ "alt-msg": ""
+ },
+ "x32": {
+ "id": "",
+ "command": ":goto next 20 minutes after the hour",
+ "alt-msg": ""
+ },
+ "x33": {
+ "id": "",
+ "command": ":goto next 30 minutes after the hour",
+ "alt-msg": ""
+ },
+ "x34": {
+ "id": "",
+ "command": ":goto next 40 minutes after the hour",
+ "alt-msg": ""
+ },
+ "x35": {
+ "id": "",
+ "command": ":goto next 50 minutes after the hour",
+ "alt-msg": ""
+ },
+ "x36": {
+ "id": "",
+ "command": ":goto next hour",
+ "alt-msg": ""
+ },
+ "x37": {
+ "id": "",
+ "command": ":goto previous minute",
+ "alt-msg": ""
+ },
+ "x38": {
+ "id": "",
+ "command": ":goto next minute",
+ "alt-msg": ""
+ },
+ "x40": {
+ "id": "",
+ "command": ":goto last 20 minutes after the hour",
+ "alt-msg": ""
+ },
+ "x5e": {
+ "id": "",
+ "command": ":goto last hour",
+ "alt-msg": ""
+ }
+ }
+ }
+ },
+ "log": {
+ "date-time": {
+ "convert-zoned-to-local": true
+ },
+ "watch-expressions": {
+
+ },
+ "annotations": {
+ "com.vmware.vmacore.backtrace": {
+ "description": "Convert a vmacore backtrace into human-readable text",
+ "condition": ":log_body LIKE '%[context]%[/context]%'",
+ "handler": "com.vmware.btresolver.py"
+ },
+ "org.lnav.test": {
+ "description": "test annotation",
+ "condition": ":c_ip IS NOT NULL AND $TEST_ANNO = '1'",
+ "handler": "anno-test.sh"
+ }
+ }
+ },
+ "global": {
+ "keymap_def_alt_hour_boundary": "Press ${ansi_bold}6${ansi_bold}/${ansi_bold}^${ansi_norm} to move to the next/previous hour boundary",
+ "keymap_def_alt_warning": "Press ${ansi_bold}w${ansi_norm}/${ansi_bold}W${ansi_norm} to move forward/backward through ${ansi_yellow}warning${ansi_norm} messages",
+ "keymap_def_clear": "Press ${ansi_bold}C${ansi_norm} to clear marked messages",
+ "keymap_def_db_view": "Press ${ansi_bold}v${ansi_norm}/${ansi_bold}V${ansi_norm} to switch to the SQL result view",
+ "keymap_def_hist_view": "Press ${ansi_bold}i${ansi_norm}/${ansi_bold}I${ansi_norm} to switch to the histogram view",
+ "keymap_def_next_mark": "Press ${ansi_bold}c${ansi_norm} to copy marked lines to the clipboard; press ${ansi_bold}C${ansi_norm} to clear marked lines",
+ "keymap_def_next_section": "Press ${ansi_bold}}${ansi_norm} to move to the next section in the view",
+ "keymap_def_next_user_mark": "Press ${ansi_bold}u${ansi_norm}/${ansi_bold}U${ansi_norm} to move forward/backward through user bookmarks",
+ "keymap_def_pop_view": "Press ${ansi_bold}q${ansi_norm} to return to the previous view",
+ "keymap_def_prev_section": "Press ${ansi_bold}{${ansi_norm} to move to the previous section in the view",
+ "keymap_def_scroll_horiz": "Press \\'${ansi_bold}>${ansi_norm}\\' or \\'${ansi_bold}<${ansi_norm}\\' to scroll horizontally to a search result",
+ "keymap_def_text_view": "Press ${ansi_bold}t${ansi_norm} to switch to the text view",
+ "keymap_def_time_offset": "Press ${ansi_bold}s${ansi_norm}/${ansi_bold}S${ansi_norm} to move forward/backward through slow downs",
+ "keymap_def_zoom": "Press ${ansi_bold}z${ansi_norm}/${ansi_bold}Z${ansi_norm} to zoom in/out"
+ }
+}
+
diff --git a/test/expected/test_cmds.sh_a0e6214b2a85c90d31aee12efde850441cca7eb3.err b/test/expected/test_cli.sh_108c6922cde063429f76abc3fdb8a81ad9a2f671.err
index e69de29..e69de29 100644
--- a/test/expected/test_cmds.sh_a0e6214b2a85c90d31aee12efde850441cca7eb3.err
+++ b/test/expected/test_cli.sh_108c6922cde063429f76abc3fdb8a81ad9a2f671.err
diff --git a/test/expected/test_cli.sh_108c6922cde063429f76abc3fdb8a81ad9a2f671.out b/test/expected/test_cli.sh_108c6922cde063429f76abc3fdb8a81ad9a2f671.out
new file mode 100644
index 0000000..45b983b
--- /dev/null
+++ b/test/expected/test_cli.sh_108c6922cde063429f76abc3fdb8a81ad9a2f671.out
@@ -0,0 +1 @@
+hi
diff --git a/test/expected/test_cli.sh_10c33e465ef7681c6b5519d05d557426b26cd43d.err b/test/expected/test_cli.sh_10c33e465ef7681c6b5519d05d557426b26cd43d.err
new file mode 100644
index 0000000..0f7ae0c
--- /dev/null
+++ b/test/expected/test_cli.sh_10c33e465ef7681c6b5519d05d557426b26cd43d.err
@@ -0,0 +1,4 @@
+ⓘ info: the following piper captures were found in:
+ piper-tmp/lnav-user-{uid}-work/piper
+ = note: The captures currently consume 33B of disk space. File sizes include associated metadata.
+ = help: You can reopen a capture by passing the piper URL to lnav
diff --git a/test/expected/test_cli.sh_10c33e465ef7681c6b5519d05d557426b26cd43d.out b/test/expected/test_cli.sh_10c33e465ef7681c6b5519d05d557426b26cd43d.out
new file mode 100644
index 0000000..26c7111
--- /dev/null
+++ b/test/expected/test_cli.sh_10c33e465ef7681c6b5519d05d557426b26cd43d.out
@@ -0,0 +1 @@
+ just now piper://p-e25e2eb68547f31e42da0818b4d0084f-000  33.0 B “[0] echo hi”
diff --git a/test/expected/test_cmds.sh_d7eebacdcf2cb194f25fa4ef97b7b5376b442467.out b/test/expected/test_cli.sh_3114508cf42fb2608ef77f4bc294a84885c97a79.err
index e69de29..e69de29 100644
--- a/test/expected/test_cmds.sh_d7eebacdcf2cb194f25fa4ef97b7b5376b442467.out
+++ b/test/expected/test_cli.sh_3114508cf42fb2608ef77f4bc294a84885c97a79.err
diff --git a/test/expected/test_cli.sh_3114508cf42fb2608ef77f4bc294a84885c97a79.out b/test/expected/test_cli.sh_3114508cf42fb2608ef77f4bc294a84885c97a79.out
new file mode 100644
index 0000000..45b983b
--- /dev/null
+++ b/test/expected/test_cli.sh_3114508cf42fb2608ef77f4bc294a84885c97a79.out
@@ -0,0 +1 @@
+hi
diff --git a/test/expected/test_config.sh_5105c29004e297521310ca0bd0fd560b01c2c549.out b/test/expected/test_cli.sh_4327033cfae0d4c170a38a3c4a570520bfabb493.err
index e69de29..e69de29 100644
--- a/test/expected/test_config.sh_5105c29004e297521310ca0bd0fd560b01c2c549.out
+++ b/test/expected/test_cli.sh_4327033cfae0d4c170a38a3c4a570520bfabb493.err
diff --git a/test/expected/test_cli.sh_4327033cfae0d4c170a38a3c4a570520bfabb493.out b/test/expected/test_cli.sh_4327033cfae0d4c170a38a3c4a570520bfabb493.out
new file mode 100644
index 0000000..45b983b
--- /dev/null
+++ b/test/expected/test_cli.sh_4327033cfae0d4c170a38a3c4a570520bfabb493.out
@@ -0,0 +1 @@
+hi
diff --git a/test/expected/test_format_loader.sh_3f1d6f35e8a9ae4fd3e91ffaa82a037b5a847ab7.out b/test/expected/test_cli.sh_76aa57821598962e59063a40c20171040c95a731.err
index e69de29..e69de29 100644
--- a/test/expected/test_format_loader.sh_3f1d6f35e8a9ae4fd3e91ffaa82a037b5a847ab7.out
+++ b/test/expected/test_cli.sh_76aa57821598962e59063a40c20171040c95a731.err
diff --git a/test/expected/test_cli.sh_76aa57821598962e59063a40c20171040c95a731.out b/test/expected/test_cli.sh_76aa57821598962e59063a40c20171040c95a731.out
new file mode 100644
index 0000000..f6223f2
--- /dev/null
+++ b/test/expected/test_cli.sh_76aa57821598962e59063a40c20171040c95a731.out
@@ -0,0 +1,9 @@
+[
+ {
+ "filepath": "[0] echo hi",
+ "descriptor": "org.lnav.piper.header",
+ "mimetype": "application/json",
+ "ctime": "2013-06-06T19:13:20.000",
+ "cwd": "{test_dir}"
+ }
+]
diff --git a/test/expected/test_cli.sh_a1a09f890f4604309d0a81bbbec8e50fb7d5e887.out b/test/expected/test_cli.sh_a1a09f890f4604309d0a81bbbec8e50fb7d5e887.out
deleted file mode 100644
index 1e0a993..0000000
--- a/test/expected/test_cli.sh_a1a09f890f4604309d0a81bbbec8e50fb7d5e887.out
+++ /dev/null
@@ -1,3 +0,0 @@
-2013-06-06T19:13:20.123 Hello, World!
-2013-06-06T19:13:20.123 Goodbye, World!
-2013-06-06T19:13:20.123 ---- END-OF-STDIN ----
diff --git a/test/expected/test_format_loader.sh_a47f2b090a5d8a226783835c7ff7d1c8821f11ed.out b/test/expected/test_cli.sh_af3ace7762b4cc150fcdcac86083b379bded7b32.err
index e69de29..e69de29 100644
--- a/test/expected/test_format_loader.sh_a47f2b090a5d8a226783835c7ff7d1c8821f11ed.out
+++ b/test/expected/test_cli.sh_af3ace7762b4cc150fcdcac86083b379bded7b32.err
diff --git a/test/expected/test_cli.sh_af3ace7762b4cc150fcdcac86083b379bded7b32.out b/test/expected/test_cli.sh_af3ace7762b4cc150fcdcac86083b379bded7b32.out
new file mode 100644
index 0000000..f6223f2
--- /dev/null
+++ b/test/expected/test_cli.sh_af3ace7762b4cc150fcdcac86083b379bded7b32.out
@@ -0,0 +1,9 @@
+[
+ {
+ "filepath": "[0] echo hi",
+ "descriptor": "org.lnav.piper.header",
+ "mimetype": "application/json",
+ "ctime": "2013-06-06T19:13:20.000",
+ "cwd": "{test_dir}"
+ }
+]
diff --git a/test/expected/test_json_format.sh_90a037c7d9d70ac4ca97158271ea242787313377.err b/test/expected/test_cli.sh_c69c835a3c43210225cf62564b3e9584c899af20.err
index e69de29..e69de29 100644
--- a/test/expected/test_json_format.sh_90a037c7d9d70ac4ca97158271ea242787313377.err
+++ b/test/expected/test_cli.sh_c69c835a3c43210225cf62564b3e9584c899af20.err
diff --git a/test/expected/test_cli.sh_c69c835a3c43210225cf62564b3e9584c899af20.out b/test/expected/test_cli.sh_c69c835a3c43210225cf62564b3e9584c899af20.out
new file mode 100644
index 0000000..7600bd0
--- /dev/null
+++ b/test/expected/test_cli.sh_c69c835a3c43210225cf62564b3e9584c899af20.out
@@ -0,0 +1,4 @@
+Feb 25 16:20:15 192.168.4.2 haproxy[7]: 95.216.197.33:56224 [25/Feb/2019:16:20:10.111] prod_http_in/sktst2: SSL handshake failure
+Feb 25 16:20:16 192.168.4.2 haproxy[7]: 87.183.41.77:50188 [25/Feb/2019:16:20:12.321] prod_http_in~ bk_ktest_sonst/nginx_sonst 0/0/1/0/1 200 5959 - - ---- 9/9/0/0/0 0/0 {Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0} {} "GET /media/pi_fontawesome/css/font-awesome.css?1550939694 HTTP/1.1"
+Feb 25 16:20:17 192.168.4.2 haproxy[7]: 87.183.41.77:50187 [25/Feb/2019:16:20:12.325] prod_http_in~ bk_ktest_sonst/nginx_sonst 0/0/1/0/1 200 1859 - - ---- 9/9/0/0/0 0/0 {Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0} {} "GET /media/pi_popup/1.1.0/magnific-popup.css?1550939704 HTTP/1.1"
+Feb 25 16:20:18 192.168.4.2 haproxy[7]: 87.183.41.77:50189 [25/Feb/2019:16:20:12.331] prod_http_in~ bk_ktest_sonst/nginx_sonst 0/0/1/0/1 200 2496 - - ---- 9/9/0/0/0 0/0 {Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0} {} "GET /media/core/core.css?1550939640 HTTP/1.1"
diff --git a/test/expected/test_json_format.sh_a6be47f1311ed92feaf303142fcb103deb80f456.err b/test/expected/test_cli.sh_cc06341dd560f927512e92c7c0985ed8b25827ae.err
index e69de29..e69de29 100644
--- a/test/expected/test_json_format.sh_a6be47f1311ed92feaf303142fcb103deb80f456.err
+++ b/test/expected/test_cli.sh_cc06341dd560f927512e92c7c0985ed8b25827ae.err
diff --git a/test/expected/test_cli.sh_cc06341dd560f927512e92c7c0985ed8b25827ae.out b/test/expected/test_cli.sh_cc06341dd560f927512e92c7c0985ed8b25827ae.out
new file mode 100644
index 0000000..22a87a3
--- /dev/null
+++ b/test/expected/test_cli.sh_cc06341dd560f927512e92c7c0985ed8b25827ae.out
@@ -0,0 +1,1187 @@
+/global/keymap_def_alt_hour_boundary -> default-keymap.json:5
+/global/keymap_def_alt_warning -> default-keymap.json:4
+/global/keymap_def_clear -> default-keymap.json:13
+/global/keymap_def_db_view -> default-keymap.json:8
+/global/keymap_def_hist_view -> default-keymap.json:9
+/global/keymap_def_next_mark -> default-keymap.json:16
+/global/keymap_def_next_section -> default-keymap.json:15
+/global/keymap_def_next_user_mark -> default-keymap.json:7
+/global/keymap_def_pop_view -> default-keymap.json:11
+/global/keymap_def_prev_section -> default-keymap.json:14
+/global/keymap_def_scroll_horiz -> default-keymap.json:6
+/global/keymap_def_text_view -> default-keymap.json:10
+/global/keymap_def_time_offset -> default-keymap.json:17
+/global/keymap_def_zoom -> default-keymap.json:12
+/log/annotations/com.vmware.vmacore.backtrace/condition -> root-config.json:23
+/log/annotations/com.vmware.vmacore.backtrace/description -> root-config.json:22
+/log/annotations/com.vmware.vmacore.backtrace/handler -> root-config.json:24
+/log/annotations/org.lnav.test/condition -> {test_dir}/configs/installed/anno-test.json:7
+/log/annotations/org.lnav.test/description -> {test_dir}/configs/installed/anno-test.json:6
+/log/annotations/org.lnav.test/handler -> {test_dir}/configs/installed/anno-test.json:8
+/log/date-time/convert-zoned-to-local -> root-config.json:18
+/tuning/archive-manager/cache-ttl -> root-config.json:31
+/tuning/archive-manager/min-free-space -> root-config.json:30
+/tuning/clipboard/impls/MacOS/find/read -> root-config.json:59
+/tuning/clipboard/impls/MacOS/find/write -> root-config.json:58
+/tuning/clipboard/impls/MacOS/general/read -> root-config.json:55
+/tuning/clipboard/impls/MacOS/general/write -> root-config.json:54
+/tuning/clipboard/impls/MacOS/test -> root-config.json:52
+/tuning/clipboard/impls/NeoVim/general/read -> root-config.json:87
+/tuning/clipboard/impls/NeoVim/general/write -> root-config.json:86
+/tuning/clipboard/impls/NeoVim/test -> root-config.json:84
+/tuning/clipboard/impls/Wayland/general/read -> root-config.json:66
+/tuning/clipboard/impls/Wayland/general/write -> root-config.json:65
+/tuning/clipboard/impls/Wayland/test -> root-config.json:63
+/tuning/clipboard/impls/Windows/general/write -> root-config.json:93
+/tuning/clipboard/impls/Windows/test -> root-config.json:91
+/tuning/clipboard/impls/X11-xclip/general/read -> root-config.json:73
+/tuning/clipboard/impls/X11-xclip/general/write -> root-config.json:72
+/tuning/clipboard/impls/X11-xclip/test -> root-config.json:70
+/tuning/clipboard/impls/tmux/general/read -> root-config.json:80
+/tuning/clipboard/impls/tmux/general/write -> root-config.json:79
+/tuning/clipboard/impls/tmux/test -> root-config.json:77
+/tuning/piper/max-size -> root-config.json:45
+/tuning/piper/rotations -> root-config.json:46
+/tuning/piper/ttl -> root-config.json:47
+/tuning/remote/ssh/command -> root-config.json:35
+/tuning/remote/ssh/config/BatchMode -> root-config.json:37
+/tuning/remote/ssh/config/ConnectTimeout -> root-config.json:38
+/tuning/remote/ssh/start-command -> root-config.json:40
+/tuning/remote/ssh/transfer-command -> root-config.json:41
+/tuning/url-scheme/docker-compose/handler -> root-config.json:103
+/tuning/url-scheme/docker/handler -> root-config.json:100
+/tuning/url-scheme/hw/handler -> {test_dir}/configs/installed/hw-url-handler.json:6
+/tuning/url-scheme/journald/handler -> root-config.json:106
+/tuning/url-scheme/piper/handler -> root-config.json:109
+/tuning/url-scheme/podman/handler -> root-config.json:112
+/ui/clock-format -> root-config.json:4
+/ui/default-colors -> root-config.json:6
+/ui/dim-text -> root-config.json:5
+/ui/keymap -> root-config.json:7
+/ui/keymap-defs/de/x21/command -> de-keymap.json:31
+/ui/keymap-defs/de/x22/command -> de-keymap.json:34
+/ui/keymap-defs/de/x24/command -> de-keymap.json:40
+/ui/keymap-defs/de/x25/command -> de-keymap.json:43
+/ui/keymap-defs/de/x26/command -> de-keymap.json:46
+/ui/keymap-defs/de/x31/command -> de-keymap.json:7
+/ui/keymap-defs/de/x32/command -> de-keymap.json:10
+/ui/keymap-defs/de/x33/command -> de-keymap.json:13
+/ui/keymap-defs/de/x34/command -> de-keymap.json:16
+/ui/keymap-defs/de/x35/command -> de-keymap.json:19
+/ui/keymap-defs/de/x36/command -> de-keymap.json:22
+/ui/keymap-defs/de/x37/command -> de-keymap.json:25
+/ui/keymap-defs/de/x38/command -> de-keymap.json:28
+/ui/keymap-defs/de/xc2xa7/command -> de-keymap.json:37
+/ui/keymap-defs/default/x04/command -> default-keymap.json:77
+/ui/keymap-defs/default/x06/command -> default-keymap.json:65
+/ui/keymap-defs/default/x0c/command -> default-keymap.json:68
+/ui/keymap-defs/default/x12/command -> default-keymap.json:71
+/ui/keymap-defs/default/x15/command -> default-keymap.json:80
+/ui/keymap-defs/default/x17/command -> default-keymap.json:146
+/ui/keymap-defs/default/x18/command -> default-keymap.json:74
+/ui/keymap-defs/default/x21/command -> default-keymap.json:47
+/ui/keymap-defs/default/x23/command -> default-keymap.json:53
+/ui/keymap-defs/default/x24/command -> default-keymap.json:56
+/ui/keymap-defs/default/x25/command -> default-keymap.json:59
+/ui/keymap-defs/default/x2f/command -> default-keymap.json:95
+/ui/keymap-defs/default/x31/command -> default-keymap.json:23
+/ui/keymap-defs/default/x32/command -> default-keymap.json:26
+/ui/keymap-defs/default/x33/command -> default-keymap.json:29
+/ui/keymap-defs/default/x34/command -> default-keymap.json:32
+/ui/keymap-defs/default/x35/command -> default-keymap.json:35
+/ui/keymap-defs/default/x36/command -> default-keymap.json:38
+/ui/keymap-defs/default/x37/command -> default-keymap.json:41
+/ui/keymap-defs/default/x38/command -> default-keymap.json:44
+/ui/keymap-defs/default/x3a/command -> default-keymap.json:89
+/ui/keymap-defs/default/x3b/command -> default-keymap.json:98
+/ui/keymap-defs/default/x3d/command -> default-keymap.json:83
+/ui/keymap-defs/default/x3f/command -> default-keymap.json:164
+/ui/keymap-defs/default/x40/command -> default-keymap.json:50
+/ui/keymap-defs/default/x45/alt-msg -> default-keymap.json:102
+/ui/keymap-defs/default/x45/command -> default-keymap.json:101
+/ui/keymap-defs/default/x4e/alt-msg -> default-keymap.json:129
+/ui/keymap-defs/default/x4e/command -> default-keymap.json:128
+/ui/keymap-defs/default/x50/alt-msg -> default-keymap.json:172
+/ui/keymap-defs/default/x50/command -> default-keymap.json:171
+/ui/keymap-defs/default/x51/command -> default-keymap.json:185
+/ui/keymap-defs/default/x54/alt-msg -> default-keymap.json:137
+/ui/keymap-defs/default/x54/command -> default-keymap.json:136
+/ui/keymap-defs/default/x55/command -> default-keymap.json:153
+/ui/keymap-defs/default/x57/alt-msg -> default-keymap.json:110
+/ui/keymap-defs/default/x57/command -> default-keymap.json:109
+/ui/keymap-defs/default/x58/command -> default-keymap.json:86
+/ui/keymap-defs/default/x5e/command -> default-keymap.json:62
+/ui/keymap-defs/default/x60/command -> default-keymap.json:176
+/ui/keymap-defs/default/x60/id -> default-keymap.json:175
+/ui/keymap-defs/default/x63/alt-msg -> default-keymap.json:118
+/ui/keymap-defs/default/x63/command -> default-keymap.json:117
+/ui/keymap-defs/default/x65/alt-msg -> default-keymap.json:106
+/ui/keymap-defs/default/x65/command -> default-keymap.json:105
+/ui/keymap-defs/default/x67/command -> default-keymap.json:121
+/ui/keymap-defs/default/x69/alt-msg -> default-keymap.json:168
+/ui/keymap-defs/default/x69/command -> default-keymap.json:167
+/ui/keymap-defs/default/x6d/alt-msg -> default-keymap.json:125
+/ui/keymap-defs/default/x6d/command -> default-keymap.json:124
+/ui/keymap-defs/default/x6e/alt-msg -> default-keymap.json:133
+/ui/keymap-defs/default/x6e/command -> default-keymap.json:132
+/ui/keymap-defs/default/x70/command -> default-keymap.json:140
+/ui/keymap-defs/default/x71/command -> default-keymap.json:182
+/ui/keymap-defs/default/x75/alt-msg -> default-keymap.json:150
+/ui/keymap-defs/default/x75/command -> default-keymap.json:149
+/ui/keymap-defs/default/x76/command -> default-keymap.json:179
+/ui/keymap-defs/default/x77/alt-msg -> default-keymap.json:114
+/ui/keymap-defs/default/x77/command -> default-keymap.json:113
+/ui/keymap-defs/default/x78/command -> default-keymap.json:143
+/ui/keymap-defs/default/x7b/alt-msg -> default-keymap.json:161
+/ui/keymap-defs/default/x7b/command -> default-keymap.json:160
+/ui/keymap-defs/default/x7c/command -> default-keymap.json:92
+/ui/keymap-defs/default/x7d/alt-msg -> default-keymap.json:157
+/ui/keymap-defs/default/x7d/command -> default-keymap.json:156
+/ui/keymap-defs/fr/x22/command -> fr-keymap.json:13
+/ui/keymap-defs/fr/x26/command -> fr-keymap.json:7
+/ui/keymap-defs/fr/x27/command -> fr-keymap.json:16
+/ui/keymap-defs/fr/x28/command -> fr-keymap.json:19
+/ui/keymap-defs/fr/x2d/command -> fr-keymap.json:22
+/ui/keymap-defs/fr/x31/command -> fr-keymap.json:28
+/ui/keymap-defs/fr/x32/command -> fr-keymap.json:31
+/ui/keymap-defs/fr/x33/command -> fr-keymap.json:34
+/ui/keymap-defs/fr/x34/command -> fr-keymap.json:37
+/ui/keymap-defs/fr/x35/command -> fr-keymap.json:40
+/ui/keymap-defs/fr/x36/command -> fr-keymap.json:43
+/ui/keymap-defs/fr/x37/command -> fr-keymap.json:46
+/ui/keymap-defs/fr/xc3xa8/command -> fr-keymap.json:25
+/ui/keymap-defs/fr/xc3xa9/command -> fr-keymap.json:10
+/ui/keymap-defs/sv/x22/command -> sv-keymap.json:7
+/ui/keymap-defs/sv/x26/command -> sv-keymap.json:16
+/ui/keymap-defs/sv/x2b/command -> sv-keymap.json:22
+/ui/keymap-defs/sv/x3d/command -> sv-keymap.json:19
+/ui/keymap-defs/sv/x60/command -> sv-keymap.json:26
+/ui/keymap-defs/sv/x60/id -> sv-keymap.json:25
+/ui/keymap-defs/sv/xc2xa4/command -> sv-keymap.json:10
+/ui/keymap-defs/sv/xc2xa7/command -> sv-keymap.json:30
+/ui/keymap-defs/sv/xc2xa7/id -> sv-keymap.json:29
+/ui/keymap-defs/sv/xe2x82xac/command -> sv-keymap.json:13
+/ui/keymap-defs/uk/x22/command -> uk-keymap.json:7
+/ui/keymap-defs/uk/xc2xa3/command -> uk-keymap.json:10
+/ui/keymap-defs/us/x21/command -> us-keymap.json:31
+/ui/keymap-defs/us/x23/command -> us-keymap.json:37
+/ui/keymap-defs/us/x24/command -> us-keymap.json:40
+/ui/keymap-defs/us/x25/command -> us-keymap.json:43
+/ui/keymap-defs/us/x31/command -> us-keymap.json:7
+/ui/keymap-defs/us/x32/command -> us-keymap.json:10
+/ui/keymap-defs/us/x33/command -> us-keymap.json:13
+/ui/keymap-defs/us/x34/command -> us-keymap.json:16
+/ui/keymap-defs/us/x35/command -> us-keymap.json:19
+/ui/keymap-defs/us/x36/command -> us-keymap.json:22
+/ui/keymap-defs/us/x37/command -> us-keymap.json:25
+/ui/keymap-defs/us/x38/command -> us-keymap.json:28
+/ui/keymap-defs/us/x40/command -> us-keymap.json:34
+/ui/keymap-defs/us/x5e/command -> us-keymap.json:46
+/ui/mouse/mode -> root-config.json:10
+/ui/movement/mode -> root-config.json:13
+/ui/theme -> root-config.json:8
+/ui/theme-defs/default/highlights/colors/pattern -> default-theme.json:295
+/ui/theme-defs/default/highlights/colors/style/color -> default-theme.json:297
+/ui/theme-defs/default/highlights/ipv4/pattern -> default-theme.json:301
+/ui/theme-defs/default/highlights/ipv4/style/color -> default-theme.json:303
+/ui/theme-defs/default/highlights/xml-decl/pattern -> default-theme.json:313
+/ui/theme-defs/default/highlights/xml-decl/style/color -> default-theme.json:315
+/ui/theme-defs/default/highlights/xml/pattern -> default-theme.json:307
+/ui/theme-defs/default/highlights/xml/style/color -> default-theme.json:309
+/ui/theme-defs/default/log-level-styles/critical/color -> default-theme.json:287
+/ui/theme-defs/default/log-level-styles/error/color -> default-theme.json:284
+/ui/theme-defs/default/log-level-styles/fatal/color -> default-theme.json:290
+/ui/theme-defs/default/log-level-styles/warning/color -> default-theme.json:281
+/ui/theme-defs/default/status-styles/active/background-color -> default-theme.json:254
+/ui/theme-defs/default/status-styles/active/color -> default-theme.json:253
+/ui/theme-defs/default/status-styles/alert/background-color -> default-theme.json:250
+/ui/theme-defs/default/status-styles/alert/color -> default-theme.json:249
+/ui/theme-defs/default/status-styles/disabled-title/background-color -> default-theme.json:233
+/ui/theme-defs/default/status-styles/disabled-title/bold -> default-theme.json:234
+/ui/theme-defs/default/status-styles/disabled-title/color -> default-theme.json:232
+/ui/theme-defs/default/status-styles/hotkey/bold -> default-theme.json:276
+/ui/theme-defs/default/status-styles/hotkey/color -> default-theme.json:274
+/ui/theme-defs/default/status-styles/hotkey/underline -> default-theme.json:275
+/ui/theme-defs/default/status-styles/inactive-alert/background-color -> default-theme.json:266
+/ui/theme-defs/default/status-styles/inactive-alert/color -> default-theme.json:265
+/ui/theme-defs/default/status-styles/inactive/background-color -> default-theme.json:262
+/ui/theme-defs/default/status-styles/inactive/color -> default-theme.json:261
+/ui/theme-defs/default/status-styles/info/background-color -> default-theme.json:258
+/ui/theme-defs/default/status-styles/info/color -> default-theme.json:257
+/ui/theme-defs/default/status-styles/subtitle/background-color -> default-theme.json:238
+/ui/theme-defs/default/status-styles/subtitle/color -> default-theme.json:237
+/ui/theme-defs/default/status-styles/text/background-color -> default-theme.json:242
+/ui/theme-defs/default/status-styles/text/color -> default-theme.json:241
+/ui/theme-defs/default/status-styles/title-hotkey/background-color -> default-theme.json:270
+/ui/theme-defs/default/status-styles/title-hotkey/color -> default-theme.json:269
+/ui/theme-defs/default/status-styles/title-hotkey/underline -> default-theme.json:271
+/ui/theme-defs/default/status-styles/title/background-color -> default-theme.json:228
+/ui/theme-defs/default/status-styles/title/bold -> default-theme.json:229
+/ui/theme-defs/default/status-styles/title/color -> default-theme.json:227
+/ui/theme-defs/default/status-styles/warn/background-color -> default-theme.json:246
+/ui/theme-defs/default/status-styles/warn/color -> default-theme.json:245
+/ui/theme-defs/default/styles/adjusted-time/color -> default-theme.json:55
+/ui/theme-defs/default/styles/alt-text/background-color -> default-theme.json:22
+/ui/theme-defs/default/styles/breadcrumb/bold -> default-theme.json:114
+/ui/theme-defs/default/styles/breadcrumb/color -> default-theme.json:113
+/ui/theme-defs/default/styles/cursor-line/background-color -> default-theme.json:46
+/ui/theme-defs/default/styles/cursor-line/bold -> default-theme.json:47
+/ui/theme-defs/default/styles/cursor-line/color -> default-theme.json:45
+/ui/theme-defs/default/styles/cursor-line/underline -> default-theme.json:48
+/ui/theme-defs/default/styles/disabled-cursor-line/background-color -> default-theme.json:52
+/ui/theme-defs/default/styles/disabled-cursor-line/color -> default-theme.json:51
+/ui/theme-defs/default/styles/disabled-focused/background-color -> default-theme.json:83
+/ui/theme-defs/default/styles/disabled-focused/color -> default-theme.json:82
+/ui/theme-defs/default/styles/error/bold -> default-theme.json:34
+/ui/theme-defs/default/styles/error/color -> default-theme.json:33
+/ui/theme-defs/default/styles/file-offset/color -> default-theme.json:64
+/ui/theme-defs/default/styles/focused/background-color -> default-theme.json:79
+/ui/theme-defs/default/styles/focused/color -> default-theme.json:78
+/ui/theme-defs/default/styles/footnote-border/background-color -> default-theme.json:131
+/ui/theme-defs/default/styles/footnote-border/color -> default-theme.json:130
+/ui/theme-defs/default/styles/footnote-text/background-color -> default-theme.json:135
+/ui/theme-defs/default/styles/footnote-text/color -> default-theme.json:134
+/ui/theme-defs/default/styles/h1/underline -> default-theme.json:86
+/ui/theme-defs/default/styles/h2/underline -> default-theme.json:89
+/ui/theme-defs/default/styles/h3/underline -> default-theme.json:92
+/ui/theme-defs/default/styles/h4/underline -> default-theme.json:95
+/ui/theme-defs/default/styles/h5/underline -> default-theme.json:98
+/ui/theme-defs/default/styles/h6/underline -> default-theme.json:101
+/ui/theme-defs/default/styles/hidden/bold -> default-theme.json:42
+/ui/theme-defs/default/styles/hidden/color -> default-theme.json:41
+/ui/theme-defs/default/styles/hr/color -> default-theme.json:104
+/ui/theme-defs/default/styles/hyperlink/underline -> default-theme.json:107
+/ui/theme-defs/default/styles/identifier/background-color -> default-theme.json:18
+/ui/theme-defs/default/styles/identifier/color -> default-theme.json:19
+/ui/theme-defs/default/styles/indent-guide/color -> default-theme.json:141
+/ui/theme-defs/default/styles/info/bold -> default-theme.json:30
+/ui/theme-defs/default/styles/info/color -> default-theme.json:29
+/ui/theme-defs/default/styles/invalid-msg/color -> default-theme.json:67
+/ui/theme-defs/default/styles/list-glyph/color -> default-theme.json:110
+/ui/theme-defs/default/styles/offset-time/color -> default-theme.json:61
+/ui/theme-defs/default/styles/ok/bold -> default-theme.json:26
+/ui/theme-defs/default/styles/ok/color -> default-theme.json:25
+/ui/theme-defs/default/styles/popup/background-color -> default-theme.json:71
+/ui/theme-defs/default/styles/popup/color -> default-theme.json:70
+/ui/theme-defs/default/styles/quote-border/background-color -> default-theme.json:124
+/ui/theme-defs/default/styles/quote-border/color -> default-theme.json:123
+/ui/theme-defs/default/styles/quoted-text/background-color -> default-theme.json:127
+/ui/theme-defs/default/styles/scrollbar/background-color -> default-theme.json:75
+/ui/theme-defs/default/styles/scrollbar/color -> default-theme.json:74
+/ui/theme-defs/default/styles/selected-text/background-color -> default-theme.json:15
+/ui/theme-defs/default/styles/skewed-time/color -> default-theme.json:58
+/ui/theme-defs/default/styles/snippet-border/color -> default-theme.json:138
+/ui/theme-defs/default/styles/table-border/color -> default-theme.json:117
+/ui/theme-defs/default/styles/table-header/bold -> default-theme.json:120
+/ui/theme-defs/default/styles/text/background-color -> default-theme.json:12
+/ui/theme-defs/default/styles/text/color -> default-theme.json:11
+/ui/theme-defs/default/styles/warning/bold -> default-theme.json:38
+/ui/theme-defs/default/styles/warning/color -> default-theme.json:37
+/ui/theme-defs/default/syntax-styles/ascii-control/color -> default-theme.json:207
+/ui/theme-defs/default/syntax-styles/code-border/background-color -> default-theme.json:155
+/ui/theme-defs/default/syntax-styles/code-border/color -> default-theme.json:154
+/ui/theme-defs/default/syntax-styles/comment/color -> default-theme.json:165
+/ui/theme-defs/default/syntax-styles/diff-add/color -> default-theme.json:186
+/ui/theme-defs/default/syntax-styles/diff-delete/color -> default-theme.json:183
+/ui/theme-defs/default/syntax-styles/diff-section/color -> default-theme.json:189
+/ui/theme-defs/default/syntax-styles/doc-directive/color -> default-theme.json:168
+/ui/theme-defs/default/syntax-styles/file/color -> default-theme.json:201
+/ui/theme-defs/default/syntax-styles/function/color -> default-theme.json:216
+/ui/theme-defs/default/syntax-styles/inline-code/background-color -> default-theme.json:147
+/ui/theme-defs/default/syntax-styles/inline-code/color -> default-theme.json:146
+/ui/theme-defs/default/syntax-styles/keyword/color -> default-theme.json:158
+/ui/theme-defs/default/syntax-styles/non-ascii/color -> default-theme.json:210
+/ui/theme-defs/default/syntax-styles/null/color -> default-theme.json:204
+/ui/theme-defs/default/syntax-styles/number/bold -> default-theme.json:213
+/ui/theme-defs/default/syntax-styles/quoted-code/background-color -> default-theme.json:151
+/ui/theme-defs/default/syntax-styles/quoted-code/color -> default-theme.json:150
+/ui/theme-defs/default/syntax-styles/re-repeat/color -> default-theme.json:180
+/ui/theme-defs/default/syntax-styles/re-special/color -> default-theme.json:177
+/ui/theme-defs/default/syntax-styles/separators-references-accessors/color -> default-theme.json:219
+/ui/theme-defs/default/syntax-styles/spectrogram-high/background-color -> default-theme.json:198
+/ui/theme-defs/default/syntax-styles/spectrogram-low/background-color -> default-theme.json:192
+/ui/theme-defs/default/syntax-styles/spectrogram-medium/background-color -> default-theme.json:195
+/ui/theme-defs/default/syntax-styles/string/bold -> default-theme.json:162
+/ui/theme-defs/default/syntax-styles/string/color -> default-theme.json:161
+/ui/theme-defs/default/syntax-styles/symbol/color -> default-theme.json:174
+/ui/theme-defs/default/syntax-styles/type/color -> default-theme.json:222
+/ui/theme-defs/default/syntax-styles/variable/color -> default-theme.json:171
+/ui/theme-defs/default/vars/semantic_highlight_color -> default-theme.json:7
+/ui/theme-defs/dracula/log-level-styles/critical/color -> dracula.json:303
+/ui/theme-defs/dracula/log-level-styles/error/color -> dracula.json:300
+/ui/theme-defs/dracula/log-level-styles/fatal/color -> dracula.json:306
+/ui/theme-defs/dracula/log-level-styles/warning/color -> dracula.json:297
+/ui/theme-defs/dracula/status-styles/active/background-color -> dracula.json:281
+/ui/theme-defs/dracula/status-styles/active/color -> dracula.json:280
+/ui/theme-defs/dracula/status-styles/alert/background-color -> dracula.json:277
+/ui/theme-defs/dracula/status-styles/alert/color -> dracula.json:276
+/ui/theme-defs/dracula/status-styles/disabled-title/background-color -> dracula.json:241
+/ui/theme-defs/dracula/status-styles/disabled-title/bold -> dracula.json:242
+/ui/theme-defs/dracula/status-styles/disabled-title/color -> dracula.json:240
+/ui/theme-defs/dracula/status-styles/hotkey/color -> dracula.json:264
+/ui/theme-defs/dracula/status-styles/hotkey/underline -> dracula.json:265
+/ui/theme-defs/dracula/status-styles/inactive-alert/background-color -> dracula.json:289
+/ui/theme-defs/dracula/status-styles/inactive-alert/color -> dracula.json:288
+/ui/theme-defs/dracula/status-styles/inactive/background-color -> dracula.json:285
+/ui/theme-defs/dracula/status-styles/inactive/color -> dracula.json:284
+/ui/theme-defs/dracula/status-styles/info/background-color -> dracula.json:256
+/ui/theme-defs/dracula/status-styles/info/color -> dracula.json:255
+/ui/theme-defs/dracula/status-styles/subtitle/background-color -> dracula.json:251
+/ui/theme-defs/dracula/status-styles/subtitle/bold -> dracula.json:252
+/ui/theme-defs/dracula/status-styles/subtitle/color -> dracula.json:250
+/ui/theme-defs/dracula/status-styles/suggestion/color -> dracula.json:292
+/ui/theme-defs/dracula/status-styles/text/background-color -> dracula.json:269
+/ui/theme-defs/dracula/status-styles/text/color -> dracula.json:268
+/ui/theme-defs/dracula/status-styles/title-hotkey/background-color -> dracula.json:260
+/ui/theme-defs/dracula/status-styles/title-hotkey/color -> dracula.json:259
+/ui/theme-defs/dracula/status-styles/title-hotkey/underline -> dracula.json:261
+/ui/theme-defs/dracula/status-styles/title/background-color -> dracula.json:246
+/ui/theme-defs/dracula/status-styles/title/bold -> dracula.json:247
+/ui/theme-defs/dracula/status-styles/title/color -> dracula.json:245
+/ui/theme-defs/dracula/status-styles/warn/background-color -> dracula.json:273
+/ui/theme-defs/dracula/status-styles/warn/color -> dracula.json:272
+/ui/theme-defs/dracula/styles/adjusted-time/color -> dracula.json:64
+/ui/theme-defs/dracula/styles/alt-text/background-color -> dracula.json:32
+/ui/theme-defs/dracula/styles/breadcrumb/bold -> dracula.json:125
+/ui/theme-defs/dracula/styles/breadcrumb/color -> dracula.json:124
+/ui/theme-defs/dracula/styles/cursor-line/background-color -> dracula.json:56
+/ui/theme-defs/dracula/styles/cursor-line/bold -> dracula.json:57
+/ui/theme-defs/dracula/styles/cursor-line/color -> dracula.json:55
+/ui/theme-defs/dracula/styles/disabled-cursor-line/background-color -> dracula.json:61
+/ui/theme-defs/dracula/styles/disabled-cursor-line/color -> dracula.json:60
+/ui/theme-defs/dracula/styles/disabled-focused/background-color -> dracula.json:84
+/ui/theme-defs/dracula/styles/disabled-focused/color -> dracula.json:83
+/ui/theme-defs/dracula/styles/error/bold -> dracula.json:44
+/ui/theme-defs/dracula/styles/error/color -> dracula.json:43
+/ui/theme-defs/dracula/styles/file-offset/color -> dracula.json:73
+/ui/theme-defs/dracula/styles/focused/background-color -> dracula.json:80
+/ui/theme-defs/dracula/styles/focused/color -> dracula.json:79
+/ui/theme-defs/dracula/styles/footnote-border/background-color -> dracula.json:143
+/ui/theme-defs/dracula/styles/footnote-border/color -> dracula.json:142
+/ui/theme-defs/dracula/styles/footnote-text/background-color -> dracula.json:147
+/ui/theme-defs/dracula/styles/footnote-text/color -> dracula.json:146
+/ui/theme-defs/dracula/styles/h1/bold -> dracula.json:96
+/ui/theme-defs/dracula/styles/h1/color -> dracula.json:95
+/ui/theme-defs/dracula/styles/h2/color -> dracula.json:99
+/ui/theme-defs/dracula/styles/h2/underline -> dracula.json:100
+/ui/theme-defs/dracula/styles/h3/color -> dracula.json:103
+/ui/theme-defs/dracula/styles/h4/underline -> dracula.json:106
+/ui/theme-defs/dracula/styles/h5/underline -> dracula.json:109
+/ui/theme-defs/dracula/styles/h6/underline -> dracula.json:112
+/ui/theme-defs/dracula/styles/hidden/bold -> dracula.json:52
+/ui/theme-defs/dracula/styles/hidden/color -> dracula.json:51
+/ui/theme-defs/dracula/styles/hr/color -> dracula.json:115
+/ui/theme-defs/dracula/styles/hyperlink/underline -> dracula.json:118
+/ui/theme-defs/dracula/styles/identifier/color -> dracula.json:22
+/ui/theme-defs/dracula/styles/indent-guide/color -> dracula.json:153
+/ui/theme-defs/dracula/styles/info/bold -> dracula.json:40
+/ui/theme-defs/dracula/styles/info/color -> dracula.json:39
+/ui/theme-defs/dracula/styles/invalid-msg/color -> dracula.json:76
+/ui/theme-defs/dracula/styles/list-glyph/color -> dracula.json:121
+/ui/theme-defs/dracula/styles/offset-time/color -> dracula.json:70
+/ui/theme-defs/dracula/styles/ok/bold -> dracula.json:36
+/ui/theme-defs/dracula/styles/ok/color -> dracula.json:35
+/ui/theme-defs/dracula/styles/popup/background-color -> dracula.json:88
+/ui/theme-defs/dracula/styles/popup/color -> dracula.json:87
+/ui/theme-defs/dracula/styles/quote-border/background-color -> dracula.json:135
+/ui/theme-defs/dracula/styles/quote-border/color -> dracula.json:134
+/ui/theme-defs/dracula/styles/quoted-text/background-color -> dracula.json:139
+/ui/theme-defs/dracula/styles/quoted-text/color -> dracula.json:138
+/ui/theme-defs/dracula/styles/scrollbar/background-color -> dracula.json:92
+/ui/theme-defs/dracula/styles/scrollbar/color -> dracula.json:91
+/ui/theme-defs/dracula/styles/selected-text/background-color -> dracula.json:29
+/ui/theme-defs/dracula/styles/skewed-time/color -> dracula.json:67
+/ui/theme-defs/dracula/styles/snippet-border/color -> dracula.json:150
+/ui/theme-defs/dracula/styles/table-border/color -> dracula.json:128
+/ui/theme-defs/dracula/styles/table-header/bold -> dracula.json:131
+/ui/theme-defs/dracula/styles/text/background-color -> dracula.json:26
+/ui/theme-defs/dracula/styles/text/color -> dracula.json:25
+/ui/theme-defs/dracula/styles/warning/bold -> dracula.json:48
+/ui/theme-defs/dracula/styles/warning/color -> dracula.json:47
+/ui/theme-defs/dracula/syntax-styles/ascii-control/color -> dracula.json:220
+/ui/theme-defs/dracula/syntax-styles/code-border/background-color -> dracula.json:167
+/ui/theme-defs/dracula/syntax-styles/code-border/color -> dracula.json:166
+/ui/theme-defs/dracula/syntax-styles/comment/color -> dracula.json:178
+/ui/theme-defs/dracula/syntax-styles/diff-add/color -> dracula.json:199
+/ui/theme-defs/dracula/syntax-styles/diff-delete/color -> dracula.json:196
+/ui/theme-defs/dracula/syntax-styles/diff-section/color -> dracula.json:202
+/ui/theme-defs/dracula/syntax-styles/doc-directive/color -> dracula.json:181
+/ui/theme-defs/dracula/syntax-styles/file/color -> dracula.json:214
+/ui/theme-defs/dracula/syntax-styles/function/color -> dracula.json:229
+/ui/theme-defs/dracula/syntax-styles/inline-code/background-color -> dracula.json:159
+/ui/theme-defs/dracula/syntax-styles/inline-code/color -> dracula.json:158
+/ui/theme-defs/dracula/syntax-styles/keyword/bold -> dracula.json:171
+/ui/theme-defs/dracula/syntax-styles/keyword/color -> dracula.json:170
+/ui/theme-defs/dracula/syntax-styles/non-ascii/color -> dracula.json:223
+/ui/theme-defs/dracula/syntax-styles/null/color -> dracula.json:217
+/ui/theme-defs/dracula/syntax-styles/number/bold -> dracula.json:226
+/ui/theme-defs/dracula/syntax-styles/quoted-code/background-color -> dracula.json:163
+/ui/theme-defs/dracula/syntax-styles/quoted-code/color -> dracula.json:162
+/ui/theme-defs/dracula/syntax-styles/re-repeat/color -> dracula.json:193
+/ui/theme-defs/dracula/syntax-styles/re-special/color -> dracula.json:190
+/ui/theme-defs/dracula/syntax-styles/separators-references-accessors/color -> dracula.json:232
+/ui/theme-defs/dracula/syntax-styles/spectrogram-high/background-color -> dracula.json:211
+/ui/theme-defs/dracula/syntax-styles/spectrogram-low/background-color -> dracula.json:205
+/ui/theme-defs/dracula/syntax-styles/spectrogram-medium/background-color -> dracula.json:208
+/ui/theme-defs/dracula/syntax-styles/string/bold -> dracula.json:175
+/ui/theme-defs/dracula/syntax-styles/string/color -> dracula.json:174
+/ui/theme-defs/dracula/syntax-styles/symbol/color -> dracula.json:187
+/ui/theme-defs/dracula/syntax-styles/type/color -> dracula.json:235
+/ui/theme-defs/dracula/syntax-styles/variable/color -> dracula.json:184
+/ui/theme-defs/dracula/vars/black -> dracula.json:7
+/ui/theme-defs/dracula/vars/blue -> dracula.json:11
+/ui/theme-defs/dracula/vars/cyan -> dracula.json:13
+/ui/theme-defs/dracula/vars/green -> dracula.json:9
+/ui/theme-defs/dracula/vars/magenta -> dracula.json:12
+/ui/theme-defs/dracula/vars/orange -> dracula.json:15
+/ui/theme-defs/dracula/vars/pink -> dracula.json:17
+/ui/theme-defs/dracula/vars/purple -> dracula.json:16
+/ui/theme-defs/dracula/vars/red -> dracula.json:8
+/ui/theme-defs/dracula/vars/semantic_highlight_color -> dracula.json:18
+/ui/theme-defs/dracula/vars/white -> dracula.json:14
+/ui/theme-defs/dracula/vars/yellow -> dracula.json:10
+/ui/theme-defs/eldar/log-level-styles/critical/color -> eldar.json:299
+/ui/theme-defs/eldar/log-level-styles/error/color -> eldar.json:296
+/ui/theme-defs/eldar/log-level-styles/fatal/color -> eldar.json:302
+/ui/theme-defs/eldar/log-level-styles/warning/color -> eldar.json:293
+/ui/theme-defs/eldar/status-styles/active/background-color -> eldar.json:264
+/ui/theme-defs/eldar/status-styles/active/color -> eldar.json:263
+/ui/theme-defs/eldar/status-styles/alert/background-color -> eldar.json:260
+/ui/theme-defs/eldar/status-styles/alert/color -> eldar.json:259
+/ui/theme-defs/eldar/status-styles/disabled-title/background-color -> eldar.json:237
+/ui/theme-defs/eldar/status-styles/disabled-title/bold -> eldar.json:238
+/ui/theme-defs/eldar/status-styles/disabled-title/color -> eldar.json:236
+/ui/theme-defs/eldar/status-styles/hotkey/color -> eldar.json:276
+/ui/theme-defs/eldar/status-styles/hotkey/underline -> eldar.json:277
+/ui/theme-defs/eldar/status-styles/inactive-alert/background-color -> eldar.json:285
+/ui/theme-defs/eldar/status-styles/inactive-alert/color -> eldar.json:284
+/ui/theme-defs/eldar/status-styles/inactive/background-color -> eldar.json:281
+/ui/theme-defs/eldar/status-styles/inactive/color -> eldar.json:280
+/ui/theme-defs/eldar/status-styles/info/background-color -> eldar.json:268
+/ui/theme-defs/eldar/status-styles/info/color -> eldar.json:267
+/ui/theme-defs/eldar/status-styles/subtitle/background-color -> eldar.json:247
+/ui/theme-defs/eldar/status-styles/subtitle/bold -> eldar.json:248
+/ui/theme-defs/eldar/status-styles/subtitle/color -> eldar.json:246
+/ui/theme-defs/eldar/status-styles/suggestion/color -> eldar.json:288
+/ui/theme-defs/eldar/status-styles/text/background-color -> eldar.json:252
+/ui/theme-defs/eldar/status-styles/text/color -> eldar.json:251
+/ui/theme-defs/eldar/status-styles/title-hotkey/background-color -> eldar.json:272
+/ui/theme-defs/eldar/status-styles/title-hotkey/color -> eldar.json:271
+/ui/theme-defs/eldar/status-styles/title-hotkey/underline -> eldar.json:273
+/ui/theme-defs/eldar/status-styles/title/background-color -> eldar.json:242
+/ui/theme-defs/eldar/status-styles/title/bold -> eldar.json:243
+/ui/theme-defs/eldar/status-styles/title/color -> eldar.json:241
+/ui/theme-defs/eldar/status-styles/warn/background-color -> eldar.json:256
+/ui/theme-defs/eldar/status-styles/warn/color -> eldar.json:255
+/ui/theme-defs/eldar/styles/adjusted-time/color -> eldar.json:64
+/ui/theme-defs/eldar/styles/alt-text/bold -> eldar.json:31
+/ui/theme-defs/eldar/styles/breadcrumb/bold -> eldar.json:123
+/ui/theme-defs/eldar/styles/breadcrumb/color -> eldar.json:122
+/ui/theme-defs/eldar/styles/cursor-line/background-color -> eldar.json:55
+/ui/theme-defs/eldar/styles/cursor-line/bold -> eldar.json:56
+/ui/theme-defs/eldar/styles/cursor-line/color -> eldar.json:54
+/ui/theme-defs/eldar/styles/cursor-line/underline -> eldar.json:57
+/ui/theme-defs/eldar/styles/disabled-cursor-line/background-color -> eldar.json:61
+/ui/theme-defs/eldar/styles/disabled-cursor-line/color -> eldar.json:60
+/ui/theme-defs/eldar/styles/disabled-focused/background-color -> eldar.json:84
+/ui/theme-defs/eldar/styles/disabled-focused/color -> eldar.json:83
+/ui/theme-defs/eldar/styles/error/bold -> eldar.json:43
+/ui/theme-defs/eldar/styles/error/color -> eldar.json:42
+/ui/theme-defs/eldar/styles/file-offset/color -> eldar.json:73
+/ui/theme-defs/eldar/styles/focused/background-color -> eldar.json:80
+/ui/theme-defs/eldar/styles/focused/color -> eldar.json:79
+/ui/theme-defs/eldar/styles/footnote-border/background-color -> eldar.json:140
+/ui/theme-defs/eldar/styles/footnote-border/color -> eldar.json:139
+/ui/theme-defs/eldar/styles/footnote-text/background-color -> eldar.json:144
+/ui/theme-defs/eldar/styles/footnote-text/color -> eldar.json:143
+/ui/theme-defs/eldar/styles/h1/underline -> eldar.json:95
+/ui/theme-defs/eldar/styles/h2/underline -> eldar.json:98
+/ui/theme-defs/eldar/styles/h3/underline -> eldar.json:101
+/ui/theme-defs/eldar/styles/h4/underline -> eldar.json:104
+/ui/theme-defs/eldar/styles/h5/underline -> eldar.json:107
+/ui/theme-defs/eldar/styles/h6/underline -> eldar.json:110
+/ui/theme-defs/eldar/styles/hidden/bold -> eldar.json:51
+/ui/theme-defs/eldar/styles/hidden/color -> eldar.json:50
+/ui/theme-defs/eldar/styles/hr/color -> eldar.json:113
+/ui/theme-defs/eldar/styles/hyperlink/underline -> eldar.json:116
+/ui/theme-defs/eldar/styles/identifier/background-color -> eldar.json:20
+/ui/theme-defs/eldar/styles/identifier/color -> eldar.json:21
+/ui/theme-defs/eldar/styles/indent-guide/color -> eldar.json:150
+/ui/theme-defs/eldar/styles/info/bold -> eldar.json:39
+/ui/theme-defs/eldar/styles/info/color -> eldar.json:38
+/ui/theme-defs/eldar/styles/invalid-msg/color -> eldar.json:76
+/ui/theme-defs/eldar/styles/list-glyph/color -> eldar.json:119
+/ui/theme-defs/eldar/styles/offset-time/color -> eldar.json:70
+/ui/theme-defs/eldar/styles/ok/bold -> eldar.json:35
+/ui/theme-defs/eldar/styles/ok/color -> eldar.json:34
+/ui/theme-defs/eldar/styles/popup/background-color -> eldar.json:88
+/ui/theme-defs/eldar/styles/popup/color -> eldar.json:87
+/ui/theme-defs/eldar/styles/quote-border/background-color -> eldar.json:133
+/ui/theme-defs/eldar/styles/quote-border/color -> eldar.json:132
+/ui/theme-defs/eldar/styles/quoted-text/background-color -> eldar.json:136
+/ui/theme-defs/eldar/styles/scrollbar/background-color -> eldar.json:92
+/ui/theme-defs/eldar/styles/scrollbar/color -> eldar.json:91
+/ui/theme-defs/eldar/styles/selected-text/background-color -> eldar.json:28
+/ui/theme-defs/eldar/styles/skewed-time/color -> eldar.json:67
+/ui/theme-defs/eldar/styles/snippet-border/color -> eldar.json:147
+/ui/theme-defs/eldar/styles/table-border/color -> eldar.json:126
+/ui/theme-defs/eldar/styles/table-header/bold -> eldar.json:129
+/ui/theme-defs/eldar/styles/text/background-color -> eldar.json:25
+/ui/theme-defs/eldar/styles/text/color -> eldar.json:24
+/ui/theme-defs/eldar/styles/warning/bold -> eldar.json:47
+/ui/theme-defs/eldar/styles/warning/color -> eldar.json:46
+/ui/theme-defs/eldar/syntax-styles/ascii-control/color -> eldar.json:219
+/ui/theme-defs/eldar/syntax-styles/code-border/background-color -> eldar.json:164
+/ui/theme-defs/eldar/syntax-styles/code-border/color -> eldar.json:163
+/ui/theme-defs/eldar/syntax-styles/comment/color -> eldar.json:174
+/ui/theme-defs/eldar/syntax-styles/diff-add/color -> eldar.json:198
+/ui/theme-defs/eldar/syntax-styles/diff-delete/color -> eldar.json:195
+/ui/theme-defs/eldar/syntax-styles/diff-section/color -> eldar.json:201
+/ui/theme-defs/eldar/syntax-styles/doc-directive/color -> eldar.json:177
+/ui/theme-defs/eldar/syntax-styles/file/color -> eldar.json:213
+/ui/theme-defs/eldar/syntax-styles/function/color -> eldar.json:225
+/ui/theme-defs/eldar/syntax-styles/inline-code/background-color -> eldar.json:156
+/ui/theme-defs/eldar/syntax-styles/inline-code/color -> eldar.json:155
+/ui/theme-defs/eldar/syntax-styles/keyword/color -> eldar.json:167
+/ui/theme-defs/eldar/syntax-styles/non-ascii/color -> eldar.json:222
+/ui/theme-defs/eldar/syntax-styles/null/color -> eldar.json:216
+/ui/theme-defs/eldar/syntax-styles/number/color -> eldar.json:180
+/ui/theme-defs/eldar/syntax-styles/quoted-code/background-color -> eldar.json:160
+/ui/theme-defs/eldar/syntax-styles/quoted-code/color -> eldar.json:159
+/ui/theme-defs/eldar/syntax-styles/re-repeat/color -> eldar.json:192
+/ui/theme-defs/eldar/syntax-styles/re-special/color -> eldar.json:189
+/ui/theme-defs/eldar/syntax-styles/separators-references-accessors/color -> eldar.json:228
+/ui/theme-defs/eldar/syntax-styles/spectrogram-high/background-color -> eldar.json:210
+/ui/theme-defs/eldar/syntax-styles/spectrogram-low/background-color -> eldar.json:204
+/ui/theme-defs/eldar/syntax-styles/spectrogram-medium/background-color -> eldar.json:207
+/ui/theme-defs/eldar/syntax-styles/string/bold -> eldar.json:171
+/ui/theme-defs/eldar/syntax-styles/string/color -> eldar.json:170
+/ui/theme-defs/eldar/syntax-styles/symbol/color -> eldar.json:186
+/ui/theme-defs/eldar/syntax-styles/type/color -> eldar.json:231
+/ui/theme-defs/eldar/syntax-styles/variable/color -> eldar.json:183
+/ui/theme-defs/eldar/vars/black -> eldar.json:7
+/ui/theme-defs/eldar/vars/blue -> eldar.json:11
+/ui/theme-defs/eldar/vars/cyan -> eldar.json:12
+/ui/theme-defs/eldar/vars/green -> eldar.json:13
+/ui/theme-defs/eldar/vars/magenta -> eldar.json:10
+/ui/theme-defs/eldar/vars/orange -> eldar.json:15
+/ui/theme-defs/eldar/vars/red -> eldar.json:9
+/ui/theme-defs/eldar/vars/semantic_highlight_color -> eldar.json:16
+/ui/theme-defs/eldar/vars/white -> eldar.json:14
+/ui/theme-defs/eldar/vars/yellow -> eldar.json:8
+/ui/theme-defs/grayscale/log-level-styles/critical/color -> grayscale.json:235
+/ui/theme-defs/grayscale/log-level-styles/error/color -> grayscale.json:232
+/ui/theme-defs/grayscale/log-level-styles/fatal/color -> grayscale.json:238
+/ui/theme-defs/grayscale/log-level-styles/warning/color -> grayscale.json:229
+/ui/theme-defs/grayscale/status-styles/active/background-color -> grayscale.json:209
+/ui/theme-defs/grayscale/status-styles/active/color -> grayscale.json:208
+/ui/theme-defs/grayscale/status-styles/alert/background-color -> grayscale.json:205
+/ui/theme-defs/grayscale/status-styles/alert/color -> grayscale.json:204
+/ui/theme-defs/grayscale/status-styles/disabled-title/background-color -> grayscale.json:173
+/ui/theme-defs/grayscale/status-styles/disabled-title/bold -> grayscale.json:174
+/ui/theme-defs/grayscale/status-styles/disabled-title/color -> grayscale.json:172
+/ui/theme-defs/grayscale/status-styles/hotkey/color -> grayscale.json:192
+/ui/theme-defs/grayscale/status-styles/hotkey/underline -> grayscale.json:193
+/ui/theme-defs/grayscale/status-styles/inactive-alert/background-color -> grayscale.json:221
+/ui/theme-defs/grayscale/status-styles/inactive-alert/color -> grayscale.json:220
+/ui/theme-defs/grayscale/status-styles/inactive/background-color -> grayscale.json:217
+/ui/theme-defs/grayscale/status-styles/inactive/color -> grayscale.json:216
+/ui/theme-defs/grayscale/status-styles/info/background-color -> grayscale.json:213
+/ui/theme-defs/grayscale/status-styles/info/color -> grayscale.json:212
+/ui/theme-defs/grayscale/status-styles/subtitle/background-color -> grayscale.json:183
+/ui/theme-defs/grayscale/status-styles/subtitle/bold -> grayscale.json:184
+/ui/theme-defs/grayscale/status-styles/subtitle/color -> grayscale.json:182
+/ui/theme-defs/grayscale/status-styles/suggestion/color -> grayscale.json:224
+/ui/theme-defs/grayscale/status-styles/text/background-color -> grayscale.json:197
+/ui/theme-defs/grayscale/status-styles/text/color -> grayscale.json:196
+/ui/theme-defs/grayscale/status-styles/title-hotkey/background-color -> grayscale.json:188
+/ui/theme-defs/grayscale/status-styles/title-hotkey/color -> grayscale.json:187
+/ui/theme-defs/grayscale/status-styles/title-hotkey/underline -> grayscale.json:189
+/ui/theme-defs/grayscale/status-styles/title/background-color -> grayscale.json:178
+/ui/theme-defs/grayscale/status-styles/title/bold -> grayscale.json:179
+/ui/theme-defs/grayscale/status-styles/title/color -> grayscale.json:177
+/ui/theme-defs/grayscale/status-styles/warn/background-color -> grayscale.json:201
+/ui/theme-defs/grayscale/status-styles/warn/color -> grayscale.json:200
+/ui/theme-defs/grayscale/styles/adjusted-time/color -> grayscale.json:61
+/ui/theme-defs/grayscale/styles/alt-text/bold -> grayscale.json:28
+/ui/theme-defs/grayscale/styles/breadcrumb/bold -> grayscale.json:120
+/ui/theme-defs/grayscale/styles/breadcrumb/color -> grayscale.json:119
+/ui/theme-defs/grayscale/styles/cursor-line/background-color -> grayscale.json:52
+/ui/theme-defs/grayscale/styles/cursor-line/bold -> grayscale.json:53
+/ui/theme-defs/grayscale/styles/cursor-line/color -> grayscale.json:51
+/ui/theme-defs/grayscale/styles/cursor-line/underline -> grayscale.json:54
+/ui/theme-defs/grayscale/styles/disabled-cursor-line/background-color -> grayscale.json:58
+/ui/theme-defs/grayscale/styles/disabled-cursor-line/color -> grayscale.json:57
+/ui/theme-defs/grayscale/styles/disabled-focused/background-color -> grayscale.json:81
+/ui/theme-defs/grayscale/styles/disabled-focused/color -> grayscale.json:80
+/ui/theme-defs/grayscale/styles/error/bold -> grayscale.json:40
+/ui/theme-defs/grayscale/styles/error/color -> grayscale.json:39
+/ui/theme-defs/grayscale/styles/file-offset/color -> grayscale.json:70
+/ui/theme-defs/grayscale/styles/focused/background-color -> grayscale.json:77
+/ui/theme-defs/grayscale/styles/focused/color -> grayscale.json:76
+/ui/theme-defs/grayscale/styles/footnote-border/background-color -> grayscale.json:137
+/ui/theme-defs/grayscale/styles/footnote-border/color -> grayscale.json:136
+/ui/theme-defs/grayscale/styles/footnote-text/background-color -> grayscale.json:141
+/ui/theme-defs/grayscale/styles/footnote-text/color -> grayscale.json:140
+/ui/theme-defs/grayscale/styles/h1/underline -> grayscale.json:92
+/ui/theme-defs/grayscale/styles/h2/underline -> grayscale.json:95
+/ui/theme-defs/grayscale/styles/h3/underline -> grayscale.json:98
+/ui/theme-defs/grayscale/styles/h4/underline -> grayscale.json:101
+/ui/theme-defs/grayscale/styles/h5/underline -> grayscale.json:104
+/ui/theme-defs/grayscale/styles/h6/underline -> grayscale.json:107
+/ui/theme-defs/grayscale/styles/hidden/bold -> grayscale.json:48
+/ui/theme-defs/grayscale/styles/hidden/color -> grayscale.json:47
+/ui/theme-defs/grayscale/styles/hr/color -> grayscale.json:110
+/ui/theme-defs/grayscale/styles/hyperlink/underline -> grayscale.json:113
+/ui/theme-defs/grayscale/styles/identifier/background-color -> grayscale.json:19
+/ui/theme-defs/grayscale/styles/identifier/bold -> grayscale.json:21
+/ui/theme-defs/grayscale/styles/identifier/color -> grayscale.json:20
+/ui/theme-defs/grayscale/styles/indent-guide/color -> grayscale.json:147
+/ui/theme-defs/grayscale/styles/info/bold -> grayscale.json:36
+/ui/theme-defs/grayscale/styles/info/color -> grayscale.json:35
+/ui/theme-defs/grayscale/styles/invalid-msg/color -> grayscale.json:73
+/ui/theme-defs/grayscale/styles/list-glyph/color -> grayscale.json:116
+/ui/theme-defs/grayscale/styles/offset-time/color -> grayscale.json:67
+/ui/theme-defs/grayscale/styles/ok/bold -> grayscale.json:32
+/ui/theme-defs/grayscale/styles/ok/color -> grayscale.json:31
+/ui/theme-defs/grayscale/styles/popup/background-color -> grayscale.json:85
+/ui/theme-defs/grayscale/styles/popup/color -> grayscale.json:84
+/ui/theme-defs/grayscale/styles/quote-border/background-color -> grayscale.json:130
+/ui/theme-defs/grayscale/styles/quote-border/color -> grayscale.json:129
+/ui/theme-defs/grayscale/styles/quoted-text/background-color -> grayscale.json:133
+/ui/theme-defs/grayscale/styles/scrollbar/background-color -> grayscale.json:89
+/ui/theme-defs/grayscale/styles/scrollbar/color -> grayscale.json:88
+/ui/theme-defs/grayscale/styles/skewed-time/color -> grayscale.json:64
+/ui/theme-defs/grayscale/styles/snippet-border/color -> grayscale.json:144
+/ui/theme-defs/grayscale/styles/table-border/color -> grayscale.json:123
+/ui/theme-defs/grayscale/styles/table-header/bold -> grayscale.json:126
+/ui/theme-defs/grayscale/styles/text/background-color -> grayscale.json:25
+/ui/theme-defs/grayscale/styles/text/color -> grayscale.json:24
+/ui/theme-defs/grayscale/styles/warning/bold -> grayscale.json:44
+/ui/theme-defs/grayscale/styles/warning/color -> grayscale.json:43
+/ui/theme-defs/grayscale/syntax-styles/ascii-control/color -> grayscale.json:161
+/ui/theme-defs/grayscale/syntax-styles/comment/color -> grayscale.json:152
+/ui/theme-defs/grayscale/syntax-styles/doc-directive/color -> grayscale.json:155
+/ui/theme-defs/grayscale/syntax-styles/non-ascii/color -> grayscale.json:164
+/ui/theme-defs/grayscale/syntax-styles/null/color -> grayscale.json:158
+/ui/theme-defs/grayscale/syntax-styles/number/bold -> grayscale.json:167
+/ui/theme-defs/grayscale/vars/black -> grayscale.json:7
+/ui/theme-defs/grayscale/vars/blue -> grayscale.json:11
+/ui/theme-defs/grayscale/vars/cyan -> grayscale.json:13
+/ui/theme-defs/grayscale/vars/green -> grayscale.json:9
+/ui/theme-defs/grayscale/vars/magenta -> grayscale.json:12
+/ui/theme-defs/grayscale/vars/plaintext -> grayscale.json:15
+/ui/theme-defs/grayscale/vars/red -> grayscale.json:8
+/ui/theme-defs/grayscale/vars/white -> grayscale.json:14
+/ui/theme-defs/grayscale/vars/yellow -> grayscale.json:10
+/ui/theme-defs/monocai/log-level-styles/critical/color -> monocai.json:300
+/ui/theme-defs/monocai/log-level-styles/error/color -> monocai.json:297
+/ui/theme-defs/monocai/log-level-styles/fatal/color -> monocai.json:303
+/ui/theme-defs/monocai/log-level-styles/warning/color -> monocai.json:294
+/ui/theme-defs/monocai/status-styles/active/background-color -> monocai.json:278
+/ui/theme-defs/monocai/status-styles/active/color -> monocai.json:277
+/ui/theme-defs/monocai/status-styles/alert/background-color -> monocai.json:274
+/ui/theme-defs/monocai/status-styles/alert/color -> monocai.json:273
+/ui/theme-defs/monocai/status-styles/disabled-title/background-color -> monocai.json:238
+/ui/theme-defs/monocai/status-styles/disabled-title/bold -> monocai.json:239
+/ui/theme-defs/monocai/status-styles/disabled-title/color -> monocai.json:237
+/ui/theme-defs/monocai/status-styles/hotkey/color -> monocai.json:261
+/ui/theme-defs/monocai/status-styles/hotkey/underline -> monocai.json:262
+/ui/theme-defs/monocai/status-styles/inactive-alert/background-color -> monocai.json:286
+/ui/theme-defs/monocai/status-styles/inactive-alert/color -> monocai.json:285
+/ui/theme-defs/monocai/status-styles/inactive/background-color -> monocai.json:282
+/ui/theme-defs/monocai/status-styles/inactive/color -> monocai.json:281
+/ui/theme-defs/monocai/status-styles/info/background-color -> monocai.json:253
+/ui/theme-defs/monocai/status-styles/info/color -> monocai.json:252
+/ui/theme-defs/monocai/status-styles/subtitle/background-color -> monocai.json:248
+/ui/theme-defs/monocai/status-styles/subtitle/bold -> monocai.json:249
+/ui/theme-defs/monocai/status-styles/subtitle/color -> monocai.json:247
+/ui/theme-defs/monocai/status-styles/suggestion/color -> monocai.json:289
+/ui/theme-defs/monocai/status-styles/text/background-color -> monocai.json:266
+/ui/theme-defs/monocai/status-styles/text/color -> monocai.json:265
+/ui/theme-defs/monocai/status-styles/title-hotkey/background-color -> monocai.json:257
+/ui/theme-defs/monocai/status-styles/title-hotkey/color -> monocai.json:256
+/ui/theme-defs/monocai/status-styles/title-hotkey/underline -> monocai.json:258
+/ui/theme-defs/monocai/status-styles/title/background-color -> monocai.json:243
+/ui/theme-defs/monocai/status-styles/title/bold -> monocai.json:244
+/ui/theme-defs/monocai/status-styles/title/color -> monocai.json:242
+/ui/theme-defs/monocai/status-styles/warn/background-color -> monocai.json:270
+/ui/theme-defs/monocai/status-styles/warn/color -> monocai.json:269
+/ui/theme-defs/monocai/styles/adjusted-time/color -> monocai.json:62
+/ui/theme-defs/monocai/styles/alt-text/background-color -> monocai.json:30
+/ui/theme-defs/monocai/styles/breadcrumb/bold -> monocai.json:123
+/ui/theme-defs/monocai/styles/breadcrumb/color -> monocai.json:122
+/ui/theme-defs/monocai/styles/cursor-line/background-color -> monocai.json:54
+/ui/theme-defs/monocai/styles/cursor-line/bold -> monocai.json:55
+/ui/theme-defs/monocai/styles/cursor-line/color -> monocai.json:53
+/ui/theme-defs/monocai/styles/disabled-cursor-line/background-color -> monocai.json:59
+/ui/theme-defs/monocai/styles/disabled-cursor-line/color -> monocai.json:58
+/ui/theme-defs/monocai/styles/disabled-focused/background-color -> monocai.json:82
+/ui/theme-defs/monocai/styles/disabled-focused/color -> monocai.json:81
+/ui/theme-defs/monocai/styles/error/bold -> monocai.json:42
+/ui/theme-defs/monocai/styles/error/color -> monocai.json:41
+/ui/theme-defs/monocai/styles/file-offset/color -> monocai.json:71
+/ui/theme-defs/monocai/styles/focused/background-color -> monocai.json:78
+/ui/theme-defs/monocai/styles/focused/color -> monocai.json:77
+/ui/theme-defs/monocai/styles/footnote-border/background-color -> monocai.json:140
+/ui/theme-defs/monocai/styles/footnote-border/color -> monocai.json:139
+/ui/theme-defs/monocai/styles/footnote-text/background-color -> monocai.json:144
+/ui/theme-defs/monocai/styles/footnote-text/color -> monocai.json:143
+/ui/theme-defs/monocai/styles/h1/bold -> monocai.json:94
+/ui/theme-defs/monocai/styles/h1/color -> monocai.json:93
+/ui/theme-defs/monocai/styles/h2/color -> monocai.json:97
+/ui/theme-defs/monocai/styles/h2/underline -> monocai.json:98
+/ui/theme-defs/monocai/styles/h3/color -> monocai.json:101
+/ui/theme-defs/monocai/styles/h4/underline -> monocai.json:104
+/ui/theme-defs/monocai/styles/h5/underline -> monocai.json:107
+/ui/theme-defs/monocai/styles/h6/underline -> monocai.json:110
+/ui/theme-defs/monocai/styles/hidden/bold -> monocai.json:50
+/ui/theme-defs/monocai/styles/hidden/color -> monocai.json:49
+/ui/theme-defs/monocai/styles/hr/color -> monocai.json:113
+/ui/theme-defs/monocai/styles/hyperlink/underline -> monocai.json:116
+/ui/theme-defs/monocai/styles/identifier/color -> monocai.json:20
+/ui/theme-defs/monocai/styles/indent-guide/color -> monocai.json:150
+/ui/theme-defs/monocai/styles/info/bold -> monocai.json:38
+/ui/theme-defs/monocai/styles/info/color -> monocai.json:37
+/ui/theme-defs/monocai/styles/invalid-msg/color -> monocai.json:74
+/ui/theme-defs/monocai/styles/list-glyph/color -> monocai.json:119
+/ui/theme-defs/monocai/styles/offset-time/color -> monocai.json:68
+/ui/theme-defs/monocai/styles/ok/bold -> monocai.json:34
+/ui/theme-defs/monocai/styles/ok/color -> monocai.json:33
+/ui/theme-defs/monocai/styles/popup/background-color -> monocai.json:86
+/ui/theme-defs/monocai/styles/popup/color -> monocai.json:85
+/ui/theme-defs/monocai/styles/quote-border/background-color -> monocai.json:133
+/ui/theme-defs/monocai/styles/quote-border/color -> monocai.json:132
+/ui/theme-defs/monocai/styles/quoted-text/background-color -> monocai.json:136
+/ui/theme-defs/monocai/styles/scrollbar/background-color -> monocai.json:90
+/ui/theme-defs/monocai/styles/scrollbar/color -> monocai.json:89
+/ui/theme-defs/monocai/styles/selected-text/background-color -> monocai.json:27
+/ui/theme-defs/monocai/styles/skewed-time/color -> monocai.json:65
+/ui/theme-defs/monocai/styles/snippet-border/color -> monocai.json:147
+/ui/theme-defs/monocai/styles/table-border/color -> monocai.json:126
+/ui/theme-defs/monocai/styles/table-header/bold -> monocai.json:129
+/ui/theme-defs/monocai/styles/text/background-color -> monocai.json:24
+/ui/theme-defs/monocai/styles/text/color -> monocai.json:23
+/ui/theme-defs/monocai/styles/warning/bold -> monocai.json:46
+/ui/theme-defs/monocai/styles/warning/color -> monocai.json:45
+/ui/theme-defs/monocai/syntax-styles/ascii-control/color -> monocai.json:217
+/ui/theme-defs/monocai/syntax-styles/code-border/background-color -> monocai.json:164
+/ui/theme-defs/monocai/syntax-styles/code-border/color -> monocai.json:163
+/ui/theme-defs/monocai/syntax-styles/comment/color -> monocai.json:175
+/ui/theme-defs/monocai/syntax-styles/diff-add/color -> monocai.json:196
+/ui/theme-defs/monocai/syntax-styles/diff-delete/color -> monocai.json:193
+/ui/theme-defs/monocai/syntax-styles/diff-section/color -> monocai.json:199
+/ui/theme-defs/monocai/syntax-styles/doc-directive/color -> monocai.json:178
+/ui/theme-defs/monocai/syntax-styles/file/color -> monocai.json:211
+/ui/theme-defs/monocai/syntax-styles/function/color -> monocai.json:226
+/ui/theme-defs/monocai/syntax-styles/inline-code/background-color -> monocai.json:156
+/ui/theme-defs/monocai/syntax-styles/inline-code/color -> monocai.json:155
+/ui/theme-defs/monocai/syntax-styles/keyword/bold -> monocai.json:168
+/ui/theme-defs/monocai/syntax-styles/keyword/color -> monocai.json:167
+/ui/theme-defs/monocai/syntax-styles/non-ascii/color -> monocai.json:220
+/ui/theme-defs/monocai/syntax-styles/null/color -> monocai.json:214
+/ui/theme-defs/monocai/syntax-styles/number/bold -> monocai.json:223
+/ui/theme-defs/monocai/syntax-styles/quoted-code/background-color -> monocai.json:160
+/ui/theme-defs/monocai/syntax-styles/quoted-code/color -> monocai.json:159
+/ui/theme-defs/monocai/syntax-styles/re-repeat/color -> monocai.json:190
+/ui/theme-defs/monocai/syntax-styles/re-special/color -> monocai.json:187
+/ui/theme-defs/monocai/syntax-styles/separators-references-accessors/color -> monocai.json:229
+/ui/theme-defs/monocai/syntax-styles/spectrogram-high/background-color -> monocai.json:208
+/ui/theme-defs/monocai/syntax-styles/spectrogram-low/background-color -> monocai.json:202
+/ui/theme-defs/monocai/syntax-styles/spectrogram-medium/background-color -> monocai.json:205
+/ui/theme-defs/monocai/syntax-styles/string/bold -> monocai.json:172
+/ui/theme-defs/monocai/syntax-styles/string/color -> monocai.json:171
+/ui/theme-defs/monocai/syntax-styles/symbol/color -> monocai.json:184
+/ui/theme-defs/monocai/syntax-styles/type/color -> monocai.json:232
+/ui/theme-defs/monocai/syntax-styles/variable/color -> monocai.json:181
+/ui/theme-defs/monocai/vars/black -> monocai.json:7
+/ui/theme-defs/monocai/vars/blue -> monocai.json:11
+/ui/theme-defs/monocai/vars/cyan -> monocai.json:13
+/ui/theme-defs/monocai/vars/green -> monocai.json:9
+/ui/theme-defs/monocai/vars/magenta -> monocai.json:12
+/ui/theme-defs/monocai/vars/orange -> monocai.json:15
+/ui/theme-defs/monocai/vars/red -> monocai.json:8
+/ui/theme-defs/monocai/vars/semantic_highlight_color -> monocai.json:16
+/ui/theme-defs/monocai/vars/white -> monocai.json:14
+/ui/theme-defs/monocai/vars/yellow -> monocai.json:10
+/ui/theme-defs/night-owl/log-level-styles/critical/color -> night-owl.json:299
+/ui/theme-defs/night-owl/log-level-styles/error/color -> night-owl.json:296
+/ui/theme-defs/night-owl/log-level-styles/fatal/color -> night-owl.json:302
+/ui/theme-defs/night-owl/log-level-styles/warning/color -> night-owl.json:293
+/ui/theme-defs/night-owl/status-styles/active/background-color -> night-owl.json:266
+/ui/theme-defs/night-owl/status-styles/active/color -> night-owl.json:265
+/ui/theme-defs/night-owl/status-styles/alert/background-color -> night-owl.json:262
+/ui/theme-defs/night-owl/status-styles/alert/color -> night-owl.json:261
+/ui/theme-defs/night-owl/status-styles/disabled-title/background-color -> night-owl.json:236
+/ui/theme-defs/night-owl/status-styles/disabled-title/bold -> night-owl.json:237
+/ui/theme-defs/night-owl/status-styles/disabled-title/color -> night-owl.json:235
+/ui/theme-defs/night-owl/status-styles/hotkey/bold -> night-owl.json:278
+/ui/theme-defs/night-owl/status-styles/hotkey/color -> night-owl.json:277
+/ui/theme-defs/night-owl/status-styles/hotkey/underline -> night-owl.json:279
+/ui/theme-defs/night-owl/status-styles/inactive-alert/background-color -> night-owl.json:274
+/ui/theme-defs/night-owl/status-styles/inactive-alert/color -> night-owl.json:273
+/ui/theme-defs/night-owl/status-styles/inactive/background-color -> night-owl.json:270
+/ui/theme-defs/night-owl/status-styles/inactive/color -> night-owl.json:269
+/ui/theme-defs/night-owl/status-styles/info/background-color -> night-owl.json:250
+/ui/theme-defs/night-owl/status-styles/info/color -> night-owl.json:249
+/ui/theme-defs/night-owl/status-styles/subtitle/background-color -> night-owl.json:246
+/ui/theme-defs/night-owl/status-styles/subtitle/color -> night-owl.json:245
+/ui/theme-defs/night-owl/status-styles/suggestion/color -> night-owl.json:288
+/ui/theme-defs/night-owl/status-styles/text/background-color -> night-owl.json:254
+/ui/theme-defs/night-owl/status-styles/text/color -> night-owl.json:253
+/ui/theme-defs/night-owl/status-styles/title-hotkey/background-color -> night-owl.json:283
+/ui/theme-defs/night-owl/status-styles/title-hotkey/bold -> night-owl.json:284
+/ui/theme-defs/night-owl/status-styles/title-hotkey/color -> night-owl.json:282
+/ui/theme-defs/night-owl/status-styles/title-hotkey/underline -> night-owl.json:285
+/ui/theme-defs/night-owl/status-styles/title/background-color -> night-owl.json:241
+/ui/theme-defs/night-owl/status-styles/title/bold -> night-owl.json:242
+/ui/theme-defs/night-owl/status-styles/title/color -> night-owl.json:240
+/ui/theme-defs/night-owl/status-styles/warn/background-color -> night-owl.json:258
+/ui/theme-defs/night-owl/status-styles/warn/color -> night-owl.json:257
+/ui/theme-defs/night-owl/styles/adjusted-time/color -> night-owl.json:63
+/ui/theme-defs/night-owl/styles/alt-text/background-color -> night-owl.json:30
+/ui/theme-defs/night-owl/styles/breadcrumb/bold -> night-owl.json:122
+/ui/theme-defs/night-owl/styles/breadcrumb/color -> night-owl.json:121
+/ui/theme-defs/night-owl/styles/cursor-line/background-color -> night-owl.json:54
+/ui/theme-defs/night-owl/styles/cursor-line/bold -> night-owl.json:55
+/ui/theme-defs/night-owl/styles/cursor-line/color -> night-owl.json:53
+/ui/theme-defs/night-owl/styles/cursor-line/underline -> night-owl.json:56
+/ui/theme-defs/night-owl/styles/disabled-cursor-line/background-color -> night-owl.json:60
+/ui/theme-defs/night-owl/styles/disabled-cursor-line/color -> night-owl.json:59
+/ui/theme-defs/night-owl/styles/disabled-focused/background-color -> night-owl.json:83
+/ui/theme-defs/night-owl/styles/disabled-focused/color -> night-owl.json:82
+/ui/theme-defs/night-owl/styles/error/bold -> night-owl.json:42
+/ui/theme-defs/night-owl/styles/error/color -> night-owl.json:41
+/ui/theme-defs/night-owl/styles/file-offset/color -> night-owl.json:72
+/ui/theme-defs/night-owl/styles/focused/background-color -> night-owl.json:79
+/ui/theme-defs/night-owl/styles/focused/color -> night-owl.json:78
+/ui/theme-defs/night-owl/styles/footnote-border/background-color -> night-owl.json:139
+/ui/theme-defs/night-owl/styles/footnote-border/color -> night-owl.json:138
+/ui/theme-defs/night-owl/styles/footnote-text/background-color -> night-owl.json:143
+/ui/theme-defs/night-owl/styles/footnote-text/color -> night-owl.json:142
+/ui/theme-defs/night-owl/styles/h1/underline -> night-owl.json:94
+/ui/theme-defs/night-owl/styles/h2/underline -> night-owl.json:97
+/ui/theme-defs/night-owl/styles/h3/underline -> night-owl.json:100
+/ui/theme-defs/night-owl/styles/h4/underline -> night-owl.json:103
+/ui/theme-defs/night-owl/styles/h5/underline -> night-owl.json:106
+/ui/theme-defs/night-owl/styles/h6/underline -> night-owl.json:109
+/ui/theme-defs/night-owl/styles/hidden/bold -> night-owl.json:50
+/ui/theme-defs/night-owl/styles/hidden/color -> night-owl.json:49
+/ui/theme-defs/night-owl/styles/hr/color -> night-owl.json:112
+/ui/theme-defs/night-owl/styles/hyperlink/underline -> night-owl.json:115
+/ui/theme-defs/night-owl/styles/identifier/background-color -> night-owl.json:19
+/ui/theme-defs/night-owl/styles/identifier/color -> night-owl.json:20
+/ui/theme-defs/night-owl/styles/indent-guide/color -> night-owl.json:149
+/ui/theme-defs/night-owl/styles/info/bold -> night-owl.json:38
+/ui/theme-defs/night-owl/styles/info/color -> night-owl.json:37
+/ui/theme-defs/night-owl/styles/invalid-msg/color -> night-owl.json:75
+/ui/theme-defs/night-owl/styles/list-glyph/color -> night-owl.json:118
+/ui/theme-defs/night-owl/styles/offset-time/color -> night-owl.json:69
+/ui/theme-defs/night-owl/styles/ok/bold -> night-owl.json:34
+/ui/theme-defs/night-owl/styles/ok/color -> night-owl.json:33
+/ui/theme-defs/night-owl/styles/popup/background-color -> night-owl.json:87
+/ui/theme-defs/night-owl/styles/popup/color -> night-owl.json:86
+/ui/theme-defs/night-owl/styles/quote-border/background-color -> night-owl.json:132
+/ui/theme-defs/night-owl/styles/quote-border/color -> night-owl.json:131
+/ui/theme-defs/night-owl/styles/quoted-text/background-color -> night-owl.json:135
+/ui/theme-defs/night-owl/styles/scrollbar/background-color -> night-owl.json:91
+/ui/theme-defs/night-owl/styles/scrollbar/color -> night-owl.json:90
+/ui/theme-defs/night-owl/styles/selected-text/background-color -> night-owl.json:27
+/ui/theme-defs/night-owl/styles/skewed-time/color -> night-owl.json:66
+/ui/theme-defs/night-owl/styles/snippet-border/color -> night-owl.json:146
+/ui/theme-defs/night-owl/styles/table-border/color -> night-owl.json:125
+/ui/theme-defs/night-owl/styles/table-header/bold -> night-owl.json:128
+/ui/theme-defs/night-owl/styles/text/background-color -> night-owl.json:24
+/ui/theme-defs/night-owl/styles/text/color -> night-owl.json:23
+/ui/theme-defs/night-owl/styles/warning/bold -> night-owl.json:46
+/ui/theme-defs/night-owl/styles/warning/color -> night-owl.json:45
+/ui/theme-defs/night-owl/syntax-styles/ascii-control/color -> night-owl.json:218
+/ui/theme-defs/night-owl/syntax-styles/code-border/background-color -> night-owl.json:163
+/ui/theme-defs/night-owl/syntax-styles/code-border/color -> night-owl.json:162
+/ui/theme-defs/night-owl/syntax-styles/comment/color -> night-owl.json:173
+/ui/theme-defs/night-owl/syntax-styles/diff-add/color -> night-owl.json:197
+/ui/theme-defs/night-owl/syntax-styles/diff-delete/color -> night-owl.json:194
+/ui/theme-defs/night-owl/syntax-styles/diff-section/color -> night-owl.json:200
+/ui/theme-defs/night-owl/syntax-styles/doc-directive/color -> night-owl.json:176
+/ui/theme-defs/night-owl/syntax-styles/file/color -> night-owl.json:212
+/ui/theme-defs/night-owl/syntax-styles/function/color -> night-owl.json:224
+/ui/theme-defs/night-owl/syntax-styles/inline-code/background-color -> night-owl.json:155
+/ui/theme-defs/night-owl/syntax-styles/inline-code/color -> night-owl.json:154
+/ui/theme-defs/night-owl/syntax-styles/keyword/color -> night-owl.json:166
+/ui/theme-defs/night-owl/syntax-styles/non-ascii/color -> night-owl.json:221
+/ui/theme-defs/night-owl/syntax-styles/null/color -> night-owl.json:215
+/ui/theme-defs/night-owl/syntax-styles/number/color -> night-owl.json:185
+/ui/theme-defs/night-owl/syntax-styles/quoted-code/background-color -> night-owl.json:159
+/ui/theme-defs/night-owl/syntax-styles/quoted-code/color -> night-owl.json:158
+/ui/theme-defs/night-owl/syntax-styles/re-repeat/color -> night-owl.json:191
+/ui/theme-defs/night-owl/syntax-styles/re-special/color -> night-owl.json:188
+/ui/theme-defs/night-owl/syntax-styles/separators-references-accessors/color -> night-owl.json:227
+/ui/theme-defs/night-owl/syntax-styles/spectrogram-high/background-color -> night-owl.json:209
+/ui/theme-defs/night-owl/syntax-styles/spectrogram-low/background-color -> night-owl.json:203
+/ui/theme-defs/night-owl/syntax-styles/spectrogram-medium/background-color -> night-owl.json:206
+/ui/theme-defs/night-owl/syntax-styles/string/bold -> night-owl.json:170
+/ui/theme-defs/night-owl/syntax-styles/string/color -> night-owl.json:169
+/ui/theme-defs/night-owl/syntax-styles/symbol/color -> night-owl.json:182
+/ui/theme-defs/night-owl/syntax-styles/type/color -> night-owl.json:230
+/ui/theme-defs/night-owl/syntax-styles/variable/color -> night-owl.json:179
+/ui/theme-defs/night-owl/vars/black -> night-owl.json:7
+/ui/theme-defs/night-owl/vars/blue -> night-owl.json:11
+/ui/theme-defs/night-owl/vars/cyan -> night-owl.json:13
+/ui/theme-defs/night-owl/vars/green -> night-owl.json:9
+/ui/theme-defs/night-owl/vars/magenta -> night-owl.json:12
+/ui/theme-defs/night-owl/vars/red -> night-owl.json:8
+/ui/theme-defs/night-owl/vars/semantic_highlight_color -> night-owl.json:15
+/ui/theme-defs/night-owl/vars/white -> night-owl.json:14
+/ui/theme-defs/night-owl/vars/yellow -> night-owl.json:10
+/ui/theme-defs/solarized-dark/log-level-styles/critical/color -> solarized-dark.json:307
+/ui/theme-defs/solarized-dark/log-level-styles/error/color -> solarized-dark.json:304
+/ui/theme-defs/solarized-dark/log-level-styles/fatal/color -> solarized-dark.json:310
+/ui/theme-defs/solarized-dark/log-level-styles/warning/color -> solarized-dark.json:301
+/ui/theme-defs/solarized-dark/status-styles/active/background-color -> solarized-dark.json:272
+/ui/theme-defs/solarized-dark/status-styles/active/color -> solarized-dark.json:271
+/ui/theme-defs/solarized-dark/status-styles/alert/background-color -> solarized-dark.json:268
+/ui/theme-defs/solarized-dark/status-styles/alert/color -> solarized-dark.json:267
+/ui/theme-defs/solarized-dark/status-styles/disabled-title/background-color -> solarized-dark.json:245
+/ui/theme-defs/solarized-dark/status-styles/disabled-title/bold -> solarized-dark.json:246
+/ui/theme-defs/solarized-dark/status-styles/disabled-title/color -> solarized-dark.json:244
+/ui/theme-defs/solarized-dark/status-styles/hotkey/color -> solarized-dark.json:284
+/ui/theme-defs/solarized-dark/status-styles/hotkey/underline -> solarized-dark.json:285
+/ui/theme-defs/solarized-dark/status-styles/inactive-alert/background-color -> solarized-dark.json:293
+/ui/theme-defs/solarized-dark/status-styles/inactive-alert/color -> solarized-dark.json:292
+/ui/theme-defs/solarized-dark/status-styles/inactive/background-color -> solarized-dark.json:289
+/ui/theme-defs/solarized-dark/status-styles/inactive/color -> solarized-dark.json:288
+/ui/theme-defs/solarized-dark/status-styles/info/background-color -> solarized-dark.json:276
+/ui/theme-defs/solarized-dark/status-styles/info/color -> solarized-dark.json:275
+/ui/theme-defs/solarized-dark/status-styles/subtitle/background-color -> solarized-dark.json:255
+/ui/theme-defs/solarized-dark/status-styles/subtitle/bold -> solarized-dark.json:256
+/ui/theme-defs/solarized-dark/status-styles/subtitle/color -> solarized-dark.json:254
+/ui/theme-defs/solarized-dark/status-styles/suggestion/color -> solarized-dark.json:296
+/ui/theme-defs/solarized-dark/status-styles/text/background-color -> solarized-dark.json:260
+/ui/theme-defs/solarized-dark/status-styles/text/color -> solarized-dark.json:259
+/ui/theme-defs/solarized-dark/status-styles/title-hotkey/background-color -> solarized-dark.json:280
+/ui/theme-defs/solarized-dark/status-styles/title-hotkey/color -> solarized-dark.json:279
+/ui/theme-defs/solarized-dark/status-styles/title-hotkey/underline -> solarized-dark.json:281
+/ui/theme-defs/solarized-dark/status-styles/title/background-color -> solarized-dark.json:250
+/ui/theme-defs/solarized-dark/status-styles/title/bold -> solarized-dark.json:251
+/ui/theme-defs/solarized-dark/status-styles/title/color -> solarized-dark.json:249
+/ui/theme-defs/solarized-dark/status-styles/warn/background-color -> solarized-dark.json:264
+/ui/theme-defs/solarized-dark/status-styles/warn/color -> solarized-dark.json:263
+/ui/theme-defs/solarized-dark/styles/adjusted-time/color -> solarized-dark.json:72
+/ui/theme-defs/solarized-dark/styles/alt-text/background-color -> solarized-dark.json:39
+/ui/theme-defs/solarized-dark/styles/breadcrumb/bold -> solarized-dark.json:131
+/ui/theme-defs/solarized-dark/styles/breadcrumb/color -> solarized-dark.json:130
+/ui/theme-defs/solarized-dark/styles/cursor-line/background-color -> solarized-dark.json:63
+/ui/theme-defs/solarized-dark/styles/cursor-line/bold -> solarized-dark.json:64
+/ui/theme-defs/solarized-dark/styles/cursor-line/color -> solarized-dark.json:62
+/ui/theme-defs/solarized-dark/styles/cursor-line/underline -> solarized-dark.json:65
+/ui/theme-defs/solarized-dark/styles/disabled-cursor-line/background-color -> solarized-dark.json:69
+/ui/theme-defs/solarized-dark/styles/disabled-cursor-line/color -> solarized-dark.json:68
+/ui/theme-defs/solarized-dark/styles/disabled-focused/background-color -> solarized-dark.json:100
+/ui/theme-defs/solarized-dark/styles/disabled-focused/color -> solarized-dark.json:99
+/ui/theme-defs/solarized-dark/styles/error/bold -> solarized-dark.json:51
+/ui/theme-defs/solarized-dark/styles/error/color -> solarized-dark.json:50
+/ui/theme-defs/solarized-dark/styles/file-offset/color -> solarized-dark.json:81
+/ui/theme-defs/solarized-dark/styles/focused/background-color -> solarized-dark.json:96
+/ui/theme-defs/solarized-dark/styles/focused/color -> solarized-dark.json:95
+/ui/theme-defs/solarized-dark/styles/footnote-border/background-color -> solarized-dark.json:148
+/ui/theme-defs/solarized-dark/styles/footnote-border/color -> solarized-dark.json:147
+/ui/theme-defs/solarized-dark/styles/footnote-text/background-color -> solarized-dark.json:152
+/ui/theme-defs/solarized-dark/styles/footnote-text/color -> solarized-dark.json:151
+/ui/theme-defs/solarized-dark/styles/h1/underline -> solarized-dark.json:103
+/ui/theme-defs/solarized-dark/styles/h2/underline -> solarized-dark.json:106
+/ui/theme-defs/solarized-dark/styles/h3/underline -> solarized-dark.json:109
+/ui/theme-defs/solarized-dark/styles/h4/underline -> solarized-dark.json:112
+/ui/theme-defs/solarized-dark/styles/h5/underline -> solarized-dark.json:115
+/ui/theme-defs/solarized-dark/styles/h6/underline -> solarized-dark.json:118
+/ui/theme-defs/solarized-dark/styles/hidden/bold -> solarized-dark.json:59
+/ui/theme-defs/solarized-dark/styles/hidden/color -> solarized-dark.json:58
+/ui/theme-defs/solarized-dark/styles/hr/color -> solarized-dark.json:121
+/ui/theme-defs/solarized-dark/styles/hyperlink/underline -> solarized-dark.json:124
+/ui/theme-defs/solarized-dark/styles/identifier/background-color -> solarized-dark.json:28
+/ui/theme-defs/solarized-dark/styles/identifier/color -> solarized-dark.json:29
+/ui/theme-defs/solarized-dark/styles/indent-guide/color -> solarized-dark.json:158
+/ui/theme-defs/solarized-dark/styles/info/bold -> solarized-dark.json:47
+/ui/theme-defs/solarized-dark/styles/info/color -> solarized-dark.json:46
+/ui/theme-defs/solarized-dark/styles/invalid-msg/color -> solarized-dark.json:84
+/ui/theme-defs/solarized-dark/styles/list-glyph/color -> solarized-dark.json:127
+/ui/theme-defs/solarized-dark/styles/offset-time/color -> solarized-dark.json:78
+/ui/theme-defs/solarized-dark/styles/ok/bold -> solarized-dark.json:43
+/ui/theme-defs/solarized-dark/styles/ok/color -> solarized-dark.json:42
+/ui/theme-defs/solarized-dark/styles/popup/background-color -> solarized-dark.json:88
+/ui/theme-defs/solarized-dark/styles/popup/color -> solarized-dark.json:87
+/ui/theme-defs/solarized-dark/styles/quote-border/background-color -> solarized-dark.json:141
+/ui/theme-defs/solarized-dark/styles/quote-border/color -> solarized-dark.json:140
+/ui/theme-defs/solarized-dark/styles/quoted-text/background-color -> solarized-dark.json:144
+/ui/theme-defs/solarized-dark/styles/scrollbar/background-color -> solarized-dark.json:92
+/ui/theme-defs/solarized-dark/styles/scrollbar/color -> solarized-dark.json:91
+/ui/theme-defs/solarized-dark/styles/selected-text/background-color -> solarized-dark.json:36
+/ui/theme-defs/solarized-dark/styles/skewed-time/color -> solarized-dark.json:75
+/ui/theme-defs/solarized-dark/styles/snippet-border/color -> solarized-dark.json:155
+/ui/theme-defs/solarized-dark/styles/table-border/color -> solarized-dark.json:134
+/ui/theme-defs/solarized-dark/styles/table-header/bold -> solarized-dark.json:137
+/ui/theme-defs/solarized-dark/styles/text/background-color -> solarized-dark.json:33
+/ui/theme-defs/solarized-dark/styles/text/color -> solarized-dark.json:32
+/ui/theme-defs/solarized-dark/styles/warning/bold -> solarized-dark.json:55
+/ui/theme-defs/solarized-dark/styles/warning/color -> solarized-dark.json:54
+/ui/theme-defs/solarized-dark/syntax-styles/ascii-control/color -> solarized-dark.json:224
+/ui/theme-defs/solarized-dark/syntax-styles/code-border/background-color -> solarized-dark.json:172
+/ui/theme-defs/solarized-dark/syntax-styles/code-border/color -> solarized-dark.json:171
+/ui/theme-defs/solarized-dark/syntax-styles/comment/color -> solarized-dark.json:182
+/ui/theme-defs/solarized-dark/syntax-styles/diff-add/color -> solarized-dark.json:203
+/ui/theme-defs/solarized-dark/syntax-styles/diff-delete/color -> solarized-dark.json:200
+/ui/theme-defs/solarized-dark/syntax-styles/diff-section/color -> solarized-dark.json:206
+/ui/theme-defs/solarized-dark/syntax-styles/doc-directive/color -> solarized-dark.json:185
+/ui/theme-defs/solarized-dark/syntax-styles/file/color -> solarized-dark.json:218
+/ui/theme-defs/solarized-dark/syntax-styles/function/color -> solarized-dark.json:233
+/ui/theme-defs/solarized-dark/syntax-styles/inline-code/background-color -> solarized-dark.json:164
+/ui/theme-defs/solarized-dark/syntax-styles/inline-code/color -> solarized-dark.json:163
+/ui/theme-defs/solarized-dark/syntax-styles/keyword/color -> solarized-dark.json:175
+/ui/theme-defs/solarized-dark/syntax-styles/non-ascii/color -> solarized-dark.json:227
+/ui/theme-defs/solarized-dark/syntax-styles/null/color -> solarized-dark.json:221
+/ui/theme-defs/solarized-dark/syntax-styles/number/bold -> solarized-dark.json:230
+/ui/theme-defs/solarized-dark/syntax-styles/quoted-code/background-color -> solarized-dark.json:168
+/ui/theme-defs/solarized-dark/syntax-styles/quoted-code/color -> solarized-dark.json:167
+/ui/theme-defs/solarized-dark/syntax-styles/re-repeat/color -> solarized-dark.json:197
+/ui/theme-defs/solarized-dark/syntax-styles/re-special/color -> solarized-dark.json:194
+/ui/theme-defs/solarized-dark/syntax-styles/separators-references-accessors/color -> solarized-dark.json:236
+/ui/theme-defs/solarized-dark/syntax-styles/spectrogram-high/background-color -> solarized-dark.json:215
+/ui/theme-defs/solarized-dark/syntax-styles/spectrogram-low/background-color -> solarized-dark.json:209
+/ui/theme-defs/solarized-dark/syntax-styles/spectrogram-medium/background-color -> solarized-dark.json:212
+/ui/theme-defs/solarized-dark/syntax-styles/string/bold -> solarized-dark.json:179
+/ui/theme-defs/solarized-dark/syntax-styles/string/color -> solarized-dark.json:178
+/ui/theme-defs/solarized-dark/syntax-styles/symbol/color -> solarized-dark.json:191
+/ui/theme-defs/solarized-dark/syntax-styles/type/color -> solarized-dark.json:239
+/ui/theme-defs/solarized-dark/syntax-styles/variable/color -> solarized-dark.json:188
+/ui/theme-defs/solarized-dark/vars/base0 -> solarized-dark.json:11
+/ui/theme-defs/solarized-dark/vars/base00 -> solarized-dark.json:10
+/ui/theme-defs/solarized-dark/vars/base01 -> solarized-dark.json:9
+/ui/theme-defs/solarized-dark/vars/base02 -> solarized-dark.json:8
+/ui/theme-defs/solarized-dark/vars/base03 -> solarized-dark.json:7
+/ui/theme-defs/solarized-dark/vars/base1 -> solarized-dark.json:12
+/ui/theme-defs/solarized-dark/vars/base2 -> solarized-dark.json:13
+/ui/theme-defs/solarized-dark/vars/base3 -> solarized-dark.json:14
+/ui/theme-defs/solarized-dark/vars/black -> solarized-dark.json:15
+/ui/theme-defs/solarized-dark/vars/blue -> solarized-dark.json:21
+/ui/theme-defs/solarized-dark/vars/cyan -> solarized-dark.json:22
+/ui/theme-defs/solarized-dark/vars/green -> solarized-dark.json:23
+/ui/theme-defs/solarized-dark/vars/magenta -> solarized-dark.json:19
+/ui/theme-defs/solarized-dark/vars/orange -> solarized-dark.json:17
+/ui/theme-defs/solarized-dark/vars/red -> solarized-dark.json:18
+/ui/theme-defs/solarized-dark/vars/semantic_highlight_color -> solarized-dark.json:24
+/ui/theme-defs/solarized-dark/vars/violet -> solarized-dark.json:20
+/ui/theme-defs/solarized-dark/vars/yellow -> solarized-dark.json:16
+/ui/theme-defs/solarized-light/log-level-styles/critical/color -> solarized-light.json:257
+/ui/theme-defs/solarized-light/log-level-styles/error/color -> solarized-light.json:254
+/ui/theme-defs/solarized-light/log-level-styles/fatal/color -> solarized-light.json:260
+/ui/theme-defs/solarized-light/log-level-styles/warning/color -> solarized-light.json:251
+/ui/theme-defs/solarized-light/status-styles/active/background-color -> solarized-light.json:231
+/ui/theme-defs/solarized-light/status-styles/active/color -> solarized-light.json:230
+/ui/theme-defs/solarized-light/status-styles/alert/background-color -> solarized-light.json:227
+/ui/theme-defs/solarized-light/status-styles/alert/color -> solarized-light.json:226
+/ui/theme-defs/solarized-light/status-styles/disabled-title/background-color -> solarized-light.json:209
+/ui/theme-defs/solarized-light/status-styles/disabled-title/bold -> solarized-light.json:210
+/ui/theme-defs/solarized-light/status-styles/disabled-title/color -> solarized-light.json:208
+/ui/theme-defs/solarized-light/status-styles/inactive-alert/background-color -> solarized-light.json:243
+/ui/theme-defs/solarized-light/status-styles/inactive-alert/color -> solarized-light.json:242
+/ui/theme-defs/solarized-light/status-styles/inactive/background-color -> solarized-light.json:239
+/ui/theme-defs/solarized-light/status-styles/inactive/color -> solarized-light.json:238
+/ui/theme-defs/solarized-light/status-styles/info/background-color -> solarized-light.json:235
+/ui/theme-defs/solarized-light/status-styles/info/color -> solarized-light.json:234
+/ui/theme-defs/solarized-light/status-styles/subtitle/background-color -> solarized-light.json:214
+/ui/theme-defs/solarized-light/status-styles/subtitle/bold -> solarized-light.json:215
+/ui/theme-defs/solarized-light/status-styles/subtitle/color -> solarized-light.json:213
+/ui/theme-defs/solarized-light/status-styles/suggestion/color -> solarized-light.json:246
+/ui/theme-defs/solarized-light/status-styles/text/background-color -> solarized-light.json:219
+/ui/theme-defs/solarized-light/status-styles/text/color -> solarized-light.json:218
+/ui/theme-defs/solarized-light/status-styles/title/background-color -> solarized-light.json:204
+/ui/theme-defs/solarized-light/status-styles/title/bold -> solarized-light.json:205
+/ui/theme-defs/solarized-light/status-styles/title/color -> solarized-light.json:203
+/ui/theme-defs/solarized-light/status-styles/warn/background-color -> solarized-light.json:223
+/ui/theme-defs/solarized-light/status-styles/warn/color -> solarized-light.json:222
+/ui/theme-defs/solarized-light/styles/adjusted-time/color -> solarized-light.json:67
+/ui/theme-defs/solarized-light/styles/alt-text/background-color -> solarized-light.json:38
+/ui/theme-defs/solarized-light/styles/breadcrumb/bold -> solarized-light.json:123
+/ui/theme-defs/solarized-light/styles/breadcrumb/color -> solarized-light.json:122
+/ui/theme-defs/solarized-light/styles/cursor-line/background-color -> solarized-light.json:58
+/ui/theme-defs/solarized-light/styles/cursor-line/bold -> solarized-light.json:59
+/ui/theme-defs/solarized-light/styles/cursor-line/color -> solarized-light.json:57
+/ui/theme-defs/solarized-light/styles/cursor-line/underline -> solarized-light.json:60
+/ui/theme-defs/solarized-light/styles/disabled-cursor-line/background-color -> solarized-light.json:64
+/ui/theme-defs/solarized-light/styles/disabled-cursor-line/color -> solarized-light.json:63
+/ui/theme-defs/solarized-light/styles/disabled-focused/background-color -> solarized-light.json:92
+/ui/theme-defs/solarized-light/styles/disabled-focused/color -> solarized-light.json:91
+/ui/theme-defs/solarized-light/styles/error/bold -> solarized-light.json:46
+/ui/theme-defs/solarized-light/styles/error/color -> solarized-light.json:45
+/ui/theme-defs/solarized-light/styles/focused/background-color -> solarized-light.json:88
+/ui/theme-defs/solarized-light/styles/focused/color -> solarized-light.json:87
+/ui/theme-defs/solarized-light/styles/footnote-border/background-color -> solarized-light.json:140
+/ui/theme-defs/solarized-light/styles/footnote-border/color -> solarized-light.json:139
+/ui/theme-defs/solarized-light/styles/footnote-text/background-color -> solarized-light.json:144
+/ui/theme-defs/solarized-light/styles/footnote-text/color -> solarized-light.json:143
+/ui/theme-defs/solarized-light/styles/h1/underline -> solarized-light.json:95
+/ui/theme-defs/solarized-light/styles/h2/underline -> solarized-light.json:98
+/ui/theme-defs/solarized-light/styles/h3/underline -> solarized-light.json:101
+/ui/theme-defs/solarized-light/styles/h4/underline -> solarized-light.json:104
+/ui/theme-defs/solarized-light/styles/h5/underline -> solarized-light.json:107
+/ui/theme-defs/solarized-light/styles/h6/underline -> solarized-light.json:110
+/ui/theme-defs/solarized-light/styles/hidden/bold -> solarized-light.json:54
+/ui/theme-defs/solarized-light/styles/hidden/color -> solarized-light.json:53
+/ui/theme-defs/solarized-light/styles/hr/color -> solarized-light.json:113
+/ui/theme-defs/solarized-light/styles/hyperlink/underline -> solarized-light.json:116
+/ui/theme-defs/solarized-light/styles/identifier/color -> solarized-light.json:28
+/ui/theme-defs/solarized-light/styles/indent-guide/color -> solarized-light.json:150
+/ui/theme-defs/solarized-light/styles/invalid-msg/color -> solarized-light.json:76
+/ui/theme-defs/solarized-light/styles/list-glyph/color -> solarized-light.json:119
+/ui/theme-defs/solarized-light/styles/offset-time/color -> solarized-light.json:73
+/ui/theme-defs/solarized-light/styles/ok/bold -> solarized-light.json:42
+/ui/theme-defs/solarized-light/styles/ok/color -> solarized-light.json:41
+/ui/theme-defs/solarized-light/styles/popup/background-color -> solarized-light.json:80
+/ui/theme-defs/solarized-light/styles/popup/color -> solarized-light.json:79
+/ui/theme-defs/solarized-light/styles/quote-border/background-color -> solarized-light.json:133
+/ui/theme-defs/solarized-light/styles/quote-border/color -> solarized-light.json:132
+/ui/theme-defs/solarized-light/styles/quoted-text/background-color -> solarized-light.json:136
+/ui/theme-defs/solarized-light/styles/scrollbar/background-color -> solarized-light.json:84
+/ui/theme-defs/solarized-light/styles/scrollbar/color -> solarized-light.json:83
+/ui/theme-defs/solarized-light/styles/selected-text/background-color -> solarized-light.json:35
+/ui/theme-defs/solarized-light/styles/skewed-time/color -> solarized-light.json:70
+/ui/theme-defs/solarized-light/styles/snippet-border/color -> solarized-light.json:147
+/ui/theme-defs/solarized-light/styles/table-border/color -> solarized-light.json:126
+/ui/theme-defs/solarized-light/styles/table-header/bold -> solarized-light.json:129
+/ui/theme-defs/solarized-light/styles/text/background-color -> solarized-light.json:32
+/ui/theme-defs/solarized-light/styles/text/color -> solarized-light.json:31
+/ui/theme-defs/solarized-light/styles/warning/bold -> solarized-light.json:50
+/ui/theme-defs/solarized-light/styles/warning/color -> solarized-light.json:49
+/ui/theme-defs/solarized-light/syntax-styles/comment/color -> solarized-light.json:162
+/ui/theme-defs/solarized-light/syntax-styles/diff-add/color -> solarized-light.json:183
+/ui/theme-defs/solarized-light/syntax-styles/diff-delete/color -> solarized-light.json:180
+/ui/theme-defs/solarized-light/syntax-styles/diff-section/color -> solarized-light.json:186
+/ui/theme-defs/solarized-light/syntax-styles/doc-directive/color -> solarized-light.json:165
+/ui/theme-defs/solarized-light/syntax-styles/file/color -> solarized-light.json:198
+/ui/theme-defs/solarized-light/syntax-styles/keyword/color -> solarized-light.json:155
+/ui/theme-defs/solarized-light/syntax-styles/re-repeat/color -> solarized-light.json:177
+/ui/theme-defs/solarized-light/syntax-styles/re-special/color -> solarized-light.json:174
+/ui/theme-defs/solarized-light/syntax-styles/spectrogram-high/background-color -> solarized-light.json:195
+/ui/theme-defs/solarized-light/syntax-styles/spectrogram-low/background-color -> solarized-light.json:189
+/ui/theme-defs/solarized-light/syntax-styles/spectrogram-medium/background-color -> solarized-light.json:192
+/ui/theme-defs/solarized-light/syntax-styles/string/bold -> solarized-light.json:159
+/ui/theme-defs/solarized-light/syntax-styles/string/color -> solarized-light.json:158
+/ui/theme-defs/solarized-light/syntax-styles/symbol/color -> solarized-light.json:171
+/ui/theme-defs/solarized-light/syntax-styles/variable/color -> solarized-light.json:168
+/ui/theme-defs/solarized-light/vars/base0 -> solarized-light.json:11
+/ui/theme-defs/solarized-light/vars/base00 -> solarized-light.json:10
+/ui/theme-defs/solarized-light/vars/base01 -> solarized-light.json:9
+/ui/theme-defs/solarized-light/vars/base02 -> solarized-light.json:8
+/ui/theme-defs/solarized-light/vars/base03 -> solarized-light.json:7
+/ui/theme-defs/solarized-light/vars/base1 -> solarized-light.json:12
+/ui/theme-defs/solarized-light/vars/base2 -> solarized-light.json:13
+/ui/theme-defs/solarized-light/vars/base3 -> solarized-light.json:14
+/ui/theme-defs/solarized-light/vars/black -> solarized-light.json:15
+/ui/theme-defs/solarized-light/vars/blue -> solarized-light.json:21
+/ui/theme-defs/solarized-light/vars/cyan -> solarized-light.json:22
+/ui/theme-defs/solarized-light/vars/green -> solarized-light.json:23
+/ui/theme-defs/solarized-light/vars/magenta -> solarized-light.json:19
+/ui/theme-defs/solarized-light/vars/orange -> solarized-light.json:17
+/ui/theme-defs/solarized-light/vars/red -> solarized-light.json:18
+/ui/theme-defs/solarized-light/vars/semantic_highlight_color -> solarized-light.json:24
+/ui/theme-defs/solarized-light/vars/violet -> solarized-light.json:20
+/ui/theme-defs/solarized-light/vars/yellow -> solarized-light.json:16
diff --git a/test/expected/test_cli.sh_f2e41555f1a5f40f54ce241207af602ed1503a2b.out b/test/expected/test_cli.sh_f2e41555f1a5f40f54ce241207af602ed1503a2b.out
index 751c83b..2db5d3c 100644
--- a/test/expected/test_cli.sh_f2e41555f1a5f40f54ce241207af602ed1503a2b.out
+++ b/test/expected/test_cli.sh_f2e41555f1a5f40f54ce241207af602ed1503a2b.out
@@ -1,2 +1,2 @@
-filepath lines 
-stdin   4 
+filepath  lines  
+stdin  4
diff --git a/test/expected/test_logfile.sh_1c6eee38f66356fcd9a9f0faedaea6dbcc901060.err b/test/expected/test_cli.sh_ff7da172f4350a2adb74b8764575823d798ed8b6.err
index e69de29..e69de29 100644
--- a/test/expected/test_logfile.sh_1c6eee38f66356fcd9a9f0faedaea6dbcc901060.err
+++ b/test/expected/test_cli.sh_ff7da172f4350a2adb74b8764575823d798ed8b6.err
diff --git a/test/expected/test_cli.sh_ff7da172f4350a2adb74b8764575823d798ed8b6.out b/test/expected/test_cli.sh_ff7da172f4350a2adb74b8764575823d798ed8b6.out
new file mode 100644
index 0000000..8d4265f
--- /dev/null
+++ b/test/expected/test_cli.sh_ff7da172f4350a2adb74b8764575823d798ed8b6.out
@@ -0,0 +1,2 @@
+Hello, World!
+Goodbye, World!
diff --git a/test/expected/test_cmds.sh_015ffe79a08f4c9f0cd1cb84c6afa4398f879fc7.err b/test/expected/test_cmds.sh_015ffe79a08f4c9f0cd1cb84c6afa4398f879fc7.err
new file mode 100644
index 0000000..23dd3a4
--- /dev/null
+++ b/test/expected/test_cmds.sh_015ffe79a08f4c9f0cd1cb84c6afa4398f879fc7.err
@@ -0,0 +1,7 @@
+✘ error: cannot access -- /bad-dir
+ reason: No such file or directory
+ --> command-option:1
+ | :cd /bad-dir 
+ = help: :cd dir
+ ══════════════════════════════════════════════════════════════════════
+ Change the current directory
diff --git a/test/expected/test_sessions.sh_8732dad5481be991ca7f291d9c5451c7b016cea7.err b/test/expected/test_cmds.sh_015ffe79a08f4c9f0cd1cb84c6afa4398f879fc7.out
index e69de29..e69de29 100644
--- a/test/expected/test_sessions.sh_8732dad5481be991ca7f291d9c5451c7b016cea7.err
+++ b/test/expected/test_cmds.sh_015ffe79a08f4c9f0cd1cb84c6afa4398f879fc7.out
diff --git a/test/expected/test_cmds.sh_017b495b95218b7c083951e2dba331cfec6e90be.err b/test/expected/test_cmds.sh_017b495b95218b7c083951e2dba331cfec6e90be.err
index 0d53487..8ecc11d 100644
--- a/test/expected/test_cmds.sh_017b495b95218b7c083951e2dba331cfec6e90be.err
+++ b/test/expected/test_cmds.sh_017b495b95218b7c083951e2dba331cfec6e90be.err
@@ -1,6 +1,6 @@
✘ error: no log files loaded
 --> command-option:2
 | :close 
- = help: :close
+ = help: :close path
══════════════════════════════════════════════════════════════════════
- Close the top file in the view
+ Close the given file(s) or the top file in the view
diff --git a/test/expected/test_cmds.sh_1d92c5bc12f5e7aaa6d84c5ed47f0b9f96e36c6a.out b/test/expected/test_cmds.sh_1d92c5bc12f5e7aaa6d84c5ed47f0b9f96e36c6a.out
index 6dfcc1c..227341b 100644
--- a/test/expected/test_cmds.sh_1d92c5bc12f5e7aaa6d84c5ed47f0b9f96e36c6a.out
+++ b/test/expected/test_cmds.sh_1d92c5bc12f5e7aaa6d84c5ed47f0b9f96e36c6a.out
@@ -1,14 +1,8 @@
[
{
"log_line": 0,
- "log_part": null,
"log_time": "2009-07-20 22:59:26.000",
- "log_idle_msecs": 0,
"log_level": "info",
- "log_mark": 0,
- "log_comment": null,
- "log_tags": null,
- "log_filters": null,
"c_ip": "192.168.202.254",
"cs_method": "GET",
"cs_referer": "-",
@@ -19,18 +13,19 @@
"cs_version": "HTTP/1.0",
"sc_bytes": 134,
"sc_status": 200,
- "cs_host": null
+ "cs_host": null,
+ "log_part": null,
+ "log_idle_msecs": 0,
+ "log_mark": 0,
+ "log_comment": null,
+ "log_tags": null,
+ "log_annotations": null,
+ "log_filters": null
},
{
"log_line": 1,
- "log_part": null,
"log_time": "2009-07-20 22:59:29.000",
- "log_idle_msecs": 3000,
"log_level": "error",
- "log_mark": 0,
- "log_comment": null,
- "log_tags": null,
- "log_filters": null,
"c_ip": "192.168.202.254",
"cs_method": "GET",
"cs_referer": "-",
@@ -41,18 +36,19 @@
"cs_version": "HTTP/1.0",
"sc_bytes": 46210,
"sc_status": 404,
- "cs_host": null
+ "cs_host": null,
+ "log_part": null,
+ "log_idle_msecs": 3000,
+ "log_mark": 0,
+ "log_comment": null,
+ "log_tags": null,
+ "log_annotations": null,
+ "log_filters": null
},
{
"log_line": 2,
- "log_part": null,
"log_time": "2009-07-20 22:59:29.000",
- "log_idle_msecs": 0,
"log_level": "info",
- "log_mark": 0,
- "log_comment": null,
- "log_tags": null,
- "log_filters": null,
"c_ip": "192.168.202.254",
"cs_method": "GET",
"cs_referer": "-",
@@ -63,6 +59,13 @@
"cs_version": "HTTP/1.0",
"sc_bytes": 78929,
"sc_status": 200,
- "cs_host": null
+ "cs_host": null,
+ "log_part": null,
+ "log_idle_msecs": 0,
+ "log_mark": 0,
+ "log_comment": null,
+ "log_tags": null,
+ "log_annotations": null,
+ "log_filters": null
}
]
diff --git a/test/expected/test_cmds.sh_2e123104cdd2087ac40731a0aa533ba6a87ea744.out b/test/expected/test_cmds.sh_2e123104cdd2087ac40731a0aa533ba6a87ea744.out
index 8c91cd9..156d9d9 100644
--- a/test/expected/test_cmds.sh_2e123104cdd2087ac40731a0aa533ba6a87ea744.out
+++ b/test/expected/test_cmds.sh_2e123104cdd2087ac40731a0aa533ba6a87ea744.out
@@ -1 +1 @@
-2009-07-20 22:59:30,221:ERROR:Goodbye, World!
+2009-07-20 22:59:30,221:ERROR:Goodbye, World!
diff --git a/test/expected/test_cmds.sh_2e67bdbbc9a14aa772b2a9f755ed8f8124708558.out b/test/expected/test_cmds.sh_2e67bdbbc9a14aa772b2a9f755ed8f8124708558.out
index 3f55261..ce0cfbf 100644
--- a/test/expected/test_cmds.sh_2e67bdbbc9a14aa772b2a9f755ed8f8124708558.out
+++ b/test/expected/test_cmds.sh_2e67bdbbc9a14aa772b2a9f755ed8f8124708558.out
@@ -1,23 +1,23 @@
-Apr 7 00:49:42 Tim-Abaft-iMac abashed[0]: Aberrant [abhorrent5701Aberrant]: Link up on en0, 1-Aboard, Full-abortive, Abounding flow-abrupt, Absent [796d,2301,0de1,0300,cde1,3800]
-Apr 7 05:49:53 Tim-Abaft-iMac.absorbing Abstracted[17212]: -[absurd abundant] absurd abusive accept: <acceptable:0x511f30
- accessible=<KSOmahaServer:0x510d80>
- url="https://achondroplasia.example.com/account/accurate2"
- achiever=0
- acid=1
- acidic=1
- acoustic=1
+Apr 7 00:49:42 Tim-Stacks-iMac aback[0]: Abaft [abandoned5701Abaft]: Link up on en0, 1-Gigabit, Full-duplex, Ablaze flow-control, Able [796d,2301,0de1,0300,cde1,3800]
+Apr 7 05:49:53 Tim-Stacks-iMac.local Aboard[17212]: -[aboriginal abortive] aboriginal abounding abrasive: <abrupt:0x511f30
+ absent=<KSOmahaServer:0x510d80>
+ url="https://achondroplasia.example.com/absorbing/abstracted2"
+ absurd=0
+ abundant=1
+ abusive=1
+ accept=1
body=
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
- <o:gupdate xmlns:o="http://acinetobacter-infections.example.com/accurate2/acrid" protocol="2.0" version="Act-1.2.0.7709" ismachine="1" requestid="{1ca0a968-cbe9-e75b-d00b-4859609878ea}">
- <o:os platform="mac" version="activity" sp="10.10.2_x86_64h"></o:os>
- <o:app appid="com.actually.Ad hoc" version="1.2.0.7709" lang="en-us" installage="180" brand="GGLG">
+ <o:gupdate xmlns:o="http://acinetobacter-infections.example.com/abstracted2/accessible" protocol="2.0" version="KeystoneDaemon-1.2.0.7709" ismachine="1" requestid="{1ca0a968-cbe9-e75b-d00b-4859609878ea}">
+ <o:os platform="mac" version="account" sp="10.10.2_x86_64h"></o:os>
+ <o:app appid="com.achiever.Acid" version="1.2.0.7709" lang="en-us" installage="180" brand="GGLG">
<o:ping r="1" a="1"></o:ping>
<o:updatecheck></o:updatecheck>
</o:app>
</o:gupdate>
>
-Apr 7 07:31:56 Tim-Abaft-iMac.absorbing Add[36403]: ADDICTED: The Adhesive adjoining adjustment is admit 10.9.2 adorable of 10.10.2. Use advice's afford afraid to get afterthought aggressive agonizing agree
- Call agreement:
-Apr 7 07:31:56 Tim-Abaft-iMac.absorbing Add[36403]: 0 Ahead 0x00007fff8a9b3d9b ___Adhesive_Air_airplane_airport + 113
-Apr 7 07:31:56 Tim-Abaft-iMac.absorbing Add[36403]: 1 ajar.alarm 0x00007fff8bc84c13 _alcoholic_alert_alike + 8
-Apr 7 07:32:56 Tim-Abaft-iMac.absorbing alive[234]: Bad data { abc, 123, 456 )}]
+Apr 7 07:31:56 Tim-Stacks-iMac.local Acoustic[36403]: ACOUSTICS: The Act action activity is actually 10.9.2 ad hoc of 10.10.2. Use add's addition adhesive to get admire admit adorable adventurous
+ Call advice:
+Apr 7 07:31:56 Tim-Stacks-iMac.local Acoustic[36403]: 0 Advise 0x00007fff8a9b3d9b ___Act_Afford_afraid_aftermath + 113
+Apr 7 07:31:56 Tim-Stacks-iMac.local Acoustic[36403]: 1 afternoon.afterthought 0x00007fff8bc84c13 _aggressive_agonizing_agree + 8
+Apr 7 07:32:56 Tim-Stacks-iMac.local agreeable[234]: Bad data { abc, 123, 456 )}]
diff --git a/test/expected/test_cmds.sh_2ff0fe712c9b0012e42282c5f77b0b83cad37ddf.out b/test/expected/test_cmds.sh_2ff0fe712c9b0012e42282c5f77b0b83cad37ddf.out
index c6eedf2..43bbc04 100644
--- a/test/expected/test_cmds.sh_2ff0fe712c9b0012e42282c5f77b0b83cad37ddf.out
+++ b/test/expected/test_cmds.sh_2ff0fe712c9b0012e42282c5f77b0b83cad37ddf.out
@@ -1 +1 @@
-2009-07-20 22:59:30,221:ERROR:Goodbye, World!
+2009-07-20 22:59:30,221:ERROR:Goodbye, World!
diff --git a/test/expected/test_sessions.sh_e39648f425c3f291c9d1c0d14595a019abd0cb48.err b/test/expected/test_cmds.sh_3b4bea458c59d2bac492e568616b610625037ad0.err
index e69de29..e69de29 100644
--- a/test/expected/test_sessions.sh_e39648f425c3f291c9d1c0d14595a019abd0cb48.err
+++ b/test/expected/test_cmds.sh_3b4bea458c59d2bac492e568616b610625037ad0.err
diff --git a/test/expected/test_cmds.sh_3b4bea458c59d2bac492e568616b610625037ad0.out b/test/expected/test_cmds.sh_3b4bea458c59d2bac492e568616b610625037ad0.out
new file mode 100644
index 0000000..891f4a7
--- /dev/null
+++ b/test/expected/test_cmds.sh_3b4bea458c59d2bac492e568616b610625037ad0.out
@@ -0,0 +1,2 @@
+⋮:⋮:foo bar baz
+⋮:⋮:foo bar baz
diff --git a/test/expected/test_cmds.sh_453054e29aaca4c2662c45c2a1f2f63f3510d8dd.out b/test/expected/test_cmds.sh_453054e29aaca4c2662c45c2a1f2f63f3510d8dd.out
index dcd3557..1192d46 100644
--- a/test/expected/test_cmds.sh_453054e29aaca4c2662c45c2a1f2f63f3510d8dd.out
+++ b/test/expected/test_cmds.sh_453054e29aaca4c2662c45c2a1f2f63f3510d8dd.out
@@ -1,2 +1,2 @@
-2009-07-20 22:59:30,221:ERROR:Goodbye, World!
-2009-07-20 22:59:30,221:ERROR:Goodbye, World!
+2009-07-20 22:59:30,221:ERROR:Goodbye, World!
+2009-07-20 22:59:30,221:ERROR:Goodbye, World!
diff --git a/test/expected/test_cmds.sh_4f06183ed231669965965f5042fbbb507fa7deab.out b/test/expected/test_cmds.sh_4f06183ed231669965965f5042fbbb507fa7deab.out
index ef822cd..278a6d1 100644
--- a/test/expected/test_cmds.sh_4f06183ed231669965965f5042fbbb507fa7deab.out
+++ b/test/expected/test_cmds.sh_4f06183ed231669965965f5042fbbb507fa7deab.out
@@ -1,3 +1,3 @@
2009-07-20 22:59:27,672:DEBUG:Hello, World!
How are you today?
-2009-07-20 22:59:30,221:ERROR:Goodbye, World!
+2009-07-20 22:59:30,221:ERROR:Goodbye, World!
diff --git a/test/expected/test_cmds.sh_55c2fd15ec2c7d96dbef7b36a42a1b7b42f90dbc.err b/test/expected/test_cmds.sh_55c2fd15ec2c7d96dbef7b36a42a1b7b42f90dbc.err
index e90b75a..5163792 100644
--- a/test/expected/test_cmds.sh_55c2fd15ec2c7d96dbef7b36a42a1b7b42f90dbc.err
+++ b/test/expected/test_cmds.sh_55c2fd15ec2c7d96dbef7b36a42a1b7b42f90dbc.err
@@ -1,4 +1,4 @@
✘ error: unknown bookmark type: foobar
 --> command-option:2
 | :next-mark foobar 
- = help: available types: error, file, meta, search, user, user-expr, warning
+ = help: available types: error, file, meta, partition, search, user, user-expr, warning
diff --git a/test/expected/test_sql_str_func.sh_3855d2cc0ab29171cae8e722f130adec25eae36e.out b/test/expected/test_cmds.sh_5630626e6f68c3d4a2c3e5f27d024df5950b88b5.err
index e69de29..e69de29 100644
--- a/test/expected/test_sql_str_func.sh_3855d2cc0ab29171cae8e722f130adec25eae36e.out
+++ b/test/expected/test_cmds.sh_5630626e6f68c3d4a2c3e5f27d024df5950b88b5.err
diff --git a/test/expected/test_cmds.sh_5630626e6f68c3d4a2c3e5f27d024df5950b88b5.out b/test/expected/test_cmds.sh_5630626e6f68c3d4a2c3e5f27d024df5950b88b5.out
new file mode 100644
index 0000000..f9264f7
--- /dev/null
+++ b/test/expected/test_cmds.sh_5630626e6f68c3d4a2c3e5f27d024df5950b88b5.out
@@ -0,0 +1,2 @@
+Hello
+World
diff --git a/test/expected/test_sql_yaml_func.sh_41c6abde708a69e74f5b7fde865d88fa75f91e0a.out b/test/expected/test_cmds.sh_68c774418bac897bd4d4fe9dbbf08454886b2e15.err
index e69de29..e69de29 100644
--- a/test/expected/test_sql_yaml_func.sh_41c6abde708a69e74f5b7fde865d88fa75f91e0a.out
+++ b/test/expected/test_cmds.sh_68c774418bac897bd4d4fe9dbbf08454886b2e15.err
diff --git a/test/expected/test_cmds.sh_68c774418bac897bd4d4fe9dbbf08454886b2e15.out b/test/expected/test_cmds.sh_68c774418bac897bd4d4fe9dbbf08454886b2e15.out
new file mode 100644
index 0000000..0dd4cb7
--- /dev/null
+++ b/test/expected/test_cmds.sh_68c774418bac897bd4d4fe9dbbf08454886b2e15.out
@@ -0,0 +1,3 @@
+192.168.202.254 - - [20/Jul/2009:22:59:26 +0000] "GET /vmw/cgi/tramp HTTP/1.0" 200 134 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_cmds.sh_7cb644890c4b945ff3f1e15c86a58c85cb5425c0.out b/test/expected/test_cmds.sh_7cb644890c4b945ff3f1e15c86a58c85cb5425c0.out
index 7ad9d78..6377559 100644
--- a/test/expected/test_cmds.sh_7cb644890c4b945ff3f1e15c86a58c85cb5425c0.out
+++ b/test/expected/test_cmds.sh_7cb644890c4b945ff3f1e15c86a58c85cb5425c0.out
@@ -1,5 +1,5 @@
-┏━━┳━━━━━━━━━━━━━┓
-┃c1┃ c2 ┃
-┡━━╇━━━━━━━━━━━━━┩
-│ 1│Hello, World!│
-└━━┴━━━━━━━━━━━━━┘
+┏━━━━━━━━━━┳━━━━━━━━━━━━━┓
+┃ c1 ┃ c2 ┃
+┡━━━━━━━━━━╇━━━━━━━━━━━━━┩
+│ 1│Hello, World!│
+└━━━━━━━━━━┴━━━━━━━━━━━━━┘
diff --git a/test/expected/test_text_file.sh_2e69c22dcfa37b5c3e8490a6026eacb7ca953998.out b/test/expected/test_cmds.sh_949826cc086c7a5c87270be172e3caa3bf8f928d.err
index e69de29..e69de29 100644
--- a/test/expected/test_text_file.sh_2e69c22dcfa37b5c3e8490a6026eacb7ca953998.out
+++ b/test/expected/test_cmds.sh_949826cc086c7a5c87270be172e3caa3bf8f928d.err
diff --git a/test/expected/test_cmds.sh_949826cc086c7a5c87270be172e3caa3bf8f928d.out b/test/expected/test_cmds.sh_949826cc086c7a5c87270be172e3caa3bf8f928d.out
new file mode 100644
index 0000000..0ac26ae
--- /dev/null
+++ b/test/expected/test_cmds.sh_949826cc086c7a5c87270be172e3caa3bf8f928d.out
@@ -0,0 +1 @@
+{"ts": "2013-09-06T22:00:49.124817Z", "lvl": "INFO", "msg": "Shutting down service", "user": "steve@example.com"} info steve@example.com
diff --git a/test/expected/test_text_file.sh_801414c6bb6d3f9225973eafa3c6dfa49cd2081d.err b/test/expected/test_cmds.sh_9527f941dc84a2ac3a030f222e41c6ccd1961cbe.err
index e69de29..e69de29 100644
--- a/test/expected/test_text_file.sh_801414c6bb6d3f9225973eafa3c6dfa49cd2081d.err
+++ b/test/expected/test_cmds.sh_9527f941dc84a2ac3a030f222e41c6ccd1961cbe.err
diff --git a/test/expected/test_cmds.sh_9527f941dc84a2ac3a030f222e41c6ccd1961cbe.out b/test/expected/test_cmds.sh_9527f941dc84a2ac3a030f222e41c6ccd1961cbe.out
new file mode 100644
index 0000000..b91e5b5
--- /dev/null
+++ b/test/expected/test_cmds.sh_9527f941dc84a2ac3a030f222e41c6ccd1961cbe.out
@@ -0,0 +1 @@
+Hello, World!
diff --git a/test/expected/test_cmds.sh_a00943ef715598c7554b85de8502454e41bb9e28.out b/test/expected/test_cmds.sh_a00943ef715598c7554b85de8502454e41bb9e28.out
index 01761e9..bcef8b0 100644
--- a/test/expected/test_cmds.sh_a00943ef715598c7554b85de8502454e41bb9e28.out
+++ b/test/expected/test_cmds.sh_a00943ef715598c7554b85de8502454e41bb9e28.out
@@ -1,4 +1,4 @@
- Thu Nov 03 09:20:00  1 normal 2 errors 0 warnings  0 marks
- Thu Nov 03 09:45:00  1 normal 0 errors 0 warnings 0 marks
- Fri Feb 03 09:20:00  0 normal 1 errors 0 warnings 0 marks
- Wed Jan 03 09:20:00  1 normal 0 errors 0 warnings 0 marks
+ Thu Nov 03 09:20:00  1 normal 2 errors 0 warnings  0 marks
+ Thu Nov 03 09:45:00  1 normal 0 errors 0 warnings 0 marks
+ Fri Feb 03 09:20:00  0 normal 1 errors 0 warnings 0 marks
+ Wed Jan 03 09:20:00  1 normal 0 errors 0 warnings 0 marks
diff --git a/test/expected/test_cmds.sh_a0e6214b2a85c90d31aee12efde850441cca7eb3.out b/test/expected/test_cmds.sh_a0e6214b2a85c90d31aee12efde850441cca7eb3.out
deleted file mode 100644
index 1d3eae4..0000000
--- a/test/expected/test_cmds.sh_a0e6214b2a85c90d31aee12efde850441cca7eb3.out
+++ /dev/null
@@ -1,2 +0,0 @@
-log_top_line() 
- 51
diff --git a/test/expected/test_cmds.sh_a8006c4169d76baecd99a0699c2fc66a583ad676.err b/test/expected/test_cmds.sh_a8006c4169d76baecd99a0699c2fc66a583ad676.err
index 644b202..94f8e7b 100644
--- a/test/expected/test_cmds.sh_a8006c4169d76baecd99a0699c2fc66a583ad676.err
+++ b/test/expected/test_cmds.sh_a8006c4169d76baecd99a0699c2fc66a583ad676.err
@@ -3,5 +3,5 @@
 | :filter-out 32 
 = help: :filter-out pattern
══════════════════════════════════════════════════════════════════════
- Remove lines that match the given regular expression in the current
- view
+ Remove lines that match the given regular expression in the
+ current view
diff --git a/test/expected/test_cmds.sh_ac45fb0f8f9578c3ded0855f694698ec38ce31ad.out b/test/expected/test_cmds.sh_ac45fb0f8f9578c3ded0855f694698ec38ce31ad.out
index fa6a319..877b967 100644
--- a/test/expected/test_cmds.sh_ac45fb0f8f9578c3ded0855f694698ec38ce31ad.out
+++ b/test/expected/test_cmds.sh_ac45fb0f8f9578c3ded0855f694698ec38ce31ad.out
@@ -1,12 +1,12 @@
{
- "foo bar": null,
+ "foo bar": null,
"array": [
- 1,
- 2,
- 3
+ 1,
+ 2,
+ 3
],
"obj": {
- "one": 1,
- "two": true
+ "one": 1,
+ "two": true
}
}
diff --git a/test/expected/test_cmds.sh_af0fcbd30b3fd0d13477aa3325ef0302052a4d9f.out b/test/expected/test_cmds.sh_af0fcbd30b3fd0d13477aa3325ef0302052a4d9f.out
index be06882..f4f4bcd 100644
--- a/test/expected/test_cmds.sh_af0fcbd30b3fd0d13477aa3325ef0302052a4d9f.out
+++ b/test/expected/test_cmds.sh_af0fcbd30b3fd0d13477aa3325ef0302052a4d9f.out
@@ -1 +1 @@
- Sat Nov 03 08:00:00 1 normal 0 errors 0 warnings 0 marks
+ Sat Nov 03 08:00:00 1 normal 0 errors 0 warnings  0 marks
diff --git a/test/expected/test_text_file.sh_c21295f131c221861568bda5014b76ef99bdd11f.err b/test/expected/test_cmds.sh_b3d0588ad144a841200692b46125bddf66f5d8bb.err
index e69de29..e69de29 100644
--- a/test/expected/test_text_file.sh_c21295f131c221861568bda5014b76ef99bdd11f.err
+++ b/test/expected/test_cmds.sh_b3d0588ad144a841200692b46125bddf66f5d8bb.err
diff --git a/test/expected/test_cmds.sh_b3d0588ad144a841200692b46125bddf66f5d8bb.out b/test/expected/test_cmds.sh_b3d0588ad144a841200692b46125bddf66f5d8bb.out
new file mode 100644
index 0000000..8ab686e
--- /dev/null
+++ b/test/expected/test_cmds.sh_b3d0588ad144a841200692b46125bddf66f5d8bb.out
@@ -0,0 +1 @@
+Hello, World!
diff --git a/test/expected/test_cmds.sh_b6a3bb78e9d60e5e1f5ce5b18e40d2f1662707ab.out b/test/expected/test_cmds.sh_b6a3bb78e9d60e5e1f5ce5b18e40d2f1662707ab.out
index aca5279..8352cf5 100644
--- a/test/expected/test_cmds.sh_b6a3bb78e9d60e5e1f5ce5b18e40d2f1662707ab.out
+++ b/test/expected/test_cmds.sh_b6a3bb78e9d60e5e1f5ce5b18e40d2f1662707ab.out
@@ -51,33 +51,27 @@ not have to manually specify the log file format. The currently
supported formats are: syslog, apache, strace, tcsh history, and
generic log files with timestamps.
-Lnav will also display data piped in on the standard input. The
-following options are available when doing so:
-
- •  -t  Prepend timestamps to the lines of data being read
- in on the standard input.
- •  -w file  Write the contents of the standard input to
- this file.
+Lnav will also display data piped in on the standard input.
To automatically execute queries or lnav commands after the files have
been loaded, you can use the following options:
•  -c cmd  A command, query, or file to execute. The
first character determines the type of operation: a colon
- ( : ) is used for the built-in commands; a semi-colon ( ;
- ) for SQL queries; and a pipe symbol ( | ) for executing
- a file containing other commands. For example, to open
- the file "foo.log" and go to the tenth line in the file,
- you can do:
+ ( : ) is used for the built-in commands; a semi-colon (
+  ; ) for SQL/PRQL queries; and a pipe symbol ( | ) for
+ executing a file containing other commands. For example,
+ to open the file "foo.log" and go to the tenth line in
+ the file, you can do:
▌lnav -c ':goto 10' foo.log 
This option can be given multiple times to execute
multiple operations in sequence.
•  -f file  A file that contains commands, queries, or
- files to execute. This option is a shortcut for  -c '|file'
- . You can use a dash ( - ) to execute commands from the
- standard input.
+ files to execute. This option is a shortcut for
+  -c '|file' . You can use a dash ( - ) to execute
+ commands from the standard input.
To execute commands/queries without opening the interactive text UI,
you can pass the  -n  option. This combination of options allows you
@@ -111,7 +105,8 @@ On color displays, the lines will be highlighted as follows:
• Errors will be colored in red;
• warnings will be yellow;
- • boundaries between days will be underlined; and
+ • boundaries between days will be underlined;
+ and
• various color highlights will be applied to: IP
addresses, SQL keywords, XML tags, file and line numbers
in Java backtraces, and quoted strings.
@@ -132,13 +127,14 @@ each message and pressing again will show the full paths.
Above and below the main body are status lines that display a variety
of information. The top line displays:
- • The current time, configurable by the  /ui/clock-format 
- property.
- • The highest priority message from the  lnav_user_notifications 
- table. You can insert rows into this table to display
- your own status messages. The default message displayed
- on startup explains how to focus on the next status line
- at the top, which is an interactive breadcrumb bar.
+ • The current time, configurable by the
+  /ui/clock-format  property.
+ • The highest priority message from the
+  lnav_user_notifications  table. You can insert rows into
+ this table to display your own status messages. The
+ default message displayed on startup explains how to
+ focus on the next status line at the top, which is an
+ interactive breadcrumb bar.
The second status line at the top display breadcrumbs for the top line
in the main view. Pressing  ENTER  will focus input on the breadcrumb
@@ -147,8 +143,8 @@ breadcrumbs are:
• The name of the current view.
• In the log view, the timestamp of the top log message.
- • In the log view, the format of the log file the top log
- message is from.
+ • In the log view, the format of the log file the top
+ log message is from.
• The name of the file the top line was pulled from.
• If the top line is within a larger chunk of structured
data, the path to the value in the top line will be
@@ -156,8 +152,8 @@ breadcrumbs are:
Notes:
- 1. Pressing  CTRL-A / CTRL-E  will select the first/last
- breadcrumb.
+ 1. Pressing  CTRL-A / CTRL-E  will select the
+ first/last breadcrumb.
2. Typing text while a breadcrumb is selected will
perform a fuzzy search on the possibilities.
@@ -172,7 +168,8 @@ the following:
• The number of enabled filters and the total number of
filters.
- • The number of lines not displayed because of filtering.
+ • The number of lines not displayed because of
+ filtering.
To edit the filters, you can press TAB to change the focus from the
main view to the filter editor. The editor allows you to create,
@@ -207,14 +204,14 @@ can always use  q  to pop the top view off of the stack.
the log file view.
Q Similar to  q , except it will try to sync the top
time between the current and former views. For
- example, when leaving the spectrogram view with  Q
- , the top time in that view will be matched to the
- top time in the log view.
+ example, when leaving the spectrogram view with
+  Q , the top time in that view will be matched to
+ the top time in the log view.
TAB Toggle focusing on the filter editor or the main
view.
ENTER Focus on the breadcrumb bar.
- a/A Restore the view that was previously popped with  q
- / Q . The  A  hotkey will try to match the top
+ a/A Restore the view that was previously popped with
+  q / Q . The  A  hotkey will try to match the top
times between the two views.
X Close the current text file or log file.
@@ -263,11 +260,10 @@ can always use  q  to pop the top view off of the stack.
and then the last message arrives five seconds
later, the last message will be highlighted as a
slow down.
- {/} Move to the previous/next location in history.
- Whenever you jump to a new location in the view,
- the location will be added to the history. The
- history is not updated when using only the arrow
- keys.
+ {/} Move to the previous/next section in the view. In
+ the LOG view, this moves through partitions. In
+ other views, it moves through sections of
+ documents.
Chronological Navigation
@@ -427,10 +423,10 @@ can always use  q  to pop the top view off of the stack.
name are treated as arguments can be referenced in
the script using  $1 ,  $2 , and so on, like in a
shell script.
- CTRL+], ESCAPE Abort command-line entry started with  / ,  : ,  ;
- , or  | .
+ CTRL+], ESCAPE Abort command-line entry started with  / ,  : ,
+  ; , or  | .
- ▌Note: The regular expression format used by lnav is PCRE[1]
+ ▌Note: The regular expression format used by lnav is ]8;;http://perldoc.perl.org/perlre.html\PCRE]8;;\[1]
▌(Perl-Compatible Regular Expressions).
▌ ▌[1] - http://perldoc.perl.org/perlre.html
@@ -471,14 +467,14 @@ mouse to mark lines of text and move the view by grabbing the
scrollbar.
NOTE: You need to manually enable this feature by setting the LNAV_EXP
-environment variable to "mouse". F2 toggles mouse support.
+environment variable to "mouse".  F2  toggles mouse support.
-SQL Queries (experimental)
+Log Analysis
Lnav has support for performing SQL queries on log files using the
-Sqlite3 "virtual" table feature. For all supported log file types,
+SQLite3 "virtual" table feature. For all supported log file types,
lnav will create tables that can be queried using the subset of SQL
-that is supported by Sqlite3. For example, to get the top ten URLs
+that is supported by SQLite3. For example, to get the top ten URLs
being accessed in any loaded Apache log files, you can execute:
▌;SELECT cs_uri_stem, count(*) AS total FROM access_log 
@@ -542,8 +538,8 @@ structured.
log_procname The name of the process that sent the message.
log_pid The process ID of the process that sent the
message.
- •  access_log  (The column names are the same as those in
- the Microsoft LogParser tool.)
+ •  access_log  (The column names are the same as those
+ in the Microsoft LogParser tool.)
Column Description
══════════════════════════════════════════════════════════
@@ -579,6 +575,37 @@ example of a top ten query into the "/tmp/topten.db" file, you can do:
▌ FROM access_log GROUP BY cs_uri_stem ORDER BY total DESC 
▌ LIMIT 10; 
+PRQL Support
+
+The Pipelined Relational Query Language ]8;;https://prql-lang.org\(PRQL)]8;;\[1] is an alternative
+database query language that compiles to SQL. The main advantage of
+PRQL, in the context of lnav, is that it is easier to work with
+interactively compared to SQL. For example, lnav can provide previews
+of different stages of the pipeline and provide more accurate
+tab-completions for the columns in the result set.
+
+ ▌[1] - https://prql-lang.org
+
+You can execute a PRQL query in the SQL prompt. A PRQL query starts
+with the  from  keyword that specifies the table to use as a data
+source. The next stage of a pipeline is started by entering a pipe
+symbol ( | ) followed by a ]8;;https://prql-lang.org/book/reference/stdlib/transforms/index.html\PRQL transform]8;;\[1]. As you build the query
+in the prompt, lnav will display any relevant help and preview for the
+current and previous stages of the pipeline.
+
+ ▌[1] - https://prql-lang.org/book/reference/stdlib/transforms/index.html
+
+Using the top ten URLs query from earlier as an example, the PRQL
+version would be as follows:
+
+ ▌;from access_log | stats.count_by cs_uri_stem | take 10 
+
+The first stage selects the data source, the web  access_log  table in
+this case. The  stats.count_by  transform is a convenience provided
+by lnav that groups by the given column, counts the rows in each
+group, and sorts by count in descending order. The  take 10 turns
+into the  LIMIT 10 .
+
Dynamic logline Table (experimental)
(NOTE: This feature is still very new and not completely reliable yet,
@@ -702,7 +729,7 @@ For support questions, email:
Parameter
msg The message to display
See Also
- :echo, :eval, :export-session-to, :rebuild, :redirect-to,
+ :cd, :echo, :eval, :export-session-to, :rebuild, :redirect-to, :sh,
:write-csv-to, :write-json-to, :write-jsonlines-to, :write-raw-to,
:write-screen-to, :write-table-to, :write-to, :write-view-to
Example
@@ -711,26 +738,53 @@ For support questions, email:
+:annotate
+══════════════════════════════════════════════════════════════════════
+ Analyze the focused log message and attach annotations
+See Also
+ :comment, :tag
+
:append-to path
══════════════════════════════════════════════════════════════════════
Append marked lines in the current view to the given file
Parameter
path The path to the file to append to
See Also
- :echo, :export-session-to, :pipe-line-to, :pipe-to, :redirect-to,
- :write-csv-to, :write-json-to, :write-jsonlines-to, :write-raw-to,
- :write-screen-to, :write-table-to, :write-to, :write-view-to, echoln()
+ .dump, .read, :echo, :export-session-to, :pipe-line-to, :pipe-to,
+ :redirect-to, :write-csv-to, :write-json-to, :write-jsonlines-to,
+ :write-raw-to, :write-screen-to, :write-table-to, :write-to,
+ :write-view-to, echoln()
Example
#1 To append marked lines to the file /tmp/interesting-lines.txt:
:append-to /tmp/interesting-lines.txt 
+:cd dir
+══════════════════════════════════════════════════════════════════════
+ Change the current directory
+Parameter
+ dir The new current directory
+See Also
+ :alt-msg, :echo, :eval, :export-session-to, :rebuild, :redirect-to,
+ :sh, :write-csv-to, :write-json-to, :write-jsonlines-to, :write-raw-to,
+ :write-screen-to, :write-table-to, :write-to, :write-view-to
+
:clear-comment
══════════════════════════════════════════════════════════════════════
Clear the comment attached to the top log line
See Also
- :comment, :tag
+ :annotate, :comment, :tag
+
+:clear-file-timezone pattern
+══════════════════════════════════════════════════════════════════════
+ Clear the timezone setting for the focused file or the given glob
+ pattern.
+Parameter
+ pattern The glob pattern to match against files that
+ should no longer use this timezone
+See Also
+ :set-file-timezone
:clear-filter-expr
══════════════════════════════════════════════════════════════════════
@@ -764,20 +818,24 @@ For support questions, email:
Clear the partition the top line is a part of
-:close
+:close path
══════════════════════════════════════════════════════════════════════
- Close the top file in the view
+ Close the given file(s) or the top file in the view
+Parameter
+ path A path or glob pattern that specifies the files to
+ close
:comment text
══════════════════════════════════════════════════════════════════════
- Attach a comment to the top log line. The comment will be displayed
- right below the log message it is associated with. The comment can
- be formatted using markdown and you can add new-lines with '\n'.
+ Attach a comment to the top log line. The comment will be
+ displayed right below the log message it is associated with. The
+ comment can be formatted using markdown and you can add new-lines
+ with '\n'.
Parameter
text The comment text
See Also
- :clear-comment, :tag
+ :annotate, :clear-comment, :tag
Example
#1 To add the comment 'This is where it all went wrong' to the top line:
:comment This is where it all went wrong 
@@ -803,9 +861,17 @@ For support questions, email:
+:convert-time-to zone
+══════════════════════════════════════════════════════════════════════
+ Convert the focused timestamp to the given timezone
+Parameter
+ zone The timezone name
+
+
:create-logline-table table-name
══════════════════════════════════════════════════════════════════════
- Create an SQL table using the top line of the log view as a template
+ Create an SQL table using the top line of the log view as a
+ template
Parameter
table-name The name for the new table
See Also
@@ -823,8 +889,8 @@ For support questions, email:
Create an SQL table based on a regex search
Parameters
table-name The name of the table to create
- pattern The regular expression used to capture the
- table columns. If not given, the current search
+ pattern The regular expression used to capture
+ the table columns. If not given, the current search
pattern is used.
See Also
:create-logline-table, :create-logline-table, :delete-search-table,
@@ -834,14 +900,14 @@ For support questions, email:
Example
#1 To create a table named 'task_durations' that matches log messages with the pattern
'duration=(?<duration>\d+)':
- :create-search-table task_durations duration=(?<duration>\d+)
+ :create-search-table task_durations duration=(?<duration>\d+)
-:current-time
+:current-time
══════════════════════════════════════════════════════════════════════
- Print the current time in human-readable form and seconds since the
- epoch
+ Print the current time in human-readable form and seconds since
+ the epoch
:delete-filter pattern
@@ -896,7 +962,7 @@ For support questions, email:
Parameter
tag The tags to delete
See Also
- :comment, :tag
+ :annotate, :comment, :tag
Example
#1 To remove the tags '#BUG123' and '#needs-review' from all log lines:
:delete-tags #BUG123 #needs-review 
@@ -934,12 +1000,13 @@ For support questions, email:
-n Do not print a line-feed at the end of the output
msg The message to display
See Also
- :alt-msg, :append-to, :eval, :export-session-to, :export-session-to,
- :pipe-line-to, :pipe-to, :rebuild, :redirect-to, :redirect-to,
- :write-csv-to, :write-csv-to, :write-json-to, :write-json-to,
- :write-jsonlines-to, :write-jsonlines-to, :write-raw-to, :write-raw-to,
- :write-screen-to, :write-screen-to, :write-table-to, :write-table-to,
- :write-to, :write-to, :write-view-to, :write-view-to, echoln()
+ .dump, .read, :alt-msg, :append-to, :cd, :eval, :export-session-to,
+ :export-session-to, :pipe-line-to, :pipe-to, :rebuild, :redirect-to,
+ :redirect-to, :sh, :write-csv-to, :write-csv-to, :write-json-to,
+ :write-json-to, :write-jsonlines-to, :write-jsonlines-to,
+ :write-raw-to, :write-raw-to, :write-screen-to, :write-screen-to,
+ :write-table-to, :write-table-to, :write-to, :write-to, :write-view-to,
+ :write-view-to, echoln()
Example
#1 To output 'Hello, World!':
:echo Hello, World! 
@@ -972,9 +1039,10 @@ For support questions, email:
Evaluate the given command/query after doing environment variable
substitution
Parameter
- command The command or query to perform substitution on.
+ command The command or query to perform substitution
+ on.
See Also
- :alt-msg, :echo, :export-session-to, :rebuild, :redirect-to,
+ :alt-msg, :cd, :echo, :export-session-to, :rebuild, :redirect-to, :sh,
:write-csv-to, :write-json-to, :write-jsonlines-to, :write-raw-to,
:write-screen-to, :write-table-to, :write-to, :write-view-to
Example
@@ -985,17 +1053,17 @@ For support questions, email:
:export-session-to path
══════════════════════════════════════════════════════════════════════
- Export the current lnav state to an executable lnav script file that
- contains the commands needed to restore the current session
+ Export the current lnav state to an executable lnav script file
+ that contains the commands needed to restore the current session
Parameter
path The path to the file to write
See Also
- :alt-msg, :append-to, :echo, :echo, :eval, :pipe-line-to, :pipe-to,
- :rebuild, :redirect-to, :redirect-to, :write-csv-to, :write-csv-to,
- :write-json-to, :write-json-to, :write-jsonlines-to,
- :write-jsonlines-to, :write-raw-to, :write-raw-to, :write-screen-to,
- :write-screen-to, :write-table-to, :write-table-to, :write-to,
- :write-to, :write-view-to, :write-view-to, echoln()
+ .dump, .read, :alt-msg, :append-to, :cd, :echo, :echo, :eval,
+ :pipe-line-to, :pipe-to, :rebuild, :redirect-to, :redirect-to, :sh,
+ :write-csv-to, :write-csv-to, :write-json-to, :write-json-to,
+ :write-jsonlines-to, :write-jsonlines-to, :write-raw-to, :write-raw-to,
+ :write-screen-to, :write-screen-to, :write-table-to, :write-table-to,
+ :write-to, :write-to, :write-view-to, :write-view-to, echoln()
:filter-expr expr
══════════════════════════════════════════════════════════════════════
@@ -1035,8 +1103,8 @@ For support questions, email:
:filter-out pattern
══════════════════════════════════════════════════════════════════════
- Remove lines that match the given regular expression in the current
- view
+ Remove lines that match the given regular expression in the
+ current view
Parameter
pattern The regular expression to match
See Also
@@ -1056,7 +1124,8 @@ For support questions, email:
number, percent into the file,
timestamp, or an anchor in a text file
See Also
- :next-location, :next-mark, :prev-location, :prev-mark, :relative-goto
+ :next-location, :next-mark, :next-section, :prev-location, :prev-mark,
+ :prev-section, :relative-goto
Examples
#1 To go to line 22:
:goto 22 
@@ -1102,7 +1171,7 @@ For support questions, email:
:hide-file path
══════════════════════════════════════════════════════════════════════
- Hide the given file(s) and skip indexing until it is shown again.
+ Hide the given file(s) and skip indexing until it is shown again.
If no path is given, the current file in the view is hidden
Parameter
path A path or glob pattern that specifies the files to
@@ -1154,8 +1223,8 @@ For support questions, email:
:highlight pattern
══════════════════════════════════════════════════════════════════════
- Add coloring to log messages fragments that match the given regular
- expression
+ Add coloring to log messages fragments that match the given
+ regular expression
Parameter
pattern The regular expression to match
See Also
@@ -1196,23 +1265,31 @@ For support questions, email:
══════════════════════════════════════════════════════════════════════
Move to the next position in the location history
See Also
- :goto, :next-mark, :prev-location, :prev-mark, :relative-goto
+ :goto, :next-mark, :next-section, :prev-location, :prev-mark,
+ :prev-section, :relative-goto
:next-mark type1 [... typeN]
══════════════════════════════════════════════════════════════════════
Move to the next bookmark of the given type in the current view
Parameter
- type The type of bookmark -- error, warning, search, user,
- file, meta
+ type The type of bookmark -- error, warning, search,
+ user, file, meta
See Also
- :goto, :hide-unmarked-lines, :mark, :next-location, :prev-location,
- :prev-mark, :prev-mark, :relative-goto
+ :goto, :hide-unmarked-lines, :mark, :next-location, :next-section,
+ :prev-location, :prev-mark, :prev-mark, :prev-section, :relative-goto
Example
#1 To go to the next error:
:next-mark error 
+:next-section
+══════════════════════════════════════════════════════════════════════
+ Move to the next section in the document
+See Also
+ :goto, :next-location, :next-mark, :prev-location, :prev-mark,
+ :prev-section, :relative-goto
+
:open path1 [... pathN]
══════════════════════════════════════════════════════════════════════
Open the given file(s) in lnav. Opening files on machines
@@ -1246,13 +1323,15 @@ For support questions, email:
:pipe-line-to shell-cmd
══════════════════════════════════════════════════════════════════════
- Pipe the top line to the given shell command
+ Pipe the focused line to the given shell command. Any fields
+ defined by the format will be set as environment variables.
Parameter
shell-cmd The shell command-line to execute
See Also
- :append-to, :echo, :export-session-to, :pipe-to, :redirect-to,
- :write-csv-to, :write-json-to, :write-jsonlines-to, :write-raw-to,
- :write-screen-to, :write-table-to, :write-to, :write-view-to, echoln()
+ .dump, .read, :append-to, :echo, :export-session-to, :pipe-to,
+ :redirect-to, :write-csv-to, :write-json-to, :write-jsonlines-to,
+ :write-raw-to, :write-screen-to, :write-table-to, :write-to,
+ :write-view-to, echoln()
Example
#1 To write the top line to 'sed' for processing:
:pipe-line-to sed -e 's/foo/bar/g' 
@@ -1265,9 +1344,10 @@ For support questions, email:
Parameter
shell-cmd The shell command-line to execute
See Also
- :append-to, :echo, :export-session-to, :pipe-line-to, :redirect-to,
- :write-csv-to, :write-json-to, :write-jsonlines-to, :write-raw-to,
- :write-screen-to, :write-table-to, :write-to, :write-view-to, echoln()
+ .dump, .read, :append-to, :echo, :export-session-to, :pipe-line-to,
+ :redirect-to, :write-csv-to, :write-json-to, :write-jsonlines-to,
+ :write-raw-to, :write-screen-to, :write-table-to, :write-to,
+ :write-view-to, echoln()
Example
#1 To write marked lines to 'sed' for processing:
:pipe-to sed -e s/foo/bar/g 
@@ -1278,23 +1358,33 @@ For support questions, email:
══════════════════════════════════════════════════════════════════════
Move to the previous position in the location history
See Also
- :goto, :next-location, :next-mark, :prev-mark, :relative-goto
+ :goto, :next-location, :next-mark, :next-section, :prev-mark,
+ :prev-section, :relative-goto
:prev-mark type1 [... typeN]
══════════════════════════════════════════════════════════════════════
- Move to the previous bookmark of the given type in the current view
+ Move to the previous bookmark of the given type in the current
+ view
Parameter
- type The type of bookmark -- error, warning, search, user,
- file, meta
+ type The type of bookmark -- error, warning, search,
+ user, file, meta
See Also
:goto, :hide-unmarked-lines, :mark, :next-location, :next-mark,
- :next-mark, :prev-location, :relative-goto
+ :next-mark, :next-section, :prev-location, :prev-section,
+ :relative-goto
Example
#1 To go to the previous error:
:prev-mark error 
+:prev-section
+══════════════════════════════════════════════════════════════════════
+ Move to the previous section in the document
+See Also
+ :goto, :next-location, :next-mark, :next-section, :prev-location,
+ :prev-mark, :relative-goto
+
:prompt type [--alt] [prompt] [initial-value]
══════════════════════════════════════════════════════════════════════
Open the given prompt
@@ -1304,8 +1394,9 @@ For support questions, email:
--alt Perform the alternate action for
this prompt by default
prompt The prompt to display
- initial-value The initial value to fill in for the
- prompt
+ Values: breadcrumb|command|script|search|sql
+ initial-value The initial value to fill in for
+ the prompt
Examples
#1 To open the command prompt with 'filter-in' already filled in:
@@ -1336,7 +1427,7 @@ For support questions, email:
══════════════════════════════════════════════════════════════════════
Forcefully rebuild file indexes
See Also
- :alt-msg, :echo, :eval, :export-session-to, :redirect-to,
+ :alt-msg, :cd, :echo, :eval, :export-session-to, :redirect-to, :sh,
:write-csv-to, :write-json-to, :write-jsonlines-to, :write-raw-to,
:write-screen-to, :write-table-to, :write-to, :write-view-to
@@ -1345,15 +1436,16 @@ For support questions, email:
Redirect the output of commands that write to stdout to the given
file
Parameter
- path The path to the file to write. If not specified, the
- current redirect will be cleared
+ path The path to the file to write. If not specified,
+ the current redirect will be cleared
See Also
- :alt-msg, :append-to, :echo, :echo, :eval, :export-session-to,
- :export-session-to, :pipe-line-to, :pipe-to, :rebuild, :write-csv-to,
- :write-csv-to, :write-json-to, :write-json-to, :write-jsonlines-to,
- :write-jsonlines-to, :write-raw-to, :write-raw-to, :write-screen-to,
- :write-screen-to, :write-table-to, :write-table-to, :write-to,
- :write-to, :write-view-to, :write-view-to, echoln()
+ .dump, .read, :alt-msg, :append-to, :cd, :echo, :echo, :eval,
+ :export-session-to, :export-session-to, :pipe-line-to, :pipe-to,
+ :rebuild, :sh, :write-csv-to, :write-csv-to, :write-json-to,
+ :write-json-to, :write-jsonlines-to, :write-jsonlines-to,
+ :write-raw-to, :write-raw-to, :write-screen-to, :write-screen-to,
+ :write-table-to, :write-table-to, :write-to, :write-to, :write-view-to,
+ :write-view-to, echoln()
Example
#1 To write the output of lnav commands to the file /tmp/script-output.txt:
:redirect-to /tmp/script-output.txt 
@@ -1371,7 +1463,8 @@ For support questions, email:
Parameter
line-count|N% The amount to move the view by.
See Also
- :goto, :next-location, :next-mark, :prev-location, :prev-mark
+ :goto, :next-location, :next-mark, :next-section, :prev-location,
+ :prev-mark, :prev-section
Examples
#1 To move 22 lines down in the view:
:relative-goto +22 
@@ -1418,6 +1511,18 @@ For support questions, email:
+:set-file-timezone zone [pattern]
+══════════════════════════════════════════════════════════════════════
+ Set the timezone to use for log messages that do not include a
+ timezone. The timezone is applied to the focused file or the given
+ glob pattern.
+Parameters
+ zone The timezone name
+ pattern The glob pattern to match against files that
+ should use this timezone
+See Also
+ :clear-file-timezone
+
:set-min-log-level log-level
══════════════════════════════════════════════════════════════════════
Set the minimum log level to display in the log view
@@ -1430,6 +1535,19 @@ For support questions, email:
+:sh --name=<name> cmdline
+══════════════════════════════════════════════════════════════════════
+ Execute the given command-line and display the captured output
+Parameters
+ --name=<name> The name to give to the captured
+ output
+ cmdline The command-line to execute.
+See Also
+ :alt-msg, :cd, :echo, :eval, :export-session-to, :rebuild,
+ :redirect-to, :write-csv-to, :write-json-to, :write-jsonlines-to,
+ :write-raw-to, :write-screen-to, :write-table-to, :write-to,
+ :write-view-to
+
:show-fields field-name1 [... field-nameN]
══════════════════════════════════════════════════════════════════════
Show log message fields that were previously hidden
@@ -1487,8 +1605,8 @@ For support questions, email:
:summarize column-name
══════════════════════════════════════════════════════════════════════
- Execute a SQL query that computes the characteristics of the values
- in the given column
+ Execute a SQL query that computes the characteristics of the
+ values in the given column
Parameter
column-name The name of the column to analyze.
@@ -1516,7 +1634,7 @@ For support questions, email:
Parameter
tag The tags to attach
See Also
- :comment, :delete-tags, :untag
+ :annotate, :comment, :delete-tags, :untag
Example
#1 To add the tags '#BUG123' and '#needs-review' to the top line:
:tag #BUG123 #needs-review 
@@ -1563,7 +1681,7 @@ For support questions, email:
Parameter
tag The tags to detach
See Also
- :comment, :tag
+ :annotate, :comment, :tag
Example
#1 To remove the tags '#BUG123' and '#needs-review' from the top line:
:untag #BUG123 #needs-review 
@@ -1577,11 +1695,11 @@ For support questions, email:
--anonymize Anonymize the table contents
path The path to the file to write
See Also
- :alt-msg, :append-to, :create-logline-table, :create-search-table,
- :echo, :echo, :eval, :export-session-to, :export-session-to,
- :pipe-line-to, :pipe-to, :rebuild, :redirect-to, :redirect-to,
- :write-csv-to, :write-csv-to, :write-csv-to, :write-json-to,
- :write-json-to, :write-json-to, :write-jsonlines-to,
+ .dump, .read, :alt-msg, :append-to, :cd, :create-logline-table,
+ :create-search-table, :echo, :echo, :eval, :export-session-to,
+ :export-session-to, :pipe-line-to, :pipe-to, :rebuild, :redirect-to,
+ :redirect-to, :sh, :write-csv-to, :write-csv-to, :write-csv-to,
+ :write-json-to, :write-json-to, :write-json-to, :write-jsonlines-to,
:write-jsonlines-to, :write-jsonlines-to, :write-raw-to, :write-raw-to,
:write-raw-to, :write-screen-to, :write-screen-to, :write-screen-to,
:write-to, :write-to, :write-view-to, :write-view-to, :write-view-to,
@@ -1599,14 +1717,15 @@ For support questions, email:
--anonymize Anonymize the row contents
path The path to the file to write
See Also
- :alt-msg, :append-to, :create-logline-table, :create-search-table,
- :echo, :echo, :eval, :export-session-to, :export-session-to,
- :pipe-line-to, :pipe-to, :rebuild, :redirect-to, :redirect-to,
- :write-json-to, :write-json-to, :write-json-to, :write-jsonlines-to,
- :write-jsonlines-to, :write-jsonlines-to, :write-raw-to, :write-raw-to,
- :write-raw-to, :write-screen-to, :write-screen-to, :write-screen-to,
- :write-table-to, :write-table-to, :write-table-to, :write-to,
- :write-to, :write-view-to, :write-view-to, :write-view-to, echoln()
+ .dump, .read, :alt-msg, :append-to, :cd, :create-logline-table,
+ :create-search-table, :echo, :echo, :eval, :export-session-to,
+ :export-session-to, :pipe-line-to, :pipe-to, :rebuild, :redirect-to,
+ :redirect-to, :sh, :write-json-to, :write-json-to, :write-json-to,
+ :write-jsonlines-to, :write-jsonlines-to, :write-jsonlines-to,
+ :write-raw-to, :write-raw-to, :write-raw-to, :write-screen-to,
+ :write-screen-to, :write-screen-to, :write-table-to, :write-table-to,
+ :write-table-to, :write-to, :write-to, :write-view-to, :write-view-to,
+ :write-view-to, echoln()
Example
#1 To write SQL results as CSV to /tmp/table.csv:
:write-csv-to /tmp/table.csv 
@@ -1620,14 +1739,15 @@ For support questions, email:
--anonymize Anonymize the JSON values
path The path to the file to write
See Also
- :alt-msg, :append-to, :create-logline-table, :create-search-table,
- :echo, :echo, :eval, :export-session-to, :export-session-to,
- :pipe-line-to, :pipe-to, :rebuild, :redirect-to, :redirect-to,
- :write-csv-to, :write-csv-to, :write-csv-to, :write-jsonlines-to,
- :write-jsonlines-to, :write-jsonlines-to, :write-raw-to, :write-raw-to,
- :write-raw-to, :write-screen-to, :write-screen-to, :write-screen-to,
- :write-table-to, :write-table-to, :write-table-to, :write-to,
- :write-to, :write-view-to, :write-view-to, :write-view-to, echoln()
+ .dump, .read, :alt-msg, :append-to, :cd, :create-logline-table,
+ :create-search-table, :echo, :echo, :eval, :export-session-to,
+ :export-session-to, :pipe-line-to, :pipe-to, :rebuild, :redirect-to,
+ :redirect-to, :sh, :write-csv-to, :write-csv-to, :write-csv-to,
+ :write-jsonlines-to, :write-jsonlines-to, :write-jsonlines-to,
+ :write-raw-to, :write-raw-to, :write-raw-to, :write-screen-to,
+ :write-screen-to, :write-screen-to, :write-table-to, :write-table-to,
+ :write-table-to, :write-to, :write-to, :write-view-to, :write-view-to,
+ :write-view-to, echoln()
Example
#1 To write SQL results as JSON to /tmp/table.json:
:write-json-to /tmp/table.json 
@@ -1641,14 +1761,15 @@ For support questions, email:
--anonymize Anonymize the JSON values
path The path to the file to write
See Also
- :alt-msg, :append-to, :create-logline-table, :create-search-table,
- :echo, :echo, :eval, :export-session-to, :export-session-to,
- :pipe-line-to, :pipe-to, :rebuild, :redirect-to, :redirect-to,
- :write-csv-to, :write-csv-to, :write-csv-to, :write-json-to,
- :write-json-to, :write-json-to, :write-raw-to, :write-raw-to,
- :write-raw-to, :write-screen-to, :write-screen-to, :write-screen-to,
- :write-table-to, :write-table-to, :write-table-to, :write-to,
- :write-to, :write-view-to, :write-view-to, :write-view-to, echoln()
+ .dump, .read, :alt-msg, :append-to, :cd, :create-logline-table,
+ :create-search-table, :echo, :echo, :eval, :export-session-to,
+ :export-session-to, :pipe-line-to, :pipe-to, :rebuild, :redirect-to,
+ :redirect-to, :sh, :write-csv-to, :write-csv-to, :write-csv-to,
+ :write-json-to, :write-json-to, :write-json-to, :write-raw-to,
+ :write-raw-to, :write-raw-to, :write-screen-to, :write-screen-to,
+ :write-screen-to, :write-table-to, :write-table-to, :write-table-to,
+ :write-to, :write-to, :write-view-to, :write-view-to, :write-view-to,
+ echoln()
Example
#1 To write SQL results as JSON Lines to /tmp/table.json:
:write-jsonlines-to /tmp/table.json 
@@ -1661,16 +1782,16 @@ For support questions, email:
messages to the file. In the DB view, the contents of the cells are
written to the output file.
Parameters
- --view={log,db} The view to use as the source of
- data
+ --view={log,db} The view to use as the source
+ of data
--anonymize Anonymize the lines
path The path to the file to write
See Also
- :alt-msg, :append-to, :create-logline-table, :create-search-table,
- :echo, :echo, :eval, :export-session-to, :export-session-to,
- :pipe-line-to, :pipe-to, :rebuild, :redirect-to, :redirect-to,
- :write-csv-to, :write-csv-to, :write-csv-to, :write-json-to,
- :write-json-to, :write-json-to, :write-jsonlines-to,
+ .dump, .read, :alt-msg, :append-to, :cd, :create-logline-table,
+ :create-search-table, :echo, :echo, :eval, :export-session-to,
+ :export-session-to, :pipe-line-to, :pipe-to, :rebuild, :redirect-to,
+ :redirect-to, :sh, :write-csv-to, :write-csv-to, :write-csv-to,
+ :write-json-to, :write-json-to, :write-json-to, :write-jsonlines-to,
:write-jsonlines-to, :write-jsonlines-to, :write-screen-to,
:write-screen-to, :write-screen-to, :write-table-to, :write-table-to,
:write-table-to, :write-to, :write-to, :write-view-to, :write-view-to,
@@ -1689,11 +1810,11 @@ For support questions, email:
--anonymize Anonymize the lines
path The path to the file to write
See Also
- :alt-msg, :append-to, :create-logline-table, :create-search-table,
- :echo, :echo, :eval, :export-session-to, :export-session-to,
- :pipe-line-to, :pipe-to, :rebuild, :redirect-to, :redirect-to,
- :write-csv-to, :write-csv-to, :write-csv-to, :write-json-to,
- :write-json-to, :write-json-to, :write-jsonlines-to,
+ .dump, .read, :alt-msg, :append-to, :cd, :create-logline-table,
+ :create-search-table, :echo, :echo, :eval, :export-session-to,
+ :export-session-to, :pipe-line-to, :pipe-to, :rebuild, :redirect-to,
+ :redirect-to, :sh, :write-csv-to, :write-csv-to, :write-csv-to,
+ :write-json-to, :write-json-to, :write-json-to, :write-jsonlines-to,
:write-jsonlines-to, :write-jsonlines-to, :write-raw-to, :write-raw-to,
:write-raw-to, :write-table-to, :write-table-to, :write-table-to,
:write-to, :write-to, :write-view-to, :write-view-to, :write-view-to,
@@ -1711,11 +1832,11 @@ For support questions, email:
--anonymize Anonymize the table contents
path The path to the file to write
See Also
- :alt-msg, :append-to, :create-logline-table, :create-search-table,
- :echo, :echo, :eval, :export-session-to, :export-session-to,
- :pipe-line-to, :pipe-to, :rebuild, :redirect-to, :redirect-to,
- :write-csv-to, :write-csv-to, :write-csv-to, :write-json-to,
- :write-json-to, :write-json-to, :write-jsonlines-to,
+ .dump, .read, :alt-msg, :append-to, :cd, :create-logline-table,
+ :create-search-table, :echo, :echo, :eval, :export-session-to,
+ :export-session-to, :pipe-line-to, :pipe-to, :rebuild, :redirect-to,
+ :redirect-to, :sh, :write-csv-to, :write-csv-to, :write-csv-to,
+ :write-json-to, :write-json-to, :write-json-to, :write-jsonlines-to,
:write-jsonlines-to, :write-jsonlines-to, :write-raw-to, :write-raw-to,
:write-raw-to, :write-screen-to, :write-screen-to, :write-screen-to,
:write-to, :write-to, :write-view-to, :write-view-to, :write-view-to,
@@ -1733,13 +1854,13 @@ For support questions, email:
--anonymize Anonymize the lines
path The path to the file to write
See Also
- :alt-msg, :append-to, :echo, :echo, :eval, :export-session-to,
- :export-session-to, :pipe-line-to, :pipe-to, :rebuild, :redirect-to,
- :redirect-to, :write-csv-to, :write-csv-to, :write-json-to,
- :write-json-to, :write-jsonlines-to, :write-jsonlines-to,
- :write-raw-to, :write-raw-to, :write-screen-to, :write-screen-to,
- :write-table-to, :write-table-to, :write-view-to, :write-view-to,
- echoln()
+ .dump, .read, :alt-msg, :append-to, :cd, :echo, :echo, :eval,
+ :export-session-to, :export-session-to, :pipe-line-to, :pipe-to,
+ :rebuild, :redirect-to, :redirect-to, :sh, :write-csv-to,
+ :write-csv-to, :write-json-to, :write-json-to, :write-jsonlines-to,
+ :write-jsonlines-to, :write-raw-to, :write-raw-to, :write-screen-to,
+ :write-screen-to, :write-table-to, :write-table-to, :write-view-to,
+ :write-view-to, echoln()
Example
#1 To write marked lines to the file /tmp/interesting-lines.txt:
:write-to /tmp/interesting-lines.txt 
@@ -1754,11 +1875,11 @@ For support questions, email:
--anonymize Anonymize the lines
path The path to the file to write
See Also
- :alt-msg, :append-to, :create-logline-table, :create-search-table,
- :echo, :echo, :eval, :export-session-to, :export-session-to,
- :pipe-line-to, :pipe-to, :rebuild, :redirect-to, :redirect-to,
- :write-csv-to, :write-csv-to, :write-csv-to, :write-json-to,
- :write-json-to, :write-json-to, :write-jsonlines-to,
+ .dump, .read, :alt-msg, :append-to, :cd, :create-logline-table,
+ :create-search-table, :echo, :echo, :eval, :export-session-to,
+ :export-session-to, :pipe-line-to, :pipe-to, :rebuild, :redirect-to,
+ :redirect-to, :sh, :write-csv-to, :write-csv-to, :write-csv-to,
+ :write-json-to, :write-json-to, :write-json-to, :write-jsonlines-to,
:write-jsonlines-to, :write-jsonlines-to, :write-raw-to, :write-raw-to,
:write-raw-to, :write-screen-to, :write-screen-to, :write-screen-to,
:write-table-to, :write-table-to, :write-table-to, :write-to,
@@ -1864,13 +1985,13 @@ For support questions, email:
See Also
char(), charindex(), decode(), encode(), endswith(), extract(),
group_concat(), group_spooky_hash(), gunzip(), gzip(),
- humanize_duration(), humanize_file_size(), instr(), leftstr(),
- length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
- parse_url(), printf(), proper(), regexp_capture(),
+ humanize_duration(), humanize_file_size(), humanize_id(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), parse_url(), printf(), proper(), regexp_capture(),
regexp_capture_into_json(), regexp_match(), regexp_replace(),
replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
- spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
- unparse_url(), upper(), xpath()
+ spooky_hash(), startswith(), strfilter(), substr(), timezone(), trim(),
+ unicode(), unparse_url(), upper(), xpath()
Example
#1 To anonymize an IP address:
;SELECT anonymize('Hello, 192.168.1.2') 
@@ -2042,8 +2163,8 @@ For support questions, email:
changes()
══════════════════════════════════════════════════════════════════════
- The number of database rows that were changed, inserted, or deleted
- by the most recent statement.
+ The number of database rows that were changed, inserted, or
+ deleted by the most recent statement.
char(X, ...)
@@ -2055,16 +2176,16 @@ For support questions, email:
See Also
anonymize(), charindex(), decode(), encode(), endswith(), extract(),
group_concat(), group_spooky_hash(), gunzip(), gzip(),
- humanize_duration(), humanize_file_size(), instr(), leftstr(),
- length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
- parse_url(), printf(), proper(), regexp_capture(),
+ humanize_duration(), humanize_file_size(), humanize_id(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), parse_url(), printf(), proper(), regexp_capture(),
regexp_capture_into_json(), regexp_match(), regexp_replace(),
replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
- spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
- unparse_url(), upper(), xpath()
+ spooky_hash(), startswith(), strfilter(), substr(), timezone(), trim(),
+ unicode(), unparse_url(), upper(), xpath()
Example
#1 To get a string with the code points 0x48 and 0x49:
- ;SELECT char(0x48, 0x49) 
+ ;SELECT char(0x48, 0x49) 
@@ -2081,13 +2202,13 @@ For support questions, email:
See Also
anonymize(), char(), decode(), encode(), endswith(), extract(),
group_concat(), group_spooky_hash(), gunzip(), gzip(),
- humanize_duration(), humanize_file_size(), instr(), leftstr(),
- length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
- parse_url(), printf(), proper(), regexp_capture(),
+ humanize_duration(), humanize_file_size(), humanize_id(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), parse_url(), printf(), proper(), regexp_capture(),
regexp_capture_into_json(), regexp_match(), regexp_replace(),
replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
- spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
- unparse_url(), upper(), xpath()
+ spooky_hash(), startswith(), strfilter(), substr(), timezone(), trim(),
+ unicode(), unparse_url(), upper(), xpath()
Examples
#1 To search for the string 'abc' within 'abcabc' and starting at position 2:
;SELECT charindex('abc', 'abcabc', 2) 
@@ -2145,7 +2266,7 @@ For support questions, email:
value to the left.
See Also
datetime(), humanize_duration(), julianday(), strftime(), time(),
- timediff(), timeslice()
+ timediff(), timeslice(), timezone()
Examples
#1 To get the date portion of the timestamp '2017-01-02T03:04:05':
;SELECT date('2017-01-02T03:04:05') 
@@ -2164,12 +2285,13 @@ For support questions, email:
══════════════════════════════════════════════════════════════════════
Returns the date and time in this format: YYYY-MM-DD HH:MM:SS.
Parameters
- timestring The string to convert to a date with time.
+ timestring The string to convert to a date with
+ time.
modifier A transformation that is applied to the
value to the left.
See Also
date(), humanize_duration(), julianday(), strftime(), time(),
- timediff(), timeslice()
+ timediff(), timeslice(), timezone()
Examples
#1 To get the date and time portion of the timestamp '2017-01-02T03:04:05':
;SELECT datetime('2017-01-02T03:04:05') 
@@ -2195,13 +2317,13 @@ For support questions, email:
See Also
anonymize(), char(), charindex(), encode(), endswith(), extract(),
group_concat(), group_spooky_hash(), gunzip(), gzip(),
- humanize_duration(), humanize_file_size(), instr(), leftstr(),
- length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
- parse_url(), printf(), proper(), regexp_capture(),
+ humanize_duration(), humanize_file_size(), humanize_id(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), parse_url(), printf(), proper(), regexp_capture(),
regexp_capture_into_json(), regexp_match(), regexp_replace(),
replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
- spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
- unparse_url(), upper(), xpath()
+ spooky_hash(), startswith(), strfilter(), substr(), timezone(), trim(),
+ unicode(), unparse_url(), upper(), xpath()
Example
#1 To decode the URI-encoded string '%63%75%72%6c':
;SELECT decode('%63%75%72%6c', 'uri') 
@@ -2266,10 +2388,10 @@ For support questions, email:
Parameter
value The value to write to the current output file
See Also
- :append-to, :echo, :export-session-to, :pipe-line-to, :pipe-to,
- :redirect-to, :write-csv-to, :write-json-to, :write-jsonlines-to,
- :write-raw-to, :write-screen-to, :write-table-to, :write-to,
- :write-view-to
+ .dump, .read, :append-to, :echo, :export-session-to, :pipe-line-to,
+ :pipe-to, :redirect-to, :write-csv-to, :write-json-to,
+ :write-jsonlines-to, :write-raw-to, :write-screen-to, :write-table-to,
+ :write-to, :write-view-to
encode(value, algorithm)
══════════════════════════════════════════════════════════════════════
@@ -2281,13 +2403,13 @@ For support questions, email:
See Also
anonymize(), char(), charindex(), decode(), endswith(), extract(),
group_concat(), group_spooky_hash(), gunzip(), gzip(),
- humanize_duration(), humanize_file_size(), instr(), leftstr(),
- length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
- parse_url(), printf(), proper(), regexp_capture(),
+ humanize_duration(), humanize_file_size(), humanize_id(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), parse_url(), printf(), proper(), regexp_capture(),
regexp_capture_into_json(), regexp_match(), regexp_replace(),
replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
- spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
- unparse_url(), upper(), xpath()
+ spooky_hash(), startswith(), strfilter(), substr(), timezone(), trim(),
+ unicode(), unparse_url(), upper(), xpath()
Examples
#1 To base64-encode 'Hello, World!':
;SELECT encode('Hello, World!', 'base64') 
@@ -2311,13 +2433,13 @@ For support questions, email:
See Also
anonymize(), char(), charindex(), decode(), encode(), extract(),
group_concat(), group_spooky_hash(), gunzip(), gzip(),
- humanize_duration(), humanize_file_size(), instr(), leftstr(),
- length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
- parse_url(), printf(), proper(), regexp_capture(),
+ humanize_duration(), humanize_file_size(), humanize_id(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), parse_url(), printf(), proper(), regexp_capture(),
regexp_capture_into_json(), regexp_match(), regexp_replace(),
replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
- spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
- unparse_url(), upper(), xpath()
+ spooky_hash(), startswith(), strfilter(), substr(), timezone(), trim(),
+ unicode(), unparse_url(), upper(), xpath()
Examples
#1 To test if the string 'notbad.jpg' ends with '.jpg':
;SELECT endswith('notbad.jpg', '.jpg') 
@@ -2352,13 +2474,13 @@ For support questions, email:
See Also
anonymize(), char(), charindex(), decode(), encode(), endswith(),
group_concat(), group_spooky_hash(), gunzip(), gzip(),
- humanize_duration(), humanize_file_size(), instr(), leftstr(),
- length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
- parse_url(), printf(), proper(), regexp_capture(),
+ humanize_duration(), humanize_file_size(), humanize_id(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), parse_url(), printf(), proper(), regexp_capture(),
regexp_capture_into_json(), regexp_match(), regexp_replace(),
replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
- spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
- unparse_url(), upper(), xpath()
+ spooky_hash(), startswith(), strfilter(), substr(), timezone(), trim(),
+ unicode(), unparse_url(), upper(), xpath()
Examples
#1 To extract key/value pairs from a string:
;SELECT extract('foo=1 bar=2 name="Rolo Tomassi"') 
@@ -2394,6 +2516,42 @@ For support questions, email:
+fstat(pattern)
+══════════════════════════════════════════════════════════════════════
+ A table-valued function for getting information about file
+ paths/globs
+Parameter
+ pattern The file path or glob pattern to query.
+Results
+ st_parent The parent path of the directory entry
+ st_name The name of the directory entry
+ st_dev The device number
+ st_ino The inode number
+ st_type The type of the entry
+ st_mode The protection mode
+ st_nlink The number of hard links to the entry
+ st_uid The ID of the owning user
+ st_user The user name
+ st_gid The ID of the owning group
+ st_group The group name
+ st_rdev The device type
+ st_size The size of the entry in bytes
+ st_blksize The optimal size for I/O
+ st_blocks Blocks allocated for the file
+ st_atime The last access time
+ st_mtime The last modified time
+ st_ctime The creation time
+ error Error message if there was a problem
+ looking up the entry
+ data The contents of the file
+
+Example
+#1 To read a file and raise an error if there is a problem:
+ ;SELECT ifnull(data, raise_error('cannot read: ' || st_name, error)) FROM
+  fstat('/non-existent')
+
+
+
generate_series(start, stop, [step])
══════════════════════════════════════════════════════════════════════
A table-valued-function that returns the whole numbers between a
@@ -2468,12 +2626,13 @@ For support questions, email:
See Also
anonymize(), char(), charindex(), decode(), encode(), endswith(),
extract(), group_spooky_hash(), gunzip(), gzip(), humanize_duration(),
- humanize_file_size(), instr(), leftstr(), length(), logfmt2json(),
- lower(), ltrim(), padc(), padl(), padr(), parse_url(), printf(),
- proper(), regexp_capture(), regexp_capture_into_json(), regexp_match(),
- regexp_replace(), replace(), replicate(), reverse(), rightstr(),
- rtrim(), sparkline(), spooky_hash(), startswith(), strfilter(),
- substr(), trim(), unicode(), unparse_url(), upper(), xpath()
+ humanize_file_size(), humanize_id(), instr(), leftstr(), length(),
+ logfmt2json(), lower(), ltrim(), padc(), padl(), padr(), parse_url(),
+ printf(), proper(), regexp_capture(), regexp_capture_into_json(),
+ regexp_match(), regexp_replace(), replace(), replicate(), reverse(),
+ rightstr(), rtrim(), sparkline(), spooky_hash(), startswith(),
+ strfilter(), substr(), timezone(), trim(), unicode(), unparse_url(),
+ upper(), xpath()
Examples
#1 To concatenate the values of the column 'ex_procname' from the table
'lnav_example_log':
@@ -2498,12 +2657,13 @@ For support questions, email:
See Also
anonymize(), char(), charindex(), decode(), encode(), endswith(),
extract(), group_concat(), gunzip(), gzip(), humanize_duration(),
- humanize_file_size(), instr(), leftstr(), length(), logfmt2json(),
- lower(), ltrim(), padc(), padl(), padr(), parse_url(), printf(),
- proper(), regexp_capture(), regexp_capture_into_json(), regexp_match(),
- regexp_replace(), replace(), replicate(), reverse(), rightstr(),
- rtrim(), sparkline(), spooky_hash(), startswith(), strfilter(),
- substr(), trim(), unicode(), unparse_url(), upper(), xpath()
+ humanize_file_size(), humanize_id(), instr(), leftstr(), length(),
+ logfmt2json(), lower(), ltrim(), padc(), padl(), padr(), parse_url(),
+ printf(), proper(), regexp_capture(), regexp_capture_into_json(),
+ regexp_match(), regexp_replace(), replace(), replicate(), reverse(),
+ rightstr(), rtrim(), sparkline(), spooky_hash(), startswith(),
+ strfilter(), substr(), timezone(), trim(), unicode(), unparse_url(),
+ upper(), xpath()
Example
#1 To produce a hash of all of the values of 'column1':
;SELECT group_spooky_hash(column1) FROM (VALUES ('abc'), ('123'))
@@ -2518,13 +2678,13 @@ For support questions, email:
See Also
anonymize(), char(), charindex(), decode(), encode(), endswith(),
extract(), group_concat(), group_spooky_hash(), gzip(),
- humanize_duration(), humanize_file_size(), instr(), leftstr(),
- length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
- parse_url(), printf(), proper(), regexp_capture(),
+ humanize_duration(), humanize_file_size(), humanize_id(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), parse_url(), printf(), proper(), regexp_capture(),
regexp_capture_into_json(), regexp_match(), regexp_replace(),
replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
- spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
- unparse_url(), upper(), xpath()
+ spooky_hash(), startswith(), strfilter(), substr(), timezone(), trim(),
+ unicode(), unparse_url(), upper(), xpath()
gzip(value, ...)
══════════════════════════════════════════════════════════════════════
@@ -2534,13 +2694,13 @@ For support questions, email:
See Also
anonymize(), char(), charindex(), decode(), encode(), endswith(),
extract(), group_concat(), group_spooky_hash(), gunzip(),
- humanize_duration(), humanize_file_size(), instr(), leftstr(),
- length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
- parse_url(), printf(), proper(), regexp_capture(),
+ humanize_duration(), humanize_file_size(), humanize_id(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), parse_url(), printf(), proper(), regexp_capture(),
regexp_capture_into_json(), regexp_match(), regexp_replace(),
replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
- spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
- unparse_url(), upper(), xpath()
+ spooky_hash(), startswith(), strfilter(), substr(), timezone(), trim(),
+ unicode(), unparse_url(), upper(), xpath()
hex(X)
══════════════════════════════════════════════════════════════════════
@@ -2563,14 +2723,14 @@ For support questions, email:
See Also
anonymize(), char(), charindex(), date(), datetime(), decode(),
encode(), endswith(), extract(), group_concat(), group_spooky_hash(),
- gunzip(), gzip(), humanize_file_size(), instr(), julianday(),
- leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
- padr(), parse_url(), printf(), proper(), regexp_capture(),
- regexp_capture_into_json(), regexp_match(), regexp_replace(),
- replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
- spooky_hash(), startswith(), strfilter(), strftime(), substr(), time(),
- timediff(), timeslice(), trim(), unicode(), unparse_url(), upper(),
- xpath()
+ gunzip(), gzip(), humanize_file_size(), humanize_id(), instr(),
+ julianday(), leftstr(), length(), logfmt2json(), lower(), ltrim(),
+ padc(), padl(), padr(), parse_url(), printf(), proper(),
+ regexp_capture(), regexp_capture_into_json(), regexp_match(),
+ regexp_replace(), replace(), replicate(), reverse(), rightstr(),
+ rtrim(), sparkline(), spooky_hash(), startswith(), strfilter(),
+ strftime(), substr(), time(), timediff(), timeslice(), timezone(),
+ timezone(), trim(), unicode(), unparse_url(), upper(), xpath()
Examples
#1 To format a duration:
;SELECT humanize_duration(15 * 60) 
@@ -2589,18 +2749,40 @@ For support questions, email:
See Also
anonymize(), char(), charindex(), decode(), encode(), endswith(),
extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
- humanize_duration(), instr(), leftstr(), length(), logfmt2json(),
- lower(), ltrim(), padc(), padl(), padr(), parse_url(), printf(),
- proper(), regexp_capture(), regexp_capture_into_json(), regexp_match(),
- regexp_replace(), replace(), replicate(), reverse(), rightstr(),
- rtrim(), sparkline(), spooky_hash(), startswith(), strfilter(),
- substr(), trim(), unicode(), unparse_url(), upper(), xpath()
+ humanize_duration(), humanize_id(), instr(), leftstr(), length(),
+ logfmt2json(), lower(), ltrim(), padc(), padl(), padr(), parse_url(),
+ printf(), proper(), regexp_capture(), regexp_capture_into_json(),
+ regexp_match(), regexp_replace(), replace(), replicate(), reverse(),
+ rightstr(), rtrim(), sparkline(), spooky_hash(), startswith(),
+ strfilter(), substr(), timezone(), trim(), unicode(), unparse_url(),
+ upper(), xpath()
Example
#1 To format an amount:
;SELECT humanize_file_size(10 * 1024 * 1024) 
+humanize_id(id)
+══════════════════════════════════════════════════════════════════════
+ Colorize the given ID using ANSI escape codes.
+Parameter
+ id The identifier to color
+See Also
+ anonymize(), char(), charindex(), decode(), encode(), endswith(),
+ extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
+ humanize_duration(), humanize_file_size(), instr(), leftstr(),
+ length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
+ parse_url(), printf(), proper(), regexp_capture(),
+ regexp_capture_into_json(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), timezone(), trim(),
+ unicode(), unparse_url(), upper(), xpath()
+Example
+#1 To colorize the ID 'cluster1':
+ ;SELECT humanize_id('cluster1') 
+
+
+
ifnull(X, Y)
══════════════════════════════════════════════════════════════════════
Returns a copy of its first non-NULL argument, or NULL if both
@@ -2626,13 +2808,13 @@ For support questions, email:
See Also
anonymize(), char(), charindex(), decode(), encode(), endswith(),
extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
- humanize_duration(), humanize_file_size(), leftstr(), length(),
- logfmt2json(), lower(), ltrim(), padc(), padl(), padr(), parse_url(),
- printf(), proper(), regexp_capture(), regexp_capture_into_json(),
- regexp_match(), regexp_replace(), replace(), replicate(), reverse(),
- rightstr(), rtrim(), sparkline(), spooky_hash(), startswith(),
- strfilter(), substr(), trim(), unicode(), unparse_url(), upper(),
- xpath()
+ humanize_duration(), humanize_file_size(), humanize_id(), leftstr(),
+ length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
+ parse_url(), printf(), proper(), regexp_capture(),
+ regexp_capture_into_json(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), timezone(), trim(),
+ unicode(), unparse_url(), upper(), xpath()
Example
#1 To test get the position of 'b' in the string 'abc':
;SELECT instr('abc', 'b') 
@@ -2647,8 +2829,11 @@ For support questions, email:
ptr The JSON-Pointer to lookup in the object.
default The default value if the value was not found
See Also
- json_concat(), json_contains(), json_group_array(),
- json_group_object(), yaml_to_json()
+ json(), json_array(), json_array_length(), json_concat(),
+ json_contains(), json_each(), json_extract(), json_group_array(),
+ json_group_object(), json_insert(), json_object(), json_quote(),
+ json_remove(), json_replace(), json_set(), json_tree(), json_type(),
+ json_valid(), yaml_to_json()
Examples
#1 To get the root of a JSON value:
;SELECT jget('1', '') 
@@ -2691,9 +2876,65 @@ For support questions, email:
+json(X)
+══════════════════════════════════════════════════════════════════════
+ Verifies that its argument is valid JSON and returns a minified
+ version or throws an error.
+Parameter
+ X The string to interpret as JSON.
+See Also
+ jget(), json_array(), json_array_length(), json_concat(),
+ json_contains(), json_each(), json_extract(), json_group_array(),
+ json_group_object(), json_insert(), json_object(), json_quote(),
+ json_remove(), json_replace(), json_set(), json_tree(), json_type(),
+ json_valid(), yaml_to_json()
+
+json_array(X, ...)
+══════════════════════════════════════════════════════════════════════
+ Constructs a JSON array from its arguments.
+Parameter
+ X The values of the JSON array
+See Also
+ jget(), json(), json_array_length(), json_concat(), json_contains(),
+ json_each(), json_extract(), json_group_array(), json_group_object(),
+ json_insert(), json_object(), json_quote(), json_remove(),
+ json_replace(), json_set(), json_tree(), json_type(), json_valid(),
+ yaml_to_json()
+Examples
+#1 To create an array of all types:
+ ;SELECT json_array(NULL, 1, 2.1, 'three', json_array(4), json_object('five', 'six'))
+
+
+#2 To create an empty array:
+ ;SELECT json_array() 
+
+
+
+json_array_length(X, [P])
+══════════════════════════════════════════════════════════════════════
+ Returns the length of a JSON array.
+Parameters
+ X The JSON object.
+ P The path to the array in 'X'.
+See Also
+ jget(), json(), json_array(), json_concat(), json_contains(),
+ json_each(), json_extract(), json_group_array(), json_group_object(),
+ json_insert(), json_object(), json_quote(), json_remove(),
+ json_replace(), json_set(), json_tree(), json_type(), json_valid(),
+ yaml_to_json()
+Examples
+#1 To get the length of an array:
+ ;SELECT json_array_length('[1, 2, 3]') 
+
+
+#2 To get the length of a nested array:
+ ;SELECT json_array_length('{"arr": [1, 2, 3]}', '$.arr')
+
+
+
json_concat(json, value, ...)
══════════════════════════════════════════════════════════════════════
- Returns an array with the given values concatenated onto the end.
+ Returns an array with the given values concatenated onto the end.
If the initial value is null, the result will be an array with the
given elements. If the initial value is an array, the result will
be an array with the given values at the end. If the initial value
@@ -2703,7 +2944,10 @@ For support questions, email:
json The initial JSON value.
value The value(s) to add to the end of the array.
See Also
- jget(), json_contains(), json_group_array(), json_group_object(),
+ jget(), json(), json_array(), json_array_length(), json_contains(),
+ json_each(), json_extract(), json_group_array(), json_group_object(),
+ json_insert(), json_object(), json_quote(), json_remove(),
+ json_replace(), json_set(), json_tree(), json_type(), json_valid(),
yaml_to_json()
Examples
#1 To append the number 4 to null:
@@ -2726,7 +2970,10 @@ For support questions, email:
json The JSON value to query.
value The value to look for in the first argument
See Also
- jget(), json_concat(), json_group_array(), json_group_object(),
+ jget(), json(), json_array(), json_array_length(), json_concat(),
+ json_each(), json_extract(), json_group_array(), json_group_object(),
+ json_insert(), json_object(), json_quote(), json_remove(),
+ json_replace(), json_set(), json_tree(), json_type(), json_valid(),
yaml_to_json()
Examples
#1 To test if a JSON array contains the number 4:
@@ -2738,13 +2985,69 @@ For support questions, email:
+json_each(X, [P])
+══════════════════════════════════════════════════════════════════════
+ A table-valued-function that returns the children of the top-level
+ JSON value
+Parameters
+ X The JSON value to query
+ P The path to the value to query
+Results
+ key The array index for elements of an array or
+ property names of the object
+ value The value for the current element
+ type The type of the current element
+ atom The SQL value of the element, if it is a
+ primitive type
+ fullkey The path to the current element
+See Also
+ jget(), json(), json_array(), json_array_length(), json_concat(),
+ json_contains(), json_extract(), json_group_array(),
+ json_group_object(), json_insert(), json_object(), json_quote(),
+ json_remove(), json_replace(), json_set(), json_tree(), json_type(),
+ json_valid(), yaml_to_json()
+Example
+#1 To iterate over an array:
+ ;SELECT * FROM json_each('[null,1,"two",{"three":4.5}]')
+
+
+
+json_extract(X, P, ...)
+══════════════════════════════════════════════════════════════════════
+ Returns the value(s) from the given JSON at the given path(s).
+Parameters
+ X The JSON value.
+ P The path to extract.
+See Also
+ jget(), json(), json_array(), json_array_length(), json_concat(),
+ json_contains(), json_each(), json_group_array(), json_group_object(),
+ json_insert(), json_object(), json_quote(), json_remove(),
+ json_replace(), json_set(), json_tree(), json_type(), json_valid(),
+ yaml_to_json()
+Examples
+#1 To get a number:
+ ;SELECT json_extract('{"num": 1}', '$.num') 
+
+
+#2 To get two numbers:
+ ;SELECT json_extract('{"num": 1, "val": 2}', '$.num', '$.val')
+
+
+#3 To get an object:
+ ;SELECT json_extract('{"obj": {"sub": 1}}', '$.obj')
+
+
+
json_group_array(value, ...)
══════════════════════════════════════════════════════════════════════
Collect the given values from a query into a JSON array
Parameter
value The values to append to the array
See Also
- jget(), json_concat(), json_contains(), json_group_object(),
+ jget(), json(), json_array(), json_array_length(), json_concat(),
+ json_contains(), json_each(), json_extract(), json_group_object(),
+ json_insert(), json_object(), json_quote(), json_remove(),
+ json_replace(), json_set(), json_tree(), json_type(), json_valid(),
yaml_to_json()
Examples
#1 To create an array from arguments:
@@ -2763,7 +3066,10 @@ For support questions, email:
name The property name for the value
value The value to add to the object
See Also
- jget(), json_concat(), json_contains(), json_group_array(),
+ jget(), json(), json_array(), json_array_length(), json_concat(),
+ json_contains(), json_each(), json_extract(), json_group_array(),
+ json_insert(), json_object(), json_quote(), json_remove(),
+ json_replace(), json_set(), json_tree(), json_type(), json_valid(),
yaml_to_json()
Examples
#1 To create an object from arguments:
@@ -2775,17 +3081,242 @@ For support questions, email:
+json_insert(X, P, Y)
+══════════════════════════════════════════════════════════════════════
+ Inserts values into a JSON object/array at the given locations, if
+ it does not already exist
+Parameters
+ X The JSON value to update
+ P The path to the insertion point. A '#' array index means
+ append the value
+ Y The value to insert
+See Also
+ jget(), json(), json_array(), json_array_length(), json_concat(),
+ json_contains(), json_each(), json_extract(), json_group_array(),
+ json_group_object(), json_object(), json_quote(), json_remove(),
+ json_replace(), json_set(), json_tree(), json_type(), json_valid(),
+ yaml_to_json()
+Examples
+#1 To append to an array:
+ ;SELECT json_insert('[1, 2]', '$[#]', 3) 
+
+
+#2 To update an object:
+ ;SELECT json_insert('{"a": 1}', '$.b', 2) 
+
+
+#3 To ensure a value is set:
+ ;SELECT json_insert('{"a": 1}', '$.a', 2) 
+
+
+#4 To update multiple values:
+ ;SELECT json_insert('{"a": 1}', '$.b', 2, '$.c', 3)
+
+
+
+json_object(N, V)
+══════════════════════════════════════════════════════════════════════
+ Create a JSON object from the given arguments
+Parameters
+ N The property name
+ V The property value
+See Also
+ jget(), json(), json_array(), json_array_length(), json_concat(),
+ json_contains(), json_each(), json_extract(), json_group_array(),
+ json_group_object(), json_insert(), json_quote(), json_remove(),
+ json_replace(), json_set(), json_tree(), json_type(), json_valid(),
+ yaml_to_json()
+Examples
+#1 To create an object:
+ ;SELECT json_object('a', 1, 'b', 'c') 
+
+
+#2 To create an empty object:
+ ;SELECT json_object() 
+
+
+
+json_quote(X)
+══════════════════════════════════════════════════════════════════════
+ Returns the JSON representation of the given value, if it is not
+ already JSON
+Parameter
+ X The value to convert
+See Also
+ jget(), json(), json_array(), json_array_length(), json_concat(),
+ json_contains(), json_each(), json_extract(), json_group_array(),
+ json_group_object(), json_insert(), json_object(), json_remove(),
+ json_replace(), json_set(), json_tree(), json_type(), json_valid(),
+ yaml_to_json()
+Examples
+#1 To convert a string:
+ ;SELECT json_quote('Hello, World!') 
+
+
+#2 To pass through an existing JSON value:
+ ;SELECT json_quote(json('"Hello, World!"')) 
+
+
+
+json_remove(X, P, ...)
+══════════════════════════════════════════════════════════════════════
+ Removes paths from a JSON value
+Parameters
+ X The JSON value to update
+ P The paths to remove
+See Also
+ jget(), json(), json_array(), json_array_length(), json_concat(),
+ json_contains(), json_each(), json_extract(), json_group_array(),
+ json_group_object(), json_insert(), json_object(), json_quote(),
+ json_replace(), json_set(), json_tree(), json_type(), json_valid(),
+ yaml_to_json()
+Examples
+#1 To remove elements of an array:
+ ;SELECT json_remove('[1,2,3]', '$[1]', '$[1]') 
+
+
+#2 To remove object properties:
+ ;SELECT json_remove('{"a":1,"b":2}', '$.b') 
+
+
+
+json_replace(X, P, Y)
+══════════════════════════════════════════════════════════════════════
+ Replaces existing values in a JSON object/array at the given
+ locations
+Parameters
+ X The JSON value to update
+ P The path to replace
+ Y The new value for the property
+See Also
+ jget(), json(), json_array(), json_array_length(), json_concat(),
+ json_contains(), json_each(), json_extract(), json_group_array(),
+ json_group_object(), json_insert(), json_object(), json_quote(),
+ json_remove(), json_set(), json_tree(), json_type(), json_valid(),
+ yaml_to_json()
+Examples
+#1 To replace an existing value:
+ ;SELECT json_replace('{"a": 1}', '$.a', 2) 
+
+
+#2 To replace a value without creating a new property:
+ ;SELECT json_replace('{"a": 1}', '$.a', 2, '$.b', 3)
+
+
+
+json_set(X, P, Y)
+══════════════════════════════════════════════════════════════════════
+ Inserts or replaces existing values in a JSON object/array at the
+ given locations
+Parameters
+ X The JSON value to update
+ P The path to the insertion point. A '#' array index means
+ append the value
+ Y The value to set
+See Also
+ jget(), json(), json_array(), json_array_length(), json_concat(),
+ json_contains(), json_each(), json_extract(), json_group_array(),
+ json_group_object(), json_insert(), json_object(), json_quote(),
+ json_remove(), json_replace(), json_tree(), json_type(), json_valid(),
+ yaml_to_json()
+Examples
+#1 To replace an existing array element:
+ ;SELECT json_set('[1, 2]', '$[1]', 3) 
+
+
+#2 To replace a value and create a new property:
+ ;SELECT json_set('{"a": 1}', '$.a', 2, '$.b', 3) 
+
+
+
+json_tree(X, [P])
+══════════════════════════════════════════════════════════════════════
+ A table-valued-function that recursively descends through a JSON
+ value
+Parameters
+ X The JSON value to query
+ P The path to the value to query
+Results
+ key The array index for elements of an array or
+ property names of the object
+ value The value for the current element
+ type The type of the current element
+ atom The SQL value of the element, if it is a
+ primitive type
+ fullkey The path to the current element
+ path The path to the container of this element
+See Also
+ jget(), json(), json_array(), json_array_length(), json_concat(),
+ json_contains(), json_each(), json_extract(), json_group_array(),
+ json_group_object(), json_insert(), json_object(), json_quote(),
+ json_remove(), json_replace(), json_set(), json_type(), json_valid(),
+ yaml_to_json()
+Example
+#1 To iterate over an array:
+ ;SELECT key,value,type,atom,fullkey,path FROM
+  json_tree('[null,1,"two",{"three":4.5}]')
+
+
+
+json_type(X, [P])
+══════════════════════════════════════════════════════════════════════
+ Returns the type of a JSON value
+Parameters
+ X The JSON value to query
+ P The path to the value
+See Also
+ jget(), json(), json_array(), json_array_length(), json_concat(),
+ json_contains(), json_each(), json_extract(), json_group_array(),
+ json_group_object(), json_insert(), json_object(), json_quote(),
+ json_remove(), json_replace(), json_set(), json_tree(), json_valid(),
+ yaml_to_json()
+Examples
+#1 To get the type of a value:
+ ;SELECT json_type('[null,1,2.1,"three",{"four":5}]')
+
+
+#2 To get the type of an array element:
+ ;SELECT json_type('[null,1,2.1,"three",{"four":5}]', '$[0]')
+
+
+#3 To get the type of a string:
+ ;SELECT json_type('[null,1,2.1,"three",{"four":5}]', '$[3]')
+
+
+
+json_valid(X)
+══════════════════════════════════════════════════════════════════════
+ Tests if the given value is valid JSON
+Parameter
+ X The value to check
+See Also
+ jget(), json(), json_array(), json_array_length(), json_concat(),
+ json_contains(), json_each(), json_extract(), json_group_array(),
+ json_group_object(), json_insert(), json_object(), json_quote(),
+ json_remove(), json_replace(), json_set(), json_tree(), json_type(),
+ yaml_to_json()
+Examples
+#1 To check an empty string:
+ ;SELECT json_valid('') 
+
+
+#2 To check a string:
+ ;SELECT json_valid('"a"') 
+
+
+
julianday(timestring, modifier, ...)
══════════════════════════════════════════════════════════════════════
Returns the number of days since noon in Greenwich on November 24,
4714 B.C.
Parameters
- timestring The string to convert to a date with time.
+ timestring The string to convert to a date with
+ time.
modifier A transformation that is applied to the
value to the left.
See Also
date(), datetime(), humanize_duration(), strftime(), time(),
- timediff(), timeslice()
+ timediff(), timeslice(), timezone()
Examples
#1 To get the julian day from the timestamp '2017-01-02T03:04:05':
;SELECT julianday('2017-01-02T03:04:05') 
@@ -2802,11 +3333,13 @@ For support questions, email:
lag(expr, [offset], [default])
══════════════════════════════════════════════════════════════════════
- Returns the result of evaluating the expression against the previous
- row in the partition.
+ Returns the result of evaluating the expression against the
+ previous row in the partition.
Parameters
- expr The expression to execute over the previous row
- offset The offset from the current row in the partition
+ expr The expression to execute over the previous
+ row
+ offset The offset from the current row in the
+ partition
default The default value if the previous row does not
exist instead of NULL
See Also
@@ -2821,8 +3354,8 @@ For support questions, email:
last_value(expr)
══════════════════════════════════════════════════════════════════════
- Returns the result of evaluating the expression against the last row
- in the window frame.
+ Returns the result of evaluating the expression against the last
+ row in the window frame.
Parameter
expr The expression to execute over the last row
See Also
@@ -2831,13 +3364,14 @@ For support questions, email:
lead(expr, [offset], [default])
══════════════════════════════════════════════════════════════════════
- Returns the result of evaluating the expression against the next row
- in the partition.
+ Returns the result of evaluating the expression against the next
+ row in the partition.
Parameters
expr The expression to execute over the next row
- offset The offset from the current row in the partition
- default The default value if the next row does not exist
- instead of NULL
+ offset The offset from the current row in the
+ partition
+ default The default value if the next row does not
+ exist instead of NULL
See Also
cume_dist(), dense_rank(), first_value(), lag(), last_value(),
nth_value(), ntile(), percent_rank(), rank(), row_number()
@@ -2852,13 +3386,13 @@ For support questions, email:
See Also
anonymize(), char(), charindex(), decode(), encode(), endswith(),
extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
- humanize_duration(), humanize_file_size(), instr(), length(),
- logfmt2json(), lower(), ltrim(), padc(), padl(), padr(), parse_url(),
- printf(), proper(), regexp_capture(), regexp_capture_into_json(),
- regexp_match(), regexp_replace(), replace(), replicate(), reverse(),
- rightstr(), rtrim(), sparkline(), spooky_hash(), startswith(),
- strfilter(), substr(), trim(), unicode(), unparse_url(), upper(),
- xpath()
+ humanize_duration(), humanize_file_size(), humanize_id(), instr(),
+ length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
+ parse_url(), printf(), proper(), regexp_capture(),
+ regexp_capture_into_json(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), timezone(), trim(),
+ unicode(), unparse_url(), upper(), xpath()
Examples
#1 To get the first character of the string 'abc':
;SELECT leftstr('abc', 1) 
@@ -2878,13 +3412,13 @@ For support questions, email:
See Also
anonymize(), char(), charindex(), decode(), encode(), endswith(),
extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
- humanize_duration(), humanize_file_size(), instr(), leftstr(),
- logfmt2json(), lower(), ltrim(), padc(), padl(), padr(), parse_url(),
- printf(), proper(), regexp_capture(), regexp_capture_into_json(),
- regexp_match(), regexp_replace(), replace(), replicate(), reverse(),
- rightstr(), rtrim(), sparkline(), spooky_hash(), startswith(),
- strfilter(), substr(), trim(), unicode(), unparse_url(), upper(),
- xpath()
+ humanize_duration(), humanize_file_size(), humanize_id(), instr(),
+ leftstr(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
+ parse_url(), printf(), proper(), regexp_capture(),
+ regexp_capture_into_json(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), timezone(), trim(),
+ unicode(), unparse_url(), upper(), xpath()
Example
#1 To get the length of the string 'abc':
;SELECT length('abc') 
@@ -2895,12 +3429,12 @@ For support questions, email:
══════════════════════════════════════════════════════════════════════
Match a string against a pattern
Parameters
- pattern The pattern to match. A percent symbol (%) will
- match zero or more characters and an underscore (_) will
- match a single character.
+ pattern The pattern to match. A percent symbol (%)
+ will match zero or more characters and an underscore (_)
+ will match a single character.
str The string to match
- escape The escape character that can be used to prefix
- a literal percent or underscore in the pattern.
+ escape The escape character that can be used to
+ prefix a literal percent or underscore in the pattern.
Examples
#1 To test if the string 'aabcc' contains the letter 'b':
@@ -2981,6 +3515,11 @@ For support questions, email:
+log_msg_line()
+══════════════════════════════════════════════════════════════════════
+ Return the starting line number of the focused log message.
+
+
log_top_datetime()
══════════════════════════════════════════════════════════════════════
Return the timestamp of the line at the top of the log view.
@@ -2988,7 +3527,7 @@ For support questions, email:
log_top_line()
══════════════════════════════════════════════════════════════════════
- Return the line number at the top of the log view.
+ Return the number of the focused line of the log view.
logfmt2json(str)
@@ -2999,13 +3538,13 @@ For support questions, email:
See Also
anonymize(), char(), charindex(), decode(), encode(), endswith(),
extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
- humanize_duration(), humanize_file_size(), instr(), leftstr(),
- length(), lower(), ltrim(), padc(), padl(), padr(), parse_url(),
- printf(), proper(), regexp_capture(), regexp_capture_into_json(),
- regexp_match(), regexp_replace(), replace(), replicate(), reverse(),
- rightstr(), rtrim(), sparkline(), spooky_hash(), startswith(),
- strfilter(), substr(), trim(), unicode(), unparse_url(), upper(),
- xpath()
+ humanize_duration(), humanize_file_size(), humanize_id(), instr(),
+ leftstr(), length(), lower(), ltrim(), padc(), padl(), padr(),
+ parse_url(), printf(), proper(), regexp_capture(),
+ regexp_capture_into_json(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), timezone(), trim(),
+ unicode(), unparse_url(), upper(), xpath()
Example
#1 To extract key/value pairs from a log message:
;SELECT logfmt2json('foo=1 bar=2 name="Rolo Tomassi"')
@@ -3021,13 +3560,13 @@ For support questions, email:
See Also
anonymize(), char(), charindex(), decode(), encode(), endswith(),
extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
- humanize_duration(), humanize_file_size(), instr(), leftstr(),
- length(), logfmt2json(), ltrim(), padc(), padl(), padr(), parse_url(),
- printf(), proper(), regexp_capture(), regexp_capture_into_json(),
- regexp_match(), regexp_replace(), replace(), replicate(), reverse(),
- rightstr(), rtrim(), sparkline(), spooky_hash(), startswith(),
- strfilter(), substr(), trim(), unicode(), unparse_url(), upper(),
- xpath()
+ humanize_duration(), humanize_file_size(), humanize_id(), instr(),
+ leftstr(), length(), logfmt2json(), ltrim(), padc(), padl(), padr(),
+ parse_url(), printf(), proper(), regexp_capture(),
+ regexp_capture_into_json(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), timezone(), trim(),
+ unicode(), unparse_url(), upper(), xpath()
Example
#1 To lowercase the string 'AbC':
;SELECT lower('AbC') 
@@ -3044,13 +3583,13 @@ For support questions, email:
See Also
anonymize(), char(), charindex(), decode(), encode(), endswith(),
extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
- humanize_duration(), humanize_file_size(), instr(), leftstr(),
- length(), logfmt2json(), lower(), padc(), padl(), padr(), parse_url(),
- printf(), proper(), regexp_capture(), regexp_capture_into_json(),
- regexp_match(), regexp_replace(), replace(), replicate(), reverse(),
- rightstr(), rtrim(), sparkline(), spooky_hash(), startswith(),
- strfilter(), substr(), trim(), unicode(), unparse_url(), upper(),
- xpath()
+ humanize_duration(), humanize_file_size(), humanize_id(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), padc(), padl(), padr(),
+ parse_url(), printf(), proper(), regexp_capture(),
+ regexp_capture_into_json(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), timezone(), trim(),
+ unicode(), unparse_url(), upper(), xpath()
Examples
#1 To trim the leading space characters from the string ' abc':
;SELECT ltrim(' abc') 
@@ -3066,8 +3605,8 @@ For support questions, email:
Returns the argument with the maximum value, or return NULL if any
argument is NULL.
Parameter
- X The numbers to find the maximum of. If only one argument is
- given, this function operates as an aggregate.
+ X The numbers to find the maximum of. If only one argument
+ is given, this function operates as an aggregate.
See Also
abs(), acos(), acosh(), asin(), asinh(), atan(), atan2(), atanh(),
atn2(), avg(), ceil(), degrees(), exp(), floor(), log(), log10(),
@@ -3088,8 +3627,8 @@ For support questions, email:
Returns the argument with the minimum value, or return NULL if any
argument is NULL.
Parameter
- X The numbers to find the minimum of. If only one argument is
- given, this function operates as an aggregate.
+ X The numbers to find the minimum of. If only one argument
+ is given, this function operates as an aggregate.
See Also
abs(), acos(), acosh(), asin(), asinh(), atan(), atan2(), atanh(),
atn2(), avg(), ceil(), degrees(), exp(), floor(), log(), log10(),
@@ -3107,8 +3646,8 @@ For support questions, email:
nth_value(expr, N)
══════════════════════════════════════════════════════════════════════
- Returns the result of evaluating the expression against the nth row
- in the window frame.
+ Returns the result of evaluating the expression against the nth
+ row in the window frame.
Parameters
expr The expression to execute over the nth row
N The row number
@@ -3153,13 +3692,13 @@ For support questions, email:
See Also
anonymize(), char(), charindex(), decode(), encode(), endswith(),
extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
- humanize_duration(), humanize_file_size(), instr(), leftstr(),
- length(), logfmt2json(), lower(), ltrim(), padl(), padr(), parse_url(),
- printf(), proper(), regexp_capture(), regexp_capture_into_json(),
- regexp_match(), regexp_replace(), replace(), replicate(), reverse(),
- rightstr(), rtrim(), sparkline(), spooky_hash(), startswith(),
- strfilter(), substr(), trim(), unicode(), unparse_url(), upper(),
- xpath()
+ humanize_duration(), humanize_file_size(), humanize_id(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padl(), padr(),
+ parse_url(), printf(), proper(), regexp_capture(),
+ regexp_capture_into_json(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), timezone(), trim(),
+ unicode(), unparse_url(), upper(), xpath()
Examples
#1 To pad the string 'abc' to a length of six characters:
;SELECT padc('abc', 6) || 'def' 
@@ -3180,13 +3719,13 @@ For support questions, email:
See Also
anonymize(), char(), charindex(), decode(), encode(), endswith(),
extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
- humanize_duration(), humanize_file_size(), instr(), leftstr(),
- length(), logfmt2json(), lower(), ltrim(), padc(), padr(), parse_url(),
- printf(), proper(), regexp_capture(), regexp_capture_into_json(),
- regexp_match(), regexp_replace(), replace(), replicate(), reverse(),
- rightstr(), rtrim(), sparkline(), spooky_hash(), startswith(),
- strfilter(), substr(), trim(), unicode(), unparse_url(), upper(),
- xpath()
+ humanize_duration(), humanize_file_size(), humanize_id(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padr(),
+ parse_url(), printf(), proper(), regexp_capture(),
+ regexp_capture_into_json(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), timezone(), trim(),
+ unicode(), unparse_url(), upper(), xpath()
Examples
#1 To pad the string 'abc' to a length of six characters:
;SELECT padl('abc', 6) 
@@ -3207,13 +3746,13 @@ For support questions, email:
See Also
anonymize(), char(), charindex(), decode(), encode(), endswith(),
extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
- humanize_duration(), humanize_file_size(), instr(), leftstr(),
- length(), logfmt2json(), lower(), ltrim(), padc(), padl(), parse_url(),
- printf(), proper(), regexp_capture(), regexp_capture_into_json(),
- regexp_match(), regexp_replace(), replace(), replicate(), reverse(),
- rightstr(), rtrim(), sparkline(), spooky_hash(), startswith(),
- strfilter(), substr(), trim(), unicode(), unparse_url(), upper(),
- xpath()
+ humanize_duration(), humanize_file_size(), humanize_id(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ parse_url(), printf(), proper(), regexp_capture(),
+ regexp_capture_into_json(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), timezone(), trim(),
+ unicode(), unparse_url(), upper(), xpath()
Examples
#1 To pad the string 'abc' to a length of six characters:
;SELECT padr('abc', 6) || 'def' 
@@ -3226,31 +3765,33 @@ For support questions, email:
parse_url(url)
══════════════════════════════════════════════════════════════════════
- Parse a URL and return the components in a JSON object. Limitations:
- not all URL schemes are supported and repeated query parameters are
- not captured.
+ Parse a URL and return the components in a JSON object.
+ Limitations: not all URL schemes are supported and repeated query
+ parameters are not captured.
Parameter
url The URL to parse
Results
scheme The URL's scheme
- username The name of the user specified in the URL
+ username The name of the user specified in the
+ URL
password The password specified in the URL
host The host name / IP specified in the URL
port The port specified in the URL
path The path specified in the URL
query The query string in the URL
- parameters An object containing the query parameters
+ parameters An object containing the query
+ parameters
fragment The fragment specified in the URL
See Also
anonymize(), char(), charindex(), decode(), encode(), endswith(),
extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
- humanize_duration(), humanize_file_size(), instr(), leftstr(),
- length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
- printf(), proper(), regexp_capture(), regexp_capture_into_json(),
- regexp_match(), regexp_replace(), replace(), replicate(), reverse(),
- rightstr(), rtrim(), sparkline(), spooky_hash(), startswith(),
- strfilter(), substr(), trim(), unicode(), unparse_url(), unparse_url(),
- upper(), xpath()
+ humanize_duration(), humanize_file_size(), humanize_id(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), printf(), proper(), regexp_capture(),
+ regexp_capture_into_json(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), timezone(), trim(),
+ unicode(), unparse_url(), unparse_url(), upper(), xpath()
Examples
#1 To parse the URL 'https://example.com/search?q=hello%20world':
;SELECT parse_url('https://example.com/search?q=hello%20world')
@@ -3301,23 +3842,23 @@ For support questions, email:
printf(format, X)
══════════════════════════════════════════════════════════════════════
- Returns a string with this functions arguments substituted into the
- given format. Substitution points are specified using percent (%)
- options, much like the standard C printf() function.
+ Returns a string with this functions arguments substituted into
+ the given format. Substitution points are specified using percent
+ (%) options, much like the standard C printf() function.
Parameters
format The format of the string to return.
- X The argument to substitute at a given position in
- the format.
+ X The argument to substitute at a given position
+ in the format.
See Also
anonymize(), char(), charindex(), decode(), encode(), endswith(),
extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
- humanize_duration(), humanize_file_size(), instr(), leftstr(),
- length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
- parse_url(), proper(), regexp_capture(), regexp_capture_into_json(),
- regexp_match(), regexp_replace(), replace(), replicate(), reverse(),
- rightstr(), rtrim(), sparkline(), spooky_hash(), startswith(),
- strfilter(), substr(), trim(), unicode(), unparse_url(), upper(),
- xpath()
+ humanize_duration(), humanize_file_size(), humanize_id(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), parse_url(), proper(), regexp_capture(),
+ regexp_capture_into_json(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), timezone(), trim(),
+ unicode(), unparse_url(), upper(), xpath()
Examples
#1 To substitute 'World' into the string 'Hello, %s!':
;SELECT printf('Hello, %s!', 'World') 
@@ -3340,13 +3881,13 @@ For support questions, email:
See Also
anonymize(), char(), charindex(), decode(), encode(), endswith(),
extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
- humanize_duration(), humanize_file_size(), instr(), leftstr(),
- length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
- parse_url(), printf(), regexp_capture(), regexp_capture_into_json(),
- regexp_match(), regexp_replace(), replace(), replicate(), reverse(),
- rightstr(), rtrim(), sparkline(), spooky_hash(), startswith(),
- strfilter(), substr(), trim(), unicode(), unparse_url(), upper(),
- xpath()
+ humanize_duration(), humanize_file_size(), humanize_id(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), parse_url(), printf(), regexp_capture(),
+ regexp_capture_into_json(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), substr(), timezone(), trim(),
+ unicode(), unparse_url(), upper(), xpath()
Example
#1 To capitalize the words in the string 'hello, world!':
;SELECT proper('hello, world!') 
@@ -3385,11 +3926,17 @@ For support questions, email:
-raise_error(msg)
+raise_error(msg, [reason])
══════════════════════════════════════════════════════════════════════
Raises an error with the given message when executed
-Parameter
- msg The error message
+Parameters
+ msg The error message
+ reason The reason the error occurred
+
+Example
+#1 To raise an error if a variable is not set:
+ ;SELECT ifnull($val, raise_error('please set $val', 'because'))
+
random()
@@ -3454,23 +4001,24 @@ For support questions, email:
regex.
capture_name The name of the capture in the
regex.
- capture_count The total number of captures in the
- regex.
+ capture_count The total number of captures in
+ the regex.
range_start The start of the capture in the
input string.
- range_stop The stop of the capture in the input
+ range_stop The stop of the capture in the
+ input string.
+ content The captured value from the
string.
- content The captured value from the string.
See Also
anonymize(), char(), charindex(), decode(), encode(), endswith(),
extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
- humanize_duration(), humanize_file_size(), instr(), leftstr(),
- length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
- parse_url(), printf(), proper(), regexp_capture_into_json(),
+ humanize_duration(), humanize_file_size(), humanize_id(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), parse_url(), printf(), proper(), regexp_capture_into_json(),
regexp_match(), regexp_replace(), replace(), replicate(), reverse(),
rightstr(), rtrim(), sparkline(), spooky_hash(), startswith(),
- strfilter(), substr(), trim(), unicode(), unparse_url(), upper(),
- xpath()
+ strfilter(), substr(), timezone(), trim(), unicode(), unparse_url(),
+ upper(), xpath()
Example
#1 To extract the key/value pairs 'a'/1 and 'b'/2 from the string 'a=1; b=2':
;SELECT * FROM regexp_capture('a=1; b=2', '(\w+)=(\d+)')
@@ -3498,12 +4046,13 @@ For support questions, email:
See Also
anonymize(), char(), charindex(), decode(), encode(), endswith(),
extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
- humanize_duration(), humanize_file_size(), instr(), leftstr(),
- length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
- parse_url(), printf(), proper(), regexp_capture(), regexp_match(),
- regexp_replace(), replace(), replicate(), reverse(), rightstr(),
- rtrim(), sparkline(), spooky_hash(), startswith(), strfilter(),
- substr(), trim(), unicode(), unparse_url(), upper(), xpath()
+ humanize_duration(), humanize_file_size(), humanize_id(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), parse_url(), printf(), proper(), regexp_capture(),
+ regexp_match(), regexp_replace(), replace(), replicate(), reverse(),
+ rightstr(), rtrim(), sparkline(), spooky_hash(), startswith(),
+ strfilter(), substr(), timezone(), trim(), unicode(), unparse_url(),
+ upper(), xpath()
Example
#1 To extract the key/value pairs 'a'/1 and 'b'/2 from the string 'a=1; b=2':
;SELECT * FROM regexp_capture_into_json('a=1; b=2', '(\w+)=(\d+)')
@@ -3520,13 +4069,13 @@ For support questions, email:
See Also
anonymize(), char(), charindex(), decode(), encode(), endswith(),
extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
- humanize_duration(), humanize_file_size(), instr(), leftstr(),
- length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
- parse_url(), printf(), proper(), regexp_capture(),
+ humanize_duration(), humanize_file_size(), humanize_id(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), parse_url(), printf(), proper(), regexp_capture(),
regexp_capture_into_json(), regexp_replace(), regexp_replace(),
replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
- spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
- unparse_url(), upper(), xpath()
+ spooky_hash(), startswith(), strfilter(), substr(), timezone(), trim(),
+ unicode(), unparse_url(), upper(), xpath()
Examples
#1 To capture the digits from the string '123':
;SELECT regexp_match('(\d+)', '123') 
@@ -3555,13 +4104,13 @@ For support questions, email:
See Also
anonymize(), char(), charindex(), decode(), encode(), endswith(),
extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
- humanize_duration(), humanize_file_size(), instr(), leftstr(),
- length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
- parse_url(), printf(), proper(), regexp_capture(),
+ humanize_duration(), humanize_file_size(), humanize_id(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), parse_url(), printf(), proper(), regexp_capture(),
regexp_capture_into_json(), regexp_match(), regexp_match(), replace(),
replicate(), reverse(), rightstr(), rtrim(), sparkline(),
- spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
- unparse_url(), upper(), xpath()
+ spooky_hash(), startswith(), strfilter(), substr(), timezone(), trim(),
+ unicode(), unparse_url(), upper(), xpath()
Examples
#1 To replace the word at the start of the string 'Hello, World!' with 'Goodbye':
;SELECT regexp_replace('Hello, World!', '^(\w+)', 'Goodbye')
@@ -3577,20 +4126,21 @@ For support questions, email:
Returns a string formed by substituting the replacement string for
every occurrence of the old string in the given string.
Parameters
- str The string to perform substitutions on.
+ str The string to perform substitutions
+ on.
old The string to be replaced.
- replacement The string to replace any occurrences of
- the old string with.
+ replacement The string to replace any occurrences
+ of the old string with.
See Also
anonymize(), char(), charindex(), decode(), encode(), endswith(),
extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
- humanize_duration(), humanize_file_size(), instr(), leftstr(),
- length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
- parse_url(), printf(), proper(), regexp_capture(),
+ humanize_duration(), humanize_file_size(), humanize_id(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), parse_url(), printf(), proper(), regexp_capture(),
regexp_capture_into_json(), regexp_match(), regexp_replace(),
replicate(), reverse(), rightstr(), rtrim(), sparkline(),
- spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
- unparse_url(), upper(), xpath()
+ spooky_hash(), startswith(), strfilter(), substr(), timezone(), trim(),
+ unicode(), unparse_url(), upper(), xpath()
Examples
#1 To replace the string 'x' with 'z' in 'abc':
;SELECT replace('abc', 'x', 'z') 
@@ -3610,13 +4160,13 @@ For support questions, email:
See Also
anonymize(), char(), charindex(), decode(), encode(), endswith(),
extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
- humanize_duration(), humanize_file_size(), instr(), leftstr(),
- length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
- parse_url(), printf(), proper(), regexp_capture(),
+ humanize_duration(), humanize_file_size(), humanize_id(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), parse_url(), printf(), proper(), regexp_capture(),
regexp_capture_into_json(), regexp_match(), regexp_replace(),
replace(), reverse(), rightstr(), rtrim(), sparkline(), spooky_hash(),
- startswith(), strfilter(), substr(), trim(), unicode(), unparse_url(),
- upper(), xpath()
+ startswith(), strfilter(), substr(), timezone(), trim(), unicode(),
+ unparse_url(), upper(), xpath()
Example
#1 To repeat the string 'abc' three times:
;SELECT replicate('abc', 3) 
@@ -3631,13 +4181,13 @@ For support questions, email:
See Also
anonymize(), char(), charindex(), decode(), encode(), endswith(),
extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
- humanize_duration(), humanize_file_size(), instr(), leftstr(),
- length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
- parse_url(), printf(), proper(), regexp_capture(),
+ humanize_duration(), humanize_file_size(), humanize_id(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), parse_url(), printf(), proper(), regexp_capture(),
regexp_capture_into_json(), regexp_match(), regexp_replace(),
replace(), replicate(), rightstr(), rtrim(), sparkline(),
- spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
- unparse_url(), upper(), xpath()
+ spooky_hash(), startswith(), strfilter(), substr(), timezone(), trim(),
+ unicode(), unparse_url(), upper(), xpath()
Example
#1 To reverse the string 'abc':
;SELECT reverse('abc') 
@@ -3654,13 +4204,13 @@ For support questions, email:
See Also
anonymize(), char(), charindex(), decode(), encode(), endswith(),
extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
- humanize_duration(), humanize_file_size(), instr(), leftstr(),
- length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
- parse_url(), printf(), proper(), regexp_capture(),
+ humanize_duration(), humanize_file_size(), humanize_id(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), parse_url(), printf(), proper(), regexp_capture(),
regexp_capture_into_json(), regexp_match(), regexp_replace(),
replace(), replicate(), reverse(), rtrim(), sparkline(), spooky_hash(),
- startswith(), strfilter(), substr(), trim(), unicode(), unparse_url(),
- upper(), xpath()
+ startswith(), strfilter(), substr(), timezone(), trim(), unicode(),
+ unparse_url(), upper(), xpath()
Examples
#1 To get the last character of the string 'abc':
;SELECT rightstr('abc', 1) 
@@ -3673,8 +4223,8 @@ For support questions, email:
round(num, [digits])
══════════════════════════════════════════════════════════════════════
- Returns a floating-point value rounded to the given number of digits
- to the right of the decimal point.
+ Returns a floating-point value rounded to the given number of
+ digits to the right of the decimal point.
Parameters
num The value to round.
digits The number of digits to the right of the decimal
@@ -3700,8 +4250,8 @@ For support questions, email:
row_number()
══════════════════════════════════════════════════════════════════════
- Returns the number of the row within the current partition, starting
- from 1.
+ Returns the number of the row within the current partition,
+ starting from 1.
See Also
cume_dist(), dense_rank(), first_value(), lag(), last_value(), lead(),
nth_value(), ntile(), percent_rank(), rank()
@@ -3722,13 +4272,13 @@ For support questions, email:
See Also
anonymize(), char(), charindex(), decode(), encode(), endswith(),
extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
- humanize_duration(), humanize_file_size(), instr(), leftstr(),
- length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
- parse_url(), printf(), proper(), regexp_capture(),
+ humanize_duration(), humanize_file_size(), humanize_id(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), parse_url(), printf(), proper(), regexp_capture(),
regexp_capture_into_json(), regexp_match(), regexp_replace(),
replace(), replicate(), reverse(), rightstr(), sparkline(),
- spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
- unparse_url(), upper(), xpath()
+ spooky_hash(), startswith(), strfilter(), substr(), timezone(), trim(),
+ unicode(), unparse_url(), upper(), xpath()
Examples
#1 To trim the space characters from the end of the string 'abc ':
;SELECT rtrim('abc ') 
@@ -3739,6 +4289,20 @@ For support questions, email:
+shell_exec(cmd, [input], [options])
+══════════════════════════════════════════════════════════════════════
+ Executes a shell command and returns its output.
+Parameters
+ cmd The command to execute.
+ input A blob of data to write to the command's
+ standard input.
+ options A JSON object containing options for the
+ execution with the following properties:
+ env - An object containing the environment
+ variables to set or, if NULL, to unset.
+See Also
+
+
sign(num)
══════════════════════════════════════════════════════════════════════
Returns the sign of the given number as -1, 0, or 1
@@ -3765,10 +4329,10 @@ For support questions, email:
sparkline(value, [upper])
══════════════════════════════════════════════════════════════════════
- Function used to generate a sparkline bar chart. The non-aggregate
- version converts a single numeric value on a range to a bar chart
- character. The aggregate version returns a string with a bar
- character for every numeric input
+ Function used to generate a sparkline bar chart. The
+ non-aggregate version converts a single numeric value on a range to
+ a bar chart character. The aggregate version returns a string with
+ a bar character for every numeric input
Parameters
value The numeric value to convert
upper The upper bound of the numeric range. The
@@ -3777,13 +4341,13 @@ For support questions, email:
See Also
anonymize(), char(), charindex(), decode(), encode(), endswith(),
extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
- humanize_duration(), humanize_file_size(), instr(), leftstr(),
- length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
- parse_url(), printf(), proper(), regexp_capture(),
+ humanize_duration(), humanize_file_size(), humanize_id(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), parse_url(), printf(), proper(), regexp_capture(),
regexp_capture_into_json(), regexp_match(), regexp_replace(),
replace(), replicate(), reverse(), rightstr(), rtrim(), spooky_hash(),
- startswith(), strfilter(), substr(), trim(), unicode(), unparse_url(),
- upper(), xpath()
+ startswith(), strfilter(), substr(), timezone(), trim(), unicode(),
+ unparse_url(), upper(), xpath()
Examples
#1 To get the unicode block element for the value 32 in the range of 0-128:
;SELECT sparkline(32, 128) 
@@ -3802,13 +4366,13 @@ For support questions, email:
See Also
anonymize(), char(), charindex(), decode(), encode(), endswith(),
extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
- humanize_duration(), humanize_file_size(), instr(), leftstr(),
- length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
- parse_url(), printf(), proper(), regexp_capture(),
+ humanize_duration(), humanize_file_size(), humanize_id(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), parse_url(), printf(), proper(), regexp_capture(),
regexp_capture_into_json(), regexp_match(), regexp_replace(),
replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
- startswith(), strfilter(), substr(), trim(), unicode(), unparse_url(),
- upper(), xpath()
+ startswith(), strfilter(), substr(), timezone(), trim(), unicode(),
+ unparse_url(), upper(), xpath()
Examples
#1 To produce a hash for the string 'Hello, World!':
;SELECT spooky_hash('Hello, World!') 
@@ -3829,8 +4393,8 @@ For support questions, email:
sqlite_compileoption_get(N)
══════════════════════════════════════════════════════════════════════
- Returns the N-th compile-time option used to build SQLite or NULL if
- N is out of range.
+ Returns the N-th compile-time option used to build SQLite or NULL
+ if N is out of range.
Parameter
N The option number to get
@@ -3850,8 +4414,8 @@ For support questions, email:
sqlite_source_id()
══════════════════════════════════════════════════════════════════════
- Returns a string that identifies the specific version of the source
- code that was used to build the SQLite library.
+ Returns a string that identifies the specific version of the
+ source code that was used to build the SQLite library.
sqlite_version()
@@ -3884,13 +4448,13 @@ For support questions, email:
See Also
anonymize(), char(), charindex(), decode(), encode(), endswith(),
extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
- humanize_duration(), humanize_file_size(), instr(), leftstr(),
- length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
- parse_url(), printf(), proper(), regexp_capture(),
+ humanize_duration(), humanize_file_size(), humanize_id(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), parse_url(), printf(), proper(), regexp_capture(),
regexp_capture_into_json(), regexp_match(), regexp_replace(),
replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
- spooky_hash(), strfilter(), substr(), trim(), unicode(), unparse_url(),
- upper(), xpath()
+ spooky_hash(), strfilter(), substr(), timezone(), trim(), unicode(),
+ unparse_url(), upper(), xpath()
Examples
#1 To test if the string 'foobar' starts with 'foo':
;SELECT startswith('foobar', 'foo') 
@@ -3911,12 +4475,12 @@ For support questions, email:
See Also
anonymize(), char(), charindex(), decode(), encode(), endswith(),
extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
- humanize_duration(), humanize_file_size(), instr(), leftstr(),
- length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
- parse_url(), printf(), proper(), regexp_capture(),
+ humanize_duration(), humanize_file_size(), humanize_id(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), parse_url(), printf(), proper(), regexp_capture(),
regexp_capture_into_json(), regexp_match(), regexp_replace(),
replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
- spooky_hash(), startswith(), substr(), trim(), unicode(),
+ spooky_hash(), startswith(), substr(), timezone(), trim(), unicode(),
unparse_url(), upper(), xpath()
Example
#1 To get the 'b', 'c', and 'd' characters from the string 'abcabc':
@@ -3926,17 +4490,19 @@ For support questions, email:
strftime(format, timestring, modifier, ...)
══════════════════════════════════════════════════════════════════════
- Returns the date formatted according to the format string specified
- as the first argument.
+ Returns the date formatted according to the format string
+ specified as the first argument.
Parameters
- format A format string with substitutions similar
- to those found in the strftime() standard C library.
- timestring The string to convert to a date with time.
+ format A format string with substitutions
+ similar to those found in the strftime() standard C
+ library.
+ timestring The string to convert to a date with
+ time.
modifier A transformation that is applied to the
value to the left.
See Also
date(), datetime(), humanize_duration(), julianday(), time(),
- timediff(), timeslice()
+ timediff(), timeslice(), timezone()
Examples
#1 To get the year from the timestamp '2017-01-02T03:04:05':
;SELECT strftime('%Y', '2017-01-02T03:04:05') 
@@ -3969,13 +4535,13 @@ For support questions, email:
See Also
anonymize(), char(), charindex(), decode(), encode(), endswith(),
extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
- humanize_duration(), humanize_file_size(), instr(), leftstr(),
- length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
- parse_url(), printf(), proper(), regexp_capture(),
+ humanize_duration(), humanize_file_size(), humanize_id(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), parse_url(), printf(), proper(), regexp_capture(),
regexp_capture_into_json(), regexp_match(), regexp_replace(),
replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
- spooky_hash(), startswith(), strfilter(), trim(), unicode(),
- unparse_url(), upper(), xpath()
+ spooky_hash(), startswith(), strfilter(), timezone(), trim(),
+ unicode(), unparse_url(), upper(), xpath()
Examples
#1 To get the substring starting at the second character until the end of the string
'abc':
@@ -4024,7 +4590,7 @@ For support questions, email:
value to the left.
See Also
date(), datetime(), humanize_duration(), julianday(), strftime(),
- timediff(), timeslice()
+ timediff(), timeslice(), timezone()
Examples
#1 To get the time portion of the timestamp '2017-01-02T03:04:05':
;SELECT time('2017-01-02T03:04:05') 
@@ -4047,7 +4613,7 @@ For support questions, email:
time2 The timestamp to subtract from the first
See Also
date(), datetime(), humanize_duration(), julianday(), strftime(),
- time(), timeslice()
+ time(), timeslice(), timezone()
Examples
#1 To get the difference between two timestamps:
;SELECT timediff('2017-02-03T04:05:06', '2017-02-03T04:05:00')
@@ -4060,14 +4626,14 @@ For support questions, email:
timeslice(time, slice)
══════════════════════════════════════════════════════════════════════
- Return the start of the slice of time that the given timestamp falls
- in. If the time falls outside of the slice, NULL is returned.
+ Return the start of the slice of time that the given timestamp
+ falls in. If the time falls outside of the slice, NULL is returned.
Parameters
time The timestamp to get the time slice for.
slice The size of the time slices
See Also
date(), datetime(), humanize_duration(), julianday(), strftime(),
- time(), timediff()
+ time(), timediff(), timezone()
Examples
#1 To get the timestamp rounded down to the start of the ten minute slice:
;SELECT timeslice('2017-01-01T05:05:00', '10m') 
@@ -4084,6 +4650,30 @@ For support questions, email:
+timezone(tz, ts)
+══════════════════════════════════════════════════════════════════════
+ Convert a timestamp to the given timezone
+Parameters
+ tz The target timezone
+ ts The source timestamp
+See Also
+ anonymize(), char(), charindex(), date(), datetime(), decode(),
+ encode(), endswith(), extract(), group_concat(), group_spooky_hash(),
+ gunzip(), gzip(), humanize_duration(), humanize_duration(),
+ humanize_file_size(), humanize_id(), instr(), julianday(), leftstr(),
+ length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
+ parse_url(), printf(), proper(), regexp_capture(),
+ regexp_capture_into_json(), regexp_match(), regexp_replace(),
+ replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
+ spooky_hash(), startswith(), strfilter(), strftime(), substr(), time(),
+ timediff(), timeslice(), trim(), unicode(), unparse_url(), upper(),
+ xpath()
+Example
+#1 To convert a time to America/Los_Angeles:
+ ;SELECT timezone('America/Los_Angeles', '2022-03-02T10:00')
+
+
+
total(X)
══════════════════════════════════════════════════════════════════════
Returns the sum of the values in the group as a floating-point.
@@ -4103,8 +4693,8 @@ For support questions, email:
total_changes()
══════════════════════════════════════════════════════════════════════
- Returns the number of row changes caused by INSERT, UPDATE or DELETE
- statements since the current database connection was opened.
+ Returns the number of row changes caused by INSERT, UPDATE or
+ DELETE statements since the current database connection was opened.
trim(str, [chars])
@@ -4119,13 +4709,13 @@ For support questions, email:
See Also
anonymize(), char(), charindex(), decode(), encode(), endswith(),
extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
- humanize_duration(), humanize_file_size(), instr(), leftstr(),
- length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
- parse_url(), printf(), proper(), regexp_capture(),
+ humanize_duration(), humanize_file_size(), humanize_id(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), parse_url(), printf(), proper(), regexp_capture(),
regexp_capture_into_json(), regexp_match(), regexp_replace(),
replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
- spooky_hash(), startswith(), strfilter(), substr(), unicode(),
- unparse_url(), upper(), xpath()
+ spooky_hash(), startswith(), strfilter(), substr(), timezone(),
+ unicode(), unparse_url(), upper(), xpath()
Examples
#1 To trim spaces from the start and end of the string ' abc ':
;SELECT trim(' abc ') 
@@ -4162,12 +4752,12 @@ For support questions, email:
See Also
anonymize(), char(), charindex(), decode(), encode(), endswith(),
extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
- humanize_duration(), humanize_file_size(), instr(), leftstr(),
- length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
- parse_url(), printf(), proper(), regexp_capture(),
+ humanize_duration(), humanize_file_size(), humanize_id(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), parse_url(), printf(), proper(), regexp_capture(),
regexp_capture_into_json(), regexp_match(), regexp_replace(),
replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
- spooky_hash(), startswith(), strfilter(), substr(), trim(),
+ spooky_hash(), startswith(), strfilter(), substr(), timezone(), trim(),
unparse_url(), upper(), xpath()
Example
#1 To get the unicode code point for the first character of 'abc':
@@ -4191,13 +4781,13 @@ For support questions, email:
See Also
anonymize(), char(), charindex(), decode(), encode(), endswith(),
extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
- humanize_duration(), humanize_file_size(), instr(), leftstr(),
- length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
- parse_url(), parse_url(), printf(), proper(), regexp_capture(),
+ humanize_duration(), humanize_file_size(), humanize_id(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), parse_url(), parse_url(), printf(), proper(), regexp_capture(),
regexp_capture_into_json(), regexp_match(), regexp_replace(),
replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
- spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
- upper(), xpath()
+ spooky_hash(), startswith(), strfilter(), substr(), timezone(), trim(),
+ unicode(), upper(), xpath()
Example
#1 To unparse the object '{"scheme": "https", "host": "example.com"}':
;SELECT unparse_url('{"scheme": "https", "host": "example.com"}')
@@ -4213,13 +4803,13 @@ For support questions, email:
See Also
anonymize(), char(), charindex(), decode(), encode(), endswith(),
extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
- humanize_duration(), humanize_file_size(), instr(), leftstr(),
- length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
- parse_url(), printf(), proper(), regexp_capture(),
+ humanize_duration(), humanize_file_size(), humanize_id(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), parse_url(), printf(), proper(), regexp_capture(),
regexp_capture_into_json(), regexp_match(), regexp_replace(),
replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
- spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
- unparse_url(), xpath()
+ spooky_hash(), startswith(), strfilter(), substr(), timezone(), trim(),
+ unicode(), unparse_url(), xpath()
Example
#1 To uppercase the string 'aBc':
;SELECT upper('aBc') 
@@ -4236,31 +4826,34 @@ For support questions, email:
xmldoc The XML document as a string.
Results
result The result of the XPATH expression.
- node_path The absolute path to the node containing the
- result.
- node_attr The node's attributes stored in JSON object.
+ node_path The absolute path to the node containing
+ the result.
+ node_attr The node's attributes stored in JSON
+ object.
node_text The node's text value.
See Also
anonymize(), char(), charindex(), decode(), encode(), endswith(),
extract(), group_concat(), group_spooky_hash(), gunzip(), gzip(),
- humanize_duration(), humanize_file_size(), instr(), leftstr(),
- length(), logfmt2json(), lower(), ltrim(), padc(), padl(), padr(),
- parse_url(), printf(), proper(), regexp_capture(),
+ humanize_duration(), humanize_file_size(), humanize_id(), instr(),
+ leftstr(), length(), logfmt2json(), lower(), ltrim(), padc(), padl(),
+ padr(), parse_url(), printf(), proper(), regexp_capture(),
regexp_capture_into_json(), regexp_match(), regexp_replace(),
replace(), replicate(), reverse(), rightstr(), rtrim(), sparkline(),
- spooky_hash(), startswith(), strfilter(), substr(), trim(), unicode(),
- unparse_url(), upper()
+ spooky_hash(), startswith(), strfilter(), substr(), timezone(), trim(),
+ unicode(), unparse_url(), upper()
Examples
#1 To select the XML nodes on the path '/abc/def':
;SELECT * FROM xpath('/abc/def', '<abc><def a="b">Hello</def><def>Bye</def></abc>')
#2 To select all 'a' attributes on the path '/abc/def':
- ;SELECT * FROM xpath('/abc/def/@a', '<abc><def a="b">Hello</def><def>Bye</def></abc>')
+ ;SELECT * FROM xpath('/abc/def/@a', '<abc><def
+  a="b">Hello</def><def>Bye</def></abc>')
#3 To select the text nodes on the path '/abc/def':
- ;SELECT * FROM xpath('/abc/def/text()', '<abc><def a="b">Hello &#x2605;</def></abc>')
+ ;SELECT * FROM xpath('/abc/def/text()', '<abc><def a="b">Hello
+  &#x2605;</def></abc>')
@@ -4270,8 +4863,11 @@ For support questions, email:
Parameter
yaml The YAML value to convert to JSON.
See Also
- jget(), json_concat(), json_contains(), json_group_array(),
- json_group_object()
+ jget(), json(), json_array(), json_array_length(), json_concat(),
+ json_contains(), json_each(), json_extract(), json_group_array(),
+ json_group_object(), json_insert(), json_object(), json_quote(),
+ json_remove(), json_replace(), json_set(), json_tree(), json_type(),
+ json_valid()
Example
#1 To convert the document "abc: def":
;SELECT yaml_to_json('abc: def') 
@@ -4290,7 +4886,8 @@ For support questions, email:
Attach a database file to the current connection.
Parameters
filename The path to the database file.
- schema-name The prefix for tables in this database.
+ schema-name The prefix for tables in this
+ database.
Example
#1 To attach the database file '/tmp/customers.db' with the name customers:
@@ -4306,8 +4903,9 @@ For support questions, email:
Parameters
base-expr The base expression that is used for
comparison in the branches
- cmp-expr The expression to test if this branch should
- be taken
+ cmp-expr The expression to test if this branch
+ should be taken
+ then-expr - The result for this branch.
else-expr The result of this CASE if no branches
matched.
@@ -4321,8 +4919,8 @@ For support questions, email:
══════════════════════════════════════════════════════════════════════
Assign a name to a SELECT statement
Parameters
- IF NOT EXISTS Do not create the view if it already
- exists
+ IF NOT EXISTS Do not create the view if it
+ already exists
schema-name. The database to create the view in
view-name The name of the view
select-stmt The SELECT statement the view
@@ -4341,7 +4939,8 @@ For support questions, email:
══════════════════════════════════════════════════════════════════════
Detach a database from the current connection.
Parameter
- schema-name The prefix for tables in this database.
+ schema-name The prefix for tables in this
+ database.
Example
#1 To detach the database named 'customers':
@@ -4383,10 +4982,10 @@ For support questions, email:
table The table(s) to query for data
cond The conditions used to select the
rows to return.
- grouping-expr The expression to use when grouping
- rows.
- ordering-term The values to use when ordering the
- result set.
+ grouping-expr The expression to use when
+ grouping rows.
+ ordering-term The values to use when ordering
+ the result set.
limit-expr The maximum number of rows to
return.
@@ -4402,8 +5001,10 @@ For support questions, email:
Parameters
table The table to update
column-name The columns in the table to update.
- cond The condition used to determine whether
- a row should be updated.
+ expr - The values to place into the
+ column.
+ cond The condition used to determine
+ whether a row should be updated.
Example
#1 To mark the syslog message at line 40:
@@ -4416,7 +5017,7 @@ For support questions, email:
Create a temporary view that exists only for the duration of a SQL
statement.
Parameters
- cte-table-name The name for the temporary table.
+ cte-table-name The name for the temporary
+ table.
select-stmt The SELECT statement used to
populate the temporary table.
-
diff --git a/test/expected/test_cmds.sh_b755a8b48c0f602f0270500b0117b76e11db546e.out b/test/expected/test_cmds.sh_b755a8b48c0f602f0270500b0117b76e11db546e.out
index 5fb4d90..e27bfe5 100644
--- a/test/expected/test_cmds.sh_b755a8b48c0f602f0270500b0117b76e11db546e.out
+++ b/test/expected/test_cmds.sh_b755a8b48c0f602f0270500b0117b76e11db546e.out
@@ -33,5 +33,6 @@ Apr 7 07:32:56 Tim-Stacks-iMac.local logger[234]: Bad data {
abc,
123,
456
-)
-}]
+ )
+}
+]
diff --git a/test/expected/test_cmds.sh_c7fabc25374ff47c47931f63b1d697061b816a28.out b/test/expected/test_cmds.sh_c7fabc25374ff47c47931f63b1d697061b816a28.out
index 76c53dd..fe0221c 100644
--- a/test/expected/test_cmds.sh_c7fabc25374ff47c47931f63b1d697061b816a28.out
+++ b/test/expected/test_cmds.sh_c7fabc25374ff47c47931f63b1d697061b816a28.out
@@ -1,2 +1,2 @@
- Sat Nov 03 09:20:00 1 normal 2 errors  0 warnings  1 marks
- Sat Nov 03 09:45:00 1 normal 0 errors 0 warnings 0 marks
+ Sat Nov 03 09:20:00 1 normal 2 errors  0 warnings  1 marks
+ Sat Nov 03 09:45:00 1 normal 0 errors 0 warnings 0 marks
diff --git a/test/expected/test_cmds.sh_ccd326da92d1cacda63501cd1a3077381a18e8f2.out b/test/expected/test_cmds.sh_ccd326da92d1cacda63501cd1a3077381a18e8f2.out
index bc67837..0c0137a 100644
--- a/test/expected/test_cmds.sh_ccd326da92d1cacda63501cd1a3077381a18e8f2.out
+++ b/test/expected/test_cmds.sh_ccd326da92d1cacda63501cd1a3077381a18e8f2.out
@@ -1 +1 @@
- Sat Nov 03 00:00:00 2 normal 2 errors 0 warnings 0 marks
+ Sat Nov 03 00:00:00 2 normal  2 errors 0 warnings  0 marks
diff --git a/test/expected/test_cmds.sh_d0d0ff9b68adc17136329f457fe52d5addcb12c0.err b/test/expected/test_cmds.sh_d0d0ff9b68adc17136329f457fe52d5addcb12c0.err
new file mode 100644
index 0000000..a55e4f8
--- /dev/null
+++ b/test/expected/test_cmds.sh_d0d0ff9b68adc17136329f457fe52d5addcb12c0.err
@@ -0,0 +1,6 @@
+✘ error: invalid epoch time: 16120724091612072409 -- Value too large to be stored in data type
+ --> command-option:1
+ | :unix-time 16120724091612072409 
+ = help: :unix-time seconds
+ ══════════════════════════════════════════════════════════════════════
+ Convert epoch time to a human-readable form
diff --git a/test/expected/test_cmds.sh_d0d0ff9b68adc17136329f457fe52d5addcb12c0.out b/test/expected/test_cmds.sh_d0d0ff9b68adc17136329f457fe52d5addcb12c0.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_d0d0ff9b68adc17136329f457fe52d5addcb12c0.out
diff --git a/test/expected/test_cmds.sh_d1afefacbdd387f02562c8633968b0162a588502.err b/test/expected/test_cmds.sh_d1afefacbdd387f02562c8633968b0162a588502.err
new file mode 100644
index 0000000..040fef2
--- /dev/null
+++ b/test/expected/test_cmds.sh_d1afefacbdd387f02562c8633968b0162a588502.err
@@ -0,0 +1,6 @@
+✘ error: {test_dir}/logfile_access_log.0 is not a directory
+ --> command-option:1
+ | :cd {test_dir}/logfile_access_log.0
+ = help: :cd dir
+ ══════════════════════════════════════════════════════════════════════
+ Change the current directory
diff --git a/test/expected/test_cmds.sh_d1afefacbdd387f02562c8633968b0162a588502.out b/test/expected/test_cmds.sh_d1afefacbdd387f02562c8633968b0162a588502.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_d1afefacbdd387f02562c8633968b0162a588502.out
diff --git a/test/expected/test_cmds.sh_d7eebacdcf2cb194f25fa4ef97b7b5376b442467.err b/test/expected/test_cmds.sh_d7eebacdcf2cb194f25fa4ef97b7b5376b442467.err
deleted file mode 100644
index 07df1b2..0000000
--- a/test/expected/test_cmds.sh_d7eebacdcf2cb194f25fa4ef97b7b5376b442467.err
+++ /dev/null
@@ -1,7 +0,0 @@
-✘ error: invalid timestamp: 2022-06-16Tabc
- reason: the leading part of the timestamp was matched, however, the trailing text “Tabc” was not
- --> command-option:1
- | :goto 2022-06-16Tabc 
- |  ^--^ unrecognized input 
- = note: input matched time format “%Y-%m-%d”
- = help: fix the timestamp or remove the trailing text
diff --git a/test/expected/test_cmds.sh_d836c84398c831c976df46f46fe3bf5983c44c37.out b/test/expected/test_cmds.sh_d836c84398c831c976df46f46fe3bf5983c44c37.out
index 1d3eae4..926f0f5 100644
--- a/test/expected/test_cmds.sh_d836c84398c831c976df46f46fe3bf5983c44c37.out
+++ b/test/expected/test_cmds.sh_d836c84398c831c976df46f46fe3bf5983c44c37.out
@@ -1,2 +1,2 @@
-log_top_line() 
+log_top_line() 
51
diff --git a/test/expected/test_cmds.sh_da5f7160b967e60dbd772573614e2da89c5e22b2.err b/test/expected/test_cmds.sh_da5f7160b967e60dbd772573614e2da89c5e22b2.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_da5f7160b967e60dbd772573614e2da89c5e22b2.err
diff --git a/test/expected/test_cmds.sh_da5f7160b967e60dbd772573614e2da89c5e22b2.out b/test/expected/test_cmds.sh_da5f7160b967e60dbd772573614e2da89c5e22b2.out
new file mode 100644
index 0000000..c9c79dc
--- /dev/null
+++ b/test/expected/test_cmds.sh_da5f7160b967e60dbd772573614e2da89c5e22b2.out
@@ -0,0 +1 @@
+2009-07-20T15:59:26.000 -0700
diff --git a/test/expected/test_cmds.sh_dbdd62995fdefc8318053af05a32416eccfa79fc.out b/test/expected/test_cmds.sh_dbdd62995fdefc8318053af05a32416eccfa79fc.out
index f3d0606..24a89e7 100644
--- a/test/expected/test_cmds.sh_dbdd62995fdefc8318053af05a32416eccfa79fc.out
+++ b/test/expected/test_cmds.sh_dbdd62995fdefc8318053af05a32416eccfa79fc.out
@@ -1 +1 @@
- Sat Nov 03 08:00:00 2 normal 2 errors 0 warnings 0 marks
+ Sat Nov 03 08:00:00 2 normal  2 errors 0 warnings  0 marks
diff --git a/test/expected/test_cmds.sh_df6f4cea16bb8f20e6408fe4b40335e6de8a7f18.out b/test/expected/test_cmds.sh_df6f4cea16bb8f20e6408fe4b40335e6de8a7f18.out
index e905c55..85a13ff 100644
--- a/test/expected/test_cmds.sh_df6f4cea16bb8f20e6408fe4b40335e6de8a7f18.out
+++ b/test/expected/test_cmds.sh_df6f4cea16bb8f20e6408fe4b40335e6de8a7f18.out
@@ -1,3 +1,3 @@
-10.0.0.1 - - [20/Jul/2009:22:59:26 +0000] "GET /vmw/cgi/aberrant HTTP/1.0" 200 134 "-" "gPXE/0.9.7"
-10.0.0.1 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/abject/ablaze/able.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
-10.0.0.1 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/abject/ablaze/aboard.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
+10.0.0.1 - - [20/Jul/2009:22:59:26 +0000] "GET /vmw/cgi/abashed HTTP/1.0" 200 134 "-" "gPXE/0.9.7"
+10.0.0.1 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/aberrant/abhorrent/abiding.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+10.0.0.1 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/aberrant/abhorrent/ablaze.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_cmds.sh_e7e8244fac65bc51dbd5af31be476fe3b8776bfc.out b/test/expected/test_cmds.sh_e7e8244fac65bc51dbd5af31be476fe3b8776bfc.out
index 21e4506..012e2ef 100644
--- a/test/expected/test_cmds.sh_e7e8244fac65bc51dbd5af31be476fe3b8776bfc.out
+++ b/test/expected/test_cmds.sh_e7e8244fac65bc51dbd5af31be476fe3b8776bfc.out
@@ -1,12 +1,12 @@
{
- "foo bar" : null,
- "array" : [
- 1,
- 2,
- 3
- ],
- "obj" : {
- "one" : 1,
-  "two" : true
+ "foo bar" : null,
+ "array" : [
+ 1,
+ 2,
+ 3
+ ],
+ "obj" : {
+ "one" : 1,
+ "two" : true
}
}
diff --git a/test/expected/test_cmds.sh_eb22c3e94c536a1bfaeae0c40d271b5b4b08f4fc.out b/test/expected/test_cmds.sh_eb22c3e94c536a1bfaeae0c40d271b5b4b08f4fc.out
index 6599581..96a0a22 100644
--- a/test/expected/test_cmds.sh_eb22c3e94c536a1bfaeae0c40d271b5b4b08f4fc.out
+++ b/test/expected/test_cmds.sh_eb22c3e94c536a1bfaeae0c40d271b5b4b08f4fc.out
@@ -1,3 +1,3 @@
-{"log_line":0,"log_part":null,"log_time":"2009-07-20 22:59:26.000","log_idle_msecs":0,"log_level":"info","log_mark":0,"log_comment":null,"log_tags":null,"log_filters":null,"c_ip":"192.168.202.254","cs_method":"GET","cs_referer":"-","cs_uri_query":null,"cs_uri_stem":"/vmw/cgi/tramp","cs_user_agent":"gPXE/0.9.7","cs_username":"-","cs_version":"HTTP/1.0","sc_bytes":134,"sc_status":200,"cs_host":null}
-{"log_line":1,"log_part":null,"log_time":"2009-07-20 22:59:29.000","log_idle_msecs":3000,"log_level":"error","log_mark":0,"log_comment":null,"log_tags":null,"log_filters":null,"c_ip":"192.168.202.254","cs_method":"GET","cs_referer":"-","cs_uri_query":null,"cs_uri_stem":"/vmw/vSphere/default/vmkboot.gz","cs_user_agent":"gPXE/0.9.7","cs_username":"-","cs_version":"HTTP/1.0","sc_bytes":46210,"sc_status":404,"cs_host":null}
-{"log_line":2,"log_part":null,"log_time":"2009-07-20 22:59:29.000","log_idle_msecs":0,"log_level":"info","log_mark":0,"log_comment":null,"log_tags":null,"log_filters":null,"c_ip":"192.168.202.254","cs_method":"GET","cs_referer":"-","cs_uri_query":null,"cs_uri_stem":"/vmw/vSphere/default/vmkernel.gz","cs_user_agent":"gPXE/0.9.7","cs_username":"-","cs_version":"HTTP/1.0","sc_bytes":78929,"sc_status":200,"cs_host":null}
+{"log_line":0,"log_time":"2009-07-20 22:59:26.000","log_level":"info","c_ip":"192.168.202.254","cs_method":"GET","cs_referer":"-","cs_uri_query":null,"cs_uri_stem":"/vmw/cgi/tramp","cs_user_agent":"gPXE/0.9.7","cs_username":"-","cs_version":"HTTP/1.0","sc_bytes":134,"sc_status":200,"cs_host":null,"log_part":null,"log_idle_msecs":0,"log_mark":0,"log_comment":null,"log_tags":null,"log_annotations":null,"log_filters":null}
+{"log_line":1,"log_time":"2009-07-20 22:59:29.000","log_level":"error","c_ip":"192.168.202.254","cs_method":"GET","cs_referer":"-","cs_uri_query":null,"cs_uri_stem":"/vmw/vSphere/default/vmkboot.gz","cs_user_agent":"gPXE/0.9.7","cs_username":"-","cs_version":"HTTP/1.0","sc_bytes":46210,"sc_status":404,"cs_host":null,"log_part":null,"log_idle_msecs":3000,"log_mark":0,"log_comment":null,"log_tags":null,"log_annotations":null,"log_filters":null}
+{"log_line":2,"log_time":"2009-07-20 22:59:29.000","log_level":"info","c_ip":"192.168.202.254","cs_method":"GET","cs_referer":"-","cs_uri_query":null,"cs_uri_stem":"/vmw/vSphere/default/vmkernel.gz","cs_user_agent":"gPXE/0.9.7","cs_username":"-","cs_version":"HTTP/1.0","sc_bytes":78929,"sc_status":200,"cs_host":null,"log_part":null,"log_idle_msecs":0,"log_mark":0,"log_comment":null,"log_tags":null,"log_annotations":null,"log_filters":null}
diff --git a/test/expected/test_cmds.sh_ec3a64cad41b070a1d04e2bfc3dc14cb2d964091.err b/test/expected/test_cmds.sh_ec3a64cad41b070a1d04e2bfc3dc14cb2d964091.err
new file mode 100644
index 0000000..5874e8a
--- /dev/null
+++ b/test/expected/test_cmds.sh_ec3a64cad41b070a1d04e2bfc3dc14cb2d964091.err
@@ -0,0 +1,6 @@
+✘ error: Unable to get timezone: bad-zone -- bad-zone not found in timezone database
+ --> command-option:2
+ | :convert-time-to bad-zone 
+ = help: :convert-time-to zone
+ ══════════════════════════════════════════════════════════════════════
+ Convert the focused timestamp to the given timezone
diff --git a/test/expected/test_cmds.sh_ec3a64cad41b070a1d04e2bfc3dc14cb2d964091.out b/test/expected/test_cmds.sh_ec3a64cad41b070a1d04e2bfc3dc14cb2d964091.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_cmds.sh_ec3a64cad41b070a1d04e2bfc3dc14cb2d964091.out
diff --git a/test/expected/test_config.sh_13fa2428c26fa12e732209620e21466b36bab252.err b/test/expected/test_config.sh_13fa2428c26fa12e732209620e21466b36bab252.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_config.sh_13fa2428c26fa12e732209620e21466b36bab252.err
diff --git a/test/expected/test_config.sh_13fa2428c26fa12e732209620e21466b36bab252.out b/test/expected/test_config.sh_13fa2428c26fa12e732209620e21466b36bab252.out
new file mode 100644
index 0000000..3d14be3
--- /dev/null
+++ b/test/expected/test_config.sh_13fa2428c26fa12e732209620e21466b36bab252.out
@@ -0,0 +1 @@
+Hello, /finn at seattle!
diff --git a/test/expected/test_config.sh_5105c29004e297521310ca0bd0fd560b01c2c549.err b/test/expected/test_config.sh_5105c29004e297521310ca0bd0fd560b01c2c549.err
deleted file mode 100644
index 092b26a..0000000
--- a/test/expected/test_config.sh_5105c29004e297521310ca0bd0fd560b01c2c549.err
+++ /dev/null
@@ -1,20 +0,0 @@
-✘ error: 'bad' is not a supported configuration $schema version
- --> {test_dir}/bad-config2/formats/invalid-config/config.bad-schema.json:2
- |  "$schema": "bad" 
- = note: expecting one of the following $schema values:
-  https://lnav.org/schemas/config-v1.schema.json
- = help: Property Synopsis
- /$schema <schema-uri>
- Description
- The URI that specifies the schema that describes this type of file
- Example
- https://lnav.org/schemas/config-v1.schema.json
-✘ error: invalid JSON
- --> {test_dir}/bad-config2/formats/invalid-config/config.malformed.json:3
- | parse error: object key and value must be separated by a colon (':')
- |  "ui": "theme", "abc", "def": "" }
- |  (right here) ------^
- | 
-✘ error: invalid JSON
- reason: parse error: premature EOF
- --> {test_dir}/bad-config2/formats/invalid-config/config.truncated.json:3
diff --git a/test/expected/test_config.sh_a0907769aba112d628e7ebe39c4ec252e5e0bc69.err b/test/expected/test_config.sh_a0907769aba112d628e7ebe39c4ec252e5e0bc69.err
index ec11ba5..f04b83a 100644
--- a/test/expected/test_config.sh_a0907769aba112d628e7ebe39c4ec252e5e0bc69.err
+++ b/test/expected/test_config.sh_a0907769aba112d628e7ebe39c4ec252e5e0bc69.err
@@ -1,4 +1,23 @@
-✘ error: 'bad' is not a supported configuration $schema version
+⚠ warning: unexpected value for property “/ui/theme-defs/invalid-theme/styles/text/bad-property”
+ --> {test_dir}/bad-config2/configs/invalid-theme/config.json:9
+ |  "bad-property": "abc"
+ = help: Available Properties
+ color #hex|color_name
+ background-color #hex|color_name
+ underline
+ bold
+✘ error: “abc(” is not a valid regular expression
+ reason: missing closing parenthesis
+ --> /ui/theme-defs/invalid-theme/highlights/foobar/pattern
+ | abc( 
+ |  ^ missing closing parenthesis 
+ --> {test_dir}/bad-config2/configs/invalid-theme/config.json:14
+ |  "pattern": "abc("
+ = help: Property Synopsis
+ /ui/theme-defs/invalid-theme/highlights/foobar/pattern regular expression
+ Description
+ The regular expression to highlight
+✘ error: “bad” is not a supported configuration $schema version
 --> {test_dir}/bad-config2/formats/invalid-config/config.bad-schema.json:2
 |  "$schema": "bad" 
 = note: expecting one of the following $schema values:
@@ -36,3 +55,28 @@
✘ error: invalid JSON
reason: parse error: premature EOF
 --> {test_dir}/bad-config2/formats/invalid-config/config.truncated.json:3
+✘ error: missing value for property “/log/annotations/org.lnav.test.no-condition/condition”
+ reason: incomplete input
+ --> /log/annotations/org.lnav.test.no-condition/condition
+ = help: Property Synopsis
+ /log/annotations/org.lnav.test.no-condition/condition <SQL-expression>
+ Description
+ The SQLite expression to execute for a log message that determines whether or not this annotation is applicable. The expression is evaluated the same way as a filter expression
+✘ error: missing value for property “/log/annotations/org.lnav.test.no-handler/handler”
+ reason: Every annotation requires a handler
+ = help: Property Synopsis
+ /log/annotations/org.lnav.test.no-handler/handler <script>
+ Description
+ The script to execute to generate the annotation content. A JSON object with the log message content will be sent to the script on the standard input
+✘ error: invalid value for property “/ui/theme-defs/invalid-theme/styles/text/color”
+ reason: invalid color -- “InvalidColor”
+ |  reason: Unknown color: 'InvalidColor'. See https://jonasjacek.github.io/colors/ for a list of supported color names
+ --> {test_dir}/bad-config2/configs/invalid-theme/config.json:8
+ = help: Property Synopsis
+ /ui/theme-defs/invalid-theme/styles/text/color #hex|color_name
+ Description
+ The foreground color value for this style. The value can be the name of an xterm color, the hexadecimal value, or a theme variable reference.
+ Examples
+ #fff
+ Green
+ $black
diff --git a/test/expected/test_config.sh_d708b6fd32d83ce0ee00ca5383388308ba5a06e1.err b/test/expected/test_config.sh_d708b6fd32d83ce0ee00ca5383388308ba5a06e1.err
index 93cba93..1849a63 100644
--- a/test/expected/test_config.sh_d708b6fd32d83ce0ee00ca5383388308ba5a06e1.err
+++ b/test/expected/test_config.sh_d708b6fd32d83ce0ee00ca5383388308ba5a06e1.err
@@ -1,6 +1,6 @@
✘ error: invalid value for property “/ui/theme”
reason: unknown theme -- “baddy”
- |   = help: The available themes are: default, eldar, grayscale, monocai, night-owl, solarized-dark, solarized-light
+ |   = help: The available themes are: default, dracula, eldar, grayscale, monocai, night-owl, solarized-dark, solarized-light
 --> command-option:1
 = help: Property Synopsis
/ui/theme theme_name
diff --git a/test/expected/test_format_installer.sh_1e08efc3b8c7b67d944a1f8c475cd31d98d5b4f6.err b/test/expected/test_format_installer.sh_1e08efc3b8c7b67d944a1f8c475cd31d98d5b4f6.err
new file mode 100644
index 0000000..8b4f3e4
--- /dev/null
+++ b/test/expected/test_format_installer.sh_1e08efc3b8c7b67d944a1f8c475cd31d98d5b4f6.err
@@ -0,0 +1,2 @@
+✘ error: unable to open configuration file: /non-existent/file
+ reason: No such file or directory
diff --git a/test/expected/test_format_installer.sh_1e08efc3b8c7b67d944a1f8c475cd31d98d5b4f6.out b/test/expected/test_format_installer.sh_1e08efc3b8c7b67d944a1f8c475cd31d98d5b4f6.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_format_installer.sh_1e08efc3b8c7b67d944a1f8c475cd31d98d5b4f6.out
diff --git a/test/expected/test_format_installer.sh_6cd73153a8990b8ddb8ce489e90ec667a442f7f9.err b/test/expected/test_format_installer.sh_6cd73153a8990b8ddb8ce489e90ec667a442f7f9.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_format_installer.sh_6cd73153a8990b8ddb8ce489e90ec667a442f7f9.err
diff --git a/test/expected/test_format_installer.sh_6cd73153a8990b8ddb8ce489e90ec667a442f7f9.out b/test/expected/test_format_installer.sh_6cd73153a8990b8ddb8ce489e90ec667a442f7f9.out
new file mode 100644
index 0000000..95b5acd
--- /dev/null
+++ b/test/expected/test_format_installer.sh_6cd73153a8990b8ddb8ce489e90ec667a442f7f9.out
@@ -0,0 +1,2 @@
+✔ installed -- ../installer-test-home/.lnav/formats/installed/test_log.json
+ = note: the previously installed “test_log.json” was backed up to -- ../installer-test-home/.lnav/formats/installed/test_log.json.bak
diff --git a/test/expected/test_format_installer.sh_947cbc64a150c7fe2a17e1c7a69e9a932aeaa16b.err b/test/expected/test_format_installer.sh_947cbc64a150c7fe2a17e1c7a69e9a932aeaa16b.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_format_installer.sh_947cbc64a150c7fe2a17e1c7a69e9a932aeaa16b.err
diff --git a/test/expected/test_format_installer.sh_947cbc64a150c7fe2a17e1c7a69e9a932aeaa16b.out b/test/expected/test_format_installer.sh_947cbc64a150c7fe2a17e1c7a69e9a932aeaa16b.out
new file mode 100644
index 0000000..8ac09f2
--- /dev/null
+++ b/test/expected/test_format_installer.sh_947cbc64a150c7fe2a17e1c7a69e9a932aeaa16b.out
@@ -0,0 +1 @@
+ⓘ info: file is already installed at -- ../installer-test-home/.lnav/formats/installed/test_log.json
diff --git a/test/expected/test_format_loader.sh_15e861d2327512a721fd42ae51dc5427689e0bb6.out b/test/expected/test_format_loader.sh_15e861d2327512a721fd42ae51dc5427689e0bb6.out
index 5f62842..2b877c6 100644
--- a/test/expected/test_format_loader.sh_15e861d2327512a721fd42ae51dc5427689e0bb6.out
+++ b/test/expected/test_format_loader.sh_15e861d2327512a721fd42ae51dc5427689e0bb6.out
@@ -1,9 +1,9 @@
-log_line,log_part,log_time,log_idle_msecs,log_level,log_mark,log_comment,log_tags,log_filters
-0,<NULL>,2016-06-30 12:00:01.000,0,trace,0,<NULL>,<NULL>,<NULL>
-1,<NULL>,2016-06-30 12:00:02.000,1000,debug,0,<NULL>,<NULL>,<NULL>
-2,<NULL>,2016-06-30 12:00:03.000,1000,debug2,0,<NULL>,<NULL>,<NULL>
-3,<NULL>,2016-06-30 12:00:04.000,1000,debug3,0,<NULL>,<NULL>,<NULL>
-4,<NULL>,2016-06-30 12:00:05.000,1000,info,0,<NULL>,<NULL>,<NULL>
-5,<NULL>,2016-06-30 12:00:06.000,1000,warning,0,<NULL>,<NULL>,<NULL>
-6,<NULL>,2016-06-30 12:00:07.000,1000,fatal,0,<NULL>,<NULL>,<NULL>
-7,<NULL>,2016-06-30 12:00:08.000,1000,info,0,<NULL>,<NULL>,<NULL>
+log_line,log_time,log_level,log_part,log_idle_msecs,log_mark,log_comment,log_tags,log_annotations,log_filters
+0,2016-06-30 12:00:01.000,trace,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>
+1,2016-06-30 12:00:02.000,debug,<NULL>,1000,0,<NULL>,<NULL>,<NULL>,<NULL>
+2,2016-06-30 12:00:03.000,debug2,<NULL>,1000,0,<NULL>,<NULL>,<NULL>,<NULL>
+3,2016-06-30 12:00:04.000,debug3,<NULL>,1000,0,<NULL>,<NULL>,<NULL>,<NULL>
+4,2016-06-30 12:00:05.000,info,<NULL>,1000,0,<NULL>,<NULL>,<NULL>,<NULL>
+5,2016-06-30 12:00:06.000,warning,<NULL>,1000,0,<NULL>,<NULL>,<NULL>,<NULL>
+6,2016-06-30 12:00:07.000,fatal,<NULL>,1000,0,<NULL>,<NULL>,<NULL>,<NULL>
+7,2016-06-30 12:00:08.000,info,<NULL>,1000,0,<NULL>,<NULL>,<NULL>,<NULL>
diff --git a/test/expected/test_format_loader.sh_3f1d6f35e8a9ae4fd3e91ffaa82a037b5a847ab7.err b/test/expected/test_format_loader.sh_3f1d6f35e8a9ae4fd3e91ffaa82a037b5a847ab7.err
deleted file mode 100644
index 202b451..0000000
--- a/test/expected/test_format_loader.sh_3f1d6f35e8a9ae4fd3e91ffaa82a037b5a847ab7.err
+++ /dev/null
@@ -1,171 +0,0 @@
-✘ error: “invalid(abc” is not a valid regular expression
- reason: missing closing parenthesis
- --> /invalid_props_log/tags/badtag3/pattern
- | invalid(abc 
- |  ^ missing closing parenthesis
- --> {test_dir}/bad-config/formats/invalid-properties/format.json:35
- |  "pattern": "invalid(abc"
- = help: Property Synopsis
- /invalid_props_log/tags/badtag3/pattern <regex>
- Description
- The regular expression to match against the body of the log message
- Example
- \w+ is down
-✘ error: “abc(def” is not a valid regular expression
- reason: missing closing parenthesis
- --> /invalid_props_log/search-table/bad_table_regex/pattern
- | abc(def 
- |  ^ missing closing parenthesis 
- --> {test_dir}/bad-config/formats/invalid-properties/format.json:40
- |  "pattern": "abc(def" 
- = help: Property Synopsis
- /invalid_props_log/search-table/bad_table_regex/pattern <regex>
- Description
- The regular expression for this search table.
-✘ error: “^(?<timestamp>\d+: (?<body>.*)$” is not a valid regular expression
- reason: missing closing parenthesis
- --> /bad_regex_log/regex/std/pattern
- | ^(?<timestamp>\d+: (?<body>.*)$ 
- |  ^ missing closing parenthesis
- --> {test_dir}/bad-config/formats/invalid-regex/format.json:6
- |  "pattern": "^(?<timestamp>\\d+: (?<body>.*)$"
- = help: Property Synopsis
- /bad_regex_log/regex/std/pattern <message-regex>
- Description
- The regular expression to match a log message and capture fields.
-✘ error: “(foo” is not a valid regular expression
- reason: missing closing parenthesis
- --> pattern
- | (foo 
- |  ^ missing closing parenthesis 
- --> {test_dir}/bad-config/formats/invalid-regex/format.json:13
- |  "error": "(foo" 
- = help: Property Synopsis
- /bad_regex_log/level/error <pattern|integer>
- Description
- The regular expression used to match the log text for this level. For JSON logs with numeric levels, this should be the number for the corresponding level.
-✘ error: “abc(” is not a valid regular expression
- reason: missing closing parenthesis
- --> /bad_regex_log/highlights/foobar/pattern
- | abc( 
- |  ^ missing closing parenthesis 
- --> {test_dir}/bad-config/formats/invalid-regex/format.json:25
- |  "pattern": "abc(" 
- = help: Property Synopsis
- /bad_regex_log/highlights/foobar/pattern <regex>
- Description
- A regular expression to highlight in logs of this format.
-✘ error: “foo” is not a valid value for option “/bad_sample_log/value/pid/kind”
- --> {test_dir}/bad-config/formats/invalid-sample/format.json:24
- |  "kind": "foo" 
- = help: Property Synopsis
- /bad_sample_log/value/pid/kind <data-type>
- Description
- The type of data in the field
- Allowed Values
- string, integer, float, boolean, json, struct, quoted, xml
-✘ error: 'bad' is not a supported log format $schema version
- --> {test_dir}/bad-config/formats/invalid-schema/format.json:2
- |  "$schema": "bad" 
- = note: expecting one of the following $schema values:
-  https://lnav.org/schemas/format-v1.schema.json
- = help: Property Synopsis
- /$schema The URI of the schema for this file
- Description
- Specifies the type of this file
-✘ error: invalid pattern: “incomplete-match”
- reason: pattern does not match entire message
- --> {test_dir}/bad-config/formats/invalid-regex/format.json:20
- | 1428634687123; foo 
- |  ^ matched up to here 
- = note: incomplete-match = ^(?<timestamp>\d+);
- = help: update the regular expression to fully capture the sample message
-✘ error: invalid sample log message: "abc: foo"
- reason: unrecognized timestamp -- abc
- --> {test_dir}/bad-config/formats/invalid-sample/format.json:30
- = note: the following custom formats were tried:
- abc
- ^ “%i” matched up to here
- = help: If the timestamp format is not supported by default, you can add a custom format with the “timestamp-format” property
-✘ error: invalid sample log message: "1428634687123| debug hello"
- reason: “debug” does not match the expected level of “info”
- --> {test_dir}/bad-config/formats/invalid-sample/format.json:33
- = note: matched regex = with-level
- captured level = “debug”
-✘ error: invalid pattern: “with-level”
- reason: pattern does not match entire multiline sample message
- --> {test_dir}/bad-config/formats/invalid-sample/format.json:37
- = note: with-level = ^(?<timestamp>\d+)\| (?<level>\w+) (?<body>\w+)$
- = help: use “.*” to match new-lines
-✘ error: invalid sample log message: "1428634687123; foo bar"
- reason: sample does not match any patterns
- --> {test_dir}/bad-config/formats/invalid-sample/format.json:41
- = note: the following shows how each pattern matched this sample:
- 1428634687123; foo bar
- ^ bad-time matched up to here
- ^ semi matched up to here
- ^ std matched up to here
- ^ with-level matched up to here
- = note: bad-time  = “^(?<timestamp>\w+): (?<body>\w+)$”
- semi  = “^(?<timestamp>\d+); (?<body>\w+)$”
- std  = “^(?<timestamp>\d+): (?<pid>\w+) (?<body>.*)$”
- with-level = “^(?<timestamp>\d+)\| (?<level>\w+) (?<body>\w+)$”
-
-⚠ warning: invalid pattern: “/bad_sample_log/regex/semi”
- reason: pattern does not match any samples
- --> {test_dir}/bad-config/formats/invalid-sample/format.json:10
- = help: every pattern should have at least one sample that it matches
-⚠ warning: invalid pattern: “/bad_sample_log/regex/std”
- reason: pattern does not match any samples
- --> {test_dir}/bad-config/formats/invalid-sample/format.json:7
- = help: every pattern should have at least one sample that it matches
-⚠ warning: invalid value “/invalid_props_log/value/non-existent”
- reason: no patterns have a capture named “non-existent”
- --> {test_dir}/bad-config/formats/invalid-properties/format.json:4
- = note: the following captures are available:
- body, pid, timestamp
- = help: values are populated from captures in patterns, so at least one pattern must have a capture with this value name
-✘ error: invalid tag definition “/invalid_props_log/tags/badtag”
- reason: tag definitions must have a non-empty pattern
- --> {test_dir}/bad-config/formats/invalid-properties/format.json:4
-✘ error: invalid tag definition “/invalid_props_log/tags/badtag2”
- reason: tag definitions must have a non-empty pattern
- --> {test_dir}/bad-config/formats/invalid-properties/format.json:4
-✘ error: invalid tag definition “/invalid_props_log/tags/badtag3”
- reason: tag definitions must have a non-empty pattern
- --> {test_dir}/bad-config/formats/invalid-properties/format.json:4
-✘ error: invalid value for property “/invalid_props_log/timestamp-field”
- reason: “ts” was not found in the pattern at /invalid_props_log/regex/std
- --> {test_dir}/bad-config/formats/invalid-properties/format.json:4
- = note: the following captures are available:
- body, pid, timestamp
-✘ error: “not a color” is not a valid color value for property “/invalid_props_log/highlights/hl1/color”
- reason: Unknown color: 'not a color'. See https://jonasjacek.github.io/colors/ for a list of supported color names
- --> {test_dir}/bad-config/formats/invalid-properties/format.json:23
-✘ error: “also not a color” is not a valid color value for property “/invalid_props_log/highlights/hl1/background-color”
- reason: Unknown color: 'also not a color'. See https://jonasjacek.github.io/colors/ for a list of supported color names
- --> {test_dir}/bad-config/formats/invalid-properties/format.json:24
-✘ error: “no_regexes_log” is not a valid log format
- reason: no regexes specified
- --> {test_dir}/bad-config/formats/no-regexes/format.json:4
-✘ error: “no_regexes_log” is not a valid log format
- reason: log message samples must be included in a format definition
- --> {test_dir}/bad-config/formats/no-regexes/format.json:4
-✘ error: “no_sample_log” is not a valid log format
- reason: log message samples must be included in a format definition
- --> {test_dir}/bad-config/formats/no-samples/format.json:4
-✘ error: failed to compile SQL statement
- reason: near "TALE": syntax error
- --> {test_dir}/bad-config/formats/invalid-sql/init.sql:4
- | -- comment test 
- | CREATE TALE invalid (x y z); 
- |  ^ near "TALE": syntax error 
-✘ error: failed to execute SQL statement
- reason: ✘ error: “abc(” is not a valid regular expression
- |  reason: missing closing parenthesis
- |   --> arg
- |   | abc( 
- |   |  ^ missing closing parenthesis
- --> {test_dir}/bad-config/formats/invalid-sql/init2.sql
- | SELECT regexp_match('abc(', '123') 
- | FROM sqlite_master; 
diff --git a/test/expected/test_format_loader.sh_5992e2695b7e6cf1f3520dbb87af8fc2b8f27088.err b/test/expected/test_format_loader.sh_5992e2695b7e6cf1f3520dbb87af8fc2b8f27088.err
index c3d7699..578c06f 100644
--- a/test/expected/test_format_loader.sh_5992e2695b7e6cf1f3520dbb87af8fc2b8f27088.err
+++ b/test/expected/test_format_loader.sh_5992e2695b7e6cf1f3520dbb87af8fc2b8f27088.err
@@ -104,6 +104,13 @@
/$schema The URI of the schema for this file
Description
Specifies the type of this file
+✘ error: SQL expression is invalid
+ reason: unrecognized token: "'foobar"
+ --> /bad_file_format1/converter/header/expr/default
+ | :header REGEXP 'foobar 
+✘ error: A command is required when a converter is defined
+ --> {test_dir}/bad-config/formats/invalid-file-format/format.json:4
+ = help: The converter command transforms the file into a format that can be consumed by lnav
✘ error: invalid line format element “/bad_json_log/line-format/0/field”
reason: “” is not a defined value
 --> {test_dir}/bad-config/formats/invalid-json-format/format.json:7
@@ -160,6 +167,10 @@
reason: pattern does not match any samples
 --> {test_dir}/bad-config/formats/invalid-sample/format.json:7
 = help: every pattern should have at least one sample that it matches
+✘ error: invalid pattern: “/invalid_props_log/regex/std”
+ reason: no timestamp capture found in the pattern
+ --> {test_dir}/bad-config/formats/invalid-properties/format.json:4
+ = help: all log messages need a timestamp
⚠ warning: invalid value “/invalid_props_log/value/non-existent”
reason: no patterns have a capture named “non-existent”
 --> {test_dir}/bad-config/formats/invalid-properties/format.json:4
@@ -198,6 +209,10 @@
✘ error: “no_sample_log” is not a valid log format
reason: log message samples must be included in a format definition
 --> {test_dir}/bad-config/formats/no-samples/format.json:4
+✘ error: invalid sample log message: "gitea | 2023/09/24 22:15:55 cmd/web.go:223:runWeb() [I] Starting Gitea on PID: 7"
+ reason: timestamp was not captured
+ --> {test_dir}/bad-config/formats/invalid-no-tscap/format.json:25
+ = help: A timestamp needs to be captured in order for a line to be recognized as a log message
✘ error: failed to compile SQL statement
reason: near "TALE": syntax error
 --> {test_dir}/bad-config/formats/invalid-sql/init.sql:4
diff --git a/test/expected/test_format_loader.sh_a47f2b090a5d8a226783835c7ff7d1c8821f11ed.err b/test/expected/test_format_loader.sh_a47f2b090a5d8a226783835c7ff7d1c8821f11ed.err
deleted file mode 100644
index f657d87..0000000
--- a/test/expected/test_format_loader.sh_a47f2b090a5d8a226783835c7ff7d1c8821f11ed.err
+++ /dev/null
@@ -1,61 +0,0 @@
-✘ error: invalid JSON
- --> {test_dir}/bad-config-json/formats/invalid-json/format.json:4
- | parse error: object key and value must be separated by a colon (':')
- |  ar_log": { "abc" } }
- |  (right here) ------^
- | 
-✘ error: “abc(” is not a valid regular expression
- reason: missing closing parenthesis
- --> /invalid_key_log/level-pointer
- | abc( 
- |  ^ missing closing parenthesis 
- --> {test_dir}/bad-config-json/formats/invalid-key/format.json:4
- |  "level-pointer": "abc(", 
- = help: Property Synopsis
- /invalid_key_log/level-pointer
- Description
- A regular-expression that matches the JSON-pointer of the level property
-✘ error: “def[ghi” is not a valid regular expression
- reason: missing terminating ] for character class
- --> /invalid_key_log/file-pattern
- | def[ghi 
- |  ^ missing terminating ] for character class
- --> {test_dir}/bad-config-json/formats/invalid-key/format.json:5
- |  "file-pattern": "def[ghi", 
- = help: Property Synopsis
- /invalid_key_log/file-pattern
- Description
- A regular expression that restricts this format to log files with a matching name
-⚠ warning: unexpected value for property “/invalid_key_log/value/test/identifiers”
- --> {test_dir}/bad-config-json/formats/invalid-key/format.json:14
- |  "identifiers": true 
- = help: Available Properties
- kind <data-type>
- collate <function>
- unit/
- identifier <bool>
- foreign-key <bool>
- hidden <bool>
- action-list <string>
- rewriter <command>
- description <string>
-✘ error: “-1.2” is not a valid value for “/invalid_key_log/timestamp-divisor”
- reason: value cannot be less than or equal to zero
- --> {test_dir}/bad-config-json/formats/invalid-key/format.json:25
- |  "timestamp-divisor": -1.2 
- = help: Property Synopsis
- /invalid_key_log/timestamp-divisor <number>
- Description
- The value to divide a numeric timestamp by in a JSON log.
-✘ error: “foobar_log” is not a valid log format
- reason: no regexes specified
- --> {test_dir}/bad-config-json/formats/invalid-json/format.json:3
-✘ error: “foobar_log” is not a valid log format
- reason: log message samples must be included in a format definition
- --> {test_dir}/bad-config-json/formats/invalid-json/format.json:3
-✘ error: “invalid_key_log” is not a valid log format
- reason: structured logs cannot have regexes
- --> {test_dir}/bad-config-json/formats/invalid-key/format.json:4
-✘ error: invalid line format element “/invalid_key_log/line-format/0/field”
- reason: “non-existent” is not a defined value
- --> {test_dir}/bad-config-json/formats/invalid-key/format.json:22
diff --git a/test/expected/test_format_loader.sh_fca6c1fb9f3aaa69b3ffb2d1a8a86434b2f4a247.err b/test/expected/test_format_loader.sh_fca6c1fb9f3aaa69b3ffb2d1a8a86434b2f4a247.err
index 3272370..6ce508e 100644
--- a/test/expected/test_format_loader.sh_fca6c1fb9f3aaa69b3ffb2d1a8a86434b2f4a247.err
+++ b/test/expected/test_format_loader.sh_fca6c1fb9f3aaa69b3ffb2d1a8a86434b2f4a247.err
@@ -58,6 +58,10 @@
✘ error: “foobar_log” is not a valid log format
reason: log message samples must be included in a format definition
 --> {test_dir}/bad-config-json/formats/invalid-json/format.json:3
+✘ error: invalid pattern: “/invalid_key_log/regex/foo”
+ reason: no timestamp capture found in the pattern
+ --> {test_dir}/bad-config-json/formats/invalid-key/format.json:4
+ = help: all log messages need a timestamp
✘ error: “invalid_key_log” is not a valid log format
reason: structured logs cannot have regexes
 --> {test_dir}/bad-config-json/formats/invalid-key/format.json:4
diff --git a/test/expected/test_gantt.sh_3af11588ee36bab7e2caea0f7a24d3c9cafd2310.err b/test/expected/test_gantt.sh_3af11588ee36bab7e2caea0f7a24d3c9cafd2310.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_gantt.sh_3af11588ee36bab7e2caea0f7a24d3c9cafd2310.err
diff --git a/test/expected/test_gantt.sh_3af11588ee36bab7e2caea0f7a24d3c9cafd2310.out b/test/expected/test_gantt.sh_3af11588ee36bab7e2caea0f7a24d3c9cafd2310.out
new file mode 100644
index 0000000..c523914
--- /dev/null
+++ b/test/expected/test_gantt.sh_3af11588ee36bab7e2caea0f7a24d3c9cafd2310.out
@@ -0,0 +1,86 @@
+ 2011-11-03T00:17 5m 2011-11-03T00:22
+ 5m
+ Duration | ✘▲ | Operation
+ 844    CwFs1P2UcUdlSxD2La 192.168.2.76
+     CoX7zA3OJKGUOSCBY2 192.168.2.76
+     CdrfXZ1NOFPEawF218 192.168.2.76
+     CJwUi9bdB9c1lLW44  192.168.2.76
+     CJxSUgkInyKSHiju1  192.168.2.76
+     CT0JIh479jXIGt0Po1 192.168.2.76
+     C6Q4Vm14ZJIlZhsXqk 192.168.2.76
+ 1s070    CtgxRAqDLvrRUQdqe  192.168.2.76
+     CdysLK1XpcrXOpVDuh 192.168.2.76
+ 200    C6nSoj1Qco9PGyslz6 192.168.2.76
+ 23s044    CN5hnY3x51j6Hr1v4 192.168.2.76
+     CdZUPH2DKOE7zzCLE3 192.168.2.76
+ 32s388    CmWpC33jXuKpXNLcie 192.168.2.76
+     CsBgiE1WmGP4Yo749h 192.168.2.76
+ 657    CYfHyC28tAhkLYkXB7 192.168.2.76
+     CtANmVrHYMtkWqPE5  192.168.2.76
+ 647    CSTH8n1O1nv0ztxNQd 192.168.2.76
+     C4uDKU5tpeRU9Su19  192.168.2.76
+     CEh6Ka2HInkNSH01L2 192.168.2.76
+ 4s840    CjPGiy13ncXKxU765j 192.168.2.76
+ 6s895    CPoz7NUpXISemlNSd  192.168.2.76
+ 6s837    Ct6ixh35y9AEr7J7o9 192.168.2.76
+ 6s889    CaEFHq2HVQ5iGJQiD9 192.168.2.76
+ 6s875    CjinlH2fzDtvzI9637 192.168.2.76
+ 6s884    Cedw7H3ddE2yLiLoXc 192.168.2.76
+ 6s917    CAUlC249svUfE6q0g3 192.168.2.76
+     CIJIDL1ULo4HpT24Gl 192.168.2.76
+ 016    CLsqp41RLUd83arUQb 192.168.2.76
+ 166    CbCciH11995WKkobR1 192.168.2.76
+ 457    ClcvKE1dqsEFQu46m9 192.168.2.76
+     CaP2LpLGvsmX7yJO  192.168.2.76
+ 043    CNbPns4mOMGgjI8Ele 192.168.2.76
+ 557    C185u7u9Q4qhJPhzl  192.168.2.76
+ 129    CKzjfhsJ8vrn2rrfg  192.168.2.76
+ 562    CiIjAe1n5MnPOVpQ9f 192.168.2.76
+     CGv2Tp4Ngt8MmKmVRd 192.168.2.76
+ 7s071    C5DisEMFU77Wk9Kae  192.168.2.76
+     Cs5yEZ3ELZTeuTOsP4 192.168.2.76
+ 4s667    Cu4gIx1BDNtGOl7Ht2 192.168.2.76
+ 1s288    CRgW2I2zo3SInm6iT8 192.168.2.76
+     CWJhMU2cTLEnseTmCb 192.168.2.76
+ 042    CejI402rKGtdBXij4f 192.168.2.76
+     C2KnU34GcVV6amo8va 192.168.2.76
+     C5vx4911iSMAJuShFd 192.168.2.76
+     CbUCgw1DrIGcXzONB7 192.168.2.76
+ 502    C96j2X1DixgLTj2Oi8 192.168.2.76
+     CYYyja3FFNEnftw3K6 192.168.2.76
+  █  CBHHuR1xFnm5C5CQBc 192.168.2.76
+     CD1jfU3p9abEm77mzf 192.168.2.76
+     C0K9DaoPFkfnzwlZa 192.168.2.76
+ 616    CbQAWi3GX2bCmX5L56 192.168.2.76
+ 298    Cd8s2R3OGDgkhnvSu9 192.168.2.76
+ 205    CBeaXe4Iyj1gXd2Iq 192.168.2.76
+     CmWpSw3VtjiAceBCwf 192.168.2.76
+ 1m12s201    CbNCgO1MzloHRNeY4f 192.168.2.76
+ 315    CX1GjC4vn52UY1uDv6 192.168.2.76
+     CaPClb1Bf0RrRGtyWi 192.168.2.76
+ 35s642    CibfNy1QQW4ImDWRq5 192.168.2.76
+ 1m11s547    CTRXSR3blXJE5ZE7Ij 192.168.2.76
+ 1m11s536    CnGze54kQWWpKqrrZ4 192.168.2.76
+ 12s337    C3TZMB4CrUwYfkGJy1 192.168.2.76
+     CK957ERTz8lBycly4 192.168.2.76
+ 1s309    CO5QKYQkcSdxQFA35 192.168.2.76
+     CurHpb1TGZOktTRNP1 192.168.2.76
+     CuUKOQ1R3CqKBgeTdf 192.168.2.76
+     C3xkHgJnzZszVSTpi 192.168.2.76
+     CMrjgF2XLmRh9C9TR4 192.168.2.76
+     C2vQ8sVgyADHjtEda 192.168.2.76
+     CD69521bDXIAb4IkW 192.168.2.76
+ 6s648    CC3vUI3gFB04zLvWRa 192.168.2.76
+ 2s666    C7Krri4g9tZfHniGXh 192.168.2.76
+     CmxyBl2c8XAMTuHEk4 192.168.2.76
+ 499    CSvs6v26bQqFylkk6l 192.168.2.76
+     C4pHul1H3OeWYz7o7i 192.168.2.76
+     C7Lcvr4vsTf6eYpBva 192.168.2.76
+     CV8faD4L1sLL5kDwN9 192.168.2.76
+     CxyAKs10ppnHFP6O8i 192.168.2.76
+     C6MrHk2C7rLuJqhjsg 192.168.2.76
+     CvfUrT2DgYXXoZw9Ah 192.168.2.76
+     CBX0254QJoklXNbvv2 192.168.2.76
+     C6Ym6jvMgikT0xTTc 192.168.2.76
+     CRNn9f1zKNlzHSM5pa 192.168.2.76
+     CJLgi92kpp2gLgGTE5 192.168.2.76
diff --git a/test/expected/test_gantt.sh_63500be50fc6743d8312133e2030cbbc39ca15ff.err b/test/expected/test_gantt.sh_63500be50fc6743d8312133e2030cbbc39ca15ff.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_gantt.sh_63500be50fc6743d8312133e2030cbbc39ca15ff.err
diff --git a/test/expected/test_gantt.sh_63500be50fc6743d8312133e2030cbbc39ca15ff.out b/test/expected/test_gantt.sh_63500be50fc6743d8312133e2030cbbc39ca15ff.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_gantt.sh_63500be50fc6743d8312133e2030cbbc39ca15ff.out
diff --git a/test/expected/test_gantt.sh_74a94ee9103eac5e8e78ca57bccf49efa3827a9d.err b/test/expected/test_gantt.sh_74a94ee9103eac5e8e78ca57bccf49efa3827a9d.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_gantt.sh_74a94ee9103eac5e8e78ca57bccf49efa3827a9d.err
diff --git a/test/expected/test_gantt.sh_74a94ee9103eac5e8e78ca57bccf49efa3827a9d.out b/test/expected/test_gantt.sh_74a94ee9103eac5e8e78ca57bccf49efa3827a9d.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_gantt.sh_74a94ee9103eac5e8e78ca57bccf49efa3827a9d.out
diff --git a/test/expected/test_gantt.sh_83db753dd2669f801810f311e2d7d74397e10f26.err b/test/expected/test_gantt.sh_83db753dd2669f801810f311e2d7d74397e10f26.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_gantt.sh_83db753dd2669f801810f311e2d7d74397e10f26.err
diff --git a/test/expected/test_gantt.sh_83db753dd2669f801810f311e2d7d74397e10f26.out b/test/expected/test_gantt.sh_83db753dd2669f801810f311e2d7d74397e10f26.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_gantt.sh_83db753dd2669f801810f311e2d7d74397e10f26.out
diff --git a/test/expected/test_gantt.sh_8fed8a7400042814ba13e50be5e3bd1741d82119.err b/test/expected/test_gantt.sh_8fed8a7400042814ba13e50be5e3bd1741d82119.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_gantt.sh_8fed8a7400042814ba13e50be5e3bd1741d82119.err
diff --git a/test/expected/test_gantt.sh_8fed8a7400042814ba13e50be5e3bd1741d82119.out b/test/expected/test_gantt.sh_8fed8a7400042814ba13e50be5e3bd1741d82119.out
new file mode 100644
index 0000000..ffa9459
--- /dev/null
+++ b/test/expected/test_gantt.sh_8fed8a7400042814ba13e50be5e3bd1741d82119.out
@@ -0,0 +1,85 @@
+ 2011-11-03T00:17 5m 2011-11-03T00:22
+ 5m
+ Duration | ✘▲ | Operation
+ 844    CwFs1P2UcUdlSxD2La 192.168.2.76
+     CoX7zA3OJKGUOSCBY2 192.168.2.76
+     CdrfXZ1NOFPEawF218 192.168.2.76
+     CJwUi9bdB9c1lLW44  192.168.2.76
+     CJxSUgkInyKSHiju1  192.168.2.76
+     CT0JIh479jXIGt0Po1 192.168.2.76
+     C6Q4Vm14ZJIlZhsXqk 192.168.2.76
+ 1s070    CtgxRAqDLvrRUQdqe  192.168.2.76
+ 200    C6nSoj1Qco9PGyslz6 192.168.2.76
+ 23s044    CN5hnY3x51j6Hr1v4 192.168.2.76
+     CdZUPH2DKOE7zzCLE3 192.168.2.76
+ 32s388    CmWpC33jXuKpXNLcie 192.168.2.76
+     CsBgiE1WmGP4Yo749h 192.168.2.76
+ 657    CYfHyC28tAhkLYkXB7 192.168.2.76
+     CtANmVrHYMtkWqPE5  192.168.2.76
+ 647    CSTH8n1O1nv0ztxNQd 192.168.2.76
+     C4uDKU5tpeRU9Su19  192.168.2.76
+     CEh6Ka2HInkNSH01L2 192.168.2.76
+ 4s840    CjPGiy13ncXKxU765j 192.168.2.76
+ 6s895    CPoz7NUpXISemlNSd  192.168.2.76
+ 6s837    Ct6ixh35y9AEr7J7o9 192.168.2.76
+ 6s889    CaEFHq2HVQ5iGJQiD9 192.168.2.76
+ 6s875    CjinlH2fzDtvzI9637 192.168.2.76
+ 6s884    Cedw7H3ddE2yLiLoXc 192.168.2.76
+ 6s917    CAUlC249svUfE6q0g3 192.168.2.76
+     CIJIDL1ULo4HpT24Gl 192.168.2.76
+ 016    CLsqp41RLUd83arUQb 192.168.2.76
+ 166    CbCciH11995WKkobR1 192.168.2.76
+ 457    ClcvKE1dqsEFQu46m9 192.168.2.76
+     CaP2LpLGvsmX7yJO  192.168.2.76
+ 043    CNbPns4mOMGgjI8Ele 192.168.2.76
+ 557    C185u7u9Q4qhJPhzl  192.168.2.76
+ 129    CKzjfhsJ8vrn2rrfg  192.168.2.76
+ 562    CiIjAe1n5MnPOVpQ9f 192.168.2.76
+     CGv2Tp4Ngt8MmKmVRd 192.168.2.76
+ 7s071    C5DisEMFU77Wk9Kae  192.168.2.76
+     Cs5yEZ3ELZTeuTOsP4 192.168.2.76
+ 4s667    Cu4gIx1BDNtGOl7Ht2 192.168.2.76
+ 1s288    CRgW2I2zo3SInm6iT8 192.168.2.76
+     CWJhMU2cTLEnseTmCb 192.168.2.76
+ 042    CejI402rKGtdBXij4f 192.168.2.76
+     C2KnU34GcVV6amo8va 192.168.2.76
+     C5vx4911iSMAJuShFd 192.168.2.76
+     CbUCgw1DrIGcXzONB7 192.168.2.76
+ 502    C96j2X1DixgLTj2Oi8 192.168.2.76
+     CYYyja3FFNEnftw3K6 192.168.2.76
+  █  CBHHuR1xFnm5C5CQBc 192.168.2.76
+     CD1jfU3p9abEm77mzf 192.168.2.76
+     C0K9DaoPFkfnzwlZa 192.168.2.76
+ 616    CbQAWi3GX2bCmX5L56 192.168.2.76
+ 298    Cd8s2R3OGDgkhnvSu9 192.168.2.76
+ 205    CBeaXe4Iyj1gXd2Iq 192.168.2.76
+     CmWpSw3VtjiAceBCwf 192.168.2.76
+ 1m12s201    CbNCgO1MzloHRNeY4f 192.168.2.76
+ 315    CX1GjC4vn52UY1uDv6 192.168.2.76
+     CaPClb1Bf0RrRGtyWi 192.168.2.76
+ 35s642    CibfNy1QQW4ImDWRq5 192.168.2.76
+ 1m11s547    CTRXSR3blXJE5ZE7Ij 192.168.2.76
+ 1m11s536    CnGze54kQWWpKqrrZ4 192.168.2.76
+ 12s337    C3TZMB4CrUwYfkGJy1 192.168.2.76
+     CK957ERTz8lBycly4 192.168.2.76
+ 1s309    CO5QKYQkcSdxQFA35 192.168.2.76
+     CurHpb1TGZOktTRNP1 192.168.2.76
+     CuUKOQ1R3CqKBgeTdf 192.168.2.76
+     C3xkHgJnzZszVSTpi 192.168.2.76
+     CMrjgF2XLmRh9C9TR4 192.168.2.76
+     C2vQ8sVgyADHjtEda 192.168.2.76
+     CD69521bDXIAb4IkW 192.168.2.76
+ 6s648    CC3vUI3gFB04zLvWRa 192.168.2.76
+ 2s666    C7Krri4g9tZfHniGXh 192.168.2.76
+     CmxyBl2c8XAMTuHEk4 192.168.2.76
+ 499    CSvs6v26bQqFylkk6l 192.168.2.76
+     C4pHul1H3OeWYz7o7i 192.168.2.76
+     C7Lcvr4vsTf6eYpBva 192.168.2.76
+     CV8faD4L1sLL5kDwN9 192.168.2.76
+     CxyAKs10ppnHFP6O8i 192.168.2.76
+     C6MrHk2C7rLuJqhjsg 192.168.2.76
+     CvfUrT2DgYXXoZw9Ah 192.168.2.76
+     CBX0254QJoklXNbvv2 192.168.2.76
+     C6Ym6jvMgikT0xTTc 192.168.2.76
+     CRNn9f1zKNlzHSM5pa 192.168.2.76
+     CJLgi92kpp2gLgGTE5 192.168.2.76
diff --git a/test/expected/test_gantt.sh_b013ab41c3cca76cf05a01ca1ba65888be247ada.err b/test/expected/test_gantt.sh_b013ab41c3cca76cf05a01ca1ba65888be247ada.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_gantt.sh_b013ab41c3cca76cf05a01ca1ba65888be247ada.err
diff --git a/test/expected/test_gantt.sh_b013ab41c3cca76cf05a01ca1ba65888be247ada.out b/test/expected/test_gantt.sh_b013ab41c3cca76cf05a01ca1ba65888be247ada.out
new file mode 100644
index 0000000..67a56e3
--- /dev/null
+++ b/test/expected/test_gantt.sh_b013ab41c3cca76cf05a01ca1ba65888be247ada.out
@@ -0,0 +1,70 @@
+ 2011-11-03T00:17 5m 2011-11-03T00:22
+ 5m
+ Duration | ✘▲ | Operation
+ 23s044    CN5hnY3x51j6Hr1v4 192.168.2.76
+ 32s388    CmWpC33jXuKpXNLcie 192.168.2.76
+     CEh6Ka2HInkNSH01L2 192.168.2.76
+ 4s840    CjPGiy13ncXKxU765j 192.168.2.76
+ 6s895    CPoz7NUpXISemlNSd  192.168.2.76
+ 6s837    Ct6ixh35y9AEr7J7o9 192.168.2.76
+ 6s889    CaEFHq2HVQ5iGJQiD9 192.168.2.76
+ 6s875    CjinlH2fzDtvzI9637 192.168.2.76
+ 6s884    Cedw7H3ddE2yLiLoXc 192.168.2.76
+ 6s917    CAUlC249svUfE6q0g3 192.168.2.76
+     CIJIDL1ULo4HpT24Gl 192.168.2.76
+ 016    CLsqp41RLUd83arUQb 192.168.2.76
+ 166    CbCciH11995WKkobR1 192.168.2.76
+ 457    ClcvKE1dqsEFQu46m9 192.168.2.76
+     CaP2LpLGvsmX7yJO  192.168.2.76
+ 043    CNbPns4mOMGgjI8Ele 192.168.2.76
+ 557    C185u7u9Q4qhJPhzl  192.168.2.76
+ 129    CKzjfhsJ8vrn2rrfg  192.168.2.76
+ 562    CiIjAe1n5MnPOVpQ9f 192.168.2.76
+     CGv2Tp4Ngt8MmKmVRd 192.168.2.76
+ 7s071    C5DisEMFU77Wk9Kae  192.168.2.76
+     Cs5yEZ3ELZTeuTOsP4 192.168.2.76
+ 4s667    Cu4gIx1BDNtGOl7Ht2 192.168.2.76
+ 1s288    CRgW2I2zo3SInm6iT8 192.168.2.76
+     CWJhMU2cTLEnseTmCb 192.168.2.76
+ 042    CejI402rKGtdBXij4f 192.168.2.76
+     C2KnU34GcVV6amo8va 192.168.2.76
+     C5vx4911iSMAJuShFd 192.168.2.76
+     CbUCgw1DrIGcXzONB7 192.168.2.76
+ 502    C96j2X1DixgLTj2Oi8 192.168.2.76
+     CYYyja3FFNEnftw3K6 192.168.2.76
+  █  CBHHuR1xFnm5C5CQBc 192.168.2.76
+     CD1jfU3p9abEm77mzf 192.168.2.76
+     C0K9DaoPFkfnzwlZa 192.168.2.76
+ 616    CbQAWi3GX2bCmX5L56 192.168.2.76
+ 298    Cd8s2R3OGDgkhnvSu9 192.168.2.76
+ 205    CBeaXe4Iyj1gXd2Iq 192.168.2.76
+     CmWpSw3VtjiAceBCwf 192.168.2.76
+ 1m12s201    CbNCgO1MzloHRNeY4f 192.168.2.76
+ 315    CX1GjC4vn52UY1uDv6 192.168.2.76
+     CaPClb1Bf0RrRGtyWi 192.168.2.76
+ 35s642    CibfNy1QQW4ImDWRq5 192.168.2.76
+ 1m11s547    CTRXSR3blXJE5ZE7Ij 192.168.2.76
+ 1m11s536    CnGze54kQWWpKqrrZ4 192.168.2.76
+ 12s337    C3TZMB4CrUwYfkGJy1 192.168.2.76
+     CK957ERTz8lBycly4 192.168.2.76
+ 1s309    CO5QKYQkcSdxQFA35 192.168.2.76
+     CurHpb1TGZOktTRNP1 192.168.2.76
+     CuUKOQ1R3CqKBgeTdf 192.168.2.76
+     C3xkHgJnzZszVSTpi 192.168.2.76
+     CMrjgF2XLmRh9C9TR4 192.168.2.76
+     C2vQ8sVgyADHjtEda 192.168.2.76
+     CD69521bDXIAb4IkW 192.168.2.76
+ 6s648    CC3vUI3gFB04zLvWRa 192.168.2.76
+ 2s666    C7Krri4g9tZfHniGXh 192.168.2.76
+     CmxyBl2c8XAMTuHEk4 192.168.2.76
+ 499    CSvs6v26bQqFylkk6l 192.168.2.76
+     C4pHul1H3OeWYz7o7i 192.168.2.76
+     C7Lcvr4vsTf6eYpBva 192.168.2.76
+     CV8faD4L1sLL5kDwN9 192.168.2.76
+     CxyAKs10ppnHFP6O8i 192.168.2.76
+     C6MrHk2C7rLuJqhjsg 192.168.2.76
+     CvfUrT2DgYXXoZw9Ah 192.168.2.76
+     CBX0254QJoklXNbvv2 192.168.2.76
+     C6Ym6jvMgikT0xTTc 192.168.2.76
+     CRNn9f1zKNlzHSM5pa 192.168.2.76
+     CJLgi92kpp2gLgGTE5 192.168.2.76
diff --git a/test/expected/test_gantt.sh_cde7947f361e5f3d4cd1bbc3f7458f426b6a8eb4.err b/test/expected/test_gantt.sh_cde7947f361e5f3d4cd1bbc3f7458f426b6a8eb4.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_gantt.sh_cde7947f361e5f3d4cd1bbc3f7458f426b6a8eb4.err
diff --git a/test/expected/test_gantt.sh_cde7947f361e5f3d4cd1bbc3f7458f426b6a8eb4.out b/test/expected/test_gantt.sh_cde7947f361e5f3d4cd1bbc3f7458f426b6a8eb4.out
new file mode 100644
index 0000000..75ceff3
--- /dev/null
+++ b/test/expected/test_gantt.sh_cde7947f361e5f3d4cd1bbc3f7458f426b6a8eb4.out
@@ -0,0 +1,4 @@
+ 2011-11-03T00:17 5m 2011-11-03T00:22
+ 5m
+ Duration | ✘▲ | Operation
+     CdysLK1XpcrXOpVDuh 192.168.2.76
diff --git a/test/expected/test_gantt.sh_e6a4681a5a671c84c020dc91d7ce03c9d17fde07.err b/test/expected/test_gantt.sh_e6a4681a5a671c84c020dc91d7ce03c9d17fde07.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_gantt.sh_e6a4681a5a671c84c020dc91d7ce03c9d17fde07.err
diff --git a/test/expected/test_gantt.sh_e6a4681a5a671c84c020dc91d7ce03c9d17fde07.out b/test/expected/test_gantt.sh_e6a4681a5a671c84c020dc91d7ce03c9d17fde07.out
new file mode 100644
index 0000000..8e609b1
--- /dev/null
+++ b/test/expected/test_gantt.sh_e6a4681a5a671c84c020dc91d7ce03c9d17fde07.out
@@ -0,0 +1,70 @@
+ 2011-11-03T00:17 5m 2011-11-03T00:22
+ 5m
+ Duration | ✘▲ | Operation
+ 844    CwFs1P2UcUdlSxD2La 192.168.2.76
+     CoX7zA3OJKGUOSCBY2 192.168.2.76
+     CdrfXZ1NOFPEawF218 192.168.2.76
+     CJwUi9bdB9c1lLW44  192.168.2.76
+     CJxSUgkInyKSHiju1  192.168.2.76
+     CT0JIh479jXIGt0Po1 192.168.2.76
+     C6Q4Vm14ZJIlZhsXqk 192.168.2.76
+ 1s070    CtgxRAqDLvrRUQdqe  192.168.2.76
+     CdysLK1XpcrXOpVDuh 192.168.2.76
+ 200    C6nSoj1Qco9PGyslz6 192.168.2.76
+ 23s044    CN5hnY3x51j6Hr1v4 192.168.2.76
+     CdZUPH2DKOE7zzCLE3 192.168.2.76
+ 32s388    CmWpC33jXuKpXNLcie 192.168.2.76
+     CsBgiE1WmGP4Yo749h 192.168.2.76
+ 657    CYfHyC28tAhkLYkXB7 192.168.2.76
+     CtANmVrHYMtkWqPE5  192.168.2.76
+ 647    CSTH8n1O1nv0ztxNQd 192.168.2.76
+     C4uDKU5tpeRU9Su19  192.168.2.76
+     CEh6Ka2HInkNSH01L2 192.168.2.76
+ 4s840    CjPGiy13ncXKxU765j 192.168.2.76
+ 6s895    CPoz7NUpXISemlNSd  192.168.2.76
+ 6s837    Ct6ixh35y9AEr7J7o9 192.168.2.76
+ 6s889    CaEFHq2HVQ5iGJQiD9 192.168.2.76
+ 6s875    CjinlH2fzDtvzI9637 192.168.2.76
+ 6s884    Cedw7H3ddE2yLiLoXc 192.168.2.76
+ 6s917    CAUlC249svUfE6q0g3 192.168.2.76
+     CIJIDL1ULo4HpT24Gl 192.168.2.76
+ 016    CLsqp41RLUd83arUQb 192.168.2.76
+ 166    CbCciH11995WKkobR1 192.168.2.76
+ 457    ClcvKE1dqsEFQu46m9 192.168.2.76
+     CaP2LpLGvsmX7yJO  192.168.2.76
+ 043    CNbPns4mOMGgjI8Ele 192.168.2.76
+ 557    C185u7u9Q4qhJPhzl  192.168.2.76
+ 129    CKzjfhsJ8vrn2rrfg  192.168.2.76
+ 562    CiIjAe1n5MnPOVpQ9f 192.168.2.76
+     CGv2Tp4Ngt8MmKmVRd 192.168.2.76
+ 7s071    C5DisEMFU77Wk9Kae  192.168.2.76
+     Cs5yEZ3ELZTeuTOsP4 192.168.2.76
+ 4s667    Cu4gIx1BDNtGOl7Ht2 192.168.2.76
+ 1s288    CRgW2I2zo3SInm6iT8 192.168.2.76
+     CWJhMU2cTLEnseTmCb 192.168.2.76
+ 042    CejI402rKGtdBXij4f 192.168.2.76
+     C2KnU34GcVV6amo8va 192.168.2.76
+     C5vx4911iSMAJuShFd 192.168.2.76
+     CbUCgw1DrIGcXzONB7 192.168.2.76
+ 502    C96j2X1DixgLTj2Oi8 192.168.2.76
+     CYYyja3FFNEnftw3K6 192.168.2.76
+  █  CBHHuR1xFnm5C5CQBc 192.168.2.76
+     CD1jfU3p9abEm77mzf 192.168.2.76
+     C0K9DaoPFkfnzwlZa 192.168.2.76
+ 616    CbQAWi3GX2bCmX5L56 192.168.2.76
+ 298    Cd8s2R3OGDgkhnvSu9 192.168.2.76
+ 205    CBeaXe4Iyj1gXd2Iq 192.168.2.76
+     CmWpSw3VtjiAceBCwf 192.168.2.76
+ 1m12s201    CbNCgO1MzloHRNeY4f 192.168.2.76
+ 315    CX1GjC4vn52UY1uDv6 192.168.2.76
+     CaPClb1Bf0RrRGtyWi 192.168.2.76
+ 35s642    CibfNy1QQW4ImDWRq5 192.168.2.76
+ 1m11s547    CTRXSR3blXJE5ZE7Ij 192.168.2.76
+ 1m11s536    CnGze54kQWWpKqrrZ4 192.168.2.76
+ 12s337    C3TZMB4CrUwYfkGJy1 192.168.2.76
+     CK957ERTz8lBycly4 192.168.2.76
+ 1s309    CO5QKYQkcSdxQFA35 192.168.2.76
+     CurHpb1TGZOktTRNP1 192.168.2.76
+     CuUKOQ1R3CqKBgeTdf 192.168.2.76
+     C3xkHgJnzZszVSTpi 192.168.2.76
+     CMrjgF2XLmRh9C9TR4 192.168.2.76
diff --git a/test/expected/test_json_format.sh_168cac40c27f547044c89d39eb0ff2ef81da4b21.out b/test/expected/test_json_format.sh_168cac40c27f547044c89d39eb0ff2ef81da4b21.out
index 55657f7..dd6c9d2 100644
--- a/test/expected/test_json_format.sh_168cac40c27f547044c89d39eb0ff2ef81da4b21.out
+++ b/test/expected/test_json_format.sh_168cac40c27f547044c89d39eb0ff2ef81da4b21.out
@@ -1,11 +1,11 @@
-{"ts": "2013-09-06T20:00:48.124817Z", "lvl": "TRACE", "msg": "trace test"}
-{"ts": "2013-09-06T20:00:49.124817Z", "lvl": "INFO", "msg": "Starting up \u001B[0;32mservice\u001B[0m"}
+{"ts": "2013-09-06T20:00:48.124817Z", "logger": "com.example.foo.bar.bazzer", "lvl": "TRACE", "msg": "trace test"}
+{"ts": "2013-09-06T20:00:49.124817Z", "logger": "com.example.demo", "lvl": "INFO", "msg": "Starting up \u001B[0;32mservice\u001B[0m"}
{"ts": "2013-09-06T22:00:49.124817Z", "lvl": "INFO", "msg": "Shutting down service", "user": "steve@example.com"}
-{"ts": "2013-09-06T22:00:59.124817Z", "lvl": "DEBUG5", "msg": "Details...\n"}
-{"ts": "2013-09-06T22:00:59.124817Z", "lvl": "DEBUG4", "msg": "Details...\n"}
+{"ts": "2013-09-06T22:00:59.124817Z", "lvl": "DEBUG5", "msg": "D\bDetails...\n"}
+{"ts": "2013-09-06T22:00:59.124817Z", "lvl": "DEBUG4", "msg": "D\bDe\betails...\n"}
{"ts": "2013-09-06T22:00:59.124817Z", "lvl": "DEBUG3", "msg": "Details...\n"}
{"ts": "2013-09-06T22:00:59.124817Z", "lvl": "DEBUG2", "msg": "Details...\n"}
-{"ts": "2013-09-06T22:00:59.124817Z", "lvl": "DEBUG", "msg": "Details..."}
+{"ts": "2013-09-06 22:01:00Z", "lvl": "DEBUG", "msg": "Details..."}
{"ts": "2013-09-06T22:01:49.124817Z", "lvl": "STATS", "msg": "1 beat per second"}
{"ts": "2013-09-06T22:01:49.124817Z", "lvl": "WARNING", "msg": "not looking good"}
{"ts": "2013-09-06T22:01:49.124817Z", "lvl": "ERROR", "msg": "looking bad"}
diff --git a/test/expected/test_json_format.sh_1bb0fd243e916546aea22029245ac590dae17a86.out b/test/expected/test_json_format.sh_1bb0fd243e916546aea22029245ac590dae17a86.out
index 59872f2..c85be78 100644
--- a/test/expected/test_json_format.sh_1bb0fd243e916546aea22029245ac590dae17a86.out
+++ b/test/expected/test_json_format.sh_1bb0fd243e916546aea22029245ac590dae17a86.out
@@ -1,14 +1,14 @@
-log_line,log_part,log_time,log_idle_msecs,log_level,log_mark,log_comment,log_tags,log_filters,@fields/user,@fields/trace#
-0,<NULL>,2013-09-06 20:00:48.124,0,trace,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>
-2,<NULL>,2013-09-06 20:00:49.124,1000,info,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>
-4,<NULL>,2013-09-06 22:00:49.124,7200000,info,0,<NULL>,<NULL>,<NULL>,steve@example.com,<NULL>
-7,<NULL>,2013-09-06 22:00:59.124,10000,debug5,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>
-9,<NULL>,2013-09-06 22:00:59.124,0,debug4,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>
-11,<NULL>,2013-09-06 22:00:59.124,0,debug3,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>
-13,<NULL>,2013-09-06 22:00:59.124,0,debug2,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>
-15,<NULL>,2013-09-06 22:00:59.124,0,debug,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>
-17,<NULL>,2013-09-06 22:01:49.124,50000,stats,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>
-19,<NULL>,2013-09-06 22:01:49.124,0,warning,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>
-21,<NULL>,2013-09-06 22:01:49.124,0,error,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>
-23,<NULL>,2013-09-06 22:01:49.124,0,critical,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>
-25,<NULL>,2013-09-06 22:01:49.124,0,fatal,0,<NULL>,<NULL>,<NULL>,<NULL>,line:1
+log_line,log_time,log_level,@fields/user,@fields/trace#,log_part,log_idle_msecs,log_mark,log_comment,log_tags,log_annotations,log_filters
+0,2013-09-06 20:00:48.124,trace,<NULL>,<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>
+2,2013-09-06 20:00:49.124,info,<NULL>,<NULL>,<NULL>,1000,0,<NULL>,<NULL>,<NULL>,<NULL>
+4,2013-09-06 22:00:49.124,info,steve@example.com,<NULL>,<NULL>,7200000,0,<NULL>,<NULL>,<NULL>,<NULL>
+7,2013-09-06 22:00:59.124,debug5,<NULL>,<NULL>,<NULL>,10000,0,<NULL>,<NULL>,<NULL>,<NULL>
+9,2013-09-06 22:00:59.124,debug4,<NULL>,<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>
+11,2013-09-06 22:00:59.124,debug3,<NULL>,<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>
+13,2013-09-06 22:00:59.124,debug2,<NULL>,<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>
+15,2013-09-06 22:00:59.124,debug,<NULL>,<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>
+17,2013-09-06 22:01:49.124,stats,<NULL>,<NULL>,<NULL>,50000,0,<NULL>,<NULL>,<NULL>,<NULL>
+19,2013-09-06 22:01:49.124,warning,<NULL>,<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>
+21,2013-09-06 22:01:49.124,error,<NULL>,<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>
+23,2013-09-06 22:01:49.124,critical,<NULL>,<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>
+25,2013-09-06 22:01:49.124,fatal,<NULL>,line:1,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>
diff --git a/test/expected/test_json_format.sh_40223ac4742883f883ccc61044bfffd6e102cca6.out b/test/expected/test_json_format.sh_40223ac4742883f883ccc61044bfffd6e102cca6.out
index 0dc139f..53d473d 100644
--- a/test/expected/test_json_format.sh_40223ac4742883f883ccc61044bfffd6e102cca6.out
+++ b/test/expected/test_json_format.sh_40223ac4742883f883ccc61044bfffd6e102cca6.out
@@ -1,194 +1,212 @@
[
{
"log_line": 0,
- "log_part": null,
"log_time": "2013-09-06 20:00:48.124",
- "log_idle_msecs": 0,
"log_level": "trace",
- "log_mark": 0,
- "log_comment": null,
- "log_tags": null,
- "log_filters": null,
"arr": null,
"obj": null,
+ "logger": "com.example.foo.bar.bazzer",
"lvl": "TRACE",
- "user": null
+ "user": null,
+ "log_part": null,
+ "log_idle_msecs": 0,
+ "log_mark": 0,
+ "log_comment": null,
+ "log_tags": null,
+ "log_annotations": null,
+ "log_filters": null
},
{
"log_line": 2,
- "log_part": null,
"log_time": "2013-09-06 20:00:49.124",
- "log_idle_msecs": 1000,
"log_level": "info",
- "log_mark": 0,
- "log_comment": null,
- "log_tags": null,
- "log_filters": null,
"arr": null,
"obj": null,
+ "logger": "com.example.demo",
"lvl": "INFO",
- "user": null
+ "user": null,
+ "log_part": null,
+ "log_idle_msecs": 1000,
+ "log_mark": 0,
+ "log_comment": null,
+ "log_tags": null,
+ "log_annotations": null,
+ "log_filters": null
},
{
"log_line": 4,
- "log_part": null,
"log_time": "2013-09-06 22:00:49.124",
- "log_idle_msecs": 7200000,
"log_level": "info",
- "log_mark": 0,
- "log_comment": null,
- "log_tags": null,
- "log_filters": null,
"arr": null,
"obj": null,
+ "logger": null,
"lvl": "INFO",
- "user": "steve@example.com"
+ "user": "steve@example.com",
+ "log_part": null,
+ "log_idle_msecs": 7200000,
+ "log_mark": 0,
+ "log_comment": null,
+ "log_tags": null,
+ "log_annotations": null,
+ "log_filters": null
},
{
"log_line": 7,
- "log_part": null,
"log_time": "2013-09-06 22:00:59.124",
- "log_idle_msecs": 10000,
"log_level": "debug5",
- "log_mark": 0,
- "log_comment": null,
- "log_tags": null,
- "log_filters": null,
"arr": null,
"obj": null,
+ "logger": null,
"lvl": "DEBUG5",
- "user": null
+ "user": null,
+ "log_part": null,
+ "log_idle_msecs": 10000,
+ "log_mark": 0,
+ "log_comment": null,
+ "log_tags": null,
+ "log_annotations": null,
+ "log_filters": null
},
{
"log_line": 9,
- "log_part": null,
"log_time": "2013-09-06 22:00:59.124",
- "log_idle_msecs": 0,
"log_level": "debug4",
- "log_mark": 0,
- "log_comment": null,
- "log_tags": null,
- "log_filters": null,
"arr": null,
"obj": null,
+ "logger": null,
"lvl": "DEBUG4",
- "user": null
- },
- {
- "log_line": 11,
+ "user": null,
"log_part": null,
- "log_time": "2013-09-06 22:00:59.124",
"log_idle_msecs": 0,
- "log_level": "debug3",
"log_mark": 0,
"log_comment": null,
"log_tags": null,
- "log_filters": null,
+ "log_annotations": null,
+ "log_filters": null
+ },
+ {
+ "log_line": 11,
+ "log_time": "2013-09-06 22:00:59.124",
+ "log_level": "debug3",
"arr": null,
"obj": null,
+ "logger": null,
"lvl": "DEBUG3",
- "user": null
- },
- {
- "log_line": 13,
+ "user": null,
"log_part": null,
- "log_time": "2013-09-06 22:00:59.124",
"log_idle_msecs": 0,
- "log_level": "debug2",
"log_mark": 0,
"log_comment": null,
"log_tags": null,
- "log_filters": null,
+ "log_annotations": null,
+ "log_filters": null
+ },
+ {
+ "log_line": 13,
+ "log_time": "2013-09-06 22:00:59.124",
+ "log_level": "debug2",
"arr": null,
"obj": null,
+ "logger": null,
"lvl": "DEBUG2",
- "user": null
- },
- {
- "log_line": 15,
+ "user": null,
"log_part": null,
- "log_time": "2013-09-06 22:00:59.124",
"log_idle_msecs": 0,
- "log_level": "debug",
"log_mark": 0,
"log_comment": null,
"log_tags": null,
- "log_filters": null,
+ "log_annotations": null,
+ "log_filters": null
+ },
+ {
+ "log_line": 15,
+ "log_time": "2013-09-06 22:01:00.000",
+ "log_level": "debug",
"arr": null,
"obj": null,
+ "logger": null,
"lvl": "DEBUG",
- "user": null
+ "user": null,
+ "log_part": null,
+ "log_idle_msecs": 876,
+ "log_mark": 0,
+ "log_comment": null,
+ "log_tags": null,
+ "log_annotations": null,
+ "log_filters": null
},
{
"log_line": 17,
- "log_part": null,
"log_time": "2013-09-06 22:01:49.124",
- "log_idle_msecs": 50000,
"log_level": "stats",
- "log_mark": 0,
- "log_comment": null,
- "log_tags": null,
- "log_filters": null,
"arr": null,
"obj": null,
+ "logger": null,
"lvl": "STATS",
- "user": null
+ "user": null,
+ "log_part": null,
+ "log_idle_msecs": 49124,
+ "log_mark": 0,
+ "log_comment": null,
+ "log_tags": null,
+ "log_annotations": null,
+ "log_filters": null
},
{
"log_line": 19,
- "log_part": null,
"log_time": "2013-09-06 22:01:49.124",
- "log_idle_msecs": 0,
"log_level": "warning",
- "log_mark": 0,
- "log_comment": null,
- "log_tags": null,
- "log_filters": null,
"arr": null,
"obj": null,
+ "logger": null,
"lvl": "WARNING",
- "user": null
- },
- {
- "log_line": 21,
+ "user": null,
"log_part": null,
- "log_time": "2013-09-06 22:01:49.124",
"log_idle_msecs": 0,
- "log_level": "error",
"log_mark": 0,
"log_comment": null,
"log_tags": null,
- "log_filters": null,
+ "log_annotations": null,
+ "log_filters": null
+ },
+ {
+ "log_line": 21,
+ "log_time": "2013-09-06 22:01:49.124",
+ "log_level": "error",
"arr": null,
"obj": null,
+ "logger": null,
"lvl": "ERROR",
- "user": null
- },
- {
- "log_line": 23,
+ "user": null,
"log_part": null,
- "log_time": "2013-09-06 22:01:49.124",
"log_idle_msecs": 0,
- "log_level": "critical",
"log_mark": 0,
"log_comment": null,
"log_tags": null,
- "log_filters": null,
+ "log_annotations": null,
+ "log_filters": null
+ },
+ {
+ "log_line": 23,
+ "log_time": "2013-09-06 22:01:49.124",
+ "log_level": "critical",
"arr": null,
"obj": null,
+ "logger": null,
"lvl": "CRITICAL",
- "user": null
- },
- {
- "log_line": 25,
+ "user": null,
"log_part": null,
- "log_time": "2013-09-06 22:01:49.124",
"log_idle_msecs": 0,
- "log_level": "fatal",
"log_mark": 0,
"log_comment": null,
"log_tags": null,
- "log_filters": null,
+ "log_annotations": null,
+ "log_filters": null
+ },
+ {
+ "log_line": 25,
+ "log_time": "2013-09-06 22:01:49.124",
+ "log_level": "fatal",
"arr": [
"hi",
{
@@ -199,7 +217,15 @@
"field1": "hi",
"field2": 2
},
+ "logger": null,
"lvl": "FATAL",
- "user": null
+ "user": null,
+ "log_part": null,
+ "log_idle_msecs": 0,
+ "log_mark": 0,
+ "log_comment": null,
+ "log_tags": null,
+ "log_annotations": null,
+ "log_filters": null
}
]
diff --git a/test/expected/test_json_format.sh_4315a3d6124c14cbe3c474b6dbf4cc8720a9859f.out b/test/expected/test_json_format.sh_4315a3d6124c14cbe3c474b6dbf4cc8720a9859f.out
index 9b7fbf1..2063d71 100644
--- a/test/expected/test_json_format.sh_4315a3d6124c14cbe3c474b6dbf4cc8720a9859f.out
+++ b/test/expected/test_json_format.sh_4315a3d6124c14cbe3c474b6dbf4cc8720a9859f.out
@@ -1,3 +1,3 @@
-2017-03-24T20:06:26.240 1.1.1.1 GET 200 443 /example/uri/5
-2017-03-24T20:12:47.764 1.1.1.1 GET 500 4433 /example/uri/5
-2017-03-24T20:15:31.694 1.1.1.1 GET 400 44345 /example/uri/5
+2017-03-24T20:06:26.240Z 1.1.1.1 GET 200 443 /example/uri/5
+2017-03-24T20:12:47.764Z 1.1.1.1 GET 500 4433 /example/uri/5
+2017-03-24T20:15:31.694Z 1.1.1.1 GET 400 44345 /example/uri/5
diff --git a/test/expected/test_json_format.sh_469f005b0708d629bc95f0c48a5e390f440c1fef.out b/test/expected/test_json_format.sh_469f005b0708d629bc95f0c48a5e390f440c1fef.out
index ee41abb..8a1d53c 100644
--- a/test/expected/test_json_format.sh_469f005b0708d629bc95f0c48a5e390f440c1fef.out
+++ b/test/expected/test_json_format.sh_469f005b0708d629bc95f0c48a5e390f440c1fef.out
@@ -1,29 +1,29 @@
-[2013-09-06T20:00:48.124] TRACE trace test
+[2013-09-06T20:00:48.124817Z] ⋮ <c.e.foo.bar.bazzer > trace test
-[2013-09-06T20:00:49.124] INFO Starting up service
+[2013-09-06T20:00:49.124817Z] ⋮ <com.example.demo > Starting up service
-[2013-09-06T22:00:49.124] INFO Shutting down service
+[2013-09-06T22:00:49.124817Z] ⋮ Shutting down service
user: steve@example.com
-[2013-09-06T22:00:59.124] DEBUG5 Details...
+[2013-09-06T22:00:59.124817Z] ⋮ Details...
-[2013-09-06T22:00:59.124] DEBUG4 Details...
+[2013-09-06T22:00:59.124817Z] ⋮ Details...
-[2013-09-06T22:00:59.124] DEBUG3 Details...
+[2013-09-06T22:00:59.124817Z] ⋮ Details...
-[2013-09-06T22:00:59.124] DEBUG2 Details...
+[2013-09-06T22:00:59.124817Z] ⋮ Details...
-[2013-09-06T22:00:59.124] DEBUG Details...
+[2013-09-06 22:01:00Z] ⋮ Details...
-[2013-09-06T22:01:49.124] STATS 1 beat per second
+[2013-09-06T22:01:49.124817Z] ⋮ 1 beat per second
-[2013-09-06T22:01:49.124] WARNING not looking good
+[2013-09-06T22:01:49.124817Z] ⋮ not looking good
-[2013-09-06T22:01:49.124] ERROR looking bad
+[2013-09-06T22:01:49.124817Z] ⋮ looking bad
-[2013-09-06T22:01:49.124] CRITICAL sooo bad
+[2013-09-06T22:01:49.124817Z] ⋮ sooo bad
-[2013-09-06T22:01:49.124] FATAL shoot
+[2013-09-06T22:01:49.124817Z] ⋮ shoot
 obj: { "field1" : "hi", "field2": 2 }
 arr: ["hi", {"sub1": true}]
diff --git a/test/expected/test_json_format.sh_5795c5ffd98ae581b30c6f0983349bf7a6a84501.err b/test/expected/test_json_format.sh_5795c5ffd98ae581b30c6f0983349bf7a6a84501.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_json_format.sh_5795c5ffd98ae581b30c6f0983349bf7a6a84501.err
diff --git a/test/expected/test_json_format.sh_5795c5ffd98ae581b30c6f0983349bf7a6a84501.out b/test/expected/test_json_format.sh_5795c5ffd98ae581b30c6f0983349bf7a6a84501.out
new file mode 100644
index 0000000..94d521d
--- /dev/null
+++ b/test/expected/test_json_format.sh_5795c5ffd98ae581b30c6f0983349bf7a6a84501.out
@@ -0,0 +1,52 @@
+2024-01-01T15:00:00Z MemberEvent mujianwu added Envoy-Z-Lab to Uotan-Dev/UotanWorkStation-ROM-Builder
+2024-01-01T15:00:00Z PushEvent mdmaid69 committed “float further safety possibly strike” to mdmaid69/reimagined-giggle
+2024-01-01T15:00:00Z ForkEvent SynthWave-Systems forked SynthWave-Systems/ampleforth-contracts from ampleforth/ampleforth-contracts
+2024-01-01T15:00:00Z PullRequestEvent tobexyz closed pull-request #90 “merge latest release to master” in tobexyz/yaacc-code
+2024-01-01T15:00:00Z PushEvent dim12512a committed “Empty Commit” to dim12512a/Repo5
+2024-01-01T15:00:00Z PushEvent github-shvabra committed “new change” to saby/ios-sabycom
+2024-01-01T15:00:00Z CreateEvent roman1923 repository off main in roman1923/no-woo-small-cta-fast-food-shop
+2024-01-01T15:00:00Z PushEvent appref5555ix63 committed “Empty Commit” to appref5555ix63/Repo4
+2024-01-01T15:00:00Z PullRequestReviewEvent megusasuke0 created review 1799820649 for pull-request #1 “Feature/lesson01” in megusasuke0/frontendhandson
+2024-01-01T15:00:00Z PushEvent dim12512a committed “Empty Commit” to dim12512a/Repo6
+2024-01-01T15:00:00Z ForkEvent Shadowxiaomo forked Shadowxiaomo/MemDumper from kp7742/MemDumper
+2024-01-01T15:00:00Z PushEvent Jinyeong1611 committed “방향값 추가” to Jinyeong1611/pacman
+2024-01-01T15:00:00Z PullRequestEvent dependabot closed pull-request #911 “Bump @storybook/addon-a11y from 7.5.3 to 7.6.3” in DNNCommunity/dnn-elements
+2024-01-01T15:00:01Z PushEvent ColeMalinchock1 committed “Update backup JSON file” to ColeMalinchock1/HGT-JSON-Server
+2024-01-01T15:00:01Z PushEvent uyenlexx committed “update navbar and search” to HoanqDucAnh/Keebie
+2024-01-01T15:00:01Z DeleteEvent direwolf-github branch direwolf-github/ephemeral-ci-f72a7b4a
+2024-01-01T15:00:01Z PushEvent Zarakkhan-dev committed “khtam” to Zarakkhan-dev/LegalaiAssistentBackend
+2024-01-01T15:00:01Z PushEvent appref5555ix63 committed “Empty Commit” to appref5555ix63/Repo2
+2024-01-01T15:00:01Z ForkEvent tarinisunil forked tarinisunil/Get_Better_at_CP_in_2_Months from sahilbansal17/Get_Better_at_CP_in_2_Months
+2024-01-01T15:00:01Z ForkEvent jackblack369 forked jackblack369/danswer from danswer-ai/danswer
+2024-01-01T15:00:01Z ForkEvent vineetp6 forked vineetp6/pydub from jiaaro/pydub
+2024-01-01T15:00:01Z PushEvent lhduc94 committed “push book” to lhduc94/kungfupandas
+2024-01-01T15:00:01Z PushEvent ranadebsaha committed “Add files via upload” to ranadebsaha/DSA
+2024-01-01T15:00:01Z PushEvent harmanpa committed “Add ability for STL and DXF parsers to read from InputStream rather than just files” to harmanpa/jgeom
+2024-01-01T15:00:01Z PushEvent dim12512a committed “Empty Commit” to dim12512a/Repo6
+2024-01-01T15:00:01Z PushEvent namson26 committed “ industry talk PPG and Habib” to namson26/Technology-Information-System
+2024-01-01T15:00:01Z PushEvent mdmaid69 committed “last recover hurt off claim” to mdmaid69/reimagined-giggle
+2024-01-01T15:00:01Z PushEvent dim12512a committed “Empty Commit” to dim12512a/Repo7
+2024-01-01T15:00:01Z PullRequestEvent tomgransden closed pull-request #26 “Dev/tg/add firestore” in tomgransden/MyTummyHurtsApp
+2024-01-01T15:00:01Z PushEvent dim12512a committed “Empty Commit” to dim12512a/Repo7
+2024-01-01T15:00:01Z PushEvent vedant-z committed “Update to 2 in STEP and README.md” to Exp-Intro-to-GitHub-Flow-Cohort-1/series-intro-to-github-flow-vedant-z
+ payload/commits#/message: Create PROFILE.md
+ payload/commits#/message: Update to 3 in STEP and README.md
+2024-01-01T15:00:01Z WatchEvent morteza-rp started MasoudKaviani/filoger_fanap_402
+2024-01-01T15:00:01Z PushEvent B74LABgit committed “committing files” to B74LABgit/CAM
+2024-01-01T15:00:01Z PushEvent sdhz151 sdhz153/Actions-OpenWrt
+2024-01-01T15:00:01Z CreateEvent UjjawalSah repository off main in UjjawalSah/ModernFarming
+2024-01-01T15:00:01Z PushEvent wodcoredev committed “Update index.html” to wod-core/website
+2024-01-01T15:00:01Z PushEvent Vsonneveld committed “The genre has been updated” to Vsonneveld/foroxity-genres
+2024-01-01T15:00:01Z PushEvent diphons committed “cpu_input_boost: use MI_DRM notifier” to diphons/sdm845-419
+2024-01-01T15:00:01Z PushEvent l1nky-1337 committed “README.md” to l1nky-1337/TimeFn-Updated
+2024-01-01T15:00:01Z CreateEvent luiz8910 repository off main in luiz8910/codeflix
+2024-01-01T15:00:01Z PushEvent Owl3CM committed “sync” to Owl3CM/Eze-Scripts
+2024-01-01T15:00:01Z PullRequestReviewEvent SamboyCoding created review 1799820647 for pull-request #255 “Support Type Parameters in Call Analysis” in SamboyCoding/Cpp2IL
+2024-01-01T15:00:01Z PushEvent lu146enza committed “Empty Commit” to lu146enza/Repo9
+2024-01-01T15:00:01Z PushEvent fdvorak committed “automated commit 2024-01-01 15:59:14” to fdvorak/sandWind
+2024-01-01T15:00:01Z PushEvent github-shvabra committed “new change” to saby/ios-sabycom
+2024-01-01T15:00:01Z DeleteEvent artamonovkirill branch tomtom-international/goji-http-client
+2024-01-01T15:00:01Z PullRequestEvent github-actions closed pull-request #45 “build(deps-dev): bump ts-node from 10.9.1 to 10.9.2” in jckimble/Github-Graph-Background
+2024-01-01T15:00:01Z PushEvent leegical committed “Upload by PicGo” to leegical/Blog_img
+2024-01-01T15:00:01Z CreateEvent mohil298 repository off main in mohil298/PCB-Designing
+2024-01-01T15:00:01Z PullRequestReviewEvent ehsandeep created review 1799820657 for pull-request #1102 “chore(deps): bump github.com/projectdiscovery/goflags from 0.1.32 to 0.1.33 in /v2” in projectdiscovery/subfinder
diff --git a/test/expected/test_json_format.sh_6767b91d715338c24c67e928b59c560c84ddf4be.out b/test/expected/test_json_format.sh_6767b91d715338c24c67e928b59c560c84ddf4be.out
index 19672db..9809b55 100644
--- a/test/expected/test_json_format.sh_6767b91d715338c24c67e928b59c560c84ddf4be.out
+++ b/test/expected/test_json_format.sh_6767b91d715338c24c67e928b59c560c84ddf4be.out
@@ -1,41 +1,41 @@
-2023-03-24T14:26:16.243 renovate[7] DEBUG Found gitlabci-include package files
+2023-03-24T14:26:16.243Z renovate[7] DEBUG Found gitlabci-include package files
logContext: qjifsaDDI
repository: webgui/custom-icons-transformer
-2023-03-24T14:26:16.243 renovate[7] DEBUG Found npm package files
+2023-03-24T14:26:16.243Z renovate[7] DEBUG Found npm package files
logContext: qjifsaDDI
repository: webgui/custom-icons-transformer
-2023-03-24T14:26:16.243 renovate[7] DEBUG [/Users/trentm/tm/node-bunyan/examples/src.js:20:Wuzzle.woos] Found 3 package file(s)
+2023-03-24T14:26:16.243Z renovate[7] DEBUG [/Users/trentm/tm/node-bunyan/examples/src.js:20:Wuzzle.woos] Found 3 package file(s)
logContext: qjifsaDDI
repository: webgui/custom-icons-transformer
-2023-03-24T14:26:16.243 renovate[7] INFO Dependency extraction complete
+2023-03-24T14:26:16.243Z renovate[7] INFO Dependency extraction complete
logContext: qjifsaDDI
repository: webgui/custom-icons-transformer
baseBranch: main
stats: {"managers":{"gitlabci":{"fileCount":1,"depCount":1},"gitlabci-include":{"fileCount":1,"depCount":1},"npm":{"fileCount":1,"depCount":15}},"total":{"fileCount":3,"depCount":17}}
-2023-03-24T14:26:16.390 renovate[7] DEBUG Dependency node has unsupported/unversioned value lts-bullseye-slim (versioning=docker)
+2023-03-24T14:26:16.390Z renovate[7] DEBUG Dependency node has unsupported/unversioned value lts-bullseye-slim (versioning=docker)
logContext: qjifsaDDI
repository: webgui/custom-icons-transformer
-2023-03-24T14:26:17.493 renovate[7] DEBUG Release 2.8.7 is pending status checks
+2023-03-24T14:26:17.493Z renovate[7] DEBUG Release 2.8.7 is pending status checks
logContext: qjifsaDDI
repository: webgui/custom-icons-transformer
depName: prettier
check: stabilityDays
-2023-03-24T14:26:17.897 renovate[7] DEBUG Release 4.4.1 is pending status checks
+2023-03-24T14:26:17.897Z renovate[7] DEBUG Release 4.4.1 is pending status checks
logContext: qjifsaDDI
repository: webgui/custom-icons-transformer
depName: rimraf
check: stabilityDays
-2023-03-24T14:26:17.897 renovate[7] DEBUG All releases are pending - using latest
+2023-03-24T14:26:17.897Z renovate[7] DEBUG All releases are pending - using latest
logContext: qjifsaDDI
repository: webgui/custom-icons-transformer
depName: rimraf
bucket: non-major
-2023-03-24T14:26:18.330 renovate[7] DEBUG Release 2.10.0 is pending status checks
+2023-03-24T14:26:18.330Z renovate[7] DEBUG Release 2.10.0 is pending status checks
logContext: qjifsaDDI
repository: webgui/custom-icons-transformer
depName: prettier-plugin-svelte
check: stabilityDays
-2023-03-24T14:26:18.331 renovate[7] DEBUG All releases are pending - using latest
+2023-03-24T14:26:18.331Z renovate[7] DEBUG All releases are pending - using latest
logContext: qjifsaDDI
repository: webgui/custom-icons-transformer
depName: prettier-plugin-svelte
diff --git a/test/expected/test_json_format.sh_6fbe20faa161ab9fa77df7568fff84bf3e47e920.out b/test/expected/test_json_format.sh_6fbe20faa161ab9fa77df7568fff84bf3e47e920.out
index 128f5ab..3363f23 100644
--- a/test/expected/test_json_format.sh_6fbe20faa161ab9fa77df7568fff84bf3e47e920.out
+++ b/test/expected/test_json_format.sh_6fbe20faa161ab9fa77df7568fff84bf3e47e920.out
@@ -1,4 +1,4 @@
-log_line,log_part,log_time,log_idle_msecs,log_level,log_mark,log_comment,log_tags,log_filters,user,cl
-0,<NULL>,2013-09-06 20:00:49.124,0,info,0,<NULL>,<NULL>,<NULL>,<NULL>,com.exmaple.foo
-1,<NULL>,2013-09-06 22:00:49.124,7200000,info,0,<NULL>,<NULL>,<NULL>,steve@example.com,com.exmaple.foo
-3,<NULL>,2013-09-06 22:01:49.124,60000,error,0,<NULL>,<NULL>,<NULL>,<NULL>,com.exmaple.foo
+log_line,log_time,log_level,user,cl,log_part,log_idle_msecs,log_mark,log_comment,log_tags,log_annotations,log_filters
+0,2013-09-06 20:00:49.124,info,<NULL>,com.exmaple.foo,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>
+1,2013-09-06 22:00:49.124,info,steve@example.com,com.exmaple.foo,<NULL>,7200000,0,<NULL>,<NULL>,<NULL>,<NULL>
+3,2013-09-06 22:01:49.124,error,<NULL>,com.exmaple.foo,<NULL>,60000,0,<NULL>,<NULL>,<NULL>,<NULL>
diff --git a/test/expected/test_json_format.sh_7724d1a96d74d4418dd44d7416270f9bb64b2564.out b/test/expected/test_json_format.sh_7724d1a96d74d4418dd44d7416270f9bb64b2564.out
index c861d3a..16d7261 100644
--- a/test/expected/test_json_format.sh_7724d1a96d74d4418dd44d7416270f9bb64b2564.out
+++ b/test/expected/test_json_format.sh_7724d1a96d74d4418dd44d7416270f9bb64b2564.out
@@ -1,29 +1,29 @@
-2013-09-06T20:00:48.124 TRACE trace test
+2013-09-06T20:00:48.124817Z TRACE trace test
@fields: { "lvl": "TRACE", "msg": "trace test"}
-2013-09-06T20:00:49.124 INFO Starting up service
+2013-09-06T20:00:49.124817Z INFO Starting up service
@fields: { "lvl": "INFO", "msg": "Starting up service"}
-2013-09-06T22:00:49.124 INFO Shutting down service
+2013-09-06T22:00:49.124817Z INFO Shutting down service
@fields/user: steve@example.com
@fields: { "lvl": "INFO", "msg": "Shutting down service", "user": "steve@example.com"}
-2013-09-06T22:00:59.124 DEBUG5 Details...
+2013-09-06T22:00:59.124817Z DEBUG5 Details...
@fields: { "lvl": "DEBUG5", "msg": "Details..."}
-2013-09-06T22:00:59.124 DEBUG4 Details...
+2013-09-06T22:00:59.124817Z DEBUG4 Details...
@fields: { "lvl": "DEBUG4", "msg": "Details..."}
-2013-09-06T22:00:59.124 DEBUG3 Details...
+2013-09-06T22:00:59.124817Z DEBUG3 Details...
@fields: { "lvl": "DEBUG3", "msg": "Details..."}
-2013-09-06T22:00:59.124 DEBUG2 Details...
+2013-09-06T22:00:59.124817Z DEBUG2 Details...
@fields: { "lvl": "DEBUG2", "msg": "Details..."}
-2013-09-06T22:00:59.124 DEBUG Details...
+2013-09-06T22:00:59.124817Z DEBUG Details...
@fields: { "lvl": "DEBUG", "msg": "Details..."}
-2013-09-06T22:01:49.124 STATS 1 beat per second
+2013-09-06T22:01:49.124817Z STATS 1 beat per second
@fields: { "lvl": "STATS", "msg": "1 beat per second"}
-2013-09-06T22:01:49.124 WARNING not looking good
+2013-09-06T22:01:49.124817Z WARNING not looking good
 @fields: { "lvl": "WARNING", "msg": "not looking good"}
-2013-09-06T22:01:49.124 ERROR looking bad
+2013-09-06T22:01:49.124817Z ERROR looking bad
 @fields: { "lvl": "ERROR", "msg": "looking bad"}
-2013-09-06T22:01:49.124 CRITICAL sooo bad
+2013-09-06T22:01:49.124817Z CRITICAL sooo bad
 @fields: { "lvl": "CRITICAL", "msg": "sooo bad"}
-2013-09-06T22:01:49.124 FATAL shoot
+2013-09-06T22:01:49.124817Z FATAL shoot
 @fields/trace#: line:1
 @fields/trace#: line:2
 @fields: { "lvl": "FATAL", "msg": "shoot", "trace": ["line:1", "line:2"]}
diff --git a/test/expected/test_json_format.sh_7c6529f6bf4a0cb565f5665fdcba032f0ae1ebbe.out b/test/expected/test_json_format.sh_7c6529f6bf4a0cb565f5665fdcba032f0ae1ebbe.out
index ce295e2..72f625a 100644
--- a/test/expected/test_json_format.sh_7c6529f6bf4a0cb565f5665fdcba032f0ae1ebbe.out
+++ b/test/expected/test_json_format.sh_7c6529f6bf4a0cb565f5665fdcba032f0ae1ebbe.out
@@ -1,12 +1,12 @@
-2013-09-06T20:00:48.124 TRACE trace test
+2013-09-06T20:00:48.124817Z TRACE trace test
@fields: { "lvl": "TRACE", "msg": "trace test"}
-2013-09-06T20:00:49.124 INFO Starting up service
+2013-09-06T20:00:49.124817Z INFO Starting up service
@fields: { "lvl": "INFO", "msg": "Starting up service"}
[offset: 186] {"ts": "2013-09-06T22:00:49.124817Z", "@fields": { "lvl": "INFO", "msg": "Shutting down service\nline2\nline3\nline4\nline5\nline6\nline7\nline8\nline9\nline10
parse error: premature EOF
{"ts": "2013-09-06T22:00:49.124
(right here) ------^
-2013-09-06T22:00:59.124 DEBUG5 Details...
+2013-09-06T22:00:59.124817Z DEBUG5 Details...
@fields: { "lvl": "DEBUG5", "msg": "Details..."}
-2013-09-06T22:00:59.222 DEBUG4 Details...
+2013-09-06T22:00:59.222222Z DEBUG4 Details...
@fields: { "lvl": "DEBUG4", "msg": "Details..."}
diff --git a/test/expected/test_json_format.sh_80959e2bb6a7fdf938c2e4dbd7d7c81eb84fa072.out b/test/expected/test_json_format.sh_80959e2bb6a7fdf938c2e4dbd7d7c81eb84fa072.out
index 63376a4..4656a00 100644
--- a/test/expected/test_json_format.sh_80959e2bb6a7fdf938c2e4dbd7d7c81eb84fa072.out
+++ b/test/expected/test_json_format.sh_80959e2bb6a7fdf938c2e4dbd7d7c81eb84fa072.out
@@ -1,6 +1,6 @@
-2013-09-06T20:00:48.124 TRACE trace test
+2013-09-06T20:00:48.124817Z TRACE trace test
@fields: { "lvl": "TRACE", "msg": "trace test"}
-2013-09-06T20:00:49.124 INFO Starting up service
+2013-09-06T20:00:49.124817Z INFO Starting up service
@fields: { "lvl": "INFO", "msg": "Starting up service"}
[offset: 186] {"ts": "2013-09-06T22:00:49.124817Z", "@fields": { "lvl": "INFO", "msg":
parse error: premature EOF
diff --git a/test/expected/test_json_format.sh_84a71e94dc34661a70bb9015b67ba00e93e9cfb5.out b/test/expected/test_json_format.sh_84a71e94dc34661a70bb9015b67ba00e93e9cfb5.out
index 58b44ab..474ad83 100644
--- a/test/expected/test_json_format.sh_84a71e94dc34661a70bb9015b67ba00e93e9cfb5.out
+++ b/test/expected/test_json_format.sh_84a71e94dc34661a70bb9015b67ba00e93e9cfb5.out
@@ -1,2 +1,2 @@
-2018-08-21T14:04:21.221 38708007 medusa-GpsLocator.service python[184] FATAL GPS Reference longitude: 7.358143333
-2018-08-21T14:04:21.221 38708007 medusa-GpsLocator.service python[184] INFO GPS Reference latitude: 46.908706667
+2018-08-21T14:04:21.221373Z 38708007 medusa-GpsLocator.service python[184] FATAL GPS Reference longitude: 7.358143333
+2018-08-21T14:04:21.221373Z 38708007 medusa-GpsLocator.service python[184] INFO GPS Reference latitude: 46.908706667
diff --git a/test/expected/test_json_format.sh_85d03b1b41a7f819af135d2521a8f2c59418e907.out b/test/expected/test_json_format.sh_85d03b1b41a7f819af135d2521a8f2c59418e907.out
index 660e90e..48ec77c 100644
--- a/test/expected/test_json_format.sh_85d03b1b41a7f819af135d2521a8f2c59418e907.out
+++ b/test/expected/test_json_format.sh_85d03b1b41a7f819af135d2521a8f2c59418e907.out
@@ -1,14 +1,14 @@
-log_line,log_part,log_time,log_idle_msecs,log_level,log_mark,log_comment,log_tags,log_filters,arr,obj,lvl,user
-0,<NULL>,2013-09-06 20:00:48.124,0,trace,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,TRACE,<NULL>
-2,<NULL>,2013-09-06 20:00:49.124,1000,info,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,INFO,<NULL>
-4,<NULL>,2013-09-06 22:00:49.124,7200000,info,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,INFO,steve@example.com
-7,<NULL>,2013-09-06 22:00:59.124,10000,debug5,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,DEBUG5,<NULL>
-9,<NULL>,2013-09-06 22:00:59.124,0,debug4,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,DEBUG4,<NULL>
-11,<NULL>,2013-09-06 22:00:59.124,0,debug3,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,DEBUG3,<NULL>
-13,<NULL>,2013-09-06 22:00:59.124,0,debug2,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,DEBUG2,<NULL>
-15,<NULL>,2013-09-06 22:00:59.124,0,debug,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,DEBUG,<NULL>
-17,<NULL>,2013-09-06 22:01:49.124,50000,stats,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,STATS,<NULL>
-19,<NULL>,2013-09-06 22:01:49.124,0,warning,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,WARNING,<NULL>
-21,<NULL>,2013-09-06 22:01:49.124,0,error,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,ERROR,<NULL>
-23,<NULL>,2013-09-06 22:01:49.124,0,critical,0,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,CRITICAL,<NULL>
-25,<NULL>,2013-09-06 22:01:49.124,0,fatal,0,<NULL>,<NULL>,<NULL>,"[""hi"", {""sub1"": true}]","{ ""field1"" : ""hi"", ""field2"": 2 }",FATAL,<NULL>
+log_line,log_time,log_level,arr,obj,logger,lvl,user,log_part,log_idle_msecs,log_mark,log_comment,log_tags,log_annotations,log_filters
+0,2013-09-06 20:00:48.124,trace,<NULL>,<NULL>,com.example.foo.bar.bazzer,TRACE,<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>
+2,2013-09-06 20:00:49.124,info,<NULL>,<NULL>,com.example.demo,INFO,<NULL>,<NULL>,1000,0,<NULL>,<NULL>,<NULL>,<NULL>
+4,2013-09-06 22:00:49.124,info,<NULL>,<NULL>,<NULL>,INFO,steve@example.com,<NULL>,7200000,0,<NULL>,<NULL>,<NULL>,<NULL>
+7,2013-09-06 22:00:59.124,debug5,<NULL>,<NULL>,<NULL>,DEBUG5,<NULL>,<NULL>,10000,0,<NULL>,<NULL>,<NULL>,<NULL>
+9,2013-09-06 22:00:59.124,debug4,<NULL>,<NULL>,<NULL>,DEBUG4,<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>
+11,2013-09-06 22:00:59.124,debug3,<NULL>,<NULL>,<NULL>,DEBUG3,<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>
+13,2013-09-06 22:00:59.124,debug2,<NULL>,<NULL>,<NULL>,DEBUG2,<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>
+15,2013-09-06 22:01:00.000,debug,<NULL>,<NULL>,<NULL>,DEBUG,<NULL>,<NULL>,876,0,<NULL>,<NULL>,<NULL>,<NULL>
+17,2013-09-06 22:01:49.124,stats,<NULL>,<NULL>,<NULL>,STATS,<NULL>,<NULL>,49124,0,<NULL>,<NULL>,<NULL>,<NULL>
+19,2013-09-06 22:01:49.124,warning,<NULL>,<NULL>,<NULL>,WARNING,<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>
+21,2013-09-06 22:01:49.124,error,<NULL>,<NULL>,<NULL>,ERROR,<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>
+23,2013-09-06 22:01:49.124,critical,<NULL>,<NULL>,<NULL>,CRITICAL,<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>
+25,2013-09-06 22:01:49.124,fatal,"[""hi"", {""sub1"": true}]","{ ""field1"" : ""hi"", ""field2"": 2 }",<NULL>,FATAL,<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>
diff --git a/test/expected/test_json_format.sh_895283eeb4c10e9c1702fafd13723c8085944f88.err b/test/expected/test_json_format.sh_895283eeb4c10e9c1702fafd13723c8085944f88.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_json_format.sh_895283eeb4c10e9c1702fafd13723c8085944f88.err
diff --git a/test/expected/test_json_format.sh_895283eeb4c10e9c1702fafd13723c8085944f88.out b/test/expected/test_json_format.sh_895283eeb4c10e9c1702fafd13723c8085944f88.out
new file mode 100644
index 0000000..143d8af
--- /dev/null
+++ b/test/expected/test_json_format.sh_895283eeb4c10e9c1702fafd13723c8085944f88.out
@@ -0,0 +1,20 @@
+2023-10-01T02:39:09+00:00 twv 10.0.0.1 INFO files_antivirus Tried to scan non file
+ user: admin
+ method:
+ url: --
+2023-10-01T02:39:09+00:00 twv INFO files_antivirus Tried to scan non file
+ user: --
+ method:
+ url: --
+2023-10-01T02:50:03+00:00 pZp INFO fulltextsearch_elasticsearch Request: PUT http://elasticsearch:9200/nextcloud/_doc/files%3A1780281
+ user: --
+ method:
+ url: --
+2023-10-16T01:47:44+00:00 WO0 192.168.1.1 INFO memories Memories: Updated item successfully
+ user: jeff
+ method: PATCH
+ url: --
+2023-10-16T01:50:18+00:00 Sbl 192.168.1.1 INFO files_versions Mark to expire /Documents/phat.txt next version should be 1697407738 or smaller. (prevTimestamp: 1697411338; step: 3600
+ user: jeff
+ method:
+ url: --
diff --git a/test/expected/test_json_format.sh_90a037c7d9d70ac4ca97158271ea242787313377.out b/test/expected/test_json_format.sh_90a037c7d9d70ac4ca97158271ea242787313377.out
deleted file mode 100644
index 30ddacc..0000000
--- a/test/expected/test_json_format.sh_90a037c7d9d70ac4ca97158271ea242787313377.out
+++ /dev/null
@@ -1,3 +0,0 @@
-2017-03-24T20:06:26.240 1.1.1.1 GET 200 /example/uri/5
-2017-03-24T20:12:47.764 1.1.1.1 GET 500 /example/uri/5
-2017-03-24T20:15:31.694 1.1.1.1 GET 400 /example/uri/5
diff --git a/test/expected/test_json_format.sh_952297a90e312d2184fe3e4df795ddc731b096c9.out b/test/expected/test_json_format.sh_952297a90e312d2184fe3e4df795ddc731b096c9.out
index 7cb7336..6de63a2 100644
--- a/test/expected/test_json_format.sh_952297a90e312d2184fe3e4df795ddc731b096c9.out
+++ b/test/expected/test_json_format.sh_952297a90e312d2184fe3e4df795ddc731b096c9.out
@@ -1,4 +1,4 @@
-[-09-06T22:00:49.124] INFO Shutting down service
+[-09-06T22:00:49.124817Z] INFO Shutting down service
user: steve@example.com
diff --git a/test/expected/test_json_format.sh_a06b3cdd46b387e72d6faa4cce648b8b11ae870b.out b/test/expected/test_json_format.sh_a06b3cdd46b387e72d6faa4cce648b8b11ae870b.out
index c3b21be..264a35e 100644
--- a/test/expected/test_json_format.sh_a06b3cdd46b387e72d6faa4cce648b8b11ae870b.out
+++ b/test/expected/test_json_format.sh_a06b3cdd46b387e72d6faa4cce648b8b11ae870b.out
@@ -1,29 +1,29 @@
-
-[2013-09-06T20:00:48.124] ⋮ trace testbork bork bork
-
-[2013-09-06T20:00:49.124] ⋮ Starting up servicebork bork bork
-
-[2013-09-06T22:00:49.124] ⋮ Shutting down servicebork bork bork
+
+[2013-09-06T20:00:48.124817Z] ⋮ <c.e.foo.bar.bazzer > trace testbork bork bork
+
+[2013-09-06T20:00:49.124817Z] ⋮ <com.example.demo > Starting up servicebork bork bork
+
+[2013-09-06T22:00:49.124817Z] ⋮ Shutting down servicebork bork bork
user: mailto:steve@example.com
-
-[2013-09-06T22:00:59.124] ⋮ Details...
+
+[2013-09-06T22:00:59.124817Z] ⋮ Details...
bork bork bork
-
-[2013-09-06T22:00:59.124] ⋮ Details...
+
+[2013-09-06T22:00:59.124817Z] ⋮ Details...
bork bork bork
-
-[2013-09-06T22:00:59.124] ⋮ Details...
+
+[2013-09-06T22:00:59.124817Z] ⋮ Details...
bork bork bork
-
-[2013-09-06T22:00:59.124] ⋮ Details...
+
+[2013-09-06T22:00:59.124817Z] ⋮ Details...
bork bork bork
-
-[2013-09-06T22:00:59.124] ⋮ Details...bork bork bork
-
-[2013-09-06T22:01:49.124] ⋮ 1 beat per secondbork bork bork
-
-[2013-09-06T22:01:49.124] ⋮ not looking goodbork bork bork
-
-[2013-09-06T22:01:49.124] ⋮ looking badbork bork bork
-
-[2013-09-06T22:01:49.124] ⋮ sooo badbork bork bork
+
+[2013-09-06 22:01:00Z] ⋮ Details...bork bork bork
+
+[2013-09-06T22:01:49.124817Z] ⋮ 1 beat per secondbork bork bork
+
+[2013-09-06T22:01:49.124817Z] ⋮ not looking goodbork bork bork
+
+[2013-09-06T22:01:49.124817Z] ⋮ looking badbork bork bork
+
+[2013-09-06T22:01:49.124817Z] ⋮ sooo badbork bork bork
diff --git a/test/expected/test_json_format.sh_a6be47f1311ed92feaf303142fcb103deb80f456.out b/test/expected/test_json_format.sh_a6be47f1311ed92feaf303142fcb103deb80f456.out
deleted file mode 100644
index b356898..0000000
--- a/test/expected/test_json_format.sh_a6be47f1311ed92feaf303142fcb103deb80f456.out
+++ /dev/null
@@ -1,4 +0,0 @@
-log_line,log_part,log_time,log_idle_msecs,log_level,log_mark,log_comment,log_tags,log_filters,client_ip,request/method,request/uri,request/size,response/status,details1,details2,details3
-0,<NULL>,2017-03-24 20:06:26.240,0,info,0,<NULL>,<NULL>,<NULL>,1.1.1.1,GET,/example/uri/5,166,200,<NULL>,<NULL>,<NULL>
-1,<NULL>,2017-03-24 20:12:47.764,381524,critical,0,<NULL>,<NULL>,<NULL>,1.1.1.1,GET,/example/uri/5,166,500,<NULL>,<NULL>,<NULL>
-2,<NULL>,2017-03-24 20:15:31.694,163930,warning,0,<NULL>,<NULL>,<NULL>,1.1.1.1,GET,/example/uri/5,166,400,"{""foo"": ""bar""}","{""foo"": ""bar""}","{""foo"": ""bar""}"
diff --git a/test/expected/test_json_format.sh_ad3a238d03493de305544f9b30a0c69d4f474d3a.out b/test/expected/test_json_format.sh_ad3a238d03493de305544f9b30a0c69d4f474d3a.out
index db5fbef..399bb82 100644
--- a/test/expected/test_json_format.sh_ad3a238d03493de305544f9b30a0c69d4f474d3a.out
+++ b/test/expected/test_json_format.sh_ad3a238d03493de305544f9b30a0c69d4f474d3a.out
@@ -1 +1 @@
-87.226.160.250 2022-10-30T00:00:02.000 "HEAD / HTTP/1.1" 301 570
+87.226.160.250 [2022-10-30T00:00:02Z] "HEAD / HTTP/1.1" 301 570
diff --git a/test/expected/test_json_format.sh_c1a23804c39b0f74642286d69865ee9d0961a58a.out b/test/expected/test_json_format.sh_c1a23804c39b0f74642286d69865ee9d0961a58a.out
index 889eb99..dc77753 100644
--- a/test/expected/test_json_format.sh_c1a23804c39b0f74642286d69865ee9d0961a58a.out
+++ b/test/expected/test_json_format.sh_c1a23804c39b0f74642286d69865ee9d0961a58a.out
@@ -1,2 +1,2 @@
-2022-09-24T00:00:09.484 Hello, World!
-2022-09-24T00:00:19.222 Goodbye, World!
+2022-09-24T00:00:09.484000000Z Hello, World!
+2022-09-24T00:00:19.222000123Z Goodbye, World!
diff --git a/test/expected/test_json_format.sh_c60050b3469f37c5b0864e1dc7eb354e91d6ec81.out b/test/expected/test_json_format.sh_c60050b3469f37c5b0864e1dc7eb354e91d6ec81.out
index abb3b80..2e9cd45 100644
--- a/test/expected/test_json_format.sh_c60050b3469f37c5b0864e1dc7eb354e91d6ec81.out
+++ b/test/expected/test_json_format.sh_c60050b3469f37c5b0864e1dc7eb354e91d6ec81.out
@@ -1,4 +1,4 @@
-2016-08-03T12:06:31.009 - ;Exception initializing page context; java.lang.NoClassDefFoundError: javax/el/StaticFieldELResolver
+2016-08-03T17:06:31.009+0000 - ;Exception initializing page context; java.lang.NoClassDefFoundError: javax/el/StaticFieldELResolver
 at org.apache.jasper.runtime.JspFactoryImpl.internalGetPageContext(JspFactoryImpl.java:172)
 at org.apache.jasper.runtime.JspFactoryImpl.getPageContext(JspFactoryImpl.java:123)
 at org.apache.jsp.errors._404_002dnot_002dfound_jsp._jspService(_404_002dnot_002dfound_jsp.java:38)
@@ -41,7 +41,7 @@
 thread_name: http-bio-0.0.0.0-8081-exec-198
 level: ERROR
 customer: foobaz
-2016-08-03T12:06:31.009 - ;Exception initializing page context; 
+2016-08-03T17:06:31.009+0000 - ;Exception initializing page context; 
 @version: 1
 logger_name: org.apache.jasper.runtime.JspFactoryImpl
 thread_name: http-bio-0.0.0.0-8081-exec-198
diff --git a/test/expected/test_json_format.sh_d0ec34389274affb70a5a76ba4789d51fd60f602.out b/test/expected/test_json_format.sh_d0ec34389274affb70a5a76ba4789d51fd60f602.out
index aa47418..6495db7 100644
--- a/test/expected/test_json_format.sh_d0ec34389274affb70a5a76ba4789d51fd60f602.out
+++ b/test/expected/test_json_format.sh_d0ec34389274affb70a5a76ba4789d51fd60f602.out
@@ -1,4 +1,4 @@
-log_line,log_part,log_time,log_idle_msecs,log_level,log_mark,log_comment,log_tags,log_filters,client_ip,request/method,request/uri,request/size,response/status,response/size,details1,details2,details3
-0,<NULL>,2017-03-24 20:06:26.240,0,info,0,<NULL>,<NULL>,<NULL>,1.1.1.1,GET,/example/uri/5,166,200,443,<NULL>,<NULL>,<NULL>
-1,<NULL>,2017-03-24 20:12:47.764,381524,critical,0,<NULL>,<NULL>,<NULL>,1.1.1.1,GET,/example/uri/5,166,500,4433,<NULL>,<NULL>,<NULL>
-2,<NULL>,2017-03-24 20:15:31.694,163930,warning,0,<NULL>,<NULL>,<NULL>,1.1.1.1,GET,/example/uri/5,166,400,44345,"{""foo"": ""bar""}","{""foo"": ""bar""}","{""foo"": ""bar""}"
+log_line,log_time,log_level,client_ip,request/method,request/uri,request/size,response/status,response/size,details1,details2,details3,log_part,log_idle_msecs,log_mark,log_comment,log_tags,log_annotations,log_filters
+0,2017-03-24 20:06:26.240,info,1.1.1.1,GET,/example/uri/5,166,200,443,<NULL>,<NULL>,<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>
+1,2017-03-24 20:12:47.764,critical,1.1.1.1,GET,/example/uri/5,166,500,4433,<NULL>,<NULL>,<NULL>,<NULL>,381524,0,<NULL>,<NULL>,<NULL>,<NULL>
+2,2017-03-24 20:15:31.694,warning,1.1.1.1,GET,/example/uri/5,166,400,44345,"{""foo"": ""bar""}","{""foo"": ""bar""}","{""foo"": ""bar""}",<NULL>,163930,0,<NULL>,<NULL>,<NULL>,<NULL>
diff --git a/test/expected/test_json_format.sh_d7362cffc8335c2fe6b6527315de59bd6f5dcc7f.out b/test/expected/test_json_format.sh_d7362cffc8335c2fe6b6527315de59bd6f5dcc7f.out
index 9a1c882..c65a346 100644
--- a/test/expected/test_json_format.sh_d7362cffc8335c2fe6b6527315de59bd6f5dcc7f.out
+++ b/test/expected/test_json_format.sh_d7362cffc8335c2fe6b6527315de59bd6f5dcc7f.out
@@ -1,3 +1,3 @@
-2017-03-24T16:06:26.240 1.1.1.1 GET 200 443 /example/uri/5
-2017-03-24T16:12:47.764 1.1.1.1 GET 500 4433 /example/uri/5
-2017-03-24T16:15:31.694 1.1.1.1 GET 400 44345 /example/uri/5
+2017-03-24T16:06:26.240-0400 1.1.1.1 GET 200 443 /example/uri/5
+2017-03-24T16:12:47.764-0400 1.1.1.1 GET 500 4433 /example/uri/5
+2017-03-24T16:15:31.694-0400 1.1.1.1 GET 400 44345 /example/uri/5
diff --git a/test/expected/test_json_format.sh_dfff27a651650a04d93de9a06ab5480e94ce3a79.out b/test/expected/test_json_format.sh_dfff27a651650a04d93de9a06ab5480e94ce3a79.out
index db24336..379fc40 100644
--- a/test/expected/test_json_format.sh_dfff27a651650a04d93de9a06ab5480e94ce3a79.out
+++ b/test/expected/test_json_format.sh_dfff27a651650a04d93de9a06ab5480e94ce3a79.out
@@ -1,4 +1,4 @@
-log_line,log_part,log_time,log_idle_msecs,log_level,log_mark,log_comment,log_tags,log_filters,client_ip,request/method,request/uri,request/size,response/status,response/size,details1,details2,details3
-0,<NULL>,2017-03-24 16:06:26.240,0,info,0,<NULL>,<NULL>,<NULL>,1.1.1.1,GET,/example/uri/5,166,200,443,<NULL>,<NULL>,<NULL>
-1,<NULL>,2017-03-24 16:12:47.764,381524,critical,0,<NULL>,<NULL>,<NULL>,1.1.1.1,GET,/example/uri/5,166,500,4433,<NULL>,<NULL>,<NULL>
-2,<NULL>,2017-03-24 16:15:31.694,163930,warning,0,<NULL>,<NULL>,<NULL>,1.1.1.1,GET,/example/uri/5,166,400,44345,"{""foo"": ""bar""}","{""foo"": ""bar""}","{""foo"": ""bar""}"
+log_line,log_time,log_level,client_ip,request/method,request/uri,request/size,response/status,response/size,details1,details2,details3,log_part,log_idle_msecs,log_mark,log_comment,log_tags,log_annotations,log_filters
+0,2017-03-24 16:06:26.240,info,1.1.1.1,GET,/example/uri/5,166,200,443,<NULL>,<NULL>,<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>
+1,2017-03-24 16:12:47.764,critical,1.1.1.1,GET,/example/uri/5,166,500,4433,<NULL>,<NULL>,<NULL>,<NULL>,381524,0,<NULL>,<NULL>,<NULL>,<NULL>
+2,2017-03-24 16:15:31.694,warning,1.1.1.1,GET,/example/uri/5,166,400,44345,"{""foo"": ""bar""}","{""foo"": ""bar""}","{""foo"": ""bar""}",<NULL>,163930,0,<NULL>,<NULL>,<NULL>,<NULL>
diff --git a/test/expected/test_json_format.sh_e36401aa54bc61de71f8dcbe66ea16effa59ea52.out b/test/expected/test_json_format.sh_e36401aa54bc61de71f8dcbe66ea16effa59ea52.out
index 05d531a..f80f324 100644
--- a/test/expected/test_json_format.sh_e36401aa54bc61de71f8dcbe66ea16effa59ea52.out
+++ b/test/expected/test_json_format.sh_e36401aa54bc61de71f8dcbe66ea16effa59ea52.out
@@ -1,2 +1,2 @@
-87.226.160.250 2022-10-30T00:00:02.000 "HEAD / HTTP/1.1" 301 570
+87.226.160.250 [2022-10-30T00:00:02Z] "HEAD / HTTP/1.1" 301 570
RayID: 761fde4e984e5ab2
diff --git a/test/expected/test_json_format.sh_f740026626ab554dacb249762d8be7d6539b8c6e.out b/test/expected/test_json_format.sh_f740026626ab554dacb249762d8be7d6539b8c6e.out
index 52f2372..d1cb873 100644
--- a/test/expected/test_json_format.sh_f740026626ab554dacb249762d8be7d6539b8c6e.out
+++ b/test/expected/test_json_format.sh_f740026626ab554dacb249762d8be7d6539b8c6e.out
@@ -1,2 +1,2 @@
-[2013-09-06T20:00:49.124] INFO Starting up service
+[2013-09-06T20:00:49.124817Z] ⋮ <com.example.demo > Starting up service
diff --git a/test/expected/test_json_format.sh_fe19b7ebd349cd689b3f5c22618eab5ce995e68e.out b/test/expected/test_json_format.sh_fe19b7ebd349cd689b3f5c22618eab5ce995e68e.out
index 325af1f..87d2dd4 100644
--- a/test/expected/test_json_format.sh_fe19b7ebd349cd689b3f5c22618eab5ce995e68e.out
+++ b/test/expected/test_json_format.sh_fe19b7ebd349cd689b3f5c22618eab5ce995e68e.out
@@ -1,4 +1,4 @@
--09-06T22:00:49.124 INFO Shutting down service
+-09-06T22:00:49.124817Z INFO Shutting down service
@fields/user: steve@example.com
@fields: { "lvl": "INFO", "msg": "Shutting down service", "user": "steve@example.com"}
diff --git a/test/expected/test_logfile.sh_00877d2e9dadab916a02005a068410dfbd85ec74.err b/test/expected/test_logfile.sh_00877d2e9dadab916a02005a068410dfbd85ec74.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_logfile.sh_00877d2e9dadab916a02005a068410dfbd85ec74.err
diff --git a/test/expected/test_logfile.sh_00877d2e9dadab916a02005a068410dfbd85ec74.out b/test/expected/test_logfile.sh_00877d2e9dadab916a02005a068410dfbd85ec74.out
new file mode 100644
index 0000000..c271f3c
--- /dev/null
+++ b/test/expected/test_logfile.sh_00877d2e9dadab916a02005a068410dfbd85ec74.out
@@ -0,0 +1,4 @@
+Nov 03 16:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 03 16:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 03 16:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 03 16:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
diff --git a/test/expected/test_logfile.sh_08d731a04c877a34819b35de185e30a74c9fd497.out b/test/expected/test_logfile.sh_08d731a04c877a34819b35de185e30a74c9fd497.out
index 9b2a7cd..1d2ec4e 100644
--- a/test/expected/test_logfile.sh_08d731a04c877a34819b35de185e30a74c9fd497.out
+++ b/test/expected/test_logfile.sh_08d731a04c877a34819b35de185e30a74c9fd497.out
@@ -1,3 +1,3 @@
-2600-12-03 09:23:00.000000 0:
-2600-12-03 09:23:00.000000 0:
-2600-12-03 09:23:00.000000 0:
+2600-01-03 09:23:00 0:
+00:2 0 00:00:00 0:
+2600-01-03 09:23:00 0:
diff --git a/test/expected/test_logfile.sh_18d9a7beeb09041993d0d6da488fc8192d111bd9.err b/test/expected/test_logfile.sh_18d9a7beeb09041993d0d6da488fc8192d111bd9.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_logfile.sh_18d9a7beeb09041993d0d6da488fc8192d111bd9.err
diff --git a/test/expected/test_logfile.sh_18d9a7beeb09041993d0d6da488fc8192d111bd9.out b/test/expected/test_logfile.sh_18d9a7beeb09041993d0d6da488fc8192d111bd9.out
new file mode 100644
index 0000000..6e52658
--- /dev/null
+++ b/test/expected/test_logfile.sh_18d9a7beeb09041993d0d6da488fc8192d111bd9.out
@@ -0,0 +1,3 @@
+ File Offset 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f ASCII
+ 0 23 44 61 74 65 3a 09 33 2f 39 2f 33 2f 30 85 20 #Date:_3 /9/3/0×_
+ 10 32 0a 30 0a 2_0_
diff --git a/test/expected/test_logfile.sh_1c6eee38f66356fcd9a9f0faedaea6dbcc901060.out b/test/expected/test_logfile.sh_1c6eee38f66356fcd9a9f0faedaea6dbcc901060.out
deleted file mode 100644
index ff67043..0000000
--- a/test/expected/test_logfile.sh_1c6eee38f66356fcd9a9f0faedaea6dbcc901060.out
+++ /dev/null
@@ -1,2 +0,0 @@
- filepath  descriptor  mimetype  content 
-{test_dir}/logfile_syslog.1.gz net.zlib.gzip.header application/json {"name":"logfile_syslog.1","mtime":"2007-11-03T16:23:00.000","comment":""} 
diff --git a/test/expected/test_logfile.sh_218ecb88b4753010c4264b3ac351260b4811612f.out b/test/expected/test_logfile.sh_218ecb88b4753010c4264b3ac351260b4811612f.out
index 4ed341d..683602c 100644
--- a/test/expected/test_logfile.sh_218ecb88b4753010c4264b3ac351260b4811612f.out
+++ b/test/expected/test_logfile.sh_218ecb88b4753010c4264b3ac351260b4811612f.out
@@ -1,2 +1,2 @@
-basename(filepath)  descriptor  mimetype  content 
-logfile_syslog.1.gz net.zlib.gzip.header application/json {"name":"logfile_syslog.1","mtime":"2007-11-03T09:23:00.000","comment":""} 
+basename(filepath)   descriptor   mimetype   content  
+logfile_syslog.1.gz net.zlib.gzip.header application/json {"name":"logfile_syslog.1","mtime":"2007-11-03T09:23:00.000","comment":""}
diff --git a/test/expected/test_logfile.sh_290a3c49e53c2229a7400c107338fa0bb38375e2.out b/test/expected/test_logfile.sh_290a3c49e53c2229a7400c107338fa0bb38375e2.out
index 7731fde..3052066 100644
--- a/test/expected/test_logfile.sh_290a3c49e53c2229a7400c107338fa0bb38375e2.out
+++ b/test/expected/test_logfile.sh_290a3c49e53c2229a7400c107338fa0bb38375e2.out
@@ -1,2 +1,2 @@
-#Fields: ? )
-0
+ File Offset 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f ASCII
+ 0 23 46 69 65 6c 64 73 3a 20 f9 09 29 0a 30 0a #Fields: _×_)_0_
diff --git a/test/expected/test_logfile.sh_2e72d848a51ac1eb476b973c61fe43a65d579ba5.err b/test/expected/test_logfile.sh_2e72d848a51ac1eb476b973c61fe43a65d579ba5.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_logfile.sh_2e72d848a51ac1eb476b973c61fe43a65d579ba5.err
diff --git a/test/expected/test_logfile.sh_2e72d848a51ac1eb476b973c61fe43a65d579ba5.out b/test/expected/test_logfile.sh_2e72d848a51ac1eb476b973c61fe43a65d579ba5.out
new file mode 100644
index 0000000..1925cdc
--- /dev/null
+++ b/test/expected/test_logfile.sh_2e72d848a51ac1eb476b973c61fe43a65d579ba5.out
@@ -0,0 +1,2 @@
+ options_path   options  
+{test_dir}/logfile_syslog.0 {"default-zone":"America/Los_Angeles"}
diff --git a/test/expected/test_logfile.sh_341e491abcf8772422bafb8b0eaea6492da230f6.err b/test/expected/test_logfile.sh_341e491abcf8772422bafb8b0eaea6492da230f6.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_logfile.sh_341e491abcf8772422bafb8b0eaea6492da230f6.err
diff --git a/test/expected/test_logfile.sh_341e491abcf8772422bafb8b0eaea6492da230f6.out b/test/expected/test_logfile.sh_341e491abcf8772422bafb8b0eaea6492da230f6.out
new file mode 100644
index 0000000..f625ce6
--- /dev/null
+++ b/test/expected/test_logfile.sh_341e491abcf8772422bafb8b0eaea6492da230f6.out
@@ -0,0 +1,3 @@
+Aug 27 14:22:01 2022 -- 613
+Aug 27 14:22:01 2022 -- 694
+Aug 27 14:22:01 2022 -- 888
diff --git a/test/expected/test_logfile.sh_3fc6bfd8a6160817211f3e14fde957af75b9dbe7.out b/test/expected/test_logfile.sh_3fc6bfd8a6160817211f3e14fde957af75b9dbe7.out
index 8d8b6ce..6a73ecb 100644
--- a/test/expected/test_logfile.sh_3fc6bfd8a6160817211f3e14fde957af75b9dbe7.out
+++ b/test/expected/test_logfile.sh_3fc6bfd8a6160817211f3e14fde957af75b9dbe7.out
@@ -1,2 +1,3 @@
-#Date: 20?0-2-02
-0
+ File Offset 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f ASCII
+ 0 23 44 61 74 65 3a 09 32 30 80 30 2d 32 2d 30 32 #Date:_2 0×0-2-02
+ 10 0a 30 0a _0_
diff --git a/test/expected/test_logfile.sh_82d65f4dac07b1623f8202444d5b9144096e8243.err b/test/expected/test_logfile.sh_82d65f4dac07b1623f8202444d5b9144096e8243.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_logfile.sh_82d65f4dac07b1623f8202444d5b9144096e8243.err
diff --git a/test/expected/test_logfile.sh_82d65f4dac07b1623f8202444d5b9144096e8243.out b/test/expected/test_logfile.sh_82d65f4dac07b1623f8202444d5b9144096e8243.out
new file mode 100644
index 0000000..409849c
--- /dev/null
+++ b/test/expected/test_logfile.sh_82d65f4dac07b1623f8202444d5b9144096e8243.out
@@ -0,0 +1,3 @@
+192.168.202.254 - - [20/Jul/2009:15:59:26 -0700] "GET /vmw/cgi/tramp HTTP/1.0" 200 134 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:15:59:29 -0700] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:15:59:29 -0700] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_logfile.sh_8a5e754cd471e5fdcdaede49c9290903acd7aad6.err b/test/expected/test_logfile.sh_8a5e754cd471e5fdcdaede49c9290903acd7aad6.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_logfile.sh_8a5e754cd471e5fdcdaede49c9290903acd7aad6.err
diff --git a/test/expected/test_logfile.sh_8a5e754cd471e5fdcdaede49c9290903acd7aad6.out b/test/expected/test_logfile.sh_8a5e754cd471e5fdcdaede49c9290903acd7aad6.out
new file mode 100644
index 0000000..dbd0803
--- /dev/null
+++ b/test/expected/test_logfile.sh_8a5e754cd471e5fdcdaede49c9290903acd7aad6.out
@@ -0,0 +1,3 @@
+Jul 20 15:59:26 2009 -- 000
+Jul 20 15:59:29 2009 -- 000
+Jul 20 15:59:29 2009 -- 000
diff --git a/test/expected/test_logfile.sh_c18e14a26d8261c9f72747118a469266121d5459.out b/test/expected/test_logfile.sh_c18e14a26d8261c9f72747118a469266121d5459.out
index 0733b93..0635648 100644
--- a/test/expected/test_logfile.sh_c18e14a26d8261c9f72747118a469266121d5459.out
+++ b/test/expected/test_logfile.sh_c18e14a26d8261c9f72747118a469266121d5459.out
@@ -1,3 +1,3 @@
-log_line log_part log_time log_idle_msecs log_level log_mark log_comment log_tags log_filters col_0 col_1
- 0 <NULL> 2021-05-19 08:00:01.000 0 info 0 <NULL> <NULL> <NULL> 1 /abc/def
- 2 <NULL> 2021-05-19 08:00:03.000 2000 info 0 <NULL> <NULL> <NULL> 3 /ghi/jkl
+log_line log_time log_level col_0 col_1 log_part log_idle_msecs log_mark log_comment log_tags log_annotations log_filters
+ 0 2021-05-19 08:00:01.000 info 1 /abc/def <NULL> 0 0 <NULL> <NULL> <NULL> <NULL>
+ 2 2021-05-19 08:00:03.000 info 3 /ghi/jkl <NULL> 2000 0 <NULL> <NULL> <NULL> <NULL>
diff --git a/test/expected/test_logfile.sh_cc368d4b4bb6a9b9c79bd5a70ffa1f2d9d01e286.err b/test/expected/test_logfile.sh_cc368d4b4bb6a9b9c79bd5a70ffa1f2d9d01e286.err
new file mode 100644
index 0000000..36412d9
--- /dev/null
+++ b/test/expected/test_logfile.sh_cc368d4b4bb6a9b9c79bd5a70ffa1f2d9d01e286.err
@@ -0,0 +1,15 @@
+✘ error: “bad” is not a valid timezone
+ reason: bad not found in timezone database
+ --> command-option:1
+ | :set-file-timezone bad 
+ = note: did you mean one of the following?
+ America/Bahia_Banderas
+ Asia/Ashkhabad
+ Brazil/DeNoronha
+ America/Barbados
+ Asia/Baghdad
+ = help: :set-file-timezone zone [pattern]
+ ══════════════════════════════════════════════════════════════════════
+ Set the timezone to use for log messages that do not include a
+ timezone. The timezone is applied to the focused file or the given
+ glob pattern.
diff --git a/test/expected/test_logfile.sh_cc368d4b4bb6a9b9c79bd5a70ffa1f2d9d01e286.out b/test/expected/test_logfile.sh_cc368d4b4bb6a9b9c79bd5a70ffa1f2d9d01e286.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_logfile.sh_cc368d4b4bb6a9b9c79bd5a70ffa1f2d9d01e286.out
diff --git a/test/expected/test_logfile.sh_ccb0d31813367c8d9dc5b5df383fac5b780711c1.err b/test/expected/test_logfile.sh_ccb0d31813367c8d9dc5b5df383fac5b780711c1.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_logfile.sh_ccb0d31813367c8d9dc5b5df383fac5b780711c1.err
diff --git a/test/expected/test_logfile.sh_ccb0d31813367c8d9dc5b5df383fac5b780711c1.out b/test/expected/test_logfile.sh_ccb0d31813367c8d9dc5b5df383fac5b780711c1.out
new file mode 100644
index 0000000..1bf2d2a
--- /dev/null
+++ b/test/expected/test_logfile.sh_ccb0d31813367c8d9dc5b5df383fac5b780711c1.out
@@ -0,0 +1,3 @@
+Aug 27 10:22:01 2022 -- 613
+Aug 27 10:22:01 2022 -- 694
+Aug 27 10:22:01 2022 -- 888
diff --git a/test/expected/test_logfile.sh_d14f6d8888652321206549df8a9535399f0fd372.err b/test/expected/test_logfile.sh_d14f6d8888652321206549df8a9535399f0fd372.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_logfile.sh_d14f6d8888652321206549df8a9535399f0fd372.err
diff --git a/test/expected/test_logfile.sh_d14f6d8888652321206549df8a9535399f0fd372.out b/test/expected/test_logfile.sh_d14f6d8888652321206549df8a9535399f0fd372.out
new file mode 100644
index 0000000..c271f3c
--- /dev/null
+++ b/test/expected/test_logfile.sh_d14f6d8888652321206549df8a9535399f0fd372.out
@@ -0,0 +1,4 @@
+Nov 03 16:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 03 16:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 03 16:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 03 16:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
diff --git a/test/expected/test_logfile.sh_de8d59879fe6aa5a012b0748ff77ae26c07aea89.err b/test/expected/test_logfile.sh_de8d59879fe6aa5a012b0748ff77ae26c07aea89.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_logfile.sh_de8d59879fe6aa5a012b0748ff77ae26c07aea89.err
diff --git a/test/expected/test_logfile.sh_de8d59879fe6aa5a012b0748ff77ae26c07aea89.out b/test/expected/test_logfile.sh_de8d59879fe6aa5a012b0748ff77ae26c07aea89.out
new file mode 100644
index 0000000..6feae9d
--- /dev/null
+++ b/test/expected/test_logfile.sh_de8d59879fe6aa5a012b0748ff77ae26c07aea89.out
@@ -0,0 +1,4 @@
+Nov 03 13:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 03 13:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 03 13:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 03 13:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
diff --git a/test/expected/test_logfile.sh_e840b674cd65936a72bd64b1dac1524d16fe44c3.out b/test/expected/test_logfile.sh_e840b674cd65936a72bd64b1dac1524d16fe44c3.out
index 9de987f..f551cf0 100644
--- a/test/expected/test_logfile.sh_e840b674cd65936a72bd64b1dac1524d16fe44c3.out
+++ b/test/expected/test_logfile.sh_e840b674cd65936a72bd64b1dac1524d16fe44c3.out
@@ -1,11 +1,11 @@
- log_time  log_body 
-2022-09-19 09:24:04.000 tid:1d1f - Mux ID not found in mapping dictionary 
+ log_time   log_body  
+2022-09-19 09:24:04.000 tid:1d1f - Mux ID not found in mapping dictionary
2022-09-19 09:24:04.000 tid:1d1f - Can't handle disconnect with invalid ecid
2022-09-19 09:24:20.000 Entered:_AMMuxedDeviceDisconnected, mux-device:1003 
-2022-09-19 09:24:20.000 Entered:_AMMuxedDeviceDisconnected, mux-device:1003
-2022-09-19 09:24:20.000 Entered:__thr_AMMuxedDeviceDisconnected, mux-device:1003 
+2022-09-19 09:24:20.000 Entered:_AMMuxedDeviceDisconnected, mux-device:1003 
+2022-09-19 09:24:20.000 Entered:__thr_AMMuxedDeviceDisconnected, mux-device:1003
2022-09-19 09:24:20.000 Entered:__thr_AMMuxedDeviceDisconnected, mux-device:1003
2022-09-19 09:24:20.000 tid:191f - Mux ID not found in mapping dictionary 
-2022-09-19 09:24:20.000 tid:1d1f - Mux ID not found in mapping dictionary
-2022-09-19 09:24:20.000 tid:191f - Can't handle disconnect with invalid ecid 
+2022-09-19 09:24:20.000 tid:1d1f - Mux ID not found in mapping dictionary 
+2022-09-19 09:24:20.000 tid:191f - Can't handle disconnect with invalid ecid
2022-09-19 09:24:20.000 tid:1d1f - Can't handle disconnect with invalid ecid
diff --git a/test/expected/test_logfile.sh_f171f265d8d45a2707e8b9f53e938f574c614d25.err b/test/expected/test_logfile.sh_f171f265d8d45a2707e8b9f53e938f574c614d25.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_logfile.sh_f171f265d8d45a2707e8b9f53e938f574c614d25.err
diff --git a/test/expected/test_logfile.sh_f171f265d8d45a2707e8b9f53e938f574c614d25.out b/test/expected/test_logfile.sh_f171f265d8d45a2707e8b9f53e938f574c614d25.out
new file mode 100644
index 0000000..c210568
--- /dev/null
+++ b/test/expected/test_logfile.sh_f171f265d8d45a2707e8b9f53e938f574c614d25.out
@@ -0,0 +1,3 @@
+Aug 27 07:22:01 2022 -- 613
+Aug 27 07:22:01 2022 -- 694
+Aug 27 07:22:01 2022 -- 888
diff --git a/test/expected/test_meta.sh_0ae5840c0758ec95a397493ac3c3d4fabd397a34.err b/test/expected/test_meta.sh_0ae5840c0758ec95a397493ac3c3d4fabd397a34.err
new file mode 100644
index 0000000..8b8ac40
--- /dev/null
+++ b/test/expected/test_meta.sh_0ae5840c0758ec95a397493ac3c3d4fabd397a34.err
@@ -0,0 +1,7 @@
+✘ error: unexpected JSON value
+ --> command-option:1
+ | ;UPDATE access_log SET log_annotations = '1' WHERE log_line = 0
+ --> log_annotations:1
+ | 1 
+ = help: Available Properties
+ (.*)
diff --git a/test/expected/test_meta.sh_0ae5840c0758ec95a397493ac3c3d4fabd397a34.out b/test/expected/test_meta.sh_0ae5840c0758ec95a397493ac3c3d4fabd397a34.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_meta.sh_0ae5840c0758ec95a397493ac3c3d4fabd397a34.out
diff --git a/test/expected/test_meta.sh_41f643bb4f720130625b042563e9591bee4ae588.out b/test/expected/test_meta.sh_41f643bb4f720130625b042563e9591bee4ae588.out
index 171d0f7..d2ad552 100644
--- a/test/expected/test_meta.sh_41f643bb4f720130625b042563e9591bee4ae588.out
+++ b/test/expected/test_meta.sh_41f643bb4f720130625b042563e9591bee4ae588.out
@@ -1,2 +1,2 @@
-log_tags 
+log_tags 
["#foo"]
diff --git a/test/expected/test_meta.sh_4283bf9128e0396c4ff141faf68279d5a3d8ac63.err b/test/expected/test_meta.sh_4283bf9128e0396c4ff141faf68279d5a3d8ac63.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_meta.sh_4283bf9128e0396c4ff141faf68279d5a3d8ac63.err
diff --git a/test/expected/test_meta.sh_4283bf9128e0396c4ff141faf68279d5a3d8ac63.out b/test/expected/test_meta.sh_4283bf9128e0396c4ff141faf68279d5a3d8ac63.out
new file mode 100644
index 0000000..f1362fc
--- /dev/null
+++ b/test/expected/test_meta.sh_4283bf9128e0396c4ff141faf68279d5a3d8ac63.out
@@ -0,0 +1,41 @@
+#!lnav -Nf
+# This file is an export of an lnav session. You can type
+# '|/path/to/this/file' in lnav to execute this file and
+# restore the state of the session.
+
+;SELECT raise_error('This session export was made with a newer version of lnav, please upgrade to ' || '0.11.2' || ' or later')
+ WHERE lnav_version() < '0.11.2' COLLATE naturalcase
+
+# The files loaded into the session were:
+
+
+# Set this environment variable to override this value or edit this script.
+;INSERT OR IGNORE INTO environ (name, value) VALUES ('LOG_DIR_0', '{top_srcdir_parent}')
+:open $LOG_DIR_0/lnav/test/logfile_access_log.0
+
+:rebuild
+
+
+# The following SQL statements will restore the bookmarks,
+# comments, and tags that were added in the session.
+
+;SELECT total_changes() AS before_mark_changes
+;UPDATE all_logs SET log_mark = 0, log_comment = NULL, log_tags = NULL, log_annotations = '{"org.lnav.test":"Hello, <span style=\"color: #f00\">World</span>!\n"}' WHERE log_time_msecs = 1248130766000 AND log_format = 'access_log' AND log_line_hash = 'v1:3f7e0f10f2473f83b2b4eacccfc9b4e2'
+;UPDATE all_logs SET log_mark = 0, log_comment = NULL, log_tags = '["#foo"]', log_annotations = NULL WHERE log_time_msecs = 1248130769000 AND log_format = 'access_log' AND log_line_hash = 'v1:7ad4831dd06e0d6b0ffd965c7d65285f'
+
+;SELECT 2 - (total_changes() - $before_mark_changes) AS failed_mark_changes
+;SELECT echoln(printf('%sERROR%s: failed to restore %d bookmarks',
+ $ansi_red, $ansi_norm, $failed_mark_changes))
+ WHERE $failed_mark_changes != 0
+
+
+# The following SQL statements will restore the filters that
+# were added in the session.
+
+;REPLACE INTO lnav_view_filters (view_name, enabled, type, language, pattern) VALUES ('log', 0, 'in', 'regex', 'credential status')
+
+
+# The following commands will restore the state of the LOG view.
+
+:switch-to-view log
+:goto 0
diff --git a/test/expected/test_meta.sh_65325d1bcb58e530a8d681685fea56803f67a2eb.err b/test/expected/test_meta.sh_65325d1bcb58e530a8d681685fea56803f67a2eb.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_meta.sh_65325d1bcb58e530a8d681685fea56803f67a2eb.err
diff --git a/test/expected/test_meta.sh_65325d1bcb58e530a8d681685fea56803f67a2eb.out b/test/expected/test_meta.sh_65325d1bcb58e530a8d681685fea56803f67a2eb.out
new file mode 100644
index 0000000..25d62c1
--- /dev/null
+++ b/test/expected/test_meta.sh_65325d1bcb58e530a8d681685fea56803f67a2eb.out
@@ -0,0 +1,2 @@
+log_line  log_tags  
+ 46 ["#bro-test"]
diff --git a/test/expected/test_meta.sh_aae427fe704f131f8466fbfc9e7967c2e874530a.err b/test/expected/test_meta.sh_aae427fe704f131f8466fbfc9e7967c2e874530a.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_meta.sh_aae427fe704f131f8466fbfc9e7967c2e874530a.err
diff --git a/test/expected/test_meta.sh_aae427fe704f131f8466fbfc9e7967c2e874530a.out b/test/expected/test_meta.sh_aae427fe704f131f8466fbfc9e7967c2e874530a.out
new file mode 100644
index 0000000..fc8266d
--- /dev/null
+++ b/test/expected/test_meta.sh_aae427fe704f131f8466fbfc9e7967c2e874530a.out
@@ -0,0 +1,2 @@
+log_line log_annotations 
+ 0 {"abc":"def"}
diff --git a/test/expected/test_meta.sh_ad2f396f332d14ed6e95936983bc7e4aeea0bfac.err b/test/expected/test_meta.sh_ad2f396f332d14ed6e95936983bc7e4aeea0bfac.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_meta.sh_ad2f396f332d14ed6e95936983bc7e4aeea0bfac.err
diff --git a/test/expected/test_meta.sh_ad2f396f332d14ed6e95936983bc7e4aeea0bfac.out b/test/expected/test_meta.sh_ad2f396f332d14ed6e95936983bc7e4aeea0bfac.out
new file mode 100644
index 0000000..9fe4123
--- /dev/null
+++ b/test/expected/test_meta.sh_ad2f396f332d14ed6e95936983bc7e4aeea0bfac.out
@@ -0,0 +1,7 @@
+192.168.202.254 - - [20/Jul/2009:22:59:26 +0000] "GET /vmw/cgi/tramp HTTP/1.0" 200 134 "-" "gPXE/0.9.7"
+ ├ org.lnav.test:
+ ╰ Hello, World!
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+ 📝 Annotations available, focus on this line and use :annotate to apply them
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
+ 📝 Annotations available, focus on this line and use :annotate to apply them
diff --git a/test/expected/test_meta.sh_b622c04c2bede5371bfa6f2627b0474049ecc5e9.err b/test/expected/test_meta.sh_b622c04c2bede5371bfa6f2627b0474049ecc5e9.err
new file mode 100644
index 0000000..cf52340
--- /dev/null
+++ b/test/expected/test_meta.sh_b622c04c2bede5371bfa6f2627b0474049ecc5e9.err
@@ -0,0 +1,6 @@
+✘ error: invalid JSON
+ reason: parse error: premature EOF
+ --> command-option:1
+ | ;UPDATE access_log SET log_annotations = '{"abc": "def"' WHERE log_line = 0
+ --> log_annotations:1
+ | {"abc": "def" 
diff --git a/test/expected/test_meta.sh_b622c04c2bede5371bfa6f2627b0474049ecc5e9.out b/test/expected/test_meta.sh_b622c04c2bede5371bfa6f2627b0474049ecc5e9.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_meta.sh_b622c04c2bede5371bfa6f2627b0474049ecc5e9.out
diff --git a/test/expected/test_meta.sh_c75128169049bd88d5eaf8b84a7f617e5ae5d936.out b/test/expected/test_meta.sh_c75128169049bd88d5eaf8b84a7f617e5ae5d936.out
index 8462ae3..6f1aae9 100644
--- a/test/expected/test_meta.sh_c75128169049bd88d5eaf8b84a7f617e5ae5d936.out
+++ b/test/expected/test_meta.sh_c75128169049bd88d5eaf8b84a7f617e5ae5d936.out
@@ -1,4 +1,4 @@
-log_line  log_comment log_tags 
- 0 Hello, World! ["#foo"] 
+log_line  log_comment  log_tags 
+ 0 Hello, World! ["#foo"]
1 <NULL> <NULL>
 2 <NULL>  <NULL> 
diff --git a/test/expected/test_meta.sh_d6af0b41066ca3be0bbce89c83c011f4ecfa516e.out b/test/expected/test_meta.sh_d6af0b41066ca3be0bbce89c83c011f4ecfa516e.out
index a3e5357..6300f44 100644
--- a/test/expected/test_meta.sh_d6af0b41066ca3be0bbce89c83c011f4ecfa516e.out
+++ b/test/expected/test_meta.sh_d6af0b41066ca3be0bbce89c83c011f4ecfa516e.out
@@ -1,5 +1,5 @@
192.168.202.254 - - [20/Jul/2009:22:59:26 +0000] "GET /vmw/cgi/tramp HTTP/1.0" 200 134 "-" "gPXE/0.9.7"
-192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
├ Hello, World!
└ #foo
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_meta.sh_f7c55356df0d71c51eb7629c5a81f347083ce1ef.err b/test/expected/test_meta.sh_f7c55356df0d71c51eb7629c5a81f347083ce1ef.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_meta.sh_f7c55356df0d71c51eb7629c5a81f347083ce1ef.err
diff --git a/test/expected/test_meta.sh_f7c55356df0d71c51eb7629c5a81f347083ce1ef.out b/test/expected/test_meta.sh_f7c55356df0d71c51eb7629c5a81f347083ce1ef.out
new file mode 100644
index 0000000..25d62c1
--- /dev/null
+++ b/test/expected/test_meta.sh_f7c55356df0d71c51eb7629c5a81f347083ce1ef.out
@@ -0,0 +1,2 @@
+log_line  log_tags  
+ 46 ["#bro-test"]
diff --git a/test/expected/test_pretty_print.sh_3c255c3c8b28df9d694b329a265e8b8140dae4a2.out b/test/expected/test_pretty_print.sh_3c255c3c8b28df9d694b329a265e8b8140dae4a2.out
index 35fadf8..974a0b4 100644
--- a/test/expected/test_pretty_print.sh_3c255c3c8b28df9d694b329a265e8b8140dae4a2.out
+++ b/test/expected/test_pretty_print.sh_3c255c3c8b28df9d694b329a265e8b8140dae4a2.out
@@ -1,8 +1,8 @@
{
- "wrapper": [
+ "wrapper": [
{"message":""
- select Id from Account where id = $sfid
- ^
- ERROR at Row:1:Column:34
- line 1:34 no viable alternative at character '$'
-""}]}
+   select Id from Account where id = $sfid
+     ^
+   ERROR at Row:1:Column:34
+   line 1:34 no viable alternative at character '$'
+""}]}
diff --git a/test/expected/test_pretty_print.sh_7192f8f68adb14705c8a60e73ff8248c61c7fd03.out b/test/expected/test_pretty_print.sh_7192f8f68adb14705c8a60e73ff8248c61c7fd03.out
index 613cc3a..18f1d8a 100644
--- a/test/expected/test_pretty_print.sh_7192f8f68adb14705c8a60e73ff8248c61c7fd03.out
+++ b/test/expected/test_pretty_print.sh_7192f8f68adb14705c8a60e73ff8248c61c7fd03.out
@@ -1,5 +1,5 @@
2015-04-18T13:16:30.003 {
"wrapper": {"msg": r""
Hello,
- World!
-""}}
+
+ ""}}
diff --git a/test/expected/test_pretty_print.sh_a5bee322ea3374690e44a88a16cb6b84feaa11d3.out b/test/expected/test_pretty_print.sh_a5bee322ea3374690e44a88a16cb6b84feaa11d3.out
index 0ac4c9a..f9264f7 100644
--- a/test/expected/test_pretty_print.sh_a5bee322ea3374690e44a88a16cb6b84feaa11d3.out
+++ b/test/expected/test_pretty_print.sh_a5bee322ea3374690e44a88a16cb6b84feaa11d3.out
@@ -1,3 +1,2 @@
Hello
World
-
diff --git a/test/expected/test_prql.sh_06900fac5c2e854b1208320b753fcd43d4ba63a3.err b/test/expected/test_prql.sh_06900fac5c2e854b1208320b753fcd43d4ba63a3.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_prql.sh_06900fac5c2e854b1208320b753fcd43d4ba63a3.err
diff --git a/test/expected/test_prql.sh_06900fac5c2e854b1208320b753fcd43d4ba63a3.out b/test/expected/test_prql.sh_06900fac5c2e854b1208320b753fcd43d4ba63a3.out
new file mode 100644
index 0000000..8b17a01
--- /dev/null
+++ b/test/expected/test_prql.sh_06900fac5c2e854b1208320b753fcd43d4ba63a3.out
@@ -0,0 +1,2 @@
+log_line  log_time  log_level  c_ip  cs_method cs_referer cs_uri_query  cs_uri_stem  cs_user_agent cs_username cs_version  sc_bytes  sc_status cs_host log_part log_idle_msecs log_mark log_comment log_tags log_annotations log_filters 
+ 0 2009-07-20 22:59:26.000 info 192.168.202.254 GET - <NULL> /vmw/cgi/tramp gPXE/0.9.7 - HTTP/1.0  134 200 <NULL> <NULL>  0 0 <NULL> <NULL> <NULL> <NULL>
diff --git a/test/expected/test_prql.sh_15ebcd913f56cde35af26c6300533d6e76bf1b55.err b/test/expected/test_prql.sh_15ebcd913f56cde35af26c6300533d6e76bf1b55.err
new file mode 100644
index 0000000..2d3ebea
--- /dev/null
+++ b/test/expected/test_prql.sh_15ebcd913f56cde35af26c6300533d6e76bf1b55.err
@@ -0,0 +1,10 @@
+✘ error: unable to compile PRQL: from access_log | take abc
+ reason: `take` expected int or range, but found this.access_log.abc
+ = note: Error:
+ ╭─[:1:24]
+ │
+ 1 │ from access_log | take abc
+ │ ─┬─
+ │ ╰─── `take` expected int or range, but found this.access_log.abc
+ ───╯
+
diff --git a/test/expected/test_prql.sh_15ebcd913f56cde35af26c6300533d6e76bf1b55.out b/test/expected/test_prql.sh_15ebcd913f56cde35af26c6300533d6e76bf1b55.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_prql.sh_15ebcd913f56cde35af26c6300533d6e76bf1b55.out
diff --git a/test/expected/test_prql.sh_451e242cdfa2db9005d4fe752a7b05d1ab5cba29.err b/test/expected/test_prql.sh_451e242cdfa2db9005d4fe752a7b05d1ab5cba29.err
new file mode 100644
index 0000000..1c7eb34
--- /dev/null
+++ b/test/expected/test_prql.sh_451e242cdfa2db9005d4fe752a7b05d1ab5cba29.err
@@ -0,0 +1,10 @@
+✘ error: unable to compile PRQL: from db.access_log | take abc
+ reason: `take` expected int or range, but found this.access_log.abc
+ = note: Error:
+ ╭─[:1:27]
+ │
+ 1 │ from db.access_log | take abc
+ │ ─┬─
+ │ ╰─── `take` expected int or range, but found this.access_log.abc
+ ───╯
+
diff --git a/test/expected/test_prql.sh_451e242cdfa2db9005d4fe752a7b05d1ab5cba29.out b/test/expected/test_prql.sh_451e242cdfa2db9005d4fe752a7b05d1ab5cba29.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_prql.sh_451e242cdfa2db9005d4fe752a7b05d1ab5cba29.out
diff --git a/test/expected/test_prql.sh_45d57a042092ffdcd28ea35a892f02859e78f33d.err b/test/expected/test_prql.sh_45d57a042092ffdcd28ea35a892f02859e78f33d.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_prql.sh_45d57a042092ffdcd28ea35a892f02859e78f33d.err
diff --git a/test/expected/test_prql.sh_45d57a042092ffdcd28ea35a892f02859e78f33d.out b/test/expected/test_prql.sh_45d57a042092ffdcd28ea35a892f02859e78f33d.out
new file mode 100644
index 0000000..e73b017
--- /dev/null
+++ b/test/expected/test_prql.sh_45d57a042092ffdcd28ea35a892f02859e78f33d.out
@@ -0,0 +1,2 @@
+log_line  log_time log_level  c_ip cs_method cs_referer cs_uri_query  cs_uri_stem cs_user_agent cs_username cs_version sc_bytes sc_status cs_host log_part log_idle_msecs log_mark log_comment log_tags log_annotations log_filters 
+ 0 2009-07-20 22:59:26.000 info 192.168.202.254 GET - <NULL> /vmw/cgi/tramp gPXE/0.9.7 - HTTP/1.0  134 200 <NULL> <NULL>  0 0 <NULL> <NULL> <NULL> <NULL>
diff --git a/test/expected/test_prql.sh_5aea925b5ad95f55ce6b1b07b7046bc3d7310137.err b/test/expected/test_prql.sh_5aea925b5ad95f55ce6b1b07b7046bc3d7310137.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_prql.sh_5aea925b5ad95f55ce6b1b07b7046bc3d7310137.err
diff --git a/test/expected/test_prql.sh_5aea925b5ad95f55ce6b1b07b7046bc3d7310137.out b/test/expected/test_prql.sh_5aea925b5ad95f55ce6b1b07b7046bc3d7310137.out
new file mode 100644
index 0000000..3c62603
--- /dev/null
+++ b/test/expected/test_prql.sh_5aea925b5ad95f55ce6b1b07b7046bc3d7310137.out
@@ -0,0 +1,4 @@
+ tslice   v  
+2011-11-03 00:19:00.000 {"a.fsdn.com":33,"Other":31,"ad.doubleclick.net":10,"www.goo⋯"\xaf"dia.com":6,"s0.2mdn.net":5,"googleads.g.doubleclick.net":3}
+2011-11-03 00:20:00.000 {"www.bro-ids.org":24,"www.google.com":15,"search.twitter.c⋯"\x8b""\xaf"ds.org":2,"ad.doubleclick.net":1,"cont-sjl-1.pandora.com":1}
+2011-11-03 00:21:00.000 {"www.google.com":2,"ajax.googleapis.com":1,"api.twitter.com":1,"search.twitter.com":1,"www.bro-ids.org":1} 
diff --git a/test/expected/test_regex101.sh_2158f1f011ba8e1b152396c072790c076fdb8ce8.err b/test/expected/test_regex101.sh_2158f1f011ba8e1b152396c072790c076fdb8ce8.err
index bbcd290..e69de29 100644
--- a/test/expected/test_regex101.sh_2158f1f011ba8e1b152396c072790c076fdb8ce8.err
+++ b/test/expected/test_regex101.sh_2158f1f011ba8e1b152396c072790c076fdb8ce8.err
@@ -1,3 +0,0 @@
-⚠ warning: not deleting regex101 entry “zpEnjV”
- reason: delete code is not known for this entry
- = note: formats created by importing a regex101.com entry will not have a delete code
diff --git a/test/expected/test_regex101.sh_366730cac50b4a09b7de4b84641791470b1cb9a3.out b/test/expected/test_regex101.sh_366730cac50b4a09b7de4b84641791470b1cb9a3.out
index 7f5397d..8035940 100644
--- a/test/expected/test_regex101.sh_366730cac50b4a09b7de4b84641791470b1cb9a3.out
+++ b/test/expected/test_regex101.sh_366730cac50b4a09b7de4b84641791470b1cb9a3.out
@@ -3,7 +3,7 @@
"unit_test_log": {
"regex": {
"std": {
- "pattern": "\\[(?<timestamp>\\d+\\/\\d+\\/\\d+ \\d+:\\d+:\\d+) (?<jobserver>[\\w.]+) (?<workqueue>[\\w.]+) (?<processid>\\d+)\\] (?<body>.*)$"
+ "pattern": "(?<timestamp>[A-Za-z]+ [A-Za-z]+ +[0-9]+ [0-9]+:[0-9]+:[0-9]+ [0-9]+) : (?<level>[A-Z][a-z]+): (?<seq>\\([0-9]+\\) )?(?<body>.*)$"
}
}
}
diff --git a/test/expected/test_regex101.sh_3d18474a3e472fff6e23e0c41337ec9188fee591.err b/test/expected/test_regex101.sh_3d18474a3e472fff6e23e0c41337ec9188fee591.err
index 32c87d4..7450da8 100644
--- a/test/expected/test_regex101.sh_3d18474a3e472fff6e23e0c41337ec9188fee591.err
+++ b/test/expected/test_regex101.sh_3d18474a3e472fff6e23e0c41337ec9188fee591.err
@@ -1,34 +1,13 @@
-✘ error: invalid value “/unit_test_log/value/jobserver”
- reason: no patterns have a capture named “jobserver”
- = note: the following captures are available:
-
- = help: values are populated from captures in patterns, so at least one pattern must have a capture with this value name
-✘ error: invalid value “/unit_test_log/value/processid”
- reason: no patterns have a capture named “processid”
- = note: the following captures are available:
-
- = help: values are populated from captures in patterns, so at least one pattern must have a capture with this value name
-✘ error: invalid value “/unit_test_log/value/timestamp”
- reason: no patterns have a capture named “timestamp”
- = note: the following captures are available:
-
- = help: values are populated from captures in patterns, so at least one pattern must have a capture with this value name
-✘ error: invalid value “/unit_test_log/value/workqueue”
- reason: no patterns have a capture named “workqueue”
- = note: the following captures are available:
-
- = help: values are populated from captures in patterns, so at least one pattern must have a capture with this value name
-✘ error: invalid sample log message: "[03/22/2021 02:00:02 job1074.example.com db.db81.example_events 54026] {\"ELAPSED\":\"0.011\",\"LEVEL\":\"info\",\"MESSAGE\":\"finished in 0.011\\n\",\"PREFIX\":\"YFgyWQriCmsAAofJAAAAHg\",\"ROUTINGKEY\":\"EXAMPLE1366.Example.Events._Publish\"}"
- reason: sample does not match any patterns
- --> regex101-home/.lnav/formats/installed/unit_test_log.json:26
- = note: the following shows how each pattern matched this sample:
- [03/22/2021 02:00:02 job1074.example.com db.db81.example_events 54026] {"ELAPSED":"0.011","LEVEL":"info","MESSAGE":"finished in 0.011\n","PREFIX":"YFgyWQriCmsAAofJAAAAHg","ROUTINGKEY":"EXAMPLE1366.Example.Events._Publish"}
- = note: std = “”
-
-✘ error: invalid sample log message: "[03/22/2021 02:00:02 job1074.example.com db.db81.example_events 54026] {\"ELAPSED\":\"0.011\",\"LEVEL\":\"info\",\"MESSAGE\":\"finished in 0.011\\n\",\"PREFIX\":\"YFgyWQriCmsAAofJAAAAHg\",\"ROUTINGKEY\":\"EXAMPLE1366.Example.Events._Publish\"}"
- reason: sample does not match any patterns
- --> regex101-home/.lnav/formats/installed/unit_test_log.json:30
- = note: the following shows how each pattern matched this sample:
- [03/22/2021 02:00:02 job1074.example.com db.db81.example_events 54026] {"ELAPSED":"0.011","LEVEL":"info","MESSAGE":"finished in 0.011\n","PREFIX":"YFgyWQriCmsAAofJAAAAHg","ROUTINGKEY":"EXAMPLE1366.Example.Events._Publish"}
- = note: std = “”
-
+✘ error: invalid pattern: “/unit_test_log/regex/std”
+ reason: no timestamp capture found in the pattern
+ = help: all log messages need a timestamp
+✘ error: invalid value for property “/unit_test_log/timestamp-field”
+ reason: “timestamp” was not found in the pattern at /unit_test_log/regex/std
+✘ error: invalid value for property “/unit_test_log/timestamp-field”
+ reason: “timestamp” was not found in the pattern at /unit_test_log/regex/std
+✘ error: invalid value for property “/unit_test_log/timestamp-field”
+ reason: “timestamp” was not found in the pattern at /unit_test_log/regex/std
+✘ error: invalid value for property “/unit_test_log/timestamp-field”
+ reason: “timestamp” was not found in the pattern at /unit_test_log/regex/std
+✘ error: invalid value for property “/unit_test_log/timestamp-field”
+ reason: “timestamp” was not found in the pattern at /unit_test_log/regex/std
diff --git a/test/expected/test_regex101.sh_7991a5b617867cf37c9f7baa85ffa425f7d455a2.err b/test/expected/test_regex101.sh_7991a5b617867cf37c9f7baa85ffa425f7d455a2.err
index 450b99b..ec9b9c5 100644
--- a/test/expected/test_regex101.sh_7991a5b617867cf37c9f7baa85ffa425f7d455a2.err
+++ b/test/expected/test_regex101.sh_7991a5b617867cf37c9f7baa85ffa425f7d455a2.err
@@ -1,5 +1,5 @@
✘ error: expecting an operation to perform on the std regex using regex101.com
 = help: the available subcommands are:
- • push: create/update an entry for this regex on regex101.com
- • pull: create a patch format file for this regular expression based on the entry in regex101.com
- • delete: delete the entry regex101.com that was created by a push operation
+ • push: create/update an entry for this regex on regex101.com
+ • pull: create a patch format file for this regular expression based on the entry in regex101.com
+ • delete: delete the entry regex101.com that was created by a push operation
diff --git a/test/expected/test_regex101.sh_8e93a3b6b941847c71409a297779fbb0a6666a51.err b/test/expected/test_regex101.sh_8e93a3b6b941847c71409a297779fbb0a6666a51.err
index db47111..e3e6069 100644
--- a/test/expected/test_regex101.sh_8e93a3b6b941847c71409a297779fbb0a6666a51.err
+++ b/test/expected/test_regex101.sh_8e93a3b6b941847c71409a297779fbb0a6666a51.err
@@ -1,3 +1,3 @@
✘ error: expecting an operation to perform on the std regular expression
 = help: the available subcommands are:
- • regex101: use regex101.com to edit this regular expression
+ • regex101: use regex101.com to edit this regular expression
diff --git a/test/expected/test_regex101.sh_cbd859487e4ea011cd6e0f0f114d70158bfd8b43.out b/test/expected/test_regex101.sh_cbd859487e4ea011cd6e0f0f114d70158bfd8b43.out
index c06f523..b4c5d30 100644
--- a/test/expected/test_regex101.sh_cbd859487e4ea011cd6e0f0f114d70158bfd8b43.out
+++ b/test/expected/test_regex101.sh_cbd859487e4ea011cd6e0f0f114d70158bfd8b43.out
@@ -4,30 +4,35 @@
"description": "Format file generated from regex101 entry -- https://regex101.com/r/zpEnjV/2",
"regex": {
"std": {
- "pattern": "\\[(?<timestamp>\\d+\\/\\d+\\/\\d+ \\d+:\\d+:\\d+) (?<jobserver>[\\w.]+) (?<workqueue>[\\w.]+) (?<processid>\\d+)\\] (?<body>.*)$"
+ "pattern": "(?<timestamp>[A-Za-z]+ [A-Za-z]+ +[0-9]+ [0-9]+:[0-9]+:[0-9]+ [0-9]+) : (?<level>[A-Z][a-z]+): (?<seq>\\([0-9]+\\) )?(?<body>.*)$"
}
},
"value": {
- "jobserver": {
+ "level": {
"kind": "string"
},
- "processid": {
+ "seq": {
"kind": "string"
},
"timestamp": {
"kind": "string"
- },
- "workqueue": {
- "kind": "string"
}
},
"sample": [
{
- "line": "[03/22/2021 02:00:02 job1074.example.com db.db81.example_events 54026] {\"ELAPSED\":\"0.011\",\"LEVEL\":\"info\",\"MESSAGE\":\"finished in 0.011\\n\",\"PREFIX\":\"YFgyWQriCmsAAofJAAAAHg\",\"ROUTINGKEY\":\"EXAMPLE1366.Example.Events._Publish\"}"
+ "line": "Fri Jul 15 23:12:58 2016 : Info: Loaded virtual server <default>"
+ },
+ {
+ "line": "Fri Jul 15 23:12:58 2016 : Warning: Ignoring \"sql\" (see raddb/mods-available/README.rst)"
+ },
+ {
+ "line": "Wed Oct 18 22:17:43 2023 : Info: (102211) radutmp: NAS wifi-router rebooted (Accounting-Off packet seen)"
+ },
+ {
+ "line": "Fri Oct 20 18:50:05 2023 : Auth: (105290) Login OK: [iphonese3] (from client wifi-router port 0 via TLS tunnel)"
},
{
- "description": "sample 1",
- "line": "[03/22/2021 02:00:02 job1074.example.com db.db81.example_events 54026] {\"ELAPSED\":\"0.011\",\"LEVEL\":\"info\",\"MESSAGE\":\"finished in 0.011\\n\",\"PREFIX\":\"YFgyWQriCmsAAofJAAAAHg\",\"ROUTINGKEY\":\"EXAMPLE1366.Example.Events._Publish\"}"
+ "line": "Fri Oct 20 18:50:05 2023 : Auth: (105291) Login OK: [iphonese3] (from client wifi-router port 197 cli 22-2E-28-D6-F5-CC)"
}
]
}
diff --git a/test/expected/test_regex101.sh_d84597760285c3964b258726341e018f6cd49954.err b/test/expected/test_regex101.sh_d84597760285c3964b258726341e018f6cd49954.err
index 85a97ba..ea8c31d 100644
--- a/test/expected/test_regex101.sh_d84597760285c3964b258726341e018f6cd49954.err
+++ b/test/expected/test_regex101.sh_d84597760285c3964b258726341e018f6cd49954.err
@@ -2,6 +2,6 @@
 = note: this regex is currently associated with the following regex101.com entry:
https://regex101.com/r/zpEnjV
 = help: the available subcommands are:
- • push: create/update an entry for this regex on regex101.com
- • pull: create a patch format file for this regular expression based on the entry in regex101.com
- • delete: delete the entry regex101.com that was created by a push operation
+ • push: create/update an entry for this regex on regex101.com
+ • pull: create a patch format file for this regular expression based on the entry in regex101.com
+ • delete: delete the entry regex101.com that was created by a push operation
diff --git a/test/expected/test_sessions.sh_33ab03afda2c9331a289fcbd1abdbc1c37b2e87b.err b/test/expected/test_sessions.sh_33ab03afda2c9331a289fcbd1abdbc1c37b2e87b.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sessions.sh_33ab03afda2c9331a289fcbd1abdbc1c37b2e87b.err
diff --git a/test/expected/test_sessions.sh_33ab03afda2c9331a289fcbd1abdbc1c37b2e87b.out b/test/expected/test_sessions.sh_33ab03afda2c9331a289fcbd1abdbc1c37b2e87b.out
new file mode 100644
index 0000000..2a19a15
--- /dev/null
+++ b/test/expected/test_sessions.sh_33ab03afda2c9331a289fcbd1abdbc1c37b2e87b.out
@@ -0,0 +1,11 @@
+2011-11-03 00:20:39.348046 ⋮ 192.168.2.76 52099 192.150.187.43 80 2 GET www.bro-ids.org /frames/header.html http://git.bro-ids.org/ 1.1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1 0 3516 200 OK - - (empty) - - - - - - Fzea5XNhn9eNRMvx7 - text/html
+2011-11-03 00:20:39.448670 ⋮ 192.168.2.76 52109 192.150.187.43 80 1 GET www.bro-ids.org /frames/footer.html http://git.bro-ids.org/ 1.1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1 0 6695 200 OK - - (empty) - - - - - - FkCp6k4tqksK3tiSy7 - text/html
+2011-11-03 00:20:39.463465 ⋮ 192.168.2.76 52099 192.150.187.43 80 3 GET www.bro-ids.org /images/logo-bro-small.png http://www.bro-ids.org/frames/header.html 1.1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1 0 6075 200 OK - - (empty) - - - - - - Fw6FlF4WtotJFNXmHb - image/png
+2011-11-03 00:20:39.786857 ⋮ 192.168.2.76 52110 199.59.148.201 80 1 GET search.twitter.com /search.json?&q=#BroIDS&rpp=2&callback=jsonp1320279639636 http://www.bro-ids.org/frames/footer.html 1.1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1 0 1543 200 OK - - (empty) - - - - - - Feut0t346XEHsQ0OC7 - text/plain
+2011-11-03 00:21:12.372857 ⋮ 192.168.2.76 52111 192.150.187.43 80 1 GET www.bro-ids.org /research/index.html http://www.bro-ids.org/frames/header.html 1.1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1 0 47728 200 OK - - (empty) - - - - - - FOze0l2aT79uPyMiv7 - text/html
+2011-11-03 00:21:13.121725 ⋮ 192.168.2.76 52087 209.85.145.95 80 7 GET ajax.googleapis.com /ajax/services/feed/load?v=1.0&callback=jsonp1320279672539&q=http://blog.bro-ids.org/feeds/posts/default&num=5 http://www.bro-ids.org/research/index.html 1.1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1 0 6584 200 OK - - (empty) - - - - - - FXEXQEMH8DrEuAdg8 - text/plain
+2011-11-03 00:21:13.123842 ⋮ 192.168.2.76 52089 74.125.225.83 80 4 GET www.google.com /uds/css/clear.gif http://www.google.com/uds/api/search/1.0/473bb688d0c0dd605119ad983f5a4386/default+en.css 1.1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1 0 0 304 Not Modified - - (empty) - - - - - - - - -
+2011-11-03 00:21:13.123121 ⋮ 192.168.2.76 52084 74.125.225.83 80 9 GET www.google.com /uds/css/small-logo.png http://www.bro-ids.org/research/index.html 1.1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1 0 0 304 Not Modified - - (empty) - - - - - - - - -
+2011-11-03 00:21:13.198815 ⋮ 192.168.2.76 52112 199.59.148.201 80 1 GET search.twitter.com /search.json?&q=#BroIDS&rpp=2&callback=jsonp1320279672537 http://www.bro-ids.org/research/index.html 1.1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1 0 1543 200 OK - - (empty) - - - - - - Fzjgwn8xXem3Esvk - text/plain
+#close 2017-04-16-21-36-10
+2011-11-03 00:21:13.204466 ⋮ 192.168.2.76 52113 199.59.148.20 80 1 GET api.twitter.com /1/statuses/user_timeline.json?screen_name=Bro_IDS&count=2&include_rts=1&callback=jsonp1320279672538 http://www.bro-ids.org/research/index.html 1.1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1 0 6095 200 OK - - (empty) - - - - - - FAVIuu2XZQyVznfnq8 - text/plain
diff --git a/test/expected/test_sessions.sh_639b83ce8f67975dfdc7086946ec287b43b6fa8c.err b/test/expected/test_sessions.sh_639b83ce8f67975dfdc7086946ec287b43b6fa8c.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sessions.sh_639b83ce8f67975dfdc7086946ec287b43b6fa8c.err
diff --git a/test/expected/test_sessions.sh_639b83ce8f67975dfdc7086946ec287b43b6fa8c.out b/test/expected/test_sessions.sh_639b83ce8f67975dfdc7086946ec287b43b6fa8c.out
new file mode 100644
index 0000000..4023598
--- /dev/null
+++ b/test/expected/test_sessions.sh_639b83ce8f67975dfdc7086946ec287b43b6fa8c.out
@@ -0,0 +1,89 @@
+[
+ {
+ "top_meta": {
+ "time": "2009-07-20 22:59:29.000",
+ "file": "{test_dir}/logfile_access_log.0",
+ "anchor": "#middle",
+ "breadcrumbs": [
+ {
+ "display_value": "⊑ middle",
+ "search_placeholder": "",
+ "possibilities": [
+ {
+ "display_value": "middle"
+ }
+ ]
+ },
+ {
+ "display_value": "2009-07-20T22:59:29.000",
+ "search_placeholder": "(Enter an absolute or relative time)",
+ "possibilities": [
+ {
+ "display_value": "-1 day"
+ },
+ {
+ "display_value": "-1h"
+ },
+ {
+ "display_value": "-30m"
+ },
+ {
+ "display_value": "-15m"
+ },
+ {
+ "display_value": "-5m"
+ },
+ {
+ "display_value": "-1m"
+ },
+ {
+ "display_value": "+1m"
+ },
+ {
+ "display_value": "+5m"
+ },
+ {
+ "display_value": "+15m"
+ },
+ {
+ "display_value": "+30m"
+ },
+ {
+ "display_value": "+1h"
+ },
+ {
+ "display_value": "+1 day"
+ }
+ ]
+ },
+ {
+ "display_value": "access_log",
+ "search_placeholder": "",
+ "possibilities": [
+ {
+ "display_value": "access_log"
+ }
+ ]
+ },
+ {
+ "display_value": "logfile_access_log.0[2]",
+ "search_placeholder": "",
+ "possibilities": [
+ {
+ "display_value": "logfile_access_log.0"
+ }
+ ]
+ },
+ {
+ "display_value": "192.168.202.254",
+ "search_placeholder": "",
+ "possibilities": [
+ {
+ "display_value": "192.168.202.254"
+ }
+ ]
+ }
+ ]
+ }
+ }
+]
diff --git a/test/expected/test_sessions.sh_6d87ff483d5785c58fb271a405ff1c35e4f83cd9.out b/test/expected/test_sessions.sh_6d87ff483d5785c58fb271a405ff1c35e4f83cd9.out
index eb9e677..8b72915 100644
--- a/test/expected/test_sessions.sh_6d87ff483d5785c58fb271a405ff1c35e4f83cd9.out
+++ b/test/expected/test_sessions.sh_6d87ff483d5785c58fb271a405ff1c35e4f83cd9.out
@@ -3,8 +3,8 @@
# '|/path/to/this/file' in lnav to execute this file and
# restore the state of the session.
-;SELECT raise_error('This session export was made with a newer version of lnav, please upgrade to ' || '0.11.2' || ' or later')
- WHERE lnav_version() < '0.11.2' COLLATE naturalcase
+;SELECT raise_error('This session export was made with a newer version of lnav, please upgrade to ' || '0.12.2' || ' or later')
+ WHERE lnav_version() < '0.12.2' COLLATE naturalcase
# The files loaded into the session were:
@@ -21,7 +21,7 @@
# comments, and tags that were added in the session.
;SELECT total_changes() AS before_mark_changes
-;UPDATE all_logs SET log_mark = 1, log_comment = NULL, log_tags = NULL WHERE log_time_msecs = 1248130769000 AND log_format = 'access_log' AND log_line_hash = 'v1:b05c1bdfe75cde41e151c89087e31951'
+;UPDATE all_logs SET log_mark = 1, log_comment = NULL, log_tags = NULL, log_annotations = NULL WHERE log_time_msecs = 1248130769000 AND log_format = 'access_log' AND log_line_hash = 'v1:b05c1bdfe75cde41e151c89087e31951'
;SELECT 1 - (total_changes() - $before_mark_changes) AS failed_mark_changes
;SELECT echoln(printf('%sERROR%s: failed to restore %d bookmarks',
diff --git a/test/expected/test_sessions.sh_8732dad5481be991ca7f291d9c5451c7b016cea7.out b/test/expected/test_sessions.sh_8732dad5481be991ca7f291d9c5451c7b016cea7.out
deleted file mode 100644
index a1e2e6f..0000000
--- a/test/expected/test_sessions.sh_8732dad5481be991ca7f291d9c5451c7b016cea7.out
+++ /dev/null
@@ -1,33 +0,0 @@
-#!lnav -Nf
-# This file is an export of an lnav session. You can type
-# '|/path/to/this/file' in lnav to execute this file and
-# restore the state of the session.
-
-;SELECT raise_error('This session export was made with a newer version of lnav, please upgrade to ' || '0.11.0' || ' or later')
- WHERE lnav_version() < '0.11.0' COLLATE naturalcase
-
-# The files loaded into the session were:
-
-
-;INSERT OR IGNORE INTO environ (name, value) VALUES ('LOG_DIR_0', '{top_srcdir_parent}')
-:open $LOG_DIR_0/lnav/test/logfile_access_log.0
-
-:rebuild
-
-
-# The following SQL statements will restore the bookmarks,
-# comments, and tags that were added in the session.
-
-;SELECT total_changes() AS before_mark_changes
-;UPDATE all_logs SET log_mark = 1, log_comment = NULL, log_tags = NULL WHERE log_time_msecs = 1248130769000 AND log_format = 'access_log' AND log_line_hash = 'v1:b05c1bdfe75cde41e151c89087e31951'
-
-;SELECT 1 - (total_changes() - $before_mark_changes) AS failed_mark_changes
-;SELECT echoln(printf('%sERROR%s: failed to restore %d bookmarks',
- $ansi_red, $ansi_norm, $failed_mark_changes))
- WHERE $failed_mark_changes != 0
-
-
-# The following commands will restore the state of the LOG view.
-
-:switch-to-view log
-:goto 1
diff --git a/test/expected/test_sessions.sh_9978aaa475513f9981840e612f853a7707ffcf90.out b/test/expected/test_sessions.sh_9978aaa475513f9981840e612f853a7707ffcf90.out
index 3c84ede..20f826b 100644
--- a/test/expected/test_sessions.sh_9978aaa475513f9981840e612f853a7707ffcf90.out
+++ b/test/expected/test_sessions.sh_9978aaa475513f9981840e612f853a7707ffcf90.out
@@ -9,3 +9,4 @@ db
schema
pretty
spectro
+gantt
diff --git a/test/expected/test_sessions.sh_ba1ded92531350668301431db64df2d2f4a2e9ee.err b/test/expected/test_sessions.sh_ba1ded92531350668301431db64df2d2f4a2e9ee.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sessions.sh_ba1ded92531350668301431db64df2d2f4a2e9ee.err
diff --git a/test/expected/test_sessions.sh_ba1ded92531350668301431db64df2d2f4a2e9ee.out b/test/expected/test_sessions.sh_ba1ded92531350668301431db64df2d2f4a2e9ee.out
new file mode 100644
index 0000000..0e301c3
--- /dev/null
+++ b/test/expected/test_sessions.sh_ba1ded92531350668301431db64df2d2f4a2e9ee.out
@@ -0,0 +1,5 @@
+192.168.202.254 - - [20/Jul/2009:22:59:26 +0000] "GET /vmw/cgi/tramp HTTP/1.0" 200 134 "-" "gPXE/0.9.7"
+ ├ org.lnav.test:
+ ╰ Hello, World!
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkboot.gz HTTP/1.0" 404 46210 "-" "gPXE/0.9.7"
+192.168.202.254 - - [20/Jul/2009:22:59:29 +0000] "GET /vmw/vSphere/default/vmkernel.gz HTTP/1.0" 200 78929 "-" "gPXE/0.9.7"
diff --git a/test/expected/test_sessions.sh_e57697be4d81ac8e5b2b2fa84f919b2d494978f3.err b/test/expected/test_sessions.sh_e57697be4d81ac8e5b2b2fa84f919b2d494978f3.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sessions.sh_e57697be4d81ac8e5b2b2fa84f919b2d494978f3.err
diff --git a/test/expected/test_sessions.sh_e57697be4d81ac8e5b2b2fa84f919b2d494978f3.out b/test/expected/test_sessions.sh_e57697be4d81ac8e5b2b2fa84f919b2d494978f3.out
new file mode 100644
index 0000000..2a19a15
--- /dev/null
+++ b/test/expected/test_sessions.sh_e57697be4d81ac8e5b2b2fa84f919b2d494978f3.out
@@ -0,0 +1,11 @@
+2011-11-03 00:20:39.348046 ⋮ 192.168.2.76 52099 192.150.187.43 80 2 GET www.bro-ids.org /frames/header.html http://git.bro-ids.org/ 1.1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1 0 3516 200 OK - - (empty) - - - - - - Fzea5XNhn9eNRMvx7 - text/html
+2011-11-03 00:20:39.448670 ⋮ 192.168.2.76 52109 192.150.187.43 80 1 GET www.bro-ids.org /frames/footer.html http://git.bro-ids.org/ 1.1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1 0 6695 200 OK - - (empty) - - - - - - FkCp6k4tqksK3tiSy7 - text/html
+2011-11-03 00:20:39.463465 ⋮ 192.168.2.76 52099 192.150.187.43 80 3 GET www.bro-ids.org /images/logo-bro-small.png http://www.bro-ids.org/frames/header.html 1.1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1 0 6075 200 OK - - (empty) - - - - - - Fw6FlF4WtotJFNXmHb - image/png
+2011-11-03 00:20:39.786857 ⋮ 192.168.2.76 52110 199.59.148.201 80 1 GET search.twitter.com /search.json?&q=#BroIDS&rpp=2&callback=jsonp1320279639636 http://www.bro-ids.org/frames/footer.html 1.1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1 0 1543 200 OK - - (empty) - - - - - - Feut0t346XEHsQ0OC7 - text/plain
+2011-11-03 00:21:12.372857 ⋮ 192.168.2.76 52111 192.150.187.43 80 1 GET www.bro-ids.org /research/index.html http://www.bro-ids.org/frames/header.html 1.1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1 0 47728 200 OK - - (empty) - - - - - - FOze0l2aT79uPyMiv7 - text/html
+2011-11-03 00:21:13.121725 ⋮ 192.168.2.76 52087 209.85.145.95 80 7 GET ajax.googleapis.com /ajax/services/feed/load?v=1.0&callback=jsonp1320279672539&q=http://blog.bro-ids.org/feeds/posts/default&num=5 http://www.bro-ids.org/research/index.html 1.1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1 0 6584 200 OK - - (empty) - - - - - - FXEXQEMH8DrEuAdg8 - text/plain
+2011-11-03 00:21:13.123842 ⋮ 192.168.2.76 52089 74.125.225.83 80 4 GET www.google.com /uds/css/clear.gif http://www.google.com/uds/api/search/1.0/473bb688d0c0dd605119ad983f5a4386/default+en.css 1.1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1 0 0 304 Not Modified - - (empty) - - - - - - - - -
+2011-11-03 00:21:13.123121 ⋮ 192.168.2.76 52084 74.125.225.83 80 9 GET www.google.com /uds/css/small-logo.png http://www.bro-ids.org/research/index.html 1.1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1 0 0 304 Not Modified - - (empty) - - - - - - - - -
+2011-11-03 00:21:13.198815 ⋮ 192.168.2.76 52112 199.59.148.201 80 1 GET search.twitter.com /search.json?&q=#BroIDS&rpp=2&callback=jsonp1320279672537 http://www.bro-ids.org/research/index.html 1.1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1 0 1543 200 OK - - (empty) - - - - - - Fzjgwn8xXem3Esvk - text/plain
+#close 2017-04-16-21-36-10
+2011-11-03 00:21:13.204466 ⋮ 192.168.2.76 52113 199.59.148.20 80 1 GET api.twitter.com /1/statuses/user_timeline.json?screen_name=Bro_IDS&count=2&include_rts=1&callback=jsonp1320279672538 http://www.bro-ids.org/research/index.html 1.1 Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1 0 6095 200 OK - - (empty) - - - - - - FAVIuu2XZQyVznfnq8 - text/plain
diff --git a/test/expected/test_sessions.sh_e988439404f2e97604641c8d087855f3efe052e4.err b/test/expected/test_sessions.sh_e988439404f2e97604641c8d087855f3efe052e4.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sessions.sh_e988439404f2e97604641c8d087855f3efe052e4.err
diff --git a/test/expected/test_sessions.sh_e39648f425c3f291c9d1c0d14595a019abd0cb48.out b/test/expected/test_sessions.sh_e988439404f2e97604641c8d087855f3efe052e4.out
index 0473e9d..05b7505 100644
--- a/test/expected/test_sessions.sh_e39648f425c3f291c9d1c0d14595a019abd0cb48.out
+++ b/test/expected/test_sessions.sh_e988439404f2e97604641c8d087855f3efe052e4.out
@@ -3,12 +3,13 @@
# '|/path/to/this/file' in lnav to execute this file and
# restore the state of the session.
-;SELECT raise_error('This session export was made with a newer version of lnav, please upgrade to ' || '0.11.0' || ' or later')
- WHERE lnav_version() < '0.11.0' COLLATE naturalcase
+;SELECT raise_error('This session export was made with a newer version of lnav, please upgrade to ' || '0.12.2' || ' or later')
+ WHERE lnav_version() < '0.12.2' COLLATE naturalcase
# The files loaded into the session were:
+# Set this environment variable to override this value or edit this script.
;INSERT OR IGNORE INTO environ (name, value) VALUES ('LOG_DIR_0', '{test_dir}')
:open $LOG_DIR_0/support-dump/logfile_access_log.0
@@ -19,7 +20,7 @@
# comments, and tags that were added in the session.
;SELECT total_changes() AS before_mark_changes
-;UPDATE all_logs SET log_mark = 1, log_comment = NULL, log_tags = NULL WHERE log_time_msecs = 1248130769000 AND log_format = 'access_log' AND log_line_hash = 'v1:b05c1bdfe75cde41e151c89087e31951'
+;UPDATE all_logs SET log_mark = 0, log_comment = NULL, log_tags = NULL, log_annotations = '{"org.lnav.test":"Hello, <span style=\"color: #f00\">World</span>!\n"}' WHERE log_time_msecs = 1248130766000 AND log_format = 'access_log' AND log_line_hash = 'v1:3f7e0f10f2473f83b2b4eacccfc9b4e2'
;SELECT 1 - (total_changes() - $before_mark_changes) AS failed_mark_changes
;SELECT echoln(printf('%sERROR%s: failed to restore %d bookmarks',
@@ -27,7 +28,13 @@
WHERE $failed_mark_changes != 0
+# The following SQL statements will restore the filters that
+# were added in the session.
+
+;REPLACE INTO lnav_view_filters (view_name, enabled, type, language, pattern) VALUES ('log', 0, 'in', 'regex', 'credential status')
+
+
# The following commands will restore the state of the LOG view.
:switch-to-view log
-:goto 1
+:goto 0
diff --git a/test/expected/test_shlexer.sh_14dd967cb2af90899c9e5e45d00b676b5a3163aa.out b/test/expected/test_shlexer.sh_14dd967cb2af90899c9e5e45d00b676b5a3163aa.out
index fd072bc..0dd4080 100644
--- a/test/expected/test_shlexer.sh_14dd967cb2af90899c9e5e45d00b676b5a3163aa.out
+++ b/test/expected/test_shlexer.sh_14dd967cb2af90899c9e5e45d00b676b5a3163aa.out
@@ -1,7 +1,8 @@
~ foo
til ^
wsp ^
+eof ^
eval -- ../test foo
split:
- 0 -- ../test
- 1 -- foo
+ 0 ^ -- ../test
+ 1 ^-^ -- foo
diff --git a/test/expected/test_shlexer.sh_2781f5dd570580cbe746ad91b58a28b8371283b3.out b/test/expected/test_shlexer.sh_2781f5dd570580cbe746ad91b58a28b8371283b3.out
index b7ba9e8..2081fa3 100644
--- a/test/expected/test_shlexer.sh_2781f5dd570580cbe746ad91b58a28b8371283b3.out
+++ b/test/expected/test_shlexer.sh_2781f5dd570580cbe746ad91b58a28b8371283b3.out
@@ -1,7 +1,8 @@
~nonexistent/bar baz
til ^----------^
wsp ^
+eof ^
eval -- ~nonexistent/bar baz
split:
- 0 -- ~nonexistent/bar
- 1 -- baz
+ 0 ^--------------^ -- ~nonexistent/bar
+ 1 ^-^ -- baz
diff --git a/test/expected/test_shlexer.sh_2af44d06fc137a77bc230be86376ccad23a2806b.out b/test/expected/test_shlexer.sh_2af44d06fc137a77bc230be86376ccad23a2806b.out
index 85cca78..8d6bcc0 100644
--- a/test/expected/test_shlexer.sh_2af44d06fc137a77bc230be86376ccad23a2806b.out
+++ b/test/expected/test_shlexer.sh_2af44d06fc137a77bc230be86376ccad23a2806b.out
@@ -1,2 +1,2 @@
\
-err ^
+err ^ -- invalid escape
diff --git a/test/expected/test_shlexer.sh_6858e530a8ecb77cbaec1a7507768dd5a1942ac9.out b/test/expected/test_shlexer.sh_6858e530a8ecb77cbaec1a7507768dd5a1942ac9.out
index f677b17..6869e6d 100644
--- a/test/expected/test_shlexer.sh_6858e530a8ecb77cbaec1a7507768dd5a1942ac9.out
+++ b/test/expected/test_shlexer.sh_6858e530a8ecb77cbaec1a7507768dd5a1942ac9.out
@@ -1,5 +1,6 @@
${FOO}
qrf ^----^
+eof ^
eval -- bar
split:
- 0 -- bar
+ 0 ^----^ -- bar
diff --git a/test/expected/test_shlexer.sh_7f31e16ea2469da7a4328c93c7bcc8e109f84d2f.out b/test/expected/test_shlexer.sh_7f31e16ea2469da7a4328c93c7bcc8e109f84d2f.out
index 630eb1c..46009ec 100644
--- a/test/expected/test_shlexer.sh_7f31e16ea2469da7a4328c93c7bcc8e109f84d2f.out
+++ b/test/expected/test_shlexer.sh_7f31e16ea2469da7a4328c93c7bcc8e109f84d2f.out
@@ -2,6 +2,7 @@
dst ^
qrf ^----^
den ^
+eof ^
eval -- "abc xyz 123"
split:
- 0 -- abc xyz 123
+ 0 ^--------------^ -- abc xyz 123
diff --git a/test/expected/test_shlexer.sh_8aeebcdef56edd783579eaaddaff7c5cc127bb86.out b/test/expected/test_shlexer.sh_8aeebcdef56edd783579eaaddaff7c5cc127bb86.out
index 759e75b..5eda1e5 100644
--- a/test/expected/test_shlexer.sh_8aeebcdef56edd783579eaaddaff7c5cc127bb86.out
+++ b/test/expected/test_shlexer.sh_8aeebcdef56edd783579eaaddaff7c5cc127bb86.out
@@ -1,6 +1,7 @@
'abc $DEF 123'
sst ^
sen ^
+eof ^
eval -- 'abc $DEF 123'
split:
- 0 -- abc $DEF 123
+ 0 ^------------^ -- abc $DEF 123
diff --git a/test/expected/test_shlexer.sh_8e9addb0e5b6f4254d81dd89ecf12783109644bb.out b/test/expected/test_shlexer.sh_8e9addb0e5b6f4254d81dd89ecf12783109644bb.out
index 2cbee1a..6ea7ec2 100644
--- a/test/expected/test_shlexer.sh_8e9addb0e5b6f4254d81dd89ecf12783109644bb.out
+++ b/test/expected/test_shlexer.sh_8e9addb0e5b6f4254d81dd89ecf12783109644bb.out
@@ -2,6 +2,7 @@
dst ^
ref ^--^
den ^
+eof ^
eval -- "abc xyz 123"
split:
- 0 -- abc xyz 123
+ 0 ^------------^ -- abc xyz 123
diff --git a/test/expected/test_shlexer.sh_90961e6728e96d0a44535a6c9907cc990c10316c.out b/test/expected/test_shlexer.sh_90961e6728e96d0a44535a6c9907cc990c10316c.out
index 9a2b2a7..1fc686b 100644
--- a/test/expected/test_shlexer.sh_90961e6728e96d0a44535a6c9907cc990c10316c.out
+++ b/test/expected/test_shlexer.sh_90961e6728e96d0a44535a6c9907cc990c10316c.out
@@ -1,6 +1,7 @@
"def"
dst ^
den ^
+eof ^
eval -- "def"
split:
- 0 -- def
+ 0 ^---^ -- def
diff --git a/test/expected/test_shlexer.sh_95c4e861804a5434900fdb4d67b149d1baa2edf4.out b/test/expected/test_shlexer.sh_95c4e861804a5434900fdb4d67b149d1baa2edf4.out
index 30a7791..465073b 100644
--- a/test/expected/test_shlexer.sh_95c4e861804a5434900fdb4d67b149d1baa2edf4.out
+++ b/test/expected/test_shlexer.sh_95c4e861804a5434900fdb4d67b149d1baa2edf4.out
@@ -1,5 +1,6 @@
$FOO
ref ^--^
+eof ^
eval -- bar
split:
- 0 -- bar
+ 0 ^--^ -- bar
diff --git a/test/expected/test_shlexer.sh_d7fe5f6b8fc9ba00539fad0fa0bfb08319d8b04b.out b/test/expected/test_shlexer.sh_d7fe5f6b8fc9ba00539fad0fa0bfb08319d8b04b.out
index a2ae7ff..8feba4e 100644
--- a/test/expected/test_shlexer.sh_d7fe5f6b8fc9ba00539fad0fa0bfb08319d8b04b.out
+++ b/test/expected/test_shlexer.sh_d7fe5f6b8fc9ba00539fad0fa0bfb08319d8b04b.out
@@ -1,6 +1,7 @@
'abc'
sst ^
sen ^
+eof ^
eval -- 'abc'
split:
- 0 -- abc
+ 0 ^---^ -- abc
diff --git a/test/expected/test_shlexer.sh_d9d46422a913e3a06ddbd262933ef5352c30e68f.out b/test/expected/test_shlexer.sh_d9d46422a913e3a06ddbd262933ef5352c30e68f.out
index def9d5c..5f35534 100644
--- a/test/expected/test_shlexer.sh_d9d46422a913e3a06ddbd262933ef5352c30e68f.out
+++ b/test/expected/test_shlexer.sh_d9d46422a913e3a06ddbd262933ef5352c30e68f.out
@@ -2,8 +2,9 @@
wsp ^
ref ^--^
wsp ^^
+eof ^
eval -- abc xyz 123
split:
- 0 -- abc
- 1 -- xyz
- 2 -- 123
+ 0 ^-^ -- abc
+ 1 ^--^ -- xyz
+ 2 ^-^ -- 123
diff --git a/test/expected/test_shlexer.sh_e0599f0b53d1bd27af767113853f8e84291f137d.out b/test/expected/test_shlexer.sh_e0599f0b53d1bd27af767113853f8e84291f137d.out
index 9b84999..eece1b6 100644
--- a/test/expected/test_shlexer.sh_e0599f0b53d1bd27af767113853f8e84291f137d.out
+++ b/test/expected/test_shlexer.sh_e0599f0b53d1bd27af767113853f8e84291f137d.out
@@ -1,6 +1,7 @@
'"'
sst ^
sen ^
+eof ^
eval -- '"'
split:
- 0 -- "
+ 0 ^-^ -- "
diff --git a/test/expected/test_shlexer.sh_e8fa2239ab17e7563d0c524f5400a79d6ff8bfda.out b/test/expected/test_shlexer.sh_e8fa2239ab17e7563d0c524f5400a79d6ff8bfda.out
index a668d4d..41a0f64 100644
--- a/test/expected/test_shlexer.sh_e8fa2239ab17e7563d0c524f5400a79d6ff8bfda.out
+++ b/test/expected/test_shlexer.sh_e8fa2239ab17e7563d0c524f5400a79d6ff8bfda.out
@@ -1,6 +1,7 @@
"'"
dst ^
den ^
+eof ^
eval -- "'"
split:
- 0 -- '
+ 0 ^-^ -- '
diff --git a/test/expected/test_shlexer.sh_e99fe1cde36b85ebbab86ca820f55ec861cdc20b.err b/test/expected/test_shlexer.sh_e99fe1cde36b85ebbab86ca820f55ec861cdc20b.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_shlexer.sh_e99fe1cde36b85ebbab86ca820f55ec861cdc20b.err
diff --git a/test/expected/test_shlexer.sh_e99fe1cde36b85ebbab86ca820f55ec861cdc20b.out b/test/expected/test_shlexer.sh_e99fe1cde36b85ebbab86ca820f55ec861cdc20b.out
new file mode 100644
index 0000000..9a7083d
--- /dev/null
+++ b/test/expected/test_shlexer.sh_e99fe1cde36b85ebbab86ca820f55ec861cdc20b.out
@@ -0,0 +1,6 @@
+ abc
+wsp ^
+eof ^
+eval -- abc
+split:
+ 0 ^-^ -- abc
diff --git a/test/expected/test_sql.sh_09416e332d9b2f76743836b72e71b6e4492e594e.err b/test/expected/test_sql.sh_09416e332d9b2f76743836b72e71b6e4492e594e.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_09416e332d9b2f76743836b72e71b6e4492e594e.err
diff --git a/test/expected/test_sql.sh_09416e332d9b2f76743836b72e71b6e4492e594e.out b/test/expected/test_sql.sh_09416e332d9b2f76743836b72e71b6e4492e594e.out
new file mode 100644
index 0000000..4b7bf9a
--- /dev/null
+++ b/test/expected/test_sql.sh_09416e332d9b2f76743836b72e71b6e4492e594e.out
@@ -0,0 +1,3 @@
+group_concat(cs_uri_stem),sc_status
+"/vmw/cgi/tramp,/vmw/vSphere/default/vmkernel.gz",200
+/vmw/vSphere/default/vmkboot.gz,404
diff --git a/test/expected/test_sql.sh_0a5d13b62da4cb66a59a51b0240b5fe0b6036b7e.out b/test/expected/test_sql.sh_0a5d13b62da4cb66a59a51b0240b5fe0b6036b7e.out
index 386f1e3..332a12e 100644
--- a/test/expected/test_sql.sh_0a5d13b62da4cb66a59a51b0240b5fe0b6036b7e.out
+++ b/test/expected/test_sql.sh_0a5d13b62da4cb66a59a51b0240b5fe0b6036b7e.out
@@ -1,2 +1,2 @@
- lnav_top_file() 
+ lnav_top_file()  
{test_dir}/logfile_access_log.0
diff --git a/test/expected/test_sql.sh_13429aed81d7edfd47b57e9cdb8a25c43aff35c4.out b/test/expected/test_sql.sh_13429aed81d7edfd47b57e9cdb8a25c43aff35c4.out
index 4acb940..a8b3bc8 100644
--- a/test/expected/test_sql.sh_13429aed81d7edfd47b57e9cdb8a25c43aff35c4.out
+++ b/test/expected/test_sql.sh_13429aed81d7edfd47b57e9cdb8a25c43aff35c4.out
@@ -1,2 +1,2 @@
-log_line log_part  log_time log_idle_msecs log_level log_mark log_comment log_tags log_filters  c_ip cs_bytes cs_method cs_uri_query  cs_uri_stem cs_username cs_vars cs_version s_app s_core s_pid s_req s_runtime s_switches s_worker_reqs sc_bytes sc_header_bytes sc_headers sc_status 
- 0  <NULL> 2016-03-13 22:49:12.000  0 info   0  <NULL>  <NULL>  <NULL> 127.0.0.1  696 POST   <NULL> /update_metrics     38 HTTP/1.1  0   3  88185  1  0.129  1  1  47  378  9    200 
+log_line  log_time  log_level  c_ip   cs_bytes  cs_method cs_uri_query  cs_uri_stem  cs_username  cs_vars  cs_version s_app s_core s_pid s_req s_runtime  s_switches s_worker_reqs  sc_bytes  sc_header_bytes sc_headers sc_status log_part log_idle_msecs log_mark log_comment log_tags log_annotations log_filters 
+ 0 2016-03-13 22:49:12.000 info 127.0.0.1  696 POST <NULL> /update_metrics  38 HTTP/1.1 0 3 88185 1  0.129  1 1  47  378  9 200 <NULL>  0 0 <NULL> <NULL> <NULL> <NULL>
diff --git a/test/expected/test_sql.sh_19c92996bcc884bfdb70e3d24606cf5070556a74.err b/test/expected/test_sql.sh_19c92996bcc884bfdb70e3d24606cf5070556a74.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_19c92996bcc884bfdb70e3d24606cf5070556a74.err
diff --git a/test/expected/test_sql.sh_19c92996bcc884bfdb70e3d24606cf5070556a74.out b/test/expected/test_sql.sh_19c92996bcc884bfdb70e3d24606cf5070556a74.out
new file mode 100644
index 0000000..b3c6c23
--- /dev/null
+++ b/test/expected/test_sql.sh_19c92996bcc884bfdb70e3d24606cf5070556a74.out
@@ -0,0 +1,46 @@
+[
+ {
+ "log_line": 0,
+ "log_time": "2014-06-15 01:04:52.000",
+ "log_level": "info",
+ "contextid": "82e87195d704585501",
+ "data": "http://localhost:8086|/|<samlp:Response xmlns:samlp=\"urn:oasis:names:tc:SAML:2.0:protocol\" ID=\"s2daac0735bf476f4560aab81104b623bedfb0cbc0\" InResponseTo=\"84cbf2be33f6410bbe55877545a93f02\" Version=\"2.0\" IssueInstant=\"2014-06-15T01:04:52Z\" Destination=\"http://localhost:8086/api/1/rest/admin/org/530e42ccd6f45fd16d0d0717/saml/consume\"><saml:Issuer xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\">http://openam.vagrant.dev/openam</saml:Issuer><samlp:Status xmlns:samlp=\"urn:oasis:names:tc:SAML:2.0:protocol\">\\n<samlp:StatusCode xmlns:samlp=\"urn:oasis:names:tc:SAML:2.0:protocol\"\\nValue=\"urn:oasis:names:tc:SAML:2.0:status:Success\">\\n</samlp:StatusCode>\\n</samlp:Status><saml:Assertion xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\" ID=\"s2a0bee0da937e236167e99b209802056033816ac2\" IssueInstant=\"2014-06-15T01:04:52Z\" Version=\"2.0\">\\n<saml:Issuer>http://openam.vagrant.dev/openam</saml:Issuer><ds:Signature xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\">\\n<ds:SignedInfo>\\n<ds:CanonicalizationMethod Algorithm=\"http://www.w3.org/2001/10/xml-exc-c14n#\"/>\\n<ds:SignatureMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#rsa-sha1\"/>\\n<ds:Reference URI=\"#s2a0bee0da937e236167e99b209802056033816ac2\">\\n<ds:Transforms>\\n<ds:Transform Algorithm=\"http://www.w3.org/2000/09/xmldsig#enveloped-signature\"/>\\n<ds:Transform Algorithm=\"http://www.w3.org/2001/10/xml-exc-c14n#\"/>\\n</ds:Transforms>\\n<ds:DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\"/>\\n<ds:DigestValue>4uSmVzjovUdQd3px/RcnoxQBsqE=</ds:DigestValue>\\n</ds:Reference>\\n</ds:SignedInfo>\\n<ds:SignatureValue>\\nhm/grge36uA6j1OWif2bTcvVTwESjmuJa27NxepW0AiV5YlcsHDl7RAIk6k/CjsSero3bxGbm56m\\nYncOEi9F1Tu7dS0bfx+vhm/kKTPgwZctf4GWn4qQwP+KeoZywbNj9ShsYJ+zPKzXwN4xBSuPjMxP\\nNf5szzjEWpOndQO/uDs=\\n</ds:SignatureValue>\\n<ds:KeyInfo>\\n<ds:X509Data>\\n<ds:X509Certificate>\\nMIICQDCCAakCBEeNB0swDQYJKoZIhvcNAQEEBQAwZzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNh\\nbGlmb3JuaWExFDASBgNVBAcTC1NhbnRhIENsYXJhMQwwCgYDVQQKEwNTdW4xEDAOBgNVBAsTB09w\\nZW5TU08xDTALBgNVBAMTBHRlc3QwHhcNMDgwMTE1MTkxOTM5WhcNMTgwMTEyMTkxOTM5WjBnMQsw\\nCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEUMBIGA1UEBxMLU2FudGEgQ2xhcmExDDAK\\nBgNVBAoTA1N1bjEQMA4GA1UECxMHT3BlblNTTzENMAsGA1UEAxMEdGVzdDCBnzANBgkqhkiG9w0B\\nAQEFAAOBjQAwgYkCgYEArSQc/U75GB2AtKhbGS5piiLkmJzqEsp64rDxbMJ+xDrye0EN/q1U5Of+\\nRkDsaN/igkAvV1cuXEgTL6RlafFPcUX7QxDhZBhsYF9pbwtMzi4A4su9hnxIhURebGEmxKW9qJNY\\nJs0Vo5+IgjxuEWnjnnVgHTs1+mq5QYTA7E6ZyL8CAwEAATANBgkqhkiG9w0BAQQFAAOBgQB3Pw/U\\nQzPKTPTYi9upbFXlrAKMwtFf2OW4yvGWWvlcwcNSZJmTJ8ARvVYOMEVNbsT4OFcfu2/PeYoAdiDA\\ncGy/F2Zuj8XJJpuQRSE6PtQqBuDEHjjmOQJ0rV/r8mO1ZCtHRhpZ5zYRjhRC9eCbjx9VrFax0JDC\\n/FfwWigmrW0Y0Q==\\n</ds:X509Certificate>\\n</ds:X509Data>\\n</ds:KeyInfo>\\n</ds:Signature><saml:Subject>\\n<saml:NameID Format=\"urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress\" NameQualifier=\"http://openam.vagrant.dev/openam\">user@example.com</saml:NameID><saml:SubjectConfirmation Method=\"urn:oasis:names:tc:SAML:2.0:cm:bearer\">\\n<saml:SubjectConfirmationData InResponseTo=\"84cbf2be33f6410bbe55877545a93f02\" NotOnOrAfter=\"2014-06-15T01:14:52Z\" Recipient=\"http://localhost:8086/api/1/rest/admin/org/530e42ccd6f45fd16d0d0717/saml/consume\"/></saml:SubjectConfirmation>\\n</saml:Subject><saml:Conditions NotBefore=\"2014-06-15T00:54:52Z\" NotOnOrAfter=\"2014-06-15T01:14:52Z\">\\n<saml:AudienceRestriction>\\n<saml:Audience>http://localhost:8086</saml:Audience>\\n</saml:AudienceRestriction>\\n</saml:Conditions>\\n<saml:AuthnStatement AuthnInstant=\"2014-06-15T01:00:25Z\" SessionIndex=\"s2f9b4d4b453d12b40ef3905cc959cdb40579c2301\"><saml:AuthnContext><saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</saml:AuthnContextClassRef></saml:AuthnContext></saml:AuthnStatement></saml:Assertion></samlp:Response>",
+ "domain": "dc=openam",
+ "hostname": "192.168.33.1\t",
+ "ipaddr": "Not Available",
+ "loggedby": "cn=dsameuser,ou=DSAME Users,dc=openam",
+ "loginid": "id=openamuser,ou=user,dc=openam",
+ "messageid": "SAML2-37",
+ "modulename": "SAML2.access",
+ "nameid": "user@example.com",
+ "log_part": null,
+ "log_idle_msecs": 0,
+ "log_mark": 0,
+ "log_comment": null,
+ "log_tags": null,
+ "log_annotations": null,
+ "log_filters": null
+ },
+ {
+ "log_line": 1,
+ "log_time": "2014-06-15 01:04:52.000",
+ "log_level": "trace",
+ "contextid": "ec5708a7f199678a01",
+ "data": "vagrant|/",
+ "domain": "dc=openam",
+ "hostname": "127.0.1.1\t",
+ "ipaddr": "Not Available",
+ "loggedby": "cn=dsameuser,ou=DSAME Users,dc=openam",
+ "loginid": "cn=dsameuser,ou=DSAME Users,dc=openam",
+ "messageid": "COT-22",
+ "modulename": "COT.access",
+ "nameid": "Not Available",
+ "log_part": null,
+ "log_idle_msecs": 0,
+ "log_mark": 0,
+ "log_comment": null,
+ "log_tags": null,
+ "log_annotations": null,
+ "log_filters": null
+ }
+]
diff --git a/test/expected/test_sql.sh_1cbb81cfe40ee16332c5c775a74d06b945aa65c2.out b/test/expected/test_sql.sh_1cbb81cfe40ee16332c5c775a74d06b945aa65c2.out
index df0e6d7..391a786 100644
--- a/test/expected/test_sql.sh_1cbb81cfe40ee16332c5c775a74d06b945aa65c2.out
+++ b/test/expected/test_sql.sh_1cbb81cfe40ee16332c5c775a74d06b945aa65c2.out
@@ -1,3 +1,3 @@
-id first_name last_name age 
- 0 Phil  Myman   30 
- 1 Lem  Hewitt   35
+id first_name last_name  age  
+ 0 Phil Myman   30
+ 1 Lem Hewitt  35
diff --git a/test/expected/test_sql.sh_1f892b85dc9008c7b3bab7fdf8aa372a6d5ae22c.err b/test/expected/test_sql.sh_1f892b85dc9008c7b3bab7fdf8aa372a6d5ae22c.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_1f892b85dc9008c7b3bab7fdf8aa372a6d5ae22c.err
diff --git a/test/expected/test_sql.sh_1f892b85dc9008c7b3bab7fdf8aa372a6d5ae22c.out b/test/expected/test_sql.sh_1f892b85dc9008c7b3bab7fdf8aa372a6d5ae22c.out
new file mode 100644
index 0000000..2c56abe
--- /dev/null
+++ b/test/expected/test_sql.sh_1f892b85dc9008c7b3bab7fdf8aa372a6d5ae22c.out
@@ -0,0 +1,23 @@
+[
+ {
+ "cs_headers": {
+ "User-Agent": "Mozilla/5.0 (Linux; Android 4.4.4; SM-G900V Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.59 Mobile Safari/537.36",
+ "Referer": "http://example.com/Search/SearchResults.pg?informationRecipient.languageCode.c=en",
+ "Host": "xzy.example.com"
+ }
+ },
+ {
+ "cs_headers": {
+ "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36",
+ "Referer": null,
+ "Host": "example.hello.com"
+ }
+ },
+ {
+ "cs_headers": {
+ "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36",
+ "Referer": null,
+ "Host": "hello.example.com"
+ }
+ }
+]
diff --git a/test/expected/test_sql.sh_26ace94793c68c44801e1ec496e7ab6a02304ce3.err b/test/expected/test_sql.sh_26ace94793c68c44801e1ec496e7ab6a02304ce3.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_26ace94793c68c44801e1ec496e7ab6a02304ce3.err
diff --git a/test/expected/test_sql.sh_26ace94793c68c44801e1ec496e7ab6a02304ce3.out b/test/expected/test_sql.sh_26ace94793c68c44801e1ec496e7ab6a02304ce3.out
new file mode 100644
index 0000000..85a077d
--- /dev/null
+++ b/test/expected/test_sql.sh_26ace94793c68c44801e1ec496e7ab6a02304ce3.out
@@ -0,0 +1,2 @@
+name,content,length(content)
+logfile_empty.0,,0
diff --git a/test/expected/test_sql.sh_2a16a6fd0ff235a7877e1ea93b22d873a3609402.err b/test/expected/test_sql.sh_2a16a6fd0ff235a7877e1ea93b22d873a3609402.err
index bc74c2d..782fe5e 100644
--- a/test/expected/test_sql.sh_2a16a6fd0ff235a7877e1ea93b22d873a3609402.err
+++ b/test/expected/test_sql.sh_2a16a6fd0ff235a7877e1ea93b22d873a3609402.err
@@ -1,4 +1,3 @@
-✘ error: call to raise_error(msg) failed
- reason: oops!
+✘ error: oops!
 --> command-option:1
 | ;SELECT raise_error('oops!') 
diff --git a/test/expected/test_sql.sh_2c60ed41369d667d1e2a563d54f8edf84682e526.err b/test/expected/test_sql.sh_2c60ed41369d667d1e2a563d54f8edf84682e526.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_2c60ed41369d667d1e2a563d54f8edf84682e526.err
diff --git a/test/expected/test_sql.sh_2c60ed41369d667d1e2a563d54f8edf84682e526.out b/test/expected/test_sql.sh_2c60ed41369d667d1e2a563d54f8edf84682e526.out
new file mode 100644
index 0000000..29ea19f
--- /dev/null
+++ b/test/expected/test_sql.sh_2c60ed41369d667d1e2a563d54f8edf84682e526.out
@@ -0,0 +1,2 @@
+log_top_line() log_msg_line() 
+ 1 0
diff --git a/test/expected/test_sql.sh_2ed3f3b18ef4ecc68e4dd3cc8041b61fcf2a59af.err b/test/expected/test_sql.sh_2ed3f3b18ef4ecc68e4dd3cc8041b61fcf2a59af.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_2ed3f3b18ef4ecc68e4dd3cc8041b61fcf2a59af.err
diff --git a/test/expected/test_sql.sh_2ed3f3b18ef4ecc68e4dd3cc8041b61fcf2a59af.out b/test/expected/test_sql.sh_2ed3f3b18ef4ecc68e4dd3cc8041b61fcf2a59af.out
new file mode 100644
index 0000000..90d743c
--- /dev/null
+++ b/test/expected/test_sql.sh_2ed3f3b18ef4ecc68e4dd3cc8041b61fcf2a59af.out
@@ -0,0 +1,5 @@
+log_line,log_time,log_level,log_hostname,log_msgid,log_pid,log_pri,log_procname,log_struct,log_syslog_tag,syslog_version,log_part,log_idle_msecs,log_mark,log_comment,log_tags,log_annotations,log_filters
+0,2007-11-03 09:23:38.000,error,veridian,<NULL>,7998,<NULL>,automount,<NULL>,automount[7998],<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>
+1,2007-11-03 09:23:38.000,info,veridian,<NULL>,16442,<NULL>,automount,<NULL>,automount[16442],<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>
+2,2007-11-03 09:23:38.000,error,veridian,<NULL>,7999,<NULL>,automount,<NULL>,automount[7999],<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>
+3,2007-11-03 09:47:02.000,info,veridian,<NULL>,<NULL>,<NULL>,sudo,<NULL>,sudo,<NULL>,<NULL>,1404000,0,<NULL>,<NULL>,<NULL>,<NULL>
diff --git a/test/expected/test_sql.sh_2f15b8a38673ac4db45dc6ed2eafe609c332575b.out b/test/expected/test_sql.sh_2f15b8a38673ac4db45dc6ed2eafe609c332575b.out
index df0e6d7..391a786 100644
--- a/test/expected/test_sql.sh_2f15b8a38673ac4db45dc6ed2eafe609c332575b.out
+++ b/test/expected/test_sql.sh_2f15b8a38673ac4db45dc6ed2eafe609c332575b.out
@@ -1,3 +1,3 @@
-id first_name last_name age 
- 0 Phil  Myman   30 
- 1 Lem  Hewitt   35
+id first_name last_name  age  
+ 0 Phil Myman   30
+ 1 Lem Hewitt  35
diff --git a/test/expected/test_sql.sh_31df37f254255115611fc321b63374a2fa4a1cd5.out b/test/expected/test_sql.sh_31df37f254255115611fc321b63374a2fa4a1cd5.out
index 5118721..2f3d6d4 100644
--- a/test/expected/test_sql.sh_31df37f254255115611fc321b63374a2fa4a1cd5.out
+++ b/test/expected/test_sql.sh_31df37f254255115611fc321b63374a2fa4a1cd5.out
@@ -1,2 +1,2 @@
- replicate('foobar', 120) 
+ replicate('foobar', 120)  
foobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobar⋯oobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobarfoobar
diff --git a/test/expected/test_sql.sh_3445b783808f174b76f55dc6b998f721a1aae271.err b/test/expected/test_sql.sh_3445b783808f174b76f55dc6b998f721a1aae271.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_3445b783808f174b76f55dc6b998f721a1aae271.err
diff --git a/test/expected/test_sql.sh_3445b783808f174b76f55dc6b998f721a1aae271.out b/test/expected/test_sql.sh_3445b783808f174b76f55dc6b998f721a1aae271.out
new file mode 100644
index 0000000..79125db
--- /dev/null
+++ b/test/expected/test_sql.sh_3445b783808f174b76f55dc6b998f721a1aae271.out
@@ -0,0 +1,83 @@
+log_line,log_part,log_body
+0,<NULL>,restart.
+1,<NULL>,Invalid query packet.
+2,<NULL>,DHCPREQUEST on eth0 to 10.1.10.1 port 67 (xid=0x654a04aa)
+3,<NULL>,DHCPNAK from 10.1.10.1 (xid=0x654a04aa)
+4,<NULL>,/sbin/dhclient-script : updated /etc/resolv.conf
+5,<NULL>,Withdrawing address record for 10.1.10.49 on eth0.
+6,<NULL>,Leaving mDNS multicast group on interface eth0.IPv4 with address 10.1.10.49.
+7,<NULL>,iface.c: interface_mdns_mcast_join() called but no local address available.
+8,<NULL>,Interface eth0.IPv4 no longer relevant for mDNS.
+9,<NULL>,DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 5 (xid=0x4e17f141)
+10,<NULL>,DHCPOFFER from 10.1.10.1
+11,<NULL>,DHCPREQUEST on eth0 to 255.255.255.255 port 67 (xid=0x4e17f141)
+12,<NULL>,DHCPACK from 10.1.10.1 (xid=0x4e17f141)
+13,<NULL>,New relevant interface eth0.IPv4 for mDNS.
+14,<NULL>,Joining mDNS multicast group on interface eth0.IPv4 with address 10.1.10.103.
+15,<NULL>,Registering new address record for 10.1.10.103 on eth0.
+16,<NULL>,Withdrawing address record for 10.1.10.103 on eth0.
+17,<NULL>,Leaving mDNS multicast group on interface eth0.IPv4 with address 10.1.10.103.
+18,<NULL>,iface.c: interface_mdns_mcast_join() called but no local address available.
+19,<NULL>,Interface eth0.IPv4 no longer relevant for mDNS.
+20,<NULL>,New relevant interface eth0.IPv4 for mDNS.
+21,<NULL>,Joining mDNS multicast group on interface eth0.IPv4 with address 10.1.10.103.
+22,<NULL>,Registering new address record for 10.1.10.103 on eth0.
+23,<NULL>,/sbin/dhclient-script : updated /etc/resolv.conf
+24,10.1.10.103,bound to 10.1.10.103 -- renewal in 54694 seconds.
+25,10.1.10.103,Invalid query packet.
+26,10.1.10.103,Invalid query packet.
+27,10.1.10.103,DHCPREQUEST on eth0 to 10.1.10.1 port 67 (xid=0x4e17f141)
+28,10.1.10.103,DHCPACK from 10.1.10.1 (xid=0x4e17f141)
+29,10.1.10.103,bound to 10.1.10.103 -- renewal in 8787 seconds.
+30,10.1.10.103,Invalid query packet.
+31,10.1.10.103,DHCPREQUEST on eth0 to 10.1.10.1 port 67 (xid=0x4e17f141)
+32,10.1.10.103,DHCPACK from 10.1.10.1 (xid=0x4e17f141)
+33,10.1.10.103,bound to 10.1.10.103 -- renewal in 9938 seconds.
+34,10.1.10.103,Invalid query packet.
+35,10.1.10.103,DHCPREQUEST on eth0 to 10.1.10.1 port 67 (xid=0x4e17f141)
+36,10.1.10.103,DHCPACK from 10.1.10.1 (xid=0x4e17f141)
+37,10.1.10.103,bound to 10.1.10.103 -- renewal in 2656 seconds.
+38,10.1.10.103,Invalid query packet.
+39,10.1.10.103,DHCPREQUEST on eth0 to 10.1.10.1 port 67 (xid=0x4e17f141)
+40,10.1.10.103,DHCPACK from 10.1.10.1 (xid=0x4e17f141)
+41,10.1.10.103,bound to 10.1.10.103 -- renewal in 15112 seconds.
+42,10.1.10.103,Invalid query packet.
+43,10.1.10.103,Invalid query packet.
+44,10.1.10.103,Invalid query packet.
+45,10.1.10.103,DHCPREQUEST on eth0 to 10.1.10.1 port 67 (xid=0x4e17f141)
+46,10.1.10.103,DHCPNAK from 10.1.10.1 (xid=0x4e17f141)
+47,10.1.10.103,/sbin/dhclient-script : updated /etc/resolv.conf
+48,10.1.10.103,Withdrawing address record for 10.1.10.103 on eth0.
+49,10.1.10.103,Leaving mDNS multicast group on interface eth0.IPv4 with address 10.1.10.103.
+50,10.1.10.103,iface.c: interface_mdns_mcast_join() called but no local address available.
+51,10.1.10.103,Interface eth0.IPv4 no longer relevant for mDNS.
+52,10.1.10.103,DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 5 (xid=0xd16b79d)
+53,10.1.10.103,DHCPOFFER from 10.1.10.1
+54,10.1.10.103,DHCPREQUEST on eth0 to 255.255.255.255 port 67 (xid=0xd16b79d)
+55,10.1.10.103,DHCPACK from 10.1.10.1 (xid=0xd16b79d)
+56,10.1.10.103,New relevant interface eth0.IPv4 for mDNS.
+57,10.1.10.103,Joining mDNS multicast group on interface eth0.IPv4 with address 10.1.10.62.
+58,10.1.10.103,Registering new address record for 10.1.10.62 on eth0.
+59,10.1.10.103,Withdrawing address record for 10.1.10.62 on eth0.
+60,10.1.10.103,Leaving mDNS multicast group on interface eth0.IPv4 with address 10.1.10.62.
+61,10.1.10.103,iface.c: interface_mdns_mcast_join() called but no local address available.
+62,10.1.10.103,Interface eth0.IPv4 no longer relevant for mDNS.
+63,10.1.10.103,New relevant interface eth0.IPv4 for mDNS.
+64,10.1.10.103,Joining mDNS multicast group on interface eth0.IPv4 with address 10.1.10.62.
+65,10.1.10.103,Registering new address record for 10.1.10.62 on eth0.
+66,10.1.10.103,/sbin/dhclient-script : updated /etc/resolv.conf
+67,10.1.10.62,bound to 10.1.10.62 -- renewal in 31782 seconds.
+68,10.1.10.62,Invalid query packet.
+69,10.1.10.62,Invalid query packet.
+70,10.1.10.62,DHCPREQUEST on eth0 to 10.1.10.1 port 67 (xid=0xd16b79d)
+71,10.1.10.62,DHCPACK from 10.1.10.1 (xid=0xd16b79d)
+72,10.1.10.62,bound to 10.1.10.62 -- renewal in 19742 seconds.
+73,10.1.10.62,Invalid query packet.
+74,10.1.10.62,Invalid query packet.
+75,10.1.10.62,DHCPREQUEST on eth0 to 10.1.10.1 port 67 (xid=0xd16b79d)
+76,10.1.10.62,DHCPACK from 10.1.10.1 (xid=0xd16b79d)
+77,10.1.10.62,bound to 10.1.10.62 -- renewal in 55327 seconds.
+78,10.1.10.62,Invalid query packet.
+79,10.1.10.62,Invalid response packet from host 10.1.10.10.
+80,10.1.10.62,Invalid response packet from host fe80::22c9:d0ff:fe15:1b7c.
+81,10.1.10.62,Invalid query packet.
diff --git a/test/expected/test_sql.sh_4563a807311d0ce3d1f912843e615a6ca579cffa.err b/test/expected/test_sql.sh_4563a807311d0ce3d1f912843e615a6ca579cffa.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_4563a807311d0ce3d1f912843e615a6ca579cffa.err
diff --git a/test/expected/test_sql.sh_4563a807311d0ce3d1f912843e615a6ca579cffa.out b/test/expected/test_sql.sh_4563a807311d0ce3d1f912843e615a6ca579cffa.out
new file mode 100644
index 0000000..61a6828
--- /dev/null
+++ b/test/expected/test_sql.sh_4563a807311d0ce3d1f912843e615a6ca579cffa.out
@@ -0,0 +1,40 @@
+[
+ {
+ "fields": {
+ "namespace": "inc-1-enh-domain-c14-ns-2",
+ "pod": "hello-inc-1-enh-domain-c14-ns-2-3-d8f465685-k75gp",
+ "reason": "",
+ "status": "Pending"
+ }
+ },
+ {
+ "fields": {
+ "error": "pod inc-1-domain-c14-ns-6/fe-inc-1-domain-c14-ns-6-5-656d9bb695-4584b is not found: PodNotFound",
+ "namespace": "inc-1-domain-c14-ns-6",
+ "pod": "fe-inc-1-domain-c14-ns-6-5-656d9bb695-4584b",
+ "uid": "be2def59-3a08-42fd-8f84-6f64cfcefa93"
+ }
+ },
+ {
+ "fields": {
+ "namespace": "inc-1-domain-c14-ns-6",
+ "pod": "fe-inc-1-domain-c14-ns-6-5-656d9bb695-4584b",
+ "uid": "be2def59-3a08-42fd-8f84-6f64cfcefa93"
+ }
+ },
+ {
+ "fields": {
+ "namespace": "inc-1-domain-c14-ns-6",
+ "pod": "fe-inc-1-domain-c14-ns-6-5-656d9bb695-4584b",
+ "uid": "be2def59-3a08-42fd-8f84-6f64cfcefa93"
+ }
+ },
+ {
+ "fields": {
+ "namespace": "inc-1-enh-domain-c14-ns-2",
+ "pod": "hello-inc-1-enh-domain-c14-ns-2-7-5ddd6bcd69-6rqct",
+ "reason": "",
+ "status": "Pending"
+ }
+ }
+]
diff --git a/test/expected/test_sql.sh_4a13356ccbdeb5f73fa063e292b5a6cb25e6c23e.err b/test/expected/test_sql.sh_4a13356ccbdeb5f73fa063e292b5a6cb25e6c23e.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_4a13356ccbdeb5f73fa063e292b5a6cb25e6c23e.err
diff --git a/test/expected/test_sql.sh_4a13356ccbdeb5f73fa063e292b5a6cb25e6c23e.out b/test/expected/test_sql.sh_4a13356ccbdeb5f73fa063e292b5a6cb25e6c23e.out
new file mode 100644
index 0000000..85511da
--- /dev/null
+++ b/test/expected/test_sql.sh_4a13356ccbdeb5f73fa063e292b5a6cb25e6c23e.out
@@ -0,0 +1,2 @@
+log_line,log_time,log_level,bro_ts,bro_uid,bro_id_orig_h,bro_id_orig_p,bro_id_resp_h,bro_id_resp_p,bro_trans_depth,bro_method,bro_host,bro_uri,bro_referrer,bro_version,bro_user_agent,bro_request_body_len,bro_response_body_len,bro_status_code,bro_status_msg,bro_info_code,bro_info_msg,bro_tags,bro_username,bro_password,bro_proxied,bro_orig_fuids,bro_orig_filenames,bro_orig_mime_types,bro_resp_fuids,bro_resp_filenames,bro_resp_mime_types,log_part,log_idle_msecs,log_mark,log_comment,log_tags,log_annotations,log_filters
+118,2011-11-03 00:19:49.337,error,1320279589.337053,CBHHuR1xFnm5C5CQBc,192.168.2.76,52074,74.125.225.76,80,1,GET,i4.ytimg.com,/vi/gDbg_GeuiSY/hqdefault.jpg,<NULL>,1.1,Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1,0,893,404,Not Found,<NULL>,<NULL>,,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,F2GiAw3j1m22R2yIg2,<NULL>,image/jpeg,<NULL>,18,0,<NULL>,<NULL>,<NULL>,<NULL>
diff --git a/test/expected/test_sql.sh_5532c7a21e3f6b7df3aad10d7bdfbb7a812ae6c7.out b/test/expected/test_sql.sh_5532c7a21e3f6b7df3aad10d7bdfbb7a812ae6c7.out
index dbb2a2f..53f730f 100644
--- a/test/expected/test_sql.sh_5532c7a21e3f6b7df3aad10d7bdfbb7a812ae6c7.out
+++ b/test/expected/test_sql.sh_5532c7a21e3f6b7df3aad10d7bdfbb7a812ae6c7.out
@@ -1,2 +1,2 @@
-log_line,log_part,log_time,log_idle_msecs,log_level,log_mark,log_comment,log_tags,log_filters,log_hostname,log_msgid,log_pid,log_pri,log_procname,log_struct,log_syslog_tag,syslog_version,col_0,TTY,PWD,USER,COMMAND
-0,<NULL>,2007-11-03 09:47:02.000,0,info,0,<NULL>,<NULL>,[1],veridian,<NULL>,<NULL>,<NULL>,sudo,<NULL>,sudo,<NULL>,timstack,pts/6,/auto/wstimstack/rpms/lbuild/test,root,/usr/bin/tail /var/log/messages
+log_line,log_time,log_level,log_hostname,log_msgid,log_pid,log_pri,log_procname,log_struct,log_syslog_tag,syslog_version,col_0,TTY,PWD,USER,COMMAND,log_part,log_idle_msecs,log_mark,log_comment,log_tags,log_annotations,log_filters
+0,2007-11-03 09:47:02.000,info,veridian,<NULL>,<NULL>,<NULL>,sudo,<NULL>,sudo,<NULL>,timstack,pts/6,/auto/wstimstack/rpms/lbuild/test,root,/usr/bin/tail /var/log/messages,<NULL>,0,0,<NULL>,<NULL>,<NULL>,[1]
diff --git a/test/expected/test_sql.sh_57edc93426e6767aa44ab2356c55327553dcdc8d.err b/test/expected/test_sql.sh_57edc93426e6767aa44ab2356c55327553dcdc8d.err
index 600e19d..979055d 100644
--- a/test/expected/test_sql.sh_57edc93426e6767aa44ab2356c55327553dcdc8d.err
+++ b/test/expected/test_sql.sh_57edc93426e6767aa44ab2356c55327553dcdc8d.err
@@ -1,5 +1,4 @@
-✘ error: call to raise_error(msg) failed
- reason: no data was redirected to lnav's standard-input
+✘ error: no data was redirected to lnav's standard-input
 --> command-option:1
 | |rename-stdin foo 
 --> ../test/.lnav/formats/default/rename-stdin.lnav:7
diff --git a/test/expected/test_sql.sh_61471583c5e2f8ede3a8adefce682c27bf3924c8.err b/test/expected/test_sql.sh_61471583c5e2f8ede3a8adefce682c27bf3924c8.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_61471583c5e2f8ede3a8adefce682c27bf3924c8.err
diff --git a/test/expected/test_sql.sh_61471583c5e2f8ede3a8adefce682c27bf3924c8.out b/test/expected/test_sql.sh_61471583c5e2f8ede3a8adefce682c27bf3924c8.out
new file mode 100644
index 0000000..5fc70f1
--- /dev/null
+++ b/test/expected/test_sql.sh_61471583c5e2f8ede3a8adefce682c27bf3924c8.out
@@ -0,0 +1,11 @@
+[
+ {
+ "sc_substatus": 0
+ },
+ {
+ "sc_substatus": 0
+ },
+ {
+ "sc_substatus": null
+ }
+]
diff --git a/test/expected/test_sql.sh_62eb85c9569e71a630d72065238559528a16114c.out b/test/expected/test_sql.sh_62eb85c9569e71a630d72065238559528a16114c.out
index 898c9a8..0f485fb 100644
--- a/test/expected/test_sql.sh_62eb85c9569e71a630d72065238559528a16114c.out
+++ b/test/expected/test_sql.sh_62eb85c9569e71a630d72065238559528a16114c.out
@@ -1,2 +1,2 @@
-filepath 
+filepath 
foo
diff --git a/test/expected/test_sql.sh_753c343a256d1286750314957d1b4e155464e03e.out b/test/expected/test_sql.sh_753c343a256d1286750314957d1b4e155464e03e.out
index 801a9af..069e77a 100644
--- a/test/expected/test_sql.sh_753c343a256d1286750314957d1b4e155464e03e.out
+++ b/test/expected/test_sql.sh_753c343a256d1286750314957d1b4e155464e03e.out
@@ -1,2 +1,2 @@
-log_top_datetime() 
+log_top_datetime() 
<NULL>
diff --git a/test/expected/test_sql.sh_7593b39f4be6fd2124ec7cf10835ee015d475b16.err b/test/expected/test_sql.sh_7593b39f4be6fd2124ec7cf10835ee015d475b16.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_7593b39f4be6fd2124ec7cf10835ee015d475b16.err
diff --git a/test/expected/test_sql.sh_7593b39f4be6fd2124ec7cf10835ee015d475b16.out b/test/expected/test_sql.sh_7593b39f4be6fd2124ec7cf10835ee015d475b16.out
new file mode 100644
index 0000000..e304578
--- /dev/null
+++ b/test/expected/test_sql.sh_7593b39f4be6fd2124ec7cf10835ee015d475b16.out
@@ -0,0 +1,2 @@
+log_top_line() log_msg_line() 
+ 2 2
diff --git a/test/expected/test_sql.sh_764306f0e5f610ba71f521ba3d19fe158ece0ba5.out b/test/expected/test_sql.sh_764306f0e5f610ba71f521ba3d19fe158ece0ba5.out
index fabc853..57b6d27 100644
--- a/test/expected/test_sql.sh_764306f0e5f610ba71f521ba3d19fe158ece0ba5.out
+++ b/test/expected/test_sql.sh_764306f0e5f610ba71f521ba3d19fe158ece0ba5.out
@@ -1,2 +1,2 @@
- col_0 
+ col_0  
eth0.IPv4
diff --git a/test/expected/test_sql.sh_7f664c9cda0ae1c48333e21051b5e0eeafd5b4bc.err b/test/expected/test_sql.sh_7f664c9cda0ae1c48333e21051b5e0eeafd5b4bc.err
index 1a0c2b0..d068056 100644
--- a/test/expected/test_sql.sh_7f664c9cda0ae1c48333e21051b5e0eeafd5b4bc.err
+++ b/test/expected/test_sql.sh_7f664c9cda0ae1c48333e21051b5e0eeafd5b4bc.err
@@ -1,5 +1,4 @@
-✘ error: call to raise_error(msg) failed
- reason: expecting the new name for stdin as the first argument
+✘ error: expecting the new name for stdin as the first argument
 --> command-option:1
 | |rename-stdin 
 --> ../test/.lnav/formats/default/rename-stdin.lnav:6
diff --git a/test/expected/test_sql.sh_859af4cc5f57345be8dcece599419d58f332841a.err b/test/expected/test_sql.sh_859af4cc5f57345be8dcece599419d58f332841a.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_859af4cc5f57345be8dcece599419d58f332841a.err
diff --git a/test/expected/test_sql.sh_859af4cc5f57345be8dcece599419d58f332841a.out b/test/expected/test_sql.sh_859af4cc5f57345be8dcece599419d58f332841a.out
new file mode 100644
index 0000000..f648fc6
--- /dev/null
+++ b/test/expected/test_sql.sh_859af4cc5f57345be8dcece599419d58f332841a.out
@@ -0,0 +1,4 @@
+Min: 0   1-23   24-48   49+ Max: 291690
+ Thu Nov 03 00:15:00               
+▲ 70 values in the range 0.00-3788.18
+ Thu Nov 03 00:20:00
diff --git a/test/expected/test_sql.sh_8ee288f1508eaab0367e465e9f382e848f3282aa.out b/test/expected/test_sql.sh_8ee288f1508eaab0367e465e9f382e848f3282aa.out
index b21f574..c5c0c0e 100644
--- a/test/expected/test_sql.sh_8ee288f1508eaab0367e465e9f382e848f3282aa.out
+++ b/test/expected/test_sql.sh_8ee288f1508eaab0367e465e9f382e848f3282aa.out
@@ -1,4 +1,4 @@
- log_time 
+ log_time  
2009-07-20 22:59:26.000
2009-07-20 22:59:29.000
-2009-07-20 22:59:29.000
+2009-07-20 22:59:29.000 
diff --git a/test/expected/test_sql.sh_9aaaa810f883f5dcf8a4d5cda4051fdf4640a65c.err b/test/expected/test_sql.sh_9aaaa810f883f5dcf8a4d5cda4051fdf4640a65c.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_9aaaa810f883f5dcf8a4d5cda4051fdf4640a65c.err
diff --git a/test/expected/test_sql.sh_9aaaa810f883f5dcf8a4d5cda4051fdf4640a65c.out b/test/expected/test_sql.sh_9aaaa810f883f5dcf8a4d5cda4051fdf4640a65c.out
new file mode 100644
index 0000000..a54d338
--- /dev/null
+++ b/test/expected/test_sql.sh_9aaaa810f883f5dcf8a4d5cda4051fdf4640a65c.out
@@ -0,0 +1,4 @@
+log_line,log_time,log_level,log_msg_format,log_msg_values,log_part,log_idle_msecs,log_mark,log_comment,log_tags,log_annotations,log_filters,log_msg_schema
+0,2015-11-03 09:23:38.000,info,# is up,"{""col_0"":""eth0""}",<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>,ce6143108d22799c9c7a994e21e7302e
+1,2015-11-03 09:23:38.000,info,# is up,"{""col_0"":""eth1""}",<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>,ce6143108d22799c9c7a994e21e7302e
+2,2015-11-03 09:23:38.000,info,# is down,"{""col_0"":""eth0""}",<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>,83cd119b5b6f7e79abff4d28946b7a61
diff --git a/test/expected/test_sql.sh_a7955e89791db9a252d8323436fabc51e2960731.err b/test/expected/test_sql.sh_a7955e89791db9a252d8323436fabc51e2960731.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_a7955e89791db9a252d8323436fabc51e2960731.err
diff --git a/test/expected/test_sql.sh_a7955e89791db9a252d8323436fabc51e2960731.out b/test/expected/test_sql.sh_a7955e89791db9a252d8323436fabc51e2960731.out
new file mode 100644
index 0000000..de137d9
--- /dev/null
+++ b/test/expected/test_sql.sh_a7955e89791db9a252d8323436fabc51e2960731.out
@@ -0,0 +1,3 @@
+log_line,log_time,log_level,c_ip,cs_method,cs_referer,cs_uri_query,cs_uri_stem,cs_user_agent,cs_username,cs_version,sc_bytes,sc_status,cs_host,log_part,log_idle_msecs,log_mark,log_comment,log_tags,log_annotations,log_filters
+1,2015-03-24 14:02:50.000,info,127.0.0.1,GET,<NULL>,<NULL>,/includes/js/combined-javascript.js,<NULL>,-,HTTP/1.1,65508,200,<NULL>,<NULL>,6927348000,0,<NULL>,<NULL>,<NULL>,<NULL>
+2,2015-03-24 14:02:50.000,error,127.0.0.1,GET,<NULL>,<NULL>,/bad.foo,<NULL>,-,HTTP/1.1,65508,404,<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>
diff --git a/test/expected/test_sql.sh_ae7b1f1684e14bf9c16e0d789257b6ef57cfb2b1.out b/test/expected/test_sql.sh_ae7b1f1684e14bf9c16e0d789257b6ef57cfb2b1.out
index c012bd8..176be31 100644
--- a/test/expected/test_sql.sh_ae7b1f1684e14bf9c16e0d789257b6ef57cfb2b1.out
+++ b/test/expected/test_sql.sh_ae7b1f1684e14bf9c16e0d789257b6ef57cfb2b1.out
@@ -1,2 +1,2 @@
- log_time 
+ log_time  
2009-07-20 22:59:26.000
diff --git a/test/expected/test_sql.sh_afe9cdc4898df5c4e112c13dfe3db6dc089c0d7c.out b/test/expected/test_sql.sh_afe9cdc4898df5c4e112c13dfe3db6dc089c0d7c.out
index 4382802..a44dcba 100644
--- a/test/expected/test_sql.sh_afe9cdc4898df5c4e112c13dfe3db6dc089c0d7c.out
+++ b/test/expected/test_sql.sh_afe9cdc4898df5c4e112c13dfe3db6dc089c0d7c.out
@@ -1,4 +1,4 @@
- log_body 
+ log_body  
lookup(file): lookup for foobar failed
attempting to mount entry /auto/opt
-lookup(file): lookup for opt failed
+lookup(file): lookup for opt failed 
diff --git a/test/expected/test_sql.sh_b085d26043f9661d70f82cb90ecb3c5245d25eac.out b/test/expected/test_sql.sh_b085d26043f9661d70f82cb90ecb3c5245d25eac.out
index b21f574..c5c0c0e 100644
--- a/test/expected/test_sql.sh_b085d26043f9661d70f82cb90ecb3c5245d25eac.out
+++ b/test/expected/test_sql.sh_b085d26043f9661d70f82cb90ecb3c5245d25eac.out
@@ -1,4 +1,4 @@
- log_time 
+ log_time  
2009-07-20 22:59:26.000
2009-07-20 22:59:29.000
-2009-07-20 22:59:29.000
+2009-07-20 22:59:29.000 
diff --git a/test/expected/test_sql.sh_b5aa0561a65de7e8e22085db184c72a94b1a89a9.out b/test/expected/test_sql.sh_b5aa0561a65de7e8e22085db184c72a94b1a89a9.out
index c2c44ad..c126651 100644
--- a/test/expected/test_sql.sh_b5aa0561a65de7e8e22085db184c72a94b1a89a9.out
+++ b/test/expected/test_sql.sh_b5aa0561a65de7e8e22085db184c72a94b1a89a9.out
@@ -1,2 +1,2 @@
- log_body 
+ log_body  
timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
diff --git a/test/expected/test_sql.sh_b9330763dea550bbd006d7ae6ae7ea367f831fa3.err b/test/expected/test_sql.sh_b9330763dea550bbd006d7ae6ae7ea367f831fa3.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_b9330763dea550bbd006d7ae6ae7ea367f831fa3.err
diff --git a/test/expected/test_sql.sh_b9330763dea550bbd006d7ae6ae7ea367f831fa3.out b/test/expected/test_sql.sh_b9330763dea550bbd006d7ae6ae7ea367f831fa3.out
new file mode 100644
index 0000000..de2964d
--- /dev/null
+++ b/test/expected/test_sql.sh_b9330763dea550bbd006d7ae6ae7ea367f831fa3.out
@@ -0,0 +1,10 @@
+node_text
+"Gambardella, Matthew"
+"Ralls, Kim"
+"Corets, Eva"
+"Randall, Cynthia"
+"Thurman, Paula"
+"Knorr, Stefan"
+"Kress, Peter"
+"O'Brien, Tim"
+"Galos, Mike"
diff --git a/test/expected/test_sql.sh_bad03a996c0750733ab99c592b9011851f521a69.out b/test/expected/test_sql.sh_bad03a996c0750733ab99c592b9011851f521a69.out
index 85a1303..9892416 100644
--- a/test/expected/test_sql.sh_bad03a996c0750733ab99c592b9011851f521a69.out
+++ b/test/expected/test_sql.sh_bad03a996c0750733ab99c592b9011851f521a69.out
@@ -1,5 +1,5 @@
-match_index  content  case match_index when 2 then replicate('abc', 1000) else '' end 
-  0 {"col_0":10}  
- 1 {"col_0":50}  
- 2 {"col_0":50} abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc⋯bcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc 
- 3 {"col_0":50}  
+match_index  content   case match_index when 2 then replicate('abc', 1000) else '' end  
+ 0 {"col_0":10}
+ 1 {"col_0":50}
+ 2 {"col_0":50} abcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc⋯bcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabcabc 
+ 3 {"col_0":50}  
diff --git a/test/expected/test_sql.sh_bd46ca4560f8be6307a914e39539bbac0368080a.out b/test/expected/test_sql.sh_bd46ca4560f8be6307a914e39539bbac0368080a.out
index 7041f45..f32bdce 100644
--- a/test/expected/test_sql.sh_bd46ca4560f8be6307a914e39539bbac0368080a.out
+++ b/test/expected/test_sql.sh_bd46ca4560f8be6307a914e39539bbac0368080a.out
@@ -1,2 +1,2 @@
-lnav_top_file() 
+lnav_top_file() 
<NULL>
diff --git a/test/expected/test_sql.sh_c17933125df910588b806a9d07c2655bc71198ef.err b/test/expected/test_sql.sh_c17933125df910588b806a9d07c2655bc71198ef.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_c17933125df910588b806a9d07c2655bc71198ef.err
diff --git a/test/expected/test_sql.sh_c17933125df910588b806a9d07c2655bc71198ef.out b/test/expected/test_sql.sh_c17933125df910588b806a9d07c2655bc71198ef.out
new file mode 100644
index 0000000..62d3056
--- /dev/null
+++ b/test/expected/test_sql.sh_c17933125df910588b806a9d07c2655bc71198ef.out
@@ -0,0 +1,6 @@
+log_line,log_time,log_level,bro_ts,bro_uid,bro_id_orig_h,bro_id_orig_p,bro_id_resp_h,bro_id_resp_p,bro_trans_depth,bro_method,bro_host,bro_uri,bro_referrer,bro_version,bro_user_agent,bro_request_body_len,bro_response_body_len,bro_status_code,bro_status_msg,bro_info_code,bro_info_msg,bro_tags,bro_username,bro_password,bro_proxied,bro_orig_fuids,bro_orig_filenames,bro_orig_mime_types,bro_resp_fuids,bro_resp_filenames,bro_resp_mime_types,log_part,log_idle_msecs,log_mark,log_comment,log_tags,log_annotations,log_filters
+0,2011-11-03 00:19:26.452,info,1320279566.452687,CwFs1P2UcUdlSxD2La,192.168.2.76,52026,132.235.215.119,80,1,GET,www.reddit.com,/,<NULL>,1.1,Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1,0,109978,200,OK,<NULL>,<NULL>,,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,Ftw3fJ2JJF3ntMTL2,<NULL>,text/html,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>
+1,2011-11-03 00:19:26.831,info,1320279566.831619,CJxSUgkInyKSHiju1,192.168.2.76,52030,72.21.211.173,80,1,GET,e.thumbs.redditmedia.com,/E-pbDbmiBclPkDaX.jpg,http://www.reddit.com/,1.1,Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1,0,2300,200,OK,<NULL>,<NULL>,,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,FFTf9Zdgk3YkfCKo3,<NULL>,image/jpeg,<NULL>,379,0,<NULL>,<NULL>,<NULL>,<NULL>
+2,2011-11-03 00:19:26.831,info,1320279566.831563,CJwUi9bdB9c1lLW44,192.168.2.76,52029,72.21.211.173,80,1,GET,f.thumbs.redditmedia.com,/BP5bQfy4o-C7cF6A.jpg,http://www.reddit.com/,1.1,Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1,0,2272,200,OK,<NULL>,<NULL>,,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,FfXtOj3o7aub4vbs2j,<NULL>,image/jpeg,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>
+3,2011-11-03 00:19:26.831,info,1320279566.831473,CoX7zA3OJKGUOSCBY2,192.168.2.76,52027,72.21.211.173,80,1,GET,e.thumbs.redditmedia.com,/SVUtep3Rhg5FTRn4.jpg,http://www.reddit.com/,1.1,Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1,0,2562,200,OK,<NULL>,<NULL>,,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,F21Ybs3PTqS6O4Q2Zh,<NULL>,image/jpeg,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>
+4,2011-11-03 00:19:26.831,info,1320279566.831643,CT0JIh479jXIGt0Po1,192.168.2.76,52031,72.21.211.173,80,1,GET,f.thumbs.redditmedia.com,/uuy31444rLSyKdHS.jpg,http://www.reddit.com/,1.1,Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1,0,1595,200,OK,<NULL>,<NULL>,,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,Fdk0MZ1wQmKWAJ4WH4,<NULL>,image/jpeg,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>
diff --git a/test/expected/test_sql.sh_c353ef036c505b75996252138fbd4c8d22e8149c.out b/test/expected/test_sql.sh_c353ef036c505b75996252138fbd4c8d22e8149c.out
index b21f574..c5c0c0e 100644
--- a/test/expected/test_sql.sh_c353ef036c505b75996252138fbd4c8d22e8149c.out
+++ b/test/expected/test_sql.sh_c353ef036c505b75996252138fbd4c8d22e8149c.out
@@ -1,4 +1,4 @@
- log_time 
+ log_time  
2009-07-20 22:59:26.000
2009-07-20 22:59:29.000
-2009-07-20 22:59:29.000
+2009-07-20 22:59:29.000 
diff --git a/test/expected/test_sql.sh_c5b8da04734fadf3b9eea80e0af997e38e0fb811.out b/test/expected/test_sql.sh_c5b8da04734fadf3b9eea80e0af997e38e0fb811.out
index 86a4d5a..54fad85 100644
--- a/test/expected/test_sql.sh_c5b8da04734fadf3b9eea80e0af997e38e0fb811.out
+++ b/test/expected/test_sql.sh_c5b8da04734fadf3b9eea80e0af997e38e0fb811.out
@@ -1,3 +1,3 @@
-log_line  col_0 
- 0 eth0.IPv4 
+log_line  col_0  
+ 0 eth0.IPv4
7 eth0.IPv4
diff --git a/test/expected/test_sql.sh_c7e1dbf4605914720b55787785abfafdf2c4178a.out b/test/expected/test_sql.sh_c7e1dbf4605914720b55787785abfafdf2c4178a.out
index 762b09c..f3306ab 100644
--- a/test/expected/test_sql.sh_c7e1dbf4605914720b55787785abfafdf2c4178a.out
+++ b/test/expected/test_sql.sh_c7e1dbf4605914720b55787785abfafdf2c4178a.out
@@ -1,2 +1,2 @@
- log_top_datetime() 
+ log_top_datetime()  
2016-03-13 22:49:15.000
diff --git a/test/expected/test_sql.sh_d4d540f0ef7e34b693fc72078d1cf2e069f86d81.err b/test/expected/test_sql.sh_d4d540f0ef7e34b693fc72078d1cf2e069f86d81.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_d4d540f0ef7e34b693fc72078d1cf2e069f86d81.err
diff --git a/test/expected/test_sql.sh_d4d540f0ef7e34b693fc72078d1cf2e069f86d81.out b/test/expected/test_sql.sh_d4d540f0ef7e34b693fc72078d1cf2e069f86d81.out
new file mode 100644
index 0000000..6d2a99a
--- /dev/null
+++ b/test/expected/test_sql.sh_d4d540f0ef7e34b693fc72078d1cf2e069f86d81.out
@@ -0,0 +1,4 @@
+ total  log_line  log_time  duration log_formats  log_msg_format  
+ 2 0 2007-04-28 06:53:55.000 syslog_log New relevant interface # for #
+ 2 1 2007-04-28 06:53:55.000 syslog_log Joining # multicast group on interface # with address #
+ 2  2 2007-04-28 06:53:55.000   syslog_log  Registering new address record for # on # 
diff --git a/test/expected/test_sql.sh_dd540973a0dc86320d84706845a15608196ae5be.err b/test/expected/test_sql.sh_dd540973a0dc86320d84706845a15608196ae5be.err
index c7ee159..a179b11 100644
--- a/test/expected/test_sql.sh_dd540973a0dc86320d84706845a15608196ae5be.err
+++ b/test/expected/test_sql.sh_dd540973a0dc86320d84706845a15608196ae5be.err
@@ -1,5 +1,4 @@
-✘ error: call to raise_error(msg) failed
- reason: oops!
+✘ error: oops!
 --> command-option:2
 | ;SELECT $inum, $nul, $fnum, $str, raise_error('oops!')
 = note: the bound parameters are set as follows:
diff --git a/test/expected/test_sql.sh_e44c0e2834038ec8d9b0b10b993967edb711c03c.err b/test/expected/test_sql.sh_e44c0e2834038ec8d9b0b10b993967edb711c03c.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_e44c0e2834038ec8d9b0b10b993967edb711c03c.err
diff --git a/test/expected/test_sql.sh_e44c0e2834038ec8d9b0b10b993967edb711c03c.out b/test/expected/test_sql.sh_e44c0e2834038ec8d9b0b10b993967edb711c03c.out
new file mode 100644
index 0000000..ab55ad7
--- /dev/null
+++ b/test/expected/test_sql.sh_e44c0e2834038ec8d9b0b10b993967edb711c03c.out
@@ -0,0 +1,11 @@
+duration,bro_uid,req
+116.438679,CwFs1P2UcUdlSxD2La,GET www.reddit.com
+115.202498,CdZUPH2DKOE7zzCLE3,GET feeds.bbci.co.uk
+115.121914,CdrfXZ1NOFPEawF218,GET c.thumbs.redditmedia.com
+115.121837,CoX7zA3OJKGUOSCBY2,GET e.thumbs.redditmedia.com
+115.12181,CJxSUgkInyKSHiju1,GET e.thumbs.redditmedia.com
+115.121506,CT0JIh479jXIGt0Po1,GET f.thumbs.redditmedia.com
+115.121339,CJwUi9bdB9c1lLW44,GET f.thumbs.redditmedia.com
+115.119217,C6Q4Vm14ZJIlZhsXqk,GET a.thumbs.redditmedia.com
+72.274459,CbNCgO1MzloHRNeY4f,GET www.google.com
+71.658218,CnGze54kQWWpKqrrZ4,GET ajax.googleapis.com
diff --git a/test/expected/test_sql.sh_ef3cecab4ae0b90760f728add5652378e26b2fe6.err b/test/expected/test_sql.sh_ef3cecab4ae0b90760f728add5652378e26b2fe6.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_ef3cecab4ae0b90760f728add5652378e26b2fe6.err
diff --git a/test/expected/test_sql.sh_ef3cecab4ae0b90760f728add5652378e26b2fe6.out b/test/expected/test_sql.sh_ef3cecab4ae0b90760f728add5652378e26b2fe6.out
new file mode 100644
index 0000000..c0c942f
--- /dev/null
+++ b/test/expected/test_sql.sh_ef3cecab4ae0b90760f728add5652378e26b2fe6.out
@@ -0,0 +1,2 @@
+log_line,log_time,log_level,c_ip,cs_method,cs_referer,cs_uri_query,cs_uri_stem,cs_user_agent,cs_username,cs_version,sc_bytes,sc_status,cs_host,log_part,log_idle_msecs,log_mark,log_comment,log_tags,log_annotations,log_filters
+1,2009-07-20 22:59:29.000,error,192.168.202.254,GET,-,<NULL>,/vmw/vSphere/default/vmkboot.gz,gPXE/0.9.7,-,HTTP/1.0,46210,404,<NULL>,<NULL>,3000,0,<NULL>,<NULL>,<NULL>,<NULL>
diff --git a/test/expected/test_sql.sh_fea98f976873ee7b55e6f322dda42719a19fb3f0.err b/test/expected/test_sql.sh_fea98f976873ee7b55e6f322dda42719a19fb3f0.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_fea98f976873ee7b55e6f322dda42719a19fb3f0.err
diff --git a/test/expected/test_sql.sh_fea98f976873ee7b55e6f322dda42719a19fb3f0.out b/test/expected/test_sql.sh_fea98f976873ee7b55e6f322dda42719a19fb3f0.out
new file mode 100644
index 0000000..8307aba
--- /dev/null
+++ b/test/expected/test_sql.sh_fea98f976873ee7b55e6f322dda42719a19fb3f0.out
@@ -0,0 +1,2 @@
+log_top_line() log_msg_line() 
+ <NULL> <NULL>
diff --git a/test/expected/test_sql.sh_ffbc3dbf8464455358a77acffa10a8dd8a080374.err b/test/expected/test_sql.sh_ffbc3dbf8464455358a77acffa10a8dd8a080374.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql.sh_ffbc3dbf8464455358a77acffa10a8dd8a080374.err
diff --git a/test/expected/test_sql.sh_ffbc3dbf8464455358a77acffa10a8dd8a080374.out b/test/expected/test_sql.sh_ffbc3dbf8464455358a77acffa10a8dd8a080374.out
new file mode 100644
index 0000000..b67d10f
--- /dev/null
+++ b/test/expected/test_sql.sh_ffbc3dbf8464455358a77acffa10a8dd8a080374.out
@@ -0,0 +1,4 @@
+log_line,log_time,log_level,c_ip,cs_method,cs_referer,cs_uri_query,cs_uri_stem,cs_user_agent,cs_username,cs_version,sc_bytes,sc_status,cs_host,log_part,log_idle_msecs,log_mark,log_comment,log_tags,log_annotations,log_filters
+0,2009-07-20 22:59:26.000,info,192.168.202.254,GET,-,<NULL>,/vmw/cgi/tramp,gPXE/0.9.7,-,HTTP/1.0,134,200,<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>
+1,2009-07-20 22:59:29.000,error,192.168.202.254,GET,-,<NULL>,/vmw/vSphere/default/vmkboot.gz,gPXE/0.9.7,-,HTTP/1.0,46210,404,<NULL>,<NULL>,3000,0,<NULL>,<NULL>,<NULL>,<NULL>
+2,2009-07-20 22:59:29.000,info,192.168.202.254,GET,-,<NULL>,/vmw/vSphere/default/vmkernel.gz,gPXE/0.9.7,-,HTTP/1.0,78929,200,<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>
diff --git a/test/expected/test_sql_anno.sh_1398146cf8b4f074ec8b9752f021cf47d011bebc.err b/test/expected/test_sql_anno.sh_1398146cf8b4f074ec8b9752f021cf47d011bebc.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_anno.sh_1398146cf8b4f074ec8b9752f021cf47d011bebc.err
diff --git a/test/expected/test_sql_anno.sh_1398146cf8b4f074ec8b9752f021cf47d011bebc.out b/test/expected/test_sql_anno.sh_1398146cf8b4f074ec8b9752f021cf47d011bebc.out
new file mode 100644
index 0000000..7d0d083
--- /dev/null
+++ b/test/expected/test_sql_anno.sh_1398146cf8b4f074ec8b9752f021cf47d011bebc.out
@@ -0,0 +1,9 @@
+ SELECT json_object('abc', 'def') ->> '$.abc'
+ sql_keyword ------
+ sql_func ------------------------
+ sql_ident -----------
+ sql_string -----
+ sql_comma -
+ sql_string -----
+ sql_oper ---
+ sql_string -------
diff --git a/test/expected/test_sql_anno.sh_de46094b6e005285dc0921ef9979e36240c5042d.err b/test/expected/test_sql_anno.sh_de46094b6e005285dc0921ef9979e36240c5042d.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_anno.sh_de46094b6e005285dc0921ef9979e36240c5042d.err
diff --git a/test/expected/test_sql_anno.sh_de46094b6e005285dc0921ef9979e36240c5042d.out b/test/expected/test_sql_anno.sh_de46094b6e005285dc0921ef9979e36240c5042d.out
new file mode 100644
index 0000000..0dd8902
--- /dev/null
+++ b/test/expected/test_sql_anno.sh_de46094b6e005285dc0921ef9979e36240c5042d.out
@@ -0,0 +1,7 @@
+ SELECT 0x77, 123, 123e4
+ sql_keyword ------
+ sql_number ----
+ sql_comma -
+ sql_number ---
+ sql_comma -
+ sql_number -----
diff --git a/test/expected/test_sql_anno.sh_e7dae4ba18c42c416ed03afd8819200f63e89ac8.err b/test/expected/test_sql_anno.sh_e7dae4ba18c42c416ed03afd8819200f63e89ac8.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_anno.sh_e7dae4ba18c42c416ed03afd8819200f63e89ac8.err
diff --git a/test/expected/test_sql_anno.sh_e7dae4ba18c42c416ed03afd8819200f63e89ac8.out b/test/expected/test_sql_anno.sh_e7dae4ba18c42c416ed03afd8819200f63e89ac8.out
new file mode 100644
index 0000000..fa79088
--- /dev/null
+++ b/test/expected/test_sql_anno.sh_e7dae4ba18c42c416ed03afd8819200f63e89ac8.out
@@ -0,0 +1,17 @@
+ from access_log | filter cs_method == 'GET' || cs_method == 'PUT'
+ prql_stage ----------------
+ prql_transform ----
+ prql_ident ----------
+ prql_fqid ----------
+ prql_stage -------------------------------------------------
+ prql_pipe -
+ prql_transform ------
+ prql_ident ---------
+ prql_fqid ---------
+ prql_oper --
+ prql_string -----
+ prql_oper --
+ prql_ident ---------
+ prql_fqid ---------
+ prql_oper --
+ prql_string -----
diff --git a/test/expected/test_sql_fs_func.sh_2aa83fc90c850cdd11e3136a1a02b79c5879824b.err b/test/expected/test_sql_fs_func.sh_2aa83fc90c850cdd11e3136a1a02b79c5879824b.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_2aa83fc90c850cdd11e3136a1a02b79c5879824b.err
diff --git a/test/expected/test_sql_fs_func.sh_2aa83fc90c850cdd11e3136a1a02b79c5879824b.out b/test/expected/test_sql_fs_func.sh_2aa83fc90c850cdd11e3136a1a02b79c5879824b.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_2aa83fc90c850cdd11e3136a1a02b79c5879824b.out
diff --git a/test/expected/test_sql_fs_func.sh_34baa8050f8278d7b68c29e53bdd9f37da0f34c8.err b/test/expected/test_sql_fs_func.sh_34baa8050f8278d7b68c29e53bdd9f37da0f34c8.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_34baa8050f8278d7b68c29e53bdd9f37da0f34c8.err
diff --git a/test/expected/test_sql_fs_func.sh_34baa8050f8278d7b68c29e53bdd9f37da0f34c8.out b/test/expected/test_sql_fs_func.sh_34baa8050f8278d7b68c29e53bdd9f37da0f34c8.out
new file mode 100644
index 0000000..f5e1ef9
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_34baa8050f8278d7b68c29e53bdd9f37da0f34c8.out
@@ -0,0 +1,2 @@
+shell_exec('echo hi')
+ hi␊
diff --git a/test/expected/test_sql_fs_func.sh_9234a453403934587bbbdde355281a956d1fbe5f.err b/test/expected/test_sql_fs_func.sh_9234a453403934587bbbdde355281a956d1fbe5f.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_9234a453403934587bbbdde355281a956d1fbe5f.err
diff --git a/test/expected/test_sql_fs_func.sh_9234a453403934587bbbdde355281a956d1fbe5f.out b/test/expected/test_sql_fs_func.sh_9234a453403934587bbbdde355281a956d1fbe5f.out
new file mode 100644
index 0000000..2329234
--- /dev/null
+++ b/test/expected/test_sql_fs_func.sh_9234a453403934587bbbdde355281a956d1fbe5f.out
@@ -0,0 +1,2 @@
+st_parent st_name st_dev st_ino st_type st_mode st_nlink st_uid st_user st_gid st_group st_rdev st_size st_blksize st_blocks st_atime st_mtime st_ctime error
+/ non-existent <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> <NULL> No such file or directory
diff --git a/test/expected/test_sql_fs_func.sh_9e2c0a90ce333365ff7354375f2c609bc27135c8.err b/test/expected/test_sql_fs_func.sh_9e2c0a90ce333365ff7354375f2c609bc27135c8.err
index c8a3fd0..cac88c8 100644
--- a/test/expected/test_sql_fs_func.sh_9e2c0a90ce333365ff7354375f2c609bc27135c8.err
+++ b/test/expected/test_sql_fs_func.sh_9e2c0a90ce333365ff7354375f2c609bc27135c8.err
@@ -1 +1 @@
-error: sqlite3_exec failed -- lnav-error:{"level":"error","message":{"str":"call to readlink(path) failed","attrs":[{"start":8,"end":16,"type":"role","value":47},{"start":17,"end":21,"type":"role","value":46},{"start":8,"end":22,"type":"role","value":60}]},"reason":{"str":"unable to stat path: non-existent-link -- No such file or directory","attrs":[]},"snippets":[],"help":{"str":"","attrs":[]}}
+error: sqlite3_exec failed -- lnav-error:{"level":"error","message":{"str":"call to readlink(path) failed","attrs":[{"start":8,"end":16,"type":"role","value":49},{"start":17,"end":21,"type":"role","value":48},{"start":8,"end":22,"type":"role","value":65}]},"reason":{"str":"unable to stat path: non-existent-link -- No such file or directory","attrs":[]},"snippets":[],"notes":[],"help":{"str":"","attrs":[]}}
diff --git a/test/expected/test_sql_fs_func.sh_cf670dfa1ae7ac5a074baa642068c6d26ac8e096.err b/test/expected/test_sql_fs_func.sh_cf670dfa1ae7ac5a074baa642068c6d26ac8e096.err
index aa68134..fdc556a 100644
--- a/test/expected/test_sql_fs_func.sh_cf670dfa1ae7ac5a074baa642068c6d26ac8e096.err
+++ b/test/expected/test_sql_fs_func.sh_cf670dfa1ae7ac5a074baa642068c6d26ac8e096.err
@@ -1 +1 @@
-error: sqlite3_exec failed -- lnav-error:{"level":"error","message":{"str":"call to realpath(path) failed","attrs":[{"start":8,"end":16,"type":"role","value":47},{"start":17,"end":21,"type":"role","value":46},{"start":8,"end":22,"type":"role","value":60}]},"reason":{"str":"Could not get real path for non-existent-path -- No such file or directory","attrs":[]},"snippets":[],"help":{"str":"","attrs":[]}}
+error: sqlite3_exec failed -- lnav-error:{"level":"error","message":{"str":"call to realpath(path) failed","attrs":[{"start":8,"end":16,"type":"role","value":49},{"start":17,"end":21,"type":"role","value":48},{"start":8,"end":22,"type":"role","value":65}]},"reason":{"str":"Could not get real path for non-existent-path -- No such file or directory","attrs":[]},"snippets":[],"notes":[],"help":{"str":"","attrs":[]}}
diff --git a/test/expected/test_sql_indexes.sh_1614ebb5e2e83bab11023354dea8a0885ddf64b4.out b/test/expected/test_sql_indexes.sh_1614ebb5e2e83bab11023354dea8a0885ddf64b4.out
index 7179021..f16755c 100644
--- a/test/expected/test_sql_indexes.sh_1614ebb5e2e83bab11023354dea8a0885ddf64b4.out
+++ b/test/expected/test_sql_indexes.sh_1614ebb5e2e83bab11023354dea8a0885ddf64b4.out
@@ -1,3 +1,3 @@
-log_line log_part  log_time log_idle_msecs log_level log_mark log_comment log_tags log_filters log_msg_format 
-  1  <NULL> 2009-07-20 22:59:29.000  3000 error   0  <NULL>  <NULL>  <NULL>  
- 3  <NULL> 2013-02-15 06:00:31.000  112777262000 error   0  <NULL>  <NULL>  <NULL>  
+log_line  log_time  log_level log_msg_format log_msg_values log_part log_idle_msecs log_mark log_comment log_tags log_annotations log_filters 
+ 1 2009-07-20 22:59:29.000 error null <NULL>   3000 0 <NULL> <NULL> <NULL> <NULL>
+ 3 2013-02-15 06:00:31.000 error null <NULL>  112777262000 0 <NULL> <NULL> <NULL> <NULL>
diff --git a/test/expected/test_sql_indexes.sh_2b4945247332d01b08e6f17340f7d17f3b3649b8.err b/test/expected/test_sql_indexes.sh_2b4945247332d01b08e6f17340f7d17f3b3649b8.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_indexes.sh_2b4945247332d01b08e6f17340f7d17f3b3649b8.err
diff --git a/test/expected/test_sql_indexes.sh_2b4945247332d01b08e6f17340f7d17f3b3649b8.out b/test/expected/test_sql_indexes.sh_2b4945247332d01b08e6f17340f7d17f3b3649b8.out
new file mode 100644
index 0000000..240259b
--- /dev/null
+++ b/test/expected/test_sql_indexes.sh_2b4945247332d01b08e6f17340f7d17f3b3649b8.out
@@ -0,0 +1,5 @@
+log_line  log_time  log_level log_msg_format log_msg_values log_part log_idle_msecs log_mark log_comment log_tags log_annotations log_filters 
+ 0 2009-07-20 22:59:26.000 info null <NULL>  0 0 <NULL> <NULL> <NULL> <NULL>
+ 1 2009-07-20 22:59:29.000 error null <NULL>   3000 0 <NULL> <NULL> <NULL> <NULL>
+ 2 2009-07-20 22:59:29.000 info    null   <NULL>  0  0  <NULL>  <NULL>  <NULL>  <NULL> 
+ 3 2013-02-15 06:00:31.000 error    null   <NULL>  112777262000  0  <NULL>  <NULL>  <NULL>  <NULL> 
diff --git a/test/expected/test_sql_indexes.sh_541a8e35f34a206e340a3880128b6ce137847872.out b/test/expected/test_sql_indexes.sh_541a8e35f34a206e340a3880128b6ce137847872.out
index 5467779..a5e2a8e 100644
--- a/test/expected/test_sql_indexes.sh_541a8e35f34a206e340a3880128b6ce137847872.out
+++ b/test/expected/test_sql_indexes.sh_541a8e35f34a206e340a3880128b6ce137847872.out
@@ -1,5 +1,5 @@
-log_line log_part  log_time log_idle_msecs log_level log_mark log_comment log_tags log_filters  c_ip cs_method cs_referer cs_uri_query  cs_uri_stem cs_user_agent cs_username cs_version sc_bytes sc_status cs_host  log_unique_path 
-  0  <NULL> 2009-07-20 22:59:26.000  0 info   0  <NULL>  <NULL>  <NULL> 192.168.202.254 GET  -   <NULL> /vmw/cgi/tramp  gPXE/0.9.7  -  HTTP/1.0   134  200  <NULL> logfile_access_log.0 
-   1 <NULL> 2009-07-20 22:59:29.000 3000 error 0 <NULL> <NULL> <NULL> 192.168.202.254 GET - <NULL> /vmw/vSphere/default/vmkboot.gz gPXE/0.9.7 - HTTP/1.0 46210 404 <NULL> logfile_access_log.0
-  2  <NULL> 2009-07-20 22:59:29.000  0 info   0  <NULL>  <NULL>  <NULL> 192.168.202.254 GET  -   <NULL> /vmw/vSphere/default/vmkernel.gz gPXE/0.9.7  -  HTTP/1.0   78929  200  <NULL> logfile_access_log.0 
- 3  <NULL> 2013-02-15 06:00:31.000  112777262000 error   0  <NULL>  <NULL>  <NULL> 10.112.81.15  <NULL>  -   <NULL> <NULL>  -  -  <NULL>   0  400  <NULL> logfile_access_log.1
+log_line  log_time  log_level  c_ip  cs_method cs_referer cs_uri_query  cs_uri_stem  cs_user_agent cs_username cs_version  sc_bytes  sc_status cs_host log_part log_idle_msecs log_mark log_comment log_tags log_annotations log_filters  log_unique_path  
+ 0 2009-07-20 22:59:26.000 info 192.168.202.254 GET - <NULL> /vmw/cgi/tramp gPXE/0.9.7 - HTTP/1.0   134 200 <NULL> <NULL>  0 0 <NULL> <NULL> <NULL> <NULL> logfile_access_log.0
+ 1 2009-07-20 22:59:29.000 error 192.168.202.254 GET - <NULL> /vmw/vSphere/default/vmkboot.gz gPXE/0.9.7 - HTTP/1.0  46210 404 <NULL> <NULL>   3000 0 <NULL> <NULL> <NULL> <NULL> logfile_access_log.0
+ 2 2009-07-20 22:59:29.000 info  192.168.202.254 GET  -   <NULL> /vmw/vSphere/default/vmkernel.gz gPXE/0.9.7  -  HTTP/1.0   78929  200  <NULL>  <NULL>  0  0  <NULL>  <NULL>  <NULL>  <NULL> logfile_access_log.0 
+ 3 2013-02-15 06:00:31.000 error  10.112.81.15  <NULL>  -   <NULL> <NULL>  -  -  <NULL>   0  400  <NULL>  <NULL>  112777262000  0  <NULL>  <NULL>  <NULL>  <NULL> logfile_access_log.1 
diff --git a/test/expected/test_sql_indexes.sh_59a1497c13a5e09bc8f95ef02552b2835ebea6e5.out b/test/expected/test_sql_indexes.sh_59a1497c13a5e09bc8f95ef02552b2835ebea6e5.out
index 823c4d0..5c73e94 100644
--- a/test/expected/test_sql_indexes.sh_59a1497c13a5e09bc8f95ef02552b2835ebea6e5.out
+++ b/test/expected/test_sql_indexes.sh_59a1497c13a5e09bc8f95ef02552b2835ebea6e5.out
@@ -1,2 +1,2 @@
-$id $parent $notused  replace($detail, 'SCAN TABLE', 'SCAN') 
- 2  0  0 SCAN all_logs VIRTUAL TABLE INDEX 1:SEARCH all_logs USING log_level < ? 
+$id  $parent   $notused   replace($detail, 'SCAN TABLE', 'SCAN')  
+ 2  0  0 SCAN all_logs VIRTUAL TABLE INDEX 1:SEARCH all_logs USING log_level < ?
diff --git a/test/expected/test_sql_indexes.sh_69fd19d56a8cd1fc9c7eb9351270eabb491f8233.out b/test/expected/test_sql_indexes.sh_69fd19d56a8cd1fc9c7eb9351270eabb491f8233.out
index cb2aac6..c44444c 100644
--- a/test/expected/test_sql_indexes.sh_69fd19d56a8cd1fc9c7eb9351270eabb491f8233.out
+++ b/test/expected/test_sql_indexes.sh_69fd19d56a8cd1fc9c7eb9351270eabb491f8233.out
@@ -1,5 +1,5 @@
-log_line log_part  log_time log_idle_msecs log_level log_mark log_comment log_tags log_filters log_msg_format log_format 
- 0  <NULL> 2009-07-20 22:59:26.000  0 info   0  <NULL>  <NULL>  <NULL>   access_log 
-  1 <NULL> 2009-07-20 22:59:29.000 3000 error 0 <NULL> <NULL> <NULL> access_log
- 2  <NULL> 2009-07-20 22:59:29.000  0 info   0  <NULL>  <NULL>  <NULL>   access_log 
- 3  <NULL> 2013-02-15 06:00:31.000  112777262000 error   0  <NULL>  <NULL>  <NULL>   access_log
+log_line  log_time  log_level log_msg_format log_msg_values log_part log_idle_msecs log_mark log_comment log_tags log_annotations log_filters log_format 
+ 0 2009-07-20 22:59:26.000 info null <NULL>  0 0 <NULL> <NULL> <NULL> <NULL> access_log
+ 1 2009-07-20 22:59:29.000 error null <NULL>   3000 0 <NULL> <NULL> <NULL> <NULL> access_log
+ 2 2009-07-20 22:59:29.000 info    null   <NULL>  0  0  <NULL>  <NULL>  <NULL>  <NULL> access_log 
+ 3 2013-02-15 06:00:31.000 error    null   <NULL>  112777262000  0  <NULL>  <NULL>  <NULL>  <NULL> access_log 
diff --git a/test/expected/test_sql_indexes.sh_6f707b6e856dbaab6f95e7e89b98dc3652021f85.out b/test/expected/test_sql_indexes.sh_6f707b6e856dbaab6f95e7e89b98dc3652021f85.out
index ee48805..8e21b1b 100644
--- a/test/expected/test_sql_indexes.sh_6f707b6e856dbaab6f95e7e89b98dc3652021f85.out
+++ b/test/expected/test_sql_indexes.sh_6f707b6e856dbaab6f95e7e89b98dc3652021f85.out
@@ -1,3 +1,3 @@
-log_line log_part  log_time log_idle_msecs log_level log_mark log_comment log_tags log_filters log_msg_format 
- 0  <NULL> 2009-07-20 22:59:26.000  0 info   0  <NULL>  <NULL>  <NULL>  
- 2 <NULL> 2009-07-20 22:59:29.000 0 info 0 <NULL> <NULL> <NULL>
+log_line  log_time  log_level log_msg_format log_msg_values log_part log_idle_msecs log_mark log_comment log_tags log_annotations log_filters 
+ 0 2009-07-20 22:59:26.000 info null <NULL>  0 0 <NULL> <NULL> <NULL> <NULL>
+ 2 2009-07-20 22:59:29.000 info null <NULL>  0 0 <NULL> <NULL> <NULL> <NULL>
diff --git a/test/expected/test_sql_indexes.sh_b615b6737b1e0d383c8ce4a1db56332f11dbc158.out b/test/expected/test_sql_indexes.sh_b615b6737b1e0d383c8ce4a1db56332f11dbc158.out
index 2a91985..f56f904 100644
--- a/test/expected/test_sql_indexes.sh_b615b6737b1e0d383c8ce4a1db56332f11dbc158.out
+++ b/test/expected/test_sql_indexes.sh_b615b6737b1e0d383c8ce4a1db56332f11dbc158.out
@@ -1,2 +1,2 @@
-$id $parent $notused  replace($detail, 'SCAN TABLE', 'SCAN') 
- 2  0  0 SCAN all_logs VIRTUAL TABLE INDEX 1:SEARCH all_logs USING log_format = ? 
+$id  $parent   $notused   replace($detail, 'SCAN TABLE', 'SCAN')  
+ 2  0  0 SCAN all_logs VIRTUAL TABLE INDEX 1:SEARCH all_logs USING log_format = ?
diff --git a/test/expected/test_sql_indexes.sh_dab07d8de7728752ae938a174468d75e85f3ae7e.out b/test/expected/test_sql_indexes.sh_dab07d8de7728752ae938a174468d75e85f3ae7e.out
index 82958af..7d20aa3 100644
--- a/test/expected/test_sql_indexes.sh_dab07d8de7728752ae938a174468d75e85f3ae7e.out
+++ b/test/expected/test_sql_indexes.sh_dab07d8de7728752ae938a174468d75e85f3ae7e.out
@@ -1,2 +1,2 @@
-$id $parent $notused  replace($detail, 'SCAN TABLE', 'SCAN') 
- 2  0  0 SCAN access_log VIRTUAL TABLE INDEX 1:SEARCH access_log USING log_path GLOB ? 
+$id  $parent   $notused   replace($detail, 'SCAN TABLE', 'SCAN')  
+ 2  0  0 SCAN access_log VIRTUAL TABLE INDEX 1:SEARCH access_log USING log_path GLOB ?
diff --git a/test/expected/test_sql_indexes.sh_f7681c234d4f60df16c997a05163aeb058c52870.out b/test/expected/test_sql_indexes.sh_f7681c234d4f60df16c997a05163aeb058c52870.out
index 16c7c37..240259b 100644
--- a/test/expected/test_sql_indexes.sh_f7681c234d4f60df16c997a05163aeb058c52870.out
+++ b/test/expected/test_sql_indexes.sh_f7681c234d4f60df16c997a05163aeb058c52870.out
@@ -1,5 +1,5 @@
-log_line log_part  log_time log_idle_msecs log_level log_mark log_comment log_tags log_filters log_msg_format 
- 0  <NULL> 2009-07-20 22:59:26.000  0 info   0  <NULL>  <NULL>  <NULL>  
-  1 <NULL> 2009-07-20 22:59:29.000 3000 error 0 <NULL> <NULL> <NULL>
- 2  <NULL> 2009-07-20 22:59:29.000  0 info   0  <NULL>  <NULL>  <NULL>  
- 3  <NULL> 2013-02-15 06:00:31.000  112777262000 error   0  <NULL>  <NULL>  <NULL>  
+log_line  log_time  log_level log_msg_format log_msg_values log_part log_idle_msecs log_mark log_comment log_tags log_annotations log_filters 
+ 0 2009-07-20 22:59:26.000 info null <NULL>  0 0 <NULL> <NULL> <NULL> <NULL>
+ 1 2009-07-20 22:59:29.000 error null <NULL>   3000 0 <NULL> <NULL> <NULL> <NULL>
+ 2 2009-07-20 22:59:29.000 info    null   <NULL>  0  0  <NULL>  <NULL>  <NULL>  <NULL> 
+ 3 2013-02-15 06:00:31.000 error    null   <NULL>  112777262000  0  <NULL>  <NULL>  <NULL>  <NULL> 
diff --git a/test/expected/test_sql_json_func.sh_026077f4d573ee034467065b7e4f1878bdd4e2f2.err b/test/expected/test_sql_json_func.sh_026077f4d573ee034467065b7e4f1878bdd4e2f2.err
index 9654daa..84205dc 100644
--- a/test/expected/test_sql_json_func.sh_026077f4d573ee034467065b7e4f1878bdd4e2f2.err
+++ b/test/expected/test_sql_json_func.sh_026077f4d573ee034467065b7e4f1878bdd4e2f2.err
@@ -1,4 +1 @@
-error: sqlite3_exec failed -- parse error: premature EOF
- [123, true
- (right here) ------^
-
+error: sqlite3_exec failed -- lnav-error:{"level":"error","message":{"str":"invalid JSON","attrs":[]},"reason":{"str":"parse error: premature EOF\n [123, true\n (right here) ------^","attrs":[]},"snippets":[],"notes":[],"help":{"str":"","attrs":[]}}
diff --git a/test/expected/test_sql_json_func.sh_5f2feef079a51410e1f8661bfe92da1c3277f665.err b/test/expected/test_sql_json_func.sh_5f2feef079a51410e1f8661bfe92da1c3277f665.err
index f784e9c..99b48bc 100644
--- a/test/expected/test_sql_json_func.sh_5f2feef079a51410e1f8661bfe92da1c3277f665.err
+++ b/test/expected/test_sql_json_func.sh_5f2feef079a51410e1f8661bfe92da1c3277f665.err
@@ -1 +1 @@
-error: sqlite3_exec failed -- lnav-error:{"level":"error","message":{"str":"call to json_contains(json, value) failed","attrs":[{"start":8,"end":21,"type":"role","value":47},{"start":22,"end":26,"type":"role","value":46},{"start":28,"end":33,"type":"role","value":46},{"start":8,"end":34,"type":"role","value":60}]},"reason":{"str":"parse error: premature EOF\n [\"hi\", \"bye\", \"solong]\n (right here) ------^","attrs":[]},"snippets":[],"help":{"str":"","attrs":[]}}
+error: sqlite3_exec failed -- lnav-error:{"level":"error","message":{"str":"call to json_contains(json, value) failed","attrs":[{"start":8,"end":21,"type":"role","value":49},{"start":22,"end":26,"type":"role","value":48},{"start":28,"end":33,"type":"role","value":48},{"start":8,"end":34,"type":"role","value":65}]},"reason":{"str":"parse error: premature EOF\n [\"hi\", \"bye\", \"solong]\n (right here) ------^","attrs":[]},"snippets":[],"notes":[],"help":{"str":"","attrs":[]}}
diff --git a/test/expected/test_sql_json_func.sh_e0ab80f50fb008700ab6cfb90694ed014d40e44b.err b/test/expected/test_sql_json_func.sh_e0ab80f50fb008700ab6cfb90694ed014d40e44b.err
index 456ef7a..6033ba4 100644
--- a/test/expected/test_sql_json_func.sh_e0ab80f50fb008700ab6cfb90694ed014d40e44b.err
+++ b/test/expected/test_sql_json_func.sh_e0ab80f50fb008700ab6cfb90694ed014d40e44b.err
@@ -1 +1 @@
-error: sqlite3_exec failed -- lnav-error:{"level":"error","message":{"str":"call to json_concat(json, value, ...) failed","attrs":[{"start":8,"end":19,"type":"role","value":47},{"start":20,"end":24,"type":"role","value":46},{"start":26,"end":31,"type":"role","value":46},{"start":8,"end":37,"type":"role","value":60}]},"reason":{"str":"Invalid JSON: parse error: premature EOF\n [null,\n (right here) ------^","attrs":[]},"snippets":[],"help":{"str":"","attrs":[]}}
+error: sqlite3_exec failed -- lnav-error:{"level":"error","message":{"str":"call to json_concat(json, value, ...) failed","attrs":[{"start":8,"end":19,"type":"role","value":49},{"start":20,"end":24,"type":"role","value":48},{"start":26,"end":31,"type":"role","value":48},{"start":8,"end":37,"type":"role","value":65}]},"reason":{"str":"Invalid JSON: parse error: premature EOF\n [null,\n (right here) ------^","attrs":[]},"snippets":[],"notes":[],"help":{"str":"","attrs":[]}}
diff --git a/test/expected/test_sql_json_func.sh_f34f5dfa938a1ac7721f924beb16bbceec127a1b.err b/test/expected/test_sql_json_func.sh_f34f5dfa938a1ac7721f924beb16bbceec127a1b.err
index e8eef68..cffd039 100644
--- a/test/expected/test_sql_json_func.sh_f34f5dfa938a1ac7721f924beb16bbceec127a1b.err
+++ b/test/expected/test_sql_json_func.sh_f34f5dfa938a1ac7721f924beb16bbceec127a1b.err
@@ -1,4 +1 @@
-error: sqlite3_exec failed -- parse error: premature EOF
- [null, true, 20, 30, 40
- (right here) ------^
-
+error: sqlite3_exec failed -- lnav-error:{"level":"error","message":{"str":"invalid JSON","attrs":[]},"reason":{"str":"parse error: premature EOF\n [null, true, 20, 30, 40\n (right here) ------^","attrs":[]},"snippets":[],"notes":[],"help":{"str":"","attrs":[]}}
diff --git a/test/expected/test_sql_regexp.sh_02ef03572fd2bcf39bab8e29cf1c735ff7c3f297.err b/test/expected/test_sql_regexp.sh_02ef03572fd2bcf39bab8e29cf1c735ff7c3f297.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_regexp.sh_02ef03572fd2bcf39bab8e29cf1c735ff7c3f297.err
diff --git a/test/expected/test_sql_regexp.sh_02ef03572fd2bcf39bab8e29cf1c735ff7c3f297.out b/test/expected/test_sql_regexp.sh_02ef03572fd2bcf39bab8e29cf1c735ff7c3f297.out
new file mode 100644
index 0000000..8948203
--- /dev/null
+++ b/test/expected/test_sql_regexp.sh_02ef03572fd2bcf39bab8e29cf1c735ff7c3f297.out
@@ -0,0 +1,3 @@
+regexp_replace(cs_uri_query, '.*rapidView=(\d+).*', '\1') 
+1295
+1839
diff --git a/test/expected/test_sql_regexp.sh_03257c56e85558aa0cc925b68d3af962afc25125.out b/test/expected/test_sql_regexp.sh_03257c56e85558aa0cc925b68d3af962afc25125.out
index 19aa1c4..5074519 100644
--- a/test/expected/test_sql_regexp.sh_03257c56e85558aa0cc925b68d3af962afc25125.out
+++ b/test/expected/test_sql_regexp.sh_03257c56e85558aa0cc925b68d3af962afc25125.out
@@ -1,4 +1,4 @@
-match_index capture_index capture_name capture_count range_start range_stop content 
- 0  0  <NULL>  3  1  9 abc=def; 
+match_index capture_index capture_name capture_count range_start range_stop content  
+ 0 0 <NULL> 3 1 9 abc=def;
0 1 <NULL> 3 1 4 abc
 0  2  <NULL>  3  5  8 def 
diff --git a/test/expected/test_sql_regexp.sh_219a579cf7744fa08ab79fadd08b521b2f18a661.err b/test/expected/test_sql_regexp.sh_219a579cf7744fa08ab79fadd08b521b2f18a661.err
new file mode 100644
index 0000000..824c120
--- /dev/null
+++ b/test/expected/test_sql_regexp.sh_219a579cf7744fa08ab79fadd08b521b2f18a661.err
@@ -0,0 +1,7 @@
+✘ error: “^(” is not a valid regular expression
+ reason: missing closing parenthesis
+ --> command-option:1
+ | ;SELECT * from regexp_capture_into_json('abc=def;ghi=jkl;', '^(')
+ --> pattern
+ | ^( 
+ |  ^ missing closing parenthesis 
diff --git a/test/expected/test_sql_regexp.sh_219a579cf7744fa08ab79fadd08b521b2f18a661.out b/test/expected/test_sql_regexp.sh_219a579cf7744fa08ab79fadd08b521b2f18a661.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_regexp.sh_219a579cf7744fa08ab79fadd08b521b2f18a661.out
diff --git a/test/expected/test_sql_regexp.sh_51293df041b6969ccecc60204dce3676d0fb006d.out b/test/expected/test_sql_regexp.sh_51293df041b6969ccecc60204dce3676d0fb006d.out
index 4917183..dfdbb10 100644
--- a/test/expected/test_sql_regexp.sh_51293df041b6969ccecc60204dce3676d0fb006d.out
+++ b/test/expected/test_sql_regexp.sh_51293df041b6969ccecc60204dce3676d0fb006d.out
@@ -1,2 +1,2 @@
-match_index  content 
- 0 {"key":"foo","value":4670} 
+match_index  content  
+ 0 {"key":"foo","value":4670}
diff --git a/test/expected/test_sql_regexp.sh_a610798fefdacd8d0179a4b17cd757d00fb731be.err b/test/expected/test_sql_regexp.sh_a610798fefdacd8d0179a4b17cd757d00fb731be.err
new file mode 100644
index 0000000..209f89e
--- /dev/null
+++ b/test/expected/test_sql_regexp.sh_a610798fefdacd8d0179a4b17cd757d00fb731be.err
@@ -0,0 +1,7 @@
+✘ error: “^(” is not a valid regular expression
+ reason: missing closing parenthesis
+ --> command-option:1
+ | ;SELECT * from regexp_capture('abc=def;ghi=jkl;', '^(')
+ --> pattern
+ | ^( 
+ |  ^ missing closing parenthesis 
diff --git a/test/expected/test_sql_regexp.sh_a610798fefdacd8d0179a4b17cd757d00fb731be.out b/test/expected/test_sql_regexp.sh_a610798fefdacd8d0179a4b17cd757d00fb731be.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_regexp.sh_a610798fefdacd8d0179a4b17cd757d00fb731be.out
diff --git a/test/expected/test_sql_regexp.sh_b841a0c09601e2419eeb99e85f7e286c889e4801.out b/test/expected/test_sql_regexp.sh_b841a0c09601e2419eeb99e85f7e286c889e4801.out
index 78f05ff..8ce275a 100644
--- a/test/expected/test_sql_regexp.sh_b841a0c09601e2419eeb99e85f7e286c889e4801.out
+++ b/test/expected/test_sql_regexp.sh_b841a0c09601e2419eeb99e85f7e286c889e4801.out
@@ -1,27 +1,27 @@
-log_line,log_part,log_time,log_idle_msecs,log_level,log_mark,log_comment,log_tags,log_filters,log_hostname,log_msgid,log_pid,log_pri,log_procname,log_struct,log_syslog_tag,syslog_version,match_index,content
-2,<NULL>,2022-08-16 00:32:15.000,199000,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,0,"{""value"":""com.apple.cdscheduler""}"
-2,<NULL>,2022-08-16 00:32:15.000,199000,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,1,"{""value"":"" claims selected messages.\n\tThose messages may not appear in standard system log files or in the ASL database.""}"
-5,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,0,"{""value"":""com.apple.install""}"
-5,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,1,"{""value"":"" claims selected messages.\n\tThose messages may not appear in standard system log files or in the ASL database.""}"
-8,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,0,"{""value"":""com.apple.authd""}"
-8,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,1,"{""value"":"" sharing output destination ""}"
-8,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,2,"{""value"":""/var/log/asl""}"
-8,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,3,"{""value"":"" with ASL Module ""}"
-8,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,4,"{""value"":""com.apple.asl""}"
-8,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,5,"{""value"":"".\n\tOutput parameters from ASL Module ""}"
-8,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,6,"{""value"":""com.apple.asl""}"
-8,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,7,"{""value"":"" override any specified in ASL Module ""}"
-8,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,8,"{""value"":""com.apple.authd""}"
-8,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,9,"{""value"":"".""}"
-11,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,0,"{""value"":""com.apple.authd""}"
-11,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,1,"{""value"":"" sharing output destination ""}"
-11,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,2,"{""value"":""/var/log/system.log""}"
-11,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,3,"{""value"":"" with ASL Module ""}"
-11,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,4,"{""value"":""com.apple.asl""}"
-11,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,5,"{""value"":"".\n\tOutput parameters from ASL Module ""}"
-11,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,6,"{""value"":""com.apple.asl""}"
-11,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,7,"{""value"":"" override any specified in ASL Module ""}"
-11,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,8,"{""value"":""com.apple.authd""}"
-11,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,9,"{""value"":"".""}"
-14,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,0,"{""value"":""com.apple.authd""}"
-14,<NULL>,2022-08-16 00:32:15.000,0,info,0,<NULL>,<NULL>,<NULL>,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,1,"{""value"":"" claims selected messages.\n\tThose messages may not appear in standard system log files or in the ASL database.""}"
+log_line,log_time,log_level,log_hostname,log_msgid,log_pid,log_pri,log_procname,log_struct,log_syslog_tag,syslog_version,log_part,log_idle_msecs,log_mark,log_comment,log_tags,log_annotations,log_filters,match_index,content
+2,2022-08-16 00:32:15.000,info,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,<NULL>,199000,0,<NULL>,<NULL>,<NULL>,<NULL>,0,"{""value"":""com.apple.cdscheduler""}"
+2,2022-08-16 00:32:15.000,info,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,<NULL>,199000,0,<NULL>,<NULL>,<NULL>,<NULL>,1,"{""value"":"" claims selected messages.\n\tThose messages may not appear in standard system log files or in the ASL database.""}"
+5,2022-08-16 00:32:15.000,info,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>,0,"{""value"":""com.apple.install""}"
+5,2022-08-16 00:32:15.000,info,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>,1,"{""value"":"" claims selected messages.\n\tThose messages may not appear in standard system log files or in the ASL database.""}"
+8,2022-08-16 00:32:15.000,info,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>,0,"{""value"":""com.apple.authd""}"
+8,2022-08-16 00:32:15.000,info,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>,1,"{""value"":"" sharing output destination ""}"
+8,2022-08-16 00:32:15.000,info,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>,2,"{""value"":""/var/log/asl""}"
+8,2022-08-16 00:32:15.000,info,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>,3,"{""value"":"" with ASL Module ""}"
+8,2022-08-16 00:32:15.000,info,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>,4,"{""value"":""com.apple.asl""}"
+8,2022-08-16 00:32:15.000,info,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>,5,"{""value"":"".\n\tOutput parameters from ASL Module ""}"
+8,2022-08-16 00:32:15.000,info,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>,6,"{""value"":""com.apple.asl""}"
+8,2022-08-16 00:32:15.000,info,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>,7,"{""value"":"" override any specified in ASL Module ""}"
+8,2022-08-16 00:32:15.000,info,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>,8,"{""value"":""com.apple.authd""}"
+8,2022-08-16 00:32:15.000,info,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>,9,"{""value"":"".""}"
+11,2022-08-16 00:32:15.000,info,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>,0,"{""value"":""com.apple.authd""}"
+11,2022-08-16 00:32:15.000,info,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>,1,"{""value"":"" sharing output destination ""}"
+11,2022-08-16 00:32:15.000,info,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>,2,"{""value"":""/var/log/system.log""}"
+11,2022-08-16 00:32:15.000,info,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>,3,"{""value"":"" with ASL Module ""}"
+11,2022-08-16 00:32:15.000,info,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>,4,"{""value"":""com.apple.asl""}"
+11,2022-08-16 00:32:15.000,info,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>,5,"{""value"":"".\n\tOutput parameters from ASL Module ""}"
+11,2022-08-16 00:32:15.000,info,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>,6,"{""value"":""com.apple.asl""}"
+11,2022-08-16 00:32:15.000,info,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>,7,"{""value"":"" override any specified in ASL Module ""}"
+11,2022-08-16 00:32:15.000,info,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>,8,"{""value"":""com.apple.authd""}"
+11,2022-08-16 00:32:15.000,info,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>,9,"{""value"":"".""}"
+14,2022-08-16 00:32:15.000,info,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>,0,"{""value"":""com.apple.authd""}"
+14,2022-08-16 00:32:15.000,info,Tims-Air,<NULL>,314,<NULL>,syslogd,<NULL>,syslogd[314],<NULL>,<NULL>,0,0,<NULL>,<NULL>,<NULL>,<NULL>,1,"{""value"":"" claims selected messages.\n\tThose messages may not appear in standard system log files or in the ASL database.""}"
diff --git a/test/expected/test_sql_regexp.sh_bbd1128cf61a9af8f9dc937b46217443f42e1a7a.out b/test/expected/test_sql_regexp.sh_bbd1128cf61a9af8f9dc937b46217443f42e1a7a.out
index 655ce13..43adbdc 100644
--- a/test/expected/test_sql_regexp.sh_bbd1128cf61a9af8f9dc937b46217443f42e1a7a.out
+++ b/test/expected/test_sql_regexp.sh_bbd1128cf61a9af8f9dc937b46217443f42e1a7a.out
@@ -1,2 +1,2 @@
-match_index  content 
- 0 {"key":"foo","value":"123e"} 
+match_index  content  
+ 0 {"key":"foo","value":"123e"}
diff --git a/test/expected/test_sql_regexp.sh_d61af17ff19d640ddfc879460910991825eedd05.out b/test/expected/test_sql_regexp.sh_d61af17ff19d640ddfc879460910991825eedd05.out
index 6e952fb..2d39ef5 100644
--- a/test/expected/test_sql_regexp.sh_d61af17ff19d640ddfc879460910991825eedd05.out
+++ b/test/expected/test_sql_regexp.sh_d61af17ff19d640ddfc879460910991825eedd05.out
@@ -1,2 +1,2 @@
-match_index  content 
- 0 {"col_0":"abc","col_1":"def"} 
+match_index  content  
+ 0 {"col_0":"abc","col_1":"def"}
diff --git a/test/expected/test_sql_regexp.sh_ed6e9f13f178def009ee58c2aeea8c3c70fdb580.out b/test/expected/test_sql_regexp.sh_ed6e9f13f178def009ee58c2aeea8c3c70fdb580.out
index fef8e26..ae86ce4 100644
--- a/test/expected/test_sql_regexp.sh_ed6e9f13f178def009ee58c2aeea8c3c70fdb580.out
+++ b/test/expected/test_sql_regexp.sh_ed6e9f13f178def009ee58c2aeea8c3c70fdb580.out
@@ -1,2 +1,2 @@
-match_index  content 
- 0 {"key":"foo","value":"0x123e"} 
+match_index  content  
+ 0 {"key":"foo","value":"0x123e"}
diff --git a/test/expected/test_sql_search_table.sh_1a0d872ebc492fcecb2e79a0993170d5fc771a5b.out b/test/expected/test_sql_search_table.sh_1a0d872ebc492fcecb2e79a0993170d5fc771a5b.out
index d56bc20..9a85781 100644
--- a/test/expected/test_sql_search_table.sh_1a0d872ebc492fcecb2e79a0993170d5fc771a5b.out
+++ b/test/expected/test_sql_search_table.sh_1a0d872ebc492fcecb2e79a0993170d5fc771a5b.out
@@ -1,2 +1,2 @@
-log_line log_part  log_time log_idle_msecs log_level log_mark log_comment log_tags log_filters  comp  opid  tid  user  item prc reason  req  sid  src  sub vpxa_update  line  file match_index  lro_id  entity  operation  SessionId  SessionSubId 
- 2  <NULL> 2022-06-02 11:58:12.376  182 info   0  <NULL>  <NULL>  <NULL> <NULL> e3979f6 45709 <NULL> <NULL> vpxd <NULL> <NULL> <NULL> Originator@6876 vpxLro  <NULL> <NULL> <NULL>  0 lro-846064 SessionManager vim.SessionManager.sessionIsActive 52626140-422b-6287-b4e4-344192c6a01d 523e0a4b-6e83-6bcd-9342-22502dd89866 
+log_line  log_time  log_level  comp   opid   tid   user   file   item   line  prc  reason  req   sid   src   sub  vpxa_update match_index  lro_id   entity   operation   SessionId   SessionSubId  log_part log_idle_msecs log_mark log_comment log_tags log_annotations log_filters 
+ 2 2022-06-02 11:58:12.376 info <NULL> e3979f6 45709 <NULL> <NULL> <NULL> <NULL> vpxd <NULL> <NULL> <NULL> Originator@6876 vpxLro <NULL> 0 lro-846064 SessionManager vim.SessionManager.sessionIsActive 52626140-422b-6287-b4e4-344192c6a01d 523e0a4b-6e83-6bcd-9342-22502dd89866 <NULL>  182 0 <NULL> <NULL> <NULL> <NULL>
diff --git a/test/expected/test_sql_search_table.sh_3f5f74863d065418bca5a000e6ad3d9344635164.out b/test/expected/test_sql_search_table.sh_3f5f74863d065418bca5a000e6ad3d9344635164.out
index c92cf49..20f031d 100644
--- a/test/expected/test_sql_search_table.sh_3f5f74863d065418bca5a000e6ad3d9344635164.out
+++ b/test/expected/test_sql_search_table.sh_3f5f74863d065418bca5a000e6ad3d9344635164.out
@@ -1,12 +1,12 @@
-log_line log_part  log_time log_idle_msecs log_level log_mark log_comment log_tags log_filters match_index  name 
- 2  <NULL> 2022-08-16 00:32:15.000  199000 info   0  <NULL>  <NULL>  <NULL>  0 com.apple.cdscheduler 
- 5 <NULL> 2022-08-16 00:32:15.000 0 info 0 <NULL> <NULL> <NULL> 0 com.apple.install
- 8  <NULL> 2022-08-16 00:32:15.000  0 info   0  <NULL>  <NULL>  <NULL>  0 com.apple.authd 
- 8 <NULL> 2022-08-16 00:32:15.000 0 info 0 <NULL> <NULL> <NULL> 1 com.apple.asl
- 8  <NULL> 2022-08-16 00:32:15.000  0 info   0  <NULL>  <NULL>  <NULL>  2 com.apple.asl 
- 8 <NULL> 2022-08-16 00:32:15.000 0 info 0 <NULL> <NULL> <NULL> 3 com.apple.authd
- 11  <NULL> 2022-08-16 00:32:15.000  0 info   0  <NULL>  <NULL>  <NULL>  0 com.apple.authd 
- 11 <NULL> 2022-08-16 00:32:15.000 0 info 0 <NULL> <NULL> <NULL> 1 com.apple.asl
- 11  <NULL> 2022-08-16 00:32:15.000  0 info   0  <NULL>  <NULL>  <NULL>  2 com.apple.asl 
- 11 <NULL> 2022-08-16 00:32:15.000 0 info 0 <NULL> <NULL> <NULL> 3 com.apple.authd
- 14  <NULL> 2022-08-16 00:32:15.000  0 info   0  <NULL>  <NULL>  <NULL>  0 com.apple.authd 
+log_line  log_time  log_level match_index  name  log_part log_idle_msecs log_mark log_comment log_tags log_annotations log_filters 
+ 2 2022-08-16 00:32:15.000 info 0 com.apple.cdscheduler <NULL>  199000 0 <NULL> <NULL> <NULL> <NULL>
+ 5 2022-08-16 00:32:15.000 info 0 com.apple.install <NULL>  0 0 <NULL> <NULL> <NULL> <NULL>
+ 8 2022-08-16 00:32:15.000 info   0 com.apple.authd   <NULL>  0  0  <NULL>  <NULL>  <NULL>  <NULL> 
+ 8 2022-08-16 00:32:15.000 info   1 com.apple.asl   <NULL>  0  0  <NULL>  <NULL>  <NULL>  <NULL> 
+ 8 2022-08-16 00:32:15.000 info 2 com.apple.asl <NULL>  0 0 <NULL> <NULL> <NULL> <NULL>
+ 8 2022-08-16 00:32:15.000 info 3 com.apple.authd <NULL>  0 0 <NULL> <NULL> <NULL> <NULL>
+ 11 2022-08-16 00:32:15.000 info   0 com.apple.authd   <NULL>  0  0  <NULL>  <NULL>  <NULL>  <NULL> 
+ 11 2022-08-16 00:32:15.000 info   1 com.apple.asl   <NULL>  0  0  <NULL>  <NULL>  <NULL>  <NULL> 
+ 11 2022-08-16 00:32:15.000 info 2 com.apple.asl <NULL>  0 0 <NULL> <NULL> <NULL> <NULL>
+ 11 2022-08-16 00:32:15.000 info 3 com.apple.authd <NULL>  0 0 <NULL> <NULL> <NULL> <NULL>
+ 14 2022-08-16 00:32:15.000 info   0 com.apple.authd   <NULL>  0  0  <NULL>  <NULL>  <NULL>  <NULL> 
diff --git a/test/expected/test_sql_search_table.sh_5aaae556ecb1661602f176215e28f661d3404032.out b/test/expected/test_sql_search_table.sh_5aaae556ecb1661602f176215e28f661d3404032.out
index 738eab3..ed52844 100644
--- a/test/expected/test_sql_search_table.sh_5aaae556ecb1661602f176215e28f661d3404032.out
+++ b/test/expected/test_sql_search_table.sh_5aaae556ecb1661602f176215e28f661d3404032.out
@@ -1,4 +1,4 @@
-log_line log_part  log_time log_idle_msecs log_level log_mark log_comment log_tags log_filters match_index user pid cpu_pct mem_pct vsz rss tty stat start_time cpu_time  cmd  cmd_name cmd_args 
- 0  <NULL> 2022-06-02 00:01:01.000  0 info   0  <NULL>  <NULL>  <NULL>  1 root  2  0  0  0  0 ?  S  Jun01  0:00  [kthreadd] [kthreadd]  <NULL> 
- 12  <NULL> 2022-06-02 00:02:01.000  60000 info   0  <NULL>  <NULL>  <NULL>  1 root  2  0  0  0  0 ?  S  Jun01  0:00  [kthreadd] [kthreadd]  <NULL>
- 30  <NULL> 2022-06-02 00:03:01.000  60000 info   0  <NULL>  <NULL>  <NULL>  1 root  2  0  0  0  0 ?  S  Jun01  0:00  [kthreadd] [kthreadd]  <NULL> 
+log_line  log_time  log_level match_index user  ppid  pid  cpu_pct   mem_pct   vsz   rss  tty stat start_time cpu_time maj_flt min_flt  cmd   cmd_name  cmd_args log_part log_idle_msecs log_mark log_comment log_tags log_annotations log_filters 
+ 0 2022-06-02 00:01:01.000 info 1 root <NULL> 2  0  0  0  0 ? S Jun01 0:00 <NULL> <NULL> [kthreadd] [kthreadd] <NULL> <NULL>  0 0 <NULL> <NULL> <NULL> <NULL>
+ 12 2022-06-02 00:02:01.000 info 1 root <NULL> 2  0  0  0  0 ? S Jun01 0:00 <NULL> <NULL> [kthreadd] [kthreadd] <NULL> <NULL>  60000 0 <NULL> <NULL> <NULL> <NULL>
+ 30 2022-06-02 00:03:01.000 info   1 root <NULL>  2  0  0  0  0 ?  S  Jun01  0:00   <NULL>  <NULL> [kthreadd] [kthreadd]  <NULL>  <NULL>  60000  0  <NULL>  <NULL>  <NULL>  <NULL> 
diff --git a/test/expected/test_sql_search_table.sh_df0fd242f57a96d40f466493938cda0789a094fa.out b/test/expected/test_sql_search_table.sh_df0fd242f57a96d40f466493938cda0789a094fa.out
index 326fcbd..7fa2742 100644
--- a/test/expected/test_sql_search_table.sh_df0fd242f57a96d40f466493938cda0789a094fa.out
+++ b/test/expected/test_sql_search_table.sh_df0fd242f57a96d40f466493938cda0789a094fa.out
@@ -1,24 +1,24 @@
-log_line log_part  log_time log_idle_msecs log_level log_mark log_comment log_tags log_filters match_index user pid cpu_pct mem_pct  vsz rss tty stat start_time cpu_time  cmd  cmd_name  cmd_args 
- 0  <NULL> 2022-06-02 00:01:01.000  0 info   0  <NULL>  <NULL>  <NULL>  0 root  1  0  0 158392 7792 ?  Ss  Jun01  0:14  /lib/systemd/systemd --switched-root --system --deserialize 16 /lib/systemd/systemd  --switched-root --system --deserialize 16 
- 0 <NULL> 2022-06-02 00:01:01.000 0 info 0 <NULL> <NULL> <NULL> 1 root 2 0 0 0 0 ? S Jun01 0:00 [kthreadd] [kthreadd] <NULL>
- 0  <NULL> 2022-06-02 00:01:01.000  0 info   0  <NULL>  <NULL>  <NULL>  2 root  3  0  0  0  0 ?  I<  Jun01  0:00  [rcu_gp]  [rcu_gp]  <NULL> 
- 0 <NULL> 2022-06-02 00:01:01.000 0 info 0 <NULL> <NULL> <NULL> 3 root 4 0 0 0 0 ? I< Jun01 0:00 [rcu_par_gp] [rcu_par_gp] <NULL>
- 0  <NULL> 2022-06-02 00:01:01.000  0 info   0  <NULL>  <NULL>  <NULL>  4 root  6  0  0  0  0 ?  I<  Jun01  0:00  [kworker/0:0H-kblockd]  [kworker/0:0H-kblockd] <NULL> 
- 12  <NULL> 2022-06-02 00:02:01.000  60000 info   0  <NULL>  <NULL>  <NULL>  0 root  1  0  0 158392 7792 ?  Ss  Jun01  0:14  /lib/systemd/systemd --switched-root --system --deserialize 16 /lib/systemd/systemd  --switched-root --system --deserialize 16
- 12  <NULL> 2022-06-02 00:02:01.000  60000 info   0  <NULL>  <NULL>  <NULL>  1 root  2  0  0  0  0 ?  S  Jun01  0:00  [kthreadd]  [kthreadd]  <NULL> 
- 12  <NULL> 2022-06-02 00:02:01.000  60000 info   0  <NULL> <NULL> <NULL> 2 root 3 0 0 0 0 ? I< Jun01 0:00 [rcu_gp] [rcu_gp] <NULL>
- 12  <NULL> 2022-06-02 00:02:01.000  60000 info   0  <NULL>  <NULL>  <NULL>  3 root  4  0  0  0  0 ?  I<  Jun01  0:00  [rcu_par_gp]  [rcu_par_gp]  <NULL> 
- 12  <NULL> 2022-06-02 00:02:01.000  60000 info   0  <NULL> <NULL> <NULL> 4 root 6 0 0 0 0 ? I< Jun01 0:00 [kworker/0:0H-kblockd] [kworker/0:0H-kblockd] <NULL>
- 12  <NULL> 2022-06-02 00:02:01.000  60000 info   0  <NULL>  <NULL>  <NULL>  5 root  8  0  0  0  0 ?  I<  Jun01  0:00  [mm_percpu_wq]  [mm_percpu_wq]  <NULL> 
- 12  <NULL> 2022-06-02 00:02:01.000  60000 info   0  <NULL> <NULL> <NULL> 6 root 9 0 0 0 0 ? S Jun01 0:00 [ksoftirqd/0] [ksoftirqd/0] <NULL>
- 12  <NULL> 2022-06-02 00:02:01.000  60000 info   0  <NULL>  <NULL>  <NULL>  7 root  10  0  0  0  0 ?  I  Jun01  0:23  [rcu_sched]  [rcu_sched]  <NULL> 
- 12  <NULL> 2022-06-02 00:02:01.000  60000 info   0  <NULL> <NULL> <NULL> 8 root 11 0 0 0 0 ? I Jun01 0:00 [rcu_bh] [rcu_bh] <NULL>
- 12  <NULL> 2022-06-02 00:02:01.000  60000 info   0  <NULL>  <NULL>  <NULL>  9 root  12  0  0  0  0 ?  S  Jun01  0:00  [migration/0]  [migration/0]  <NULL> 
- 12  <NULL> 2022-06-02 00:02:01.000  60000 info   0  <NULL> <NULL> <NULL> 10 root 14 0 0 0 0 ? S Jun01 0:00 [cpuhp/0] [cpuhp/0] <NULL>
- 30  <NULL> 2022-06-02 00:03:01.000  60000 info   0  <NULL>  <NULL>  <NULL>  0 root  1  0  0 158392 7792 ?  Ss  Jun01  0:14  /lib/systemd/systemd --switched-root --system --deserialize 16 /lib/systemd/systemd  --switched-root --system --deserialize 16 
- 30  <NULL> 2022-06-02 00:03:01.000  60000 info   0  <NULL> <NULL> <NULL> 1 root 2 0 0 0 0 ? S Jun01 0:00 [kthreadd] [kthreadd] <NULL>
- 30  <NULL> 2022-06-02 00:03:01.000  60000 info   0  <NULL>  <NULL>  <NULL>  2 root  3  0  0  0  0 ?  I<  Jun01  0:00  [rcu_gp]  [rcu_gp]  <NULL> 
- 30  <NULL> 2022-06-02 00:03:01.000  60000 info   0  <NULL> <NULL> <NULL> 3 root 4 0 0 0 0 ? I< Jun01 0:00 [rcu_par_gp] [rcu_par_gp] <NULL>
- 30  <NULL> 2022-06-02 00:03:01.000  60000 info   0  <NULL>  <NULL>  <NULL>  4 root  6  0  0  0  0 ?  I<  Jun01  0:00  [kworker/0:0H-kblockd]  [kworker/0:0H-kblockd] <NULL> 
- 30  <NULL> 2022-06-02 00:03:01.000  60000 info   0  <NULL> <NULL> <NULL> 5 root 8 0 0 0 0 ? I< Jun01 0:00 [mm_percpu_wq] [mm_percpu_wq] <NULL>
- 30  <NULL> 2022-06-02 00:03:01.000  60000 info   0  <NULL>  <NULL>  <NULL>  6 root  9  0  0  0  0 ?  S  Jun01  0:00  [ksoftirqd/0]  [ksoftirqd/0]  <NULL> 
+log_line  log_time  log_level match_index user  ppid  pid  cpu_pct   mem_pct   vsz   rss  tty stat start_time cpu_time maj_flt min_flt  cmd   cmd_name   cmd_args  log_part log_idle_msecs log_mark log_comment log_tags log_annotations log_filters 
+ 0 2022-06-02 00:01:01.000 info 0 root <NULL> 1  0  0  158392  7792 ? Ss Jun01 0:14 <NULL> <NULL> /lib/systemd/systemd --switched-root --system --deserialize 16 /lib/systemd/systemd --switched-root --system --deserialize 16 <NULL>  0 0 <NULL> <NULL> <NULL> <NULL>
+ 0 2022-06-02 00:01:01.000 info 1 root <NULL> 2  0  0  0  0 ? S Jun01 0:00 <NULL> <NULL> [kthreadd] [kthreadd] <NULL> <NULL>  0 0 <NULL> <NULL> <NULL> <NULL>
+ 0 2022-06-02 00:01:01.000 info   2 root <NULL>  3  0  0  0  0 ?  I<  Jun01  0:00   <NULL>  <NULL> [rcu_gp]  [rcu_gp]  <NULL>   <NULL>  0  0  <NULL>  <NULL>  <NULL>  <NULL> 
+ 0 2022-06-02 00:01:01.000 info   3 root <NULL>  4  0  0  0  0 ?  I<  Jun01  0:00   <NULL>  <NULL> [rcu_par_gp]  [rcu_par_gp]  <NULL>   <NULL>  0  0  <NULL>  <NULL>  <NULL>  <NULL> 
+ 0 2022-06-02 00:01:01.000 info 4 root <NULL> 6  0  0  0  0 ? I< Jun01 0:00 <NULL> <NULL> [kworker/0:0H-kblockd] [kworker/0:0H-kblockd] <NULL> <NULL>  0 0 <NULL> <NULL> <NULL> <NULL>
+ 12 2022-06-02 00:02:01.000 info 0 root <NULL> 1  0  0  158392  7792 ? Ss Jun01 0:14 <NULL> <NULL> /lib/systemd/systemd --switched-root --system --deserialize 16 /lib/systemd/systemd --switched-root --system --deserialize 16 <NULL>  60000 0 <NULL> <NULL> <NULL> <NULL>
+ 12 2022-06-02 00:02:01.000 info   1 root <NULL>  2  0  0  0  0 ?  S  Jun01  0:00   <NULL>  <NULL> [kthreadd]  [kthreadd]  <NULL>   <NULL>  60000  0  <NULL>  <NULL>  <NULL>  <NULL> 
+ 12 2022-06-02 00:02:01.000 info   2 root <NULL>  3  0  0  0  0 ?  I<  Jun01  0:00   <NULL>  <NULL> [rcu_gp]  [rcu_gp]  <NULL>   <NULL>  60000  0  <NULL>  <NULL>  <NULL>  <NULL> 
+ 12 2022-06-02 00:02:01.000 info 3 root <NULL> 4  0  0  0  0 ? I< Jun01 0:00 <NULL> <NULL> [rcu_par_gp] [rcu_par_gp] <NULL> <NULL>  60000 0 <NULL> <NULL> <NULL> <NULL>
+ 12 2022-06-02 00:02:01.000 info 4 root <NULL> 6  0  0  0  0 ? I< Jun01 0:00 <NULL> <NULL> [kworker/0:0H-kblockd] [kworker/0:0H-kblockd] <NULL> <NULL>  60000 0 <NULL> <NULL> <NULL> <NULL>
+ 12 2022-06-02 00:02:01.000 info   5 root <NULL>  8  0  0  0  0 ?  I<  Jun01  0:00   <NULL>  <NULL> [mm_percpu_wq]  [mm_percpu_wq]  <NULL>   <NULL>  60000  0  <NULL>  <NULL>  <NULL>  <NULL> 
+ 12 2022-06-02 00:02:01.000 info   6 root <NULL>  9  0  0  0  0 ?  S  Jun01  0:00   <NULL>  <NULL> [ksoftirqd/0]  [ksoftirqd/0]  <NULL>   <NULL>  60000  0  <NULL>  <NULL>  <NULL>  <NULL> 
+ 12 2022-06-02 00:02:01.000 info 7 root <NULL> 10  0  0  0  0 ? I Jun01 0:23 <NULL> <NULL> [rcu_sched] [rcu_sched] <NULL> <NULL>  60000 0 <NULL> <NULL> <NULL> <NULL>
+ 12 2022-06-02 00:02:01.000 info 8 root <NULL> 11  0  0  0  0 ? I Jun01 0:00 <NULL> <NULL> [rcu_bh] [rcu_bh] <NULL> <NULL>  60000 0 <NULL> <NULL> <NULL> <NULL>
+ 12 2022-06-02 00:02:01.000 info   9 root <NULL>  12  0  0  0  0 ?  S  Jun01  0:00   <NULL>  <NULL> [migration/0]  [migration/0]  <NULL>   <NULL>  60000  0  <NULL>  <NULL>  <NULL>  <NULL> 
+ 12 2022-06-02 00:02:01.000 info   10 root <NULL>  14  0  0  0  0 ?  S  Jun01  0:00   <NULL>  <NULL> [cpuhp/0]  [cpuhp/0]  <NULL>   <NULL>  60000  0  <NULL>  <NULL>  <NULL>  <NULL> 
+ 30 2022-06-02 00:03:01.000 info 0 root <NULL> 1  0  0  158392  7792 ? Ss Jun01 0:14 <NULL> <NULL> /lib/systemd/systemd --switched-root --system --deserialize 16 /lib/systemd/systemd --switched-root --system --deserialize 16 <NULL>  60000 0 <NULL> <NULL> <NULL> <NULL>
+ 30 2022-06-02 00:03:01.000 info 1 root <NULL> 2  0  0  0  0 ? S Jun01 0:00 <NULL> <NULL> [kthreadd] [kthreadd] <NULL> <NULL>  60000 0 <NULL> <NULL> <NULL> <NULL>
+ 30 2022-06-02 00:03:01.000 info   2 root <NULL>  3  0  0  0  0 ?  I<  Jun01  0:00   <NULL>  <NULL> [rcu_gp]  [rcu_gp]  <NULL>   <NULL>  60000  0  <NULL>  <NULL>  <NULL>  <NULL> 
+ 30 2022-06-02 00:03:01.000 info   3 root <NULL>  4  0  0  0  0 ?  I<  Jun01  0:00   <NULL>  <NULL> [rcu_par_gp]  [rcu_par_gp]  <NULL>   <NULL>  60000  0  <NULL>  <NULL>  <NULL>  <NULL> 
+ 30 2022-06-02 00:03:01.000 info 4 root <NULL> 6  0  0  0  0 ? I< Jun01 0:00 <NULL> <NULL> [kworker/0:0H-kblockd] [kworker/0:0H-kblockd] <NULL> <NULL>  60000 0 <NULL> <NULL> <NULL> <NULL>
+ 30 2022-06-02 00:03:01.000 info 5 root <NULL> 8  0  0  0  0 ? I< Jun01 0:00 <NULL> <NULL> [mm_percpu_wq] [mm_percpu_wq] <NULL> <NULL>  60000 0 <NULL> <NULL> <NULL> <NULL>
+ 30 2022-06-02 00:03:01.000 info   6 root <NULL>  9  0  0  0  0 ?  S  Jun01  0:00   <NULL>  <NULL> [ksoftirqd/0]  [ksoftirqd/0]  <NULL>   <NULL>  60000  0  <NULL>  <NULL>  <NULL>  <NULL> 
diff --git a/test/expected/test_sql_search_table.sh_ef9373a76853f345d06234f6e0fe11b5d40da27b.out b/test/expected/test_sql_search_table.sh_ef9373a76853f345d06234f6e0fe11b5d40da27b.out
index 767d785..263723f 100644
--- a/test/expected/test_sql_search_table.sh_ef9373a76853f345d06234f6e0fe11b5d40da27b.out
+++ b/test/expected/test_sql_search_table.sh_ef9373a76853f345d06234f6e0fe11b5d40da27b.out
@@ -1,6 +1,6 @@
-log_line log_part  log_time log_idle_msecs log_level log_mark log_comment log_tags log_filters  comp  opid  tid  user  item prc reason  req  sid  src  sub vpxa_update  line  file match_index  lro_id  entity  operation  SessionId  SessionSubId  log_body 
- 0  <NULL> 2022-06-02 11:58:12.193  0 info   0  <NULL>  <NULL>  <NULL> <NULL> 7e1280cf  45715 <NULL> <NULL> vpxd <NULL> <NULL> <NULL> Originator@6876 vpxLro  <NULL> <NULL> <NULL>  0 lro-846063 SessionManager  vim.SessionManager.sessionIsActive  528e6e0c-246d-58b5-3234-278c6e0c5d0d 52c289ac-2563-48d5-8a8e-f178da022c0d [VpxLRO] -- BEGIN lro-846063 -- SessionManager -- vim.Sessio⋯8b5-3234-278c6e0c5d0d(52c289ac-2563-48d5-8a8e-f178da022c0d) 
- 2  <NULL> 2022-06-02 11:58:12.376  182 info   0  <NULL>  <NULL>  <NULL> <NULL> e3979f6  45709 <NULL> <NULL> vpxd <NULL> <NULL> <NULL> Originator@6876 vpxLro  <NULL> <NULL> <NULL>  0 lro-846064 SessionManager  vim.SessionManager.sessionIsActive  52626140-422b-6287-b4e4-344192c6a01d 523e0a4b-6e83-6bcd-9342-22502dd89866 [VpxLRO] -- BEGIN lro-846064 -- SessionManager -- vim.Sessio⋯287-b4e4-344192c6a01d(523e0a4b-6e83-6bcd-9342-22502dd89866)
- 4  <NULL> 2022-06-02 11:58:12.623  246 info   0  <NULL>  <NULL>  <NULL> <NULL> l3wrhr4o-cbf-h5:70001034-60 47524 <NULL> <NULL> vpxd <NULL> <NULL> <NULL> Originator@6876 vpxLro  <NULL> <NULL> <NULL>  0 lro-846066 ChangeLogCollector vim.cdc.ChangeLogCollector.waitForChanges 526861fc-0c28-1930-ae5e-d8c2772bf8c2 52a7a308-9646-c054-f1e7-16131c1a7db6 [VpxLRO] -- BEGIN lro-846066 -- ChangeLogCollector -- vim.c⋯1930-ae5e-d8c2772bf8c2(52a7a308-9646-c054-f1e7-16131c1a7db6) 
- 6  <NULL> 2022-06-02 11:58:12.736  113 info   0  <NULL>  <NULL>  <NULL> <NULL> 499b440  48432 <NULL> <NULL> vpxd <NULL> <NULL> <NULL> Originator@6876 vpxLro  <NULL> <NULL> <NULL>  0 lro-846067 SessionManager vim.SessionManager.sessionIsActive 521fe9f6-d061-11a2-ac86-badb3c071373 524cba9b-2cc4-9b70-32e4-421452a404d7 [VpxLRO] -- BEGIN lro-846067 -- SessionManager -- vim.Sessio⋯1a2-ac86-badb3c071373(524cba9b-2cc4-9b70-32e4-421452a404d7)
- 8  <NULL> 2022-06-02 11:58:12.740  4 info   0  <NULL>  <NULL>  <NULL> <NULL> 55a419df  48035 <NULL> <NULL> vpxd <NULL> <NULL> <NULL> Originator@6876 vpxLro  <NULL> <NULL> <NULL>  0 lro-846068 SessionManager  vim.SessionManager.sessionIsActive  52585600-b0bc-76b1-c4d5-4d7708671c5e 523b68ba-e312-9909-a3ca-39cc86aaf206 [VpxLRO] -- BEGIN lro-846068 -- SessionManager -- vim.Sessio⋯6b1-c4d5-4d7708671c5e(523b68ba-e312-9909-a3ca-39cc86aaf206) 
+log_line  log_time  log_level  comp   opid   tid   user   file   item   line  prc  reason  req   sid   src   sub  vpxa_update match_index  lro_id   entity   operation   SessionId   SessionSubId  log_part log_idle_msecs log_mark log_comment log_tags log_annotations log_filters  log_body  
+ 0 2022-06-02 11:58:12.193 info <NULL> 7e1280cf 45715 <NULL> <NULL> <NULL> <NULL> vpxd <NULL> <NULL> <NULL> Originator@6876 vpxLro <NULL> 0 lro-846063 SessionManager vim.SessionManager.sessionIsActive 528e6e0c-246d-58b5-3234-278c6e0c5d0d 52c289ac-2563-48d5-8a8e-f178da022c0d <NULL>  0 0 <NULL> <NULL> <NULL> <NULL> [VpxLRO] -- BEGIN lro-846063 -- SessionManager -- vim.Sessio⋯8b5-3234-278c6e0c5d0d(52c289ac-2563-48d5-8a8e-f178da022c0d)
+ 2 2022-06-02 11:58:12.376 info <NULL> e3979f6 45709 <NULL> <NULL> <NULL> <NULL> vpxd <NULL> <NULL> <NULL> Originator@6876 vpxLro <NULL> 0 lro-846064 SessionManager vim.SessionManager.sessionIsActive 52626140-422b-6287-b4e4-344192c6a01d 523e0a4b-6e83-6bcd-9342-22502dd89866 <NULL>   182 0 <NULL> <NULL> <NULL> <NULL> [VpxLRO] -- BEGIN lro-846064 -- SessionManager -- vim.Sessio⋯287-b4e4-344192c6a01d(523e0a4b-6e83-6bcd-9342-22502dd89866)
+ 4 2022-06-02 11:58:12.623 info  <NULL> l3wrhr4o-cbf-h5:70001034-60 47524 <NULL> <NULL> <NULL> <NULL> vpxd <NULL> <NULL> <NULL> Originator@6876 vpxLro  <NULL>  0 lro-846066 ChangeLogCollector vim.cdc.ChangeLogCollector.waitForChanges 526861fc-0c28-1930-ae5e-d8c2772bf8c2 52a7a308-9646-c054-f1e7-16131c1a7db6  <NULL>  246  0  <NULL>  <NULL>  <NULL>  <NULL> [VpxLRO] -- BEGIN lro-846066 -- ChangeLogCollector -- vim.c⋯1930-ae5e-d8c2772bf8c2(52a7a308-9646-c054-f1e7-16131c1a7db6) 
+ 6 2022-06-02 11:58:12.736 info  <NULL> 499b440  48432 <NULL> <NULL> <NULL> <NULL> vpxd <NULL> <NULL> <NULL> Originator@6876 vpxLro  <NULL>  0 lro-846067 SessionManager  vim.SessionManager.sessionIsActive  521fe9f6-d061-11a2-ac86-badb3c071373 524cba9b-2cc4-9b70-32e4-421452a404d7  <NULL>   113  0  <NULL>  <NULL>  <NULL>  <NULL> [VpxLRO] -- BEGIN lro-846067 -- SessionManager -- vim.Sessio⋯1a2-ac86-badb3c071373(524cba9b-2cc4-9b70-32e4-421452a404d7) 
+ 8 2022-06-02 11:58:12.740 info <NULL> 55a419df 48035 <NULL> <NULL> <NULL> <NULL> vpxd <NULL> <NULL> <NULL> Originator@6876 vpxLro <NULL> 0 lro-846068 SessionManager vim.SessionManager.sessionIsActive 52585600-b0bc-76b1-c4d5-4d7708671c5e 523b68ba-e312-9909-a3ca-39cc86aaf206 <NULL>   4 0 <NULL> <NULL> <NULL> <NULL> [VpxLRO] -- BEGIN lro-846068 -- SessionManager -- vim.Sessio⋯6b1-c4d5-4d7708671c5e(523b68ba-e312-9909-a3ca-39cc86aaf206)
diff --git a/test/expected/test_sql_str_func.sh_00363f89638cb968584afc1ca0a4f52b2cf7a2ae.err b/test/expected/test_sql_str_func.sh_00363f89638cb968584afc1ca0a4f52b2cf7a2ae.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_00363f89638cb968584afc1ca0a4f52b2cf7a2ae.err
diff --git a/test/expected/test_sql_str_func.sh_00363f89638cb968584afc1ca0a4f52b2cf7a2ae.out b/test/expected/test_sql_str_func.sh_00363f89638cb968584afc1ca0a4f52b2cf7a2ae.out
new file mode 100644
index 0000000..2bc4087
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_00363f89638cb968584afc1ca0a4f52b2cf7a2ae.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column parse_url('https://example.com/sea%26rch?flag&flag2&=def&flag3=abc+def#frag1%20space'): {"scheme":"https","username":null,"password":null,"host":"example.com","port":null,"path":"/sea&rch","query":"flag&flag2&=def&flag3=abc+def","parameters":{"flag":null,"flag2":null,"":"def","flag3":"abc def"},"fragment":"frag1 space"}
diff --git a/test/expected/test_sql_str_func.sh_0947bfe7ec626eaa0409a45b10fcbb634fb12eb7.out b/test/expected/test_sql_str_func.sh_0947bfe7ec626eaa0409a45b10fcbb634fb12eb7.out
index e144653..49ed7e2 100644
--- a/test/expected/test_sql_str_func.sh_0947bfe7ec626eaa0409a45b10fcbb634fb12eb7.out
+++ b/test/expected/test_sql_str_func.sh_0947bfe7ec626eaa0409a45b10fcbb634fb12eb7.out
@@ -1,2 +1,2 @@
Row 0:
- Column parse_url('https://example.com/'): {"scheme":"https","user":null,"password":null,"host":"example.com","port":null,"path":"/","query":null,"parameters":null,"fragment":null}
+ Column parse_url('https://example.com/'): {"scheme":"https","username":null,"password":null,"host":"example.com","port":null,"path":"/","query":null,"parameters":null,"fragment":null}
diff --git a/test/expected/test_sql_str_func.sh_0db1c1b406ba6ef2dadcbe90a3fdbe794a664eb5.err b/test/expected/test_sql_str_func.sh_0db1c1b406ba6ef2dadcbe90a3fdbe794a664eb5.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_0db1c1b406ba6ef2dadcbe90a3fdbe794a664eb5.err
diff --git a/test/expected/test_sql_str_func.sh_0db1c1b406ba6ef2dadcbe90a3fdbe794a664eb5.out b/test/expected/test_sql_str_func.sh_0db1c1b406ba6ef2dadcbe90a3fdbe794a664eb5.out
new file mode 100644
index 0000000..bda6691
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_0db1c1b406ba6ef2dadcbe90a3fdbe794a664eb5.out
@@ -0,0 +1,2 @@
+humanize_id('foo') humanize_id('bar') 
+foo bar
diff --git a/test/expected/test_sql_str_func.sh_11d458fdadd00df1239a0eeaac049abb49ed212d.out b/test/expected/test_sql_str_func.sh_11d458fdadd00df1239a0eeaac049abb49ed212d.out
index eea58f2..7d625dd 100644
--- a/test/expected/test_sql_str_func.sh_11d458fdadd00df1239a0eeaac049abb49ed212d.out
+++ b/test/expected/test_sql_str_func.sh_11d458fdadd00df1239a0eeaac049abb49ed212d.out
@@ -1,198 +1,198 @@
-anonymize(bro_id_resp_h)
+anonymize(bro_id_resp_h) 
10.0.0.1
10.0.0.2
+10.0.0.2 
+10.0.0.2 
10.0.0.2
10.0.0.2
-10.0.0.2
-10.0.0.2
-10.0.0.2
-10.0.0.3
+10.0.0.2 
+10.0.0.3 
10.0.0.4
10.0.0.1
-10.0.0.4
-10.0.0.4
+10.0.0.4 
+10.0.0.4 
10.0.0.5
10.0.0.4
-10.0.0.4
-10.0.0.1
+10.0.0.4 
+10.0.0.1 
10.0.0.6
10.0.0.4
-10.0.0.7
-10.0.0.8
-10.0.0.8
+10.0.0.7 
+10.0.0.8 
10.0.0.8
10.0.0.8
+10.0.0.8 
+10.0.0.8 
10.0.0.8
10.0.0.8
-10.0.0.8
-10.0.0.8
-10.0.0.9
+10.0.0.8 
+10.0.0.9 
10.0.0.10
10.0.0.5
+10.0.0.11 
+10.0.0.11 
10.0.0.11
10.0.0.11
-10.0.0.11
-10.0.0.11
-10.0.0.11
-10.0.0.11
+10.0.0.11 
+10.0.0.11 
10.0.0.5
10.0.0.11
+10.0.0.11 
+10.0.0.11 
10.0.0.11
10.0.0.11
+10.0.0.11 
+10.0.0.11 
10.0.0.11
10.0.0.11
-10.0.0.11
-10.0.0.11
-10.0.0.11
-10.0.0.11
-10.0.0.11
-10.0.0.5
+10.0.0.11 
+10.0.0.5 
10.0.0.10
10.0.0.6
-10.0.0.12
-10.0.0.1
+10.0.0.12 
+10.0.0.1 
10.0.0.1
10.0.0.6
-10.0.0.11
-10.0.0.11
+10.0.0.11 
+10.0.0.11 
10.0.0.13
10.0.0.6
-10.0.0.11
-10.0.0.11
+10.0.0.11 
+10.0.0.11 
10.0.0.11
10.0.0.13
+10.0.0.6 
+10.0.0.6 
10.0.0.6
10.0.0.6
+10.0.0.6 
+10.0.0.6 
10.0.0.6
10.0.0.6
-10.0.0.6
-10.0.0.6
-10.0.0.6
-10.0.0.6
-10.0.0.14
-10.0.0.6
+10.0.0.14 
+10.0.0.6 
10.0.0.14
10.0.0.15
-10.0.0.16
-10.0.0.6
+10.0.0.16 
+10.0.0.6 
10.0.0.16
10.0.0.17
-10.0.0.5
-10.0.0.1
+10.0.0.5 
+10.0.0.1 
10.0.0.17
10.0.0.15
-10.0.0.17
-10.0.0.18
+10.0.0.17 
+10.0.0.18 
10.0.0.18
10.0.0.10
-10.0.0.5
-10.0.0.11
-10.0.0.11
-10.0.0.11
-10.0.0.11
-10.0.0.11
+10.0.0.5 
+10.0.0.11 
10.0.0.11
10.0.0.11
+10.0.0.11 
+10.0.0.11 
10.0.0.11
10.0.0.11
+10.0.0.11 
+10.0.0.11 
10.0.0.18
10.0.0.11
-10.0.0.11
-10.0.0.11
+10.0.0.11 
+10.0.0.11 
10.0.0.18
10.0.0.18
+10.0.0.18 
+10.0.0.19 
10.0.0.18
10.0.0.19
-10.0.0.18
-10.0.0.19
-10.0.0.19
-10.0.0.19
-10.0.0.19
-10.0.0.19
+10.0.0.19 
+10.0.0.19 
10.0.0.19
10.0.0.19
+10.0.0.19 
+10.0.0.19 
10.0.0.19
10.0.0.20
-10.0.0.20
-10.0.0.21
+10.0.0.20 
+10.0.0.21 
10.0.0.18
10.0.0.18
-10.0.0.22
-10.0.0.6
-10.0.0.5
-10.0.0.5
+10.0.0.22 
+10.0.0.6 
10.0.0.5
10.0.0.5
+10.0.0.5 
+10.0.0.5 
10.0.0.6
10.0.0.23
-10.0.0.24
-10.0.0.23
-10.0.0.23
-10.0.0.23
-10.0.0.23
-10.0.0.23
-10.0.0.23
-10.0.0.23
+10.0.0.24 
+10.0.0.23 
10.0.0.23
10.0.0.23
+10.0.0.23 
+10.0.0.23 
10.0.0.23
10.0.0.23
+10.0.0.23 
+10.0.0.23 
10.0.0.23
10.0.0.23
+10.0.0.23 
+10.0.0.23 
10.0.0.23
10.0.0.24
-10.0.0.24
-10.0.0.24
+10.0.0.24 
+10.0.0.24 
10.0.0.24
10.0.0.25
-10.0.0.26
-10.0.0.27
-10.0.0.23
+10.0.0.26 
+10.0.0.27 
10.0.0.23
10.0.0.23
-10.0.0.25
+10.0.0.23 
+10.0.0.25 
10.0.0.26
10.0.0.24
-10.0.0.24
-10.0.0.27
+10.0.0.24 
+10.0.0.27 
10.0.0.23
10.0.0.25
-10.0.0.26
-10.0.0.24
+10.0.0.26 
+10.0.0.24 
10.0.0.24
10.0.0.27
-10.0.0.25
-10.0.0.26
+10.0.0.25 
+10.0.0.26 
10.0.0.24
10.0.0.24
-10.0.0.27
-10.0.0.28
+10.0.0.27 
+10.0.0.28 
10.0.0.23
10.0.0.25
-10.0.0.24
-10.0.0.24
+10.0.0.24 
+10.0.0.24 
10.0.0.27
10.0.0.26
-10.0.0.23
-10.0.0.25
+10.0.0.23 
+10.0.0.25 
10.0.0.26
10.0.0.24
-10.0.0.24
-10.0.0.27
-10.0.0.23
-10.0.0.23
-10.0.0.23
+10.0.0.24 
+10.0.0.27 
10.0.0.23
10.0.0.23
+10.0.0.23 
+10.0.0.23 
10.0.0.23
10.0.0.23
+10.0.0.23 
+10.0.0.23 
10.0.0.23
10.0.0.23
-10.0.0.23
-10.0.0.27
-10.0.0.23
+10.0.0.27 
+10.0.0.23 
10.0.0.25
10.0.0.24
-10.0.0.24
-10.0.0.27
+10.0.0.24 
+10.0.0.27 
10.0.0.26
diff --git a/test/expected/test_sql_str_func.sh_1a1e07b6f72bce5402037761fa8afd66c05b4c34.err b/test/expected/test_sql_str_func.sh_1a1e07b6f72bce5402037761fa8afd66c05b4c34.err
new file mode 100644
index 0000000..618c731
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_1a1e07b6f72bce5402037761fa8afd66c05b4c34.err
@@ -0,0 +1 @@
+error: sqlite3_exec failed -- lnav-error:{"level":"error","message":{"str":"unexpected JSON value","attrs":[]},"reason":{"str":"","attrs":[]},"snippets":[{"source":"arg","line":1,"content":{"str":"123","attrs":[{"start":0,"end":-1,"type":"role","value":42}]}}],"notes":[],"help":{"str":"Available Properties\n scheme \n username \n password \n host \n port \n path \n query \n parameters/ \n fragment","attrs":[{"start":0,"end":20,"type":"role","value":64},{"start":23,"end":29,"type":"role","value":49},{"start":33,"end":41,"type":"role","value":49},{"start":45,"end":53,"type":"role","value":49},{"start":57,"end":61,"type":"role","value":49},{"start":65,"end":69,"type":"role","value":49},{"start":73,"end":77,"type":"role","value":49},{"start":81,"end":86,"type":"role","value":49},{"start":90,"end":100,"type":"role","value":49},{"start":100,"end":101,"type":"role","value":49},{"start":105,"end":113,"type":"role","value":49}]}}
diff --git a/test/expected/test_sql_str_func.sh_1a1e07b6f72bce5402037761fa8afd66c05b4c34.out b/test/expected/test_sql_str_func.sh_1a1e07b6f72bce5402037761fa8afd66c05b4c34.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_1a1e07b6f72bce5402037761fa8afd66c05b4c34.out
diff --git a/test/expected/test_sql_str_func.sh_3855d2cc0ab29171cae8e722f130adec25eae36e.err b/test/expected/test_sql_str_func.sh_3855d2cc0ab29171cae8e722f130adec25eae36e.err
deleted file mode 100644
index e3d40ab..0000000
--- a/test/expected/test_sql_str_func.sh_3855d2cc0ab29171cae8e722f130adec25eae36e.err
+++ /dev/null
@@ -1 +0,0 @@
-error: sqlite3_exec failed -- lnav-error:{"level":"error","message":{"str":"invalid URL: “https://bad@[fe::”","attrs":[]},"reason":{"str":"Port number was not a decimal number between 0 and 65535","attrs":[]},"snippets":[],"help":{"str":"","attrs":[]}}
diff --git a/test/expected/test_sql_str_func.sh_51766b600fd158a9e0677f6b0fa31b83537b2e5b.out b/test/expected/test_sql_str_func.sh_51766b600fd158a9e0677f6b0fa31b83537b2e5b.out
index 061b9ed..5576c1f 100644
--- a/test/expected/test_sql_str_func.sh_51766b600fd158a9e0677f6b0fa31b83537b2e5b.out
+++ b/test/expected/test_sql_str_func.sh_51766b600fd158a9e0677f6b0fa31b83537b2e5b.out
@@ -1,2 +1,2 @@
Row 0:
- Column parse_url('https://example.com/search?flag&flag2&=def'): {"scheme":"https","user":null,"password":null,"host":"example.com","port":null,"path":"/search","query":"flag&flag2&=def","parameters":{"flag":null,"flag2":null,"":"def"},"fragment":null}
+ Column parse_url('https://example.com/search?flag&flag2&=def'): {"scheme":"https","username":null,"password":null,"host":"example.com","port":null,"path":"/search","query":"flag&flag2&=def","parameters":{"flag":null,"flag2":null,"":"def"},"fragment":null}
diff --git a/test/expected/test_sql_str_func.sh_57fc889eefb98571ecf3892ad670646613bf13a3.err b/test/expected/test_sql_str_func.sh_57fc889eefb98571ecf3892ad670646613bf13a3.err
new file mode 100644
index 0000000..306ed4b
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_57fc889eefb98571ecf3892ad670646613bf13a3.err
@@ -0,0 +1 @@
+error: sqlite3_exec failed -- lnav-error:{"level":"warning","message":{"str":"unexpected value for property “/unknown”","attrs":[{"start":33,"end":41,"type":"role","value":49}]},"reason":{"str":"","attrs":[]},"snippets":[{"source":"arg","line":1,"content":{"str":"{\"unknown\":\"abc\"}","attrs":[{"start":0,"end":-1,"type":"role","value":42}]}}],"notes":[],"help":{"str":"Available Properties\n scheme \n username \n password \n host \n port \n path \n query \n parameters/ \n fragment","attrs":[{"start":0,"end":20,"type":"role","value":64},{"start":23,"end":29,"type":"role","value":49},{"start":33,"end":41,"type":"role","value":49},{"start":45,"end":53,"type":"role","value":49},{"start":57,"end":61,"type":"role","value":49},{"start":65,"end":69,"type":"role","value":49},{"start":73,"end":77,"type":"role","value":49},{"start":81,"end":86,"type":"role","value":49},{"start":90,"end":100,"type":"role","value":49},{"start":100,"end":101,"type":"role","value":49},{"start":105,"end":113,"type":"role","value":49}]}}
diff --git a/test/expected/test_sql_str_func.sh_57fc889eefb98571ecf3892ad670646613bf13a3.out b/test/expected/test_sql_str_func.sh_57fc889eefb98571ecf3892ad670646613bf13a3.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_57fc889eefb98571ecf3892ad670646613bf13a3.out
diff --git a/test/expected/test_sql_str_func.sh_68860c50e91cd6c1f2004ee0414a6e930ed42c87.err b/test/expected/test_sql_str_func.sh_68860c50e91cd6c1f2004ee0414a6e930ed42c87.err
new file mode 100644
index 0000000..66d898c
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_68860c50e91cd6c1f2004ee0414a6e930ed42c87.err
@@ -0,0 +1 @@
+error: sqlite3_exec failed -- lnav-error:{"level":"warning","message":{"str":"unexpected value for property “/#”","attrs":[{"start":33,"end":35,"type":"role","value":49}]},"reason":{"str":"","attrs":[]},"snippets":[{"source":"arg","line":1,"content":{"str":"[1, 2, 3]","attrs":[{"start":0,"end":-1,"type":"role","value":42}]}}],"notes":[],"help":{"str":"Available Properties\n scheme \n username \n password \n host \n port \n path \n query \n parameters/ \n fragment","attrs":[{"start":0,"end":20,"type":"role","value":64},{"start":23,"end":29,"type":"role","value":49},{"start":33,"end":41,"type":"role","value":49},{"start":45,"end":53,"type":"role","value":49},{"start":57,"end":61,"type":"role","value":49},{"start":65,"end":69,"type":"role","value":49},{"start":73,"end":77,"type":"role","value":49},{"start":81,"end":86,"type":"role","value":49},{"start":90,"end":100,"type":"role","value":49},{"start":100,"end":101,"type":"role","value":49},{"start":105,"end":113,"type":"role","value":49}]}}
diff --git a/test/expected/test_sql_str_func.sh_68860c50e91cd6c1f2004ee0414a6e930ed42c87.out b/test/expected/test_sql_str_func.sh_68860c50e91cd6c1f2004ee0414a6e930ed42c87.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_68860c50e91cd6c1f2004ee0414a6e930ed42c87.out
diff --git a/test/expected/test_sql_str_func.sh_6ac7ab1f90c064944ff66bef5974f050c8227d4b.err b/test/expected/test_sql_str_func.sh_6ac7ab1f90c064944ff66bef5974f050c8227d4b.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_6ac7ab1f90c064944ff66bef5974f050c8227d4b.err
diff --git a/test/expected/test_sql_str_func.sh_6ac7ab1f90c064944ff66bef5974f050c8227d4b.out b/test/expected/test_sql_str_func.sh_6ac7ab1f90c064944ff66bef5974f050c8227d4b.out
new file mode 100644
index 0000000..a873544
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_6ac7ab1f90c064944ff66bef5974f050c8227d4b.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column encode('hi' || char(10), 'hex'): 68690a
diff --git a/test/expected/test_sql_str_func.sh_6ff984d8ed3e5099376d19f0dd20d5fd1ed42494.out b/test/expected/test_sql_str_func.sh_6ff984d8ed3e5099376d19f0dd20d5fd1ed42494.out
index d1dcc93..0a56fcc 100644
--- a/test/expected/test_sql_str_func.sh_6ff984d8ed3e5099376d19f0dd20d5fd1ed42494.out
+++ b/test/expected/test_sql_str_func.sh_6ff984d8ed3e5099376d19f0dd20d5fd1ed42494.out
@@ -1,2 +1,2 @@
Row 0:
- Column parse_url('https://example.com/sea%26rch?flag&flag2&=def#frag1%20space'): {"scheme":"https","user":null,"password":null,"host":"example.com","port":null,"path":"/sea&rch","query":"flag&flag2&=def","parameters":{"flag":null,"flag2":null,"":"def"},"fragment":"frag1 space"}
+ Column parse_url('https://example.com/sea%26rch?flag&flag2&=def#frag1%20space'): {"scheme":"https","username":null,"password":null,"host":"example.com","port":null,"path":"/sea&rch","query":"flag&flag2&=def","parameters":{"flag":null,"flag2":null,"":"def"},"fragment":"frag1 space"}
diff --git a/test/expected/test_sql_str_func.sh_805ca5e97fbf1ed56f2e920befd963255ba190b6.out b/test/expected/test_sql_str_func.sh_805ca5e97fbf1ed56f2e920befd963255ba190b6.out
index 84c7397..01169ce 100644
--- a/test/expected/test_sql_str_func.sh_805ca5e97fbf1ed56f2e920befd963255ba190b6.out
+++ b/test/expected/test_sql_str_func.sh_805ca5e97fbf1ed56f2e920befd963255ba190b6.out
@@ -1,2 +1,2 @@
Row 0:
- Column parse_url('https://example.com/search?flag&flag2'): {"scheme":"https","user":null,"password":null,"host":"example.com","port":null,"path":"/search","query":"flag&flag2","parameters":{"flag":null,"flag2":null},"fragment":null}
+ Column parse_url('https://example.com/search?flag&flag2'): {"scheme":"https","username":null,"password":null,"host":"example.com","port":null,"path":"/search","query":"flag&flag2","parameters":{"flag":null,"flag2":null},"fragment":null}
diff --git a/test/expected/test_sql_str_func.sh_80c1fb9affbfac609ebf1cc5556aafb1ecd223c1.err b/test/expected/test_sql_str_func.sh_80c1fb9affbfac609ebf1cc5556aafb1ecd223c1.err
index a92048a..29338d9 100644
--- a/test/expected/test_sql_str_func.sh_80c1fb9affbfac609ebf1cc5556aafb1ecd223c1.err
+++ b/test/expected/test_sql_str_func.sh_80c1fb9affbfac609ebf1cc5556aafb1ecd223c1.err
@@ -1 +1 @@
-error: sqlite3_exec failed -- lnav-error:{"level":"error","message":{"str":"call to regexp_match(re, str) failed","attrs":[{"start":8,"end":20,"type":"role","value":47},{"start":21,"end":23,"type":"role","value":46},{"start":25,"end":28,"type":"role","value":46},{"start":8,"end":29,"type":"role","value":60}]},"reason":{"str":"regular expression does not have any captures","attrs":[]},"snippets":[],"help":{"str":"","attrs":[]}}
+error: sqlite3_exec failed -- lnav-error:{"level":"error","message":{"str":"call to regexp_match(re, str) failed","attrs":[{"start":8,"end":20,"type":"role","value":49},{"start":21,"end":23,"type":"role","value":48},{"start":25,"end":28,"type":"role","value":48},{"start":8,"end":29,"type":"role","value":65}]},"reason":{"str":"regular expression does not have any captures","attrs":[]},"snippets":[],"notes":[],"help":{"str":"","attrs":[]}}
diff --git a/test/expected/test_sql_str_func.sh_949ffd5b2ef9fbcbe17f2e61ef7750f7038f6fd6.out b/test/expected/test_sql_str_func.sh_949ffd5b2ef9fbcbe17f2e61ef7750f7038f6fd6.out
index f93d348..90daa31 100644
--- a/test/expected/test_sql_str_func.sh_949ffd5b2ef9fbcbe17f2e61ef7750f7038f6fd6.out
+++ b/test/expected/test_sql_str_func.sh_949ffd5b2ef9fbcbe17f2e61ef7750f7038f6fd6.out
@@ -1,2 +1,2 @@
-regexp_match('^(\w+)=([^;]+);', 'abc=def;ghi=jkl;')
+regexp_match('^(\w+)=([^;]+);', 'abc=def;ghi=jkl;') 
{"col_0":"abc","col_1":"def"}
diff --git a/test/expected/test_sql_str_func.sh_a515ba81cc3655c602da28cd0fa1a186d5e9a6e1.err b/test/expected/test_sql_str_func.sh_a515ba81cc3655c602da28cd0fa1a186d5e9a6e1.err
index 475a9b2..7435892 100644
--- a/test/expected/test_sql_str_func.sh_a515ba81cc3655c602da28cd0fa1a186d5e9a6e1.err
+++ b/test/expected/test_sql_str_func.sh_a515ba81cc3655c602da28cd0fa1a186d5e9a6e1.err
@@ -1 +1 @@
-error: sqlite3_exec failed -- lnav-error:{"level":"error","message":{"str":"invalid URL: “https://example.com:100000”","attrs":[]},"reason":{"str":"Port number was not a decimal number between 0 and 65535","attrs":[]},"snippets":[],"help":{"str":"","attrs":[]}}
+error: sqlite3_exec failed -- lnav-error:{"level":"error","message":{"str":"invalid URL: https://example.com:100000","attrs":[{"start":13,"end":39,"type":"role","value":56}]},"reason":{"str":"Port number was not a decimal number between 0 and 65535","attrs":[]},"snippets":[],"notes":[],"help":{"str":"","attrs":[]}}
diff --git a/test/expected/test_sql_str_func.sh_b088735cf46f23ca3d5fb3da41f07a6a3b1cba35.out b/test/expected/test_sql_str_func.sh_b088735cf46f23ca3d5fb3da41f07a6a3b1cba35.out
index e93f55d..7b9ef25 100644
--- a/test/expected/test_sql_str_func.sh_b088735cf46f23ca3d5fb3da41f07a6a3b1cba35.out
+++ b/test/expected/test_sql_str_func.sh_b088735cf46f23ca3d5fb3da41f07a6a3b1cba35.out
@@ -1,2 +1,2 @@
Row 0:
- Column parse_url('https://example.com'): {"scheme":"https","user":null,"password":null,"host":"example.com","port":null,"path":"/","query":null,"parameters":null,"fragment":null}
+ Column parse_url('https://example.com'): {"scheme":"https","username":null,"password":null,"host":"example.com","port":null,"path":"/","query":null,"parameters":null,"fragment":null}
diff --git a/test/expected/test_sql_str_func.sh_b8ebe81c4881f704624a65ec91be0868c310f6ed.err b/test/expected/test_sql_str_func.sh_b8ebe81c4881f704624a65ec91be0868c310f6ed.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_b8ebe81c4881f704624a65ec91be0868c310f6ed.err
diff --git a/test/expected/test_sql_str_func.sh_b8ebe81c4881f704624a65ec91be0868c310f6ed.out b/test/expected/test_sql_str_func.sh_b8ebe81c4881f704624a65ec91be0868c310f6ed.out
new file mode 100644
index 0000000..18df174
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_b8ebe81c4881f704624a65ec91be0868c310f6ed.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column unparse_url(NULL): (null)
diff --git a/test/expected/test_sql_str_func.sh_bac7f6531a2adf70cd1871fb13eab26dff133b7c.out b/test/expected/test_sql_str_func.sh_bac7f6531a2adf70cd1871fb13eab26dff133b7c.out
index daf8e0a..ee5f9c7 100644
--- a/test/expected/test_sql_str_func.sh_bac7f6531a2adf70cd1871fb13eab26dff133b7c.out
+++ b/test/expected/test_sql_str_func.sh_bac7f6531a2adf70cd1871fb13eab26dff133b7c.out
@@ -1,2 +1,2 @@
Row 0:
- Column parse_url('https://example.com/search?flag'): {"scheme":"https","user":null,"password":null,"host":"example.com","port":null,"path":"/search","query":"flag","parameters":{"flag":null},"fragment":null}
+ Column parse_url('https://example.com/search?flag'): {"scheme":"https","username":null,"password":null,"host":"example.com","port":null,"path":"/search","query":"flag","parameters":{"flag":null},"fragment":null}
diff --git a/test/expected/test_sql_str_func.sh_cdc7b869132c33cae3c2565806c2396e1b4d6253.err b/test/expected/test_sql_str_func.sh_cdc7b869132c33cae3c2565806c2396e1b4d6253.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_cdc7b869132c33cae3c2565806c2396e1b4d6253.err
diff --git a/test/expected/test_sql_str_func.sh_cdc7b869132c33cae3c2565806c2396e1b4d6253.out b/test/expected/test_sql_str_func.sh_cdc7b869132c33cae3c2565806c2396e1b4d6253.out
new file mode 100644
index 0000000..269441a
--- /dev/null
+++ b/test/expected/test_sql_str_func.sh_cdc7b869132c33cae3c2565806c2396e1b4d6253.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column unparse_url('{}'): (null)
diff --git a/test/expected/test_sql_str_func.sh_d4bc869850f5b7e53353fc2506fea0c8e96f29c5.err b/test/expected/test_sql_str_func.sh_d4bc869850f5b7e53353fc2506fea0c8e96f29c5.err
index f4c8399..c9bad60 100644
--- a/test/expected/test_sql_str_func.sh_d4bc869850f5b7e53353fc2506fea0c8e96f29c5.err
+++ b/test/expected/test_sql_str_func.sh_d4bc869850f5b7e53353fc2506fea0c8e96f29c5.err
@@ -1 +1 @@
-error: sqlite3_exec failed -- Invalid regular expression: missing closing parenthesis
+error: sqlite3_exec failed -- lnav-error:{"level":"error","message":{"str":"“(” is not a valid regular expression","attrs":[]},"reason":{"str":"missing closing parenthesis","attrs":[]},"snippets":[{"source":"pattern","line":0,"content":{"str":"(\n ^ missing closing parenthesis","attrs":[{"start":0,"end":1,"type":"role","value":3},{"start":0,"end":1,"type":"style","value":2359296},{"start":0,"end":1,"type":"role","value":5},{"start":3,"end":5,"type":"role","value":5},{"start":5,"end":32,"type":"role","value":5},{"start":0,"end":-1,"type":"role","value":42}]}}],"notes":[],"help":{"str":"","attrs":[]}}
diff --git a/test/expected/test_sql_str_func.sh_d54a759f5683a22ad289129b2096b80652b1cc0c.out b/test/expected/test_sql_str_func.sh_d54a759f5683a22ad289129b2096b80652b1cc0c.out
index 659abf7..0f59225 100644
--- a/test/expected/test_sql_str_func.sh_d54a759f5683a22ad289129b2096b80652b1cc0c.out
+++ b/test/expected/test_sql_str_func.sh_d54a759f5683a22ad289129b2096b80652b1cc0c.out
@@ -5,16 +5,11 @@
"col_0": [
"VpxLRO"
],
- "col_1": "--",
- "col_2": "BEGIN",
- "col_3": "lro-846063",
- "col_4": "--",
- "col_5": "SessionManager",
- "col_6": "--",
- "col_7": "vim.SessionManager.sessionIsActive",
- "col_8": "--",
- "col_9": "528e6e0c-246d-58b5-3234-278c6e0c5d0d",
- "col_10": [
+ "BEGIN": "lro-846063",
+ "col_1": "SessionManager",
+ "col_2": "vim.SessionManager.sessionIsActive",
+ "col_3": "528e6e0c-246d-58b5-3234-278c6e0c5d0d",
+ "col_4": [
"52c289ac-2563-48d5-8a8e-f178da022c0d"
]
}
@@ -25,22 +20,22 @@
"col_0": [
"VpxLRO"
],
- "col_1": "--",
- "col_2": "FINISH",
- "col_3": "lro-846063"
+ "FINISH": "lro-846063"
}
},
{
"log_body": "Exception was thrown when call vsan-performance-manager for cluster [vim.ClusterComputeResource:domain-c109,Cluster-52] perf metrics: N3Vim5Fault8NotFound9ExceptionE(Fault cause: vim.fault.NotFound\n--> )",
"extract(log_body)": {
- "Exception was thrown when call vsan-performance-manager for cluster [vim.ClusterComputeResource:domain-c109,Cluster-52] perf metrics": {
- "N3Vim5Fault8NotFound9ExceptionE": [
- "Fault cause",
- "vim.fault.NotFound",
- "\n",
- "--",
- ">"
- ]
+ "call": "vsan-performance-manager",
+ "cluster": {
+ "vim.ClusterComputeResource": "domain-c109",
+ "col_0": "Cluster-52"
+ },
+ "col_0": "perf",
+ "metrics": "",
+ "N3Vim5Fault8NotFound9ExceptionE": {
+ "Fault cause": "vim.fault.NotFound",
+ "col_0": ">"
}
}
}
diff --git a/test/expected/test_sql_time_func.sh_42f0fc1a154b0d79b4f6e846f283426be498040f.err b/test/expected/test_sql_time_func.sh_42f0fc1a154b0d79b4f6e846f283426be498040f.err
index 537f7c4..90c4d88 100644
--- a/test/expected/test_sql_time_func.sh_42f0fc1a154b0d79b4f6e846f283426be498040f.err
+++ b/test/expected/test_sql_time_func.sh_42f0fc1a154b0d79b4f6e846f283426be498040f.err
@@ -1 +1 @@
-error: sqlite3_exec failed -- lnav-error:{"level":"error","message":{"str":"call to timeslice(time, slice) failed","attrs":[{"start":8,"end":17,"type":"role","value":47},{"start":18,"end":22,"type":"role","value":46},{"start":24,"end":29,"type":"role","value":46},{"start":8,"end":30,"type":"role","value":60}]},"reason":{"str":"unable to parse time slice value: blah -- Unrecognized input","attrs":[]},"snippets":[],"help":{"str":"","attrs":[]}}
+error: sqlite3_exec failed -- lnav-error:{"level":"error","message":{"str":"call to timeslice(time, slice) failed","attrs":[{"start":8,"end":17,"type":"role","value":49},{"start":18,"end":22,"type":"role","value":48},{"start":24,"end":29,"type":"role","value":48},{"start":8,"end":30,"type":"role","value":65}]},"reason":{"str":"unable to parse time slice value: blah -- Unrecognized input","attrs":[]},"snippets":[],"notes":[],"help":{"str":"","attrs":[]}}
diff --git a/test/expected/test_sql_time_func.sh_4364c7f5354fe108874dd22571115e012303e001.err b/test/expected/test_sql_time_func.sh_4364c7f5354fe108874dd22571115e012303e001.err
new file mode 100644
index 0000000..9d7688e
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_4364c7f5354fe108874dd22571115e012303e001.err
@@ -0,0 +1,4 @@
+✘ error: call to timezone(tz, ts) failed
+ reason: bad-zone not found in timezone database
+ --> command-option:1
+ | ;SELECT timezone('bad-zone', '2022-03-02T10:20:30.400-0700')
diff --git a/test/expected/test_sql_time_func.sh_4364c7f5354fe108874dd22571115e012303e001.out b/test/expected/test_sql_time_func.sh_4364c7f5354fe108874dd22571115e012303e001.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_4364c7f5354fe108874dd22571115e012303e001.out
diff --git a/test/expected/test_sql_time_func.sh_63f22db8689c238d51c9b9efe9837147ea5318e6.err b/test/expected/test_sql_time_func.sh_63f22db8689c238d51c9b9efe9837147ea5318e6.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_63f22db8689c238d51c9b9efe9837147ea5318e6.err
diff --git a/test/expected/test_sql_time_func.sh_63f22db8689c238d51c9b9efe9837147ea5318e6.out b/test/expected/test_sql_time_func.sh_63f22db8689c238d51c9b9efe9837147ea5318e6.out
new file mode 100644
index 0000000..16f0f98
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_63f22db8689c238d51c9b9efe9837147ea5318e6.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column timezone('America/Los_Angeles', '2022-04-02T10:20:30.400-0700'): 2022-04-02T10:20:30.400000-0700
diff --git a/test/expected/test_sql_time_func.sh_6fd8504e94688c4e7915f3a9eb5b030713141d03.out b/test/expected/test_sql_time_func.sh_6fd8504e94688c4e7915f3a9eb5b030713141d03.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_6fd8504e94688c4e7915f3a9eb5b030713141d03.out
diff --git a/test/expected/test_sql_time_func.sh_72862ec9c8f261a8507d237eb673c7ddfaafd898.err b/test/expected/test_sql_time_func.sh_72862ec9c8f261a8507d237eb673c7ddfaafd898.err
index 4180cf6..33e46bd 100644
--- a/test/expected/test_sql_time_func.sh_72862ec9c8f261a8507d237eb673c7ddfaafd898.err
+++ b/test/expected/test_sql_time_func.sh_72862ec9c8f261a8507d237eb673c7ddfaafd898.err
@@ -1 +1 @@
-error: sqlite3_exec failed -- lnav-error:{"level":"error","message":{"str":"call to timeslice(time, slice) failed","attrs":[{"start":8,"end":17,"type":"role","value":47},{"start":18,"end":22,"type":"role","value":46},{"start":24,"end":29,"type":"role","value":46},{"start":8,"end":30,"type":"role","value":60}]},"reason":{"str":"no time slice value given","attrs":[]},"snippets":[],"help":{"str":"","attrs":[]}}
+error: sqlite3_exec failed -- lnav-error:{"level":"error","message":{"str":"call to timeslice(time, slice) failed","attrs":[{"start":8,"end":17,"type":"role","value":49},{"start":18,"end":22,"type":"role","value":48},{"start":24,"end":29,"type":"role","value":48},{"start":8,"end":30,"type":"role","value":65}]},"reason":{"str":"no time slice value given","attrs":[]},"snippets":[],"notes":[],"help":{"str":"","attrs":[]}}
diff --git a/test/expected/test_sql_time_func.sh_7ae9dbbb69dbc50ee6a34afc03d2579f09363068.err b/test/expected/test_sql_time_func.sh_7ae9dbbb69dbc50ee6a34afc03d2579f09363068.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_7ae9dbbb69dbc50ee6a34afc03d2579f09363068.err
diff --git a/test/expected/test_sql_time_func.sh_7ae9dbbb69dbc50ee6a34afc03d2579f09363068.out b/test/expected/test_sql_time_func.sh_7ae9dbbb69dbc50ee6a34afc03d2579f09363068.out
new file mode 100644
index 0000000..6401b23
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_7ae9dbbb69dbc50ee6a34afc03d2579f09363068.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column timezone('UTC', '2022-03-02T10:20:30.400-0700'): 2022-03-02T17:20:30.400000+0000
diff --git a/test/expected/test_sql_time_func.sh_b3c00f049fdeb551a9165c281630e36359832d1f.err b/test/expected/test_sql_time_func.sh_b3c00f049fdeb551a9165c281630e36359832d1f.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_b3c00f049fdeb551a9165c281630e36359832d1f.err
diff --git a/test/expected/test_sql_time_func.sh_b3c00f049fdeb551a9165c281630e36359832d1f.out b/test/expected/test_sql_time_func.sh_b3c00f049fdeb551a9165c281630e36359832d1f.out
new file mode 100644
index 0000000..e02d1de
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_b3c00f049fdeb551a9165c281630e36359832d1f.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column timezone('America/New_York', '2022-03-02T10:20:30.400-0700'): 2022-03-02T12:20:30.400000-0500
diff --git a/test/expected/test_sql_time_func.sh_c1d7dc8a4bd3b8cb86a2f893f58a56f0f6ea1bc3.err b/test/expected/test_sql_time_func.sh_c1d7dc8a4bd3b8cb86a2f893f58a56f0f6ea1bc3.err
new file mode 100644
index 0000000..ad8b26b
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_c1d7dc8a4bd3b8cb86a2f893f58a56f0f6ea1bc3.err
@@ -0,0 +1,8 @@
+✘ error: invalid timestamp: 2022-03-02T10:20:30.400bad
+ reason: the leading part of the timestamp was matched, however, the trailing text “bad” was not
+ --> command-option:1
+ | ;SELECT timezone('UTC', '2022-03-02T10:20:30.400bad')
+ = note: input matched time format “%Y-%m-%dT%H:%M:%S”
+ = note: 2022-03-02T10:20:30.400bad
+ ^-^ unrecognized input
+ = help: fix the timestamp or remove the trailing text
diff --git a/test/expected/test_sql_time_func.sh_c1d7dc8a4bd3b8cb86a2f893f58a56f0f6ea1bc3.out b/test/expected/test_sql_time_func.sh_c1d7dc8a4bd3b8cb86a2f893f58a56f0f6ea1bc3.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_c1d7dc8a4bd3b8cb86a2f893f58a56f0f6ea1bc3.out
diff --git a/test/expected/test_sql_time_func.sh_c5a5fc2edb54d10f1475afa7fed0b62bc05e1dc6.err b/test/expected/test_sql_time_func.sh_c5a5fc2edb54d10f1475afa7fed0b62bc05e1dc6.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_c5a5fc2edb54d10f1475afa7fed0b62bc05e1dc6.err
diff --git a/test/expected/test_sql_time_func.sh_c5a5fc2edb54d10f1475afa7fed0b62bc05e1dc6.out b/test/expected/test_sql_time_func.sh_c5a5fc2edb54d10f1475afa7fed0b62bc05e1dc6.out
new file mode 100644
index 0000000..689ba47
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_c5a5fc2edb54d10f1475afa7fed0b62bc05e1dc6.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column timezone('America/Los_Angeles', '2022-03-02T10:20:30.400-0700'): 2022-03-02T09:20:30.400000-0800
diff --git a/test/expected/test_sql_time_func.sh_c7fc60392a2e52b163da1e1dde6978c16f415a9e.err b/test/expected/test_sql_time_func.sh_c7fc60392a2e52b163da1e1dde6978c16f415a9e.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_c7fc60392a2e52b163da1e1dde6978c16f415a9e.err
diff --git a/test/expected/test_sql_time_func.sh_c7fc60392a2e52b163da1e1dde6978c16f415a9e.out b/test/expected/test_sql_time_func.sh_c7fc60392a2e52b163da1e1dde6978c16f415a9e.out
new file mode 100644
index 0000000..07dccfa
--- /dev/null
+++ b/test/expected/test_sql_time_func.sh_c7fc60392a2e52b163da1e1dde6978c16f415a9e.out
@@ -0,0 +1,2 @@
+Row 0:
+ Column timezone('America/Los_Angeles', '2022-03-02T10:00'): 2022-03-02T02:00:00.000000-0800
diff --git a/test/expected/test_sql_views_vtab.sh_32acc1a8bb5028636fdbf08f077f9a835ab51bec.out b/test/expected/test_sql_views_vtab.sh_32acc1a8bb5028636fdbf08f077f9a835ab51bec.out
index 710f668..2b6d1d2 100644
--- a/test/expected/test_sql_views_vtab.sh_32acc1a8bb5028636fdbf08f077f9a835ab51bec.out
+++ b/test/expected/test_sql_views_vtab.sh_32acc1a8bb5028636fdbf08f077f9a835ab51bec.out
@@ -11,9 +11,8 @@ Run  ./autogen.sh  if compiling from a cloned repository.
See Also
-Angle-grinder[1] is a tool to slice and dice log files on the
+]8;;https://github.com/rcoh/angle-grinder\Angle-grinder]8;;\[1] is a tool to slice and dice log files on the
command-line. If you're familiar with the SumoLogic query language,
you might find this tool more comfortable to work with.
▌[1] - https://github.com/rcoh/angle-grinder
-
diff --git a/test/expected/test_sql_views_vtab.sh_4363d60040424a573ed79ee4260a32e3cd72f62c.err b/test/expected/test_sql_views_vtab.sh_4363d60040424a573ed79ee4260a32e3cd72f62c.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_4363d60040424a573ed79ee4260a32e3cd72f62c.err
diff --git a/test/expected/test_sql_views_vtab.sh_4363d60040424a573ed79ee4260a32e3cd72f62c.out b/test/expected/test_sql_views_vtab.sh_4363d60040424a573ed79ee4260a32e3cd72f62c.out
new file mode 100644
index 0000000..a4f45bc
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_4363d60040424a573ed79ee4260a32e3cd72f62c.out
@@ -0,0 +1,46 @@
+2023-03-24T14:26:16.243Z renovate[7] INFO Dependency extraction complete
+ Received Time: 2023-03-24T14:26:16.243 — in the future Format: %Y-%m-%dT%H:%M:%S.%L%z
+ Known message fields for table bunyan_log:
+ | ◆ 📊 name = renovate
+ | ◇ 📊 hostname = renovate-gitlab-67c4bcb5-9ggbv
+ | ◆ 📊 pid = 7
+ | ◇ 📊 level = 30
+ | ◇ 📊 v = 0
+ JSON fields:
+ jget(log_raw_text, '/baseBranch') = main
+ jget(log_raw_text, '/logContext') = qjifsaDDI
+ jget(log_raw_text, '/repository') = webgui/custom-icons-transformer
+ jget(log_raw_text, '/stats') = {"managers":{"gitlabci":{"fileCount":1,"depCount":1},"gitlabci-include":{"fileCount":1,"depCount":1},"npm":{"fileCount":1,"depCount":15}},"total":{"fileCount":3,"depCount":17}}
+ No discovered message fields
+ logContext: qjifsaDDI
+ repository: webgui/custom-icons-transformer
+ baseBranch: main
+ stats: {"managers":{"gitlabci":{"fileCount":1,"depCount":1},"gitlabci-include":{"fileCount":1,"depCount":1},"npm":{"fileCount":1,"depCount":15}},"total":{"fileCount":3,"depCount":17}}
+2023-03-24T14:26:16.390Z renovate[7] DEBUG Dependency node has unsupported/unversioned value lts-bullseye-slim (versioning=docker)
+ logContext: qjifsaDDI
+ repository: webgui/custom-icons-transformer
+2023-03-24T14:26:17.493Z renovate[7] DEBUG Release 2.8.7 is pending status checks
+ logContext: qjifsaDDI
+ repository: webgui/custom-icons-transformer
+ depName: prettier
+ check: stabilityDays
+2023-03-24T14:26:17.897Z renovate[7] DEBUG Release 4.4.1 is pending status checks
+ logContext: qjifsaDDI
+ repository: webgui/custom-icons-transformer
+ depName: rimraf
+ check: stabilityDays
+2023-03-24T14:26:17.897Z renovate[7] DEBUG All releases are pending - using latest
+ logContext: qjifsaDDI
+ repository: webgui/custom-icons-transformer
+ depName: rimraf
+ bucket: non-major
+2023-03-24T14:26:18.330Z renovate[7] DEBUG Release 2.10.0 is pending status checks
+ logContext: qjifsaDDI
+ repository: webgui/custom-icons-transformer
+ depName: prettier-plugin-svelte
+ check: stabilityDays
+2023-03-24T14:26:18.331Z renovate[7] DEBUG All releases are pending - using latest
+ logContext: qjifsaDDI
+ repository: webgui/custom-icons-transformer
+ depName: prettier-plugin-svelte
+ bucket: non-major
diff --git a/test/expected/test_sql_views_vtab.sh_45dbef06572b43cb997682436e753a13e003f792.err b/test/expected/test_sql_views_vtab.sh_45dbef06572b43cb997682436e753a13e003f792.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_45dbef06572b43cb997682436e753a13e003f792.err
diff --git a/test/expected/test_sql_views_vtab.sh_45dbef06572b43cb997682436e753a13e003f792.out b/test/expected/test_sql_views_vtab.sh_45dbef06572b43cb997682436e753a13e003f792.out
new file mode 100644
index 0000000..74dfce6
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_45dbef06572b43cb997682436e753a13e003f792.out
@@ -0,0 +1,47 @@
+[2020-12-10 06:56:41,092] DEBUG [connect.client:69] Full request text:
+ Received Time: 2020-12-10T06:56:41.092 — in the future Format: %Y-%m-%d %H:%M:%S,%L
+ Pattern: /xml_msg_log/regex/std = ^\[(?<timestamp>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d{3})\]\s+(?<level>\w+)\s+\[(?<module>[^:]*):(?<line>\d+)\]\s*(?<body>[^\n]*)\n?(?<msg_data>.*)
+ Known message fields for table xml_msg_log:
+ | ◆ 📊 module = connect.client
+ | ◆ 📊 line = 69
+ | ◆ msg_data = <?xml version='1.0' encoding='iso-8859-2'?>␊<a-request>␊ <head>␊ x␊ </head>␊ <source>␊ x␊ </source>␊ <request id="1">␊ <name>␊ x␊ </name>␊ </request>␊</a-request>␊
+ XML fields:
+ xpath('/a-request/head/text()', xml_msg_log.msg_data) = x
+ xpath('/a-request/request/@id', xml_msg_log.msg_data) = 1
+ xpath('/a-request/request/name/text()', xml_msg_log.msg_data) = x
+ xpath('/a-request/source/text()', xml_msg_log.msg_data) = x
+ No discovered message fields
+ └ #xml-req
+<?xml version='1.0' encoding='iso-8859-2'?>
+<a-request>
+ <head>
+ x
+ </head>
+ <source>
+ x
+ </source>
+ <request id="1">
+ <name>
+ x
+ </name>
+ </request>
+</a-request>
+
+[2020-12-10 06:56:41,099] DEBUG [m:85] Full reply text:
+<?xml version='1.0' encoding='iso-8859-2'?>
+<a-reply>
+ <head>
+ x
+ </head>
+ <reply id="2">
+ <status>
+ <result>OK</result>
+ </status>
+ <name>
+ x
+ </name>
+ </reply>
+ <technical-track>
+ x
+ </technical-track>
+</a-reply>
diff --git a/test/expected/test_sql_views_vtab.sh_485a6ac7c69bd4b5d34d3399a9c17f6a2dc89ad3.out b/test/expected/test_sql_views_vtab.sh_485a6ac7c69bd4b5d34d3399a9c17f6a2dc89ad3.out
index bfe5f1e..2ada698 100644
--- a/test/expected/test_sql_views_vtab.sh_485a6ac7c69bd4b5d34d3399a9c17f6a2dc89ad3.out
+++ b/test/expected/test_sql_views_vtab.sh_485a6ac7c69bd4b5d34d3399a9c17f6a2dc89ad3.out
@@ -1 +1 @@
-2014-10-08 16:56:38,344:WARN:foo bar baz
+2014-10-08 16:56:38,344:WARN:foo bar baz
diff --git a/test/expected/test_sql_views_vtab.sh_62d15cb9d5a9259f198aa01ca8ed200d6da38d68.out b/test/expected/test_sql_views_vtab.sh_62d15cb9d5a9259f198aa01ca8ed200d6da38d68.out
index 48f52f3..a988f1b 100644
--- a/test/expected/test_sql_views_vtab.sh_62d15cb9d5a9259f198aa01ca8ed200d6da38d68.out
+++ b/test/expected/test_sql_views_vtab.sh_62d15cb9d5a9259f198aa01ca8ed200d6da38d68.out
@@ -1,3 +1,3 @@
-view_name filter_id enabled type language pattern 
-log   1  1 in  regex  vmk 
-log   2    1 in regex vmk1
+view_name filter_id enabled type language pattern 
+log 1 1 in regex vmk
+log 2 1 in regex vmk1
diff --git a/test/expected/test_sql_views_vtab.sh_6ffd89498b9a7758ded6717148fc2ce77a12621b.out b/test/expected/test_sql_views_vtab.sh_6ffd89498b9a7758ded6717148fc2ce77a12621b.out
index 1ad5fbf..ac0d98c 100644
--- a/test/expected/test_sql_views_vtab.sh_6ffd89498b9a7758ded6717148fc2ce77a12621b.out
+++ b/test/expected/test_sql_views_vtab.sh_6ffd89498b9a7758ded6717148fc2ce77a12621b.out
@@ -1,2 +1,2 @@
-search 
+search 
warn
diff --git a/test/expected/test_sql_views_vtab.sh_81dc3eb51ec4dc3066a2365524001242c423a9cf.out b/test/expected/test_sql_views_vtab.sh_81dc3eb51ec4dc3066a2365524001242c423a9cf.out
index c99c751..25e5645 100644
--- a/test/expected/test_sql_views_vtab.sh_81dc3eb51ec4dc3066a2365524001242c423a9cf.out
+++ b/test/expected/test_sql_views_vtab.sh_81dc3eb51ec4dc3066a2365524001242c423a9cf.out
@@ -1,2 +1,2 @@
-view_name filter_id enabled type language pattern 
-log   0  1 out  sql  1  
+view_name filter_id enabled type language pattern 
+log 0 1 out sql 1
diff --git a/test/expected/test_sql_views_vtab.sh_a2c0f0e51b3f85ea2a05ecdcacaad962b4fe5d4f.out b/test/expected/test_sql_views_vtab.sh_a2c0f0e51b3f85ea2a05ecdcacaad962b4fe5d4f.out
index 38afb7c..4041522 100644
--- a/test/expected/test_sql_views_vtab.sh_a2c0f0e51b3f85ea2a05ecdcacaad962b4fe5d4f.out
+++ b/test/expected/test_sql_views_vtab.sh_a2c0f0e51b3f85ea2a05ecdcacaad962b4fe5d4f.out
@@ -1,2 +1,2 @@
-view_name filter_id enabled type language pattern 
-log   1  1 in  regex  vmk 
+view_name filter_id enabled type language pattern 
+log 1 1 in regex vmk
diff --git a/test/expected/test_sql_views_vtab.sh_a7a7fd577f710aa8b0ad5a94fdfb35daea75e06c.err b/test/expected/test_sql_views_vtab.sh_a7a7fd577f710aa8b0ad5a94fdfb35daea75e06c.err
new file mode 100644
index 0000000..44ba5c2
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_a7a7fd577f710aa8b0ad5a94fdfb35daea75e06c.err
@@ -0,0 +1,4 @@
+✘ error: Invalid “top_meta.file” value
+ reason: Unknown text file: bad
+ --> command-option:1
+ | ;UPDATE lnav_views SET top_meta = json_object('file', 'bad') WHERE name = 'text'
diff --git a/test/expected/test_sql_views_vtab.sh_a7a7fd577f710aa8b0ad5a94fdfb35daea75e06c.out b/test/expected/test_sql_views_vtab.sh_a7a7fd577f710aa8b0ad5a94fdfb35daea75e06c.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_views_vtab.sh_a7a7fd577f710aa8b0ad5a94fdfb35daea75e06c.out
diff --git a/test/expected/test_sql_views_vtab.sh_c851bdf3ba2f56fac5a216457b2d11a109e77f03.err b/test/expected/test_sql_views_vtab.sh_c851bdf3ba2f56fac5a216457b2d11a109e77f03.err
index 4276af6..d4eb104 100644
--- a/test/expected/test_sql_views_vtab.sh_c851bdf3ba2f56fac5a216457b2d11a109e77f03.err
+++ b/test/expected/test_sql_views_vtab.sh_c851bdf3ba2f56fac5a216457b2d11a109e77f03.err
@@ -1,4 +1,4 @@
-✘ error: SQL statement failed
- reason: Invalid time: bad-time
+✘ error: Invalid “top_time” value
+ reason: Unrecognized time value: bad-time
 --> command-option:1
 | ;UPDATE lnav_views SET top_time = 'bad-time' WHERE name = 'log'
diff --git a/test/expected/test_sql_views_vtab.sh_d99d884ba6668b66e3ca9ea4ed2d0e236497c35d.out b/test/expected/test_sql_views_vtab.sh_d99d884ba6668b66e3ca9ea4ed2d0e236497c35d.out
index bc35132..1dda4bf 100644
--- a/test/expected/test_sql_views_vtab.sh_d99d884ba6668b66e3ca9ea4ed2d0e236497c35d.out
+++ b/test/expected/test_sql_views_vtab.sh_d99d884ba6668b66e3ca9ea4ed2d0e236497c35d.out
@@ -1 +1 @@
-2014-10-08 16:56:38,344:WARN:foo bar baz
+2014-10-08 16:56:38,344:WARN:foo bar baz
diff --git a/test/expected/test_sql_xml_func.sh_81ad7678f080870956db37174bcf1054586cfbad.err b/test/expected/test_sql_xml_func.sh_81ad7678f080870956db37174bcf1054586cfbad.err
new file mode 100644
index 0000000..3c5a94b
--- /dev/null
+++ b/test/expected/test_sql_xml_func.sh_81ad7678f080870956db37174bcf1054586cfbad.err
@@ -0,0 +1,11 @@
+✘ error: Invalid XML document
+ reason: Error parsing element attribute
+ --> command-option:1
+ | ;SELECT * FROM xpath('/catalog', (SELECT content FROM lnav_file LIMIT 1))
+ --> xmldoc:35
+ |  </description> 
+ |  </book> 
+ |  <book id=" bk104"> 
+ |  ^ Error parsing element attribute
+ |  <author>Corets, Eva</author> 
+ |  <title>Oberon's Legacy</title> 
diff --git a/test/expected/test_sql_xml_func.sh_81ad7678f080870956db37174bcf1054586cfbad.out b/test/expected/test_sql_xml_func.sh_81ad7678f080870956db37174bcf1054586cfbad.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_xml_func.sh_81ad7678f080870956db37174bcf1054586cfbad.out
diff --git a/test/expected/test_sql_xml_func.sh_b036c73528a446cba46625767517cdac868aba72.err b/test/expected/test_sql_xml_func.sh_b036c73528a446cba46625767517cdac868aba72.err
index 6ac0f80..319fc61 100644
--- a/test/expected/test_sql_xml_func.sh_b036c73528a446cba46625767517cdac868aba72.err
+++ b/test/expected/test_sql_xml_func.sh_b036c73528a446cba46625767517cdac868aba72.err
@@ -1 +1 @@
-error: sqlite3_exec failed -- Invalid XPATH expression at offset 5: Unrecognized node test
+error: sqlite3_exec failed -- lnav-error:{"level":"error","message":{"str":"Invalid XPath expression","attrs":[]},"reason":{"str":"Unrecognized node test","attrs":[]},"snippets":[{"source":"xpath","line":1,"content":{"str":"/abc[\n ^ Unrecognized node test","attrs":[{"start":0,"end":5,"type":"role","value":42},{"start":11,"end":13,"type":"role","value":79},{"start":13,"end":35,"type":"role","value":5},{"start":6,"end":35,"type":"role","value":42},{"start":35,"end":35,"type":"role","value":42}]}}],"notes":[],"help":{"str":"","attrs":[]}}
diff --git a/test/expected/test_sql_xml_func.sh_bcbd691bb24c4f7bcb9fe0e035b290815f1c8874.err b/test/expected/test_sql_xml_func.sh_bcbd691bb24c4f7bcb9fe0e035b290815f1c8874.err
new file mode 100644
index 0000000..d1ff56a
--- /dev/null
+++ b/test/expected/test_sql_xml_func.sh_bcbd691bb24c4f7bcb9fe0e035b290815f1c8874.err
@@ -0,0 +1,7 @@
+✘ error: Invalid XPath expression
+ reason: Expected ']' to match an opening '['
+ --> command-option:1
+ | ;SELECT * FROM xpath('/cat[alog', (SELECT content FROM lnav_file LIMIT 1))
+ --> xpath:1
+ | /cat[alog 
+ |  ^ Expected ']' to match an opening '['
diff --git a/test/expected/test_sql_xml_func.sh_bcbd691bb24c4f7bcb9fe0e035b290815f1c8874.out b/test/expected/test_sql_xml_func.sh_bcbd691bb24c4f7bcb9fe0e035b290815f1c8874.out
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_sql_xml_func.sh_bcbd691bb24c4f7bcb9fe0e035b290815f1c8874.out
diff --git a/test/expected/test_sql_xml_func.sh_fefeb387ae14d4171225ea06cbbff3ec43990cf0.err b/test/expected/test_sql_xml_func.sh_fefeb387ae14d4171225ea06cbbff3ec43990cf0.err
index a97d7cd..f495a72 100644
--- a/test/expected/test_sql_xml_func.sh_fefeb387ae14d4171225ea06cbbff3ec43990cf0.err
+++ b/test/expected/test_sql_xml_func.sh_fefeb387ae14d4171225ea06cbbff3ec43990cf0.err
@@ -1 +1 @@
-error: sqlite3_exec failed -- Invalid XML document at offset 3: Error parsing start element tag
+error: sqlite3_exec failed -- lnav-error:{"level":"error","message":{"str":"Invalid XML document","attrs":[]},"reason":{"str":"Error parsing start element tag","attrs":[]},"snippets":[{"source":"xmldoc","line":1,"content":{"str":"<abc\n ^ Error parsing start element tag","attrs":[{"start":0,"end":4,"type":"role","value":42},{"start":8,"end":10,"type":"role","value":79},{"start":10,"end":41,"type":"role","value":5},{"start":5,"end":41,"type":"role","value":42},{"start":41,"end":41,"type":"role","value":42}]}}],"notes":[],"help":{"str":"","attrs":[]}}
diff --git a/test/expected/test_sql_yaml_func.sh_41c6abde708a69e74f5b7fde865d88fa75f91e0a.err b/test/expected/test_sql_yaml_func.sh_41c6abde708a69e74f5b7fde865d88fa75f91e0a.err
deleted file mode 100644
index b7f3a79..0000000
--- a/test/expected/test_sql_yaml_func.sh_41c6abde708a69e74f5b7fde865d88fa75f91e0a.err
+++ /dev/null
@@ -1,4 +0,0 @@
-✘ error: failed to parse YAML content
- reason: closing ] not found
- --> command-option:1
- | ;SELECT yaml_to_json('[abc') 
diff --git a/test/expected/test_text_file.sh_02a0514e0e384e5511ae202ea519552ba04030ed.err b/test/expected/test_text_file.sh_02a0514e0e384e5511ae202ea519552ba04030ed.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_text_file.sh_02a0514e0e384e5511ae202ea519552ba04030ed.err
diff --git a/test/expected/test_text_file.sh_02a0514e0e384e5511ae202ea519552ba04030ed.out b/test/expected/test_text_file.sh_02a0514e0e384e5511ae202ea519552ba04030ed.out
new file mode 100644
index 0000000..d244d10
--- /dev/null
+++ b/test/expected/test_text_file.sh_02a0514e0e384e5511ae202ea519552ba04030ed.out
@@ -0,0 +1,3 @@
+Hello, World!!
+Goodbye, World!!
+That is not⌫⌫⌫all
diff --git a/test/expected/test_text_file.sh_0bba304f34ae07c4fa9e91e0b42f5fe98654a6a8.err b/test/expected/test_text_file.sh_0bba304f34ae07c4fa9e91e0b42f5fe98654a6a8.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_text_file.sh_0bba304f34ae07c4fa9e91e0b42f5fe98654a6a8.err
diff --git a/test/expected/test_text_file.sh_0bba304f34ae07c4fa9e91e0b42f5fe98654a6a8.out b/test/expected/test_text_file.sh_0bba304f34ae07c4fa9e91e0b42f5fe98654a6a8.out
new file mode 100644
index 0000000..0c3f7da
--- /dev/null
+++ b/test/expected/test_text_file.sh_0bba304f34ae07c4fa9e91e0b42f5fe98654a6a8.out
@@ -0,0 +1,26 @@
+#! /bin/sh
+
+
+if test x"${AUTORECONF}" = x""; then
+ autoreconf -V 1>/dev/null 2>/dev/null
+ if test $? -eq 0; then
+ AUTORECONF=autoreconf
+ fi
+fi
+
+if test x"${AUTORECONF}" != x""; then
+ ${AUTORECONF} -vfi -I m4
+else
+ AUTOCONF=${AUTOCONF:-autoconf}
+ AUTOMAKE=${AUTOMAKE:-automake}
+ AUTOHEADER=${AUTOHEADER:-autoheader}
+ ACLOCAL=${ACLOCAL:-aclocal}
+
+ ${AUTOCONF} --version
+ ${AUTOMAKE} --version
+
+ ${ACLOCAL} -I m4 -I .
+ ${AUTOHEADER} -I .
+ ${AUTOMAKE} --add-missing --copy --force-missing --foreign
+ ${AUTOCONF}
+fi
diff --git a/test/expected/test_text_file.sh_11fd274911e45a743b4de616888a64183d07cb76.err b/test/expected/test_text_file.sh_11fd274911e45a743b4de616888a64183d07cb76.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_text_file.sh_11fd274911e45a743b4de616888a64183d07cb76.err
diff --git a/test/expected/test_text_file.sh_11fd274911e45a743b4de616888a64183d07cb76.out b/test/expected/test_text_file.sh_11fd274911e45a743b4de616888a64183d07cb76.out
new file mode 100644
index 0000000..4ef8aa7
--- /dev/null
+++ b/test/expected/test_text_file.sh_11fd274911e45a743b4de616888a64183d07cb76.out
@@ -0,0 +1,2 @@
+content 
+ abc
diff --git a/test/expected/test_text_file.sh_143a40164c93c7ec44a66e7940b92b128a421147.err b/test/expected/test_text_file.sh_143a40164c93c7ec44a66e7940b92b128a421147.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_text_file.sh_143a40164c93c7ec44a66e7940b92b128a421147.err
diff --git a/test/expected/test_text_file.sh_143a40164c93c7ec44a66e7940b92b128a421147.out b/test/expected/test_text_file.sh_143a40164c93c7ec44a66e7940b92b128a421147.out
new file mode 100644
index 0000000..84ebd40
--- /dev/null
+++ b/test/expected/test_text_file.sh_143a40164c93c7ec44a66e7940b92b128a421147.out
@@ -0,0 +1,5 @@
+ "title": "Midnight Rain",
+ "description": "A former architect battles corporate zombies, an evil sorceress, and her own childhood to become queen of the world."
+ }
+ ]
+}
diff --git a/test/expected/test_text_file.sh_1ce4056d72b871f8bb844c86aade2a9b1da58030.err b/test/expected/test_text_file.sh_1ce4056d72b871f8bb844c86aade2a9b1da58030.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_text_file.sh_1ce4056d72b871f8bb844c86aade2a9b1da58030.err
diff --git a/test/expected/test_text_file.sh_1ce4056d72b871f8bb844c86aade2a9b1da58030.out b/test/expected/test_text_file.sh_1ce4056d72b871f8bb844c86aade2a9b1da58030.out
new file mode 100644
index 0000000..b100f4c
--- /dev/null
+++ b/test/expected/test_text_file.sh_1ce4056d72b871f8bb844c86aade2a9b1da58030.out
@@ -0,0 +1,49 @@
+[
+ {
+ "top_meta": {
+ "file": "stdin",
+ "anchor": "#/test~1Makefile.am/distclean-local:",
+ "breadcrumbs": [
+ {
+ "display_value": "stdin",
+ "search_placeholder": "",
+ "possibilities": [
+ {
+ "display_value": "stdin"
+ }
+ ]
+ },
+ {
+ "display_value": "test/Makefile.am",
+ "search_placeholder": "",
+ "possibilities": [
+ {
+ "display_value": "test/Makefile.am"
+ },
+ {
+ "display_value": "test/expected/expected.am"
+ },
+ {
+ "display_value": "test/expected/test_sessions.sh_8732dad5481be991ca7f291d9c5451c7b016cea7.out"
+ },
+ {
+ "display_value": "test/expected/test_sessions.sh_e39648f425c3f291c9d1c0d14595a019abd0cb48.out"
+ },
+ {
+ "display_value": "test/test_sessions.sh"
+ }
+ ]
+ },
+ {
+ "display_value": "distclean-local:",
+ "search_placeholder": "",
+ "possibilities": [
+ {
+ "display_value": "distclean-local:"
+ }
+ ]
+ }
+ ]
+ }
+ }
+]
diff --git a/test/expected/test_text_file.sh_25cef06efcbe106c2e1cc4a166b673e7b244c6d7.err b/test/expected/test_text_file.sh_25cef06efcbe106c2e1cc4a166b673e7b244c6d7.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_text_file.sh_25cef06efcbe106c2e1cc4a166b673e7b244c6d7.err
diff --git a/test/expected/test_text_file.sh_25cef06efcbe106c2e1cc4a166b673e7b244c6d7.out b/test/expected/test_text_file.sh_25cef06efcbe106c2e1cc4a166b673e7b244c6d7.out
new file mode 100644
index 0000000..80a24fb
--- /dev/null
+++ b/test/expected/test_text_file.sh_25cef06efcbe106c2e1cc4a166b673e7b244c6d7.out
@@ -0,0 +1,25 @@
+[
+ {
+ "top_meta": {
+ "file": "stdin",
+ "breadcrumbs": [
+ {
+ "display_value": "stdin",
+ "search_placeholder": "",
+ "possibilities": [
+ {
+ "display_value": "stdin"
+ }
+ ]
+ },
+ {
+ "display_value": "2013-06-06T12:13:20.123",
+ "search_placeholder": "",
+ "possibilities": [
+
+ ]
+ }
+ ]
+ }
+ }
+]
diff --git a/test/expected/test_text_file.sh_265a8a5825e6c7dbc85cbe496dab6be7a349f3db.err b/test/expected/test_text_file.sh_265a8a5825e6c7dbc85cbe496dab6be7a349f3db.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_text_file.sh_265a8a5825e6c7dbc85cbe496dab6be7a349f3db.err
diff --git a/test/expected/test_text_file.sh_265a8a5825e6c7dbc85cbe496dab6be7a349f3db.out b/test/expected/test_text_file.sh_265a8a5825e6c7dbc85cbe496dab6be7a349f3db.out
new file mode 100644
index 0000000..a330ad5
--- /dev/null
+++ b/test/expected/test_text_file.sh_265a8a5825e6c7dbc85cbe496dab6be7a349f3db.out
@@ -0,0 +1 @@
+2013-06-06T12:13:20.123 Hello, World!
diff --git a/test/expected/test_text_file.sh_2e69c22dcfa37b5c3e8490a6026eacb7ca953998.err b/test/expected/test_text_file.sh_2e69c22dcfa37b5c3e8490a6026eacb7ca953998.err
deleted file mode 100644
index 08a372f..0000000
--- a/test/expected/test_text_file.sh_2e69c22dcfa37b5c3e8490a6026eacb7ca953998.err
+++ /dev/null
@@ -1,2 +0,0 @@
-✘ error: unable to open file: non-existent:
- reason: failed to ssh to host: ssh: Could not resolve hostname non-existent: nodename nor servname provided, or not known
diff --git a/test/expected/test_text_file.sh_4226123565a53b4e3f80e602c1f294721e8e07bf.err b/test/expected/test_text_file.sh_4226123565a53b4e3f80e602c1f294721e8e07bf.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_text_file.sh_4226123565a53b4e3f80e602c1f294721e8e07bf.err
diff --git a/test/expected/test_text_file.sh_4226123565a53b4e3f80e602c1f294721e8e07bf.out b/test/expected/test_text_file.sh_4226123565a53b4e3f80e602c1f294721e8e07bf.out
new file mode 100644
index 0000000..063e8c8
--- /dev/null
+++ b/test/expected/test_text_file.sh_4226123565a53b4e3f80e602c1f294721e8e07bf.out
@@ -0,0 +1,9 @@
+# Test file for syntax-highlighting
+
+def hello(abc):
+ """
+ This is a multi-line string
+
+ @param abc: blah blah
+ """
+ return abc + 1
diff --git a/test/expected/test_text_file.sh_4dd174410d702a7b4be794fb6fa2c8889bd768d6.err b/test/expected/test_text_file.sh_4dd174410d702a7b4be794fb6fa2c8889bd768d6.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_text_file.sh_4dd174410d702a7b4be794fb6fa2c8889bd768d6.err
diff --git a/test/expected/test_text_file.sh_4dd174410d702a7b4be794fb6fa2c8889bd768d6.out b/test/expected/test_text_file.sh_4dd174410d702a7b4be794fb6fa2c8889bd768d6.out
new file mode 100644
index 0000000..e6de131
--- /dev/null
+++ b/test/expected/test_text_file.sh_4dd174410d702a7b4be794fb6fa2c8889bd768d6.out
@@ -0,0 +1,6 @@
+ "author": "Ralls, Kim",
+ "title": "Midnight Rain",
+ "description": "A former architect battles corporate zombies, an evil sorceress, and her own childhood to become queen of the world."
+ }
+ ]
+}
diff --git a/test/expected/test_text_file.sh_596b120fbea638472a27964444e262b4572afacc.err b/test/expected/test_text_file.sh_596b120fbea638472a27964444e262b4572afacc.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_text_file.sh_596b120fbea638472a27964444e262b4572afacc.err
diff --git a/test/expected/test_text_file.sh_596b120fbea638472a27964444e262b4572afacc.out b/test/expected/test_text_file.sh_596b120fbea638472a27964444e262b4572afacc.out
new file mode 100644
index 0000000..84ebd40
--- /dev/null
+++ b/test/expected/test_text_file.sh_596b120fbea638472a27964444e262b4572afacc.out
@@ -0,0 +1,5 @@
+ "title": "Midnight Rain",
+ "description": "A former architect battles corporate zombies, an evil sorceress, and her own childhood to become queen of the world."
+ }
+ ]
+}
diff --git a/test/expected/test_text_file.sh_5b51b55dff7332c5bee2c9b797c401c5614d574a.out b/test/expected/test_text_file.sh_5b51b55dff7332c5bee2c9b797c401c5614d574a.out
index a39be1e..1f28ffd 100644
--- a/test/expected/test_text_file.sh_5b51b55dff7332c5bee2c9b797c401c5614d574a.out
+++ b/test/expected/test_text_file.sh_5b51b55dff7332c5bee2c9b797c401c5614d574a.out
@@ -1,4 +1,4 @@
-Build[1][2] Docs[3][4] Coverage Status[5][6] lnav[7][8]
+]8;;https://github.com/tstack/lnav/actions?query=workflow%3Aci-build\🖼 Build[1]]8;;\[2] ]8;;https://docs.lnav.org\🖼 Docs[3]]8;;\[4] ]8;;https://coveralls.io/github/tstack/lnav?branch=master\🖼 Coverage Status[5]]8;;\[6] ]8;;https://snapcraft.io/lnav\🖼 lnav[7]]8;;\[8]
▌[1] - https://github.com/tstack/lnav/workflows/ci-build/badge.svg
▌[2] - https://github.com/tstack/lnav/actions?query=workflow%3Aci-build
@@ -9,61 +9,122 @@
▌[7] - https://snapcraft.io/lnav/badge.svg
▌[8] - https://snapcraft.io/lnav
-<img
-src="https://assets-global.website-files.com/6257adef93867e50d84d30e2/62594fddd654fc29fcc07359_cb48d2a8d4991281d7a6a95d2f58195e.svg"
-height="20"/>[1]
+]8;;https://discord.gg/erBPnKwz7R\🖼 ]8;;\]8;;https://discord.gg/erBPnKwz7R\Discord Logo]8;;\]8;;https://discord.gg/erBPnKwz7R\[1]]8;;\[2]
- ▌[1] - https://discord.gg/erBPnKwz7R
+ ▌[1] - https://assets-global.website-files.com/6257adef93867e50d84d30e2/62594fddd654fc29fcc07359_cb48d2a8d4991281d7a6a95d2f58195e.svg
+ ▌[2] - https://discord.gg/erBPnKwz7R
-This is the source repository for lnav, visit https://lnav.org[1] for
+This is the source repository for lnav, visit ]8;;https://lnav.org\https://lnav.org]8;;\[1] for
a high level overview.
▌[1] - https://lnav.org
LNAV – The Logfile Navigator
-The Log File Navigator, lnav for short, is an advanced log file viewer
-for the small-scale. It is a terminal application that can understand
-your log files and make it easy for you to find problems with little
-to no setup.
+The Logfile Navigator is a log file viewer for the terminal. Given a
+set of files/directories, lnav will:
+
+ • decompress as needed;
+ • detect their format;
+ • merge the files together by time into a single view;
+ • tail the files, follow renames, find new files in
+ directories;
+ • build an index of errors and warnings;
+ • ]8;;https://docs.lnav.org/en/latest/formats.html#json-lines\pretty-print JSON-lines]8;;\[1].
+
+ ▌[1] - https://docs.lnav.org/en/latest/formats.html#json-lines
+
+Then, in the lnav TUI, you can:
+
+ • jump quickly to the previous/next error (]8;;https://docs.lnav.org/en/latest/hotkeys.html#spatial-navigation\press ]8;;\]8;;https://docs.lnav.org/en/latest/hotkeys.html#spatial-navigation\ e ]8;;\]8;;https://docs.lnav.org/en/latest/hotkeys.html#spatial-navigation\/]8;;\]8;;https://docs.lnav.org/en/latest/hotkeys.html#spatial-navigation\ E ]8;;\[1]);
+ • search using regular expressions (]8;;https://docs.lnav.org/en/latest/hotkeys.html#spatial-navigation\press ]8;;\]8;;https://docs.lnav.org/en/latest/hotkeys.html#spatial-navigation\ / ]8;;\[2]);
+ • highlight text with a regular expression (]8;;https://docs.lnav.org/en/latest/commands.html#highlight-pattern\ :highlight ]8;;\[3]
+ command);
+ • filter messages using ]8;;https://docs.lnav.org/en/latest/usage.html#regular-expression-match\regular expressions]8;;\[4] or ]8;;https://docs.lnav.org/en/latest/usage.html#sqlite-expression\SQLite]8;;\
+ ]8;;https://docs.lnav.org/en/latest/usage.html#sqlite-expression\expressions]8;;\[5];
+ • pretty-print structured text (]8;;https://docs.lnav.org/en/latest/ui.html#pretty\press ]8;;\]8;;https://docs.lnav.org/en/latest/ui.html#pretty\ P ]8;;\[6]);
+ • view a histogram of messages over time (]8;;https://docs.lnav.org/en/latest/ui.html#hist\press ]8;;\]8;;https://docs.lnav.org/en/latest/ui.html#hist\ i ]8;;\[7]);
+ • query messages using SQLite (]8;;https://docs.lnav.org/en/latest/sqlext.html\press ]8;;\]8;;https://docs.lnav.org/en/latest/sqlext.html\ ; ]8;;\[8])
+
+ ▌[1] - https://docs.lnav.org/en/latest/hotkeys.html#spatial-navigation
+ ▌[2] - https://docs.lnav.org/en/latest/hotkeys.html#spatial-navigation
+ ▌[3] - https://docs.lnav.org/en/latest/commands.html#highlight-pattern
+ ▌[4] - https://docs.lnav.org/en/latest/usage.html#regular-expression-match
+ ▌[5] - https://docs.lnav.org/en/latest/usage.html#sqlite-expression
+ ▌[6] - https://docs.lnav.org/en/latest/ui.html#pretty
+ ▌[7] - https://docs.lnav.org/en/latest/ui.html#hist
+ ▌[8] - https://docs.lnav.org/en/latest/sqlext.html
Screenshot
-The following screenshot shows a syslog file. Log lines are displayed
-with highlights. Errors are red and warnings are yellow.
+The following screenshot shows a mix of syslog and web access log
+files. Failed requests are shown in red. Identifiers, like IP
+address and PIDs are semantically highlighted.
-Screenshot[1][2]
+]8;;docs/assets/images/lnav-front-page.png\🖼 Screenshot[1]]8;;\[2]
- ▌[1] - file://{top_srcdir}/docs/assets/images/lnav-syslog-thumb.png
- ▌[2] - file://{top_srcdir}/docs/assets/images/lnav-syslog.png
+ ▌[1] - file://{top_srcdir}/docs/assets/images/lnav-front-page.png
+ ▌[2] - file://{top_srcdir}/docs/assets/images/lnav-front-page.png
-Features
+Why not just use  tail / grep / less ?
- • Log messages from different files are collated together
- into a single view
- • Automatic detection of log format
- • Automatic decompression of GZip and BZip2 files
- • Filter log messages based on regular expressions
- • Use SQL to analyze your logs
- • And more...
+The standard Unix utilities are great for processing raw text lines,
+however, they do not understand log messages. Tail can watch multiple
+files at a time, but it won't display messages in order by time and
+you can't scroll backwards. Grep will only find matching lines, but
+won't return a full multi-line log message. Less can only display a
+single file at a time. Also, none of these basic tools handle
+compressed files.
+
+Try online before installing
+
+You can SSH into a demo node to play with lnav before installing.
+
+The "playground" account starts lnav with a couple of log files as an
+example:
+
+]8;;ssh://playground@demo.lnav.org\ $ ssh playground@demo.lnav.org ]8;;\[1]
+
+ ▌[1] - ssh://playground@demo.lnav.org
+
+The "tutorial 1" account is an interactive tutorial that can teach you
+the basics of operation:
+
+]8;;ssh://tutorial1@demo.lnav.org\ $ ssh tutorial1@demo.lnav.org ]8;;\[1]
+
+ ▌[1] - ssh://tutorial1@demo.lnav.org
Installation
-Download a statically-linked binary for Linux/MacOS from the release
-page[1]
+]8;;https://github.com/tstack/lnav/releases/latest#release-artifacts\Download a statically-linked binary for Linux/MacOS from the release]8;;\
+]8;;https://github.com/tstack/lnav/releases/latest#release-artifacts\page]8;;\[1]
▌[1] - https://github.com/tstack/lnav/releases/latest#release-artifacts
+Brew on MacOS
+
+ ▌$ brew install lnav 
+
Usage
-The only file installed is the executable,  lnav . You can execute it
-with no arguments to view the default set of files:
+Simply point lnav at the files or directories you want to monitor, it
+will figure out the rest:
- ▌$ lnav 
+ ▌$ lnav /path/to/file1 /path/to/dir ... 
-You can view all the syslog messages by running:
+The lnav TUI will pop up right away and begin indexing the files.
+Progress is displayed in the "Files" panel at the bottom. Once the
+indexing has finished, the LOG view will display the log messages that
+were recognized[^1]. You can then use the usual hotkeys to move around
+the view (arrow keys or  j / k / h / l  to move down/up/left/right).
- ▌$ lnav /var/log/messages* 
+See the ]8;;https://docs.lnav.org/en/latest/usage.html\Usage section]8;;\[1] of the online documentation for more
+information.
+
+ ▌[1] - https://docs.lnav.org/en/latest/usage.html
+
+[^1]: Files that do not contain log messages can be seen in the TEXT
+view (reachable by pressing  t ).
Usage with  systemd-journald 
@@ -82,8 +143,9 @@ output format to include the year, otherwise  lnav  gets confused:
▌$ journalctl -o short-iso | lnav 
-It is also possible to use  journalctl 's json output format and  lnav
-will make use of additional fields such as PRIORITY and _SYSTEMD_UNIT:
+It is also possible to use  journalctl 's json output format and
+ lnav will make use of additional fields such as PRIORITY and
+_SYSTEMD_UNIT:
▌$ journalctl -o json | lnav 
@@ -100,8 +162,8 @@ the ones actually recognized by  lnav  for increased efficiency:
▌$ journalctl -o json --output-fields=MESSAGE,PRIORITY,_PID,SYSLOG_IDENTIFIER,_SYSTEMD_UNIT | lnav 
If your system has been running for a long time, for increased
-efficiency you may want to limit the number of log lines fed into  lnav
-, e.g. via  journalctl 's  -n  or  --since=...  options.
+efficiency you may want to limit the number of log lines fed into
+ lnav , e.g. via  journalctl 's  -n  or  --since=...  options.
In case of a persistent journal, you may want to limit the number of
log lines fed into  lnav  via  journalctl 's  -b  option.
@@ -111,9 +173,9 @@ log lines fed into  lnav  via  journalctl 's [
Please file issues on this repository or use the discussions section.
The following alternatives are also available:
- • support@lnav.org[1]
- • Discord[2]
- • Google Groups[3]
+ • ]8;;mailto:support@lnav.org\support@lnav.org]8;;\[1]
+ • ]8;;https://discord.gg/erBPnKwz7R\Discord]8;;\[2]
+ • ]8;;https://groups.google.com/g/lnav\Google Groups]8;;\[3]
▌[1] - mailto:support@lnav.org
▌[2] - https://discord.gg/erBPnKwz7R
@@ -121,9 +183,9 @@ The following alternatives are also available:
Links
- • Main Site[1]
- • Documentation[2] on Read the Docs
- • Internal Architecture[3]
+ • ]8;;https://lnav.org\Main Site]8;;\[1]
+ • ]8;;https://docs.lnav.org\Documentation]8;;\[2] on Read the Docs
+ • ]8;;ARCHITECTURE.md\Internal Architecture]8;;\[3]
▌[1] - https://lnav.org
▌[2] - https://docs.lnav.org
@@ -131,7 +193,7 @@ The following alternatives are also available:
Contributing
- • Become a Sponsor on GitHub[1]
+ • ]8;;https://github.com/sponsors/tstack\Become a Sponsor on GitHub]8;;\[1]
▌[1] - https://github.com/sponsors/tstack
@@ -144,18 +206,20 @@ The following software packages are required to build lnav:
• gcc/clang - A C++14-compatible compiler.
• libpcre2 - The Perl Compatible Regular Expression v2
(PCRE2) library.
- • sqlite - The SQLite database engine. Version 3.9.0
- or higher is required.
+ • sqlite - The SQLite database engine. Version
+ 3.9.0 or higher is required.
• ncurses - The ncurses text UI library.
• readline - The readline line editing library.
• zlib - The zlib compression library.
• bz2 - The bzip2 compression library.
• libcurl - The cURL library for downloading files
from URLs. Version 7.23.0 or higher is required.
- • libarchive - The libarchive library for opening archive
- files, like zip/tgz.
+ • libarchive - The libarchive library for opening
+ archive files, like zip/tgz.
• wireshark - The 'tshark' program is used to interpret
pcap files.
+ • cargo/rust - The Rust language is used to build the
+ PRQL compiler.
Build
@@ -170,9 +234,8 @@ Run  ./autogen.sh  if compiling from a cloned repository.
See Also
-Angle-grinder[1] is a tool to slice and dice log files on the
+]8;;https://github.com/rcoh/angle-grinder\Angle-grinder]8;;\[1] is a tool to slice and dice log files on the
command-line. If you're familiar with the SumoLogic query language,
you might find this tool more comfortable to work with.
▌[1] - https://github.com/rcoh/angle-grinder
-
diff --git a/test/expected/test_text_file.sh_5e9320f18d066e6fc930dbbffc357af64312bd4b.err b/test/expected/test_text_file.sh_5e9320f18d066e6fc930dbbffc357af64312bd4b.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_text_file.sh_5e9320f18d066e6fc930dbbffc357af64312bd4b.err
diff --git a/test/expected/test_text_file.sh_5e9320f18d066e6fc930dbbffc357af64312bd4b.out b/test/expected/test_text_file.sh_5e9320f18d066e6fc930dbbffc357af64312bd4b.out
new file mode 100644
index 0000000..1a4081b
--- /dev/null
+++ b/test/expected/test_text_file.sh_5e9320f18d066e6fc930dbbffc357af64312bd4b.out
@@ -0,0 +1,42 @@
+[
+ {
+ "top_meta": {
+ "file": "ECHO(1)",
+ "breadcrumbs": [
+ {
+ "display_value": "ECHO(1)",
+ "search_placeholder": "",
+ "possibilities": [
+ {
+ "display_value": "ECHO(1)"
+ }
+ ]
+ },
+ {
+ "display_value": "⋯",
+ "search_placeholder": "",
+ "possibilities": [
+ {
+ "display_value": "DESCRIPTION"
+ },
+ {
+ "display_value": "EXIT STATUS"
+ },
+ {
+ "display_value": "NAME"
+ },
+ {
+ "display_value": "SEE ALSO"
+ },
+ {
+ "display_value": "STANDARDS"
+ },
+ {
+ "display_value": "SYNOPSIS"
+ }
+ ]
+ }
+ ]
+ }
+ }
+]
diff --git a/test/expected/test_text_file.sh_6a24078983cf1b7a80b6fb65d5186cd125498136.out b/test/expected/test_text_file.sh_6a24078983cf1b7a80b6fb65d5186cd125498136.out
index accb1c3..3fe2949 100644
--- a/test/expected/test_text_file.sh_6a24078983cf1b7a80b6fb65d5186cd125498136.out
+++ b/test/expected/test_text_file.sh_6a24078983cf1b7a80b6fb65d5186cd125498136.out
@@ -1,40 +1,73 @@
Screenshot
-The following screenshot shows a syslog file. Log lines are displayed
-with highlights. Errors are red and warnings are yellow.
+The following screenshot shows a mix of syslog and web access log
+files. Failed requests are shown in red. Identifiers, like IP
+address and PIDs are semantically highlighted.
-Screenshot[1][2]
+]8;;docs/assets/images/lnav-front-page.png\🖼 Screenshot[1]]8;;\[2]
- ▌[1] - file://{top_srcdir}/docs/assets/images/lnav-syslog-thumb.png
- ▌[2] - file://{top_srcdir}/docs/assets/images/lnav-syslog.png
+ ▌[1] - file://{top_srcdir}/docs/assets/images/lnav-front-page.png
+ ▌[2] - file://{top_srcdir}/docs/assets/images/lnav-front-page.png
-Features
+Why not just use  tail / grep / less ?
- • Log messages from different files are collated together
- into a single view
- • Automatic detection of log format
- • Automatic decompression of GZip and BZip2 files
- • Filter log messages based on regular expressions
- • Use SQL to analyze your logs
- • And more...
+The standard Unix utilities are great for processing raw text lines,
+however, they do not understand log messages. Tail can watch multiple
+files at a time, but it won't display messages in order by time and
+you can't scroll backwards. Grep will only find matching lines, but
+won't return a full multi-line log message. Less can only display a
+single file at a time. Also, none of these basic tools handle
+compressed files.
+
+Try online before installing
+
+You can SSH into a demo node to play with lnav before installing.
+
+The "playground" account starts lnav with a couple of log files as an
+example:
+
+]8;;ssh://playground@demo.lnav.org\ $ ssh playground@demo.lnav.org ]8;;\[1]
+
+ ▌[1] - ssh://playground@demo.lnav.org
+
+The "tutorial 1" account is an interactive tutorial that can teach you
+the basics of operation:
+
+]8;;ssh://tutorial1@demo.lnav.org\ $ ssh tutorial1@demo.lnav.org ]8;;\[1]
+
+ ▌[1] - ssh://tutorial1@demo.lnav.org
Installation
-Download a statically-linked binary for Linux/MacOS from the release
-page[1]
+]8;;https://github.com/tstack/lnav/releases/latest#release-artifacts\Download a statically-linked binary for Linux/MacOS from the release]8;;\
+]8;;https://github.com/tstack/lnav/releases/latest#release-artifacts\page]8;;\[1]
▌[1] - https://github.com/tstack/lnav/releases/latest#release-artifacts
+Brew on MacOS
+
+ ▌$ brew install lnav 
+
Usage
-The only file installed is the executable,  lnav . You can execute it
-with no arguments to view the default set of files:
+Simply point lnav at the files or directories you want to monitor, it
+will figure out the rest:
- ▌$ lnav 
+ ▌$ lnav /path/to/file1 /path/to/dir ... 
-You can view all the syslog messages by running:
+The lnav TUI will pop up right away and begin indexing the files.
+Progress is displayed in the "Files" panel at the bottom. Once the
+indexing has finished, the LOG view will display the log messages that
+were recognized[^1]. You can then use the usual hotkeys to move around
+the view (arrow keys or  j / k / h / l  to move down/up/left/right).
- ▌$ lnav /var/log/messages* 
+See the ]8;;https://docs.lnav.org/en/latest/usage.html\Usage section]8;;\[1] of the online documentation for more
+information.
+
+ ▌[1] - https://docs.lnav.org/en/latest/usage.html
+
+[^1]: Files that do not contain log messages can be seen in the TEXT
+view (reachable by pressing  t ).
Usage with  systemd-journald 
@@ -53,8 +86,9 @@ output format to include the year, otherwise  lnav  gets confused:
▌$ journalctl -o short-iso | lnav 
-It is also possible to use  journalctl 's json output format and  lnav
-will make use of additional fields such as PRIORITY and _SYSTEMD_UNIT:
+It is also possible to use  journalctl 's json output format and
+ lnav will make use of additional fields such as PRIORITY and
+_SYSTEMD_UNIT:
▌$ journalctl -o json | lnav 
@@ -71,8 +105,8 @@ the ones actually recognized by  lnav  for increased efficiency:
▌$ journalctl -o json --output-fields=MESSAGE,PRIORITY,_PID,SYSLOG_IDENTIFIER,_SYSTEMD_UNIT | lnav 
If your system has been running for a long time, for increased
-efficiency you may want to limit the number of log lines fed into  lnav
-, e.g. via  journalctl 's  -n  or  --since=...  options.
+efficiency you may want to limit the number of log lines fed into
+ lnav , e.g. via  journalctl 's  -n  or  --since=...  options.
In case of a persistent journal, you may want to limit the number of
log lines fed into  lnav  via  journalctl 's  -b  option.
@@ -82,9 +116,9 @@ log lines fed into  lnav  via  journalctl 's [
Please file issues on this repository or use the discussions section.
The following alternatives are also available:
- • support@lnav.org[1]
- • Discord[2]
- • Google Groups[3]
+ • ]8;;mailto:support@lnav.org\support@lnav.org]8;;\[1]
+ • ]8;;https://discord.gg/erBPnKwz7R\Discord]8;;\[2]
+ • ]8;;https://groups.google.com/g/lnav\Google Groups]8;;\[3]
▌[1] - mailto:support@lnav.org
▌[2] - https://discord.gg/erBPnKwz7R
@@ -92,9 +126,9 @@ The following alternatives are also available:
Links
- • Main Site[1]
- • Documentation[2] on Read the Docs
- • Internal Architecture[3]
+ • ]8;;https://lnav.org\Main Site]8;;\[1]
+ • ]8;;https://docs.lnav.org\Documentation]8;;\[2] on Read the Docs
+ • ]8;;ARCHITECTURE.md\Internal Architecture]8;;\[3]
▌[1] - https://lnav.org
▌[2] - https://docs.lnav.org
@@ -102,7 +136,7 @@ The following alternatives are also available:
Contributing
- • Become a Sponsor on GitHub[1]
+ • ]8;;https://github.com/sponsors/tstack\Become a Sponsor on GitHub]8;;\[1]
▌[1] - https://github.com/sponsors/tstack
@@ -115,18 +149,20 @@ The following software packages are required to build lnav:
• gcc/clang - A C++14-compatible compiler.
• libpcre2 - The Perl Compatible Regular Expression v2
(PCRE2) library.
- • sqlite - The SQLite database engine. Version 3.9.0
- or higher is required.
+ • sqlite - The SQLite database engine. Version
+ 3.9.0 or higher is required.
• ncurses - The ncurses text UI library.
• readline - The readline line editing library.
• zlib - The zlib compression library.
• bz2 - The bzip2 compression library.
• libcurl - The cURL library for downloading files
from URLs. Version 7.23.0 or higher is required.
- • libarchive - The libarchive library for opening archive
- files, like zip/tgz.
+ • libarchive - The libarchive library for opening
+ archive files, like zip/tgz.
• wireshark - The 'tshark' program is used to interpret
pcap files.
+ • cargo/rust - The Rust language is used to build the
+ PRQL compiler.
Build
@@ -141,9 +177,8 @@ Run  ./autogen.sh  if compiling from a cloned repository.
See Also
-Angle-grinder[1] is a tool to slice and dice log files on the
+]8;;https://github.com/rcoh/angle-grinder\Angle-grinder]8;;\[1] is a tool to slice and dice log files on the
command-line. If you're familiar with the SumoLogic query language,
you might find this tool more comfortable to work with.
▌[1] - https://github.com/rcoh/angle-grinder
-
diff --git a/test/expected/test_text_file.sh_73f69c883f60761bff9f8874f61d21a189e92912.err b/test/expected/test_text_file.sh_73f69c883f60761bff9f8874f61d21a189e92912.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_text_file.sh_73f69c883f60761bff9f8874f61d21a189e92912.err
diff --git a/test/expected/test_text_file.sh_73f69c883f60761bff9f8874f61d21a189e92912.out b/test/expected/test_text_file.sh_73f69c883f60761bff9f8874f61d21a189e92912.out
new file mode 100644
index 0000000..b3ee8cf
--- /dev/null
+++ b/test/expected/test_text_file.sh_73f69c883f60761bff9f8874f61d21a189e92912.out
@@ -0,0 +1,43 @@
+[
+ {
+ "top_meta": {
+ "file": "ECHO(1)",
+ "anchor": "#description",
+ "breadcrumbs": [
+ {
+ "display_value": "ECHO(1)",
+ "search_placeholder": "",
+ "possibilities": [
+ {
+ "display_value": "ECHO(1)"
+ }
+ ]
+ },
+ {
+ "display_value": "DESCRIPTION",
+ "search_placeholder": "",
+ "possibilities": [
+ {
+ "display_value": "DESCRIPTION"
+ },
+ {
+ "display_value": "EXIT STATUS"
+ },
+ {
+ "display_value": "NAME"
+ },
+ {
+ "display_value": "SEE ALSO"
+ },
+ {
+ "display_value": "STANDARDS"
+ },
+ {
+ "display_value": "SYNOPSIS"
+ }
+ ]
+ }
+ ]
+ }
+ }
+]
diff --git a/test/expected/test_text_file.sh_786c7262f977201af36b0e69ba1a2aba130bbb06.err b/test/expected/test_text_file.sh_786c7262f977201af36b0e69ba1a2aba130bbb06.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_text_file.sh_786c7262f977201af36b0e69ba1a2aba130bbb06.err
diff --git a/test/expected/test_text_file.sh_786c7262f977201af36b0e69ba1a2aba130bbb06.out b/test/expected/test_text_file.sh_786c7262f977201af36b0e69ba1a2aba130bbb06.out
new file mode 100644
index 0000000..efb5ebd
--- /dev/null
+++ b/test/expected/test_text_file.sh_786c7262f977201af36b0e69ba1a2aba130bbb06.out
@@ -0,0 +1,4 @@
+Duis aute irure dolor in reprehenderit in voluptate velit
+esse cillum dolore eu fugiat nulla pariatur. Excepteur
+sint occaecat cupidatat non proident, sunt in culpa qui
+officia deserunt mollit anim id est laborum.
diff --git a/test/expected/test_text_file.sh_78f252288519c8f767bb2759ea32959dab2ebc46.err b/test/expected/test_text_file.sh_78f252288519c8f767bb2759ea32959dab2ebc46.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_text_file.sh_78f252288519c8f767bb2759ea32959dab2ebc46.err
diff --git a/test/expected/test_text_file.sh_78f252288519c8f767bb2759ea32959dab2ebc46.out b/test/expected/test_text_file.sh_78f252288519c8f767bb2759ea32959dab2ebc46.out
new file mode 100644
index 0000000..97ad4bc
--- /dev/null
+++ b/test/expected/test_text_file.sh_78f252288519c8f767bb2759ea32959dab2ebc46.out
@@ -0,0 +1,98 @@
+[
+ {
+ "top_meta": {
+ "file": "{test_dir}/formats/jsontest/format.json",
+ "anchor": "#/test_log/line-format/4/overflow",
+ "breadcrumbs": [
+ {
+ "display_value": "format.json",
+ "search_placeholder": "",
+ "possibilities": [
+ {
+ "display_value": "format.json"
+ }
+ ]
+ },
+ {
+ "display_value": "test_log",
+ "search_placeholder": "",
+ "possibilities": [
+ {
+ "display_value": "$schema"
+ },
+ {
+ "display_value": "test_log"
+ }
+ ]
+ },
+ {
+ "display_value": "line-format",
+ "search_placeholder": "",
+ "possibilities": [
+ {
+ "display_value": "body-field"
+ },
+ {
+ "display_value": "description"
+ },
+ {
+ "display_value": "file-pattern"
+ },
+ {
+ "display_value": "json"
+ },
+ {
+ "display_value": "level-field"
+ },
+ {
+ "display_value": "line-format"
+ },
+ {
+ "display_value": "timestamp-field"
+ },
+ {
+ "display_value": "title"
+ },
+ {
+ "display_value": "value"
+ }
+ ]
+ },
+ {
+ "display_value": "[4]",
+ "search_placeholder": "(Enter a number from 0 to 6)",
+ "possibilities": [
+
+ ]
+ },
+ {
+ "display_value": "overflow",
+ "search_placeholder": "",
+ "possibilities": [
+ {
+ "display_value": "default-value"
+ },
+ {
+ "display_value": "field"
+ },
+ {
+ "display_value": "max-width"
+ },
+ {
+ "display_value": "min-width"
+ },
+ {
+ "display_value": "overflow"
+ },
+ {
+ "display_value": "prefix"
+ },
+ {
+ "display_value": "suffix"
+ }
+ ]
+ }
+ ]
+ }
+ }
+]
diff --git a/test/expected/test_text_file.sh_7b00f32a3fff7fc2d78a87045ae842e58be88480.out b/test/expected/test_text_file.sh_7b00f32a3fff7fc2d78a87045ae842e58be88480.out
index 4855b3d..c9d7942 100644
--- a/test/expected/test_text_file.sh_7b00f32a3fff7fc2d78a87045ae842e58be88480.out
+++ b/test/expected/test_text_file.sh_7b00f32a3fff7fc2d78a87045ae842e58be88480.out
@@ -5,6 +5,6 @@
 * FEATURES: network-sandbox preserve-libs sandbox test userpriv usersandbox
* Checking whether python3_11 is suitable ...
* >=dev-lang/python-3.11.1-r1:3.11 ...
- [ ok ]
+ [ ok ]
* Using python3.11 to build (via PYTHON_COMPAT iteration)
>>> Unpacking source...
diff --git a/test/expected/test_text_file.sh_801414c6bb6d3f9225973eafa3c6dfa49cd2081d.out b/test/expected/test_text_file.sh_801414c6bb6d3f9225973eafa3c6dfa49cd2081d.out
deleted file mode 100644
index a7ed740..0000000
--- a/test/expected/test_text_file.sh_801414c6bb6d3f9225973eafa3c6dfa49cd2081d.out
+++ /dev/null
@@ -1,111 +0,0 @@
-/**
- * Copyright (c) 2018, Timothy Stack
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * * Redistributions of source code must retain the above copyright notice, this
- * list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * * Neither the name of Timothy Stack nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ''AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "log_level.hh"
-
-#include <ctype.h>
-
-#include "config.h"
-
-const char* level_names[LEVEL__MAX + 1] = {
- "unknown",
- "trace",
- "debug5",
- "debug4",
- "debug3",
- "debug2",
- "debug",
- "info",
- "stats",
- "notice",
- "warning",
- "error",
- "critical",
- "fatal",
- "invalid",
-
- nullptr,
-};
-
-log_level_t
-abbrev2level(const char* levelstr, ssize_t len)
-{
- if (len == 0 || levelstr[0] == '\0') {
- return LEVEL_UNKNOWN;
- }
-
- switch (toupper(levelstr[0])) {
- case 'T':
- return LEVEL_TRACE;
- case 'D':
- case 'V':
- if (len > 1) {
- switch (levelstr[len - 1]) {
- case '2':
- return LEVEL_DEBUG2;
- case '3':
- return LEVEL_DEBUG3;
- case '4':
- return LEVEL_DEBUG4;
- case '5':
- return LEVEL_DEBUG5;
- }
- }
- return LEVEL_DEBUG;
- case 'I':
- if (len == 7 && toupper(levelstr[1]) == 'N'
- && toupper(levelstr[2]) == 'V' && toupper(levelstr[3]) == 'A'
- && toupper(levelstr[4]) == 'L' && toupper(levelstr[5]) == 'I'
- && toupper(levelstr[6]) == 'D')
- {
- return LEVEL_INVALID;
- }
- return LEVEL_INFO;
- case 'S':
- return LEVEL_STATS;
- case 'N':
- return LEVEL_NOTICE;
- case 'W':
- return LEVEL_WARNING;
- case 'E':
- return LEVEL_ERROR;
- case 'C':
- return LEVEL_CRITICAL;
- case 'F':
- return LEVEL_FATAL;
- default:
- return LEVEL_UNKNOWN;
- }
-}
-
-int
-levelcmp(const char* l1, ssize_t l1_len, const char* l2, ssize_t l2_len)
-{
- return abbrev2level(l1, l1_len) - abbrev2level(l2, l2_len);
-}
diff --git a/test/expected/test_text_file.sh_87943c6be50d701a03e901f16493314c839af1ab.out b/test/expected/test_text_file.sh_87943c6be50d701a03e901f16493314c839af1ab.out
index ae06214..5ab78b4 100644
--- a/test/expected/test_text_file.sh_87943c6be50d701a03e901f16493314c839af1ab.out
+++ b/test/expected/test_text_file.sh_87943c6be50d701a03e901f16493314c839af1ab.out
@@ -1,31 +1,31 @@
-/**
- * Copyright (c) 2018, Timothy Stack
- *
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- *
- * * Redistributions of source code must retain the above copyright notice, this
- * list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * * Neither the name of Timothy Stack nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ''AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
+/**
+ * Copyright (c) 2018, Timothy Stack
+ *
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * * Neither the name of Timothy Stack nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ''AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
#include "log_level.hh"
diff --git a/test/expected/test_text_file.sh_8a4954af3e536b3789b1fd5b33519e9d444cc933.err b/test/expected/test_text_file.sh_8a4954af3e536b3789b1fd5b33519e9d444cc933.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_text_file.sh_8a4954af3e536b3789b1fd5b33519e9d444cc933.err
diff --git a/test/expected/test_text_file.sh_8a4954af3e536b3789b1fd5b33519e9d444cc933.out b/test/expected/test_text_file.sh_8a4954af3e536b3789b1fd5b33519e9d444cc933.out
new file mode 100644
index 0000000..e6de131
--- /dev/null
+++ b/test/expected/test_text_file.sh_8a4954af3e536b3789b1fd5b33519e9d444cc933.out
@@ -0,0 +1,6 @@
+ "author": "Ralls, Kim",
+ "title": "Midnight Rain",
+ "description": "A former architect battles corporate zombies, an evil sorceress, and her own childhood to become queen of the world."
+ }
+ ]
+}
diff --git a/test/expected/test_text_file.sh_8b2cd055e6a1db2ed9b2af2a917f8556395fa653.out b/test/expected/test_text_file.sh_8b2cd055e6a1db2ed9b2af2a917f8556395fa653.out
index c8719bb..0290454 100644
--- a/test/expected/test_text_file.sh_8b2cd055e6a1db2ed9b2af2a917f8556395fa653.out
+++ b/test/expected/test_text_file.sh_8b2cd055e6a1db2ed9b2af2a917f8556395fa653.out
@@ -1,2 +1,2 @@
- filepath  descriptor  mimetype  content 
-{test_dir}/textfile_0.md net.daringfireball.markdown.frontmatter application/json {␊ "comment": "This is JSON front-matter"␊} 
+ filepath   descriptor   mimetype   content  
+{test_dir}/textfile_0.md net.daringfireball.markdown.frontmatter application/json {␊ "comment": "This is JSON front-matter"␊}
diff --git a/test/expected/test_text_file.sh_a87c18c643994c3dbbbbb619a06a601d3668ea71.err b/test/expected/test_text_file.sh_a87c18c643994c3dbbbbb619a06a601d3668ea71.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_text_file.sh_a87c18c643994c3dbbbbb619a06a601d3668ea71.err
diff --git a/test/expected/test_text_file.sh_a87c18c643994c3dbbbbb619a06a601d3668ea71.out b/test/expected/test_text_file.sh_a87c18c643994c3dbbbbb619a06a601d3668ea71.out
new file mode 100644
index 0000000..8fd43aa
--- /dev/null
+++ b/test/expected/test_text_file.sh_a87c18c643994c3dbbbbb619a06a601d3668ea71.out
@@ -0,0 +1,2 @@
+time for a reset ⎋ckapow
+ding dong! 🔔
diff --git a/test/expected/test_text_file.sh_ac486314c4e02e480d829ea2f077b86c49fedcec.out b/test/expected/test_text_file.sh_ac486314c4e02e480d829ea2f077b86c49fedcec.out
index 5a1b89a..243bfc7 100644
--- a/test/expected/test_text_file.sh_ac486314c4e02e480d829ea2f077b86c49fedcec.out
+++ b/test/expected/test_text_file.sh_ac486314c4e02e480d829ea2f077b86c49fedcec.out
@@ -1,4 +1,4 @@
+command-line. If you're familiar with the SumoLogic query language,
you might find this tool more comfortable to work with.
▌[1] - https://github.com/rcoh/angle-grinder
-
diff --git a/test/expected/test_text_file.sh_c21295f131c221861568bda5014b76ef99bdd11f.out b/test/expected/test_text_file.sh_c21295f131c221861568bda5014b76ef99bdd11f.out
deleted file mode 100644
index 59a0aa9..0000000
--- a/test/expected/test_text_file.sh_c21295f131c221861568bda5014b76ef99bdd11f.out
+++ /dev/null
@@ -1,159 +0,0 @@
-Build[1][2] Docs[3][4] Coverage Status[5][6] lnav[7][8]
-
- ▌[1] - https://github.com/tstack/lnav/workflows/ci-build/badge.svg
- ▌[2] - https://github.com/tstack/lnav/actions?query=workflow%3Aci-build
- ▌[3] - https://readthedocs.org/projects/lnav/badge/?version=latest&style=plastic
- ▌[4] - https://docs.lnav.org
- ▌[5] - https://coveralls.io/repos/github/tstack/lnav/badge.svg?branch=master
- ▌[6] - https://coveralls.io/github/tstack/lnav?branch=master
- ▌[7] - https://snapcraft.io//lnav/badge.svg
- ▌[8] - https://snapcraft.io/lnav
-
-This is the source repository for lnav, visit https://lnav.org[1] for
-a high level overview.
-
- ▌[1] - https://lnav.org
-
-LNAV – The Logfile Navigator
-
-The Log File Navigator, lnav for short, is an advanced log file viewer
-for the small-scale. It is a terminal application that can understand
-your log files and make it easy for you to find problems with little
-to no setup.
-
-Screenshot
-
-The following screenshot shows a syslog file. Log lines are displayed
-with highlights. Errors are red and warnings are yellow.
-
-Screenshot[1][2]
-
- ▌[1] - file://{top_srcdir}/docs/assets/images/lnav-syslog-thumb.png
- ▌[2] - file://{top_srcdir}/docs/assets/images/lnav-syslog.png
-
-Features
-
- • Log messages from different files are collated together
- into a single view
- • Automatic detection of log format
- • Automatic decompression of GZip and BZip2 files
- • Filter log messages based on regular expressions
- • Use SQL to analyze your logs
- • And more...
-
-Installation
-
-Download a statically-linked binary for Linux/MacOS from the release
-page[1]
-
- ▌[1] - https://github.com/tstack/lnav/releases/latest#release-artifacts
-
-Usage
-
-The only file installed is the executable,  lnav . You can execute it
-with no arguments to view the default set of files:
-
- ▌$ lnav 
-
-You can view all the syslog messages by running:
-
- ▌$ lnav /var/log/messages* 
-
-Usage with  systemd-journald 
-
-On systems running  systemd-journald , you can use  lnav  as the
-pager:
-
- ▌$ journalctl | lnav 
-
-or in follow mode:
-
- ▌$ journalctl -f | lnav 
-
-Since  journalctl 's default output format omits the year, if you are
-viewing logs which span multiple years you will need to change the
-output format to include the year, otherwise  lnav  gets confused:
-
- ▌$ journalctl -o short-iso | lnav 
-
-It is also possible to use  journalctl 's json output format and  lnav
-will make use of additional fields such as PRIORITY and _SYSTEMD_UNIT:
-
- ▌$ journalctl -o json | lnav 
-
-In case some MESSAGE fields contain special characters such as ANSI
-color codes which are considered as unprintable by journalctl,
-specifying  journalctl 's  -a  option might be preferable in order to
-output those messages still in a non binary representation:
-
- ▌$ journalctl -a -o json | lnav 
-
-If using systemd v236 or newer, the output fields can be limited to
-the ones actually recognized by  lnav  for increased efficiency:
-
- ▌$ journalctl -o json --output-fields=MESSAGE,PRIORITY,_PID,SYSLOG_IDENTIFIER,_SYSTEMD_UNIT | lnav 
-
-If your system has been running for a long time, for increased
-efficiency you may want to limit the number of log lines fed into  lnav
-, e.g. via  journalctl 's  -n  or  --since=...  options.
-
-In case of a persistent journal, you may want to limit the number of
-log lines fed into  lnav  via  journalctl 's  -b  option.
-
-Links
-
- • Main Site[1]
- • Documentation[2] on Read the Docs
- • Internal Architecture[3]
-
- ▌[1] - https://lnav.org
- ▌[2] - https://docs.lnav.org
- ▌[3] - file://{top_srcdir}/ARCHITECTURE.md
-
-Contributing
-
- • Become a Sponsor on GitHub[1]
-
- ▌[1] - https://github.com/sponsors/tstack
-
-Building From Source
-
-Prerequisites
-
-The following software packages are required to build lnav:
-
- • gcc/clang - A C++14-compatible compiler.
- • libpcre - The Perl Compatible Regular Expression
- (PCRE) library.
- • sqlite - The SQLite database engine. Version 3.9.0
- or higher is required.
- • ncurses - The ncurses text UI library.
- • readline - The readline line editing library.
- • zlib - The zlib compression library.
- • bz2 - The bzip2 compression library.
- • libcurl - The cURL library for downloading files
- from URLs. Version 7.23.0 or higher is required.
- • libarchive - The libarchive library for opening archive
- files, like zip/tgz.
- • wireshark - The 'tshark' program is used to interpret
- pcap files.
-
-Build
-
-Lnav follows the usual GNU style for configuring and installing
-software:
-
-Run  ./autogen.sh  if compiling from a cloned repository.
-
- ▌$ ./configure 
- ▌$ make 
- ▌$ sudo make install 
-
-See Also
-
-Angle-grinder[1] is a tool to slice and dice log files on the
-command-line. If you're familiar with the SumoLogic query language,
-you might find this tool more comfortable to work with.
-
- ▌[1] - https://github.com/rcoh/angle-grinder
-
diff --git a/test/expected/test_text_file.sh_c2a346ca1da2da4346f1d310212e166767993ce9.out b/test/expected/test_text_file.sh_c2a346ca1da2da4346f1d310212e166767993ce9.out
index 1efd1ba..48d7862 100644
--- a/test/expected/test_text_file.sh_c2a346ca1da2da4346f1d310212e166767993ce9.out
+++ b/test/expected/test_text_file.sh_c2a346ca1da2da4346f1d310212e166767993ce9.out
@@ -2,7 +2,7 @@
{
"top_meta": {
"file": "{top_srcdir}/README.md",
- "anchor": "#support",
+ "anchor": "#usage",
"breadcrumbs": [
{
"display_value": "README.md",
@@ -23,16 +23,13 @@
]
},
{
- "display_value": "Support",
+ "display_value": "Usage",
"search_placeholder": "",
"possibilities": [
{
"display_value": "Contributing"
},
{
- "display_value": "Features"
- },
- {
"display_value": "Installation"
},
{
@@ -48,7 +45,22 @@
"display_value": "Support"
},
{
+ "display_value": "Try online before installing"
+ },
+ {
"display_value": "Usage"
+ },
+ {
+ "display_value": "Why not just use tail / grep / less ?"
+ }
+ ]
+ },
+ {
+ "display_value": "⋯",
+ "search_placeholder": "",
+ "possibilities": [
+ {
+ "display_value": "Usage with systemd-journald "
}
]
}
diff --git a/test/expected/test_text_file.sh_d59b67113864ef5e77267d7fd8ad4072f5aef0fc.err b/test/expected/test_text_file.sh_d59b67113864ef5e77267d7fd8ad4072f5aef0fc.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_text_file.sh_d59b67113864ef5e77267d7fd8ad4072f5aef0fc.err
diff --git a/test/expected/test_text_file.sh_d59b67113864ef5e77267d7fd8ad4072f5aef0fc.out b/test/expected/test_text_file.sh_d59b67113864ef5e77267d7fd8ad4072f5aef0fc.out
new file mode 100644
index 0000000..30b1d02
--- /dev/null
+++ b/test/expected/test_text_file.sh_d59b67113864ef5e77267d7fd8ad4072f5aef0fc.out
@@ -0,0 +1,51 @@
+
+Test
+
+ • One
+ • Two
+ • Three
+
+🖼 ]8;;file://{top_srcdir}/docs/lnav-tui.png\lnav-tui.png]8;;\[1]
+
+🖼 ]8;;file://{top_srcdir}/docs/lnav-architecture.png\The internal architecture of lnav]8;;\[2]
+
+ ▌[1] - file://{top_srcdir}/docs/lnav-tui.png
+ ▌[2] - file://{top_srcdir}/docs/lnav-architecture.png
+
+Bold red
+
+Underline
+
+ Hello,
+ World!
+
+
+Goodbye, ▌World╏!
+
+ ▌foo bar bar 
+ ▌baz "xyz" 
+
+ ▌/* 
+ ▌ * This program prints "Hello, World!" 
+ ▌ */ 
+ ▌ 
+ ▌#include <stdio.h> 
+ ▌ 
+ ▌int main() { 
+ ▌ printf("Hello, World!\n"); 
+ ▌} 
+
+ ▌def hw(name): 
+ ▌ """ 
+ ▌ This function prints "Hello, <name>!" 
+ ▌ """ 
+ ▌ 
+ ▌ print(f"Hello, {name}!") # test comment 
+
+ ▌<?xml version="1.0" encoding="utf-8" ?> 
+ ▌<books> 
+ ▌ <!-- Line comment --> 
+ ▌ <book id="100"> 
+ ▌ <author>Finnegan</author> 
+ ▌ </book> 
+ ▌</books> 
diff --git a/test/expected/test_text_file.sh_e088ea61a5382458cc48a2607e2639e52b0be1da.out b/test/expected/test_text_file.sh_e088ea61a5382458cc48a2607e2639e52b0be1da.out
index accb1c3..3fe2949 100644
--- a/test/expected/test_text_file.sh_e088ea61a5382458cc48a2607e2639e52b0be1da.out
+++ b/test/expected/test_text_file.sh_e088ea61a5382458cc48a2607e2639e52b0be1da.out
@@ -1,40 +1,73 @@
Screenshot
-The following screenshot shows a syslog file. Log lines are displayed
-with highlights. Errors are red and warnings are yellow.
+The following screenshot shows a mix of syslog and web access log
+files. Failed requests are shown in red. Identifiers, like IP
+address and PIDs are semantically highlighted.
-Screenshot[1][2]
+]8;;docs/assets/images/lnav-front-page.png\🖼 Screenshot[1]]8;;\[2]
- ▌[1] - file://{top_srcdir}/docs/assets/images/lnav-syslog-thumb.png
- ▌[2] - file://{top_srcdir}/docs/assets/images/lnav-syslog.png
+ ▌[1] - file://{top_srcdir}/docs/assets/images/lnav-front-page.png
+ ▌[2] - file://{top_srcdir}/docs/assets/images/lnav-front-page.png
-Features
+Why not just use  tail / grep / less ?
- • Log messages from different files are collated together
- into a single view
- • Automatic detection of log format
- • Automatic decompression of GZip and BZip2 files
- • Filter log messages based on regular expressions
- • Use SQL to analyze your logs
- • And more...
+The standard Unix utilities are great for processing raw text lines,
+however, they do not understand log messages. Tail can watch multiple
+files at a time, but it won't display messages in order by time and
+you can't scroll backwards. Grep will only find matching lines, but
+won't return a full multi-line log message. Less can only display a
+single file at a time. Also, none of these basic tools handle
+compressed files.
+
+Try online before installing
+
+You can SSH into a demo node to play with lnav before installing.
+
+The "playground" account starts lnav with a couple of log files as an
+example:
+
+]8;;ssh://playground@demo.lnav.org\ $ ssh playground@demo.lnav.org ]8;;\[1]
+
+ ▌[1] - ssh://playground@demo.lnav.org
+
+The "tutorial 1" account is an interactive tutorial that can teach you
+the basics of operation:
+
+]8;;ssh://tutorial1@demo.lnav.org\ $ ssh tutorial1@demo.lnav.org ]8;;\[1]
+
+ ▌[1] - ssh://tutorial1@demo.lnav.org
Installation
-Download a statically-linked binary for Linux/MacOS from the release
-page[1]
+]8;;https://github.com/tstack/lnav/releases/latest#release-artifacts\Download a statically-linked binary for Linux/MacOS from the release]8;;\
+]8;;https://github.com/tstack/lnav/releases/latest#release-artifacts\page]8;;\[1]
▌[1] - https://github.com/tstack/lnav/releases/latest#release-artifacts
+Brew on MacOS
+
+ ▌$ brew install lnav 
+
Usage
-The only file installed is the executable,  lnav . You can execute it
-with no arguments to view the default set of files:
+Simply point lnav at the files or directories you want to monitor, it
+will figure out the rest:
- ▌$ lnav 
+ ▌$ lnav /path/to/file1 /path/to/dir ... 
-You can view all the syslog messages by running:
+The lnav TUI will pop up right away and begin indexing the files.
+Progress is displayed in the "Files" panel at the bottom. Once the
+indexing has finished, the LOG view will display the log messages that
+were recognized[^1]. You can then use the usual hotkeys to move around
+the view (arrow keys or  j / k / h / l  to move down/up/left/right).
- ▌$ lnav /var/log/messages* 
+See the ]8;;https://docs.lnav.org/en/latest/usage.html\Usage section]8;;\[1] of the online documentation for more
+information.
+
+ ▌[1] - https://docs.lnav.org/en/latest/usage.html
+
+[^1]: Files that do not contain log messages can be seen in the TEXT
+view (reachable by pressing  t ).
Usage with  systemd-journald 
@@ -53,8 +86,9 @@ output format to include the year, otherwise  lnav  gets confused:
▌$ journalctl -o short-iso | lnav 
-It is also possible to use  journalctl 's json output format and  lnav
-will make use of additional fields such as PRIORITY and _SYSTEMD_UNIT:
+It is also possible to use  journalctl 's json output format and
+ lnav will make use of additional fields such as PRIORITY and
+_SYSTEMD_UNIT:
▌$ journalctl -o json | lnav 
@@ -71,8 +105,8 @@ the ones actually recognized by  lnav  for increased efficiency:
▌$ journalctl -o json --output-fields=MESSAGE,PRIORITY,_PID,SYSLOG_IDENTIFIER,_SYSTEMD_UNIT | lnav 
If your system has been running for a long time, for increased
-efficiency you may want to limit the number of log lines fed into  lnav
-, e.g. via  journalctl 's  -n  or  --since=...  options.
+efficiency you may want to limit the number of log lines fed into
+ lnav , e.g. via  journalctl 's  -n  or  --since=...  options.
In case of a persistent journal, you may want to limit the number of
log lines fed into  lnav  via  journalctl 's  -b  option.
@@ -82,9 +116,9 @@ log lines fed into  lnav  via  journalctl 's [
Please file issues on this repository or use the discussions section.
The following alternatives are also available:
- • support@lnav.org[1]
- • Discord[2]
- • Google Groups[3]
+ • ]8;;mailto:support@lnav.org\support@lnav.org]8;;\[1]
+ • ]8;;https://discord.gg/erBPnKwz7R\Discord]8;;\[2]
+ • ]8;;https://groups.google.com/g/lnav\Google Groups]8;;\[3]
▌[1] - mailto:support@lnav.org
▌[2] - https://discord.gg/erBPnKwz7R
@@ -92,9 +126,9 @@ The following alternatives are also available:
Links
- • Main Site[1]
- • Documentation[2] on Read the Docs
- • Internal Architecture[3]
+ • ]8;;https://lnav.org\Main Site]8;;\[1]
+ • ]8;;https://docs.lnav.org\Documentation]8;;\[2] on Read the Docs
+ • ]8;;ARCHITECTURE.md\Internal Architecture]8;;\[3]
▌[1] - https://lnav.org
▌[2] - https://docs.lnav.org
@@ -102,7 +136,7 @@ The following alternatives are also available:
Contributing
- • Become a Sponsor on GitHub[1]
+ • ]8;;https://github.com/sponsors/tstack\Become a Sponsor on GitHub]8;;\[1]
▌[1] - https://github.com/sponsors/tstack
@@ -115,18 +149,20 @@ The following software packages are required to build lnav:
• gcc/clang - A C++14-compatible compiler.
• libpcre2 - The Perl Compatible Regular Expression v2
(PCRE2) library.
- • sqlite - The SQLite database engine. Version 3.9.0
- or higher is required.
+ • sqlite - The SQLite database engine. Version
+ 3.9.0 or higher is required.
• ncurses - The ncurses text UI library.
• readline - The readline line editing library.
• zlib - The zlib compression library.
• bz2 - The bzip2 compression library.
• libcurl - The cURL library for downloading files
from URLs. Version 7.23.0 or higher is required.
- • libarchive - The libarchive library for opening archive
- files, like zip/tgz.
+ • libarchive - The libarchive library for opening
+ archive files, like zip/tgz.
• wireshark - The 'tshark' program is used to interpret
pcap files.
+ • cargo/rust - The Rust language is used to build the
+ PRQL compiler.
Build
@@ -141,9 +177,8 @@ Run  ./autogen.sh  if compiling from a cloned repository.
See Also
-Angle-grinder[1] is a tool to slice and dice log files on the
+]8;;https://github.com/rcoh/angle-grinder\Angle-grinder]8;;\[1] is a tool to slice and dice log files on the
command-line. If you're familiar with the SumoLogic query language,
you might find this tool more comfortable to work with.
▌[1] - https://github.com/rcoh/angle-grinder
-
diff --git a/test/expected/test_text_file.sh_e556fa91b91579df20d38540a5db9cedbaf68a62.err b/test/expected/test_text_file.sh_e556fa91b91579df20d38540a5db9cedbaf68a62.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_text_file.sh_e556fa91b91579df20d38540a5db9cedbaf68a62.err
diff --git a/test/expected/test_text_file.sh_e556fa91b91579df20d38540a5db9cedbaf68a62.out b/test/expected/test_text_file.sh_e556fa91b91579df20d38540a5db9cedbaf68a62.out
new file mode 100644
index 0000000..7d9e4f4
--- /dev/null
+++ b/test/expected/test_text_file.sh_e556fa91b91579df20d38540a5db9cedbaf68a62.out
@@ -0,0 +1,40 @@
+[
+ {
+ "top_meta": {
+ "file": "stdin",
+ "anchor": "#-owner-",
+ "breadcrumbs": [
+ {
+ "display_value": "stdin",
+ "search_placeholder": "",
+ "possibilities": [
+ {
+ "display_value": "stdin"
+ }
+ ]
+ },
+ {
+ "display_value": "[owner]",
+ "search_placeholder": "",
+ "possibilities": [
+ {
+ "display_value": "[database]"
+ },
+ {
+ "display_value": "[owner]"
+ },
+ {
+ "display_value": "[servers.alpha]"
+ },
+ {
+ "display_value": "[servers.beta]"
+ },
+ {
+ "display_value": "[servers]"
+ }
+ ]
+ }
+ ]
+ }
+ }
+]
diff --git a/test/expected/test_text_file.sh_f586ef080a86dfe1f981b345bcf8d7a279b2b247.err b/test/expected/test_text_file.sh_f586ef080a86dfe1f981b345bcf8d7a279b2b247.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_text_file.sh_f586ef080a86dfe1f981b345bcf8d7a279b2b247.err
diff --git a/test/expected/test_text_file.sh_f586ef080a86dfe1f981b345bcf8d7a279b2b247.out b/test/expected/test_text_file.sh_f586ef080a86dfe1f981b345bcf8d7a279b2b247.out
new file mode 100644
index 0000000..75a01e5
--- /dev/null
+++ b/test/expected/test_text_file.sh_f586ef080a86dfe1f981b345bcf8d7a279b2b247.out
@@ -0,0 +1,38 @@
+ECHO(1) General Commands Manual ECHO(1)
+
+NAME
+ echo – write arguments to the standard output
+
+SYNOPSIS
+ echo [-n] [string ...]
+
+DESCRIPTION
+ The echo utility writes any specified operands, separated by single blank
+ (‘ ’) characters and followed by a newline (‘\n’) character, to the
+ standard output.
+
+ The following option is available:
+
+ -n Do not print the trailing newline character. This may also be
+ achieved by appending ‘\c’ to the end of the string, as is done by
+ iBCS2 compatible systems. Note that this option as well as the
+ effect of ‘\c’ are implementation-defined in IEEE Std 1003.1-2001
+ (“POSIX.1”) as amended by Cor. 1-2002. Applications aiming for
+ maximum portability are strongly encouraged to use printf(1) to
+ suppress the newline character.
+
+ Some shells may provide a builtin echo command which is similar or
+ identical to this utility. Most notably, the builtin echo in sh(1) does
+ not accept the -n option. Consult the builtin(1) manual page.
+
+EXIT STATUS
+ The echo utility exits 0 on success, and >0 if an error occurs.
+
+SEE ALSO
+ builtin(1), csh(1), printf(1), sh(1)
+
+STANDARDS
+ The echo utility conforms to IEEE Std 1003.1-2001 (“POSIX.1”) as amended
+ by Cor. 1-2002.
+
+macOS 13.5 April 12, 2003 macOS 13.5
diff --git a/test/expected/test_text_file.sh_f7522b0a99550a3ff91aae6582eb861547c535e1.err b/test/expected/test_text_file.sh_f7522b0a99550a3ff91aae6582eb861547c535e1.err
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/test/expected/test_text_file.sh_f7522b0a99550a3ff91aae6582eb861547c535e1.err
diff --git a/test/expected/test_text_file.sh_f7522b0a99550a3ff91aae6582eb861547c535e1.out b/test/expected/test_text_file.sh_f7522b0a99550a3ff91aae6582eb861547c535e1.out
new file mode 100644
index 0000000..de58bb7
--- /dev/null
+++ b/test/expected/test_text_file.sh_f7522b0a99550a3ff91aae6582eb861547c535e1.out
@@ -0,0 +1,25 @@
+[
+ {
+ "top_meta": {
+ "file": "stdin",
+ "breadcrumbs": [
+ {
+ "display_value": "stdin",
+ "search_placeholder": "",
+ "possibilities": [
+ {
+ "display_value": "stdin"
+ }
+ ]
+ },
+ {
+ "display_value": "2013-06-06T19:13:20.123",
+ "search_placeholder": "",
+ "possibilities": [
+
+ ]
+ }
+ ]
+ }
+ }
+]
diff --git a/test/formats/jsontest/format.json b/test/formats/jsontest/format.json
index 333b8a9..63148ea 100644
--- a/test/formats/jsontest/format.json
+++ b/test/formats/jsontest/format.json
@@ -15,6 +15,15 @@
"field": "lvl",
"auto-width": true
},
+ {
+ "field": "logger",
+ "prefix": " <",
+ "suffix": ">",
+ "min-width": 20,
+ "max-width": 20,
+ "overflow": "abbrev",
+ "default-value": ""
+ },
" ",
{
"field": "msg"
@@ -33,6 +42,10 @@
"obj": {
"kind": "json"
},
+ "logger": {
+ "kind": "string",
+ "identifier": true
+ },
"lvl": {
"kind": "string",
"hidden": true
diff --git a/test/formats/jsontest/lnav-logstash.json b/test/formats/jsontest/lnav-logstash.json
index 27f9239..b821168 100644
--- a/test/formats/jsontest/lnav-logstash.json
+++ b/test/formats/jsontest/lnav-logstash.json
@@ -7,40 +7,48 @@
"json": true,
"hide-extra": false,
"file-pattern": "\\.clog.*",
- "multiline": false,
"line-format": [
- { "field" : "@timestamp" },
+ {
+ "field": "@timestamp"
+ },
" ",
- { "field" : "ipaddress" },
+ {
+ "field": "ipaddress"
+ },
" ",
- { "field" : "message" },
+ {
+ "field": "message"
+ },
" ",
- { "field" : "stack_trace", "default-value" : "" }
+ {
+ "field": "stack_trace",
+ "default-value": ""
+ }
],
- "timestamp-field" : "@timestamp",
- "body-field" : "message",
- "level-field" : "level",
- "level" : {
- "trace" : "TRACE",
- "debug" : "DEBUG",
- "info" : "INFO",
- "error" : "ERROR",
- "warning" : "WARN"
+ "timestamp-field": "@timestamp",
+ "body-field": "message",
+ "level-field": "level",
+ "level": {
+ "trace": "TRACE",
+ "debug": "DEBUG",
+ "info": "INFO",
+ "error": "ERROR",
+ "warning": "WARN"
},
- "value" : {
- "logger_name" : {
- "kind" : "string",
- "identifier" : true
+ "value": {
+ "logger_name": {
+ "kind": "string",
+ "identifier": true
},
- "ipaddress" : {
- "kind" : "string",
- "identifier" : true
+ "ipaddress": {
+ "kind": "string",
+ "identifier": true
},
- "level_value" : {
+ "level_value": {
"hidden": true
},
- "stack_trace" : {
- "kind" : "string"
+ "stack_trace": {
+ "kind": "string"
}
}
}
diff --git a/test/formats/jsontest/rewrite-user.lnav b/test/formats/jsontest/rewrite-user.lnav
index e34aa78..56ff500 100644
--- a/test/formats/jsontest/rewrite-user.lnav
+++ b/test/formats/jsontest/rewrite-user.lnav
@@ -1,2 +1,3 @@
-;SELECT 'mailto:' || :user
+;SELECT 'mailto:' || :user AS mt
+:echo $mt
diff --git a/test/formats/partitions/format.json b/test/formats/partitions/format.json
new file mode 100644
index 0000000..971c542
--- /dev/null
+++ b/test/formats/partitions/format.json
@@ -0,0 +1,11 @@
+{
+ "$schema": "https://lnav.org/schemas/format-v1.schema.json",
+ "syslog_log": {
+ "partitions": {
+ "dhclient-binding": {
+ "description": "Set partition name to current IP",
+ "pattern": " bound to ([^ ]+) --"
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/test/gharchive_log.jsonl b/test/gharchive_log.jsonl
new file mode 100644
index 0000000..e24bb00
--- /dev/null
+++ b/test/gharchive_log.jsonl
@@ -0,0 +1,50 @@
+{"id":"34502641367","type":"MemberEvent","actor":{"id":62330315,"login":"mujianwu","display_login":"mujianwu","gravatar_id":"","url":"https://api.github.com/users/mujianwu","avatar_url":"https://avatars.githubusercontent.com/u/62330315?"},"repo":{"id":708013309,"name":"Uotan-Dev/UotanWorkStation-ROM-Builder","url":"https://api.github.com/repos/Uotan-Dev/UotanWorkStation-ROM-Builder"},"payload":{"member":{"login":"Envoy-Z-Lab","id":152428796,"node_id":"U_kgDOCRXg_A","avatar_url":"https://avatars.githubusercontent.com/u/152428796?v=4","gravatar_id":"","url":"https://api.github.com/users/Envoy-Z-Lab","html_url":"https://github.com/Envoy-Z-Lab","followers_url":"https://api.github.com/users/Envoy-Z-Lab/followers","following_url":"https://api.github.com/users/Envoy-Z-Lab/following{/other_user}","gists_url":"https://api.github.com/users/Envoy-Z-Lab/gists{/gist_id}","starred_url":"https://api.github.com/users/Envoy-Z-Lab/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Envoy-Z-Lab/subscriptions","organizations_url":"https://api.github.com/users/Envoy-Z-Lab/orgs","repos_url":"https://api.github.com/users/Envoy-Z-Lab/repos","events_url":"https://api.github.com/users/Envoy-Z-Lab/events{/privacy}","received_events_url":"https://api.github.com/users/Envoy-Z-Lab/received_events","type":"User","site_admin":false},"action":"added"},"public":true,"created_at":"2024-01-01T15:00:00Z","org":{"id":111175685,"login":"Uotan-Dev","gravatar_id":"","url":"https://api.github.com/orgs/Uotan-Dev","avatar_url":"https://avatars.githubusercontent.com/u/111175685?"}}
+{"id":"34502641374","type":"PushEvent","actor":{"id":153940760,"login":"mdmaid69","display_login":"mdmaid69","gravatar_id":"","url":"https://api.github.com/users/mdmaid69","avatar_url":"https://avatars.githubusercontent.com/u/153940760?"},"repo":{"id":732717980,"name":"mdmaid69/reimagined-giggle","url":"https://api.github.com/repos/mdmaid69/reimagined-giggle"},"payload":{"repository_id":732717980,"push_id":16466254513,"size":1,"distinct_size":1,"ref":"refs/heads/master","head":"e467bf0b03b2b6815806d33696c92898a0548aed","before":"dc8177f8b942a863ea4c1fb46f3cfcf773880d1b","commits":[{"sha":"e467bf0b03b2b6815806d33696c92898a0548aed","author":{"email":"robot@alexsyw.me","name":"mdmaid69"},"message":"float further safety possibly strike","distinct":true,"url":"https://api.github.com/repos/mdmaid69/reimagined-giggle/commits/e467bf0b03b2b6815806d33696c92898a0548aed"}]},"public":true,"created_at":"2024-01-01T15:00:00Z"}
+{"id":"34502641375","type":"ForkEvent","actor":{"id":137278716,"login":"SynthWave-Systems","display_login":"SynthWave-Systems","gravatar_id":"","url":"https://api.github.com/users/SynthWave-Systems","avatar_url":"https://avatars.githubusercontent.com/u/137278716?"},"repo":{"id":135763852,"name":"ampleforth/ampleforth-contracts","url":"https://api.github.com/repos/ampleforth/ampleforth-contracts"},"payload":{"forkee":{"id":737802483,"node_id":"R_kgDOK_n48w","name":"ampleforth-contracts","full_name":"SynthWave-Systems/ampleforth-contracts","private":false,"owner":{"login":"SynthWave-Systems","id":137278716,"node_id":"O_kgDOCC60_A","avatar_url":"https://avatars.githubusercontent.com/u/137278716?v=4","gravatar_id":"","url":"https://api.github.com/users/SynthWave-Systems","html_url":"https://github.com/SynthWave-Systems","followers_url":"https://api.github.com/users/SynthWave-Systems/followers","following_url":"https://api.github.com/users/SynthWave-Systems/following{/other_user}","gists_url":"https://api.github.com/users/SynthWave-Systems/gists{/gist_id}","starred_url":"https://api.github.com/users/SynthWave-Systems/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SynthWave-Systems/subscriptions","organizations_url":"https://api.github.com/users/SynthWave-Systems/orgs","repos_url":"https://api.github.com/users/SynthWave-Systems/repos","events_url":"https://api.github.com/users/SynthWave-Systems/events{/privacy}","received_events_url":"https://api.github.com/users/SynthWave-Systems/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/SynthWave-Systems/ampleforth-contracts","description":"Smart contracts for Ampleforth Protocol (working name uFragments)","fork":true,"url":"https://api.github.com/repos/SynthWave-Systems/ampleforth-contracts","forks_url":"https://api.github.com/repos/SynthWave-Systems/ampleforth-contracts/forks","keys_url":"https://api.github.com/repos/SynthWave-Systems/ampleforth-contracts/keys{/key_id}","collaborators_url":"https://api.github.com/repos/SynthWave-Systems/ampleforth-contracts/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/SynthWave-Systems/ampleforth-contracts/teams","hooks_url":"https://api.github.com/repos/SynthWave-Systems/ampleforth-contracts/hooks","issue_events_url":"https://api.github.com/repos/SynthWave-Systems/ampleforth-contracts/issues/events{/number}","events_url":"https://api.github.com/repos/SynthWave-Systems/ampleforth-contracts/events","assignees_url":"https://api.github.com/repos/SynthWave-Systems/ampleforth-contracts/assignees{/user}","branches_url":"https://api.github.com/repos/SynthWave-Systems/ampleforth-contracts/branches{/branch}","tags_url":"https://api.github.com/repos/SynthWave-Systems/ampleforth-contracts/tags","blobs_url":"https://api.github.com/repos/SynthWave-Systems/ampleforth-contracts/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/SynthWave-Systems/ampleforth-contracts/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/SynthWave-Systems/ampleforth-contracts/git/refs{/sha}","trees_url":"https://api.github.com/repos/SynthWave-Systems/ampleforth-contracts/git/trees{/sha}","statuses_url":"https://api.github.com/repos/SynthWave-Systems/ampleforth-contracts/statuses/{sha}","languages_url":"https://api.github.com/repos/SynthWave-Systems/ampleforth-contracts/languages","stargazers_url":"https://api.github.com/repos/SynthWave-Systems/ampleforth-contracts/stargazers","contributors_url":"https://api.github.com/repos/SynthWave-Systems/ampleforth-contracts/contributors","subscribers_url":"https://api.github.com/repos/SynthWave-Systems/ampleforth-contracts/subscribers","subscription_url":"https://api.github.com/repos/SynthWave-Systems/ampleforth-contracts/subscription","commits_url":"https://api.github.com/repos/SynthWave-Systems/ampleforth-contracts/commits{/sha}","git_commits_url":"https://api.github.com/repos/SynthWave-Systems/ampleforth-contracts/git/commits{/sha}","comments_url":"https://api.github.com/repos/SynthWave-Systems/ampleforth-contracts/comments{/number}","issue_comment_url":"https://api.github.com/repos/SynthWave-Systems/ampleforth-contracts/issues/comments{/number}","contents_url":"https://api.github.com/repos/SynthWave-Systems/ampleforth-contracts/contents/{+path}","compare_url":"https://api.github.com/repos/SynthWave-Systems/ampleforth-contracts/compare/{base}...{head}","merges_url":"https://api.github.com/repos/SynthWave-Systems/ampleforth-contracts/merges","archive_url":"https://api.github.com/repos/SynthWave-Systems/ampleforth-contracts/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/SynthWave-Systems/ampleforth-contracts/downloads","issues_url":"https://api.github.com/repos/SynthWave-Systems/ampleforth-contracts/issues{/number}","pulls_url":"https://api.github.com/repos/SynthWave-Systems/ampleforth-contracts/pulls{/number}","milestones_url":"https://api.github.com/repos/SynthWave-Systems/ampleforth-contracts/milestones{/number}","notifications_url":"https://api.github.com/repos/SynthWave-Systems/ampleforth-contracts/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/SynthWave-Systems/ampleforth-contracts/labels{/name}","releases_url":"https://api.github.com/repos/SynthWave-Systems/ampleforth-contracts/releases{/id}","deployments_url":"https://api.github.com/repos/SynthWave-Systems/ampleforth-contracts/deployments","created_at":"2024-01-01T14:59:38Z","updated_at":"2024-01-01T14:59:38Z","pushed_at":"2023-10-27T15:10:53Z","git_url":"git://github.com/SynthWave-Systems/ampleforth-contracts.git","ssh_url":"git@github.com:SynthWave-Systems/ampleforth-contracts.git","clone_url":"https://github.com/SynthWave-Systems/ampleforth-contracts.git","svn_url":"https://github.com/SynthWave-Systems/ampleforth-contracts","homepage":"https://ampleforth.org","size":2726,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"has_discussions":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":0,"license":null,"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":[],"visibility":"public","forks":0,"open_issues":0,"watchers":0,"default_branch":"main","public":true}},"public":true,"created_at":"2024-01-01T15:00:00Z","org":{"id":36210657,"login":"ampleforth","gravatar_id":"","url":"https://api.github.com/orgs/ampleforth","avatar_url":"https://avatars.githubusercontent.com/u/36210657?"}}
+{"id":"34502641376","type":"PullRequestEvent","actor":{"id":40026159,"login":"tobexyz","display_login":"tobexyz","gravatar_id":"","url":"https://api.github.com/users/tobexyz","avatar_url":"https://avatars.githubusercontent.com/u/40026159?"},"repo":{"id":156070344,"name":"tobexyz/yaacc-code","url":"https://api.github.com/repos/tobexyz/yaacc-code"},"payload":{"action":"closed","number":90,"pull_request":{"url":"https://api.github.com/repos/tobexyz/yaacc-code/pulls/90","id":1661123987,"node_id":"PR_kwDOCU1xyM5jAr2T","html_url":"https://github.com/tobexyz/yaacc-code/pull/90","diff_url":"https://github.com/tobexyz/yaacc-code/pull/90.diff","patch_url":"https://github.com/tobexyz/yaacc-code/pull/90.patch","issue_url":"https://api.github.com/repos/tobexyz/yaacc-code/issues/90","number":90,"state":"closed","locked":false,"title":"merge latest release to master","user":{"login":"tobexyz","id":40026159,"node_id":"MDQ6VXNlcjQwMDI2MTU5","avatar_url":"https://avatars.githubusercontent.com/u/40026159?v=4","gravatar_id":"","url":"https://api.github.com/users/tobexyz","html_url":"https://github.com/tobexyz","followers_url":"https://api.github.com/users/tobexyz/followers","following_url":"https://api.github.com/users/tobexyz/following{/other_user}","gists_url":"https://api.github.com/users/tobexyz/gists{/gist_id}","starred_url":"https://api.github.com/users/tobexyz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tobexyz/subscriptions","organizations_url":"https://api.github.com/users/tobexyz/orgs","repos_url":"https://api.github.com/users/tobexyz/repos","events_url":"https://api.github.com/users/tobexyz/events{/privacy}","received_events_url":"https://api.github.com/users/tobexyz/received_events","type":"User","site_admin":false},"body":null,"created_at":"2024-01-01T14:59:25Z","updated_at":"2024-01-01T14:59:38Z","closed_at":"2024-01-01T14:59:38Z","merged_at":"2024-01-01T14:59:38Z","merge_commit_sha":"ea0371c4d11b0dc46a1f8015b5d6730394fa8c00","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/tobexyz/yaacc-code/pulls/90/commits","review_comments_url":"https://api.github.com/repos/tobexyz/yaacc-code/pulls/90/comments","review_comment_url":"https://api.github.com/repos/tobexyz/yaacc-code/pulls/comments{/number}","comments_url":"https://api.github.com/repos/tobexyz/yaacc-code/issues/90/comments","statuses_url":"https://api.github.com/repos/tobexyz/yaacc-code/statuses/e6bb06202e68504da818ff5428915d1da3f19e51","head":{"label":"tobexyz:develop","ref":"develop","sha":"e6bb06202e68504da818ff5428915d1da3f19e51","user":{"login":"tobexyz","id":40026159,"node_id":"MDQ6VXNlcjQwMDI2MTU5","avatar_url":"https://avatars.githubusercontent.com/u/40026159?v=4","gravatar_id":"","url":"https://api.github.com/users/tobexyz","html_url":"https://github.com/tobexyz","followers_url":"https://api.github.com/users/tobexyz/followers","following_url":"https://api.github.com/users/tobexyz/following{/other_user}","gists_url":"https://api.github.com/users/tobexyz/gists{/gist_id}","starred_url":"https://api.github.com/users/tobexyz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tobexyz/subscriptions","organizations_url":"https://api.github.com/users/tobexyz/orgs","repos_url":"https://api.github.com/users/tobexyz/repos","events_url":"https://api.github.com/users/tobexyz/events{/privacy}","received_events_url":"https://api.github.com/users/tobexyz/received_events","type":"User","site_admin":false},"repo":{"id":156070344,"node_id":"MDEwOlJlcG9zaXRvcnkxNTYwNzAzNDQ=","name":"yaacc-code","full_name":"tobexyz/yaacc-code","private":false,"owner":{"login":"tobexyz","id":40026159,"node_id":"MDQ6VXNlcjQwMDI2MTU5","avatar_url":"https://avatars.githubusercontent.com/u/40026159?v=4","gravatar_id":"","url":"https://api.github.com/users/tobexyz","html_url":"https://github.com/tobexyz","followers_url":"https://api.github.com/users/tobexyz/followers","following_url":"https://api.github.com/users/tobexyz/following{/other_user}","gists_url":"https://api.github.com/users/tobexyz/gists{/gist_id}","starred_url":"https://api.github.com/users/tobexyz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tobexyz/subscriptions","organizations_url":"https://api.github.com/users/tobexyz/orgs","repos_url":"https://api.github.com/users/tobexyz/repos","events_url":"https://api.github.com/users/tobexyz/events{/privacy}","received_events_url":"https://api.github.com/users/tobexyz/received_events","type":"User","site_admin":false},"html_url":"https://github.com/tobexyz/yaacc-code","description":"YAACC - UPNP Client and Server","fork":true,"url":"https://api.github.com/repos/tobexyz/yaacc-code","forks_url":"https://api.github.com/repos/tobexyz/yaacc-code/forks","keys_url":"https://api.github.com/repos/tobexyz/yaacc-code/keys{/key_id}","collaborators_url":"https://api.github.com/repos/tobexyz/yaacc-code/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/tobexyz/yaacc-code/teams","hooks_url":"https://api.github.com/repos/tobexyz/yaacc-code/hooks","issue_events_url":"https://api.github.com/repos/tobexyz/yaacc-code/issues/events{/number}","events_url":"https://api.github.com/repos/tobexyz/yaacc-code/events","assignees_url":"https://api.github.com/repos/tobexyz/yaacc-code/assignees{/user}","branches_url":"https://api.github.com/repos/tobexyz/yaacc-code/branches{/branch}","tags_url":"https://api.github.com/repos/tobexyz/yaacc-code/tags","blobs_url":"https://api.github.com/repos/tobexyz/yaacc-code/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/tobexyz/yaacc-code/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/tobexyz/yaacc-code/git/refs{/sha}","trees_url":"https://api.github.com/repos/tobexyz/yaacc-code/git/trees{/sha}","statuses_url":"https://api.github.com/repos/tobexyz/yaacc-code/statuses/{sha}","languages_url":"https://api.github.com/repos/tobexyz/yaacc-code/languages","stargazers_url":"https://api.github.com/repos/tobexyz/yaacc-code/stargazers","contributors_url":"https://api.github.com/repos/tobexyz/yaacc-code/contributors","subscribers_url":"https://api.github.com/repos/tobexyz/yaacc-code/subscribers","subscription_url":"https://api.github.com/repos/tobexyz/yaacc-code/subscription","commits_url":"https://api.github.com/repos/tobexyz/yaacc-code/commits{/sha}","git_commits_url":"https://api.github.com/repos/tobexyz/yaacc-code/git/commits{/sha}","comments_url":"https://api.github.com/repos/tobexyz/yaacc-code/comments{/number}","issue_comment_url":"https://api.github.com/repos/tobexyz/yaacc-code/issues/comments{/number}","contents_url":"https://api.github.com/repos/tobexyz/yaacc-code/contents/{+path}","compare_url":"https://api.github.com/repos/tobexyz/yaacc-code/compare/{base}...{head}","merges_url":"https://api.github.com/repos/tobexyz/yaacc-code/merges","archive_url":"https://api.github.com/repos/tobexyz/yaacc-code/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/tobexyz/yaacc-code/downloads","issues_url":"https://api.github.com/repos/tobexyz/yaacc-code/issues{/number}","pulls_url":"https://api.github.com/repos/tobexyz/yaacc-code/pulls{/number}","milestones_url":"https://api.github.com/repos/tobexyz/yaacc-code/milestones{/number}","notifications_url":"https://api.github.com/repos/tobexyz/yaacc-code/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/tobexyz/yaacc-code/labels{/name}","releases_url":"https://api.github.com/repos/tobexyz/yaacc-code/releases{/id}","deployments_url":"https://api.github.com/repos/tobexyz/yaacc-code/deployments","created_at":"2018-11-04T10:21:57Z","updated_at":"2024-01-01T14:56:58Z","pushed_at":"2024-01-01T14:59:38Z","git_url":"git://github.com/tobexyz/yaacc-code.git","ssh_url":"git@github.com:tobexyz/yaacc-code.git","clone_url":"https://github.com/tobexyz/yaacc-code.git","svn_url":"https://github.com/tobexyz/yaacc-code","homepage":"","size":23761,"stargazers_count":81,"watchers_count":81,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"has_discussions":true,"forks_count":10,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":7,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":["android-app","dlna","dlna-mediarenderer","dlna-player","dlna-server","dlna-upnp","upnp","upnp-av","upnp-content-directory","upnp-renderer"],"visibility":"public","forks":10,"open_issues":7,"watchers":81,"default_branch":"develop"}},"base":{"label":"tobexyz:master","ref":"master","sha":"369468d82f2e237b4f29b48e3d3057bf6fbcc78e","user":{"login":"tobexyz","id":40026159,"node_id":"MDQ6VXNlcjQwMDI2MTU5","avatar_url":"https://avatars.githubusercontent.com/u/40026159?v=4","gravatar_id":"","url":"https://api.github.com/users/tobexyz","html_url":"https://github.com/tobexyz","followers_url":"https://api.github.com/users/tobexyz/followers","following_url":"https://api.github.com/users/tobexyz/following{/other_user}","gists_url":"https://api.github.com/users/tobexyz/gists{/gist_id}","starred_url":"https://api.github.com/users/tobexyz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tobexyz/subscriptions","organizations_url":"https://api.github.com/users/tobexyz/orgs","repos_url":"https://api.github.com/users/tobexyz/repos","events_url":"https://api.github.com/users/tobexyz/events{/privacy}","received_events_url":"https://api.github.com/users/tobexyz/received_events","type":"User","site_admin":false},"repo":{"id":156070344,"node_id":"MDEwOlJlcG9zaXRvcnkxNTYwNzAzNDQ=","name":"yaacc-code","full_name":"tobexyz/yaacc-code","private":false,"owner":{"login":"tobexyz","id":40026159,"node_id":"MDQ6VXNlcjQwMDI2MTU5","avatar_url":"https://avatars.githubusercontent.com/u/40026159?v=4","gravatar_id":"","url":"https://api.github.com/users/tobexyz","html_url":"https://github.com/tobexyz","followers_url":"https://api.github.com/users/tobexyz/followers","following_url":"https://api.github.com/users/tobexyz/following{/other_user}","gists_url":"https://api.github.com/users/tobexyz/gists{/gist_id}","starred_url":"https://api.github.com/users/tobexyz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tobexyz/subscriptions","organizations_url":"https://api.github.com/users/tobexyz/orgs","repos_url":"https://api.github.com/users/tobexyz/repos","events_url":"https://api.github.com/users/tobexyz/events{/privacy}","received_events_url":"https://api.github.com/users/tobexyz/received_events","type":"User","site_admin":false},"html_url":"https://github.com/tobexyz/yaacc-code","description":"YAACC - UPNP Client and Server","fork":true,"url":"https://api.github.com/repos/tobexyz/yaacc-code","forks_url":"https://api.github.com/repos/tobexyz/yaacc-code/forks","keys_url":"https://api.github.com/repos/tobexyz/yaacc-code/keys{/key_id}","collaborators_url":"https://api.github.com/repos/tobexyz/yaacc-code/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/tobexyz/yaacc-code/teams","hooks_url":"https://api.github.com/repos/tobexyz/yaacc-code/hooks","issue_events_url":"https://api.github.com/repos/tobexyz/yaacc-code/issues/events{/number}","events_url":"https://api.github.com/repos/tobexyz/yaacc-code/events","assignees_url":"https://api.github.com/repos/tobexyz/yaacc-code/assignees{/user}","branches_url":"https://api.github.com/repos/tobexyz/yaacc-code/branches{/branch}","tags_url":"https://api.github.com/repos/tobexyz/yaacc-code/tags","blobs_url":"https://api.github.com/repos/tobexyz/yaacc-code/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/tobexyz/yaacc-code/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/tobexyz/yaacc-code/git/refs{/sha}","trees_url":"https://api.github.com/repos/tobexyz/yaacc-code/git/trees{/sha}","statuses_url":"https://api.github.com/repos/tobexyz/yaacc-code/statuses/{sha}","languages_url":"https://api.github.com/repos/tobexyz/yaacc-code/languages","stargazers_url":"https://api.github.com/repos/tobexyz/yaacc-code/stargazers","contributors_url":"https://api.github.com/repos/tobexyz/yaacc-code/contributors","subscribers_url":"https://api.github.com/repos/tobexyz/yaacc-code/subscribers","subscription_url":"https://api.github.com/repos/tobexyz/yaacc-code/subscription","commits_url":"https://api.github.com/repos/tobexyz/yaacc-code/commits{/sha}","git_commits_url":"https://api.github.com/repos/tobexyz/yaacc-code/git/commits{/sha}","comments_url":"https://api.github.com/repos/tobexyz/yaacc-code/comments{/number}","issue_comment_url":"https://api.github.com/repos/tobexyz/yaacc-code/issues/comments{/number}","contents_url":"https://api.github.com/repos/tobexyz/yaacc-code/contents/{+path}","compare_url":"https://api.github.com/repos/tobexyz/yaacc-code/compare/{base}...{head}","merges_url":"https://api.github.com/repos/tobexyz/yaacc-code/merges","archive_url":"https://api.github.com/repos/tobexyz/yaacc-code/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/tobexyz/yaacc-code/downloads","issues_url":"https://api.github.com/repos/tobexyz/yaacc-code/issues{/number}","pulls_url":"https://api.github.com/repos/tobexyz/yaacc-code/pulls{/number}","milestones_url":"https://api.github.com/repos/tobexyz/yaacc-code/milestones{/number}","notifications_url":"https://api.github.com/repos/tobexyz/yaacc-code/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/tobexyz/yaacc-code/labels{/name}","releases_url":"https://api.github.com/repos/tobexyz/yaacc-code/releases{/id}","deployments_url":"https://api.github.com/repos/tobexyz/yaacc-code/deployments","created_at":"2018-11-04T10:21:57Z","updated_at":"2024-01-01T14:56:58Z","pushed_at":"2024-01-01T14:59:38Z","git_url":"git://github.com/tobexyz/yaacc-code.git","ssh_url":"git@github.com:tobexyz/yaacc-code.git","clone_url":"https://github.com/tobexyz/yaacc-code.git","svn_url":"https://github.com/tobexyz/yaacc-code","homepage":"","size":23761,"stargazers_count":81,"watchers_count":81,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"has_discussions":true,"forks_count":10,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":7,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":["android-app","dlna","dlna-mediarenderer","dlna-player","dlna-server","dlna-upnp","upnp","upnp-av","upnp-content-directory","upnp-renderer"],"visibility":"public","forks":10,"open_issues":7,"watchers":81,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/tobexyz/yaacc-code/pulls/90"},"html":{"href":"https://github.com/tobexyz/yaacc-code/pull/90"},"issue":{"href":"https://api.github.com/repos/tobexyz/yaacc-code/issues/90"},"comments":{"href":"https://api.github.com/repos/tobexyz/yaacc-code/issues/90/comments"},"review_comments":{"href":"https://api.github.com/repos/tobexyz/yaacc-code/pulls/90/comments"},"review_comment":{"href":"https://api.github.com/repos/tobexyz/yaacc-code/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/tobexyz/yaacc-code/pulls/90/commits"},"statuses":{"href":"https://api.github.com/repos/tobexyz/yaacc-code/statuses/e6bb06202e68504da818ff5428915d1da3f19e51"}},"author_association":"OWNER","auto_merge":null,"active_lock_reason":null,"merged":true,"mergeable":null,"rebaseable":null,"mergeable_state":"unknown","merged_by":{"login":"tobexyz","id":40026159,"node_id":"MDQ6VXNlcjQwMDI2MTU5","avatar_url":"https://avatars.githubusercontent.com/u/40026159?v=4","gravatar_id":"","url":"https://api.github.com/users/tobexyz","html_url":"https://github.com/tobexyz","followers_url":"https://api.github.com/users/tobexyz/followers","following_url":"https://api.github.com/users/tobexyz/following{/other_user}","gists_url":"https://api.github.com/users/tobexyz/gists{/gist_id}","starred_url":"https://api.github.com/users/tobexyz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tobexyz/subscriptions","organizations_url":"https://api.github.com/users/tobexyz/orgs","repos_url":"https://api.github.com/users/tobexyz/repos","events_url":"https://api.github.com/users/tobexyz/events{/privacy}","received_events_url":"https://api.github.com/users/tobexyz/received_events","type":"User","site_admin":false},"comments":0,"review_comments":0,"maintainer_can_modify":false,"commits":5,"additions":11,"deletions":3,"changed_files":4}},"public":true,"created_at":"2024-01-01T15:00:00Z"}
+{"id":"34502641379","type":"PushEvent","actor":{"id":155086649,"login":"dim12512a","display_login":"dim12512a","gravatar_id":"","url":"https://api.github.com/users/dim12512a","avatar_url":"https://avatars.githubusercontent.com/u/155086649?"},"repo":{"id":737073761,"name":"dim12512a/Repo5","url":"https://api.github.com/repos/dim12512a/Repo5"},"payload":{"repository_id":737073761,"push_id":16466254392,"size":1,"distinct_size":1,"ref":"refs/heads/main","head":"c34fd919a5cd9b7eb8bad07dab60c2f5a6c65d27","before":"1112698dbd122cbce6d35d4c28ea6b5831dae611","commits":[{"sha":"c34fd919a5cd9b7eb8bad07dab60c2f5a6c65d27","author":{"email":"you@example.com","name":"Your Name"},"message":"Empty Commit","distinct":true,"url":"https://api.github.com/repos/dim12512a/Repo5/commits/c34fd919a5cd9b7eb8bad07dab60c2f5a6c65d27"}]},"public":true,"created_at":"2024-01-01T15:00:00Z"}
+{"id":"34502641382","type":"PushEvent","actor":{"id":97979094,"login":"github-shvabra","display_login":"github-shvabra","gravatar_id":"","url":"https://api.github.com/users/github-shvabra","avatar_url":"https://avatars.githubusercontent.com/u/97979094?"},"repo":{"id":642858622,"name":"saby/ios-sabycom","url":"https://api.github.com/repos/saby/ios-sabycom"},"payload":{"repository_id":642858622,"push_id":16466254503,"size":1,"distinct_size":1,"ref":"refs/heads/rc-23.7146","head":"b4718c5f554b72883fd130fa4e93fdd16b51e7b9","before":"1fa2bca104d44016761a7baaaa4e72481e61bd0c","commits":[{"sha":"b4718c5f554b72883fd130fa4e93fdd16b51e7b9","author":{"email":"unix-prog_server@unix.tensor.ru@sbis-dev-mon.unix.tensor.ru","name":"Служебный пользователь Инц №52255"},"message":"new change","distinct":true,"url":"https://api.github.com/repos/saby/ios-sabycom/commits/b4718c5f554b72883fd130fa4e93fdd16b51e7b9"}]},"public":true,"created_at":"2024-01-01T15:00:00Z","org":{"id":42994484,"login":"saby","gravatar_id":"","url":"https://api.github.com/orgs/saby","avatar_url":"https://avatars.githubusercontent.com/u/42994484?"}}
+{"id":"34502641385","type":"CreateEvent","actor":{"id":72511388,"login":"roman1923","display_login":"roman1923","gravatar_id":"","url":"https://api.github.com/users/roman1923","avatar_url":"https://avatars.githubusercontent.com/u/72511388?"},"repo":{"id":737802482,"name":"roman1923/no-woo-small-cta-fast-food-shop","url":"https://api.github.com/repos/roman1923/no-woo-small-cta-fast-food-shop"},"payload":{"ref":null,"ref_type":"repository","master_branch":"main","description":null,"pusher_type":"user"},"public":true,"created_at":"2024-01-01T15:00:00Z"}
+{"id":"34502641391","type":"PushEvent","actor":{"id":155086563,"login":"appref5555ix63","display_login":"appref5555ix63","gravatar_id":"","url":"https://api.github.com/users/appref5555ix63","avatar_url":"https://avatars.githubusercontent.com/u/155086563?"},"repo":{"id":737072728,"name":"appref5555ix63/Repo4","url":"https://api.github.com/repos/appref5555ix63/Repo4"},"payload":{"repository_id":737072728,"push_id":16466254439,"size":1,"distinct_size":1,"ref":"refs/heads/main","head":"5abbda1f863eee520965bbd7f1560381ef0106c7","before":"29b8e44e30ceb1ba91988fe40495122194516696","commits":[{"sha":"5abbda1f863eee520965bbd7f1560381ef0106c7","author":{"email":"you@example.com","name":"Your Name"},"message":"Empty Commit","distinct":true,"url":"https://api.github.com/repos/appref5555ix63/Repo4/commits/5abbda1f863eee520965bbd7f1560381ef0106c7"}]},"public":true,"created_at":"2024-01-01T15:00:00Z"}
+{"id":"34502641392","type":"PullRequestReviewEvent","actor":{"id":116707505,"login":"megusasuke0","display_login":"megusasuke0","gravatar_id":"","url":"https://api.github.com/users/megusasuke0","avatar_url":"https://avatars.githubusercontent.com/u/116707505?"},"repo":{"id":737461382,"name":"megusasuke0/frontendhandson","url":"https://api.github.com/repos/megusasuke0/frontendhandson"},"payload":{"action":"created","review":{"id":1799820649,"node_id":"PRR_kwDOK_TEhs5rRxVp","user":{"login":"megusasuke0","id":116707505,"node_id":"U_kgDOBvTQsQ","avatar_url":"https://avatars.githubusercontent.com/u/116707505?v=4","gravatar_id":"","url":"https://api.github.com/users/megusasuke0","html_url":"https://github.com/megusasuke0","followers_url":"https://api.github.com/users/megusasuke0/followers","following_url":"https://api.github.com/users/megusasuke0/following{/other_user}","gists_url":"https://api.github.com/users/megusasuke0/gists{/gist_id}","starred_url":"https://api.github.com/users/megusasuke0/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/megusasuke0/subscriptions","organizations_url":"https://api.github.com/users/megusasuke0/orgs","repos_url":"https://api.github.com/users/megusasuke0/repos","events_url":"https://api.github.com/users/megusasuke0/events{/privacy}","received_events_url":"https://api.github.com/users/megusasuke0/received_events","type":"User","site_admin":false},"body":null,"commit_id":"e41de9e65b59484d0d70648ac6ebada6e4696d43","submitted_at":"2024-01-01T14:59:38Z","state":"commented","html_url":"https://github.com/megusasuke0/frontendhandson/pull/1#pullrequestreview-1799820649","pull_request_url":"https://api.github.com/repos/megusasuke0/frontendhandson/pulls/1","author_association":"OWNER","_links":{"html":{"href":"https://github.com/megusasuke0/frontendhandson/pull/1#pullrequestreview-1799820649"},"pull_request":{"href":"https://api.github.com/repos/megusasuke0/frontendhandson/pulls/1"}}},"pull_request":{"url":"https://api.github.com/repos/megusasuke0/frontendhandson/pulls/1","id":1660877925,"node_id":"PR_kwDOK_TEhs5i_vxl","html_url":"https://github.com/megusasuke0/frontendhandson/pull/1","diff_url":"https://github.com/megusasuke0/frontendhandson/pull/1.diff","patch_url":"https://github.com/megusasuke0/frontendhandson/pull/1.patch","issue_url":"https://api.github.com/repos/megusasuke0/frontendhandson/issues/1","number":1,"state":"open","locked":false,"title":"Feature/lesson01","user":{"login":"megusasuke0","id":116707505,"node_id":"U_kgDOBvTQsQ","avatar_url":"https://avatars.githubusercontent.com/u/116707505?v=4","gravatar_id":"","url":"https://api.github.com/users/megusasuke0","html_url":"https://github.com/megusasuke0","followers_url":"https://api.github.com/users/megusasuke0/followers","following_url":"https://api.github.com/users/megusasuke0/following{/other_user}","gists_url":"https://api.github.com/users/megusasuke0/gists{/gist_id}","starred_url":"https://api.github.com/users/megusasuke0/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/megusasuke0/subscriptions","organizations_url":"https://api.github.com/users/megusasuke0/orgs","repos_url":"https://api.github.com/users/megusasuke0/repos","events_url":"https://api.github.com/users/megusasuke0/events{/privacy}","received_events_url":"https://api.github.com/users/megusasuke0/received_events","type":"User","site_admin":false},"body":"# [Issue No.1](https://github.com/kenmori/handsonFrontend/blob/master/work/markup/1.md#)\r\n- このDOMをhtml内のulの中に差し込んでください\r\n`<li>これです</li>`\r\n## [stackblitz](https://stackblitz.com/github/megusasuke0/frontendhandson/tree/feature/lesson01?file=1%2Findex.js)\r\n## Concerns and areas to focus on\r\n--------------------------------\r\n- This is my first PR.\r\nI’m so appreciative of your kindness!\r\nPlease teach me how to write JS code and PR sentences. \r\nThank you.\r\n--------------------------------\r\nI pasted the site I referenced below.\r\n--------------------------------\r\nchatGPT prompt:\"javascript DOM作成 li テキスト「これです」\"\r\nreference: #https://www.wakuwakubank.com/posts/306-javascript-dom/#index_id4\r\nreference: #https://stackoverflow.com/questions/50250214/how-to-use-insertbefore-without-second-parameter\r\n","created_at":"2024-01-01T05:29:44Z","updated_at":"2024-01-01T14:59:55Z","closed_at":null,"merged_at":null,"merge_commit_sha":"96e9f074fe41c27e20b6aacfbd372ea39edce179","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/megusasuke0/frontendhandson/pulls/1/commits","review_comments_url":"https://api.github.com/repos/megusasuke0/frontendhandson/pulls/1/comments","review_comment_url":"https://api.github.com/repos/megusasuke0/frontendhandson/pulls/comments{/number}","comments_url":"https://api.github.com/repos/megusasuke0/frontendhandson/issues/1/comments","statuses_url":"https://api.github.com/repos/megusasuke0/frontendhandson/statuses/d1cd14bfa81aaa8d39ce0a8fd4d90cb7be53f627","head":{"label":"megusasuke0:feature/lesson01","ref":"feature/lesson01","sha":"d1cd14bfa81aaa8d39ce0a8fd4d90cb7be53f627","user":{"login":"megusasuke0","id":116707505,"node_id":"U_kgDOBvTQsQ","avatar_url":"https://avatars.githubusercontent.com/u/116707505?v=4","gravatar_id":"","url":"https://api.github.com/users/megusasuke0","html_url":"https://github.com/megusasuke0","followers_url":"https://api.github.com/users/megusasuke0/followers","following_url":"https://api.github.com/users/megusasuke0/following{/other_user}","gists_url":"https://api.github.com/users/megusasuke0/gists{/gist_id}","starred_url":"https://api.github.com/users/megusasuke0/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/megusasuke0/subscriptions","organizations_url":"https://api.github.com/users/megusasuke0/orgs","repos_url":"https://api.github.com/users/megusasuke0/repos","events_url":"https://api.github.com/users/megusasuke0/events{/privacy}","received_events_url":"https://api.github.com/users/megusasuke0/received_events","type":"User","site_admin":false},"repo":{"id":737461382,"node_id":"R_kgDOK_TEhg","name":"frontendhandson","full_name":"megusasuke0/frontendhandson","private":false,"owner":{"login":"megusasuke0","id":116707505,"node_id":"U_kgDOBvTQsQ","avatar_url":"https://avatars.githubusercontent.com/u/116707505?v=4","gravatar_id":"","url":"https://api.github.com/users/megusasuke0","html_url":"https://github.com/megusasuke0","followers_url":"https://api.github.com/users/megusasuke0/followers","following_url":"https://api.github.com/users/megusasuke0/following{/other_user}","gists_url":"https://api.github.com/users/megusasuke0/gists{/gist_id}","starred_url":"https://api.github.com/users/megusasuke0/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/megusasuke0/subscriptions","organizations_url":"https://api.github.com/users/megusasuke0/orgs","repos_url":"https://api.github.com/users/megusasuke0/repos","events_url":"https://api.github.com/users/megusasuke0/events{/privacy}","received_events_url":"https://api.github.com/users/megusasuke0/received_events","type":"User","site_admin":false},"html_url":"https://github.com/megusasuke0/frontendhandson","description":"Created with StackBlitz ⚡️","fork":false,"url":"https://api.github.com/repos/megusasuke0/frontendhandson","forks_url":"https://api.github.com/repos/megusasuke0/frontendhandson/forks","keys_url":"https://api.github.com/repos/megusasuke0/frontendhandson/keys{/key_id}","collaborators_url":"https://api.github.com/repos/megusasuke0/frontendhandson/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/megusasuke0/frontendhandson/teams","hooks_url":"https://api.github.com/repos/megusasuke0/frontendhandson/hooks","issue_events_url":"https://api.github.com/repos/megusasuke0/frontendhandson/issues/events{/number}","events_url":"https://api.github.com/repos/megusasuke0/frontendhandson/events","assignees_url":"https://api.github.com/repos/megusasuke0/frontendhandson/assignees{/user}","branches_url":"https://api.github.com/repos/megusasuke0/frontendhandson/branches{/branch}","tags_url":"https://api.github.com/repos/megusasuke0/frontendhandson/tags","blobs_url":"https://api.github.com/repos/megusasuke0/frontendhandson/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/megusasuke0/frontendhandson/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/megusasuke0/frontendhandson/git/refs{/sha}","trees_url":"https://api.github.com/repos/megusasuke0/frontendhandson/git/trees{/sha}","statuses_url":"https://api.github.com/repos/megusasuke0/frontendhandson/statuses/{sha}","languages_url":"https://api.github.com/repos/megusasuke0/frontendhandson/languages","stargazers_url":"https://api.github.com/repos/megusasuke0/frontendhandson/stargazers","contributors_url":"https://api.github.com/repos/megusasuke0/frontendhandson/contributors","subscribers_url":"https://api.github.com/repos/megusasuke0/frontendhandson/subscribers","subscription_url":"https://api.github.com/repos/megusasuke0/frontendhandson/subscription","commits_url":"https://api.github.com/repos/megusasuke0/frontendhandson/commits{/sha}","git_commits_url":"https://api.github.com/repos/megusasuke0/frontendhandson/git/commits{/sha}","comments_url":"https://api.github.com/repos/megusasuke0/frontendhandson/comments{/number}","issue_comment_url":"https://api.github.com/repos/megusasuke0/frontendhandson/issues/comments{/number}","contents_url":"https://api.github.com/repos/megusasuke0/frontendhandson/contents/{+path}","compare_url":"https://api.github.com/repos/megusasuke0/frontendhandson/compare/{base}...{head}","merges_url":"https://api.github.com/repos/megusasuke0/frontendhandson/merges","archive_url":"https://api.github.com/repos/megusasuke0/frontendhandson/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/megusasuke0/frontendhandson/downloads","issues_url":"https://api.github.com/repos/megusasuke0/frontendhandson/issues{/number}","pulls_url":"https://api.github.com/repos/megusasuke0/frontendhandson/pulls{/number}","milestones_url":"https://api.github.com/repos/megusasuke0/frontendhandson/milestones{/number}","notifications_url":"https://api.github.com/repos/megusasuke0/frontendhandson/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/megusasuke0/frontendhandson/labels{/name}","releases_url":"https://api.github.com/repos/megusasuke0/frontendhandson/releases{/id}","deployments_url":"https://api.github.com/repos/megusasuke0/frontendhandson/deployments","created_at":"2023-12-31T05:41:42Z","updated_at":"2023-12-31T05:41:49Z","pushed_at":"2024-01-01T14:56:47Z","git_url":"git://github.com/megusasuke0/frontendhandson.git","ssh_url":"git@github.com:megusasuke0/frontendhandson.git","clone_url":"https://github.com/megusasuke0/frontendhandson.git","svn_url":"https://github.com/megusasuke0/frontendhandson","homepage":"https://stackblitz.com/edit/web-platform-kr2hi6","size":4,"stargazers_count":0,"watchers_count":0,"language":"HTML","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"has_discussions":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":1,"license":null,"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":[],"visibility":"public","forks":0,"open_issues":1,"watchers":0,"default_branch":"main"}},"base":{"label":"megusasuke0:main","ref":"main","sha":"8ab47b5551ab631cfc429b88eafa6b31b5b73009","user":{"login":"megusasuke0","id":116707505,"node_id":"U_kgDOBvTQsQ","avatar_url":"https://avatars.githubusercontent.com/u/116707505?v=4","gravatar_id":"","url":"https://api.github.com/users/megusasuke0","html_url":"https://github.com/megusasuke0","followers_url":"https://api.github.com/users/megusasuke0/followers","following_url":"https://api.github.com/users/megusasuke0/following{/other_user}","gists_url":"https://api.github.com/users/megusasuke0/gists{/gist_id}","starred_url":"https://api.github.com/users/megusasuke0/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/megusasuke0/subscriptions","organizations_url":"https://api.github.com/users/megusasuke0/orgs","repos_url":"https://api.github.com/users/megusasuke0/repos","events_url":"https://api.github.com/users/megusasuke0/events{/privacy}","received_events_url":"https://api.github.com/users/megusasuke0/received_events","type":"User","site_admin":false},"repo":{"id":737461382,"node_id":"R_kgDOK_TEhg","name":"frontendhandson","full_name":"megusasuke0/frontendhandson","private":false,"owner":{"login":"megusasuke0","id":116707505,"node_id":"U_kgDOBvTQsQ","avatar_url":"https://avatars.githubusercontent.com/u/116707505?v=4","gravatar_id":"","url":"https://api.github.com/users/megusasuke0","html_url":"https://github.com/megusasuke0","followers_url":"https://api.github.com/users/megusasuke0/followers","following_url":"https://api.github.com/users/megusasuke0/following{/other_user}","gists_url":"https://api.github.com/users/megusasuke0/gists{/gist_id}","starred_url":"https://api.github.com/users/megusasuke0/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/megusasuke0/subscriptions","organizations_url":"https://api.github.com/users/megusasuke0/orgs","repos_url":"https://api.github.com/users/megusasuke0/repos","events_url":"https://api.github.com/users/megusasuke0/events{/privacy}","received_events_url":"https://api.github.com/users/megusasuke0/received_events","type":"User","site_admin":false},"html_url":"https://github.com/megusasuke0/frontendhandson","description":"Created with StackBlitz ⚡️","fork":false,"url":"https://api.github.com/repos/megusasuke0/frontendhandson","forks_url":"https://api.github.com/repos/megusasuke0/frontendhandson/forks","keys_url":"https://api.github.com/repos/megusasuke0/frontendhandson/keys{/key_id}","collaborators_url":"https://api.github.com/repos/megusasuke0/frontendhandson/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/megusasuke0/frontendhandson/teams","hooks_url":"https://api.github.com/repos/megusasuke0/frontendhandson/hooks","issue_events_url":"https://api.github.com/repos/megusasuke0/frontendhandson/issues/events{/number}","events_url":"https://api.github.com/repos/megusasuke0/frontendhandson/events","assignees_url":"https://api.github.com/repos/megusasuke0/frontendhandson/assignees{/user}","branches_url":"https://api.github.com/repos/megusasuke0/frontendhandson/branches{/branch}","tags_url":"https://api.github.com/repos/megusasuke0/frontendhandson/tags","blobs_url":"https://api.github.com/repos/megusasuke0/frontendhandson/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/megusasuke0/frontendhandson/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/megusasuke0/frontendhandson/git/refs{/sha}","trees_url":"https://api.github.com/repos/megusasuke0/frontendhandson/git/trees{/sha}","statuses_url":"https://api.github.com/repos/megusasuke0/frontendhandson/statuses/{sha}","languages_url":"https://api.github.com/repos/megusasuke0/frontendhandson/languages","stargazers_url":"https://api.github.com/repos/megusasuke0/frontendhandson/stargazers","contributors_url":"https://api.github.com/repos/megusasuke0/frontendhandson/contributors","subscribers_url":"https://api.github.com/repos/megusasuke0/frontendhandson/subscribers","subscription_url":"https://api.github.com/repos/megusasuke0/frontendhandson/subscription","commits_url":"https://api.github.com/repos/megusasuke0/frontendhandson/commits{/sha}","git_commits_url":"https://api.github.com/repos/megusasuke0/frontendhandson/git/commits{/sha}","comments_url":"https://api.github.com/repos/megusasuke0/frontendhandson/comments{/number}","issue_comment_url":"https://api.github.com/repos/megusasuke0/frontendhandson/issues/comments{/number}","contents_url":"https://api.github.com/repos/megusasuke0/frontendhandson/contents/{+path}","compare_url":"https://api.github.com/repos/megusasuke0/frontendhandson/compare/{base}...{head}","merges_url":"https://api.github.com/repos/megusasuke0/frontendhandson/merges","archive_url":"https://api.github.com/repos/megusasuke0/frontendhandson/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/megusasuke0/frontendhandson/downloads","issues_url":"https://api.github.com/repos/megusasuke0/frontendhandson/issues{/number}","pulls_url":"https://api.github.com/repos/megusasuke0/frontendhandson/pulls{/number}","milestones_url":"https://api.github.com/repos/megusasuke0/frontendhandson/milestones{/number}","notifications_url":"https://api.github.com/repos/megusasuke0/frontendhandson/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/megusasuke0/frontendhandson/labels{/name}","releases_url":"https://api.github.com/repos/megusasuke0/frontendhandson/releases{/id}","deployments_url":"https://api.github.com/repos/megusasuke0/frontendhandson/deployments","created_at":"2023-12-31T05:41:42Z","updated_at":"2023-12-31T05:41:49Z","pushed_at":"2024-01-01T14:56:47Z","git_url":"git://github.com/megusasuke0/frontendhandson.git","ssh_url":"git@github.com:megusasuke0/frontendhandson.git","clone_url":"https://github.com/megusasuke0/frontendhandson.git","svn_url":"https://github.com/megusasuke0/frontendhandson","homepage":"https://stackblitz.com/edit/web-platform-kr2hi6","size":4,"stargazers_count":0,"watchers_count":0,"language":"HTML","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"has_discussions":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":1,"license":null,"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":[],"visibility":"public","forks":0,"open_issues":1,"watchers":0,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/megusasuke0/frontendhandson/pulls/1"},"html":{"href":"https://github.com/megusasuke0/frontendhandson/pull/1"},"issue":{"href":"https://api.github.com/repos/megusasuke0/frontendhandson/issues/1"},"comments":{"href":"https://api.github.com/repos/megusasuke0/frontendhandson/issues/1/comments"},"review_comments":{"href":"https://api.github.com/repos/megusasuke0/frontendhandson/pulls/1/comments"},"review_comment":{"href":"https://api.github.com/repos/megusasuke0/frontendhandson/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/megusasuke0/frontendhandson/pulls/1/commits"},"statuses":{"href":"https://api.github.com/repos/megusasuke0/frontendhandson/statuses/d1cd14bfa81aaa8d39ce0a8fd4d90cb7be53f627"}},"author_association":"OWNER","auto_merge":null,"active_lock_reason":null}},"public":true,"created_at":"2024-01-01T15:00:00Z"}
+{"id":"34502641394","type":"PushEvent","actor":{"id":155086649,"login":"dim12512a","display_login":"dim12512a","gravatar_id":"","url":"https://api.github.com/users/dim12512a","avatar_url":"https://avatars.githubusercontent.com/u/155086649?"},"repo":{"id":737073774,"name":"dim12512a/Repo6","url":"https://api.github.com/repos/dim12512a/Repo6"},"payload":{"repository_id":737073774,"push_id":16466254509,"size":1,"distinct_size":1,"ref":"refs/heads/main","head":"ecca430b2e030a19a8803cfed3df318521a68509","before":"aa1bdba02efb57b7606de73f4937d7605c8fa51f","commits":[{"sha":"ecca430b2e030a19a8803cfed3df318521a68509","author":{"email":"you@example.com","name":"Your Name"},"message":"Empty Commit","distinct":true,"url":"https://api.github.com/repos/dim12512a/Repo6/commits/ecca430b2e030a19a8803cfed3df318521a68509"}]},"public":true,"created_at":"2024-01-01T15:00:00Z"}
+{"id":"34502641400","type":"ForkEvent","actor":{"id":51039409,"login":"Shadowxiaomo","display_login":"Shadowxiaomo","gravatar_id":"","url":"https://api.github.com/users/Shadowxiaomo","avatar_url":"https://avatars.githubusercontent.com/u/51039409?"},"repo":{"id":209353301,"name":"kp7742/MemDumper","url":"https://api.github.com/repos/kp7742/MemDumper"},"payload":{"forkee":{"id":737802479,"node_id":"R_kgDOK_n47w","name":"MemDumper","full_name":"Shadowxiaomo/MemDumper","private":false,"owner":{"login":"Shadowxiaomo","id":51039409,"node_id":"MDQ6VXNlcjUxMDM5NDA5","avatar_url":"https://avatars.githubusercontent.com/u/51039409?v=4","gravatar_id":"","url":"https://api.github.com/users/Shadowxiaomo","html_url":"https://github.com/Shadowxiaomo","followers_url":"https://api.github.com/users/Shadowxiaomo/followers","following_url":"https://api.github.com/users/Shadowxiaomo/following{/other_user}","gists_url":"https://api.github.com/users/Shadowxiaomo/gists{/gist_id}","starred_url":"https://api.github.com/users/Shadowxiaomo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Shadowxiaomo/subscriptions","organizations_url":"https://api.github.com/users/Shadowxiaomo/orgs","repos_url":"https://api.github.com/users/Shadowxiaomo/repos","events_url":"https://api.github.com/users/Shadowxiaomo/events{/privacy}","received_events_url":"https://api.github.com/users/Shadowxiaomo/received_events","type":"User","site_admin":false},"html_url":"https://github.com/Shadowxiaomo/MemDumper","description":"Dump Memory of Process in Android","fork":true,"url":"https://api.github.com/repos/Shadowxiaomo/MemDumper","forks_url":"https://api.github.com/repos/Shadowxiaomo/MemDumper/forks","keys_url":"https://api.github.com/repos/Shadowxiaomo/MemDumper/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Shadowxiaomo/MemDumper/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Shadowxiaomo/MemDumper/teams","hooks_url":"https://api.github.com/repos/Shadowxiaomo/MemDumper/hooks","issue_events_url":"https://api.github.com/repos/Shadowxiaomo/MemDumper/issues/events{/number}","events_url":"https://api.github.com/repos/Shadowxiaomo/MemDumper/events","assignees_url":"https://api.github.com/repos/Shadowxiaomo/MemDumper/assignees{/user}","branches_url":"https://api.github.com/repos/Shadowxiaomo/MemDumper/branches{/branch}","tags_url":"https://api.github.com/repos/Shadowxiaomo/MemDumper/tags","blobs_url":"https://api.github.com/repos/Shadowxiaomo/MemDumper/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Shadowxiaomo/MemDumper/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Shadowxiaomo/MemDumper/git/refs{/sha}","trees_url":"https://api.github.com/repos/Shadowxiaomo/MemDumper/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Shadowxiaomo/MemDumper/statuses/{sha}","languages_url":"https://api.github.com/repos/Shadowxiaomo/MemDumper/languages","stargazers_url":"https://api.github.com/repos/Shadowxiaomo/MemDumper/stargazers","contributors_url":"https://api.github.com/repos/Shadowxiaomo/MemDumper/contributors","subscribers_url":"https://api.github.com/repos/Shadowxiaomo/MemDumper/subscribers","subscription_url":"https://api.github.com/repos/Shadowxiaomo/MemDumper/subscription","commits_url":"https://api.github.com/repos/Shadowxiaomo/MemDumper/commits{/sha}","git_commits_url":"https://api.github.com/repos/Shadowxiaomo/MemDumper/git/commits{/sha}","comments_url":"https://api.github.com/repos/Shadowxiaomo/MemDumper/comments{/number}","issue_comment_url":"https://api.github.com/repos/Shadowxiaomo/MemDumper/issues/comments{/number}","contents_url":"https://api.github.com/repos/Shadowxiaomo/MemDumper/contents/{+path}","compare_url":"https://api.github.com/repos/Shadowxiaomo/MemDumper/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Shadowxiaomo/MemDumper/merges","archive_url":"https://api.github.com/repos/Shadowxiaomo/MemDumper/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Shadowxiaomo/MemDumper/downloads","issues_url":"https://api.github.com/repos/Shadowxiaomo/MemDumper/issues{/number}","pulls_url":"https://api.github.com/repos/Shadowxiaomo/MemDumper/pulls{/number}","milestones_url":"https://api.github.com/repos/Shadowxiaomo/MemDumper/milestones{/number}","notifications_url":"https://api.github.com/repos/Shadowxiaomo/MemDumper/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Shadowxiaomo/MemDumper/labels{/name}","releases_url":"https://api.github.com/repos/Shadowxiaomo/MemDumper/releases{/id}","deployments_url":"https://api.github.com/repos/Shadowxiaomo/MemDumper/deployments","created_at":"2024-01-01T14:59:37Z","updated_at":"2024-01-01T14:59:37Z","pushed_at":"2021-03-30T22:43:13Z","git_url":"git://github.com/Shadowxiaomo/MemDumper.git","ssh_url":"git@github.com:Shadowxiaomo/MemDumper.git","clone_url":"https://github.com/Shadowxiaomo/MemDumper.git","svn_url":"https://github.com/Shadowxiaomo/MemDumper","homepage":"","size":1692,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"has_discussions":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":0,"license":null,"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":[],"visibility":"public","forks":0,"open_issues":0,"watchers":0,"default_branch":"main","public":true}},"public":true,"created_at":"2024-01-01T15:00:00Z"}
+{"id":"34502641401","type":"PushEvent","actor":{"id":68572913,"login":"Jinyeong1611","display_login":"Jinyeong1611","gravatar_id":"","url":"https://api.github.com/users/Jinyeong1611","avatar_url":"https://avatars.githubusercontent.com/u/68572913?"},"repo":{"id":737797611,"name":"Jinyeong1611/pacman","url":"https://api.github.com/repos/Jinyeong1611/pacman"},"payload":{"repository_id":737797611,"push_id":16466254459,"size":7,"distinct_size":7,"ref":"refs/heads/main","head":"eff7b1956dd12bc392b8ca63c595a56949066369","before":"5c6b2e8346450071e242a46fdfab3246a83ddeb5","commits":[{"sha":"a91acbb43cfde07b162d619e6c4eed39c3a9ab7e","author":{"email":"ins1500@naver.com","name":"FastTurtle"},"message":"방향값 추가","distinct":true,"url":"https://api.github.com/repos/Jinyeong1611/pacman/commits/a91acbb43cfde07b162d619e6c4eed39c3a9ab7e"},{"sha":"d55284a7b2a62ead107f6d6a6d9bd7ad89cb17f2","author":{"email":"ins1500@naver.com","name":"FastTurtle"},"message":"direction 필드 추가 moveProcess 메서드 생성","distinct":true,"url":"https://api.github.com/repos/Jinyeong1611/pacman/commits/d55284a7b2a62ead107f6d6a6d9bd7ad89cb17f2"},{"sha":"08ad1dddef61cb29b3e779ae849dc448fdfac6dd","author":{"email":"ins1500@naver.com","name":"FastTurtle"},"message":"moveProcess 메서드 추가","distinct":true,"url":"https://api.github.com/repos/Jinyeong1611/pacman/commits/08ad1dddef61cb29b3e779ae849dc448fdfac6dd"},{"sha":"740fa68d76d587aeb99ae5d4e6bd9d50bf3b482a","author":{"email":"ins1500@naver.com","name":"FastTurtle"},"message":"moveForward 생성","distinct":true,"url":"https://api.github.com/repos/Jinyeong1611/pacman/commits/740fa68d76d587aeb99ae5d4e6bd9d50bf3b482a"},{"sha":"a9bf0b68af631579f66d52f39789664b81f1a21a","author":{"email":"ins1500@naver.com","name":"FastTurtle"},"message":"moveBackward 생성","distinct":true,"url":"https://api.github.com/repos/Jinyeong1611/pacman/commits/a9bf0b68af631579f66d52f39789664b81f1a21a"},{"sha":"2c2673461b0e3daa6fe6be419f8b8fc363744181","author":{"email":"ins1500@naver.com","name":"FastTurtle"},"message":"getMapX, getMapY, getMapXRightSide, getMapYRightSide 메서드 추가","distinct":true,"url":"https://api.github.com/repos/Jinyeong1611/pacman/commits/2c2673461b0e3daa6fe6be419f8b8fc363744181"},{"sha":"eff7b1956dd12bc392b8ca63c595a56949066369","author":{"email":"ins1500@naver.com","name":"FastTurtle"},"message":"코딩 진행현황 추가","distinct":true,"url":"https://api.github.com/repos/Jinyeong1611/pacman/commits/eff7b1956dd12bc392b8ca63c595a56949066369"}]},"public":true,"created_at":"2024-01-01T15:00:00Z"}
+{"id":"34502641404","type":"PullRequestEvent","actor":{"id":49699333,"login":"dependabot[bot]","display_login":"dependabot","gravatar_id":"","url":"https://api.github.com/users/dependabot[bot]","avatar_url":"https://avatars.githubusercontent.com/u/49699333?"},"repo":{"id":216169746,"name":"DNNCommunity/dnn-elements","url":"https://api.github.com/repos/DNNCommunity/dnn-elements"},"payload":{"action":"closed","number":911,"pull_request":{"url":"https://api.github.com/repos/DNNCommunity/dnn-elements/pulls/911","id":1625849822,"node_id":"PR_kwDODOJ9Es5g6H_e","html_url":"https://github.com/DNNCommunity/dnn-elements/pull/911","diff_url":"https://github.com/DNNCommunity/dnn-elements/pull/911.diff","patch_url":"https://github.com/DNNCommunity/dnn-elements/pull/911.patch","issue_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/issues/911","number":911,"state":"closed","locked":false,"title":"Bump @storybook/addon-a11y from 7.5.3 to 7.6.3","user":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","site_admin":false},"body":"Bumps [@storybook/addon-a11y](https://github.com/storybookjs/storybook/tree/HEAD/code/addons/a11y) from 7.5.3 to 7.6.3.\n<details>\n<summary>Release notes</summary>\n<p><em>Sourced from <a href=\"https://github.com/storybookjs/storybook/releases\"><code>@​storybook/addon-a11y</code>'s releases</a>.</em></p>\n<blockquote>\n<h2>v7.6.3</h2>\n<h2>7.6.3</h2>\n<ul>\n<li>Next.js: Fix next/font/local usage in babel mode - <a href=\"https://redirect.github.com/storybookjs/storybook/pull/25045\">#25045</a>, thanks <a href=\"https://github.com/valentinpalkovic\"><code>@​valentinpalkovic</code></a>!</li>\n</ul>\n<h2>v7.6.2</h2>\n<h2>7.6.2</h2>\n<ul>\n<li>CLI: Improve dependency metadata detection in storybook doctor - <a href=\"https://redirect.github.com/storybookjs/storybook/pull/25037\">#25037</a>, thanks <a href=\"https://github.com/yannbf\"><code>@​yannbf</code></a>!</li>\n<li>React-Docgen: Make error-handling more gentle - <a href=\"https://redirect.github.com/storybookjs/storybook/pull/25055\">#25055</a>, thanks <a href=\"https://github.com/valentinpalkovic\"><code>@​valentinpalkovic</code></a>!</li>\n</ul>\n<h2>v7.6.1</h2>\n<h2>7.6.1</h2>\n<ul>\n<li>Next.js: Fix AppRouterProvider usage - <a href=\"https://redirect.github.com/storybookjs/storybook/pull/25032\">#25032</a>, thanks <a href=\"https://github.com/valentinpalkovic\"><code>@​valentinpalkovic</code></a>!</li>\n<li>SvelteKit: Fix HMR not working - <a href=\"https://redirect.github.com/storybookjs/storybook/pull/25031\">#25031</a>, thanks <a href=\"https://github.com/JReinhold\"><code>@​JReinhold</code></a>!</li>\n<li>Test: Downgrade <code>@​testing-library/user-event</code> to 14.3.0 - <a href=\"https://redirect.github.com/storybookjs/storybook/pull/25004\">#25004</a>, thanks <a href=\"https://github.com/kasperpeulen\"><code>@​kasperpeulen</code></a>!</li>\n<li>Webpack: Fix exclude regex in react-docgen-loader - <a href=\"https://redirect.github.com/storybookjs/storybook/pull/25030\">#25030</a>, thanks <a href=\"https://github.com/valentinpalkovic\"><code>@​valentinpalkovic</code></a>!</li>\n</ul>\n<h2>v7.6.0</h2>\n<h2>7.6.0</h2>\n<p>Storybook 7.6 is here with increased performance and much more!</p>\n<ul>\n<li>🔥 Improved SWC support</li>\n<li>🧪 New test utilities and fast build mode</li>\n<li>🔼 NextJS SWC + avif support &amp; fixes</li>\n<li>🤡 SvelteKit page and navigation mocking</li>\n<li>⚛️ React-docgen upgrade</li>\n<li>🎨 Controls a11y, background theming, and viewports</li>\n<li>🩺 CLI: The doctor is in!</li>\n<li>🚫 Addons: Remove React as a peer dependency</li>\n<li>🪦 Storyshots and Vue2 deprecated</li>\n</ul>\n<p>Check out the blog post for more information: <a href=\"https://storybook.js.org/blog/storybook-7-6/\">https://storybook.js.org/blog/storybook-7-6/</a></p>\n<!-- raw HTML omitted -->\n<ul>\n<li>Actions: Attach spies on actions across stories when defined in meta - <a href=\"https://redirect.github.com/storybookjs/storybook/pull/24451\">#24451</a>, thanks <a href=\"https://github.com/kasperpeulen\"><code>@​kasperpeulen</code></a>!</li>\n<li>Actions: Fix <code>@storybook/core-events/preview-errors</code> dependency missing for Yarn PnP - <a href=\"https://redirect.github.com/storybookjs/storybook/pull/24973\">#24973</a>, thanks <a href=\"https://github.com/JReinhold\"><code>@​JReinhold</code></a>!</li>\n<li>Actions: Fix missing crypto module crashing React Native - <a href=\"https://redirect.github.com/storybookjs/storybook/pull/24546\">#24546</a>, thanks <a href=\"https://github.com/dannyhw\"><code>@​dannyhw</code></a>!</li>\n<li>Actions: Warn on implicit actions - <a href=\"https://redirect.github.com/storybookjs/storybook/pull/24856\">#24856</a>, thanks <a href=\"https://github.com/kasperpeulen\"><code>@​kasperpeulen</code></a>!</li>\n<li>Addon A11y: Avoid CSP issue - <a href=\"https://redirect.github.com/storybookjs/storybook/pull/24477\">#24477</a>, thanks <a href=\"https://github.com/Marklb\"><code>@​Marklb</code></a>!</li>\n<li>Addon: Move Visual Test addon to the code directory - <a href=\"https://redirect.github.com/storybookjs/storybook/pull/24771\">#24771</a>, thanks <a href=\"https://github.com/cdedreuille\"><code>@​cdedreuille</code></a>!</li>\n<li>Addons, core: Make <code>react</code> and Storybook packages <code>devDependencies</code> where possible - <a href=\"https://redirect.github.com/storybookjs/storybook/pull/24676\">#24676</a>, thanks <a href=\"https://github.com/JReinhold\"><code>@​JReinhold</code></a>!</li>\n<li>Addons, core: Make <code>react</code> and Storybook packages <code>devDependencies</code> where possible - ATTEMPT 2 - <a href=\"https://redirect.github.com/storybookjs/storybook/pull/24834\">#24834</a>, thanks <a href=\"https://github.com/JReinhold\"><code>@​JReinhold</code></a>!</li>\n<li>Angular: Add source-map option to builder - <a href=\"https://redirect.github.com/storybookjs/storybook/pull/24466\">#24466</a>, thanks <a href=\"https://github.com/valentinpalkovic\"><code>@​valentinpalkovic</code></a>!</li>\n</ul>\n<!-- raw HTML omitted -->\n</blockquote>\n<p>... (truncated)</p>\n</details>\n<details>\n<summary>Changelog</summary>\n<p><em>Sourced from <a href=\"https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md\"><code>@​storybook/addon-a11y</code>'s changelog</a>.</em></p>\n<blockquote>\n<h2>7.6.3</h2>\n<ul>\n<li>Next.js: Fix next/font/local usage in babel mode - <a href=\"https://redirect.github.com/storybookjs/storybook/pull/25045\">#25045</a>, thanks <a href=\"https://github.com/valentinpalkovic\"><code>@​valentinpalkovic</code></a>!</li>\n</ul>\n<h2>7.6.2</h2>\n<ul>\n<li>CLI: Improve dependency metadata detection in storybook doctor - <a href=\"https://redirect.github.com/storybookjs/storybook/pull/25037\">#25037</a>, thanks <a href=\"https://github.com/yannbf\"><code>@​yannbf</code></a>!</li>\n<li>React-Docgen: Make error-handling more gentle - <a href=\"https://redirect.github.com/storybookjs/storybook/pull/25055\">#25055</a>, thanks <a href=\"https://github.com/valentinpalkovic\"><code>@​valentinpalkovic</code></a>!</li>\n</ul>\n<h2>7.6.1</h2>\n<ul>\n<li>Next.js: Fix AppRouterProvider usage - <a href=\"https://redirect.github.com/storybookjs/storybook/pull/25032\">#25032</a>, thanks <a href=\"https://github.com/valentinpalkovic\"><code>@​valentinpalkovic</code></a>!</li>\n<li>SvelteKit: Fix HMR not working - <a href=\"https://redirect.github.com/storybookjs/storybook/pull/25031\">#25031</a>, thanks <a href=\"https://github.com/JReinhold\"><code>@​JReinhold</code></a>!</li>\n<li>Test: Downgrade <code>@​testing-library/user-event</code> to 14.3.0 - <a href=\"https://redirect.github.com/storybookjs/storybook/pull/25004\">#25004</a>, thanks <a href=\"https://github.com/kasperpeulen\"><code>@​kasperpeulen</code></a>!</li>\n<li>Webpack: Fix exclude regex in react-docgen-loader - <a href=\"https://redirect.github.com/storybookjs/storybook/pull/25030\">#25030</a>, thanks <a href=\"https://github.com/valentinpalkovic\"><code>@​valentinpalkovic</code></a>!</li>\n</ul>\n<h2>7.6.0</h2>\n<p>Storybook 7.6 is here with increased performance and much more!</p>\n<ul>\n<li>🔥 Improved SWC support</li>\n<li>🧪 New test utilities and fast build mode</li>\n<li>🔼 NextJS SWC + avif support &amp; fixes</li>\n<li>🤡 SvelteKit page and navigation mocking</li>\n<li>⚛️ React-docgen upgrade</li>\n<li>🎨 Controls a11y, background theming, and viewports</li>\n<li>🩺 CLI: The doctor is in!</li>\n<li>🚫 Addons: Remove React as a peer dependency</li>\n<li>🪦 Storyshots and Vue2 deprecated</li>\n</ul>\n<!-- raw HTML omitted -->\n<ul>\n<li>Actions: Attach spies on actions across stories when defined in meta - <a href=\"https://redirect.github.com/storybookjs/storybook/pull/24451\">#24451</a>, thanks <a href=\"https://github.com/kasperpeulen\"><code>@​kasperpeulen</code></a>!</li>\n<li>Actions: Fix <code>@storybook/core-events/preview-errors</code> dependency missing for Yarn PnP - <a href=\"https://redirect.github.com/storybookjs/storybook/pull/24973\">#24973</a>, thanks <a href=\"https://github.com/JReinhold\"><code>@​JReinhold</code></a>!</li>\n<li>Actions: Fix missing crypto module crashing React Native - <a href=\"https://redirect.github.com/storybookjs/storybook/pull/24546\">#24546</a>, thanks <a href=\"https://github.com/dannyhw\"><code>@​dannyhw</code></a>!</li>\n<li>Actions: Warn on implicit actions - <a href=\"https://redirect.github.com/storybookjs/storybook/pull/24856\">#24856</a>, thanks <a href=\"https://github.com/kasperpeulen\"><code>@​kasperpeulen</code></a>!</li>\n<li>Addon A11y: Avoid CSP issue - <a href=\"https://redirect.github.com/storybookjs/storybook/pull/24477\">#24477</a>, thanks <a href=\"https://github.com/Marklb\"><code>@​Marklb</code></a>!</li>\n<li>Addon: Move Visual Test addon to the code directory - <a href=\"https://redirect.github.com/storybookjs/storybook/pull/24771\">#24771</a>, thanks <a href=\"https://github.com/cdedreuille\"><code>@​cdedreuille</code></a>!</li>\n<li>Addons, core: Make <code>react</code> and Storybook packages <code>devDependencies</code> where possible - <a href=\"https://redirect.github.com/storybookjs/storybook/pull/24676\">#24676</a>, thanks <a href=\"https://github.com/JReinhold\"><code>@​JReinhold</code></a>!</li>\n<li>Addons, core: Make <code>react</code> and Storybook packages <code>devDependencies</code> where possible - ATTEMPT 2 - <a href=\"https://redirect.github.com/storybookjs/storybook/pull/24834\">#24834</a>, thanks <a href=\"https://github.com/JReinhold\"><code>@​JReinhold</code></a>!</li>\n<li>Angular: Add source-map option to builder - <a href=\"https://redirect.github.com/storybookjs/storybook/pull/24466\">#24466</a>, thanks <a href=\"https://github.com/valentinpalkovic\"><code>@​valentinpalkovic</code></a>!</li>\n<li>Angular: Handle nested module metadata - <a href=\"https://redirect.github.com/storybookjs/storybook/pull/24798\">#24798</a>, thanks <a href=\"https://github.com/valentinpalkovic\"><code>@​valentinpalkovic</code></a>!</li>\n<li>Angular: Include object configured styles - <a href=\"https://redirect.github.com/storybookjs/storybook/pull/24768\">#24768</a>, thanks <a href=\"https://github.com/valentinpalkovic\"><code>@​valentinpalkovic</code></a>!</li>\n<li>Babel: Update all @babel/* dependencies - <a href=\"https://redirect.github.com/storybookjs/storybook/pull/24610\">#24610</a>, thanks <a href=\"https://github.com/valentinpalkovic\"><code>@​valentinpalkovic</code></a>!</li>\n<li>CLI: Add &quot;doctor&quot; command - <a href=\"https://redirect.github.com/storybookjs/storybook/pull/22236\">#22236</a>, thanks <a href=\"https://github.com/yannbf\"><code>@​yannbf</code></a>!</li>\n<li>CLI: Add <code>@​storybook/addon-designs</code> to non-core list - <a href=\"https://redirect.github.com/storybookjs/storybook/pull/24507\">#24507</a>, thanks <a href=\"https://github.com/yannbf\"><code>@​yannbf</code></a>!</li>\n<li>CLI: Ensure errors with opening the browser are caught - <a href=\"https://redirect.github.com/storybookjs/storybook/pull/24668\">#24668</a>, thanks <a href=\"https://github.com/xueyawei\"><code>@​xueyawei</code></a>!</li>\n</ul>\n<!-- raw HTML omitted -->\n</blockquote>\n<p>... (truncated)</p>\n</details>\n<details>\n<summary>Commits</summary>\n<ul>\n<li><a href=\"https://github.com/storybookjs/storybook/commit/afc4c2f4cfc23739b5086a5294eb52e8706d0925\"><code>afc4c2f</code></a> Bump version from &quot;7.6.2&quot; to &quot;7.6.3&quot; [skip ci]</li>\n<li><a href=\"https://github.com/storybookjs/storybook/commit/afc89aab2a02079838f6496f7bd2ba7577aed69b\"><code>afc89aa</code></a> Bump version from &quot;7.6.1&quot; to &quot;7.6.2&quot; [skip ci]</li>\n<li><a href=\"https://github.com/storybookjs/storybook/commit/60f9c9af345477709b1ab453046705821eb71f57\"><code>60f9c9a</code></a> Bump version from &quot;7.6.0&quot; to &quot;7.6.1&quot; [skip ci]</li>\n<li><a href=\"https://github.com/storybookjs/storybook/commit/b64214c7c02b01ed513a62eba7c3356f316de74b\"><code>b64214c</code></a> Bump version from &quot;7.6.0-beta.2&quot; to &quot;7.6.0&quot; [skip ci]</li>\n<li><a href=\"https://github.com/storybookjs/storybook/commit/b9901446e9aa393d188512d5ace39a6fe556ec9b\"><code>b990144</code></a> Bump version from &quot;7.6.0-beta.1&quot; to &quot;7.6.0-beta.2&quot; [skip ci]</li>\n<li><a href=\"https://github.com/storybookjs/storybook/commit/d82167b346b1b0b5e9f19a492cc01a18ae4f4a55\"><code>d82167b</code></a> Bump version from &quot;7.6.0-beta.0&quot; to &quot;7.6.0-beta.1&quot; [skip ci]</li>\n<li><a href=\"https://github.com/storybookjs/storybook/commit/574bb87a3231014ba49d15549de94941bd415d61\"><code>574bb87</code></a> Bump version from &quot;7.6.0-alpha.7&quot; to &quot;7.6.0-beta.0&quot; [skip ci]</li>\n<li><a href=\"https://github.com/storybookjs/storybook/commit/bffa2dbb3270e84628612e9be3a2100377cb667e\"><code>bffa2db</code></a> Bump version from &quot;7.6.0-alpha.6&quot; to &quot;7.6.0-alpha.7&quot; [skip ci]</li>\n<li><a href=\"https://github.com/storybookjs/storybook/commit/df357020e010f49e7c325942f0c891e6702527d6\"><code>df35702</code></a> Merge pull request <a href=\"https://github.com/storybookjs/storybook/tree/HEAD/code/addons/a11y/issues/24834\">#24834</a> from storybookjs/revert-24832-revert-24676-experime...</li>\n<li><a href=\"https://github.com/storybookjs/storybook/commit/f18dbe606d327057a7ee4b307fc9c47378c60138\"><code>f18dbe6</code></a> Merge branch 'next-release' into next</li>\n<li>Additional commits viewable in <a href=\"https://github.com/storybookjs/storybook/commits/v7.6.3/code/addons/a11y\">compare view</a></li>\n</ul>\n</details>\n<br />\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=@storybook/addon-a11y&package-manager=npm_and_yarn&previous-version=7.5.3&new-version=7.6.3)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n<details>\n<summary>Dependabot commands and options</summary>\n<br />\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n</details>","created_at":"2023-12-01T14:59:59Z","updated_at":"2024-01-01T14:59:38Z","closed_at":"2024-01-01T14:59:38Z","merged_at":null,"merge_commit_sha":"91e5a7a4907bedfa2234836f1f528215b98ff6a0","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":1673605716,"node_id":"MDU6TGFiZWwxNjczNjA1NzE2","url":"https://api.github.com/repos/DNNCommunity/dnn-elements/labels/dependencies","name":"dependencies","color":"0366d6","default":false,"description":"Pull requests that update a dependency file"},{"id":3968650321,"node_id":"LA_kwDODOJ9Es7sjMxR","url":"https://api.github.com/repos/DNNCommunity/dnn-elements/labels/javascript","name":"javascript","color":"168700","default":false,"description":"Pull requests that update Javascript code"}],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/pulls/911/commits","review_comments_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/pulls/911/comments","review_comment_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/pulls/comments{/number}","comments_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/issues/911/comments","statuses_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/statuses/405cf37a08a0e8fc65c66efb9b6d6d42b15126e5","head":{"label":"DNNCommunity:dependabot/npm_and_yarn/storybook/addon-a11y-7.6.3","ref":"dependabot/npm_and_yarn/storybook/addon-a11y-7.6.3","sha":"405cf37a08a0e8fc65c66efb9b6d6d42b15126e5","user":{"login":"DNNCommunity","id":9216448,"node_id":"MDEyOk9yZ2FuaXphdGlvbjkyMTY0NDg=","avatar_url":"https://avatars.githubusercontent.com/u/9216448?v=4","gravatar_id":"","url":"https://api.github.com/users/DNNCommunity","html_url":"https://github.com/DNNCommunity","followers_url":"https://api.github.com/users/DNNCommunity/followers","following_url":"https://api.github.com/users/DNNCommunity/following{/other_user}","gists_url":"https://api.github.com/users/DNNCommunity/gists{/gist_id}","starred_url":"https://api.github.com/users/DNNCommunity/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DNNCommunity/subscriptions","organizations_url":"https://api.github.com/users/DNNCommunity/orgs","repos_url":"https://api.github.com/users/DNNCommunity/repos","events_url":"https://api.github.com/users/DNNCommunity/events{/privacy}","received_events_url":"https://api.github.com/users/DNNCommunity/received_events","type":"Organization","site_admin":false},"repo":{"id":216169746,"node_id":"MDEwOlJlcG9zaXRvcnkyMTYxNjk3NDY=","name":"dnn-elements","full_name":"DNNCommunity/dnn-elements","private":false,"owner":{"login":"DNNCommunity","id":9216448,"node_id":"MDEyOk9yZ2FuaXphdGlvbjkyMTY0NDg=","avatar_url":"https://avatars.githubusercontent.com/u/9216448?v=4","gravatar_id":"","url":"https://api.github.com/users/DNNCommunity","html_url":"https://github.com/DNNCommunity","followers_url":"https://api.github.com/users/DNNCommunity/followers","following_url":"https://api.github.com/users/DNNCommunity/following{/other_user}","gists_url":"https://api.github.com/users/DNNCommunity/gists{/gist_id}","starred_url":"https://api.github.com/users/DNNCommunity/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DNNCommunity/subscriptions","organizations_url":"https://api.github.com/users/DNNCommunity/orgs","repos_url":"https://api.github.com/users/DNNCommunity/repos","events_url":"https://api.github.com/users/DNNCommunity/events{/privacy}","received_events_url":"https://api.github.com/users/DNNCommunity/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/DNNCommunity/dnn-elements","description":"Collection of Dnn Stencil custom elements","fork":false,"url":"https://api.github.com/repos/DNNCommunity/dnn-elements","forks_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/forks","keys_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/keys{/key_id}","collaborators_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/teams","hooks_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/hooks","issue_events_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/issues/events{/number}","events_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/events","assignees_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/assignees{/user}","branches_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/branches{/branch}","tags_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/tags","blobs_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/git/refs{/sha}","trees_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/git/trees{/sha}","statuses_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/statuses/{sha}","languages_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/languages","stargazers_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/stargazers","contributors_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/contributors","subscribers_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/subscribers","subscription_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/subscription","commits_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/commits{/sha}","git_commits_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/git/commits{/sha}","comments_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/comments{/number}","issue_comment_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/issues/comments{/number}","contents_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/contents/{+path}","compare_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/compare/{base}...{head}","merges_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/merges","archive_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/downloads","issues_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/issues{/number}","pulls_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/pulls{/number}","milestones_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/milestones{/number}","notifications_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/labels{/name}","releases_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/releases{/id}","deployments_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/deployments","created_at":"2019-10-19T07:54:22Z","updated_at":"2023-11-30T08:04:56Z","pushed_at":"2024-01-01T14:59:41Z","git_url":"git://github.com/DNNCommunity/dnn-elements.git","ssh_url":"git@github.com:DNNCommunity/dnn-elements.git","clone_url":"https://github.com/DNNCommunity/dnn-elements.git","svn_url":"https://github.com/DNNCommunity/dnn-elements","homepage":"https://dnncommunity.github.io/dnn-elements/","size":28550,"stargazers_count":14,"watchers_count":14,"language":"TypeScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":true,"has_discussions":false,"forks_count":9,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":14,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":["components","custom-elements","dnn","dnncms","dotnetnuke","hacktoberfest","javascript","stenciljs","web-component","web-components","webcomponents"],"visibility":"public","forks":9,"open_issues":14,"watchers":14,"default_branch":"develop"}},"base":{"label":"DNNCommunity:develop","ref":"develop","sha":"1dcefe27151d1f9e19380f808454f6aa6afe9940","user":{"login":"DNNCommunity","id":9216448,"node_id":"MDEyOk9yZ2FuaXphdGlvbjkyMTY0NDg=","avatar_url":"https://avatars.githubusercontent.com/u/9216448?v=4","gravatar_id":"","url":"https://api.github.com/users/DNNCommunity","html_url":"https://github.com/DNNCommunity","followers_url":"https://api.github.com/users/DNNCommunity/followers","following_url":"https://api.github.com/users/DNNCommunity/following{/other_user}","gists_url":"https://api.github.com/users/DNNCommunity/gists{/gist_id}","starred_url":"https://api.github.com/users/DNNCommunity/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DNNCommunity/subscriptions","organizations_url":"https://api.github.com/users/DNNCommunity/orgs","repos_url":"https://api.github.com/users/DNNCommunity/repos","events_url":"https://api.github.com/users/DNNCommunity/events{/privacy}","received_events_url":"https://api.github.com/users/DNNCommunity/received_events","type":"Organization","site_admin":false},"repo":{"id":216169746,"node_id":"MDEwOlJlcG9zaXRvcnkyMTYxNjk3NDY=","name":"dnn-elements","full_name":"DNNCommunity/dnn-elements","private":false,"owner":{"login":"DNNCommunity","id":9216448,"node_id":"MDEyOk9yZ2FuaXphdGlvbjkyMTY0NDg=","avatar_url":"https://avatars.githubusercontent.com/u/9216448?v=4","gravatar_id":"","url":"https://api.github.com/users/DNNCommunity","html_url":"https://github.com/DNNCommunity","followers_url":"https://api.github.com/users/DNNCommunity/followers","following_url":"https://api.github.com/users/DNNCommunity/following{/other_user}","gists_url":"https://api.github.com/users/DNNCommunity/gists{/gist_id}","starred_url":"https://api.github.com/users/DNNCommunity/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/DNNCommunity/subscriptions","organizations_url":"https://api.github.com/users/DNNCommunity/orgs","repos_url":"https://api.github.com/users/DNNCommunity/repos","events_url":"https://api.github.com/users/DNNCommunity/events{/privacy}","received_events_url":"https://api.github.com/users/DNNCommunity/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/DNNCommunity/dnn-elements","description":"Collection of Dnn Stencil custom elements","fork":false,"url":"https://api.github.com/repos/DNNCommunity/dnn-elements","forks_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/forks","keys_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/keys{/key_id}","collaborators_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/teams","hooks_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/hooks","issue_events_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/issues/events{/number}","events_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/events","assignees_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/assignees{/user}","branches_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/branches{/branch}","tags_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/tags","blobs_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/git/refs{/sha}","trees_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/git/trees{/sha}","statuses_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/statuses/{sha}","languages_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/languages","stargazers_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/stargazers","contributors_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/contributors","subscribers_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/subscribers","subscription_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/subscription","commits_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/commits{/sha}","git_commits_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/git/commits{/sha}","comments_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/comments{/number}","issue_comment_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/issues/comments{/number}","contents_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/contents/{+path}","compare_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/compare/{base}...{head}","merges_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/merges","archive_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/downloads","issues_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/issues{/number}","pulls_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/pulls{/number}","milestones_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/milestones{/number}","notifications_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/labels{/name}","releases_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/releases{/id}","deployments_url":"https://api.github.com/repos/DNNCommunity/dnn-elements/deployments","created_at":"2019-10-19T07:54:22Z","updated_at":"2023-11-30T08:04:56Z","pushed_at":"2024-01-01T14:59:41Z","git_url":"git://github.com/DNNCommunity/dnn-elements.git","ssh_url":"git@github.com:DNNCommunity/dnn-elements.git","clone_url":"https://github.com/DNNCommunity/dnn-elements.git","svn_url":"https://github.com/DNNCommunity/dnn-elements","homepage":"https://dnncommunity.github.io/dnn-elements/","size":28550,"stargazers_count":14,"watchers_count":14,"language":"TypeScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":true,"has_discussions":false,"forks_count":9,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":14,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":["components","custom-elements","dnn","dnncms","dotnetnuke","hacktoberfest","javascript","stenciljs","web-component","web-components","webcomponents"],"visibility":"public","forks":9,"open_issues":14,"watchers":14,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/DNNCommunity/dnn-elements/pulls/911"},"html":{"href":"https://github.com/DNNCommunity/dnn-elements/pull/911"},"issue":{"href":"https://api.github.com/repos/DNNCommunity/dnn-elements/issues/911"},"comments":{"href":"https://api.github.com/repos/DNNCommunity/dnn-elements/issues/911/comments"},"review_comments":{"href":"https://api.github.com/repos/DNNCommunity/dnn-elements/pulls/911/comments"},"review_comment":{"href":"https://api.github.com/repos/DNNCommunity/dnn-elements/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/DNNCommunity/dnn-elements/pulls/911/commits"},"statuses":{"href":"https://api.github.com/repos/DNNCommunity/dnn-elements/statuses/405cf37a08a0e8fc65c66efb9b6d6d42b15126e5"}},"author_association":"CONTRIBUTOR","auto_merge":null,"active_lock_reason":null,"merged":false,"mergeable":true,"rebaseable":true,"mergeable_state":"unstable","merged_by":null,"comments":1,"review_comments":0,"maintainer_can_modify":false,"commits":1,"additions":179,"deletions":228,"changed_files":1}},"public":true,"created_at":"2024-01-01T15:00:00Z","org":{"id":9216448,"login":"DNNCommunity","gravatar_id":"","url":"https://api.github.com/orgs/DNNCommunity","avatar_url":"https://avatars.githubusercontent.com/u/9216448?"}}
+{"id":"34502641432","type":"PushEvent","actor":{"id":113946722,"login":"ColeMalinchock1","display_login":"ColeMalinchock1","gravatar_id":"","url":"https://api.github.com/users/ColeMalinchock1","avatar_url":"https://avatars.githubusercontent.com/u/113946722?"},"repo":{"id":713591656,"name":"ColeMalinchock1/HGT-JSON-Server","url":"https://api.github.com/repos/ColeMalinchock1/HGT-JSON-Server"},"payload":{"repository_id":713591656,"push_id":16466254508,"size":1,"distinct_size":1,"ref":"refs/heads/main","head":"6f2720260938d330303c6a7222feda7eb9797e7a","before":"ec31f7a8659f5ec9ba55275a402ac00205115a00","commits":[{"sha":"6f2720260938d330303c6a7222feda7eb9797e7a","author":{"email":"113946722+ColeMalinchock1@users.noreply.github.com","name":"Cole Malinchock"},"message":"Update backup JSON file","distinct":true,"url":"https://api.github.com/repos/ColeMalinchock1/HGT-JSON-Server/commits/6f2720260938d330303c6a7222feda7eb9797e7a"}]},"public":true,"created_at":"2024-01-01T15:00:01Z"}
+{"id":"34502641439","type":"PushEvent","actor":{"id":125528565,"login":"uyenlexx","display_login":"uyenlexx","gravatar_id":"","url":"https://api.github.com/users/uyenlexx","avatar_url":"https://avatars.githubusercontent.com/u/125528565?"},"repo":{"id":700946194,"name":"HoanqDucAnh/Keebie","url":"https://api.github.com/repos/HoanqDucAnh/Keebie"},"payload":{"repository_id":700946194,"push_id":16466254418,"size":1,"distinct_size":1,"ref":"refs/heads/main","head":"890bc2abcf6de09615b05b474daf8e1a5f20d3b3","before":"378e69db51a44d657e7f8c0343b9d31c7d20ae9d","commits":[{"sha":"890bc2abcf6de09615b05b474daf8e1a5f20d3b3","author":{"email":"21020672@vnu.edu.vn","name":"uyenlex"},"message":"update navbar and search","distinct":true,"url":"https://api.github.com/repos/HoanqDucAnh/Keebie/commits/890bc2abcf6de09615b05b474daf8e1a5f20d3b3"}]},"public":true,"created_at":"2024-01-01T15:00:01Z"}
+{"id":"34502641440","type":"DeleteEvent","actor":{"id":10810283,"login":"direwolf-github","display_login":"direwolf-github","gravatar_id":"","url":"https://api.github.com/users/direwolf-github","avatar_url":"https://avatars.githubusercontent.com/u/10810283?"},"repo":{"id":737802202,"name":"direwolf-github/ephemeral-ci-f72a7b4a","url":"https://api.github.com/repos/direwolf-github/ephemeral-ci-f72a7b4a"},"payload":{"ref":"branch-13f065df","ref_type":"branch","pusher_type":"user"},"public":true,"created_at":"2024-01-01T15:00:01Z"}
+{"id":"34502641446","type":"PushEvent","actor":{"id":119649492,"login":"Zarakkhan-dev","display_login":"Zarakkhan-dev","gravatar_id":"","url":"https://api.github.com/users/Zarakkhan-dev","avatar_url":"https://avatars.githubusercontent.com/u/119649492?"},"repo":{"id":737711771,"name":"Zarakkhan-dev/LegalaiAssistentBackend","url":"https://api.github.com/repos/Zarakkhan-dev/LegalaiAssistentBackend"},"payload":{"repository_id":737711771,"push_id":16466254504,"size":1,"distinct_size":1,"ref":"refs/heads/main","head":"fcd8d1ddc08fc2edc59047eb71ceb546855b9168","before":"690568ba0f17cb8ba56e239f8094e429d4a10cf4","commits":[{"sha":"fcd8d1ddc08fc2edc59047eb71ceb546855b9168","author":{"email":"119649492+Zarakkhan-dev@users.noreply.github.com","name":"Zarakkhan-dev"},"message":"khtam","distinct":true,"url":"https://api.github.com/repos/Zarakkhan-dev/LegalaiAssistentBackend/commits/fcd8d1ddc08fc2edc59047eb71ceb546855b9168"}]},"public":true,"created_at":"2024-01-01T15:00:01Z"}
+{"id":"34502641447","type":"PushEvent","actor":{"id":155086563,"login":"appref5555ix63","display_login":"appref5555ix63","gravatar_id":"","url":"https://api.github.com/users/appref5555ix63","avatar_url":"https://avatars.githubusercontent.com/u/155086563?"},"repo":{"id":737072686,"name":"appref5555ix63/Repo2","url":"https://api.github.com/repos/appref5555ix63/Repo2"},"payload":{"repository_id":737072686,"push_id":16466254618,"size":1,"distinct_size":1,"ref":"refs/heads/main","head":"ba75f798b41ea6752299b69476c3e91be2e59f9b","before":"090039882f0e56947d3967dfb012c54bf8580509","commits":[{"sha":"ba75f798b41ea6752299b69476c3e91be2e59f9b","author":{"email":"you@example.com","name":"Your Name"},"message":"Empty Commit","distinct":true,"url":"https://api.github.com/repos/appref5555ix63/Repo2/commits/ba75f798b41ea6752299b69476c3e91be2e59f9b"}]},"public":true,"created_at":"2024-01-01T15:00:01Z"}
+{"id":"34502641448","type":"ForkEvent","actor":{"id":9263301,"login":"tarinisunil","display_login":"tarinisunil","gravatar_id":"","url":"https://api.github.com/users/tarinisunil","avatar_url":"https://avatars.githubusercontent.com/u/9263301?"},"repo":{"id":188525890,"name":"sahilbansal17/Get_Better_at_CP_in_2_Months","url":"https://api.github.com/repos/sahilbansal17/Get_Better_at_CP_in_2_Months"},"payload":{"forkee":{"id":737802487,"node_id":"R_kgDOK_n49w","name":"Get_Better_at_CP_in_2_Months","full_name":"tarinisunil/Get_Better_at_CP_in_2_Months","private":false,"owner":{"login":"tarinisunil","id":9263301,"node_id":"MDQ6VXNlcjkyNjMzMDE=","avatar_url":"https://avatars.githubusercontent.com/u/9263301?v=4","gravatar_id":"","url":"https://api.github.com/users/tarinisunil","html_url":"https://github.com/tarinisunil","followers_url":"https://api.github.com/users/tarinisunil/followers","following_url":"https://api.github.com/users/tarinisunil/following{/other_user}","gists_url":"https://api.github.com/users/tarinisunil/gists{/gist_id}","starred_url":"https://api.github.com/users/tarinisunil/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tarinisunil/subscriptions","organizations_url":"https://api.github.com/users/tarinisunil/orgs","repos_url":"https://api.github.com/users/tarinisunil/repos","events_url":"https://api.github.com/users/tarinisunil/events{/privacy}","received_events_url":"https://api.github.com/users/tarinisunil/received_events","type":"User","site_admin":false},"html_url":"https://github.com/tarinisunil/Get_Better_at_CP_in_2_Months","description":"This contains the curriculum that I will follow to get better at Competitive Programming in 2 months.","fork":true,"url":"https://api.github.com/repos/tarinisunil/Get_Better_at_CP_in_2_Months","forks_url":"https://api.github.com/repos/tarinisunil/Get_Better_at_CP_in_2_Months/forks","keys_url":"https://api.github.com/repos/tarinisunil/Get_Better_at_CP_in_2_Months/keys{/key_id}","collaborators_url":"https://api.github.com/repos/tarinisunil/Get_Better_at_CP_in_2_Months/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/tarinisunil/Get_Better_at_CP_in_2_Months/teams","hooks_url":"https://api.github.com/repos/tarinisunil/Get_Better_at_CP_in_2_Months/hooks","issue_events_url":"https://api.github.com/repos/tarinisunil/Get_Better_at_CP_in_2_Months/issues/events{/number}","events_url":"https://api.github.com/repos/tarinisunil/Get_Better_at_CP_in_2_Months/events","assignees_url":"https://api.github.com/repos/tarinisunil/Get_Better_at_CP_in_2_Months/assignees{/user}","branches_url":"https://api.github.com/repos/tarinisunil/Get_Better_at_CP_in_2_Months/branches{/branch}","tags_url":"https://api.github.com/repos/tarinisunil/Get_Better_at_CP_in_2_Months/tags","blobs_url":"https://api.github.com/repos/tarinisunil/Get_Better_at_CP_in_2_Months/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/tarinisunil/Get_Better_at_CP_in_2_Months/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/tarinisunil/Get_Better_at_CP_in_2_Months/git/refs{/sha}","trees_url":"https://api.github.com/repos/tarinisunil/Get_Better_at_CP_in_2_Months/git/trees{/sha}","statuses_url":"https://api.github.com/repos/tarinisunil/Get_Better_at_CP_in_2_Months/statuses/{sha}","languages_url":"https://api.github.com/repos/tarinisunil/Get_Better_at_CP_in_2_Months/languages","stargazers_url":"https://api.github.com/repos/tarinisunil/Get_Better_at_CP_in_2_Months/stargazers","contributors_url":"https://api.github.com/repos/tarinisunil/Get_Better_at_CP_in_2_Months/contributors","subscribers_url":"https://api.github.com/repos/tarinisunil/Get_Better_at_CP_in_2_Months/subscribers","subscription_url":"https://api.github.com/repos/tarinisunil/Get_Better_at_CP_in_2_Months/subscription","commits_url":"https://api.github.com/repos/tarinisunil/Get_Better_at_CP_in_2_Months/commits{/sha}","git_commits_url":"https://api.github.com/repos/tarinisunil/Get_Better_at_CP_in_2_Months/git/commits{/sha}","comments_url":"https://api.github.com/repos/tarinisunil/Get_Better_at_CP_in_2_Months/comments{/number}","issue_comment_url":"https://api.github.com/repos/tarinisunil/Get_Better_at_CP_in_2_Months/issues/comments{/number}","contents_url":"https://api.github.com/repos/tarinisunil/Get_Better_at_CP_in_2_Months/contents/{+path}","compare_url":"https://api.github.com/repos/tarinisunil/Get_Better_at_CP_in_2_Months/compare/{base}...{head}","merges_url":"https://api.github.com/repos/tarinisunil/Get_Better_at_CP_in_2_Months/merges","archive_url":"https://api.github.com/repos/tarinisunil/Get_Better_at_CP_in_2_Months/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/tarinisunil/Get_Better_at_CP_in_2_Months/downloads","issues_url":"https://api.github.com/repos/tarinisunil/Get_Better_at_CP_in_2_Months/issues{/number}","pulls_url":"https://api.github.com/repos/tarinisunil/Get_Better_at_CP_in_2_Months/pulls{/number}","milestones_url":"https://api.github.com/repos/tarinisunil/Get_Better_at_CP_in_2_Months/milestones{/number}","notifications_url":"https://api.github.com/repos/tarinisunil/Get_Better_at_CP_in_2_Months/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/tarinisunil/Get_Better_at_CP_in_2_Months/labels{/name}","releases_url":"https://api.github.com/repos/tarinisunil/Get_Better_at_CP_in_2_Months/releases{/id}","deployments_url":"https://api.github.com/repos/tarinisunil/Get_Better_at_CP_in_2_Months/deployments","created_at":"2024-01-01T14:59:39Z","updated_at":"2024-01-01T14:59:39Z","pushed_at":"2023-08-27T10:12:01Z","git_url":"git://github.com/tarinisunil/Get_Better_at_CP_in_2_Months.git","ssh_url":"git@github.com:tarinisunil/Get_Better_at_CP_in_2_Months.git","clone_url":"https://github.com/tarinisunil/Get_Better_at_CP_in_2_Months.git","svn_url":"https://github.com/tarinisunil/Get_Better_at_CP_in_2_Months","homepage":"","size":53,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"has_discussions":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":0,"license":null,"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":[],"visibility":"public","forks":0,"open_issues":0,"watchers":0,"default_branch":"main","public":true}},"public":true,"created_at":"2024-01-01T15:00:01Z"}
+{"id":"34502641452","type":"ForkEvent","actor":{"id":12108942,"login":"jackblack369","display_login":"jackblack369","gravatar_id":"","url":"https://api.github.com/users/jackblack369","avatar_url":"https://avatars.githubusercontent.com/u/12108942?"},"repo":{"id":633262635,"name":"danswer-ai/danswer","url":"https://api.github.com/repos/danswer-ai/danswer"},"payload":{"forkee":{"id":737802480,"node_id":"R_kgDOK_n48A","name":"danswer","full_name":"jackblack369/danswer","private":false,"owner":{"login":"jackblack369","id":12108942,"node_id":"MDQ6VXNlcjEyMTA4OTQy","avatar_url":"https://avatars.githubusercontent.com/u/12108942?v=4","gravatar_id":"","url":"https://api.github.com/users/jackblack369","html_url":"https://github.com/jackblack369","followers_url":"https://api.github.com/users/jackblack369/followers","following_url":"https://api.github.com/users/jackblack369/following{/other_user}","gists_url":"https://api.github.com/users/jackblack369/gists{/gist_id}","starred_url":"https://api.github.com/users/jackblack369/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jackblack369/subscriptions","organizations_url":"https://api.github.com/users/jackblack369/orgs","repos_url":"https://api.github.com/users/jackblack369/repos","events_url":"https://api.github.com/users/jackblack369/events{/privacy}","received_events_url":"https://api.github.com/users/jackblack369/received_events","type":"User","site_admin":false},"html_url":"https://github.com/jackblack369/danswer","description":"Ask Questions in natural language and get Answers backed by private sources. Connects to tools like Slack, GitHub, Confluence, etc.","fork":true,"url":"https://api.github.com/repos/jackblack369/danswer","forks_url":"https://api.github.com/repos/jackblack369/danswer/forks","keys_url":"https://api.github.com/repos/jackblack369/danswer/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jackblack369/danswer/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jackblack369/danswer/teams","hooks_url":"https://api.github.com/repos/jackblack369/danswer/hooks","issue_events_url":"https://api.github.com/repos/jackblack369/danswer/issues/events{/number}","events_url":"https://api.github.com/repos/jackblack369/danswer/events","assignees_url":"https://api.github.com/repos/jackblack369/danswer/assignees{/user}","branches_url":"https://api.github.com/repos/jackblack369/danswer/branches{/branch}","tags_url":"https://api.github.com/repos/jackblack369/danswer/tags","blobs_url":"https://api.github.com/repos/jackblack369/danswer/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jackblack369/danswer/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jackblack369/danswer/git/refs{/sha}","trees_url":"https://api.github.com/repos/jackblack369/danswer/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jackblack369/danswer/statuses/{sha}","languages_url":"https://api.github.com/repos/jackblack369/danswer/languages","stargazers_url":"https://api.github.com/repos/jackblack369/danswer/stargazers","contributors_url":"https://api.github.com/repos/jackblack369/danswer/contributors","subscribers_url":"https://api.github.com/repos/jackblack369/danswer/subscribers","subscription_url":"https://api.github.com/repos/jackblack369/danswer/subscription","commits_url":"https://api.github.com/repos/jackblack369/danswer/commits{/sha}","git_commits_url":"https://api.github.com/repos/jackblack369/danswer/git/commits{/sha}","comments_url":"https://api.github.com/repos/jackblack369/danswer/comments{/number}","issue_comment_url":"https://api.github.com/repos/jackblack369/danswer/issues/comments{/number}","contents_url":"https://api.github.com/repos/jackblack369/danswer/contents/{+path}","compare_url":"https://api.github.com/repos/jackblack369/danswer/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jackblack369/danswer/merges","archive_url":"https://api.github.com/repos/jackblack369/danswer/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jackblack369/danswer/downloads","issues_url":"https://api.github.com/repos/jackblack369/danswer/issues{/number}","pulls_url":"https://api.github.com/repos/jackblack369/danswer/pulls{/number}","milestones_url":"https://api.github.com/repos/jackblack369/danswer/milestones{/number}","notifications_url":"https://api.github.com/repos/jackblack369/danswer/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jackblack369/danswer/labels{/name}","releases_url":"https://api.github.com/repos/jackblack369/danswer/releases{/id}","deployments_url":"https://api.github.com/repos/jackblack369/danswer/deployments","created_at":"2024-01-01T14:59:37Z","updated_at":"2024-01-01T14:59:37Z","pushed_at":"2024-01-01T05:55:59Z","git_url":"git://github.com/jackblack369/danswer.git","ssh_url":"git@github.com:jackblack369/danswer.git","clone_url":"https://github.com/jackblack369/danswer.git","svn_url":"https://github.com/jackblack369/danswer","homepage":"https://docs.danswer.dev/","size":5028,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":0,"license":null,"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":[],"visibility":"public","forks":0,"open_issues":0,"watchers":0,"default_branch":"main","public":true}},"public":true,"created_at":"2024-01-01T15:00:01Z","org":{"id":131946000,"login":"danswer-ai","gravatar_id":"","url":"https://api.github.com/orgs/danswer-ai","avatar_url":"https://avatars.githubusercontent.com/u/131946000?"}}
+{"id":"34502641453","type":"ForkEvent","actor":{"id":21022925,"login":"vineetp6","display_login":"vineetp6","gravatar_id":"","url":"https://api.github.com/users/vineetp6","avatar_url":"https://avatars.githubusercontent.com/u/21022925?"},"repo":{"id":1692604,"name":"jiaaro/pydub","url":"https://api.github.com/repos/jiaaro/pydub"},"payload":{"forkee":{"id":737802477,"node_id":"R_kgDOK_n47Q","name":"pydub","full_name":"vineetp6/pydub","private":false,"owner":{"login":"vineetp6","id":21022925,"node_id":"MDQ6VXNlcjIxMDIyOTI1","avatar_url":"https://avatars.githubusercontent.com/u/21022925?v=4","gravatar_id":"","url":"https://api.github.com/users/vineetp6","html_url":"https://github.com/vineetp6","followers_url":"https://api.github.com/users/vineetp6/followers","following_url":"https://api.github.com/users/vineetp6/following{/other_user}","gists_url":"https://api.github.com/users/vineetp6/gists{/gist_id}","starred_url":"https://api.github.com/users/vineetp6/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/vineetp6/subscriptions","organizations_url":"https://api.github.com/users/vineetp6/orgs","repos_url":"https://api.github.com/users/vineetp6/repos","events_url":"https://api.github.com/users/vineetp6/events{/privacy}","received_events_url":"https://api.github.com/users/vineetp6/received_events","type":"User","site_admin":false},"html_url":"https://github.com/vineetp6/pydub","description":"Manipulate audio with a simple and easy high level interface","fork":true,"url":"https://api.github.com/repos/vineetp6/pydub","forks_url":"https://api.github.com/repos/vineetp6/pydub/forks","keys_url":"https://api.github.com/repos/vineetp6/pydub/keys{/key_id}","collaborators_url":"https://api.github.com/repos/vineetp6/pydub/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/vineetp6/pydub/teams","hooks_url":"https://api.github.com/repos/vineetp6/pydub/hooks","issue_events_url":"https://api.github.com/repos/vineetp6/pydub/issues/events{/number}","events_url":"https://api.github.com/repos/vineetp6/pydub/events","assignees_url":"https://api.github.com/repos/vineetp6/pydub/assignees{/user}","branches_url":"https://api.github.com/repos/vineetp6/pydub/branches{/branch}","tags_url":"https://api.github.com/repos/vineetp6/pydub/tags","blobs_url":"https://api.github.com/repos/vineetp6/pydub/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/vineetp6/pydub/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/vineetp6/pydub/git/refs{/sha}","trees_url":"https://api.github.com/repos/vineetp6/pydub/git/trees{/sha}","statuses_url":"https://api.github.com/repos/vineetp6/pydub/statuses/{sha}","languages_url":"https://api.github.com/repos/vineetp6/pydub/languages","stargazers_url":"https://api.github.com/repos/vineetp6/pydub/stargazers","contributors_url":"https://api.github.com/repos/vineetp6/pydub/contributors","subscribers_url":"https://api.github.com/repos/vineetp6/pydub/subscribers","subscription_url":"https://api.github.com/repos/vineetp6/pydub/subscription","commits_url":"https://api.github.com/repos/vineetp6/pydub/commits{/sha}","git_commits_url":"https://api.github.com/repos/vineetp6/pydub/git/commits{/sha}","comments_url":"https://api.github.com/repos/vineetp6/pydub/comments{/number}","issue_comment_url":"https://api.github.com/repos/vineetp6/pydub/issues/comments{/number}","contents_url":"https://api.github.com/repos/vineetp6/pydub/contents/{+path}","compare_url":"https://api.github.com/repos/vineetp6/pydub/compare/{base}...{head}","merges_url":"https://api.github.com/repos/vineetp6/pydub/merges","archive_url":"https://api.github.com/repos/vineetp6/pydub/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/vineetp6/pydub/downloads","issues_url":"https://api.github.com/repos/vineetp6/pydub/issues{/number}","pulls_url":"https://api.github.com/repos/vineetp6/pydub/pulls{/number}","milestones_url":"https://api.github.com/repos/vineetp6/pydub/milestones{/number}","notifications_url":"https://api.github.com/repos/vineetp6/pydub/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/vineetp6/pydub/labels{/name}","releases_url":"https://api.github.com/repos/vineetp6/pydub/releases{/id}","deployments_url":"https://api.github.com/repos/vineetp6/pydub/deployments","created_at":"2024-01-01T14:59:37Z","updated_at":"2024-01-01T14:59:37Z","pushed_at":"2023-12-28T21:58:28Z","git_url":"git://github.com/vineetp6/pydub.git","ssh_url":"git@github.com:vineetp6/pydub.git","clone_url":"https://github.com/vineetp6/pydub.git","svn_url":"https://github.com/vineetp6/pydub","homepage":"http://pydub.com","size":36944,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"has_discussions":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":0,"license":null,"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":[],"visibility":"public","forks":0,"open_issues":0,"watchers":0,"default_branch":"main","public":true}},"public":true,"created_at":"2024-01-01T15:00:01Z"}
+{"id":"34502641458","type":"PushEvent","actor":{"id":24788447,"login":"lhduc94","display_login":"lhduc94","gravatar_id":"","url":"https://api.github.com/users/lhduc94","avatar_url":"https://avatars.githubusercontent.com/u/24788447?"},"repo":{"id":367932994,"name":"lhduc94/kungfupandas","url":"https://api.github.com/repos/lhduc94/kungfupandas"},"payload":{"repository_id":367932994,"push_id":16466254433,"size":1,"distinct_size":1,"ref":"refs/heads/master","head":"b7897bd342e45af4ad6b526771d3d440ccf461bb","before":"84bc7606bdcd827aab72d2ce3e1c565d9638a218","commits":[{"sha":"b7897bd342e45af4ad6b526771d3d440ccf461bb","author":{"email":"lhduc94","name":"unknown"},"message":"push book","distinct":true,"url":"https://api.github.com/repos/lhduc94/kungfupandas/commits/b7897bd342e45af4ad6b526771d3d440ccf461bb"}]},"public":true,"created_at":"2024-01-01T15:00:01Z"}
+{"id":"34502641461","type":"PushEvent","actor":{"id":103212375,"login":"ranadebsaha","display_login":"ranadebsaha","gravatar_id":"","url":"https://api.github.com/users/ranadebsaha","avatar_url":"https://avatars.githubusercontent.com/u/103212375?"},"repo":{"id":726471215,"name":"ranadebsaha/DSA","url":"https://api.github.com/repos/ranadebsaha/DSA"},"payload":{"repository_id":726471215,"push_id":16466254533,"size":1,"distinct_size":1,"ref":"refs/heads/main","head":"b057143916ff05adf28db3c2f9c7d7abf85508cb","before":"7897a7fe7c72b5fa642cb1a7e6f67019129a6bdc","commits":[{"sha":"b057143916ff05adf28db3c2f9c7d7abf85508cb","author":{"email":"103212375+ranadebsaha@users.noreply.github.com","name":"Ranadeb Saha"},"message":"Add files via upload","distinct":true,"url":"https://api.github.com/repos/ranadebsaha/DSA/commits/b057143916ff05adf28db3c2f9c7d7abf85508cb"}]},"public":true,"created_at":"2024-01-01T15:00:01Z"}
+{"id":"34502641462","type":"PushEvent","actor":{"id":1428593,"login":"harmanpa","display_login":"harmanpa","gravatar_id":"","url":"https://api.github.com/users/harmanpa","avatar_url":"https://avatars.githubusercontent.com/u/1428593?"},"repo":{"id":202145289,"name":"harmanpa/jgeom","url":"https://api.github.com/repos/harmanpa/jgeom"},"payload":{"repository_id":202145289,"push_id":16466254498,"size":1,"distinct_size":1,"ref":"refs/heads/master","head":"21c9e75040b32283b10ab6139346c973cdc7e5ac","before":"84eebd2b4d9cb167d806ce1843ab8e262ac47aad","commits":[{"sha":"21c9e75040b32283b10ab6139346c973cdc7e5ac","author":{"email":"peter.harman@deltatheta.com","name":"Peter Harman"},"message":"Add ability for STL and DXF parsers to read from InputStream rather than just files","distinct":true,"url":"https://api.github.com/repos/harmanpa/jgeom/commits/21c9e75040b32283b10ab6139346c973cdc7e5ac"}]},"public":true,"created_at":"2024-01-01T15:00:01Z"}
+{"id":"34502641465","type":"PushEvent","actor":{"id":155086649,"login":"dim12512a","display_login":"dim12512a","gravatar_id":"","url":"https://api.github.com/users/dim12512a","avatar_url":"https://avatars.githubusercontent.com/u/155086649?"},"repo":{"id":737073774,"name":"dim12512a/Repo6","url":"https://api.github.com/repos/dim12512a/Repo6"},"payload":{"repository_id":737073774,"push_id":16466254578,"size":1,"distinct_size":1,"ref":"refs/heads/main","head":"858f604c8d47ebdd33ab37204d01d6416588bef6","before":"ecca430b2e030a19a8803cfed3df318521a68509","commits":[{"sha":"858f604c8d47ebdd33ab37204d01d6416588bef6","author":{"email":"you@example.com","name":"Your Name"},"message":"Empty Commit","distinct":true,"url":"https://api.github.com/repos/dim12512a/Repo6/commits/858f604c8d47ebdd33ab37204d01d6416588bef6"}]},"public":true,"created_at":"2024-01-01T15:00:01Z"}
+{"id":"34502641467","type":"PushEvent","actor":{"id":148675473,"login":"namson26","display_login":"namson26","gravatar_id":"","url":"https://api.github.com/users/namson26","avatar_url":"https://avatars.githubusercontent.com/u/148675473?"},"repo":{"id":736165831,"name":"namson26/Technology-Information-System","url":"https://api.github.com/repos/namson26/Technology-Information-System"},"payload":{"repository_id":736165831,"push_id":16466254596,"size":1,"distinct_size":1,"ref":"refs/heads/main","head":"55df0dc4a01496922ab060c9c1f323caf2078312","before":"cef0f3fc0d6147fa852cc5eabd377b19be600ef8","commits":[{"sha":"55df0dc4a01496922ab060c9c1f323caf2078312","author":{"email":"148675473+namson26@users.noreply.github.com","name":"muhammad naim bin abdullah"},"message":" industry talk PPG and Habib","distinct":true,"url":"https://api.github.com/repos/namson26/Technology-Information-System/commits/55df0dc4a01496922ab060c9c1f323caf2078312"}]},"public":true,"created_at":"2024-01-01T15:00:01Z"}
+{"id":"34502641469","type":"PushEvent","actor":{"id":153940760,"login":"mdmaid69","display_login":"mdmaid69","gravatar_id":"","url":"https://api.github.com/users/mdmaid69","avatar_url":"https://avatars.githubusercontent.com/u/153940760?"},"repo":{"id":732717980,"name":"mdmaid69/reimagined-giggle","url":"https://api.github.com/repos/mdmaid69/reimagined-giggle"},"payload":{"repository_id":732717980,"push_id":16466254352,"size":1,"distinct_size":1,"ref":"refs/heads/master","head":"dc8177f8b942a863ea4c1fb46f3cfcf773880d1b","before":"3269356e1c35a404aefeb6f4a88b0f9c46d71176","commits":[{"sha":"dc8177f8b942a863ea4c1fb46f3cfcf773880d1b","author":{"email":"robot@alexsyw.me","name":"mdmaid69"},"message":"last recover hurt off claim","distinct":true,"url":"https://api.github.com/repos/mdmaid69/reimagined-giggle/commits/dc8177f8b942a863ea4c1fb46f3cfcf773880d1b"}]},"public":true,"created_at":"2024-01-01T15:00:01Z"}
+{"id":"34502641472","type":"PushEvent","actor":{"id":155086649,"login":"dim12512a","display_login":"dim12512a","gravatar_id":"","url":"https://api.github.com/users/dim12512a","avatar_url":"https://avatars.githubusercontent.com/u/155086649?"},"repo":{"id":737073790,"name":"dim12512a/Repo7","url":"https://api.github.com/repos/dim12512a/Repo7"},"payload":{"repository_id":737073790,"push_id":16466254457,"size":1,"distinct_size":1,"ref":"refs/heads/main","head":"178ec29423bffaa2e5a60d52bcce0d7aa1ba51eb","before":"bf9e72eaa83e2fe0606d525c6bc9a14cd13b66b6","commits":[{"sha":"178ec29423bffaa2e5a60d52bcce0d7aa1ba51eb","author":{"email":"you@example.com","name":"Your Name"},"message":"Empty Commit","distinct":true,"url":"https://api.github.com/repos/dim12512a/Repo7/commits/178ec29423bffaa2e5a60d52bcce0d7aa1ba51eb"}]},"public":true,"created_at":"2024-01-01T15:00:01Z"}
+{"id":"34502641475","type":"PullRequestEvent","actor":{"id":42301553,"login":"tomgransden","display_login":"tomgransden","gravatar_id":"","url":"https://api.github.com/users/tomgransden","avatar_url":"https://avatars.githubusercontent.com/u/42301553?"},"repo":{"id":584227840,"name":"tomgransden/MyTummyHurtsApp","url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp"},"payload":{"action":"closed","number":26,"pull_request":{"url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/pulls/26","id":1661122882,"node_id":"PR_kwDOItKcAM5jArlC","html_url":"https://github.com/tomgransden/MyTummyHurtsApp/pull/26","diff_url":"https://github.com/tomgransden/MyTummyHurtsApp/pull/26.diff","patch_url":"https://github.com/tomgransden/MyTummyHurtsApp/pull/26.patch","issue_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/issues/26","number":26,"state":"closed","locked":false,"title":"Dev/tg/add firestore","user":{"login":"tomgransden","id":42301553,"node_id":"MDQ6VXNlcjQyMzAxNTUz","avatar_url":"https://avatars.githubusercontent.com/u/42301553?v=4","gravatar_id":"","url":"https://api.github.com/users/tomgransden","html_url":"https://github.com/tomgransden","followers_url":"https://api.github.com/users/tomgransden/followers","following_url":"https://api.github.com/users/tomgransden/following{/other_user}","gists_url":"https://api.github.com/users/tomgransden/gists{/gist_id}","starred_url":"https://api.github.com/users/tomgransden/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tomgransden/subscriptions","organizations_url":"https://api.github.com/users/tomgransden/orgs","repos_url":"https://api.github.com/users/tomgransden/repos","events_url":"https://api.github.com/users/tomgransden/events{/privacy}","received_events_url":"https://api.github.com/users/tomgransden/received_events","type":"User","site_admin":false},"body":null,"created_at":"2024-01-01T14:57:47Z","updated_at":"2024-01-01T14:59:42Z","closed_at":"2024-01-01T14:59:40Z","merged_at":"2024-01-01T14:59:40Z","merge_commit_sha":"9ab8219d9a0dd1ae20b2df08c2ccd8ac3476ede0","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/pulls/26/commits","review_comments_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/pulls/26/comments","review_comment_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/pulls/comments{/number}","comments_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/issues/26/comments","statuses_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/statuses/5fcc5cf25fab3453c37bcdefb7d6738cd19984f1","head":{"label":"tomgransden:dev/tg/add-firestore","ref":"dev/tg/add-firestore","sha":"5fcc5cf25fab3453c37bcdefb7d6738cd19984f1","user":{"login":"tomgransden","id":42301553,"node_id":"MDQ6VXNlcjQyMzAxNTUz","avatar_url":"https://avatars.githubusercontent.com/u/42301553?v=4","gravatar_id":"","url":"https://api.github.com/users/tomgransden","html_url":"https://github.com/tomgransden","followers_url":"https://api.github.com/users/tomgransden/followers","following_url":"https://api.github.com/users/tomgransden/following{/other_user}","gists_url":"https://api.github.com/users/tomgransden/gists{/gist_id}","starred_url":"https://api.github.com/users/tomgransden/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tomgransden/subscriptions","organizations_url":"https://api.github.com/users/tomgransden/orgs","repos_url":"https://api.github.com/users/tomgransden/repos","events_url":"https://api.github.com/users/tomgransden/events{/privacy}","received_events_url":"https://api.github.com/users/tomgransden/received_events","type":"User","site_admin":false},"repo":{"id":584227840,"node_id":"R_kgDOItKcAA","name":"MyTummyHurtsApp","full_name":"tomgransden/MyTummyHurtsApp","private":false,"owner":{"login":"tomgransden","id":42301553,"node_id":"MDQ6VXNlcjQyMzAxNTUz","avatar_url":"https://avatars.githubusercontent.com/u/42301553?v=4","gravatar_id":"","url":"https://api.github.com/users/tomgransden","html_url":"https://github.com/tomgransden","followers_url":"https://api.github.com/users/tomgransden/followers","following_url":"https://api.github.com/users/tomgransden/following{/other_user}","gists_url":"https://api.github.com/users/tomgransden/gists{/gist_id}","starred_url":"https://api.github.com/users/tomgransden/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tomgransden/subscriptions","organizations_url":"https://api.github.com/users/tomgransden/orgs","repos_url":"https://api.github.com/users/tomgransden/repos","events_url":"https://api.github.com/users/tomgransden/events{/privacy}","received_events_url":"https://api.github.com/users/tomgransden/received_events","type":"User","site_admin":false},"html_url":"https://github.com/tomgransden/MyTummyHurtsApp","description":null,"fork":false,"url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp","forks_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/forks","keys_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/keys{/key_id}","collaborators_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/teams","hooks_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/hooks","issue_events_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/issues/events{/number}","events_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/events","assignees_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/assignees{/user}","branches_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/branches{/branch}","tags_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/tags","blobs_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/git/refs{/sha}","trees_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/git/trees{/sha}","statuses_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/statuses/{sha}","languages_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/languages","stargazers_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/stargazers","contributors_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/contributors","subscribers_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/subscribers","subscription_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/subscription","commits_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/commits{/sha}","git_commits_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/git/commits{/sha}","comments_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/comments{/number}","issue_comment_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/issues/comments{/number}","contents_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/contents/{+path}","compare_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/compare/{base}...{head}","merges_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/merges","archive_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/downloads","issues_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/issues{/number}","pulls_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/pulls{/number}","milestones_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/milestones{/number}","notifications_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/labels{/name}","releases_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/releases{/id}","deployments_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/deployments","created_at":"2023-01-01T23:02:13Z","updated_at":"2023-12-31T22:21:32Z","pushed_at":"2024-01-01T14:59:40Z","git_url":"git://github.com/tomgransden/MyTummyHurtsApp.git","ssh_url":"git@github.com:tomgransden/MyTummyHurtsApp.git","clone_url":"https://github.com/tomgransden/MyTummyHurtsApp.git","svn_url":"https://github.com/tomgransden/MyTummyHurtsApp","homepage":null,"size":1291,"stargazers_count":0,"watchers_count":0,"language":"TypeScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"has_discussions":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":5,"license":null,"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":[],"visibility":"public","forks":0,"open_issues":5,"watchers":0,"default_branch":"main"}},"base":{"label":"tomgransden:main","ref":"main","sha":"1985eb5eafef6430a506c07e4eabf68eb85fd759","user":{"login":"tomgransden","id":42301553,"node_id":"MDQ6VXNlcjQyMzAxNTUz","avatar_url":"https://avatars.githubusercontent.com/u/42301553?v=4","gravatar_id":"","url":"https://api.github.com/users/tomgransden","html_url":"https://github.com/tomgransden","followers_url":"https://api.github.com/users/tomgransden/followers","following_url":"https://api.github.com/users/tomgransden/following{/other_user}","gists_url":"https://api.github.com/users/tomgransden/gists{/gist_id}","starred_url":"https://api.github.com/users/tomgransden/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tomgransden/subscriptions","organizations_url":"https://api.github.com/users/tomgransden/orgs","repos_url":"https://api.github.com/users/tomgransden/repos","events_url":"https://api.github.com/users/tomgransden/events{/privacy}","received_events_url":"https://api.github.com/users/tomgransden/received_events","type":"User","site_admin":false},"repo":{"id":584227840,"node_id":"R_kgDOItKcAA","name":"MyTummyHurtsApp","full_name":"tomgransden/MyTummyHurtsApp","private":false,"owner":{"login":"tomgransden","id":42301553,"node_id":"MDQ6VXNlcjQyMzAxNTUz","avatar_url":"https://avatars.githubusercontent.com/u/42301553?v=4","gravatar_id":"","url":"https://api.github.com/users/tomgransden","html_url":"https://github.com/tomgransden","followers_url":"https://api.github.com/users/tomgransden/followers","following_url":"https://api.github.com/users/tomgransden/following{/other_user}","gists_url":"https://api.github.com/users/tomgransden/gists{/gist_id}","starred_url":"https://api.github.com/users/tomgransden/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tomgransden/subscriptions","organizations_url":"https://api.github.com/users/tomgransden/orgs","repos_url":"https://api.github.com/users/tomgransden/repos","events_url":"https://api.github.com/users/tomgransden/events{/privacy}","received_events_url":"https://api.github.com/users/tomgransden/received_events","type":"User","site_admin":false},"html_url":"https://github.com/tomgransden/MyTummyHurtsApp","description":null,"fork":false,"url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp","forks_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/forks","keys_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/keys{/key_id}","collaborators_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/teams","hooks_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/hooks","issue_events_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/issues/events{/number}","events_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/events","assignees_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/assignees{/user}","branches_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/branches{/branch}","tags_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/tags","blobs_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/git/refs{/sha}","trees_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/git/trees{/sha}","statuses_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/statuses/{sha}","languages_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/languages","stargazers_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/stargazers","contributors_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/contributors","subscribers_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/subscribers","subscription_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/subscription","commits_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/commits{/sha}","git_commits_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/git/commits{/sha}","comments_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/comments{/number}","issue_comment_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/issues/comments{/number}","contents_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/contents/{+path}","compare_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/compare/{base}...{head}","merges_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/merges","archive_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/downloads","issues_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/issues{/number}","pulls_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/pulls{/number}","milestones_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/milestones{/number}","notifications_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/labels{/name}","releases_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/releases{/id}","deployments_url":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/deployments","created_at":"2023-01-01T23:02:13Z","updated_at":"2023-12-31T22:21:32Z","pushed_at":"2024-01-01T14:59:40Z","git_url":"git://github.com/tomgransden/MyTummyHurtsApp.git","ssh_url":"git@github.com:tomgransden/MyTummyHurtsApp.git","clone_url":"https://github.com/tomgransden/MyTummyHurtsApp.git","svn_url":"https://github.com/tomgransden/MyTummyHurtsApp","homepage":null,"size":1291,"stargazers_count":0,"watchers_count":0,"language":"TypeScript","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"has_discussions":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":5,"license":null,"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":[],"visibility":"public","forks":0,"open_issues":5,"watchers":0,"default_branch":"main"}},"_links":{"self":{"href":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/pulls/26"},"html":{"href":"https://github.com/tomgransden/MyTummyHurtsApp/pull/26"},"issue":{"href":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/issues/26"},"comments":{"href":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/issues/26/comments"},"review_comments":{"href":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/pulls/26/comments"},"review_comment":{"href":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/pulls/26/commits"},"statuses":{"href":"https://api.github.com/repos/tomgransden/MyTummyHurtsApp/statuses/5fcc5cf25fab3453c37bcdefb7d6738cd19984f1"}},"author_association":"OWNER","auto_merge":null,"active_lock_reason":null,"merged":true,"mergeable":null,"rebaseable":null,"mergeable_state":"unknown","merged_by":{"login":"tomgransden","id":42301553,"node_id":"MDQ6VXNlcjQyMzAxNTUz","avatar_url":"https://avatars.githubusercontent.com/u/42301553?v=4","gravatar_id":"","url":"https://api.github.com/users/tomgransden","html_url":"https://github.com/tomgransden","followers_url":"https://api.github.com/users/tomgransden/followers","following_url":"https://api.github.com/users/tomgransden/following{/other_user}","gists_url":"https://api.github.com/users/tomgransden/gists{/gist_id}","starred_url":"https://api.github.com/users/tomgransden/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tomgransden/subscriptions","organizations_url":"https://api.github.com/users/tomgransden/orgs","repos_url":"https://api.github.com/users/tomgransden/repos","events_url":"https://api.github.com/users/tomgransden/events{/privacy}","received_events_url":"https://api.github.com/users/tomgransden/received_events","type":"User","site_admin":false},"comments":0,"review_comments":0,"maintainer_can_modify":false,"commits":11,"additions":593,"deletions":90,"changed_files":21}},"public":true,"created_at":"2024-01-01T15:00:01Z"}
+{"id":"34502641477","type":"PushEvent","actor":{"id":155086649,"login":"dim12512a","display_login":"dim12512a","gravatar_id":"","url":"https://api.github.com/users/dim12512a","avatar_url":"https://avatars.githubusercontent.com/u/155086649?"},"repo":{"id":737073790,"name":"dim12512a/Repo7","url":"https://api.github.com/repos/dim12512a/Repo7"},"payload":{"repository_id":737073790,"push_id":16466254565,"size":1,"distinct_size":1,"ref":"refs/heads/main","head":"821c6272cf3fcdabbc23684a542e25c1a78a1fd9","before":"178ec29423bffaa2e5a60d52bcce0d7aa1ba51eb","commits":[{"sha":"821c6272cf3fcdabbc23684a542e25c1a78a1fd9","author":{"email":"you@example.com","name":"Your Name"},"message":"Empty Commit","distinct":true,"url":"https://api.github.com/repos/dim12512a/Repo7/commits/821c6272cf3fcdabbc23684a542e25c1a78a1fd9"}]},"public":true,"created_at":"2024-01-01T15:00:01Z"}
+{"id":"34502641480","type":"PushEvent","actor":{"id":93431609,"login":"vedant-z","display_login":"vedant-z","gravatar_id":"","url":"https://api.github.com/users/vedant-z","avatar_url":"https://avatars.githubusercontent.com/u/93431609?"},"repo":{"id":737800788,"name":"Exp-Intro-to-GitHub-Flow-Cohort-1/series-intro-to-github-flow-vedant-z","url":"https://api.github.com/repos/Exp-Intro-to-GitHub-Flow-Cohort-1/series-intro-to-github-flow-vedant-z"},"payload":{"repository_id":737800788,"push_id":16466256123,"size":5,"distinct_size":1,"ref":"refs/heads/main","head":"f2071eee1b5250f8a5d801eb2bb25c06c15169d6","before":"2bf3a7c438e51afc4a4170fa53e029c576324c47","commits":[{"sha":"1df8ecba765e3cc1c887859d0a8f9b8cfb439c47","author":{"email":"github-actions@github.com","name":"github-actions"},"message":"Update to 2 in STEP and README.md","distinct":false,"url":"https://api.github.com/repos/Exp-Intro-to-GitHub-Flow-Cohort-1/series-intro-to-github-flow-vedant-z/commits/1df8ecba765e3cc1c887859d0a8f9b8cfb439c47"},{"sha":"4c44dd3b65a2bdd00c7f074e429721595bba6058","author":{"email":"vedantborkar1234@gmail.com","name":"Vedant Borkar"},"message":"Create PROFILE.md","distinct":false,"url":"https://api.github.com/repos/Exp-Intro-to-GitHub-Flow-Cohort-1/series-intro-to-github-flow-vedant-z/commits/4c44dd3b65a2bdd00c7f074e429721595bba6058"},{"sha":"2129e5f0f9e75975d891710c6ac9c8dc3d53d048","author":{"email":"github-actions@github.com","name":"github-actions"},"message":"Update to 3 in STEP and README.md","distinct":false,"url":"https://api.github.com/repos/Exp-Intro-to-GitHub-Flow-Cohort-1/series-intro-to-github-flow-vedant-z/commits/2129e5f0f9e75975d891710c6ac9c8dc3d53d048"},{"sha":"b53ab157f70194441d2b797723399a10bc38b75f","author":{"email":"github-actions@github.com","name":"github-actions"},"message":"Update to 4 in STEP and README.md","distinct":false,"url":"https://api.github.com/repos/Exp-Intro-to-GitHub-Flow-Cohort-1/series-intro-to-github-flow-vedant-z/commits/b53ab157f70194441d2b797723399a10bc38b75f"},{"sha":"f2071eee1b5250f8a5d801eb2bb25c06c15169d6","author":{"email":"vedantborkar1234@gmail.com","name":"Vedant Borkar"},"message":"Merge pull request #2 from Exp-Intro-to-GitHub-Flow-Cohort-1/my-first-branch\n\nAdd my first file","distinct":true,"url":"https://api.github.com/repos/Exp-Intro-to-GitHub-Flow-Cohort-1/series-intro-to-github-flow-vedant-z/commits/f2071eee1b5250f8a5d801eb2bb25c06c15169d6"}]},"public":true,"created_at":"2024-01-01T15:00:01Z","org":{"id":141875263,"login":"Exp-Intro-to-GitHub-Flow-Cohort-1","gravatar_id":"","url":"https://api.github.com/orgs/Exp-Intro-to-GitHub-Flow-Cohort-1","avatar_url":"https://avatars.githubusercontent.com/u/141875263?"}}
+{"id":"34502641481","type":"WatchEvent","actor":{"id":91947853,"login":"morteza-rp","display_login":"morteza-rp","gravatar_id":"","url":"https://api.github.com/users/morteza-rp","avatar_url":"https://avatars.githubusercontent.com/u/91947853?"},"repo":{"id":737404380,"name":"MasoudKaviani/filoger_fanap_402","url":"https://api.github.com/repos/MasoudKaviani/filoger_fanap_402"},"payload":{"action":"started"},"public":true,"created_at":"2024-01-01T15:00:01Z"}
+{"id":"34502641484","type":"PushEvent","actor":{"id":111329684,"login":"B74LABgit","display_login":"B74LABgit","gravatar_id":"","url":"https://api.github.com/users/B74LABgit","avatar_url":"https://avatars.githubusercontent.com/u/111329684?"},"repo":{"id":728366641,"name":"B74LABgit/CAM","url":"https://api.github.com/repos/B74LABgit/CAM"},"payload":{"repository_id":728366641,"push_id":16466254422,"size":1,"distinct_size":1,"ref":"refs/heads/main","head":"213cdd16a7ab268b37069370090c7f818b1a1ce9","before":"53c681fc38cfcf6e973362bbcec3da755a552f96","commits":[{"sha":"213cdd16a7ab268b37069370090c7f818b1a1ce9","author":{"email":"111329684+B74LABgit@users.noreply.github.com","name":"B74LABgit"},"message":"committing files","distinct":true,"url":"https://api.github.com/repos/B74LABgit/CAM/commits/213cdd16a7ab268b37069370090c7f818b1a1ce9"}]},"public":true,"created_at":"2024-01-01T15:00:01Z"}
+{"id":"34502641486","type":"PushEvent","actor":{"id":17267950,"login":"sdhz151","display_login":"sdhz151","gravatar_id":"","url":"https://api.github.com/users/sdhz151","avatar_url":"https://avatars.githubusercontent.com/u/17267950?"},"repo":{"id":402983519,"name":"sdhz153/Actions-OpenWrt","url":"https://api.github.com/repos/sdhz153/Actions-OpenWrt"},"payload":{"repository_id":402983519,"push_id":16466254615,"size":0,"distinct_size":0,"ref":"refs/heads/main","head":"a3850b8414bd4b10d70e4bf19df7a058429dd24c","before":"04ef7d2e78a35a1a7db9e35d7748e13b5db739df","commits":[]},"public":true,"created_at":"2024-01-01T15:00:01Z","org":{"id":45117601,"login":"sdhz153","gravatar_id":"","url":"https://api.github.com/orgs/sdhz153","avatar_url":"https://avatars.githubusercontent.com/u/45117601?"}}
+{"id":"34502641487","type":"CreateEvent","actor":{"id":116669610,"login":"UjjawalSah","display_login":"UjjawalSah","gravatar_id":"","url":"https://api.github.com/users/UjjawalSah","avatar_url":"https://avatars.githubusercontent.com/u/116669610?"},"repo":{"id":737802490,"name":"UjjawalSah/ModernFarming","url":"https://api.github.com/repos/UjjawalSah/ModernFarming"},"payload":{"ref":null,"ref_type":"repository","master_branch":"main","description":null,"pusher_type":"user"},"public":true,"created_at":"2024-01-01T15:00:01Z"}
+{"id":"34502641494","type":"PushEvent","actor":{"id":155335754,"login":"wodcoredev","display_login":"wodcoredev","gravatar_id":"","url":"https://api.github.com/users/wodcoredev","avatar_url":"https://avatars.githubusercontent.com/u/155335754?"},"repo":{"id":737660090,"name":"wod-core/website","url":"https://api.github.com/repos/wod-core/website"},"payload":{"repository_id":737660090,"push_id":16466254518,"size":1,"distinct_size":1,"ref":"refs/heads/master","head":"8f4412316aa0f3e32080a9eeebafa92ae33b7382","before":"4fb485cdccac4dfa06fc942c1886e7a5d9a65abb","commits":[{"sha":"8f4412316aa0f3e32080a9eeebafa92ae33b7382","author":{"email":"155335754+wodcoredev@users.noreply.github.com","name":"wodcoredev"},"message":"Update index.html","distinct":true,"url":"https://api.github.com/repos/wod-core/website/commits/8f4412316aa0f3e32080a9eeebafa92ae33b7382"}]},"public":true,"created_at":"2024-01-01T15:00:01Z","org":{"id":155335799,"login":"wod-core","gravatar_id":"","url":"https://api.github.com/orgs/wod-core","avatar_url":"https://avatars.githubusercontent.com/u/155335799?"}}
+{"id":"34502641496","type":"PushEvent","actor":{"id":33451416,"login":"Vsonneveld","display_login":"Vsonneveld","gravatar_id":"","url":"https://api.github.com/users/Vsonneveld","avatar_url":"https://avatars.githubusercontent.com/u/33451416?"},"repo":{"id":625580055,"name":"Vsonneveld/foroxity-genres","url":"https://api.github.com/repos/Vsonneveld/foroxity-genres"},"payload":{"repository_id":625580055,"push_id":16466254600,"size":1,"distinct_size":1,"ref":"refs/heads/main","head":"6aed4e8eea1cca8f50d11abd15790b987d56fa6e","before":"bdab61c80f8b6acc61b6d7afab66606da4ca1db4","commits":[{"sha":"6aed4e8eea1cca8f50d11abd15790b987d56fa6e","author":{"email":"33451416+Vsonneveld@users.noreply.github.com","name":"Vsonneveld"},"message":"The genre has been updated","distinct":true,"url":"https://api.github.com/repos/Vsonneveld/foroxity-genres/commits/6aed4e8eea1cca8f50d11abd15790b987d56fa6e"}]},"public":true,"created_at":"2024-01-01T15:00:01Z"}
+{"id":"34502641499","type":"PushEvent","actor":{"id":9562747,"login":"diphons","display_login":"diphons","gravatar_id":"","url":"https://api.github.com/users/diphons","avatar_url":"https://avatars.githubusercontent.com/u/9562747?"},"repo":{"id":686583207,"name":"diphons/sdm845-419","url":"https://api.github.com/repos/diphons/sdm845-419"},"payload":{"repository_id":686583207,"push_id":16466254611,"size":1,"distinct_size":1,"ref":"refs/heads/14reb","head":"35d30e32592c4d42cc0474f78ff7ae1c16f785e8","before":"8acd58e9462aed43f2bfc53b89ccd548529ed5b1","commits":[{"sha":"35d30e32592c4d42cc0474f78ff7ae1c16f785e8","author":{"email":"emanuelghub@gmail.com","name":"EmanuelCN"},"message":"cpu_input_boost: use MI_DRM notifier","distinct":true,"url":"https://api.github.com/repos/diphons/sdm845-419/commits/35d30e32592c4d42cc0474f78ff7ae1c16f785e8"}]},"public":true,"created_at":"2024-01-01T15:00:01Z"}
+{"id":"34502641501","type":"PushEvent","actor":{"id":145037011,"login":"l1nky-1337","display_login":"l1nky-1337","gravatar_id":"","url":"https://api.github.com/users/l1nky-1337","avatar_url":"https://avatars.githubusercontent.com/u/145037011?"},"repo":{"id":694954073,"name":"l1nky-1337/TimeFn-Updated","url":"https://api.github.com/repos/l1nky-1337/TimeFn-Updated"},"payload":{"repository_id":694954073,"push_id":16466254579,"size":1,"distinct_size":1,"ref":"refs/heads/main","head":"0512d4f767310fa21c124a55c35089a7605c65c4","before":"e1ef0ee8ded49b2249861f1f3243a8f0c1ef7287","commits":[{"sha":"0512d4f767310fa21c124a55c35089a7605c65c4","author":{"email":"145037011+l1nky-1337@users.noreply.github.com","name":"l1nky"},"message":"README.md","distinct":true,"url":"https://api.github.com/repos/l1nky-1337/TimeFn-Updated/commits/0512d4f767310fa21c124a55c35089a7605c65c4"}]},"public":true,"created_at":"2024-01-01T15:00:01Z"}
+{"id":"34502641504","type":"CreateEvent","actor":{"id":16827672,"login":"luiz8910","display_login":"luiz8910","gravatar_id":"","url":"https://api.github.com/users/luiz8910","avatar_url":"https://avatars.githubusercontent.com/u/16827672?"},"repo":{"id":737802492,"name":"luiz8910/codeflix","url":"https://api.github.com/repos/luiz8910/codeflix"},"payload":{"ref":null,"ref_type":"repository","master_branch":"main","description":null,"pusher_type":"user"},"public":true,"created_at":"2024-01-01T15:00:01Z"}
+{"id":"34502641506","type":"PushEvent","actor":{"id":68462294,"login":"Owl3CM","display_login":"Owl3CM","gravatar_id":"","url":"https://api.github.com/users/Owl3CM","avatar_url":"https://avatars.githubusercontent.com/u/68462294?"},"repo":{"id":696821205,"name":"Owl3CM/Eze-Scripts","url":"https://api.github.com/repos/Owl3CM/Eze-Scripts"},"payload":{"repository_id":696821205,"push_id":16466254585,"size":2,"distinct_size":2,"ref":"refs/heads/main","head":"2d463c971fada9f12a102cb4a15b7a0ae40bae76","before":"a3236f1a3fe40fac8870d6b0354fe229646bd77b","commits":[{"sha":"8e96cfab5ed9a9cc05ab804358cf014d28a07a53","author":{"email":"saochiha@gmail.com","name":"Owl3CM"},"message":"sync","distinct":true,"url":"https://api.github.com/repos/Owl3CM/Eze-Scripts/commits/8e96cfab5ed9a9cc05ab804358cf014d28a07a53"},{"sha":"2d463c971fada9f12a102cb4a15b7a0ae40bae76","author":{"email":"saochiha@gmail.com","name":"Owl3CM"},"message":"sync","distinct":true,"url":"https://api.github.com/repos/Owl3CM/Eze-Scripts/commits/2d463c971fada9f12a102cb4a15b7a0ae40bae76"}]},"public":true,"created_at":"2024-01-01T15:00:01Z"}
+{"id":"34502641508","type":"PullRequestReviewEvent","actor":{"id":7011721,"login":"SamboyCoding","display_login":"SamboyCoding","gravatar_id":"","url":"https://api.github.com/users/SamboyCoding","avatar_url":"https://avatars.githubusercontent.com/u/7011721?"},"repo":{"id":192676329,"name":"SamboyCoding/Cpp2IL","url":"https://api.github.com/repos/SamboyCoding/Cpp2IL"},"payload":{"action":"created","review":{"id":1799820647,"node_id":"PRR_kwDOC3wB6c5rRxVn","user":{"login":"SamboyCoding","id":7011721,"node_id":"MDQ6VXNlcjcwMTE3MjE=","avatar_url":"https://avatars.githubusercontent.com/u/7011721?v=4","gravatar_id":"","url":"https://api.github.com/users/SamboyCoding","html_url":"https://github.com/SamboyCoding","followers_url":"https://api.github.com/users/SamboyCoding/followers","following_url":"https://api.github.com/users/SamboyCoding/following{/other_user}","gists_url":"https://api.github.com/users/SamboyCoding/gists{/gist_id}","starred_url":"https://api.github.com/users/SamboyCoding/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SamboyCoding/subscriptions","organizations_url":"https://api.github.com/users/SamboyCoding/orgs","repos_url":"https://api.github.com/users/SamboyCoding/repos","events_url":"https://api.github.com/users/SamboyCoding/events{/privacy}","received_events_url":"https://api.github.com/users/SamboyCoding/received_events","type":"User","site_admin":false},"body":"","commit_id":"bdb8cdc74af47455cc9c609c1135f52b97dde417","submitted_at":"2024-01-01T14:59:37Z","state":"approved","html_url":"https://github.com/SamboyCoding/Cpp2IL/pull/255#pullrequestreview-1799820647","pull_request_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/pulls/255","author_association":"OWNER","_links":{"html":{"href":"https://github.com/SamboyCoding/Cpp2IL/pull/255#pullrequestreview-1799820647"},"pull_request":{"href":"https://api.github.com/repos/SamboyCoding/Cpp2IL/pulls/255"}}},"pull_request":{"url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/pulls/255","id":1660992577,"node_id":"PR_kwDOC3wB6c5jALxB","html_url":"https://github.com/SamboyCoding/Cpp2IL/pull/255","diff_url":"https://github.com/SamboyCoding/Cpp2IL/pull/255.diff","patch_url":"https://github.com/SamboyCoding/Cpp2IL/pull/255.patch","issue_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/issues/255","number":255,"state":"closed","locked":false,"title":"Support Type Parameters in Call Analysis","user":{"login":"ds5678","id":49847914,"node_id":"MDQ6VXNlcjQ5ODQ3OTE0","avatar_url":"https://avatars.githubusercontent.com/u/49847914?v=4","gravatar_id":"","url":"https://api.github.com/users/ds5678","html_url":"https://github.com/ds5678","followers_url":"https://api.github.com/users/ds5678/followers","following_url":"https://api.github.com/users/ds5678/following{/other_user}","gists_url":"https://api.github.com/users/ds5678/gists{/gist_id}","starred_url":"https://api.github.com/users/ds5678/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ds5678/subscriptions","organizations_url":"https://api.github.com/users/ds5678/orgs","repos_url":"https://api.github.com/users/ds5678/repos","events_url":"https://api.github.com/users/ds5678/events{/privacy}","received_events_url":"https://api.github.com/users/ds5678/received_events","type":"User","site_admin":false},"body":"Resolves #176 \r\n\r\nI also have #173 implemented locally, but I figured you would want to review them separately.","created_at":"2024-01-01T10:06:38Z","updated_at":"2024-01-01T14:59:42Z","closed_at":"2024-01-01T14:59:42Z","merged_at":"2024-01-01T14:59:41Z","merge_commit_sha":"c0eccb1cf5709c2e5683f069d2bb37d3d7f5b416","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/pulls/255/commits","review_comments_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/pulls/255/comments","review_comment_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/pulls/comments{/number}","comments_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/issues/255/comments","statuses_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/statuses/bdb8cdc74af47455cc9c609c1135f52b97dde417","head":{"label":"ds5678:call-analysis-improvements","ref":"call-analysis-improvements","sha":"bdb8cdc74af47455cc9c609c1135f52b97dde417","user":{"login":"ds5678","id":49847914,"node_id":"MDQ6VXNlcjQ5ODQ3OTE0","avatar_url":"https://avatars.githubusercontent.com/u/49847914?v=4","gravatar_id":"","url":"https://api.github.com/users/ds5678","html_url":"https://github.com/ds5678","followers_url":"https://api.github.com/users/ds5678/followers","following_url":"https://api.github.com/users/ds5678/following{/other_user}","gists_url":"https://api.github.com/users/ds5678/gists{/gist_id}","starred_url":"https://api.github.com/users/ds5678/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ds5678/subscriptions","organizations_url":"https://api.github.com/users/ds5678/orgs","repos_url":"https://api.github.com/users/ds5678/repos","events_url":"https://api.github.com/users/ds5678/events{/privacy}","received_events_url":"https://api.github.com/users/ds5678/received_events","type":"User","site_admin":false},"repo":{"id":387293635,"node_id":"MDEwOlJlcG9zaXRvcnkzODcyOTM2MzU=","name":"Cpp2IL","full_name":"ds5678/Cpp2IL","private":false,"owner":{"login":"ds5678","id":49847914,"node_id":"MDQ6VXNlcjQ5ODQ3OTE0","avatar_url":"https://avatars.githubusercontent.com/u/49847914?v=4","gravatar_id":"","url":"https://api.github.com/users/ds5678","html_url":"https://github.com/ds5678","followers_url":"https://api.github.com/users/ds5678/followers","following_url":"https://api.github.com/users/ds5678/following{/other_user}","gists_url":"https://api.github.com/users/ds5678/gists{/gist_id}","starred_url":"https://api.github.com/users/ds5678/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ds5678/subscriptions","organizations_url":"https://api.github.com/users/ds5678/orgs","repos_url":"https://api.github.com/users/ds5678/repos","events_url":"https://api.github.com/users/ds5678/events{/privacy}","received_events_url":"https://api.github.com/users/ds5678/received_events","type":"User","site_admin":false},"html_url":"https://github.com/ds5678/Cpp2IL","description":"Work-in-progress tool to reverse unity's IL2CPP toolchain.","fork":true,"url":"https://api.github.com/repos/ds5678/Cpp2IL","forks_url":"https://api.github.com/repos/ds5678/Cpp2IL/forks","keys_url":"https://api.github.com/repos/ds5678/Cpp2IL/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ds5678/Cpp2IL/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ds5678/Cpp2IL/teams","hooks_url":"https://api.github.com/repos/ds5678/Cpp2IL/hooks","issue_events_url":"https://api.github.com/repos/ds5678/Cpp2IL/issues/events{/number}","events_url":"https://api.github.com/repos/ds5678/Cpp2IL/events","assignees_url":"https://api.github.com/repos/ds5678/Cpp2IL/assignees{/user}","branches_url":"https://api.github.com/repos/ds5678/Cpp2IL/branches{/branch}","tags_url":"https://api.github.com/repos/ds5678/Cpp2IL/tags","blobs_url":"https://api.github.com/repos/ds5678/Cpp2IL/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ds5678/Cpp2IL/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ds5678/Cpp2IL/git/refs{/sha}","trees_url":"https://api.github.com/repos/ds5678/Cpp2IL/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ds5678/Cpp2IL/statuses/{sha}","languages_url":"https://api.github.com/repos/ds5678/Cpp2IL/languages","stargazers_url":"https://api.github.com/repos/ds5678/Cpp2IL/stargazers","contributors_url":"https://api.github.com/repos/ds5678/Cpp2IL/contributors","subscribers_url":"https://api.github.com/repos/ds5678/Cpp2IL/subscribers","subscription_url":"https://api.github.com/repos/ds5678/Cpp2IL/subscription","commits_url":"https://api.github.com/repos/ds5678/Cpp2IL/commits{/sha}","git_commits_url":"https://api.github.com/repos/ds5678/Cpp2IL/git/commits{/sha}","comments_url":"https://api.github.com/repos/ds5678/Cpp2IL/comments{/number}","issue_comment_url":"https://api.github.com/repos/ds5678/Cpp2IL/issues/comments{/number}","contents_url":"https://api.github.com/repos/ds5678/Cpp2IL/contents/{+path}","compare_url":"https://api.github.com/repos/ds5678/Cpp2IL/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ds5678/Cpp2IL/merges","archive_url":"https://api.github.com/repos/ds5678/Cpp2IL/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ds5678/Cpp2IL/downloads","issues_url":"https://api.github.com/repos/ds5678/Cpp2IL/issues{/number}","pulls_url":"https://api.github.com/repos/ds5678/Cpp2IL/pulls{/number}","milestones_url":"https://api.github.com/repos/ds5678/Cpp2IL/milestones{/number}","notifications_url":"https://api.github.com/repos/ds5678/Cpp2IL/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ds5678/Cpp2IL/labels{/name}","releases_url":"https://api.github.com/repos/ds5678/Cpp2IL/releases{/id}","deployments_url":"https://api.github.com/repos/ds5678/Cpp2IL/deployments","created_at":"2021-07-19T00:10:02Z","updated_at":"2021-11-23T08:03:40Z","pushed_at":"2024-01-01T14:10:02Z","git_url":"git://github.com/ds5678/Cpp2IL.git","ssh_url":"git@github.com:ds5678/Cpp2IL.git","clone_url":"https://github.com/ds5678/Cpp2IL.git","svn_url":"https://github.com/ds5678/Cpp2IL","homepage":"","size":48217,"stargazers_count":0,"watchers_count":0,"language":"C#","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"has_discussions":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":1,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":[],"visibility":"public","forks":0,"open_issues":1,"watchers":0,"default_branch":"development"}},"base":{"label":"SamboyCoding:development","ref":"development","sha":"a53e72da9b78846404b534e7a6cca7424fa32a01","user":{"login":"SamboyCoding","id":7011721,"node_id":"MDQ6VXNlcjcwMTE3MjE=","avatar_url":"https://avatars.githubusercontent.com/u/7011721?v=4","gravatar_id":"","url":"https://api.github.com/users/SamboyCoding","html_url":"https://github.com/SamboyCoding","followers_url":"https://api.github.com/users/SamboyCoding/followers","following_url":"https://api.github.com/users/SamboyCoding/following{/other_user}","gists_url":"https://api.github.com/users/SamboyCoding/gists{/gist_id}","starred_url":"https://api.github.com/users/SamboyCoding/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SamboyCoding/subscriptions","organizations_url":"https://api.github.com/users/SamboyCoding/orgs","repos_url":"https://api.github.com/users/SamboyCoding/repos","events_url":"https://api.github.com/users/SamboyCoding/events{/privacy}","received_events_url":"https://api.github.com/users/SamboyCoding/received_events","type":"User","site_admin":false},"repo":{"id":192676329,"node_id":"MDEwOlJlcG9zaXRvcnkxOTI2NzYzMjk=","name":"Cpp2IL","full_name":"SamboyCoding/Cpp2IL","private":false,"owner":{"login":"SamboyCoding","id":7011721,"node_id":"MDQ6VXNlcjcwMTE3MjE=","avatar_url":"https://avatars.githubusercontent.com/u/7011721?v=4","gravatar_id":"","url":"https://api.github.com/users/SamboyCoding","html_url":"https://github.com/SamboyCoding","followers_url":"https://api.github.com/users/SamboyCoding/followers","following_url":"https://api.github.com/users/SamboyCoding/following{/other_user}","gists_url":"https://api.github.com/users/SamboyCoding/gists{/gist_id}","starred_url":"https://api.github.com/users/SamboyCoding/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SamboyCoding/subscriptions","organizations_url":"https://api.github.com/users/SamboyCoding/orgs","repos_url":"https://api.github.com/users/SamboyCoding/repos","events_url":"https://api.github.com/users/SamboyCoding/events{/privacy}","received_events_url":"https://api.github.com/users/SamboyCoding/received_events","type":"User","site_admin":false},"html_url":"https://github.com/SamboyCoding/Cpp2IL","description":"Work-in-progress tool to reverse unity's IL2CPP toolchain.","fork":false,"url":"https://api.github.com/repos/SamboyCoding/Cpp2IL","forks_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/forks","keys_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/keys{/key_id}","collaborators_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/teams","hooks_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/hooks","issue_events_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/issues/events{/number}","events_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/events","assignees_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/assignees{/user}","branches_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/branches{/branch}","tags_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/tags","blobs_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/git/refs{/sha}","trees_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/git/trees{/sha}","statuses_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/statuses/{sha}","languages_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/languages","stargazers_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/stargazers","contributors_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/contributors","subscribers_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/subscribers","subscription_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/subscription","commits_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/commits{/sha}","git_commits_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/git/commits{/sha}","comments_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/comments{/number}","issue_comment_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/issues/comments{/number}","contents_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/contents/{+path}","compare_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/compare/{base}...{head}","merges_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/merges","archive_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/downloads","issues_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/issues{/number}","pulls_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/pulls{/number}","milestones_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/milestones{/number}","notifications_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/labels{/name}","releases_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/releases{/id}","deployments_url":"https://api.github.com/repos/SamboyCoding/Cpp2IL/deployments","created_at":"2019-06-19T06:56:00Z","updated_at":"2024-01-01T06:04:00Z","pushed_at":"2024-01-01T14:59:41Z","git_url":"git://github.com/SamboyCoding/Cpp2IL.git","ssh_url":"git@github.com:SamboyCoding/Cpp2IL.git","clone_url":"https://github.com/SamboyCoding/Cpp2IL.git","svn_url":"https://github.com/SamboyCoding/Cpp2IL","homepage":"","size":48364,"stargazers_count":1316,"watchers_count":1316,"language":"C#","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"has_discussions":false,"forks_count":149,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":24,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":["analysis","decompiler","il2cpp","il2cpp-metadata","reverse-engineering","static-analysis","unity"],"visibility":"public","forks":149,"open_issues":24,"watchers":1316,"default_branch":"new-analysis"}},"_links":{"self":{"href":"https://api.github.com/repos/SamboyCoding/Cpp2IL/pulls/255"},"html":{"href":"https://github.com/SamboyCoding/Cpp2IL/pull/255"},"issue":{"href":"https://api.github.com/repos/SamboyCoding/Cpp2IL/issues/255"},"comments":{"href":"https://api.github.com/repos/SamboyCoding/Cpp2IL/issues/255/comments"},"review_comments":{"href":"https://api.github.com/repos/SamboyCoding/Cpp2IL/pulls/255/comments"},"review_comment":{"href":"https://api.github.com/repos/SamboyCoding/Cpp2IL/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/SamboyCoding/Cpp2IL/pulls/255/commits"},"statuses":{"href":"https://api.github.com/repos/SamboyCoding/Cpp2IL/statuses/bdb8cdc74af47455cc9c609c1135f52b97dde417"}},"author_association":"CONTRIBUTOR","auto_merge":null,"active_lock_reason":null}},"public":true,"created_at":"2024-01-01T15:00:01Z"}
+{"id":"34502641513","type":"PushEvent","actor":{"id":155086666,"login":"lu146enza","display_login":"lu146enza","gravatar_id":"","url":"https://api.github.com/users/lu146enza","avatar_url":"https://avatars.githubusercontent.com/u/155086666?"},"repo":{"id":737110895,"name":"lu146enza/Repo9","url":"https://api.github.com/repos/lu146enza/Repo9"},"payload":{"repository_id":737110895,"push_id":16466254411,"size":1,"distinct_size":1,"ref":"refs/heads/main","head":"30f0bf3d0aa3f132294c36ad8510df63fdc4ca74","before":"2b611640aa7a03be3b1a8f36b9a51ed9a4a76aae","commits":[{"sha":"30f0bf3d0aa3f132294c36ad8510df63fdc4ca74","author":{"email":"you@example.com","name":"Your Name"},"message":"Empty Commit","distinct":true,"url":"https://api.github.com/repos/lu146enza/Repo9/commits/30f0bf3d0aa3f132294c36ad8510df63fdc4ca74"}]},"public":true,"created_at":"2024-01-01T15:00:01Z"}
+{"id":"34502641516","type":"PushEvent","actor":{"id":40597892,"login":"fdvorak","display_login":"fdvorak","gravatar_id":"","url":"https://api.github.com/users/fdvorak","avatar_url":"https://avatars.githubusercontent.com/u/40597892?"},"repo":{"id":465250207,"name":"fdvorak/sandWind","url":"https://api.github.com/repos/fdvorak/sandWind"},"payload":{"repository_id":465250207,"push_id":16466254614,"size":1,"distinct_size":1,"ref":"refs/heads/main","head":"75f33e55b3a9470eff31fa39876db6e39799c408","before":"59eeb1a645f783f70f8e7810445b275f4b22810c","commits":[{"sha":"75f33e55b3a9470eff31fa39876db6e39799c408","author":{"email":"40597892+fdvorak@users.noreply.github.com","name":"fdvorak"},"message":"automated commit 2024-01-01 15:59:14","distinct":true,"url":"https://api.github.com/repos/fdvorak/sandWind/commits/75f33e55b3a9470eff31fa39876db6e39799c408"}]},"public":true,"created_at":"2024-01-01T15:00:01Z"}
+{"id":"34502641517","type":"PushEvent","actor":{"id":97979094,"login":"github-shvabra","display_login":"github-shvabra","gravatar_id":"","url":"https://api.github.com/users/github-shvabra","avatar_url":"https://avatars.githubusercontent.com/u/97979094?"},"repo":{"id":642858622,"name":"saby/ios-sabycom","url":"https://api.github.com/repos/saby/ios-sabycom"},"payload":{"repository_id":642858622,"push_id":16466254413,"size":1,"distinct_size":1,"ref":"refs/heads/rc-23.7106","head":"a0e4494a741c48d13be76964d86c7cd76753919a","before":"99492b5c8305e002d575672ef551ecae0d7bce6c","commits":[{"sha":"a0e4494a741c48d13be76964d86c7cd76753919a","author":{"email":"unix-prog_server@unix.tensor.ru@sbis-dev-mon.unix.tensor.ru","name":"Служебный пользователь Инц №52255"},"message":"new change","distinct":true,"url":"https://api.github.com/repos/saby/ios-sabycom/commits/a0e4494a741c48d13be76964d86c7cd76753919a"}]},"public":true,"created_at":"2024-01-01T15:00:01Z","org":{"id":42994484,"login":"saby","gravatar_id":"","url":"https://api.github.com/orgs/saby","avatar_url":"https://avatars.githubusercontent.com/u/42994484?"}}
+{"id":"34502641520","type":"DeleteEvent","actor":{"id":2599636,"login":"artamonovkirill","display_login":"artamonovkirill","gravatar_id":"","url":"https://api.github.com/users/artamonovkirill","avatar_url":"https://avatars.githubusercontent.com/u/2599636?"},"repo":{"id":95086228,"name":"tomtom-international/goji-http-client","url":"https://api.github.com/repos/tomtom-international/goji-http-client"},"payload":{"ref":"dependabot/maven/log4j.version-2.22.1","ref_type":"branch","pusher_type":"user"},"public":true,"created_at":"2024-01-01T15:00:01Z","org":{"id":11631435,"login":"tomtom-international","gravatar_id":"","url":"https://api.github.com/orgs/tomtom-international","avatar_url":"https://avatars.githubusercontent.com/u/11631435?"}}
+{"id":"34502641526","type":"PullRequestEvent","actor":{"id":41898282,"login":"github-actions[bot]","display_login":"github-actions","gravatar_id":"","url":"https://api.github.com/users/github-actions[bot]","avatar_url":"https://avatars.githubusercontent.com/u/41898282?"},"repo":{"id":604901781,"name":"jckimble/Github-Graph-Background","url":"https://api.github.com/repos/jckimble/Github-Graph-Background"},"payload":{"action":"closed","number":45,"pull_request":{"url":"https://api.github.com/repos/jckimble/Github-Graph-Background/pulls/45","id":1661122658,"node_id":"PR_kwDOJA4Rlc5jArhi","html_url":"https://github.com/jckimble/Github-Graph-Background/pull/45","diff_url":"https://github.com/jckimble/Github-Graph-Background/pull/45.diff","patch_url":"https://github.com/jckimble/Github-Graph-Background/pull/45.patch","issue_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/issues/45","number":45,"state":"closed","locked":false,"title":"build(deps-dev): bump ts-node from 10.9.1 to 10.9.2","user":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","site_admin":false},"body":"Bumps [ts-node](https://github.com/TypeStrong/ts-node) from 10.9.1 to 10.9.2.\n<details>\n<summary>Release notes</summary>\n<p><em>Sourced from <a href=\"https://github.com/TypeStrong/ts-node/releases\">ts-node's releases</a>.</em></p>\n<blockquote>\n<h2>Fix <code>tsconfig.json</code> file not found</h2>\n<p><strong>Fixed</strong></p>\n<ul>\n<li>Fixed <code>tsconfig.json</code> file not found on latest TypeScript version (<a href=\"https://redirect.github.com/TypeStrong/ts-node/pull/2091\">TypeStrong/ts-node#2091</a>)</li>\n</ul>\n</blockquote>\n</details>\n<details>\n<summary>Commits</summary>\n<ul>\n<li><a href=\"https://github.com/TypeStrong/ts-node/commit/057ac1beb118f9c42d21e876a17320ad73ea6be2\"><code>057ac1b</code></a> 10.9.2</li>\n<li><a href=\"https://github.com/TypeStrong/ts-node/commit/c8805d5d4bcdfa564fdcc0ff6630381c9f54ee5a\"><code>c8805d5</code></a> Update package lock</li>\n<li><a href=\"https://github.com/TypeStrong/ts-node/commit/99862f7ec663927045ecb5703230c368816d0857\"><code>99862f7</code></a> Bump swc dependency</li>\n<li><a href=\"https://github.com/TypeStrong/ts-node/commit/cdc4e883ab7072865abc4070f651374503cc88a9\"><code>cdc4e88</code></a> Ignore test files in build schema</li>\n<li><a href=\"https://github.com/TypeStrong/ts-node/commit/08cdfb0c70fbe3cadd658ef025d7947a0a59c920\"><code>08cdfb0</code></a> Backport swc fixes on main</li>\n<li><a href=\"https://github.com/TypeStrong/ts-node/commit/9639daa83c2122dd3d5ac4520f2d990d997fe8ba\"><code>9639daa</code></a> Ignore test files in build</li>\n<li><a href=\"https://github.com/TypeStrong/ts-node/commit/cc1a503e5faae87b034b76a3f5ddd53e5e7a6b3b\"><code>cc1a503</code></a> Fix <code>tsconfig.json</code> not found with TS &gt;= 5.3 (<a href=\"https://redirect.github.com/TypeStrong/ts-node/issues/2091\">#2091</a>)</li>\n<li>See full diff in <a href=\"https://github.com/TypeStrong/ts-node/compare/v10.9.1...v10.9.2\">compare view</a></li>\n</ul>\n</details>\n<br />\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=ts-node&package-manager=npm_and_yarn&previous-version=10.9.1&new-version=10.9.2)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\n[//]: # (dependabot-automerge-end)\n\n---\n\n<details>\n<summary>Dependabot commands and options</summary>\n<br />\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n</details>","created_at":"2024-01-01T14:57:18Z","updated_at":"2024-01-01T14:59:50Z","closed_at":"2024-01-01T14:59:39Z","merged_at":"2024-01-01T14:59:39Z","merge_commit_sha":"ead252ad0a6637850da003273f4c9e76b9c78ec1","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":5213407120,"node_id":"LA_kwDOJA4Rlc8AAAABNr5HkA","url":"https://api.github.com/repos/jckimble/Github-Graph-Background/labels/dependencies","name":"dependencies","color":"0366d6","default":false,"description":"Pull requests that update a dependency file"},{"id":5213407134,"node_id":"LA_kwDOJA4Rlc8AAAABNr5Hng","url":"https://api.github.com/repos/jckimble/Github-Graph-Background/labels/javascript","name":"javascript","color":"168700","default":false,"description":"Pull requests that update Javascript code"}],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/pulls/45/commits","review_comments_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/pulls/45/comments","review_comment_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/pulls/comments{/number}","comments_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/issues/45/comments","statuses_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/statuses/6666459e54f4da75d0b24dcb82683a400b37c99b","head":{"label":"jckimble:dependabot/npm_and_yarn/ts-node-10.9.2","ref":"dependabot/npm_and_yarn/ts-node-10.9.2","sha":"6666459e54f4da75d0b24dcb82683a400b37c99b","user":{"login":"jckimble","id":1577799,"node_id":"MDQ6VXNlcjE1Nzc3OTk=","avatar_url":"https://avatars.githubusercontent.com/u/1577799?v=4","gravatar_id":"","url":"https://api.github.com/users/jckimble","html_url":"https://github.com/jckimble","followers_url":"https://api.github.com/users/jckimble/followers","following_url":"https://api.github.com/users/jckimble/following{/other_user}","gists_url":"https://api.github.com/users/jckimble/gists{/gist_id}","starred_url":"https://api.github.com/users/jckimble/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jckimble/subscriptions","organizations_url":"https://api.github.com/users/jckimble/orgs","repos_url":"https://api.github.com/users/jckimble/repos","events_url":"https://api.github.com/users/jckimble/events{/privacy}","received_events_url":"https://api.github.com/users/jckimble/received_events","type":"User","site_admin":false},"repo":{"id":604901781,"node_id":"R_kgDOJA4RlQ","name":"Github-Graph-Background","full_name":"jckimble/Github-Graph-Background","private":false,"owner":{"login":"jckimble","id":1577799,"node_id":"MDQ6VXNlcjE1Nzc3OTk=","avatar_url":"https://avatars.githubusercontent.com/u/1577799?v=4","gravatar_id":"","url":"https://api.github.com/users/jckimble","html_url":"https://github.com/jckimble","followers_url":"https://api.github.com/users/jckimble/followers","following_url":"https://api.github.com/users/jckimble/following{/other_user}","gists_url":"https://api.github.com/users/jckimble/gists{/gist_id}","starred_url":"https://api.github.com/users/jckimble/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jckimble/subscriptions","organizations_url":"https://api.github.com/users/jckimble/orgs","repos_url":"https://api.github.com/users/jckimble/repos","events_url":"https://api.github.com/users/jckimble/events{/privacy}","received_events_url":"https://api.github.com/users/jckimble/received_events","type":"User","site_admin":false},"html_url":"https://github.com/jckimble/Github-Graph-Background","description":"A toy program for getting your GitHub Contributions and creating a background image from it with many themes","fork":false,"url":"https://api.github.com/repos/jckimble/Github-Graph-Background","forks_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/forks","keys_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/teams","hooks_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/hooks","issue_events_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/issues/events{/number}","events_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/events","assignees_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/assignees{/user}","branches_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/branches{/branch}","tags_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/tags","blobs_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/git/refs{/sha}","trees_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/statuses/{sha}","languages_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/languages","stargazers_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/stargazers","contributors_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/contributors","subscribers_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/subscribers","subscription_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/subscription","commits_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/commits{/sha}","git_commits_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/git/commits{/sha}","comments_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/comments{/number}","issue_comment_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/issues/comments{/number}","contents_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/contents/{+path}","compare_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/merges","archive_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/downloads","issues_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/issues{/number}","pulls_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/pulls{/number}","milestones_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/milestones{/number}","notifications_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/labels{/name}","releases_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/releases{/id}","deployments_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/deployments","created_at":"2023-02-22T02:42:55Z","updated_at":"2023-11-01T17:29:32Z","pushed_at":"2024-01-01T14:59:49Z","git_url":"git://github.com/jckimble/Github-Graph-Background.git","ssh_url":"git@github.com:jckimble/Github-Graph-Background.git","clone_url":"https://github.com/jckimble/Github-Graph-Background.git","svn_url":"https://github.com/jckimble/Github-Graph-Background","homepage":"","size":2854,"stargazers_count":1,"watchers_count":1,"language":"TypeScript","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"has_discussions":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":4,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":["background-image","cli","desktop","github","github-api","github-contributions","nodejs","toy-project"],"visibility":"public","forks":0,"open_issues":4,"watchers":1,"default_branch":"master"}},"base":{"label":"jckimble:master","ref":"master","sha":"aa5492fff237d4a4b93c0b48e0750c763f020e30","user":{"login":"jckimble","id":1577799,"node_id":"MDQ6VXNlcjE1Nzc3OTk=","avatar_url":"https://avatars.githubusercontent.com/u/1577799?v=4","gravatar_id":"","url":"https://api.github.com/users/jckimble","html_url":"https://github.com/jckimble","followers_url":"https://api.github.com/users/jckimble/followers","following_url":"https://api.github.com/users/jckimble/following{/other_user}","gists_url":"https://api.github.com/users/jckimble/gists{/gist_id}","starred_url":"https://api.github.com/users/jckimble/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jckimble/subscriptions","organizations_url":"https://api.github.com/users/jckimble/orgs","repos_url":"https://api.github.com/users/jckimble/repos","events_url":"https://api.github.com/users/jckimble/events{/privacy}","received_events_url":"https://api.github.com/users/jckimble/received_events","type":"User","site_admin":false},"repo":{"id":604901781,"node_id":"R_kgDOJA4RlQ","name":"Github-Graph-Background","full_name":"jckimble/Github-Graph-Background","private":false,"owner":{"login":"jckimble","id":1577799,"node_id":"MDQ6VXNlcjE1Nzc3OTk=","avatar_url":"https://avatars.githubusercontent.com/u/1577799?v=4","gravatar_id":"","url":"https://api.github.com/users/jckimble","html_url":"https://github.com/jckimble","followers_url":"https://api.github.com/users/jckimble/followers","following_url":"https://api.github.com/users/jckimble/following{/other_user}","gists_url":"https://api.github.com/users/jckimble/gists{/gist_id}","starred_url":"https://api.github.com/users/jckimble/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jckimble/subscriptions","organizations_url":"https://api.github.com/users/jckimble/orgs","repos_url":"https://api.github.com/users/jckimble/repos","events_url":"https://api.github.com/users/jckimble/events{/privacy}","received_events_url":"https://api.github.com/users/jckimble/received_events","type":"User","site_admin":false},"html_url":"https://github.com/jckimble/Github-Graph-Background","description":"A toy program for getting your GitHub Contributions and creating a background image from it with many themes","fork":false,"url":"https://api.github.com/repos/jckimble/Github-Graph-Background","forks_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/forks","keys_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/keys{/key_id}","collaborators_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/teams","hooks_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/hooks","issue_events_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/issues/events{/number}","events_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/events","assignees_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/assignees{/user}","branches_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/branches{/branch}","tags_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/tags","blobs_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/git/refs{/sha}","trees_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/git/trees{/sha}","statuses_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/statuses/{sha}","languages_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/languages","stargazers_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/stargazers","contributors_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/contributors","subscribers_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/subscribers","subscription_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/subscription","commits_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/commits{/sha}","git_commits_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/git/commits{/sha}","comments_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/comments{/number}","issue_comment_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/issues/comments{/number}","contents_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/contents/{+path}","compare_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/compare/{base}...{head}","merges_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/merges","archive_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/downloads","issues_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/issues{/number}","pulls_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/pulls{/number}","milestones_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/milestones{/number}","notifications_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/labels{/name}","releases_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/releases{/id}","deployments_url":"https://api.github.com/repos/jckimble/Github-Graph-Background/deployments","created_at":"2023-02-22T02:42:55Z","updated_at":"2023-11-01T17:29:32Z","pushed_at":"2024-01-01T14:59:49Z","git_url":"git://github.com/jckimble/Github-Graph-Background.git","ssh_url":"git@github.com:jckimble/Github-Graph-Background.git","clone_url":"https://github.com/jckimble/Github-Graph-Background.git","svn_url":"https://github.com/jckimble/Github-Graph-Background","homepage":"","size":2854,"stargazers_count":1,"watchers_count":1,"language":"TypeScript","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"has_discussions":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":4,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":["background-image","cli","desktop","github","github-api","github-contributions","nodejs","toy-project"],"visibility":"public","forks":0,"open_issues":4,"watchers":1,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/jckimble/Github-Graph-Background/pulls/45"},"html":{"href":"https://github.com/jckimble/Github-Graph-Background/pull/45"},"issue":{"href":"https://api.github.com/repos/jckimble/Github-Graph-Background/issues/45"},"comments":{"href":"https://api.github.com/repos/jckimble/Github-Graph-Background/issues/45/comments"},"review_comments":{"href":"https://api.github.com/repos/jckimble/Github-Graph-Background/pulls/45/comments"},"review_comment":{"href":"https://api.github.com/repos/jckimble/Github-Graph-Background/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/jckimble/Github-Graph-Background/pulls/45/commits"},"statuses":{"href":"https://api.github.com/repos/jckimble/Github-Graph-Background/statuses/6666459e54f4da75d0b24dcb82683a400b37c99b"}},"author_association":"CONTRIBUTOR","auto_merge":null,"active_lock_reason":null,"merged":true,"mergeable":null,"rebaseable":null,"mergeable_state":"unknown","merged_by":{"login":"github-actions[bot]","id":41898282,"node_id":"MDM6Qm90NDE4OTgyODI=","avatar_url":"https://avatars.githubusercontent.com/in/15368?v=4","gravatar_id":"","url":"https://api.github.com/users/github-actions%5Bbot%5D","html_url":"https://github.com/apps/github-actions","followers_url":"https://api.github.com/users/github-actions%5Bbot%5D/followers","following_url":"https://api.github.com/users/github-actions%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/github-actions%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/github-actions%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/github-actions%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/github-actions%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/github-actions%5Bbot%5D/repos","events_url":"https://api.github.com/users/github-actions%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/github-actions%5Bbot%5D/received_events","type":"Bot","site_admin":false},"comments":0,"review_comments":0,"maintainer_can_modify":false,"commits":1,"additions":6,"deletions":6,"changed_files":1}},"public":true,"created_at":"2024-01-01T15:00:01Z"}
+{"id":"34502641532","type":"PushEvent","actor":{"id":49145129,"login":"leegical","display_login":"leegical","gravatar_id":"","url":"https://api.github.com/users/leegical","avatar_url":"https://avatars.githubusercontent.com/u/49145129?"},"repo":{"id":517406091,"name":"leegical/Blog_img","url":"https://api.github.com/repos/leegical/Blog_img"},"payload":{"repository_id":517406091,"push_id":16466254427,"size":1,"distinct_size":1,"ref":"refs/heads/master","head":"df240698de35f507968050bcf57e3adc4150f4ff","before":"9de5b684596d040b14d5b1bfdb705e5c30d914fe","commits":[{"sha":"df240698de35f507968050bcf57e3adc4150f4ff","author":{"email":"49145129+leegical@users.noreply.github.com","name":"leegical"},"message":"Upload by PicGo","distinct":true,"url":"https://api.github.com/repos/leegical/Blog_img/commits/df240698de35f507968050bcf57e3adc4150f4ff"}]},"public":true,"created_at":"2024-01-01T15:00:01Z"}
+{"id":"34502641535","type":"CreateEvent","actor":{"id":119068515,"login":"mohil298","display_login":"mohil298","gravatar_id":"","url":"https://api.github.com/users/mohil298","avatar_url":"https://avatars.githubusercontent.com/u/119068515?"},"repo":{"id":737802475,"name":"mohil298/PCB-Designing","url":"https://api.github.com/repos/mohil298/PCB-Designing"},"payload":{"ref":null,"ref_type":"repository","master_branch":"main","description":"Created a PCB USDCARDtoSDcard using KICAD Software","pusher_type":"user"},"public":true,"created_at":"2024-01-01T15:00:01Z"}
+{"id":"34502641538","type":"PullRequestReviewEvent","actor":{"id":8293321,"login":"ehsandeep","display_login":"ehsandeep","gravatar_id":"","url":"https://api.github.com/users/ehsandeep","avatar_url":"https://avatars.githubusercontent.com/u/8293321?"},"repo":{"id":127519518,"name":"projectdiscovery/subfinder","url":"https://api.github.com/repos/projectdiscovery/subfinder"},"payload":{"action":"created","review":{"id":1799820657,"node_id":"PRR_kwDOB5nLHs5rRxVx","user":{"login":"ehsandeep","id":8293321,"node_id":"MDQ6VXNlcjgyOTMzMjE=","avatar_url":"https://avatars.githubusercontent.com/u/8293321?v=4","gravatar_id":"","url":"https://api.github.com/users/ehsandeep","html_url":"https://github.com/ehsandeep","followers_url":"https://api.github.com/users/ehsandeep/followers","following_url":"https://api.github.com/users/ehsandeep/following{/other_user}","gists_url":"https://api.github.com/users/ehsandeep/gists{/gist_id}","starred_url":"https://api.github.com/users/ehsandeep/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ehsandeep/subscriptions","organizations_url":"https://api.github.com/users/ehsandeep/orgs","repos_url":"https://api.github.com/users/ehsandeep/repos","events_url":"https://api.github.com/users/ehsandeep/events{/privacy}","received_events_url":"https://api.github.com/users/ehsandeep/received_events","type":"User","site_admin":false},"body":"@dependabot merge","commit_id":"398ba867465b270c1f3fae994684a493546198df","submitted_at":"2024-01-01T14:59:39Z","state":"approved","html_url":"https://github.com/projectdiscovery/subfinder/pull/1102#pullrequestreview-1799820657","pull_request_url":"https://api.github.com/repos/projectdiscovery/subfinder/pulls/1102","author_association":"MEMBER","_links":{"html":{"href":"https://github.com/projectdiscovery/subfinder/pull/1102#pullrequestreview-1799820657"},"pull_request":{"href":"https://api.github.com/repos/projectdiscovery/subfinder/pulls/1102"}}},"pull_request":{"url":"https://api.github.com/repos/projectdiscovery/subfinder/pulls/1102","id":1661121201,"node_id":"PR_kwDOB5nLHs5jArKx","html_url":"https://github.com/projectdiscovery/subfinder/pull/1102","diff_url":"https://github.com/projectdiscovery/subfinder/pull/1102.diff","patch_url":"https://github.com/projectdiscovery/subfinder/pull/1102.patch","issue_url":"https://api.github.com/repos/projectdiscovery/subfinder/issues/1102","number":1102,"state":"open","locked":false,"title":"chore(deps): bump github.com/projectdiscovery/goflags from 0.1.32 to 0.1.33 in /v2","user":{"login":"dependabot[bot]","id":49699333,"node_id":"MDM6Qm90NDk2OTkzMzM=","avatar_url":"https://avatars.githubusercontent.com/in/29110?v=4","gravatar_id":"","url":"https://api.github.com/users/dependabot%5Bbot%5D","html_url":"https://github.com/apps/dependabot","followers_url":"https://api.github.com/users/dependabot%5Bbot%5D/followers","following_url":"https://api.github.com/users/dependabot%5Bbot%5D/following{/other_user}","gists_url":"https://api.github.com/users/dependabot%5Bbot%5D/gists{/gist_id}","starred_url":"https://api.github.com/users/dependabot%5Bbot%5D/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dependabot%5Bbot%5D/subscriptions","organizations_url":"https://api.github.com/users/dependabot%5Bbot%5D/orgs","repos_url":"https://api.github.com/users/dependabot%5Bbot%5D/repos","events_url":"https://api.github.com/users/dependabot%5Bbot%5D/events{/privacy}","received_events_url":"https://api.github.com/users/dependabot%5Bbot%5D/received_events","type":"Bot","site_admin":false},"body":"Bumps [github.com/projectdiscovery/goflags](https://github.com/projectdiscovery/goflags) from 0.1.32 to 0.1.33.\n<details>\n<summary>Release notes</summary>\n<p><em>Sourced from <a href=\"https://github.com/projectdiscovery/goflags/releases\">github.com/projectdiscovery/goflags's releases</a>.</em></p>\n<blockquote>\n<h2>Release v0.1.33</h2>\n<h3><a href=\"https://github.com/projectdiscovery/goflags/compare/v0.1.32...v0.1.33\">0.1.33</a> (2023-12-31)</h3>\n</blockquote>\n</details>\n<details>\n<summary>Commits</summary>\n<ul>\n<li><a href=\"https://github.com/projectdiscovery/goflags/commit/7a49db7774c3e54ff8e9822280c0c82a0774cfa4\"><code>7a49db7</code></a> Merge pull request <a href=\"https://redirect.github.com/projectdiscovery/goflags/issues/162\">#162</a> from projectdiscovery/dependabot/go_modules/main/gith...</li>\n<li><a href=\"https://github.com/projectdiscovery/goflags/commit/161bec6c2c19f203881ec54265484a16a02743b6\"><code>161bec6</code></a> chore(deps): bump github.com/projectdiscovery/utils</li>\n<li>See full diff in <a href=\"https://github.com/projectdiscovery/goflags/compare/v0.1.32...v0.1.33\">compare view</a></li>\n</ul>\n</details>\n<br />\n\n\n[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=github.com/projectdiscovery/goflags&package-manager=go_modules&previous-version=0.1.32&new-version=0.1.33)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)\n\nDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`.\n\n[//]: # (dependabot-automerge-start)\nDependabot will merge this PR once it's up-to-date and CI passes on it, as requested by @ehsandeep.\n\n[//]: # (dependabot-automerge-end)\n\n---\n\n<details>\n<summary>Dependabot commands and options</summary>\n<br />\n\nYou can trigger Dependabot actions by commenting on this PR:\n- `@dependabot rebase` will rebase this PR\n- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it\n- `@dependabot merge` will merge this PR after your CI passes on it\n- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it\n- `@dependabot cancel merge` will cancel a previously requested merge and block automerging\n- `@dependabot reopen` will reopen this PR if it is closed\n- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually\n- `@dependabot show <dependency name> ignore conditions` will show all of the ignore conditions of the specified dependency\n- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)\n- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)\n\n\n</details>","created_at":"2024-01-01T14:54:06Z","updated_at":"2024-01-01T14:59:48Z","closed_at":null,"merged_at":null,"merge_commit_sha":"9a59d3a0bb0f9ef4dab62b10da46a77dcd46b2ff","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":2196499556,"node_id":"MDU6TGFiZWwyMTk2NDk5NTU2","url":"https://api.github.com/repos/projectdiscovery/subfinder/labels/Type:%20Maintenance","name":"Type: Maintenance","color":"fbca03","default":false,"description":"Updating phrasing or wording to make things clearer or removing ambiguity."}],"milestone":null,"draft":false,"commits_url":"https://api.github.com/repos/projectdiscovery/subfinder/pulls/1102/commits","review_comments_url":"https://api.github.com/repos/projectdiscovery/subfinder/pulls/1102/comments","review_comment_url":"https://api.github.com/repos/projectdiscovery/subfinder/pulls/comments{/number}","comments_url":"https://api.github.com/repos/projectdiscovery/subfinder/issues/1102/comments","statuses_url":"https://api.github.com/repos/projectdiscovery/subfinder/statuses/398ba867465b270c1f3fae994684a493546198df","head":{"label":"projectdiscovery:dependabot/go_modules/v2/dev/github.com/projectdiscovery/goflags-0.1.33","ref":"dependabot/go_modules/v2/dev/github.com/projectdiscovery/goflags-0.1.33","sha":"398ba867465b270c1f3fae994684a493546198df","user":{"login":"projectdiscovery","id":50994705,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUwOTk0NzA1","avatar_url":"https://avatars.githubusercontent.com/u/50994705?v=4","gravatar_id":"","url":"https://api.github.com/users/projectdiscovery","html_url":"https://github.com/projectdiscovery","followers_url":"https://api.github.com/users/projectdiscovery/followers","following_url":"https://api.github.com/users/projectdiscovery/following{/other_user}","gists_url":"https://api.github.com/users/projectdiscovery/gists{/gist_id}","starred_url":"https://api.github.com/users/projectdiscovery/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/projectdiscovery/subscriptions","organizations_url":"https://api.github.com/users/projectdiscovery/orgs","repos_url":"https://api.github.com/users/projectdiscovery/repos","events_url":"https://api.github.com/users/projectdiscovery/events{/privacy}","received_events_url":"https://api.github.com/users/projectdiscovery/received_events","type":"Organization","site_admin":false},"repo":{"id":127519518,"node_id":"MDEwOlJlcG9zaXRvcnkxMjc1MTk1MTg=","name":"subfinder","full_name":"projectdiscovery/subfinder","private":false,"owner":{"login":"projectdiscovery","id":50994705,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUwOTk0NzA1","avatar_url":"https://avatars.githubusercontent.com/u/50994705?v=4","gravatar_id":"","url":"https://api.github.com/users/projectdiscovery","html_url":"https://github.com/projectdiscovery","followers_url":"https://api.github.com/users/projectdiscovery/followers","following_url":"https://api.github.com/users/projectdiscovery/following{/other_user}","gists_url":"https://api.github.com/users/projectdiscovery/gists{/gist_id}","starred_url":"https://api.github.com/users/projectdiscovery/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/projectdiscovery/subscriptions","organizations_url":"https://api.github.com/users/projectdiscovery/orgs","repos_url":"https://api.github.com/users/projectdiscovery/repos","events_url":"https://api.github.com/users/projectdiscovery/events{/privacy}","received_events_url":"https://api.github.com/users/projectdiscovery/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/projectdiscovery/subfinder","description":"Fast passive subdomain enumeration tool.","fork":false,"url":"https://api.github.com/repos/projectdiscovery/subfinder","forks_url":"https://api.github.com/repos/projectdiscovery/subfinder/forks","keys_url":"https://api.github.com/repos/projectdiscovery/subfinder/keys{/key_id}","collaborators_url":"https://api.github.com/repos/projectdiscovery/subfinder/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/projectdiscovery/subfinder/teams","hooks_url":"https://api.github.com/repos/projectdiscovery/subfinder/hooks","issue_events_url":"https://api.github.com/repos/projectdiscovery/subfinder/issues/events{/number}","events_url":"https://api.github.com/repos/projectdiscovery/subfinder/events","assignees_url":"https://api.github.com/repos/projectdiscovery/subfinder/assignees{/user}","branches_url":"https://api.github.com/repos/projectdiscovery/subfinder/branches{/branch}","tags_url":"https://api.github.com/repos/projectdiscovery/subfinder/tags","blobs_url":"https://api.github.com/repos/projectdiscovery/subfinder/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/projectdiscovery/subfinder/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/projectdiscovery/subfinder/git/refs{/sha}","trees_url":"https://api.github.com/repos/projectdiscovery/subfinder/git/trees{/sha}","statuses_url":"https://api.github.com/repos/projectdiscovery/subfinder/statuses/{sha}","languages_url":"https://api.github.com/repos/projectdiscovery/subfinder/languages","stargazers_url":"https://api.github.com/repos/projectdiscovery/subfinder/stargazers","contributors_url":"https://api.github.com/repos/projectdiscovery/subfinder/contributors","subscribers_url":"https://api.github.com/repos/projectdiscovery/subfinder/subscribers","subscription_url":"https://api.github.com/repos/projectdiscovery/subfinder/subscription","commits_url":"https://api.github.com/repos/projectdiscovery/subfinder/commits{/sha}","git_commits_url":"https://api.github.com/repos/projectdiscovery/subfinder/git/commits{/sha}","comments_url":"https://api.github.com/repos/projectdiscovery/subfinder/comments{/number}","issue_comment_url":"https://api.github.com/repos/projectdiscovery/subfinder/issues/comments{/number}","contents_url":"https://api.github.com/repos/projectdiscovery/subfinder/contents/{+path}","compare_url":"https://api.github.com/repos/projectdiscovery/subfinder/compare/{base}...{head}","merges_url":"https://api.github.com/repos/projectdiscovery/subfinder/merges","archive_url":"https://api.github.com/repos/projectdiscovery/subfinder/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/projectdiscovery/subfinder/downloads","issues_url":"https://api.github.com/repos/projectdiscovery/subfinder/issues{/number}","pulls_url":"https://api.github.com/repos/projectdiscovery/subfinder/pulls{/number}","milestones_url":"https://api.github.com/repos/projectdiscovery/subfinder/milestones{/number}","notifications_url":"https://api.github.com/repos/projectdiscovery/subfinder/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/projectdiscovery/subfinder/labels{/name}","releases_url":"https://api.github.com/repos/projectdiscovery/subfinder/releases{/id}","deployments_url":"https://api.github.com/repos/projectdiscovery/subfinder/deployments","created_at":"2018-03-31T09:44:57Z","updated_at":"2024-01-01T13:13:22Z","pushed_at":"2024-01-01T14:59:24Z","git_url":"git://github.com/projectdiscovery/subfinder.git","ssh_url":"git@github.com:projectdiscovery/subfinder.git","clone_url":"https://github.com/projectdiscovery/subfinder.git","svn_url":"https://github.com/projectdiscovery/subfinder","homepage":"https://projectdiscovery.io","size":9319,"stargazers_count":8699,"watchers_count":8699,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"has_discussions":true,"forks_count":1161,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":22,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":["bugbounty","hacking","osint","reconnaissance","subdomain-enumeration","subdomains"],"visibility":"public","forks":1161,"open_issues":22,"watchers":8699,"default_branch":"dev"}},"base":{"label":"projectdiscovery:dev","ref":"dev","sha":"ba55928386e6795d3a941db11115ecb37fa7f704","user":{"login":"projectdiscovery","id":50994705,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUwOTk0NzA1","avatar_url":"https://avatars.githubusercontent.com/u/50994705?v=4","gravatar_id":"","url":"https://api.github.com/users/projectdiscovery","html_url":"https://github.com/projectdiscovery","followers_url":"https://api.github.com/users/projectdiscovery/followers","following_url":"https://api.github.com/users/projectdiscovery/following{/other_user}","gists_url":"https://api.github.com/users/projectdiscovery/gists{/gist_id}","starred_url":"https://api.github.com/users/projectdiscovery/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/projectdiscovery/subscriptions","organizations_url":"https://api.github.com/users/projectdiscovery/orgs","repos_url":"https://api.github.com/users/projectdiscovery/repos","events_url":"https://api.github.com/users/projectdiscovery/events{/privacy}","received_events_url":"https://api.github.com/users/projectdiscovery/received_events","type":"Organization","site_admin":false},"repo":{"id":127519518,"node_id":"MDEwOlJlcG9zaXRvcnkxMjc1MTk1MTg=","name":"subfinder","full_name":"projectdiscovery/subfinder","private":false,"owner":{"login":"projectdiscovery","id":50994705,"node_id":"MDEyOk9yZ2FuaXphdGlvbjUwOTk0NzA1","avatar_url":"https://avatars.githubusercontent.com/u/50994705?v=4","gravatar_id":"","url":"https://api.github.com/users/projectdiscovery","html_url":"https://github.com/projectdiscovery","followers_url":"https://api.github.com/users/projectdiscovery/followers","following_url":"https://api.github.com/users/projectdiscovery/following{/other_user}","gists_url":"https://api.github.com/users/projectdiscovery/gists{/gist_id}","starred_url":"https://api.github.com/users/projectdiscovery/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/projectdiscovery/subscriptions","organizations_url":"https://api.github.com/users/projectdiscovery/orgs","repos_url":"https://api.github.com/users/projectdiscovery/repos","events_url":"https://api.github.com/users/projectdiscovery/events{/privacy}","received_events_url":"https://api.github.com/users/projectdiscovery/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/projectdiscovery/subfinder","description":"Fast passive subdomain enumeration tool.","fork":false,"url":"https://api.github.com/repos/projectdiscovery/subfinder","forks_url":"https://api.github.com/repos/projectdiscovery/subfinder/forks","keys_url":"https://api.github.com/repos/projectdiscovery/subfinder/keys{/key_id}","collaborators_url":"https://api.github.com/repos/projectdiscovery/subfinder/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/projectdiscovery/subfinder/teams","hooks_url":"https://api.github.com/repos/projectdiscovery/subfinder/hooks","issue_events_url":"https://api.github.com/repos/projectdiscovery/subfinder/issues/events{/number}","events_url":"https://api.github.com/repos/projectdiscovery/subfinder/events","assignees_url":"https://api.github.com/repos/projectdiscovery/subfinder/assignees{/user}","branches_url":"https://api.github.com/repos/projectdiscovery/subfinder/branches{/branch}","tags_url":"https://api.github.com/repos/projectdiscovery/subfinder/tags","blobs_url":"https://api.github.com/repos/projectdiscovery/subfinder/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/projectdiscovery/subfinder/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/projectdiscovery/subfinder/git/refs{/sha}","trees_url":"https://api.github.com/repos/projectdiscovery/subfinder/git/trees{/sha}","statuses_url":"https://api.github.com/repos/projectdiscovery/subfinder/statuses/{sha}","languages_url":"https://api.github.com/repos/projectdiscovery/subfinder/languages","stargazers_url":"https://api.github.com/repos/projectdiscovery/subfinder/stargazers","contributors_url":"https://api.github.com/repos/projectdiscovery/subfinder/contributors","subscribers_url":"https://api.github.com/repos/projectdiscovery/subfinder/subscribers","subscription_url":"https://api.github.com/repos/projectdiscovery/subfinder/subscription","commits_url":"https://api.github.com/repos/projectdiscovery/subfinder/commits{/sha}","git_commits_url":"https://api.github.com/repos/projectdiscovery/subfinder/git/commits{/sha}","comments_url":"https://api.github.com/repos/projectdiscovery/subfinder/comments{/number}","issue_comment_url":"https://api.github.com/repos/projectdiscovery/subfinder/issues/comments{/number}","contents_url":"https://api.github.com/repos/projectdiscovery/subfinder/contents/{+path}","compare_url":"https://api.github.com/repos/projectdiscovery/subfinder/compare/{base}...{head}","merges_url":"https://api.github.com/repos/projectdiscovery/subfinder/merges","archive_url":"https://api.github.com/repos/projectdiscovery/subfinder/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/projectdiscovery/subfinder/downloads","issues_url":"https://api.github.com/repos/projectdiscovery/subfinder/issues{/number}","pulls_url":"https://api.github.com/repos/projectdiscovery/subfinder/pulls{/number}","milestones_url":"https://api.github.com/repos/projectdiscovery/subfinder/milestones{/number}","notifications_url":"https://api.github.com/repos/projectdiscovery/subfinder/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/projectdiscovery/subfinder/labels{/name}","releases_url":"https://api.github.com/repos/projectdiscovery/subfinder/releases{/id}","deployments_url":"https://api.github.com/repos/projectdiscovery/subfinder/deployments","created_at":"2018-03-31T09:44:57Z","updated_at":"2024-01-01T13:13:22Z","pushed_at":"2024-01-01T14:59:24Z","git_url":"git://github.com/projectdiscovery/subfinder.git","ssh_url":"git@github.com:projectdiscovery/subfinder.git","clone_url":"https://github.com/projectdiscovery/subfinder.git","svn_url":"https://github.com/projectdiscovery/subfinder","homepage":"https://projectdiscovery.io","size":9319,"stargazers_count":8699,"watchers_count":8699,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"has_discussions":true,"forks_count":1161,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":22,"license":{"key":"mit","name":"MIT License","spdx_id":"MIT","url":"https://api.github.com/licenses/mit","node_id":"MDc6TGljZW5zZTEz"},"allow_forking":true,"is_template":false,"web_commit_signoff_required":false,"topics":["bugbounty","hacking","osint","reconnaissance","subdomain-enumeration","subdomains"],"visibility":"public","forks":1161,"open_issues":22,"watchers":8699,"default_branch":"dev"}},"_links":{"self":{"href":"https://api.github.com/repos/projectdiscovery/subfinder/pulls/1102"},"html":{"href":"https://github.com/projectdiscovery/subfinder/pull/1102"},"issue":{"href":"https://api.github.com/repos/projectdiscovery/subfinder/issues/1102"},"comments":{"href":"https://api.github.com/repos/projectdiscovery/subfinder/issues/1102/comments"},"review_comments":{"href":"https://api.github.com/repos/projectdiscovery/subfinder/pulls/1102/comments"},"review_comment":{"href":"https://api.github.com/repos/projectdiscovery/subfinder/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/projectdiscovery/subfinder/pulls/1102/commits"},"statuses":{"href":"https://api.github.com/repos/projectdiscovery/subfinder/statuses/398ba867465b270c1f3fae994684a493546198df"}},"author_association":"CONTRIBUTOR","auto_merge":null,"active_lock_reason":null}},"public":true,"created_at":"2024-01-01T15:00:01Z","org":{"id":50994705,"login":"projectdiscovery","gravatar_id":"","url":"https://api.github.com/orgs/projectdiscovery","avatar_url":"https://avatars.githubusercontent.com/u/50994705?"}}
diff --git a/test/invalid-books.xml b/test/invalid-books.xml
new file mode 100644
index 0000000..66211d6
--- /dev/null
+++ b/test/invalid-books.xml
@@ -0,0 +1,132 @@
+<?xml version="1.0"?>
+<catalog>
+ <book id="bk101">
+ <author>Gambardella, Matthew</author>
+ <title>XML Developer's Guide</title>
+ <genre>Computer</genre>
+ <price>44.95</price>
+ <publish_date>2000-10-01</publish_date>
+ <description>An in-depth look at creating applications
+ with XML.
+ </description>
+ </book>
+ <book id="bk102">
+ <author>Ralls, Kim</author>
+ <title>Midnight Rain</title>
+ <genre>Fantasy</genre>
+ <price>5.95</price>
+ <publish_date>2000-12-16</publish_date>
+ <description>A former architect battles corporate zombies,
+ an evil sorceress, and her own childhood to become queen
+ of the world.
+ </description>
+ </book>
+ <book id="bk103" abc=">
+ <author>Corets, Eva</author>
+ <title>Maeve Ascendant</title>
+ <genre>Fantasy</genre>
+ <price>5.95</price>
+ <publish_date>2000-11-17</publish_date>
+ <description>After the collapse of a nanotechnology
+ society in England, the young survivors lay the
+ foundation for a new society.
+ </description>
+ </book>
+ <book id=" bk104">
+ <author>Corets, Eva</author>
+ <title>Oberon's Legacy</title>
+ <genre>Fantasy</genre>
+ <price>5.95</price>
+ <publish_date>2001-03-10</publish_date>
+ <description>In post-apocalypse England, the mysterious
+ agent known only as Oberon helps to create a new life
+ for the inhabitants of London. Sequel to Maeve
+ Ascendant.
+ </description>
+ </book>
+ <book id="bk105">
+ <author>Corets, Eva</author>
+ <title>The Sundered Grail</title>
+ <genre>Fantasy</genre>
+ <price>5.95</price>
+ <publish_date>2001-09-10</publish_date>
+ <description>The two daughters of Maeve, half-sisters,
+ battle one another for control of England. Sequel to
+ Oberon's Legacy.
+ </description>
+ </book>
+ <book id="bk106">
+ <author>Randall, Cynthia</author>
+ <title>Lover Birds</title>
+ <genre>Romance</genre>
+ <price>4.95</price>
+ <publish_date>2000-09-02</publish_date>
+ <description>When Carla meets Paul at an ornithology
+ conference, tempers fly as feathers get ruffled.
+ </description>
+ </book>
+ <book id="bk107">
+ <author>Thurman, Paula</author>
+ <title>Splish Splash</title>
+ <genre>Romance</genre>
+ <price>4.95</price>
+ <publish_date>2000-11-02</publish_date>
+ <description>A deep sea diver finds true love twenty
+ thousand leagues beneath the sea.
+ </description>
+ </book>
+ <book id="bk108">
+ <author>Knorr, Stefan</author>
+ <title>Creepy Crawlies</title>
+ <genre>Horror</genre>
+ <price>4.95</price>
+ <publish_date>2000-12-06</publish_date>
+ <description>An anthology of horror stories about roaches,
+ centipedes, scorpions and other insects.
+ </description>
+ </book>
+ <book id="bk109">
+ <author>Kress, Peter</author>
+ <title>Paradox Lost</title>
+ <genre>Science Fiction</genre>
+ <price>6.95</price>
+ <publish_date>2000-11-02</publish_date>
+ <description>After an inadvertant trip through a Heisenberg
+ Uncertainty Device, James Salway discovers the problems
+ of being quantum.
+ </description>
+ </book>
+ <book id="bk110">
+ <author>O'Brien, Tim</author>
+ <title>Microsoft .NET: The Programming Bible</title>
+ <genre>Computer</genre>
+ <price>36.95</price>
+ <publish_date>2000-12-09</publish_date>
+ <description>Microsoft's .NET initiative is explored in
+ detail in this deep programmer's reference.
+ </description>
+ </book>
+ <book id="bk111">
+ <author>O'Brien, Tim</author>
+ <title>MSXML3: A Comprehensive Guide</title>
+ <genre>Computer</genre>
+ <price>36.95</price>
+ <publish_date>2000-12-01</publish_date>
+ <description>The Microsoft MSXML3 parser is covered in
+ detail, with attention to XML DOM interfaces, XSLT processing,
+ SAX and more.
+ </description>
+ </book>
+ <book id="bk112">
+ <author>Galos, Mike</author>
+ <title>Visual Studio 7: A Comprehensive Guide</title>
+ <genre>Computer</genre>
+ <price>49.95</price>
+ <publish_date>2001-04-16</publish_date>
+ <description>Microsoft Visual Studio 7 is explored in depth,
+ looking at how Visual Basic, Visual C++, C#, and ASP+ are
+ integrated into a comprehensive development
+ environment.
+ </description>
+ </book>
+</catalog>
diff --git a/test/listview_output_cursor.4 b/test/listview_output_cursor.4
index 3980a0b..3f9e3df 100644
--- a/test/listview_output_cursor.4
+++ b/test/listview_output_cursor.4
@@ -6,15 +6,15 @@ S -1 ┋
A └ normal
CSI Reset Replace mode
CSI Erase all
-S 1 ┋Hello x┋
+S 1 ┋World! x┋
A └┛ alt
-S 2 ┋World! x┋
+S 2 ┋2 x┋
A └┛ alt
-S 3 ┋2 x┋
+S 3 ┋+3 x┋
A └┛ alt
-S 4 ┋+3 x┋
+S 4 ┋4 x┋
A └┛ alt
-S 5 ┋4 x┋
+S 5 ┋5 x┋
A └┛ alt
CSI Erase all
CSI Use normal screen buffer
diff --git a/test/listview_output_cursor.5 b/test/listview_output_cursor.5
index c7d432e..f25061e 100644
--- a/test/listview_output_cursor.5
+++ b/test/listview_output_cursor.5
@@ -6,25 +6,25 @@ S -1 ┋
A └ normal
CSI Reset Replace mode
CSI Erase all
-S 1 ┋17 x┋
+S 1 ┋+18 x┋
A └┛ alt
-S 2 ┋+18 x┋
+S 2 ┋19 x┋
A └┛ alt
-S 3 ┋19 x┋
+S 3 ┋20 x┋
A └┛ alt
-S 4 ┋20 x┋
+S 4 ┋21 x┋
A └┛ alt
-S 5 ┋21 x┋
+S 5 ┋22 x┋
A └┛ alt
-S 6 ┋22 x┋
+S 6 ┋23 x┋
A └┛ alt
-S 7 ┋23 x┋
+S 7 ┋24 x┋
A └┛ alt
-S 8 ┋24 x┋
+S 8 ┋25 x┋
A └┛ alt
-S 9 ┋25 x┋
+S 9 ┋26 x┋
A └┛ alt
-S 10 ┋26 x┋
+S 10 ┋27 x┋
A └┛ alt
CSI Erase all
CSI Use normal screen buffer
diff --git a/test/listview_output_cursor.6 b/test/listview_output_cursor.6
index be86ee1..ec80b89 100644
--- a/test/listview_output_cursor.6
+++ b/test/listview_output_cursor.6
@@ -6,25 +6,25 @@ S -1 ┋
A └ normal
CSI Reset Replace mode
CSI Erase all
-S 1 ┋8 x┋
+S 1 ┋9 x┋
A └┛ alt
-S 2 ┋+9 x┋
+S 2 ┋10 x┋
A └┛ alt
-S 3 ┋10 x┋
+S 3 ┋11 x┋
A └┛ alt
-S 4 ┋11 x┋
+S 4 ┋12 x┋
A └┛ alt
-S 5 ┋12 x┋
+S 5 ┋13 x┋
A └┛ alt
-S 6 ┋13 x┋
+S 6 ┋14 x┋
A └┛ alt
-S 7 ┋14 x┋
+S 7 ┋15 x┋
A └┛ alt
-S 8 ┋15 x┋
+S 8 ┋16 x┋
A └┛ alt
-S 9 ┋16 x┋
+S 9 ┋17 x┋
A └┛ alt
-S 10 ┋17 x┋
+S 10 ┋+18 x┋
A └┛ alt
CSI Erase all
CSI Use normal screen buffer
diff --git a/test/lnav_doctests.cc b/test/lnav_doctests.cc
index 423f807..78acf8d 100644
--- a/test/lnav_doctests.cc
+++ b/test/lnav_doctests.cc
@@ -30,12 +30,15 @@
#include "config.h"
#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
+#include "base/from_trait.hh"
#include "byte_array.hh"
#include "data_scanner.hh"
#include "doctest/doctest.h"
#include "lnav_config.hh"
#include "lnav_util.hh"
+#include "ptimec.hh"
#include "relative_time.hh"
+#include "shlex.hh"
#include "unique_path.hh"
using namespace std;
@@ -60,6 +63,66 @@ TEST_CASE("overwritten-logfile") {
}
#endif
+TEST_CASE("shlex::eval")
+{
+ std::string cmdline1 = "${semantic_highlight_color}";
+
+ shlex lexer(cmdline1);
+
+ std::map<std::string, scoped_value_t> vars = {
+ {"semantic_highlight_color", "foo"},
+ };
+
+ std::string out;
+ auto rc = lexer.eval(out, scoped_resolver{&vars});
+ CHECK(rc);
+ CHECK(out == "foo");
+}
+
+TEST_CASE("shlex::split")
+{
+ {
+ std::string cmdline1 = "";
+
+ std::map<std::string, scoped_value_t> vars;
+ shlex lexer(cmdline1);
+ auto split_res = lexer.split(scoped_resolver{&vars});
+ CHECK(split_res.isOk());
+ auto args = split_res.unwrap();
+ CHECK(args.empty());
+ }
+ {
+ std::string cmdline1 = ":sh --name=\"foo $BAR\" echo Hello!";
+
+ std::map<std::string, scoped_value_t> vars;
+ shlex lexer(cmdline1);
+ auto split_res = lexer.split(scoped_resolver{&vars});
+ CHECK(split_res.isOk());
+ auto args = split_res.unwrap();
+ for (const auto& se : args) {
+ printf(" range %d:%d -- %s\n",
+ se.se_origin.sf_begin,
+ se.se_origin.sf_end,
+ se.se_value.c_str());
+ }
+ }
+ {
+ std::string cmdline1 = "abc def $FOO ghi";
+
+ std::map<std::string, scoped_value_t> vars;
+ shlex lexer(cmdline1);
+ auto split_res = lexer.split(scoped_resolver{&vars});
+ CHECK(split_res.isOk());
+ auto args = split_res.unwrap();
+ for (const auto& se : args) {
+ printf(" range %d:%d -- %s\n",
+ se.se_origin.sf_begin,
+ se.se_origin.sf_end,
+ se.se_value.c_str());
+ }
+ }
+}
+
TEST_CASE("byte_array")
{
using my_array_t = byte_array<8>;
@@ -102,8 +165,8 @@ TEST_CASE("ptime_fmt")
TEST_CASE("rgb_color from string")
{
- string name = "SkyBlue1";
- auto color = rgb_color::from_str(name).unwrap();
+ const auto name = string_fragment::from_const("SkyBlue1");
+ auto color = from<rgb_color>(name).unwrap();
CHECK(color.rc_r == 135);
CHECK(color.rc_g == 215);
CHECK(color.rc_b == 255);
@@ -223,7 +286,7 @@ TEST_CASE("data_scanner CSI")
CHECK(tok_res->tr_token == DT_CSI);
CHECK(tok_res->to_string() == "\x1b[32m");
tok_res = ds.tokenize2();
- CHECK(tok_res->tr_token == DT_SYMBOL);
+ CHECK(tok_res->tr_token == DT_WORD);
CHECK(tok_res->to_string() == "Hello");
tok_res = ds.tokenize2();
CHECK(tok_res->tr_token == DT_CSI);
diff --git a/test/log-samples/sample-057d6c669632ef9d07b6adec605f6bdeae19af27.txt b/test/log-samples/sample-057d6c669632ef9d07b6adec605f6bdeae19af27.txt
index c1d9b88..cee08b0 100644
--- a/test/log-samples/sample-057d6c669632ef9d07b6adec605f6bdeae19af27.txt
+++ b/test/log-samples/sample-057d6c669632ef9d07b6adec605f6bdeae19af27.txt
@@ -1,13 +1,11 @@
2013-02-11 06:42:34,310:INFO:com.twisted:Site starting on 8099
- key 29:29 ^
- key 29:40 ^---------^ com.twisted
-pair 29:40 ^---------^ com.twisted
- key 58:58 ^
+word 55:57 ^^ on
+ key 55:57 ^^ on
num 58:62 ^--^ 8099
-pair 58:62 ^--^ 8099
+ val 58:62 ^--^ 8099
+pair 55:62 ^-----^ on 8099
msg ::com.twisted:Site starting on 8099
-format ::#:Site starting on #
+format ::com.twisted:Site starting on #
{
- "col_0": "com.twisted",
- "col_1": 8099
+ "on": 8099
}
diff --git a/test/log-samples/sample-06aaa6f48a801f592558575d886864d6c3ab9ed4.txt b/test/log-samples/sample-06aaa6f48a801f592558575d886864d6c3ab9ed4.txt
index aafb46d..4489627 100644
--- a/test/log-samples/sample-06aaa6f48a801f592558575d886864d6c3ab9ed4.txt
+++ b/test/log-samples/sample-06aaa6f48a801f592558575d886864d6c3ab9ed4.txt
@@ -1,40 +1,40 @@
- Apr 11 16:43:25 localhost smartd[2532]: Device: /dev/sda [SAT], VBOX HARDDISK, S/N:VBc8882b62-a0263a39, FW:1.0, 17.1 GB
- key 40:46 ^----^ Device
-path 48:56 ^------^ /dev/sda
-wspc 56:57 ^
- sym 58:61 ^-^ SAT
- val 58:61 ^-^ SAT
- grp 58:61 ^-^ SAT
- val 48:61 ^-----------^ /dev/sda [SAT
-pair 40:61 ^-------------------^ Device: /dev/sda [SAT
- key 64:64 ^
- sym 64:68 ^--^ VBOX
-wspc 68:69 ^
- sym 69:77 ^------^ HARDDISK
- val 64:77 ^-----------^ VBOX HARDDISK
-pair 64:77 ^-----------^ VBOX HARDDISK
- key 79:79 ^
- sym 79:82 ^-^ S/N
-coln 82:83 ^ :
- sym 83:102 ^-----------------^ VBc8882b62-a0263a39
- val 79:102 ^---------------------^ S/N:VBc8882b62-a0263a39
-pair 79:102 ^---------------------^ S/N:VBc8882b62-a0263a39
- key 104:106 ^^ FW
- num 107:110 ^-^ 1.0
- val 107:110 ^-^ 1.0
-pair 104:110 ^----^ FW:1.0
- key 112:112 ^
- num 112:116 ^--^ 17.1
-wspc 116:117 ^
- sym 117:119 ^^ GB
- val 112:119 ^-----^ 17.1 GB
-pair 112:119 ^-----^ 17.1 GB
-msg :Device: /dev/sda [SAT], VBOX HARDDISK, S/N:VBc8882b62-a0263a39, FW:1.0, 17.1 GB
-format :Device: #], #, #, FW:#, #
+ Apr 11 16:43:25 localhost smartd[2532]: Device: /dev/sda [SAT], VBOX HARDDISK, S/N:VBc8882b62-a0263a39, FW:1.0, 17.1 GB
+ key 48:48 ^
+path 48:56 ^------^ /dev/sda
+ val 48:56 ^------^ /dev/sda
+pair 48:56 ^------^ /dev/sda
+ key 58:58 ^
+ sym 58:61 ^-^ SAT
+ val 58:61 ^-^ SAT
+ grp 58:61 ^-^ SAT
+ val 58:61 ^-^ SAT
+pair 58:61 ^-^ SAT
+ key 64:68 ^--^ VBOX
+ sym 69:77 ^------^ HARDDISK
+ val 69:77 ^------^ HARDDISK
+pair 64:77 ^-----------^ VBOX HARDDISK
+ key 79:82 ^-^ S/N
+ id 83:102 ^-----------------^ VBc8882b62-a0263a39
+ val 83:102 ^-----------------^ VBc8882b62-a0263a39
+pair 79:102 ^---------------------^ S/N:VBc8882b62-a0263a39
+ key 104:106 ^^ FW
+ num 107:110 ^-^ 1.0
+ val 107:110 ^-^ 1.0
+pair 104:110 ^----^ FW:1.0
+ key 112:112 ^
+ num 112:116 ^--^ 17.1
+ sym 117:119 ^^ GB
+ val 112:119 ^-----^ 17.1 GB
+pair 112:119 ^-----^ 17.1 GB
+msg :Device: /dev/sda [SAT], VBOX HARDDISK, S/N:VBc8882b62-a0263a39, FW:1.0, 17.1 GB
+format :Device: # [#], VBOX #, S/N:#, FW:#, #
{
- "Device": "/dev/sda [SAT",
- "col_0": "VBOX HARDDISK",
- "col_1": "S/N:VBc8882b62-a0263a39",
+ "col_0": "/dev/sda",
+ "col_1": [
+ "SAT"
+ ],
+ "VBOX": "HARDDISK",
+ "S/N": "VBc8882b62-a0263a39",
"FW": 1.0,
"col_2": "17.1 GB"
}
diff --git a/test/log-samples/sample-0a470b1dae069dda03984e8e67994d8a.txt b/test/log-samples/sample-0a470b1dae069dda03984e8e67994d8a.txt
new file mode 100644
index 0000000..47859da
--- /dev/null
+++ b/test/log-samples/sample-0a470b1dae069dda03984e8e67994d8a.txt
@@ -0,0 +1,26 @@
+ 2024-01-10T05:27:07.860Z info vmware-vum-server[27909] [Originator@6876 sub=JobDispatcher] [JobDispatcher 2258] Removing task 52b9d918-efe7-29a6-6d38-6eee37e76f87 that imposed VMware vSphere Update Manager load:1, new load: 0, task active Load: 0
+word 122:126 ^--^ task
+ key 122:126 ^--^ task
+uuid 127:163 ^----------------------------------^ 52b9d918-efe7-29a6-6d38-6eee37e76f87
+ val 127:163 ^----------------------------------^ 52b9d918-efe7-29a6-6d38-6eee37e76f87
+pair 122:163 ^---------------------------------------^ task 52b9d918-efe7-29a6-6d38-6eee37e76f87
+ key 207:211 ^--^ load
+ num 212:213 ^ 1
+ val 212:213 ^ 1
+pair 207:213 ^----^ load:1
+ key 215:223 ^------^ new load
+ num 225:226 ^ 0
+ val 225:226 ^ 0
+pair 215:226 ^---------^ new load: 0
+ key 228:244 ^--------------^ task active Load
+ num 246:247 ^ 0
+ val 246:247 ^ 0
+pair 228:247 ^-----------------^ task active Load: 0
+msg :Removing task 52b9d918-efe7-29a6-6d38-6eee37e76f87 that imposed VMware vSphere Update Manager load:1, new load: 0, task active Load: 0
+format :Removing task # that imposed VMware vSphere Update Manager load:#, new load: #, task active Load: #
+{
+ "task": "52b9d918-efe7-29a6-6d38-6eee37e76f87",
+ "load": 1,
+ "new load": 0,
+ "task active Load": 0
+}
diff --git a/test/log-samples/sample-0edd747bbc6d5c173423c079b61c27a4.txt b/test/log-samples/sample-0edd747bbc6d5c173423c079b61c27a4.txt
new file mode 100644
index 0000000..f5efd2a
--- /dev/null
+++ b/test/log-samples/sample-0edd747bbc6d5c173423c079b61c27a4.txt
@@ -0,0 +1,13 @@
+ 2024-01-10T14:29:28.998Z info vmware-vum-server[136895] [Originator@6876 sub=VumVapiAuthzFilter opID=4d3bd186-a9bf-40d3-9b88-5570f530048f] [RequireAdminUserAuthz 362] RequireAdminUserAuthz::Invoke Method is com.vmware.esx.settings.clusters.configuration.drafts.apply
+ key 167:167 ^
+ sym 167:196 ^---------------------------^ RequireAdminUserAuthz::Invoke
+pair 167:196 ^---------------------------^ RequireAdminUserAuthz::Invoke
+ key 207:207 ^
+ sym 207:266 ^---------------------------------------------------------^ com.vmware.esx.settings.clusters.configuration.drafts.apply
+pair 207:266 ^---------------------------------------------------------^ com.vmware.esx.settings.clusters.configuration.drafts.apply
+msg :RequireAdminUserAuthz::Invoke Method is com.vmware.esx.settings.clusters.configuration.drafts.apply
+format :# Method is #
+{
+ "col_0": "RequireAdminUserAuthz::Invoke",
+ "col_1": "com.vmware.esx.settings.clusters.configuration.drafts.apply"
+}
diff --git a/test/log-samples/sample-1aeb47c0a97d19bb7418f0172480e05e49c6e53e.txt b/test/log-samples/sample-1aeb47c0a97d19bb7418f0172480e05e49c6e53e.txt
index 289780a..3f52819 100644
--- a/test/log-samples/sample-1aeb47c0a97d19bb7418f0172480e05e49c6e53e.txt
+++ b/test/log-samples/sample-1aeb47c0a97d19bb7418f0172480e05e49c6e53e.txt
@@ -1,17 +1,19 @@
Apr 29 22:32:27 tstack-centos5 dhclient: bound to 10.1.10.62 -- renewal in 55327 seconds
- key 50:50 ^
+word 47:49 ^^ to
+ key 47:49 ^^ to
ipv4 50:60 ^--------^ 10.1.10.62
-pair 50:60 ^--------^ 10.1.10.62
- key 61:61 ^
- sym 61:63 ^^ --
-pair 61:63 ^^ --
- key 75:75 ^
+ val 50:60 ^--------^ 10.1.10.62
+pair 47:60 ^-----------^ to 10.1.10.62
+ key 64:64 ^
+word 64:71 ^-----^ renewal
+word 72:74 ^^ in
num 75:80 ^---^ 55327
-pair 75:80 ^---^ 55327
+word 81:88 ^-----^ seconds
+ val 64:88 ^----------------------^ renewal in 55327 seconds
+pair 64:88 ^----------------------^ renewal in 55327 seconds
msg :bound to 10.1.10.62 -- renewal in 55327 seconds
-format :bound to # # renewal in # seconds
+format :bound to # -- #
{
- "col_0": "10.1.10.62",
- "col_1": "--",
- "col_2": 55327
+ "to": "10.1.10.62",
+ "col_0": "renewal in 55327 seconds"
}
diff --git a/test/log-samples/sample-207655c886794bc55da226bcb86e3c91.txt b/test/log-samples/sample-207655c886794bc55da226bcb86e3c91.txt
new file mode 100644
index 0000000..26e5bbe
--- /dev/null
+++ b/test/log-samples/sample-207655c886794bc55da226bcb86e3c91.txt
@@ -0,0 +1,33 @@
+ Mar 16 08:09:58 app-1 kernel: [ 0.000000] BIOS-e820: 00000000000e8000 - 0000000000100000 (reserved)
+ key 35:35 ^
+ num 35:43 ^------^ 0.000000
+ val 35:43 ^------^ 0.000000
+ grp 35:43 ^------^ 0.000000
+ val 35:43 ^------^ 0.000000
+pair 35:43 ^------^ 0.000000
+ key 46:55 ^-------^ BIOS-e820
+ hex 57:73 ^--------------^ 00000000000e8000
+ val 57:73 ^--------------^ 00000000000e8000
+pair 46:73 ^-------------------------^ BIOS-e820: 00000000000e8000
+ key 76:76 ^
+hexd 76:92 ^--------------^ 0000000000100000
+ val 76:92 ^--------------^ 0000000000100000
+pair 76:92 ^--------------^ 0000000000100000
+ key 94:94 ^
+word 94:102 ^------^ reserved
+ val 94:102 ^------^ reserved
+ grp 94:102 ^------^ reserved
+ val 94:102 ^------^ reserved
+pair 94:102 ^------^ reserved
+msg :[ 0.000000] BIOS-e820: 00000000000e8000 - 0000000000100000 (reserved)
+format :[ #] BIOS-e820: # - # (#)
+{
+ "col_0": [
+ 0.000000
+ ],
+ "BIOS-e820": "00000000000e8000",
+ "col_1": "0000000000100000",
+ "col_2": [
+ "reserved"
+ ]
+}
diff --git a/test/log-samples/sample-27353a72ba4025448f261dcfa6ea16e474187795.txt b/test/log-samples/sample-27353a72ba4025448f261dcfa6ea16e474187795.txt
index 3a7277b..84404d1 100644
--- a/test/log-samples/sample-27353a72ba4025448f261dcfa6ea16e474187795.txt
+++ b/test/log-samples/sample-27353a72ba4025448f261dcfa6ea16e474187795.txt
@@ -1,4 +1,30 @@
Jun 3 07:00:23 Tim-Stacks-iMac.local sudo[2326]: stack : TTY=ttys002 ; PWD=/ ; USER=root ; COMMAND=/bin/ls
-msg :
-format :
-null
+ key 53:53 ^
+word 53:58 ^---^ stack
+ val 53:58 ^---^ stack
+pair 53:58 ^---^ stack
+ key 61:64 ^-^ TTY
+ sym 65:72 ^-----^ ttys002
+ val 65:72 ^-----^ ttys002
+pair 61:72 ^---------^ TTY=ttys002
+ key 75:78 ^-^ PWD
+path 79:80 ^ /
+ val 79:80 ^ /
+pair 75:80 ^---^ PWD=/
+ key 83:87 ^--^ USER
+word 88:92 ^--^ root
+ val 88:92 ^--^ root
+pair 83:92 ^-------^ USER=root
+ key 95:102 ^-----^ COMMAND
+path 103:110 ^-----^ /bin/ls
+ val 103:110 ^-----^ /bin/ls
+pair 95:110 ^-------------^ COMMAND=/bin/ls
+msg :stack : TTY=ttys002 ; PWD=/ ; USER=root ; COMMAND=/bin/ls
+format :# : TTY=# ; PWD=# ; USER=# ; COMMAND=#
+{
+ "col_0": "stack",
+ "TTY": "ttys002",
+ "PWD": "/",
+ "USER": "root",
+ "COMMAND": "/bin/ls"
+}
diff --git a/test/log-samples/sample-3136b918134d37827ee97f35adb130a5.txt b/test/log-samples/sample-3136b918134d37827ee97f35adb130a5.txt
new file mode 100644
index 0000000..6712649
--- /dev/null
+++ b/test/log-samples/sample-3136b918134d37827ee97f35adb130a5.txt
@@ -0,0 +1,43 @@
+ 2024-01-11T10:46:05.874Z info vmware-vum-server[1243065] [Originator@6876 sub=EHP opID=eb9d737f-fa4f-421d-9beb-ce31fb27938f] [host-553] [vSphere HA] [com.vmware.vcIntegrity.lifecycle.health.vc.host_ha_state] returned status: OK
+ key 126:126 ^
+ id 126:134 ^------^ host-553
+ val 126:134 ^------^ host-553
+ grp 126:134 ^------^ host-553
+ val 126:134 ^------^ host-553
+pair 126:134 ^------^ host-553
+ key 137:137 ^
+ sym 137:144 ^-----^ vSphere
+ sym 145:147 ^^ HA
+ val 137:147 ^--------^ vSphere HA
+ grp 137:147 ^--------^ vSphere HA
+ val 137:147 ^--------^ vSphere HA
+pair 137:147 ^--------^ vSphere HA
+ key 150:150 ^
+ sym 150:206 ^------------------------------------------------------^ com.vmware.vcIntegrity.lifecycle.health.vc.host_ha_state
+ val 150:206 ^------------------------------------------------------^ com.vmware.vcIntegrity.lifecycle.health.vc.host_ha_state
+ grp 150:206 ^------------------------------------------------------^ com.vmware.vcIntegrity.lifecycle.health.vc.host_ha_state
+ val 150:206 ^------------------------------------------------------^ com.vmware.vcIntegrity.lifecycle.health.vc.host_ha_state
+pair 150:206 ^------------------------------------------------------^ com.vmware.vcIntegrity.lifecycle.health.vc.host_ha_state
+ key 208:208 ^
+word 208:216 ^------^ returned
+ val 208:216 ^------^ returned
+pair 208:216 ^------^ returned
+ key 217:223 ^----^ status
+ sym 225:227 ^^ OK
+ val 225:227 ^^ OK
+pair 217:227 ^--------^ status: OK
+msg :[host-553] [vSphere HA] [com.vmware.vcIntegrity.lifecycle.health.vc.host_ha_state] returned status: OK
+format :[#] [#] [#] # status: #
+{
+ "col_0": [
+ "host-553"
+ ],
+ "col_1": [
+ "vSphere HA"
+ ],
+ "col_2": [
+ "com.vmware.vcIntegrity.lifecycle.health.vc.host_ha_state"
+ ],
+ "col_3": "returned",
+ "status": "OK"
+}
diff --git a/test/log-samples/sample-5cbaeeb96f1f0c11a93656107801efc3.txt b/test/log-samples/sample-5cbaeeb96f1f0c11a93656107801efc3.txt
new file mode 100644
index 0000000..e8002c0
--- /dev/null
+++ b/test/log-samples/sample-5cbaeeb96f1f0c11a93656107801efc3.txt
@@ -0,0 +1,52 @@
+ 2024-01-10T05:26:20.440Z error vmware-vum-server[28046] [Originator@6876 sub=Key] [key 59] [backtrace begin] product: VMware Update Manager, version: 8.0.3, build: build-22994205, tag: vmware-vum-server, cpu: x86_64, os: linux, buildType: release
+ key 92:92 ^
+word 92:101 ^-------^ backtrace
+word 102:107 ^---^ begin
+ val 92:107 ^-------------^ backtrace begin
+ grp 92:107 ^-------------^ backtrace begin
+ val 92:107 ^-------------^ backtrace begin
+pair 92:107 ^-------------^ backtrace begin
+ key 109:116 ^-----^ product
+ sym 118:124 ^----^ VMware
+word 125:131 ^----^ Update
+word 132:139 ^-----^ Manager
+ val 118:139 ^-------------------^ VMware Update Manager
+pair 109:139 ^----------------------------^ product: VMware Update Manager
+ key 141:148 ^-----^ version
+vers 150:155 ^---^ 8.0.3
+ val 150:155 ^---^ 8.0.3
+pair 141:155 ^------------^ version: 8.0.3
+ key 157:162 ^---^ build
+ id 164:178 ^------------^ build-22994205
+ val 164:178 ^------------^ build-22994205
+pair 157:178 ^-------------------^ build: build-22994205
+ key 180:183 ^-^ tag
+ id 185:202 ^---------------^ vmware-vum-server
+ val 185:202 ^---------------^ vmware-vum-server
+pair 180:202 ^--------------------^ tag: vmware-vum-server
+ key 204:207 ^-^ cpu
+ sym 209:215 ^----^ x86_64
+ val 209:215 ^----^ x86_64
+pair 204:215 ^---------^ cpu: x86_64
+ key 217:219 ^^ os
+word 221:226 ^---^ linux
+ val 221:226 ^---^ linux
+pair 217:226 ^-------^ os: linux
+ key 228:237 ^-------^ buildType
+word 239:246 ^-----^ release
+ val 239:246 ^-----^ release
+pair 228:246 ^----------------^ buildType: release
+msg :[backtrace begin] product: VMware Update Manager, version: 8.0.3, build: build-22994205, tag: vmware-vum-server, cpu: x86_64, os: linux, buildType: release
+format :[#] product: #, version: #, build: #, tag: #, cpu: #, os: #, buildType: #
+{
+ "col_0": [
+ "backtrace begin"
+ ],
+ "product": "VMware Update Manager",
+ "version": "8.0.3",
+ "build": "build-22994205",
+ "tag": "vmware-vum-server",
+ "cpu": "x86_64",
+ "os": "linux",
+ "buildType": "release"
+}
diff --git a/test/log-samples/sample-63068cd0931f8cbd22c2f15ac318af12.txt b/test/log-samples/sample-63068cd0931f8cbd22c2f15ac318af12.txt
new file mode 100644
index 0000000..8715526
--- /dev/null
+++ b/test/log-samples/sample-63068cd0931f8cbd22c2f15ac318af12.txt
@@ -0,0 +1,135 @@
+ 2021-09-25T11:22:08.034Z info vsand[1000946202] [opID=SWI-5e21ef1d-ddc1-f459 VsanPyVmomiProfiler::logProfile] VIS.GetFileShareObjects: 0.01s, consumed: 97564KB (+0KB), consumedPeak: 98644KB (+0KB), effectiveMin: 117872KB (+0KB), effectiveMinPeak: 121336KB (+0KB), requestedMinPeak: 121336KB (+0KB)
+ key 112:135 ^---------------------^ VIS.GetFileShareObjects
+ num 137:141 ^--^ 0.01
+unit 141:142 ^ s
+meas 137:142 ^---^ 0.01s
+ val 137:142 ^---^ 0.01s
+pair 112:142 ^----------------------------^ VIS.GetFileShareObjects: 0.01s
+ key 144:152 ^------^ consumed
+ num 154:159 ^---^ 97564
+unit 159:161 ^^ KB
+meas 154:161 ^-----^ 97564KB
+ val 154:161 ^-----^ 97564KB
+pair 144:161 ^---------------^ consumed: 97564KB
+ key 164:164 ^
+ num 164:165 ^ 0
+unit 165:167 ^^ KB
+meas 164:167 ^-^ 0KB
+ val 164:167 ^-^ 0KB
+ grp 164:167 ^-^ 0KB
+ val 164:167 ^-^ 0KB
+pair 164:167 ^-^ 0KB
+ key 170:182 ^----------^ consumedPeak
+ num 184:189 ^---^ 98644
+unit 189:191 ^^ KB
+meas 184:191 ^-----^ 98644KB
+ val 184:191 ^-----^ 98644KB
+pair 170:191 ^-------------------^ consumedPeak: 98644KB
+ key 194:194 ^
+ num 194:195 ^ 0
+unit 195:197 ^^ KB
+meas 194:197 ^-^ 0KB
+ val 194:197 ^-^ 0KB
+ grp 194:197 ^-^ 0KB
+ val 194:197 ^-^ 0KB
+pair 194:197 ^-^ 0KB
+ key 200:212 ^----------^ effectiveMin
+ num 214:220 ^----^ 117872
+unit 220:222 ^^ KB
+meas 214:222 ^------^ 117872KB
+ val 214:222 ^------^ 117872KB
+pair 200:222 ^--------------------^ effectiveMin: 117872KB
+ key 225:225 ^
+ num 225:226 ^ 0
+unit 226:228 ^^ KB
+meas 225:228 ^-^ 0KB
+ val 225:228 ^-^ 0KB
+ grp 225:228 ^-^ 0KB
+ val 225:228 ^-^ 0KB
+pair 225:228 ^-^ 0KB
+ key 231:247 ^--------------^ effectiveMinPeak
+ num 249:255 ^----^ 121336
+unit 255:257 ^^ KB
+meas 249:257 ^------^ 121336KB
+ val 249:257 ^------^ 121336KB
+pair 231:257 ^------------------------^ effectiveMinPeak: 121336KB
+ key 260:260 ^
+ num 260:261 ^ 0
+unit 261:263 ^^ KB
+meas 260:263 ^-^ 0KB
+ val 260:263 ^-^ 0KB
+ grp 260:263 ^-^ 0KB
+ val 260:263 ^-^ 0KB
+pair 260:263 ^-^ 0KB
+ key 266:282 ^--------------^ requestedMinPeak
+ num 284:290 ^----^ 121336
+unit 290:292 ^^ KB
+meas 284:292 ^------^ 121336KB
+ val 284:292 ^------^ 121336KB
+pair 266:292 ^------------------------^ requestedMinPeak: 121336KB
+ key 295:295 ^
+ num 295:296 ^ 0
+unit 296:298 ^^ KB
+meas 295:298 ^-^ 0KB
+ val 295:298 ^-^ 0KB
+ grp 295:298 ^-^ 0KB
+ val 295:298 ^-^ 0KB
+pair 295:298 ^-^ 0KB
+msg :VIS.GetFileShareObjects: 0.01s, consumed: 97564KB (+0KB), consumedPeak: 98644KB (+0KB), effectiveMin: 117872KB (+0KB), effectiveMinPeak: 121336KB (+0KB), requestedMinPeak: 121336KB (+0KB)
+format :VIS.GetFileShareObjects: #, consumed: # (+#), consumedPeak: # (+#), effectiveMin: # (+#), effectiveMinPeak: # (+#), requestedMinPeak: # (+#)
+{
+ "VIS.GetFileShareObjects": [
+ 0.01,
+ "s"
+ ],
+ "consumed": [
+ 97564,
+ "KB"
+ ],
+ "col_0": [
+ [
+ 0,
+ "KB"
+ ]
+ ],
+ "consumedPeak": [
+ 98644,
+ "KB"
+ ],
+ "col_1": [
+ [
+ 0,
+ "KB"
+ ]
+ ],
+ "effectiveMin": [
+ 117872,
+ "KB"
+ ],
+ "col_2": [
+ [
+ 0,
+ "KB"
+ ]
+ ],
+ "effectiveMinPeak": [
+ 121336,
+ "KB"
+ ],
+ "col_3": [
+ [
+ 0,
+ "KB"
+ ]
+ ],
+ "requestedMinPeak": [
+ 121336,
+ "KB"
+ ],
+ "col_4": [
+ [
+ 0,
+ "KB"
+ ]
+ ]
+}
diff --git a/test/log-samples/sample-67484ecc8091237a27f12863d36b4d03.txt b/test/log-samples/sample-67484ecc8091237a27f12863d36b4d03.txt
new file mode 100644
index 0000000..5f7cf36
--- /dev/null
+++ b/test/log-samples/sample-67484ecc8091237a27f12863d36b4d03.txt
@@ -0,0 +1,26 @@
+ 2024-01-10T05:27:07.452Z info vmware-vum-server[28092] [Originator@6876 sub=com.vmware.vcIntegrity.lifecycle.DesiredScanClusterTask] [Task, 524] Task:com.vmware.vcIntegrity.lifecycle.DesiredScanClusterTask ID:52b9d918-efe7-29a6-6d38-6eee37e76f87. Combining scan results for 32 hosts
+ key 145:149 ^--^ Task
+ sym 150:205 ^-----------------------------------------------------^ com.vmware.vcIntegrity.lifecycle.DesiredScanClusterTask
+ val 150:205 ^-----------------------------------------------------^ com.vmware.vcIntegrity.lifecycle.DesiredScanClusterTask
+pair 145:205 ^----------------------------------------------------------^ Task:com.vmware.vcIntegrity.lifecycle.DesiredScanClusterTask
+ key 206:208 ^^ ID
+uuid 209:245 ^----------------------------------^ 52b9d918-efe7-29a6-6d38-6eee37e76f87
+ val 209:245 ^----------------------------------^ 52b9d918-efe7-29a6-6d38-6eee37e76f87
+pair 206:245 ^-------------------------------------^ ID:52b9d918-efe7-29a6-6d38-6eee37e76f87
+word 270:273 ^-^ for
+ key 270:273 ^-^ for
+ num 274:276 ^^ 32
+ val 274:276 ^^ 32
+pair 270:276 ^----^ for 32
+ key 277:277 ^
+word 277:282 ^---^ hosts
+ val 277:282 ^---^ hosts
+pair 277:282 ^---^ hosts
+msg :Task:com.vmware.vcIntegrity.lifecycle.DesiredScanClusterTask ID:52b9d918-efe7-29a6-6d38-6eee37e76f87. Combining scan results for 32 hosts
+format :Task:# ID:#. Combining scan results for # #
+{
+ "Task": "com.vmware.vcIntegrity.lifecycle.DesiredScanClusterTask",
+ "ID": "52b9d918-efe7-29a6-6d38-6eee37e76f87",
+ "for": 32,
+ "col_0": "hosts"
+}
diff --git a/test/log-samples/sample-70c906b3c1a1cf03f15bde92ee78edfa6f9b7960.txt b/test/log-samples/sample-70c906b3c1a1cf03f15bde92ee78edfa6f9b7960.txt
index 9d80bf9..34ff50f 100644
--- a/test/log-samples/sample-70c906b3c1a1cf03f15bde92ee78edfa6f9b7960.txt
+++ b/test/log-samples/sample-70c906b3c1a1cf03f15bde92ee78edfa6f9b7960.txt
@@ -1,4 +1,33 @@
Jun 3 07:02:37 Tim-Stacks-iMac.local sudo[2717]: stack : TTY=ttys002 ; PWD=/ ; USER=root ; COMMAND=/usr/bin/env VAR1=foo ls
-msg :
-format :
-null
+ key 53:53 ^
+word 53:58 ^---^ stack
+ val 53:58 ^---^ stack
+pair 53:58 ^---^ stack
+ key 61:64 ^-^ TTY
+ sym 65:72 ^-----^ ttys002
+ val 65:72 ^-----^ ttys002
+pair 61:72 ^---------^ TTY=ttys002
+ key 75:78 ^-^ PWD
+path 79:80 ^ /
+ val 79:80 ^ /
+pair 75:80 ^---^ PWD=/
+ key 83:87 ^--^ USER
+word 88:92 ^--^ root
+ val 88:92 ^--^ root
+pair 83:92 ^-------^ USER=root
+ key 95:102 ^-----^ COMMAND
+path 103:115 ^----------^ /usr/bin/env
+ sym 116:120 ^--^ VAR1
+word 121:124 ^-^ foo
+word 125:127 ^^ ls
+ val 103:127 ^----------------------^ /usr/bin/env VAR1=foo ls
+pair 95:127 ^------------------------------^ COMMAND=/usr/bin/env VAR1=foo ls
+msg :stack : TTY=ttys002 ; PWD=/ ; USER=root ; COMMAND=/usr/bin/env VAR1=foo ls
+format :# : TTY=# ; PWD=# ; USER=# ; COMMAND=#
+{
+ "col_0": "stack",
+ "TTY": "ttys002",
+ "PWD": "/",
+ "USER": "root",
+ "COMMAND": "/usr/bin/env VAR1=foo ls"
+}
diff --git a/test/log-samples/sample-8a6527cdf27015a0204702430b6eca09.txt b/test/log-samples/sample-8a6527cdf27015a0204702430b6eca09.txt
new file mode 100644
index 0000000..8f6bb65
--- /dev/null
+++ b/test/log-samples/sample-8a6527cdf27015a0204702430b6eca09.txt
@@ -0,0 +1,135 @@
+ 2021-09-22T05:54:16.060Z info vsand[1000946217] [opID=Thread-2 VsanPyVmomiProfiler::logProfile] get-disk-data: 0.00s, consumed: 97792KB (+0KB), consumedPeak: 98644KB (+0KB), effectiveMin: 118228KB (+0KB), effectiveMinPeak: 121336KB (+0KB), requestedMinPeak: 121336KB (+0KB)
+ key 98:111 ^-----------^ get-disk-data
+ num 113:117 ^--^ 0.00
+unit 117:118 ^ s
+meas 113:118 ^---^ 0.00s
+ val 113:118 ^---^ 0.00s
+pair 98:118 ^------------------^ get-disk-data: 0.00s
+ key 120:128 ^------^ consumed
+ num 130:135 ^---^ 97792
+unit 135:137 ^^ KB
+meas 130:137 ^-----^ 97792KB
+ val 130:137 ^-----^ 97792KB
+pair 120:137 ^---------------^ consumed: 97792KB
+ key 140:140 ^
+ num 140:141 ^ 0
+unit 141:143 ^^ KB
+meas 140:143 ^-^ 0KB
+ val 140:143 ^-^ 0KB
+ grp 140:143 ^-^ 0KB
+ val 140:143 ^-^ 0KB
+pair 140:143 ^-^ 0KB
+ key 146:158 ^----------^ consumedPeak
+ num 160:165 ^---^ 98644
+unit 165:167 ^^ KB
+meas 160:167 ^-----^ 98644KB
+ val 160:167 ^-----^ 98644KB
+pair 146:167 ^-------------------^ consumedPeak: 98644KB
+ key 170:170 ^
+ num 170:171 ^ 0
+unit 171:173 ^^ KB
+meas 170:173 ^-^ 0KB
+ val 170:173 ^-^ 0KB
+ grp 170:173 ^-^ 0KB
+ val 170:173 ^-^ 0KB
+pair 170:173 ^-^ 0KB
+ key 176:188 ^----------^ effectiveMin
+ num 190:196 ^----^ 118228
+unit 196:198 ^^ KB
+meas 190:198 ^------^ 118228KB
+ val 190:198 ^------^ 118228KB
+pair 176:198 ^--------------------^ effectiveMin: 118228KB
+ key 201:201 ^
+ num 201:202 ^ 0
+unit 202:204 ^^ KB
+meas 201:204 ^-^ 0KB
+ val 201:204 ^-^ 0KB
+ grp 201:204 ^-^ 0KB
+ val 201:204 ^-^ 0KB
+pair 201:204 ^-^ 0KB
+ key 207:223 ^--------------^ effectiveMinPeak
+ num 225:231 ^----^ 121336
+unit 231:233 ^^ KB
+meas 225:233 ^------^ 121336KB
+ val 225:233 ^------^ 121336KB
+pair 207:233 ^------------------------^ effectiveMinPeak: 121336KB
+ key 236:236 ^
+ num 236:237 ^ 0
+unit 237:239 ^^ KB
+meas 236:239 ^-^ 0KB
+ val 236:239 ^-^ 0KB
+ grp 236:239 ^-^ 0KB
+ val 236:239 ^-^ 0KB
+pair 236:239 ^-^ 0KB
+ key 242:258 ^--------------^ requestedMinPeak
+ num 260:266 ^----^ 121336
+unit 266:268 ^^ KB
+meas 260:268 ^------^ 121336KB
+ val 260:268 ^------^ 121336KB
+pair 242:268 ^------------------------^ requestedMinPeak: 121336KB
+ key 271:271 ^
+ num 271:272 ^ 0
+unit 272:274 ^^ KB
+meas 271:274 ^-^ 0KB
+ val 271:274 ^-^ 0KB
+ grp 271:274 ^-^ 0KB
+ val 271:274 ^-^ 0KB
+pair 271:274 ^-^ 0KB
+msg :get-disk-data: 0.00s, consumed: 97792KB (+0KB), consumedPeak: 98644KB (+0KB), effectiveMin: 118228KB (+0KB), effectiveMinPeak: 121336KB (+0KB), requestedMinPeak: 121336KB (+0KB)
+format :get-disk-data: #, consumed: # (+#), consumedPeak: # (+#), effectiveMin: # (+#), effectiveMinPeak: # (+#), requestedMinPeak: # (+#)
+{
+ "get-disk-data": [
+ 0.00,
+ "s"
+ ],
+ "consumed": [
+ 97792,
+ "KB"
+ ],
+ "col_0": [
+ [
+ 0,
+ "KB"
+ ]
+ ],
+ "consumedPeak": [
+ 98644,
+ "KB"
+ ],
+ "col_1": [
+ [
+ 0,
+ "KB"
+ ]
+ ],
+ "effectiveMin": [
+ 118228,
+ "KB"
+ ],
+ "col_2": [
+ [
+ 0,
+ "KB"
+ ]
+ ],
+ "effectiveMinPeak": [
+ 121336,
+ "KB"
+ ],
+ "col_3": [
+ [
+ 0,
+ "KB"
+ ]
+ ],
+ "requestedMinPeak": [
+ 121336,
+ "KB"
+ ],
+ "col_4": [
+ [
+ 0,
+ "KB"
+ ]
+ ]
+}
diff --git a/test/log-samples/sample-97f2106d5fa94132715730416e86b3de.txt b/test/log-samples/sample-97f2106d5fa94132715730416e86b3de.txt
new file mode 100644
index 0000000..027a3eb
--- /dev/null
+++ b/test/log-samples/sample-97f2106d5fa94132715730416e86b3de.txt
@@ -0,0 +1,16 @@
+ 2024-01-11T10:46:03.218Z info vmware-vum-server[28274] [Originator@6876 sub=HostLocator opID=eb9d737f-fa4f-421d-9beb-ce31fb27938f] [hostLocator 239] Getting Management IP for host host-556: 10.172.44.70
+word 175:179 ^--^ host
+ key 175:179 ^--^ host
+ id 180:188 ^------^ host-556
+ val 180:188 ^------^ host-556
+pair 175:188 ^-----------^ host host-556
+ key 190:190 ^
+ipv4 190:202 ^----------^ 10.172.44.70
+ val 190:202 ^----------^ 10.172.44.70
+pair 190:202 ^----------^ 10.172.44.70
+msg :Getting Management IP for host host-556: 10.172.44.70
+format :Getting Management IP for host #: #
+{
+ "host": "host-556",
+ "col_0": "10.172.44.70"
+}
diff --git a/test/log-samples/sample-aca2878a2e50779c6697c0747ab1f60e4b368dcb.txt b/test/log-samples/sample-aca2878a2e50779c6697c0747ab1f60e4b368dcb.txt
index f5c31f2..b69ecf8 100644
--- a/test/log-samples/sample-aca2878a2e50779c6697c0747ab1f60e4b368dcb.txt
+++ b/test/log-samples/sample-aca2878a2e50779c6697c0747ab1f60e4b368dcb.txt
@@ -3,6 +3,7 @@
path 43:64 ^-------------------^ /sbin/dhclient-script
val 43:64 ^-------------------^ /sbin/dhclient-script
pair 43:64 ^-------------------^ /sbin/dhclient-script
+word 67:74 ^-----^ updated
key 67:74 ^-----^ updated
path 75:91 ^--------------^ /etc/resolv.conf
val 75:91 ^--------------^ /etc/resolv.conf
diff --git a/test/log-samples/sample-ad31f12d2adabd07e3ddda3ad5b0dbf6b49c4c99.txt b/test/log-samples/sample-ad31f12d2adabd07e3ddda3ad5b0dbf6b49c4c99.txt
index 63c22cc..7307f40 100644
--- a/test/log-samples/sample-ad31f12d2adabd07e3ddda3ad5b0dbf6b49c4c99.txt
+++ b/test/log-samples/sample-ad31f12d2adabd07e3ddda3ad5b0dbf6b49c4c99.txt
@@ -3,19 +3,14 @@
quot 49:49 ^
val 49:49 ^
pair 43:49 ^----^ vmnet:
- key 50:67 ^---------------^ VNetUserIf_Create
-word 69:76 ^-----^ created
-wspc 76:77 ^
- sym 77:83 ^----^ userIf
-wspc 83:84 ^
word 84:86 ^^ at
-wspc 86:87 ^
+ key 84:86 ^^ at
hex 87:105 ^----------------^ 0xffffff802644f400
- val 69:105 ^----------------------------------^ created userIf at 0xffffff802644f400
-pair 50:105 ^-----------------------------------------------------^ VNetUserIf_Create: created userIf at 0xffffff802644f400
+ val 87:105 ^----------------^ 0xffffff802644f400
+pair 84:105 ^-------------------^ at 0xffffff802644f400
msg :vmnet: VNetUserIf_Create: created userIf at 0xffffff802644f400
-format :vmnet:# VNetUserIf_Create: #
+format :vmnet:# VNetUserIf_Create: created userIf at #
{
"vmnet": "",
- "VNetUserIf_Create": "created userIf at 0xffffff802644f400"
+ "at": "0xffffff802644f400"
}
diff --git a/test/log-samples/sample-bc6f6cf689fa5455616b4d9fbe121a48d3c9de59.txt b/test/log-samples/sample-bc6f6cf689fa5455616b4d9fbe121a48d3c9de59.txt
index 32d86d0..72cc4e2 100644
--- a/test/log-samples/sample-bc6f6cf689fa5455616b4d9fbe121a48d3c9de59.txt
+++ b/test/log-samples/sample-bc6f6cf689fa5455616b4d9fbe121a48d3c9de59.txt
@@ -1,23 +1,22 @@
Apr 29 08:13:42 tstack-centos5 dhclient: DHCPNAK from 10.1.10.1 (xid=0x4e17f141)
- key 41:41 ^
- sym 41:48 ^-----^ DHCPNAK
-pair 41:48 ^-----^ DHCPNAK
- key 54:54 ^
+word 49:53 ^--^ from
+ key 49:53 ^--^ from
ipv4 54:63 ^-------^ 10.1.10.1
-pair 54:63 ^-------^ 10.1.10.1
+ val 54:63 ^-------^ 10.1.10.1
+pair 49:63 ^------------^ from 10.1.10.1
key 65:65 ^
key 65:68 ^-^ xid
hex 69:79 ^--------^ 0x4e17f141
val 69:79 ^--------^ 0x4e17f141
pair 65:79 ^------------^ xid=0x4e17f141
grp 65:79 ^------------^ xid=0x4e17f141
+ val 65:79 ^------------^ xid=0x4e17f141
pair 65:79 ^------------^ xid=0x4e17f141
msg :DHCPNAK from 10.1.10.1 (xid=0x4e17f141)
-format :# from # (#)
+format :DHCPNAK from # (#)
{
- "col_0": "DHCPNAK",
- "col_1": "10.1.10.1",
- "col_2": [
+ "from": "10.1.10.1",
+ "col_0": [
{
"xid": "0x4e17f141"
}
diff --git a/test/log-samples/sample-bed6bfb07b2af767547cedbf489c15ce.txt b/test/log-samples/sample-bed6bfb07b2af767547cedbf489c15ce.txt
new file mode 100644
index 0000000..595f53b
--- /dev/null
+++ b/test/log-samples/sample-bed6bfb07b2af767547cedbf489c15ce.txt
@@ -0,0 +1,15 @@
+ 2024-01-10T05:22:13.258Z info vmware-vum-server[28092] [Originator@6876 sub=ClusterConfigListener] [clusterConfigListener 60] Got UUID for host: host-24 -> 4c4c4544-0052-4310-8057-b3c04f543532
+ key 126:143 ^---------------^ Got UUID for host
+ id 145:152 ^-----^ host-24
+ val 145:152 ^-----^ host-24
+pair 126:152 ^------------------------^ Got UUID for host: host-24
+ key 156:156 ^
+uuid 156:192 ^----------------------------------^ 4c4c4544-0052-4310-8057-b3c04f543532
+ val 156:192 ^----------------------------------^ 4c4c4544-0052-4310-8057-b3c04f543532
+pair 156:192 ^----------------------------------^ 4c4c4544-0052-4310-8057-b3c04f543532
+msg :Got UUID for host: host-24 -> 4c4c4544-0052-4310-8057-b3c04f543532
+format :Got UUID for host: # -> #
+{
+ "Got UUID for host": "host-24",
+ "col_0": "4c4c4544-0052-4310-8057-b3c04f543532"
+}
diff --git a/test/log-samples/sample-c15acd32844669d23d0cbc88ec548129ed2c592e.txt b/test/log-samples/sample-c15acd32844669d23d0cbc88ec548129ed2c592e.txt
index a68d490..ae28119 100644
--- a/test/log-samples/sample-c15acd32844669d23d0cbc88ec548129ed2c592e.txt
+++ b/test/log-samples/sample-c15acd32844669d23d0cbc88ec548129ed2c592e.txt
@@ -1,8 +1,21 @@
Jul 14 14:31:06 linjenkins3 kernel: [31809412.513897] [UFW BLOCK] IN=eth0 OUT= MAC=40:40:2e:9a:ad:92:c4:71:fe:f1:b9:7f:08:00 SRC=69.60.116.202 DST=173.203.237.224 LEN=44 TOS=0x00 PREC=0x00 TTL=29 ID=15852 PROTO=TCP SPT=43998 DPT=3389 WINDOW=3072 RES=0x00 SYN URGP=0
- key 37:68 ^-----------------------------^ 31809412.513897] [UFW BLOCK] IN
+ key 37:37 ^
+ num 37:52 ^-------------^ 31809412.513897
+ val 37:52 ^-------------^ 31809412.513897
+ grp 37:52 ^-------------^ 31809412.513897
+ val 37:52 ^-------------^ 31809412.513897
+pair 37:52 ^-------------^ 31809412.513897
+ key 55:55 ^
+ sym 55:58 ^-^ UFW
+ sym 59:64 ^---^ BLOCK
+ val 55:64 ^-------^ UFW BLOCK
+ grp 55:64 ^-------^ UFW BLOCK
+ val 55:64 ^-------^ UFW BLOCK
+pair 55:64 ^-------^ UFW BLOCK
+ key 66:68 ^^ IN
sym 69:73 ^--^ eth0
val 69:73 ^--^ eth0
-pair 37:73 ^----------------------------------^ 31809412.513897] [UFW BLOCK] IN=eth0
+pair 66:73 ^-----^ IN=eth0
key 74:77 ^-^ OUT
quot 78:78 ^
val 78:78 ^
@@ -57,18 +70,22 @@ pair 225:233
pair 234:245 ^---------^ WINDOW=3072
key 246:249 ^-^ RES
hex 250:254 ^--^ 0x00
-wspc 254:255 ^
- sym 255:258 ^-^ SYN
- val 250:258 ^------^ 0x00 SYN
-pair 246:258 ^----------^ RES=0x00 SYN
+ val 250:254 ^--^ 0x00
+pair 246:254 ^------^ RES=0x00
key 259:263 ^--^ URGP
num 264:265 ^ 0
val 264:265 ^ 0
pair 259:265 ^----^ URGP=0
msg :[31809412.513897] [UFW BLOCK] IN=eth0 OUT= MAC=40:40:2e:9a:ad:92:c4:71:fe:f1:b9:7f:08:00 SRC=69.60.116.202 DST=173.203.237.224 LEN=44 TOS=0x00 PREC=0x00 TTL=29 ID=15852 PROTO=TCP SPT=43998 DPT=3389 WINDOW=3072 RES=0x00 SYN URGP=0
-format :[31809412.513897] [UFW BLOCK] IN=# OUT=# MAC=# SRC=# DST=# LEN=# TOS=# PREC=# TTL=# ID=# PROTO=# SPT=# DPT=# WINDOW=# RES=# URGP=#
+format :[#] [#] IN=# OUT=# MAC=# SRC=# DST=# LEN=# TOS=# PREC=# TTL=# ID=# PROTO=# SPT=# DPT=# WINDOW=# RES=# SYN URGP=#
{
- "31809412.513897] [UFW BLOCK] IN": "eth0",
+ "col_0": [
+ 31809412.513897
+ ],
+ "col_1": [
+ "UFW BLOCK"
+ ],
+ "IN": "eth0",
"OUT": "",
"MAC": "40:40:2e:9a:ad:92:c4:71:fe:f1:b9:7f:08:00",
"SRC": "69.60.116.202",
@@ -82,6 +99,6 @@ format :[31809412.513897] [UFW BLOCK] IN=# OUT=# MAC=# SRC=# DST=# LEN=# TO
"SPT": 43998,
"DPT": 3389,
"WINDOW": 3072,
- "RES": "0x00 SYN",
+ "RES": "0x00",
"URGP": 0
}
diff --git a/test/log-samples/sample-c23f22c1b932b904203e018f78dead95fb89b15d.txt b/test/log-samples/sample-c23f22c1b932b904203e018f78dead95fb89b15d.txt
index 376752b..3d0fe7c 100644
--- a/test/log-samples/sample-c23f22c1b932b904203e018f78dead95fb89b15d.txt
+++ b/test/log-samples/sample-c23f22c1b932b904203e018f78dead95fb89b15d.txt
@@ -1,35 +1,34 @@
Apr 29 08:13:42 tstack-centos5 dhclient: DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 5 (xid=0xd16b79d)
- key 41:41 ^
- sym 41:53 ^----------^ DHCPDISCOVER
-pair 41:53 ^----------^ DHCPDISCOVER
- key 57:57 ^
- sym 57:61 ^--^ eth0
-pair 57:61 ^--^ eth0
- key 65:65 ^
+word 62:64 ^^ to
+ key 62:64 ^^ to
ipv4 65:80 ^-------------^ 255.255.255.255
-pair 65:80 ^-------------^ 255.255.255.255
- key 86:86 ^
+ val 65:80 ^-------------^ 255.255.255.255
+pair 62:80 ^----------------^ to 255.255.255.255
+word 81:85 ^--^ port
+ key 81:85 ^--^ port
num 86:88 ^^ 67
-pair 86:88 ^^ 67
- key 98:98 ^
+ val 86:88 ^^ 67
+pair 81:88 ^-----^ port 67
+word 89:97 ^------^ interval
+ key 89:97 ^------^ interval
num 98:99 ^ 5
-pair 98:99 ^ 5
+ val 98:99 ^ 5
+pair 89:99 ^--------^ interval 5
key 101:101 ^
key 101:104 ^-^ xid
hex 105:114 ^-------^ 0xd16b79d
val 105:114 ^-------^ 0xd16b79d
pair 101:114 ^-----------^ xid=0xd16b79d
grp 101:114 ^-----------^ xid=0xd16b79d
+ val 101:114 ^-----------^ xid=0xd16b79d
pair 101:114 ^-----------^ xid=0xd16b79d
msg :DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 5 (xid=0xd16b79d)
-format :# on # to # port # interval # (#)
+format :DHCPDISCOVER on eth0 to # port # interval # (#)
{
- "col_0": "DHCPDISCOVER",
- "col_1": "eth0",
- "col_2": "255.255.255.255",
- "col_3": 67,
- "col_4": 5,
- "col_5": [
+ "to": "255.255.255.255",
+ "port": 67,
+ "interval": 5,
+ "col_0": [
{
"xid": "0xd16b79d"
}
diff --git a/test/log-samples/sample-d0d6b3fc6766caac5ac3fac4a3754ceaab785eb8.txt b/test/log-samples/sample-d0d6b3fc6766caac5ac3fac4a3754ceaab785eb8.txt
index b7aad42..7fb8c1d 100644
--- a/test/log-samples/sample-d0d6b3fc6766caac5ac3fac4a3754ceaab785eb8.txt
+++ b/test/log-samples/sample-d0d6b3fc6766caac5ac3fac4a3754ceaab785eb8.txt
@@ -1,31 +1,28 @@
Apr 29 22:32:26 tstack-centos5 dhclient: DHCPREQUEST on eth0 to 10.1.10.1 port 67 (xid=0xd16b79d)
- key 41:41 ^
- sym 41:52 ^---------^ DHCPREQUEST
-pair 41:52 ^---------^ DHCPREQUEST
- key 56:56 ^
- sym 56:60 ^--^ eth0
-pair 56:60 ^--^ eth0
- key 64:64 ^
+word 61:63 ^^ to
+ key 61:63 ^^ to
ipv4 64:73 ^-------^ 10.1.10.1
-pair 64:73 ^-------^ 10.1.10.1
- key 79:79 ^
+ val 64:73 ^-------^ 10.1.10.1
+pair 61:73 ^----------^ to 10.1.10.1
+word 74:78 ^--^ port
+ key 74:78 ^--^ port
num 79:81 ^^ 67
-pair 79:81 ^^ 67
+ val 79:81 ^^ 67
+pair 74:81 ^-----^ port 67
key 83:83 ^
key 83:86 ^-^ xid
hex 87:96 ^-------^ 0xd16b79d
val 87:96 ^-------^ 0xd16b79d
pair 83:96 ^-----------^ xid=0xd16b79d
grp 83:96 ^-----------^ xid=0xd16b79d
+ val 83:96 ^-----------^ xid=0xd16b79d
pair 83:96 ^-----------^ xid=0xd16b79d
msg :DHCPREQUEST on eth0 to 10.1.10.1 port 67 (xid=0xd16b79d)
-format :# on # to # port # (#)
+format :DHCPREQUEST on eth0 to # port # (#)
{
- "col_0": "DHCPREQUEST",
- "col_1": "eth0",
- "col_2": "10.1.10.1",
- "col_3": 67,
- "col_4": [
+ "to": "10.1.10.1",
+ "port": 67,
+ "col_0": [
{
"xid": "0xd16b79d"
}
diff --git a/test/log-samples/sample-dd7d406352ec6a11d966b6f015a9482b060f2b29.txt b/test/log-samples/sample-dd7d406352ec6a11d966b6f015a9482b060f2b29.txt
index bcf3908..9801802 100644
--- a/test/log-samples/sample-dd7d406352ec6a11d966b6f015a9482b060f2b29.txt
+++ b/test/log-samples/sample-dd7d406352ec6a11d966b6f015a9482b060f2b29.txt
@@ -1,23 +1,24 @@
2013-02-11 06:42:34,311:INFO:com.twisted:Starting factory <twisted.web.server.Site instance at 0x1de9290>
- key 29:29 ^
key 29:40 ^---------^ com.twisted
-pair 29:40 ^---------^ com.twisted
- key 59:59 ^
- sym 59:82 ^---------------------^ twisted.web.server.Site
-wspc 82:83 ^
-word 83:91 ^------^ instance
-wspc 91:92 ^
+word 41:49 ^------^ Starting
+ val 41:49 ^------^ Starting
+pair 29:49 ^------------------^ com.twisted:Starting
+ key 50:57 ^-----^ factory
word 92:94 ^^ at
-wspc 94:95 ^
+ key 92:94 ^^ at
hex 95:104 ^-------^ 0x1de9290
- val 59:104 ^-------------------------------------------^ twisted.web.server.Site instance at 0x1de9290
- grp 59:104 ^-------------------------------------------^ twisted.web.server.Site instance at 0x1de9290
-pair 59:104 ^-------------------------------------------^ twisted.web.server.Site instance at 0x1de9290
+ val 95:104 ^-------^ 0x1de9290
+pair 92:104 ^----------^ at 0x1de9290
+ grp 92:104 ^----------^ at 0x1de9290
+ val 92:104 ^----------^ at 0x1de9290
+pair 50:104 ^----------------------------------------------------^ factory <twisted.web.server.Site instance at 0x1de9290
msg ::com.twisted:Starting factory <twisted.web.server.Site instance at 0x1de9290>
-format ::#:Starting factory <#>
+format ::com.twisted:# factory <twisted.web.server.Site instance #>
{
- "col_0": "com.twisted",
- "col_1": [
- "twisted.web.server.Site instance at 0x1de9290"
+ "com.twisted": "Starting",
+ "factory": [
+ {
+ "at": "0x1de9290"
+ }
]
}
diff --git a/test/log-samples/sample-e779d1771e34f5203ae73e85802e78002be63db6.txt b/test/log-samples/sample-e779d1771e34f5203ae73e85802e78002be63db6.txt
index d527217..ff58580 100644
--- a/test/log-samples/sample-e779d1771e34f5203ae73e85802e78002be63db6.txt
+++ b/test/log-samples/sample-e779d1771e34f5203ae73e85802e78002be63db6.txt
@@ -1,23 +1,22 @@
Apr 29 22:32:27 tstack-centos5 dhclient: DHCPACK from 10.1.10.1 (xid=0xd16b79d)
- key 41:41 ^
- sym 41:48 ^-----^ DHCPACK
-pair 41:48 ^-----^ DHCPACK
- key 54:54 ^
+word 49:53 ^--^ from
+ key 49:53 ^--^ from
ipv4 54:63 ^-------^ 10.1.10.1
-pair 54:63 ^-------^ 10.1.10.1
+ val 54:63 ^-------^ 10.1.10.1
+pair 49:63 ^------------^ from 10.1.10.1
key 65:65 ^
key 65:68 ^-^ xid
hex 69:78 ^-------^ 0xd16b79d
val 69:78 ^-------^ 0xd16b79d
pair 65:78 ^-----------^ xid=0xd16b79d
grp 65:78 ^-----------^ xid=0xd16b79d
+ val 65:78 ^-----------^ xid=0xd16b79d
pair 65:78 ^-----------^ xid=0xd16b79d
msg :DHCPACK from 10.1.10.1 (xid=0xd16b79d)
-format :# from # (#)
+format :DHCPACK from # (#)
{
- "col_0": "DHCPACK",
- "col_1": "10.1.10.1",
- "col_2": [
+ "from": "10.1.10.1",
+ "col_0": [
{
"xid": "0xd16b79d"
}
diff --git a/test/log-samples/sample-e8729677c1b443d8f65124db0d5b6f04.txt b/test/log-samples/sample-e8729677c1b443d8f65124db0d5b6f04.txt
new file mode 100644
index 0000000..54b30fd
--- /dev/null
+++ b/test/log-samples/sample-e8729677c1b443d8f65124db0d5b6f04.txt
@@ -0,0 +1,22 @@
+ 2022-05-17T07:40:38.051Z In(30) init[1001390328]: inittab: /usr/lib/vmware/configmanager/bin/applyconfig --bootstrap (11740460 us)
+ key 50:57 ^-----^ inittab
+path 59:104 ^-------------------------------------------^ /usr/lib/vmware/configmanager/bin/applyconfig
+ val 59:104 ^-------------------------------------------^ /usr/lib/vmware/configmanager/bin/applyconfig
+pair 50:104 ^----------------------------------------------------^ inittab: /usr/lib/vmware/configmanager/bin/applyconfig
+ key 105:116 ^---------^ --bootstrap
+ num 118:126 ^------^ 11740460
+ val 118:126 ^------^ 11740460
+word 127:129 ^^ us
+ val 127:129 ^^ us
+ grp 118:129 ^---------^ 11740460 us
+ val 118:129 ^---------^ 11740460 us
+pair 105:129 ^----------------------^ --bootstrap (11740460 us
+msg :inittab: /usr/lib/vmware/configmanager/bin/applyconfig --bootstrap (11740460 us)
+format :inittab: # --bootstrap (#)
+{
+ "inittab": "/usr/lib/vmware/configmanager/bin/applyconfig",
+ "--bootstrap": [
+ 11740460,
+ "us"
+ ]
+}
diff --git a/test/log-samples/sample-eef32793daf841a576d8a5cd27239d5d.txt b/test/log-samples/sample-eef32793daf841a576d8a5cd27239d5d.txt
new file mode 100644
index 0000000..cac7219
--- /dev/null
+++ b/test/log-samples/sample-eef32793daf841a576d8a5cd27239d5d.txt
@@ -0,0 +1,16 @@
+ 2022-05-17T08:56:54.107Z In(14) settingsd[1001392457]: debug [ConfigStore:66064b9700] File /usr/lib/vmware/configmanager/apply_modules/advanced_options/plugin.json does not support type:3
+word 86:90 ^--^ File
+ key 86:90 ^--^ File
+path 91:163 ^----------------------------------------------------------------------^ /usr/lib/vmware/configmanager/apply_modules/advanced_options/plugin.json
+ val 91:163 ^----------------------------------------------------------------------^ /usr/lib/vmware/configmanager/apply_modules/advanced_options/plugin.json
+pair 86:163 ^---------------------------------------------------------------------------^ File /usr/lib/vmware/configmanager/apply_modules/advanced_options/plugin.json
+ key 181:185 ^--^ type
+ num 186:187 ^ 3
+ val 186:187 ^ 3
+pair 181:187 ^----^ type:3
+msg :File /usr/lib/vmware/configmanager/apply_modules/advanced_options/plugin.json does not support type:3
+format :File # does not support type:#
+{
+ "File": "/usr/lib/vmware/configmanager/apply_modules/advanced_options/plugin.json",
+ "type": 3
+}
diff --git a/test/log-samples/sample-f2fba0d0b1e57f9a707ea96a8a4efcdc.txt b/test/log-samples/sample-f2fba0d0b1e57f9a707ea96a8a4efcdc.txt
new file mode 100644
index 0000000..9e35f8f
--- /dev/null
+++ b/test/log-samples/sample-f2fba0d0b1e57f9a707ea96a8a4efcdc.txt
@@ -0,0 +1,31 @@
+ Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+ key 31:31 ^
+word 31:39 ^------^ timstack
+ val 31:39 ^------^ timstack
+pair 31:39 ^------^ timstack
+ key 42:45 ^-^ TTY
+ id 46:51 ^---^ pts/6
+ val 46:51 ^---^ pts/6
+pair 42:51 ^-------^ TTY=pts/6
+ key 54:57 ^-^ PWD
+path 58:91 ^-------------------------------^ /auto/wstimstack/rpms/lbuild/test
+ val 58:91 ^-------------------------------^ /auto/wstimstack/rpms/lbuild/test
+pair 54:91 ^-----------------------------------^ PWD=/auto/wstimstack/rpms/lbuild/test
+ key 94:98 ^--^ USER
+word 99:103 ^--^ root
+ val 99:103 ^--^ root
+pair 94:103 ^-------^ USER=root
+ key 106:113 ^-----^ COMMAND
+path 114:127 ^-----------^ /usr/bin/tail
+path 128:145 ^---------------^ /var/log/messages
+ val 114:145 ^-----------------------------^ /usr/bin/tail /var/log/messages
+pair 106:145 ^-------------------------------------^ COMMAND=/usr/bin/tail /var/log/messages
+msg :timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+format :# : TTY=# ; PWD=# ; USER=# ; COMMAND=#
+{
+ "col_0": "timstack",
+ "TTY": "pts/6",
+ "PWD": "/auto/wstimstack/rpms/lbuild/test",
+ "USER": "root",
+ "COMMAND": "/usr/bin/tail /var/log/messages"
+}
diff --git a/test/log-samples/sample-f632067ddac054da85b5cade949c6d94.txt b/test/log-samples/sample-f632067ddac054da85b5cade949c6d94.txt
new file mode 100644
index 0000000..048aa7a
--- /dev/null
+++ b/test/log-samples/sample-f632067ddac054da85b5cade949c6d94.txt
@@ -0,0 +1,27 @@
+ 2021-09-02T03:36:27.389Z warning fdm[1000873987] [Originator@6876 sub=Cluster opID=SWI-636bf2b7] Sendto[ipv6] fd01:0:106:5:0:a:0:1511: No route to host
+ key 97:103 ^----^ Sendto
+ sym 104:108 ^--^ ipv6
+ val 104:108 ^--^ ipv6
+ grp 104:108 ^--^ ipv6
+ val 104:108 ^--^ ipv6
+pair 97:108 ^---------^ Sendto[ipv6
+ key 110:110 ^
+ipv6 110:133 ^---------------------^ fd01:0:106:5:0:a:0:1511
+ val 110:133 ^---------------------^ fd01:0:106:5:0:a:0:1511
+pair 110:133 ^---------------------^ fd01:0:106:5:0:a:0:1511
+ key 135:135 ^
+word 135:137 ^^ No
+word 138:143 ^---^ route
+word 144:146 ^^ to
+word 147:151 ^--^ host
+ val 135:151 ^--------------^ No route to host
+pair 135:151 ^--------------^ No route to host
+msg :Sendto[ipv6] fd01:0:106:5:0:a:0:1511: No route to host
+format :Sendto[#] #: #
+{
+ "Sendto": [
+ "ipv6"
+ ],
+ "col_0": "fd01:0:106:5:0:a:0:1511",
+ "col_1": "No route to host"
+}
diff --git a/test/logfile_haproxy.0 b/test/logfile_haproxy.0
index a9ee9e6..92e1a8b 100644
--- a/test/logfile_haproxy.0
+++ b/test/logfile_haproxy.0
@@ -9,9 +9,9 @@ Feb 25 16:20:04 192.168.4.2 haproxy[7]: 141.35.244.171:53337 [25/Feb/2019:16:20:
Feb 25 16:20:09 192.168.4.2 haproxy[7]: 89.247.124.65:15564 [25/Feb/2019:16:20:06.321] prod_http_in~ bk_ktest_kt/nginx_sonst 0/0/1/43/2707 200 26170 - - ---- 3/3/1/1/0 0/0 {Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0} {} "GET /portal/?Script=934&onlinetest=korrektur&anm=13915&currentPage=0 HTTP/1.1"
Feb 25 16:20:11 192.168.4.2 haproxy[7]: 89.247.124.65:15565 [25/Feb/2019:16:20:08.872] prod_http_in~ bk_ktest_kt/nginx_sonst 0/0/1/26/2442 200 26170 - - ---- 3/2/1/1/0 0/0 {Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0} {} "GET /portal/?Script=934&onlinetest=korrektur&anm=13915&currentPage=0 HTTP/1.1"
Feb 25 16:20:12 192.168.4.2 haproxy[7]: 87.183.41.77:50186 [25/Feb/2019:16:20:11.910] prod_http_in~ bk_ktest_kt/nginx_sonst 0/0/0/236/236 200 4586 - - ---- 4/4/3/3/0 0/0 {Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0} {} "GET /portal/?Script=934&lehrer=77798 HTTP/1.1"
-Feb 25 16:20:12 192.168.4.2 haproxy[7]: 87.183.41.77:50186 [25/Feb/2019:16:20:12.234] prod_http_in~ bk_ktest_sonst/nginx_sonst 0/0/1/0/1 200 16416 - - ---- 4/4/0/0/0 0/0 {Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0} {} "GET /media/core/bootstrap_3.3.7/css/bootstrap.css?1550939643 HTTP/1.1"
-Feb 25 16:20:12 192.168.4.2 haproxy[7]: 87.183.41.77:50186 [25/Feb/2019:16:20:12.317] prod_http_in~ bk_ktest_sonst/nginx_sonst 0/0/0/1/1 200 11065 - - ---- 9/9/0/0/0 0/0 {Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0} {} "GET /media/core/jquery/jquery-ui-1.12.1.js?1550939557 HTTP/1.1"
-Feb 25 16:20:12 192.168.4.2 haproxy[7]: 95.216.197.33:56224 [25/Feb/2019:16:20:10.111] prod_http_in/sktst2: SSL handshake failure
-Feb 25 16:20:12 192.168.4.2 haproxy[7]: 87.183.41.77:50188 [25/Feb/2019:16:20:12.321] prod_http_in~ bk_ktest_sonst/nginx_sonst 0/0/1/0/1 200 5959 - - ---- 9/9/0/0/0 0/0 {Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0} {} "GET /media/pi_fontawesome/css/font-awesome.css?1550939694 HTTP/1.1"
-Feb 25 16:20:12 192.168.4.2 haproxy[7]: 87.183.41.77:50187 [25/Feb/2019:16:20:12.325] prod_http_in~ bk_ktest_sonst/nginx_sonst 0/0/1/0/1 200 1859 - - ---- 9/9/0/0/0 0/0 {Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0} {} "GET /media/pi_popup/1.1.0/magnific-popup.css?1550939704 HTTP/1.1"
-Feb 25 16:20:12 192.168.4.2 haproxy[7]: 87.183.41.77:50189 [25/Feb/2019:16:20:12.331] prod_http_in~ bk_ktest_sonst/nginx_sonst 0/0/1/0/1 200 2496 - - ---- 9/9/0/0/0 0/0 {Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0} {} "GET /media/core/core.css?1550939640 HTTP/1.1"
+Feb 25 16:20:13 192.168.4.2 haproxy[7]: 87.183.41.77:50186 [25/Feb/2019:16:20:13.234] prod_http_in~ bk_ktest_sonst/nginx_sonst 0/0/1/0/1 200 16416 - - ---- 4/4/0/0/0 0/0 {Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0} {} "GET /media/core/bootstrap_3.3.7/css/bootstrap.css?1550939643 HTTP/1.1"
+Feb 25 16:20:14 192.168.4.2 haproxy[7]: 87.183.41.77:50186 [25/Feb/2019:16:20:14.317] prod_http_in~ bk_ktest_sonst/nginx_sonst 0/0/0/1/1 200 11065 - - ---- 9/9/0/0/0 0/0 {Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0} {} "GET /media/core/jquery/jquery-ui-1.12.1.js?1550939557 HTTP/1.1"
+Feb 25 16:20:15 192.168.4.2 haproxy[7]: 95.216.197.33:56224 [25/Feb/2019:16:20:10.111] prod_http_in/sktst2: SSL handshake failure
+Feb 25 16:20:16 192.168.4.2 haproxy[7]: 87.183.41.77:50188 [25/Feb/2019:16:20:12.321] prod_http_in~ bk_ktest_sonst/nginx_sonst 0/0/1/0/1 200 5959 - - ---- 9/9/0/0/0 0/0 {Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0} {} "GET /media/pi_fontawesome/css/font-awesome.css?1550939694 HTTP/1.1"
+Feb 25 16:20:17 192.168.4.2 haproxy[7]: 87.183.41.77:50187 [25/Feb/2019:16:20:12.325] prod_http_in~ bk_ktest_sonst/nginx_sonst 0/0/1/0/1 200 1859 - - ---- 9/9/0/0/0 0/0 {Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0} {} "GET /media/pi_popup/1.1.0/magnific-popup.css?1550939704 HTTP/1.1"
+Feb 25 16:20:18 192.168.4.2 haproxy[7]: 87.183.41.77:50189 [25/Feb/2019:16:20:12.331] prod_http_in~ bk_ktest_sonst/nginx_sonst 0/0/1/0/1 200 2496 - - ---- 9/9/0/0/0 0/0 {Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:65.0) Gecko/20100101 Firefox/65.0} {} "GET /media/core/core.css?1550939640 HTTP/1.1"
diff --git a/test/logfile_json.json b/test/logfile_json.json
index 55657f7..dd6c9d2 100644
--- a/test/logfile_json.json
+++ b/test/logfile_json.json
@@ -1,11 +1,11 @@
-{"ts": "2013-09-06T20:00:48.124817Z", "lvl": "TRACE", "msg": "trace test"}
-{"ts": "2013-09-06T20:00:49.124817Z", "lvl": "INFO", "msg": "Starting up \u001B[0;32mservice\u001B[0m"}
+{"ts": "2013-09-06T20:00:48.124817Z", "logger": "com.example.foo.bar.bazzer", "lvl": "TRACE", "msg": "trace test"}
+{"ts": "2013-09-06T20:00:49.124817Z", "logger": "com.example.demo", "lvl": "INFO", "msg": "Starting up \u001B[0;32mservice\u001B[0m"}
{"ts": "2013-09-06T22:00:49.124817Z", "lvl": "INFO", "msg": "Shutting down service", "user": "steve@example.com"}
-{"ts": "2013-09-06T22:00:59.124817Z", "lvl": "DEBUG5", "msg": "Details...\n"}
-{"ts": "2013-09-06T22:00:59.124817Z", "lvl": "DEBUG4", "msg": "Details...\n"}
+{"ts": "2013-09-06T22:00:59.124817Z", "lvl": "DEBUG5", "msg": "D\bDetails...\n"}
+{"ts": "2013-09-06T22:00:59.124817Z", "lvl": "DEBUG4", "msg": "D\bDe\betails...\n"}
{"ts": "2013-09-06T22:00:59.124817Z", "lvl": "DEBUG3", "msg": "Details...\n"}
{"ts": "2013-09-06T22:00:59.124817Z", "lvl": "DEBUG2", "msg": "Details...\n"}
-{"ts": "2013-09-06T22:00:59.124817Z", "lvl": "DEBUG", "msg": "Details..."}
+{"ts": "2013-09-06 22:01:00Z", "lvl": "DEBUG", "msg": "Details..."}
{"ts": "2013-09-06T22:01:49.124817Z", "lvl": "STATS", "msg": "1 beat per second"}
{"ts": "2013-09-06T22:01:49.124817Z", "lvl": "WARNING", "msg": "not looking good"}
{"ts": "2013-09-06T22:01:49.124817Z", "lvl": "ERROR", "msg": "looking bad"}
diff --git a/test/logfile_json_subsec.json b/test/logfile_json_subsec.json
index 3ddc190..c572651 100644
--- a/test/logfile_json_subsec.json
+++ b/test/logfile_json_subsec.json
@@ -1,2 +1,2 @@
{"instant":{"epochSecond": 1663977609,"nanoOfSecond": 484000000}, "msg": "Hello, World!"}
-{"instant":{"epochSecond": 1663977619,"nanoOfSecond": 222000000}, "msg": "Goodbye, World!"}
+{"instant":{"epochSecond": 1663977619,"nanoOfSecond": 222000123}, "msg": "Goodbye, World!"}
diff --git a/test/logfile_nextcloud.0 b/test/logfile_nextcloud.0
new file mode 100644
index 0000000..efa3a1a
--- /dev/null
+++ b/test/logfile_nextcloud.0
@@ -0,0 +1,5 @@
+{"reqId":"twvbRFk1OwgHo2bqggnx","level":1,"time":"2023-10-01T02:39:09+00:00","remoteAddr":"10.0.0.1","user":"admin","app":"files_antivirus","method":"","url":"--","message":"Tried to scan non file","userAgent":"--","version":"29.1.1.0","data":{"app":"files_antivirus"}}
+{"reqId":"twvbRFk1OwgHo2bqggnx","level":1,"time":"2023-10-01T02:39:09+00:00","remoteAddr":"","user":"--","app":"files_antivirus","method":"","url":"--","message":"Tried to scan non file","userAgent":"--","version":"29.1.1.0","data":{"app":"files_antivirus"}}
+{"reqId":"pZpwRdWUcILeyKMZNPQt","level":1,"time":"2023-10-01T02:50:03+00:00","remoteAddr":"","user":"--","app":"fulltextsearch_elasticsearch","method":"","url":"--","message":"Request: PUT http://elasticsearch:9200/nextcloud/_doc/files%3A1780281","userAgent":"--","version":"29.1.1.0","data":{"app":"fulltextsearch_elasticsearch","request":"{\"[object] (GuzzleHttp\\Psr7\\Request)\":{\"GuzzleHttp\\Psr7\\Requestmethod\":\"PUT\",\"GuzzleHttp\\Psr7\\RequestrequestTarget\":null,\"GuzzleHttp\\Psr7\\Requesturi\":{\"[object] (GuzzleHttp\\Psr7\\Uri)\":{\"GuzzleHttp\\Psr7\\Urischeme\":\"http\",\"GuzzleHttp\\Psr7\\UriuserInfo\":\"\",\"GuzzleHttp\\Psr7\\Urihost\":\"elasticsearch\",\"GuzzleHttp\\Psr7\\Uriport\":9200,\"GuzzleHttp\\Psr7\\Uripath\":\"/nextcloud/_doc/files%3A1780281\",\"GuzzleHttp\\Psr7\\Uriquery\":\"\",\"GuzzleHttp\\Psr7\\Urifragment\":\"\",\"GuzzleHttp\\Psr7\\UricomposedComponents\":\"http://elasticsearch:9200/nextcloud/_doc/files%3A1780281\"}},\"GuzzleHttp\\Psr7\\Requestheaders\":{\"Host\":[\"elasticsearch:9200\"],\"Accept\":[\"application/vnd.elasticsearch+json; compatible-with=8\"],\"Content-Type\":[\"application/vnd.elasticsearch+json; compatible-with=8\"],\"User-Agent\":[\"elasticsearch-php/8.6.1 (Linux 5.15.0-84-generic; PHP 8.2.11)\"],\"x-elastic-client-meta\":[\"es=8.6.1,php=8.2.11,t=8.7.0,a=0,gu=7.8.0\"]},\"GuzzleHttp\\Psr7\\RequestheaderNames\":{\"accept\":\"Accept\",\"content-type\":\"Content-Type\",\"host\":\"Host\",\"user-agent\":\"User-Agent\",\"x-elastic-client-meta\":\"x-elastic-client-meta\"},\"GuzzleHttp\\Psr7\\Requestprotocol\":\"1.1\",\"GuzzleHttp\\Psr7\\Requeststream\":{\"[object] (GuzzleHttp\\Psr7\\Stream)\":{\"GuzzleHttp\\Psr7\\Streamstream\":\"[resource] Resource id #1635\",\"GuzzleHttp\\Psr7\\Streamsize\":null,\"GuzzleHttp\\Psr7\\Streamseekable\":true,\"GuzzleHttp\\Psr7\\Streamreadable\":true,\"GuzzleHttp\\Psr7\\Streamwritable\":true,\"GuzzleHttp\\Psr7\\Streamuri\":\"php://temp\",\"GuzzleHttp\\Psr7\\StreamcustomMetadata\":[]}}}}"}}
+{"reqId":"WO0XBZZfZbekindHeptb","level":1,"time":"2023-10-16T01:47:44+00:00","remoteAddr":"192.168.1.1","user":"jeff","app":"memories","method":"PATCH","url":"--","message":"Memories: Updated item successfully","userAgent":"--","version":"29.1.2.1","data":{"app":"memories"}}
+{"reqId":"SblFU0l19re9TAE2UQft","level":1,"time":"2023-10-16T01:50:18+00:00","remoteAddr":"192.168.1.1","user":"jeff","app":"files_versions","method":"","url":"--","message":"Mark to expire /Documents/phat.txt next version should be 1697407738 or smaller. (prevTimestamp: 1697411338; step: 3600","userAgent":"--","version":"29.1.2.1","data":{"app":"files_versions"}}
diff --git a/test/logfile_partitions.0 b/test/logfile_partitions.0
new file mode 100644
index 0000000..5e5487e
--- /dev/null
+++ b/test/logfile_partitions.0
@@ -0,0 +1,82 @@
+Apr 28 04:02:03 tstack-centos5 syslogd 1.4.1: restart.
+Apr 28 04:04:01 tstack-centos5 avahi-daemon[2467]: Invalid query packet.
+Apr 28 06:53:54 tstack-centos5 dhclient: DHCPREQUEST on eth0 to 10.1.10.1 port 67 (xid=0x654a04aa)
+Apr 28 06:53:54 tstack-centos5 dhclient: DHCPNAK from 10.1.10.1 (xid=0x654a04aa)
+Apr 28 06:53:54 tstack-centos5 NET[31050]: /sbin/dhclient-script : updated /etc/resolv.conf
+Apr 28 06:53:54 tstack-centos5 avahi-daemon[2467]: Withdrawing address record for 10.1.10.49 on eth0.
+Apr 28 06:53:54 tstack-centos5 avahi-daemon[2467]: Leaving mDNS multicast group on interface eth0.IPv4 with address 10.1.10.49.
+Apr 28 06:53:54 tstack-centos5 avahi-daemon[2467]: iface.c: interface_mdns_mcast_join() called but no local address available.
+Apr 28 06:53:54 tstack-centos5 avahi-daemon[2467]: Interface eth0.IPv4 no longer relevant for mDNS.
+Apr 28 06:53:54 tstack-centos5 dhclient: DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 5 (xid=0x4e17f141)
+Apr 28 06:53:55 tstack-centos5 dhclient: DHCPOFFER from 10.1.10.1
+Apr 28 06:53:55 tstack-centos5 dhclient: DHCPREQUEST on eth0 to 255.255.255.255 port 67 (xid=0x4e17f141)
+Apr 28 06:53:55 tstack-centos5 dhclient: DHCPACK from 10.1.10.1 (xid=0x4e17f141)
+Apr 28 06:53:55 tstack-centos5 avahi-daemon[2467]: New relevant interface eth0.IPv4 for mDNS.
+Apr 28 06:53:55 tstack-centos5 avahi-daemon[2467]: Joining mDNS multicast group on interface eth0.IPv4 with address 10.1.10.103.
+Apr 28 06:53:55 tstack-centos5 avahi-daemon[2467]: Registering new address record for 10.1.10.103 on eth0.
+Apr 28 06:53:55 tstack-centos5 avahi-daemon[2467]: Withdrawing address record for 10.1.10.103 on eth0.
+Apr 28 06:53:55 tstack-centos5 avahi-daemon[2467]: Leaving mDNS multicast group on interface eth0.IPv4 with address 10.1.10.103.
+Apr 28 06:53:55 tstack-centos5 avahi-daemon[2467]: iface.c: interface_mdns_mcast_join() called but no local address available.
+Apr 28 06:53:55 tstack-centos5 avahi-daemon[2467]: Interface eth0.IPv4 no longer relevant for mDNS.
+Apr 28 06:53:55 tstack-centos5 avahi-daemon[2467]: New relevant interface eth0.IPv4 for mDNS.
+Apr 28 06:53:55 tstack-centos5 avahi-daemon[2467]: Joining mDNS multicast group on interface eth0.IPv4 with address 10.1.10.103.
+Apr 28 06:53:55 tstack-centos5 avahi-daemon[2467]: Registering new address record for 10.1.10.103 on eth0.
+Apr 28 06:53:55 tstack-centos5 NET[31132]: /sbin/dhclient-script : updated /etc/resolv.conf
+Apr 28 06:53:55 tstack-centos5 dhclient: bound to 10.1.10.103 -- renewal in 54694 seconds.
+Apr 28 07:03:50 tstack-centos5 avahi-daemon[2467]: Invalid query packet.
+Apr 28 17:01:19 tstack-centos5 avahi-daemon[2467]: Invalid query packet.
+Apr 28 22:05:28 tstack-centos5 dhclient: DHCPREQUEST on eth0 to 10.1.10.1 port 67 (xid=0x4e17f141)
+Apr 28 22:05:29 tstack-centos5 dhclient: DHCPACK from 10.1.10.1 (xid=0x4e17f141)
+Apr 28 22:05:29 tstack-centos5 dhclient: bound to 10.1.10.103 -- renewal in 8787 seconds.
+Apr 28 22:10:01 tstack-centos5 avahi-daemon[2467]: Invalid query packet.
+Apr 29 00:31:55 tstack-centos5 dhclient: DHCPREQUEST on eth0 to 10.1.10.1 port 67 (xid=0x4e17f141)
+Apr 29 00:31:56 tstack-centos5 dhclient: DHCPACK from 10.1.10.1 (xid=0x4e17f141)
+Apr 29 00:31:56 tstack-centos5 dhclient: bound to 10.1.10.103 -- renewal in 9938 seconds.
+Apr 29 00:39:19 tstack-centos5 avahi-daemon[2467]: Invalid query packet.
+Apr 29 03:17:34 tstack-centos5 dhclient: DHCPREQUEST on eth0 to 10.1.10.1 port 67 (xid=0x4e17f141)
+Apr 29 03:17:34 tstack-centos5 dhclient: DHCPACK from 10.1.10.1 (xid=0x4e17f141)
+Apr 29 03:17:34 tstack-centos5 dhclient: bound to 10.1.10.103 -- renewal in 2656 seconds.
+Apr 29 03:18:07 tstack-centos5 avahi-daemon[2467]: Invalid query packet.
+Apr 29 04:01:50 tstack-centos5 dhclient: DHCPREQUEST on eth0 to 10.1.10.1 port 67 (xid=0x4e17f141)
+Apr 29 04:01:50 tstack-centos5 dhclient: DHCPACK from 10.1.10.1 (xid=0x4e17f141)
+Apr 29 04:01:50 tstack-centos5 dhclient: bound to 10.1.10.103 -- renewal in 15112 seconds.
+Apr 29 04:10:03 tstack-centos5 avahi-daemon[2467]: Invalid query packet.
+Apr 29 05:55:18 tstack-centos5 avahi-daemon[2467]: Invalid query packet.
+Apr 29 06:39:04 tstack-centos5 avahi-daemon[2467]: Invalid query packet.
+Apr 29 08:13:41 tstack-centos5 dhclient: DHCPREQUEST on eth0 to 10.1.10.1 port 67 (xid=0x4e17f141)
+Apr 29 08:13:42 tstack-centos5 dhclient: DHCPNAK from 10.1.10.1 (xid=0x4e17f141)
+Apr 29 08:13:42 tstack-centos5 NET[13600]: /sbin/dhclient-script : updated /etc/resolv.conf
+Apr 29 08:13:42 tstack-centos5 avahi-daemon[2467]: Withdrawing address record for 10.1.10.103 on eth0.
+Apr 29 08:13:42 tstack-centos5 avahi-daemon[2467]: Leaving mDNS multicast group on interface eth0.IPv4 with address 10.1.10.103.
+Apr 29 08:13:42 tstack-centos5 avahi-daemon[2467]: iface.c: interface_mdns_mcast_join() called but no local address available.
+Apr 29 08:13:42 tstack-centos5 avahi-daemon[2467]: Interface eth0.IPv4 no longer relevant for mDNS.
+Apr 29 08:13:42 tstack-centos5 dhclient: DHCPDISCOVER on eth0 to 255.255.255.255 port 67 interval 5 (xid=0xd16b79d)
+Apr 29 08:13:43 tstack-centos5 dhclient: DHCPOFFER from 10.1.10.1
+Apr 29 08:13:43 tstack-centos5 dhclient: DHCPREQUEST on eth0 to 255.255.255.255 port 67 (xid=0xd16b79d)
+Apr 29 08:13:43 tstack-centos5 dhclient: DHCPACK from 10.1.10.1 (xid=0xd16b79d)
+Apr 29 08:13:43 tstack-centos5 avahi-daemon[2467]: New relevant interface eth0.IPv4 for mDNS.
+Apr 29 08:13:43 tstack-centos5 avahi-daemon[2467]: Joining mDNS multicast group on interface eth0.IPv4 with address 10.1.10.62.
+Apr 29 08:13:43 tstack-centos5 avahi-daemon[2467]: Registering new address record for 10.1.10.62 on eth0.
+Apr 29 08:13:43 tstack-centos5 avahi-daemon[2467]: Withdrawing address record for 10.1.10.62 on eth0.
+Apr 29 08:13:43 tstack-centos5 avahi-daemon[2467]: Leaving mDNS multicast group on interface eth0.IPv4 with address 10.1.10.62.
+Apr 29 08:13:43 tstack-centos5 avahi-daemon[2467]: iface.c: interface_mdns_mcast_join() called but no local address available.
+Apr 29 08:13:43 tstack-centos5 avahi-daemon[2467]: Interface eth0.IPv4 no longer relevant for mDNS.
+Apr 29 08:13:43 tstack-centos5 avahi-daemon[2467]: New relevant interface eth0.IPv4 for mDNS.
+Apr 29 08:13:43 tstack-centos5 avahi-daemon[2467]: Joining mDNS multicast group on interface eth0.IPv4 with address 10.1.10.62.
+Apr 29 08:13:43 tstack-centos5 avahi-daemon[2467]: Registering new address record for 10.1.10.62 on eth0.
+Apr 29 08:13:43 tstack-centos5 NET[13682]: /sbin/dhclient-script : updated /etc/resolv.conf
+Apr 29 08:13:43 tstack-centos5 dhclient: bound to 10.1.10.62 -- renewal in 31782 seconds.
+Apr 29 08:15:06 tstack-centos5 avahi-daemon[2467]: Invalid query packet.
+Apr 29 17:03:19 tstack-centos5 avahi-daemon[2467]: Invalid query packet.
+Apr 29 17:03:25 tstack-centos5 dhclient: DHCPREQUEST on eth0 to 10.1.10.1 port 67 (xid=0xd16b79d)
+Apr 29 17:03:25 tstack-centos5 dhclient: DHCPACK from 10.1.10.1 (xid=0xd16b79d)
+Apr 29 17:03:25 tstack-centos5 dhclient: bound to 10.1.10.62 -- renewal in 19742 seconds.
+Apr 29 17:03:51 tstack-centos5 avahi-daemon[2467]: Invalid query packet.
+Apr 29 17:20:00 tstack-centos5 avahi-daemon[2467]: Invalid query packet.
+Apr 29 22:32:26 tstack-centos5 dhclient: DHCPREQUEST on eth0 to 10.1.10.1 port 67 (xid=0xd16b79d)
+Apr 29 22:32:27 tstack-centos5 dhclient: DHCPACK from 10.1.10.1 (xid=0xd16b79d)
+Apr 29 22:32:27 tstack-centos5 dhclient: bound to 10.1.10.62 -- renewal in 55327 seconds.
+Apr 29 22:45:57 tstack-centos5 avahi-daemon[2467]: Invalid query packet.
+Apr 29 23:02:45 tstack-centos5 avahi-daemon[2467]: Invalid response packet from host 10.1.10.10.
+Apr 29 23:02:45 tstack-centos5 avahi-daemon[2467]: Invalid response packet from host fe80::22c9:d0ff:fe15:1b7c.
+Apr 29 23:02:46 tstack-centos5 avahi-daemon[2467]: Invalid query packet.
diff --git a/test/logfile_regexp_access_log.0 b/test/logfile_regexp_access_log.0
new file mode 100644
index 0000000..6f37afd
--- /dev/null
+++ b/test/logfile_regexp_access_log.0
@@ -0,0 +1,2 @@
+localhost:443 178.20.184.42 1j0vhgd jsmith [26/Jul/2023:00:01:26 -0700] "GET /secure/RapidBoard.jspa?rapidView=1295&selectedIssue=AA-409111&quickFilter=385508&quickFilter=387097 HTTP/2.0" 200 17163 "-" "Mozilla/5.0" 116075
+localhost:443 154.57.4.229 cger1e khenry [26/Jul/2023:00:02:12 -0700] "GET /secure/RapidBoard.jspa?rapidView=1839&view=planning.nodetail&issueLimit=100 HTTP/2.0" 200 16517 "https://localhost/secure/RapidBoard.jspa?rapidView=1843&view=planning.nodetail&issueLimit=100" "Mozilla/5.0" 156302
diff --git a/test/logfile_rollover.2 b/test/logfile_rollover.2
new file mode 100644
index 0000000..6c9f7a4
--- /dev/null
+++ b/test/logfile_rollover.2
@@ -0,0 +1,375 @@
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:34 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
+Nov 3 09:23:38 veridian automount[16442]: attempting to mount entry /auto/opt
+Nov 3 09:23:38 veridian automount[7999]: lookup(file): lookup for opt failed
+Nov 3 09:47:02 veridian sudo: timstack : TTY=pts/6 ; PWD=/auto/wstimstack/rpms/lbuild/test ; USER=root ; COMMAND=/usr/bin/tail /var/log/messages
+Feb 3 09:23:38 veridian automount[7998]: lookup(file): lookup for foobar failed
diff --git a/test/logfile_with_zones.0 b/test/logfile_with_zones.0
new file mode 100644
index 0000000..127d4fe
--- /dev/null
+++ b/test/logfile_with_zones.0
@@ -0,0 +1,3 @@
+2022-08-27T14:22:01.613Z space01.global-acme.entp NSX 3106 - [abc@6876 comp="abc-edge" subcomp="abc-sha" username="root" level="INFO" s2comp="fork-monitor"] keep-alive check received resp {'seq': 1017276, 'type': 0, 'executor': 2, 'timestamp': 3976009.961550321, 'stats': [{'req': 1017277, 'resp': 1017276, 'pending_req': 0, 'peak_pending_req': 2, 'req_error': 0, 'resp_error': 0, 'req_dropped_no_resource': 0}, {0: {'req': 316363, 'resp': 316363}, 1: {'req': 316430, 'resp': 316430}, 2: {'req': 316416, 'resp': 316416}, 3: {'req': 34178, 'resp': 34178}, 4: {'req': 33890, 'resp': 33890}}]} for req{'seq': 1017276, 'check': True, 'timeout': 4, 'timestamp': 3976009.961173802, 'type': 0}
+2022-08-27T17:22:01.694554+03:00 space01.global-acme.entp CRON 20856 - - (root) CMD ( /usr/bin/nice -n 10 /opt/acme/bin/mem_usage_monitor.py >/dev/null 2>&1)
+2022-08-27T14:22:01.888Z space01.global-acme.entp NSX 4828 SWITCHING [abc@6876 comp="abc-edge" subcomp="datapathd" s2comp="neigh" tname="dp-learning3" level="INFO"] dynamic arp entry(28b18eb1-3575-4179-956b-aae009433d27, 10.12.160.4) is created
diff --git a/test/man_echo.txt b/test/man_echo.txt
new file mode 100644
index 0000000..1f4fa53
--- /dev/null
+++ b/test/man_echo.txt
@@ -0,0 +1,38 @@
+ECHO(1) General Commands Manual ECHO(1)
+
+NNAAMMEE
+ eecchhoo – write arguments to the standard output
+
+SSYYNNOOPPSSIISS
+ eecchhoo [--nn] [_s_t_r_i_n_g _._._.]
+
+DDEESSCCRRIIPPTTIIOONN
+ The eecchhoo utility writes any specified operands, separated by single blank
+ (‘ ’) characters and followed by a newline (‘\n’) character, to the
+ standard output.
+
+ The following option is available:
+
+ --nn Do not print the trailing newline character. This may also be
+ achieved by appending ‘\c’ to the end of the string, as is done by
+ iBCS2 compatible systems. Note that this option as well as the
+ effect of ‘\c’ are implementation-defined in IEEE Std 1003.1-2001
+ (“POSIX.1”) as amended by Cor. 1-2002. Applications aiming for
+ maximum portability are strongly encouraged to use printf(1) to
+ suppress the newline character.
+
+ Some shells may provide a builtin eecchhoo command which is similar or
+ identical to this utility. Most notably, the builtin eecchhoo in sh(1) does
+ not accept the --nn option. Consult the builtin(1) manual page.
+
+EEXXIITT SSTTAATTUUSS
+ The eecchhoo utility exits 0 on success, and >0 if an error occurs.
+
+SSEEEE AALLSSOO
+ builtin(1), csh(1), printf(1), sh(1)
+
+SSTTAANNDDAARRDDSS
+ The eecchhoo utility conforms to IEEE Std 1003.1-2001 (“POSIX.1”) as amended
+ by Cor. 1-2002.
+
+macOS 13.5 April 12, 2003 macOS 13.5
diff --git a/test/naughty_files.py b/test/naughty_files.py
new file mode 100755
index 0000000..0b8e5c1
--- /dev/null
+++ b/test/naughty_files.py
@@ -0,0 +1,28 @@
+#!/usr/bin/env python3
+
+import os
+
+os.makedirs("naughty", 0o700, True)
+with open('naughty/file-with-escape-sequences-\x1b[31mred\x1b[m-color.txt', 'w+') as fi:
+ fi.write('boo')
+
+with open('naughty/file-with-escape-sequences-\x1b[31mred\x1b[m-color.log', 'w+') as fi:
+ fi.write('2012-07-02 10:22:40,672:DEBUG:foo bar baz\n')
+
+try:
+ with open(b'naughty/text-file-with-invalid-utf-\xc3\x28', 'w+') as fi:
+ fi.write('boo')
+
+ with open(b'naughty/log-file-with-invalid-utf-\xc3\x28', 'w+') as fi:
+ fi.write('2015-04-24T21:09:39.296 25376]ERROR:somemodule:Something very INFOrmative.')
+except OSError as e:
+ pass
+
+with open('naughty/file-with-hidden-text.txt', 'w+') as fi:
+ fi.write('Hello, \x1b[30;40mWorld!\x1b[m!\n')
+ fi.write('Goodbye, \x1b[37;47mWorld!\x1b[m!\n')
+ fi.write('That is not\b\b\ball\n')
+
+with open('naughty/file-with-terminal-controls.txt', 'w+') as fi:
+ fi.write('time for a reset \x1bckapow\n')
+ fi.write('ding dong! \x07\n')
diff --git a/test/parser_debugger.py b/test/parser_debugger.py
index d2818f5..2f9b102 100755
--- a/test/parser_debugger.py
+++ b/test/parser_debugger.py
@@ -1,4 +1,4 @@
-#! /usr/bin/env python
+#! /usr/bin/env python3
# Copyright (c) 2013, Timothy Stack
#
@@ -44,6 +44,7 @@ list_depth = {}
list_format = {}
breakpoints = set()
+
def completer(text, state):
options = [x for x in itertools.chain(name_to_addr,
element_lists,
@@ -54,6 +55,7 @@ def completer(text, state):
except IndexError:
return None
+
readline.set_completer(completer)
if 'libedit' in readline.__doc__:
@@ -67,27 +69,30 @@ for line in open("scanned.dpt"):
if line.startswith("input "):
input_line = line[6:-1]
else:
- ops.append(map(string.strip, line.split()))
+ ops.append([x.strip() for x in line.split()])
+
def getstr(capture):
start, end = capture.split(':')
return input_line[int(start):int(end)]
+
def printlist(name_or_addr):
if name_or_addr in name_to_addr:
addr = name_to_addr[name_or_addr]
- print "% 3d (%s:%s) %s" % (list_depth.get(addr, -1), name_or_addr, addr, element_lists[addr])
+ print("% 3d (%s:%s) %s" % (list_depth.get(addr, -1), name_or_addr, addr, element_lists[addr]))
elif name_or_addr in element_lists:
addr = name_or_addr
- print "% 3d (%s:%s) %s" % (list_depth.get(name_or_addr, -1),
- addr_to_name.get(name_or_addr, name_or_addr),
- name_or_addr,
- element_lists[name_or_addr])
+ print("% 3d (%s:%s) %s" % (list_depth.get(name_or_addr, -1),
+ addr_to_name.get(name_or_addr, name_or_addr),
+ name_or_addr,
+ element_lists[name_or_addr]))
else:
- print "error: unknown list --", name_or_addr
+ print("error: unknown list --", name_or_addr)
if addr in list_format:
- print " format -- appender(%s) term(%s) qual(%s) sep(%s) prefix_term(%s)" % tuple(list_format[addr])
+ print(" format -- appender(%s) term(%s) qual(%s) sep(%s) prefix_term(%s)" % tuple(list_format[addr]))
+
def handleop(fields):
addr = fields[0]
@@ -113,6 +118,8 @@ def handleop(fields):
list_depth[addr] = -1
elif method_name == 'push_back':
el.append((method_args[0], getstr(method_args[1])))
+ elif method_name == 'push_front':
+ el.insert(0, (method_args[0], getstr(method_args[1])))
elif method_name == 'pop_front':
el.pop(0)
elif method_name == 'pop_back':
@@ -122,7 +129,7 @@ def handleop(fields):
elif method_name == 'splice':
pos = int(method_args[0])
other = element_lists[method_args[1]]
- start, from_end = map(int, method_args[2].split(':'))
+ start, from_end = list(map(int, method_args[2].split(':')))
end = len(other) - from_end
sub_list = other[start:end]
del other[start:end]
@@ -134,7 +141,8 @@ def handleop(fields):
elif method_name == 'point':
breakpoints.add(method_args[0])
else:
- print "Unhandled method: ", method_name
+ print("Unhandled method: ", method_name)
+
def playupto(length):
addr_to_name.clear()
@@ -144,6 +152,7 @@ def playupto(length):
for index in range(length):
handleop(ops[index])
+
def find_prev_point(start, name):
orig_start = start
while start > 0:
@@ -155,6 +164,7 @@ def find_prev_point(start, name):
return start + 1
return orig_start + 1
+
def find_next_point(start, name):
orig_start = start
while start < len(ops):
@@ -166,13 +176,15 @@ def find_next_point(start, name):
return start + 1
return orig_start + 1
+
def printall():
- print input_line
+ print(input_line)
sorted_lists = [(list_depth.get(addr, -1), addr) for addr in element_lists]
sorted_lists.sort()
for _depth, addr in sorted_lists:
printlist(addr)
+
index = len(ops)
last_cmd = ['']
watch_list = set()
@@ -180,20 +192,20 @@ while True:
playupto(index)
if index == 0:
- print "init"
+ print("init")
else:
op = ops[index - 1]
- print "#%s %s" % (index -1, op)
+ print("#%s %s" % (index - 1, op))
if op[2] == 'push_back':
- print getstr(op[4])
+ print(getstr(op[4]))
for list_name in watch_list:
printlist(list_name)
try:
- cmd = raw_input("> ").split()
+ cmd = input("> ").split()
except EOFError:
- print
+ print()
break
if not cmd or cmd[0] == '':
@@ -202,16 +214,16 @@ while True:
if not cmd or cmd[0] == '':
pass
elif cmd[0] == 'h':
- print 'Help:'
- print ' q - quit'
- print ' s - Start over'
- print ' n - Next step'
- print ' r - Previous step'
- print ' b - Previous breakpoint'
- print ' c - Next breakpoint'
- print ' p - Print state'
- print ' w <var> - Add a variable to the watch list'
- print ' u <var> - Remove a variable from the watch list'
+ print('Help:')
+ print(' q - quit')
+ print(' s - Start over')
+ print(' n - Next step')
+ print(' r - Previous step')
+ print(' b - Previous breakpoint')
+ print(' c - Next breakpoint')
+ print(' p - Print state')
+ print(' w <var> - Add a variable to the watch list')
+ print(' u <var> - Remove a variable from the watch list')
elif cmd[0] == 'q':
break
elif cmd[0] == 's':
@@ -242,7 +254,7 @@ while True:
if watch_list:
watch_list.remove(cmd[1])
else:
- print "error: unknown command --", cmd
+ print("error: unknown command --", cmd)
printall()
diff --git a/test/pyfile_0.py b/test/pyfile_0.py
new file mode 100644
index 0000000..43696e9
--- /dev/null
+++ b/test/pyfile_0.py
@@ -0,0 +1,9 @@
+# Test file for syntax-highlighting
+
+def hello(abc):
+ """
+ This is a multi-line string
+
+ @param abc: blah blah
+ """
+ return abc + 1
diff --git a/test/scripty.cc b/test/scripty.cc
index 2f7bb94..23144d3 100644
--- a/test/scripty.cc
+++ b/test/scripty.cc
@@ -108,7 +108,8 @@ public:
memset(&ws, 0, sizeof(ws));
if (isatty(STDIN_FILENO)
- && tcgetattr(STDIN_FILENO, &this->ct_termios) == -1) {
+ && tcgetattr(STDIN_FILENO, &this->ct_termios) == -1)
+ {
throw error(errno);
}
@@ -122,7 +123,8 @@ public:
ws.ws_row = 24;
if (openpty(this->ct_master.out(), slave.out(), nullptr, nullptr, &ws)
- < 0) {
+ < 0)
+ {
throw error(errno);
}
@@ -174,20 +176,11 @@ public:
return retval;
};
- bool is_child() const
- {
- return this->ct_child == 0;
- };
+ bool is_child() const { return this->ct_child == 0; };
- pid_t get_child_pid() const
- {
- return this->ct_child;
- };
+ pid_t get_child_pid() const { return this->ct_child; };
- int get_fd() const
- {
- return this->ct_master;
- };
+ int get_fd() const { return this->ct_master; };
protected:
pid_t ct_child;
@@ -328,15 +321,9 @@ struct term_machine {
std::vector<std::string> ta_desc;
};
- term_machine(child_term& ct) : tm_child_term(ct)
- {
- this->clear();
- }
+ term_machine(child_term& ct) : tm_child_term(ct) { this->clear(); }
- ~term_machine()
- {
- this->flush_line();
- }
+ ~term_machine() { this->flush_line(); }
void clear()
{
@@ -460,7 +447,8 @@ struct term_machine {
line_len -= 4;
}
for (size_t lpc2 = lpc + 1; lpc2 < this->tm_line_attrs.size();
- lpc2++) {
+ lpc2++)
+ {
auto bar_pos = 7 + this->tm_line_attrs[lpc2].ta_pos;
if (bar_pos < line_len) {
@@ -488,7 +476,8 @@ struct term_machine {
int val, last;
if (sscanf(&this->tm_escape_buffer[index], "%d%n", &val, &last)
- == 1) {
+ == 1)
+ {
retval.push_back(val);
index += last;
if (this->tm_escape_buffer[index] != ';') {
@@ -503,10 +492,7 @@ struct term_machine {
return retval;
}
- void new_user_input(char ch)
- {
- this->tm_user_input.push_back(ch);
- }
+ void new_user_input(char ch) { this->tm_user_input.push_back(ch); }
void new_input(char ch)
{
@@ -521,7 +507,7 @@ struct term_machine {
this->tm_unicode_buffer.pop_front();
return retval;
- });
+ }).unwrap();
}
return;
} else {
@@ -602,7 +588,8 @@ struct term_machine {
case state::ESCAPE_FIXED_LENGTH: {
this->tm_escape_buffer.push_back(ch);
if (this->tm_escape_buffer.size()
- == this->tm_escape_expected_size) {
+ == this->tm_escape_expected_size)
+ {
auto iter = CSI_TO_DESC.find(
std::string(this->tm_escape_buffer.data(),
this->tm_escape_buffer.size()));
@@ -1101,7 +1088,8 @@ main(int argc, char* argv[])
#endif
tm.new_input(buffer[lpc]);
if (scripty_data.sd_replay.size()
- != last_replay_size) {
+ != last_replay_size)
+ {
last = now;
last_replay_size
= scripty_data.sd_replay.size();
diff --git a/test/test_ansi_scrubber.cc b/test/test_ansi_scrubber.cc
index 5371a31..1bb67f2 100644
--- a/test/test_ansi_scrubber.cc
+++ b/test/test_ansi_scrubber.cc
@@ -37,6 +37,7 @@
#include <assert.h>
#include "base/ansi_scrubber.hh"
+#include "base/attr_line.builder.hh"
#include "config.h"
#include "view_curses.hh"
@@ -45,6 +46,50 @@ using namespace std;
int
main(int argc, char* argv[])
{
+ printf("BEGIN test\n");
+
+ {
+ std::string zero_width = "\x16 1 \x16 2 \x16";
+ string_attrs_t sa;
+
+ scrub_ansi_string(zero_width, &sa);
+ printf("zero width: '%s'\n",
+ fmt::format(FMT_STRING("{:?}"), zero_width).c_str());
+ assert(zero_width == " 1 2 ");
+ for (const auto& attr : sa) {
+ printf("attr %d:%d %s\n",
+ attr.sa_range.lr_start,
+ attr.sa_range.lr_end,
+ attr.sa_type->sat_name);
+ if (attr.sa_type == &VC_HYPERLINK) {
+ printf(" value: %s\n",
+ attr.sa_value.get<std::string>().c_str());
+ }
+ if (attr.sa_type == &SA_ORIGIN_OFFSET) {
+ printf(" value: %lld\n", attr.sa_value.get<int64_t>());
+ }
+ }
+ }
+
+ {
+ std::string bad_bold = "That is not\b\b\ball\n";
+ string_attrs_t sa;
+
+ scrub_ansi_string(bad_bold, &sa);
+ printf("bad bold1: '%s'\n",
+ fmt::format(FMT_STRING("{:?}"), bad_bold).c_str());
+ assert(bad_bold == "That is not\b\b\ball\n");
+ }
+ {
+ std::string bad_bold = "test r\bra\bc not\b\b\ball \x16";
+ string_attrs_t sa;
+
+ scrub_ansi_string(bad_bold, &sa);
+ printf("bad bold2: '%s'\n",
+ fmt::format(FMT_STRING("{:?}"), bad_bold).c_str());
+ assert(bad_bold == "test ra\bc not\b\b\ball ");
+ }
+
{
char input[] = "Hello, \x1b[33;mWorld\x1b[0;m!";
@@ -56,6 +101,13 @@ main(int argc, char* argv[])
}
{
+ std::string bad_bold = "^_\x8b\b ";
+ string_attrs_t sa;
+
+ scrub_ansi_string(bad_bold, &sa);
+ }
+
+ {
std::string boldish
= "\u2022\b\u2022\u2023\b\u2023 h\bhe\bel\blo\bo _\ba_\bb_\bc a\b_ "
"b";
@@ -82,17 +134,61 @@ main(int argc, char* argv[])
}
}
}
+ {
+ string_attrs_t sa;
+ string str_cp;
+
+ str_cp = "Hello, World!";
+ scrub_ansi_string(str_cp, &sa);
+
+ assert(str_cp == "Hello, World!");
+ assert(sa.empty());
+
+ str_cp = "Hello\x1b[44;m, \x1b[33;mWorld\x1b[0;m!";
+ scrub_ansi_string(str_cp, &sa);
+ assert(str_cp == "Hello, World!");
+ printf("%s\n", str_cp.c_str());
+ for (const auto& attr : sa) {
+ printf(" attr %d:%d %s %s\n",
+ attr.sa_range.lr_start,
+ attr.sa_range.lr_end,
+ attr.sa_type->sat_name,
+ string_fragment::from_str_range(
+ str_cp, attr.sa_range.lr_start, attr.sa_range.lr_end)
+ .to_string()
+ .c_str());
+ }
+ }
- string_attrs_t sa;
- string str_cp;
+ {
+ // "•]8;;http://example.com•\This_is_a_link•]8;;•\_"
+ auto hlink = std::string(
+ "\033]8;;http://example.com\033\\This is a "
+ "link\033]8;;\033\\\n");
+
+ auto al = attr_line_t();
+ attr_line_builder alb(al);
- str_cp = "Hello, World!";
- scrub_ansi_string(str_cp, &sa);
+ alb.append_as_hexdump(hlink);
+ printf("%s\n", al.get_string().c_str());
- assert(str_cp == "Hello, World!");
- assert(sa.empty());
+ string_attrs_t sa;
+ scrub_ansi_string(hlink, &sa);
- str_cp = "Hello\x1b[44;m, \x1b[33;mWorld\x1b[0;m!";
- scrub_ansi_string(str_cp, &sa);
- assert(str_cp == "Hello, World!");
+ printf("hlink %d %d %s", hlink.size(), sa.size(), hlink.c_str());
+ assert(sa.size() == 3);
+ for (const auto& attr : sa) {
+ printf("attr %d:%d %s\n",
+ attr.sa_range.lr_start,
+ attr.sa_range.lr_end,
+ attr.sa_type->sat_name);
+ if (attr.sa_type == &VC_HYPERLINK) {
+ printf(" value: %s\n",
+ attr.sa_value.get<std::string>().c_str());
+ }
+ if (attr.sa_type == &SA_ORIGIN_OFFSET) {
+ printf(" value: %lld\n", attr.sa_value.get<int64_t>());
+ }
+ }
+ }
}
diff --git a/test/test_cli.sh b/test/test_cli.sh
index be773f5..195f8bc 100644
--- a/test/test_cli.sh
+++ b/test/test_cli.sh
@@ -5,7 +5,7 @@ export YES_COLOR=1
run_cap_test ${lnav_test} -n -c 'foo'
-run_cap_test ${lnav_test} -d /tmp/lnav.err -t -n <<EOF
+run_cap_test ${lnav_test} -d /tmp/lnav.err -n <<EOF
Hello, World!
Goodbye, World!
EOF
@@ -29,3 +29,33 @@ printf "a\ba _\ba a\b_" | run_cap_test env TEST_COMMENT="overstrike bold" \
grep abcd textfile_long_lines.0 | run_cap_test \
${lnav_test} -n -d /tmp/lnav.err \
-c ';SELECT filepath, lines FROM lnav_file'
+
+export HOME="./piper-config"
+rm -rf ./piper-config
+mkdir -p $HOME/.lnav
+
+${lnav_test} -Nn -c ':config /tuning/piper/max-size 128'
+
+cat ${test_dir}/logfile_haproxy.0 | run_cap_test \
+ env TEST_COMMENT="stdin rotation" ${lnav_test} -n
+
+export HOME="./mgmt-config"
+rm -rf ./mgmt-config
+mkdir -p $HOME/.lnav
+run_cap_test ${lnav_test} -m -I ${test_dir} config get
+
+run_cap_test ${lnav_test} -m -I ${test_dir} config blame
+
+export TMPDIR="piper-tmp"
+rm -rf ./piper-tmp
+run_cap_test ${lnav_test} -n -e 'echo hi'
+
+run_cap_test ${lnav_test} -m piper list
+
+PIPER_URL=$(env NO_COLOR=1 ${lnav_test} -m -q piper list | tail -1 | sed -r -e 's;.*(piper://[^ ]+).*;\1;g')
+
+run_cap_test ${lnav_test} -n $PIPER_URL
+
+run_cap_test ${lnav_test} -n $PIPER_URL \
+ -c ";SELECT filepath, descriptor, mimetype, jget(content, '/ctime') as ctime, jget(content, '/cwd') as cwd FROM lnav_file_metadata" \
+ -c ':write-json-to -'
diff --git a/test/test_cmds.sh b/test/test_cmds.sh
index 5cb0a43..5103f79 100644
--- a/test/test_cmds.sh
+++ b/test/test_cmds.sh
@@ -1,6 +1,38 @@
#! /bin/bash
+export TZ=UTC
export YES_COLOR=1
+export DUMP_CRASH=1
+
+run_cap_test ${lnav_test} -n \
+ -c ":goto 0" \
+ -c ":convert-time-to bad-zone" \
+ ${test_dir}/logfile_access_log.0
+
+run_cap_test ${lnav_test} -n \
+ -c ":goto 0" \
+ -c ":convert-time-to America/Los_Angeles" \
+ ${test_dir}/logfile_access_log.0
+
+run_cap_test ${lnav_test} -nN \
+ -c ";SELECT ':echo Hello' || char(10) || ':echo World' AS cmds" \
+ -c ':eval ${cmds}'
+
+run_cap_test ${lnav_test} -nN \
+ -c ":cd /bad-dir"
+
+run_cap_test ${lnav_test} -nN \
+ -c ":cd ${test_dir}/logfile_access_log.0"
+
+run_cap_test ${lnav_test} -nN \
+ -c ":cd ${test_dir}" \
+ -c ":open logfile_access_log.0"
+
+run_cap_test ${lnav_test} -nN \
+ -e "echo Hello, World!"
+
+run_cap_test ${lnav_test} -nN \
+ -e "echo Hello, World! > /dev/stderr"
run_cap_test ${lnav_test} -n \
-c ":switch-to-view help" \
@@ -30,6 +62,10 @@ run_cap_test env TZ=UTC ${lnav_test} -n \
-c ":unix-time 1612072409" \
"${test_dir}/logfile_access_log.*"
+#run_cap_test env TZ=UTC ${lnav_test} -n \
+# -c ":unix-time 16120724091612072409" \
+# "${test_dir}/logfile_access_log.*"
+
run_cap_test env TZ=UTC ${lnav_test} -n \
-c ":current-time" \
"${test_dir}/logfile_access_log.*"
@@ -143,6 +179,10 @@ run_cap_test ${lnav_test} -n \
-c ":hide-fields access_log.c_ip access_log.cs_uri_stem" \
${test_dir}/logfile_access_log.0
+run_cap_test ${lnav_test} -n \
+ -c ':hide-fields log_time log_level' \
+ ${test_dir}/logfile_generic.0
+
run_cap_test ${lnav_test} -f- -n < ${test_dir}/formats/scripts/multiline-echo.lnav
run_cap_test ${lnav_test} -n \
@@ -375,6 +415,12 @@ run_cap_test ${lnav_test} -n \
${test_dir}/logfile_access_log.0
run_cap_test ${lnav_test} -n \
+ -I ${test_dir} \
+ -c ":goto 5" \
+ -c ":pipe-line-to echo \$log_raw_text \$log_level \$user" \
+ ${test_dir}/logfile_json.json
+
+run_cap_test ${lnav_test} -n \
-c ":switch-to-view pretty" \
${test_dir}/textfile_json_one_line.0
diff --git a/test/test_config.sh b/test/test_config.sh
index 4722abb..e186bb5 100755
--- a/test/test_config.sh
+++ b/test/test_config.sh
@@ -37,3 +37,6 @@ run_cap_test ${lnav_test} -W -n \
run_cap_test ${lnav_test} -nN \
-c ":reset-config /bad/path"
+
+run_cap_test ${lnav_test} -n -I ${test_dir} \
+ hw://seattle/finn
diff --git a/test/test_date_time_scanner.cc b/test/test_date_time_scanner.cc
index 8a85993..c19d9c8 100644
--- a/test/test_date_time_scanner.cc
+++ b/test/test_date_time_scanner.cc
@@ -30,11 +30,24 @@
#include <assert.h>
#include <locale.h>
+#define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN
#include "../src/lnav_util.hh"
#include "base/date_time_scanner.hh"
#include "config.h"
+#include "doctest/doctest.h"
+#include "lnav_config.hh"
+#include "ptimec.hh"
static const char* GOOD_TIMES[] = {
+ "2023-08-11T00:59:36.208491Z",
+ "09/Aug/2023:21:41:44 +0000",
+ "2022-08-27T17:22:01.694554+03:00",
+ "2022-08-27T17:22:01.694554+0300",
+ "2022-08-27T17:22:01.694554+00:00",
+ "2022-08-27T17:22:01.694554+0000",
+ "2022-08-27T17:22:01.694554Z",
+ "2022-08-27 17:22:01.694554 UTC",
+ "2022-08-27 17:22:01.694554 GMT",
"2017 May 08 Mon 18:57:57.578",
"May 01 00:00:01",
"May 10 12:00:01",
@@ -53,11 +66,11 @@ static const char* BAD_TIMES[] = {
"@4000000043",
};
-int
-main(int argc, char* argv[])
+TEST_CASE("date_time_scanner")
{
setenv("TZ", "UTC", 1);
+ lnav_config.lc_log_date_time.c_zoned_to_local = false;
for (const auto* good_time : GOOD_TIMES) {
date_time_scanner dts;
struct timeval tv;
@@ -65,16 +78,71 @@ main(int argc, char* argv[])
const char* rc;
rc = dts.scan(good_time, strlen(good_time), nullptr, &tm, tv);
+ CHECK(dts.dts_zoned_to_local == false);
printf("ret %s %p\n", good_time, rc);
assert(rc != nullptr);
char ts[64];
- gmtime_r(&tv.tv_sec, &tm.et_tm);
dts.ftime(ts, sizeof(ts), nullptr, tm);
+ printf("fmt %s\n", PTIMEC_FORMATS[dts.dts_fmt_lock].pf_fmt);
printf("orig %s\n", good_time);
printf("loop %s\n", ts);
- assert(strcmp(ts, good_time) == 0);
+ CHECK(std::string(ts) == std::string(good_time));
+ }
+
+ {
+ const auto sf
+ = string_fragment::from_const("2014-02-11 16:12:34.123.456");
+ struct timeval tv;
+ struct exttm tm;
+ date_time_scanner dts;
+ const auto* rc = dts.scan(sf.data(), sf.length(), nullptr, &tm, tv);
+ CHECK((tm.et_flags & ETF_MILLIS_SET));
+ CHECK(std::string(rc) == sf.substr(23).to_string());
+
+ char ts[64];
+ dts.ftime(ts, sizeof(ts), nullptr, tm);
+
+ CHECK(std::string(ts) == std::string("2014-02-11 16:12:34.123"));
+ }
+
+ {
+ const auto sf
+ = string_fragment::from_const("2014-02-11 16:12:34.12345Z");
+ struct timeval tv;
+ struct exttm tm;
+ date_time_scanner dts;
+ const auto* rc = dts.scan(sf.data(), sf.length(), nullptr, &tm, tv);
+ printf("fmt %s\n", PTIMEC_FORMAT_STR[dts.dts_fmt_lock]);
+ CHECK(rc != nullptr);
+ CHECK((tm.et_flags & ETF_MICROS_SET));
+ CHECK(*rc == '\0');
+
+ char ts[64];
+ dts.ftime(ts, sizeof(ts), nullptr, tm);
+
+ CHECK(std::string(ts) == std::string("2014-02-11 16:12:34.123450Z"));
+ }
+
+ {
+ const auto sf
+ = string_fragment::from_const("Tue Jul 25 12:01:01 AM UTC 2023");
+ struct timeval tv;
+ struct exttm tm;
+ date_time_scanner dts;
+ const auto* rc = dts.scan(sf.data(), sf.length(), nullptr, &tm, tv);
+ printf("fmt %s\n", PTIMEC_FORMAT_STR[dts.dts_fmt_lock]);
+ CHECK(rc != nullptr);
+ CHECK((tm.et_flags & ETF_ZONE_SET));
+ CHECK((tm.et_flags & ETF_Z_IS_UTC));
+ CHECK(*rc == '\0');
+
+ char ts[64];
+ dts.ftime(ts, sizeof(ts), nullptr, tm);
+
+ CHECK(std::string(ts)
+ == std::string("Tue Jul 25 12:01:01 AM UTC 2023"));
}
{
diff --git a/test/test_events.sh b/test/test_events.sh
index 2266c4b..494284e 100644
--- a/test/test_events.sh
+++ b/test/test_events.sh
@@ -4,6 +4,7 @@ rm -rf events-home
mkdir -p events-home
export HOME=events-home
export YES_COLOR=1
+export TZ=UTC
run_cap_test ${lnav_test} -n \
-c ';SELECT json(content) as content FROM lnav_events' \
diff --git a/test/test_format_installer.sh b/test/test_format_installer.sh
index 2b94d3d..764f879 100644
--- a/test/test_format_installer.sh
+++ b/test/test_format_installer.sh
@@ -8,6 +8,7 @@ rm -rf "${CONFIG_DIR}/.lnav/formats"
HOME=${CONFIG_DIR}
unset XDG_CONFIG_HOME
export HOME
+export YES_COLOR=1
${lnav_test} -i ${srcdir}/formats/jsontest/format.json
@@ -16,6 +17,19 @@ if ! test -f ${CONFIG_DIR}/.lnav/formats/installed/test_log.json; then
exit 1
fi
+run_cap_test ${lnav_test} -i ${srcdir}/formats/jsontest/format.json
+
+echo corrupt > ${CONFIG_DIR}/.lnav/formats/installed/test_log.json
+
+run_cap_test env TEST_COMMENT='overwrite file' ${lnav_test} -i ${srcdir}/formats/jsontest/format.json
+
+if ! test -f ${CONFIG_DIR}/.lnav/formats/installed/test_log.json.bak; then
+ echo "Format not backed up correctly?"
+ exit 1
+fi
+
+run_cap_test ${lnav_test} -i /non-existent/file
+
if test x"${TEST_GIT_INSTALL}" = x""; then
# Hitting the git repos frequently is slow/noisy
exit 0
diff --git a/test/test_gantt.sh b/test/test_gantt.sh
new file mode 100644
index 0000000..b64c130
--- /dev/null
+++ b/test/test_gantt.sh
@@ -0,0 +1,43 @@
+#! /bin/bash
+
+export YES_COLOR=1
+
+export TZ=UTC
+
+run_cap_test ${lnav_test} -n \
+ -c ':switch-to-view gantt' \
+ ${test_dir}/logfile_generic.0
+
+run_cap_test ${lnav_test} -n \
+ -c ':switch-to-view gantt' \
+ ${test_dir}/logfile_bro_http.log.0
+
+run_cap_test ${lnav_test} -n \
+ -c ':switch-to-view gantt' \
+ -c ':filter-in CdysLK1XpcrXOpVDuh' \
+ ${test_dir}/logfile_bro_http.log.0
+
+run_cap_test ${lnav_test} -n \
+ -c ':switch-to-view gantt' \
+ -c ':filter-out CdysLK1XpcrXOpVDuh' \
+ ${test_dir}/logfile_bro_http.log.0
+
+run_cap_test ${lnav_test} -n \
+ -c ':switch-to-view gantt' \
+ -c ':hide-file *' \
+ ${test_dir}/logfile_bro_http.log.0
+
+run_cap_test ${lnav_test} -n \
+ -c ':switch-to-view gantt' \
+ -c ':close *' \
+ ${test_dir}/logfile_bro_http.log.0
+
+run_cap_test ${lnav_test} -n \
+ -c ':switch-to-view gantt' \
+ -c ':hide-lines-before 2011-11-03 00:19:37' \
+ ${test_dir}/logfile_bro_http.log.0
+
+run_cap_test ${lnav_test} -n \
+ -c ':switch-to-view gantt' \
+ -c ':hide-lines-after 2011-11-03 00:20:30' \
+ ${test_dir}/logfile_bro_http.log.0
diff --git a/test/test_json_format.sh b/test/test_json_format.sh
index 435e8e3..d56f0c8 100644
--- a/test/test_json_format.sh
+++ b/test/test_json_format.sh
@@ -1,5 +1,6 @@
#! /bin/bash
+export TZ=UTC
export YES_COLOR=1
# journald json log format is not working"
@@ -154,3 +155,9 @@ run_cap_test ${lnav_test} -n \
run_cap_test ${lnav_test} -n \
-c ':show-fields RayID' \
${test_dir}/logfile_cloudflare.json
+
+run_cap_test ${lnav_test} -n \
+ ${test_dir}/logfile_nextcloud.0
+
+run_cap_test ${lnav_test} -n \
+ ${test_dir}/gharchive_log.jsonl
diff --git a/test/test_logfile.sh b/test/test_logfile.sh
index 86e26c9..0fe2908 100644
--- a/test/test_logfile.sh
+++ b/test/test_logfile.sh
@@ -1,5 +1,6 @@
#! /bin/bash
+export TZ=UTC
echo ${top_srcdir}
echo ${top_builddir}
@@ -9,6 +10,9 @@ printf '#Date:\t20\x800-2-02\n0\n' | run_cap_test \
printf '000\n000\n#Fields: 0\n0\n#Fields: 0\n0' | run_cap_test \
env TEST_COMMENT="invalid w3c log" ${lnav_test} -n
+printf '#Date:\t3/9/3/0\x85 2\n0\n' | run_cap_test \
+ env TEST_COMMENT="invalid w3c timestamp" ${lnav_test} -n
+
cat > rollover_in.0 <<EOF
2600/2 0 00:00:00 0:
00:2 0 00:00:00 0:
@@ -37,17 +41,18 @@ run_cap_test ${lnav_test} -n \
-c ';SELECT * FROM logline' \
${test_dir}/logfile_block.1
-run_test ${lnav_test} -d /tmp/lnav.err -n -w logfile_stdin.0.log \
- -c ':shexec sleep 1 && touch -t 200711030923 logfile_stdin.0.log' <<EOF
-2013-06-06T19:13:20.123 Hi
-EOF
+if test x"${TSHARK_CMD}" != x""; then
+ run_test env TZ=UTC ${lnav_test} -n ${test_dir}/dhcp.pcapng
-check_output "piping to stdin is not working?" <<EOF
-2013-06-06T19:13:20.123 Hi
+ check_output "pcap file is not recognized" <<EOF
+2004-12-05T19:16:24.317 0.0.0.0 → 255.255.255.255 DHCP 314 DHCP Discover - Transaction ID 0x3d1d
+2004-12-05T19:16:24.317 192.168.0.1 → 192.168.0.10 DHCP 342 DHCP Offer - Transaction ID 0x3d1d
+2004-12-05T19:16:24.387 0.0.0.0 → 255.255.255.255 DHCP 314 DHCP Request - Transaction ID 0x3d1e
+2004-12-05T19:16:24.387 192.168.0.1 → 192.168.0.10 DHCP 342 DHCP ACK - Transaction ID 0x3d1e
EOF
-if test x"${TSHARK_CMD}" != x""; then
- run_test env TZ=UTC ${lnav_test} -n ${test_dir}/dhcp.pcapng
+ # make sure piped binary data is left alone
+ run_test cat ${test_dir}/dhcp.pcapng | env TZ=UTC ${lnav_test} -n
check_output "pcap file is not recognized" <<EOF
2004-12-05T19:16:24.317 0.0.0.0 → 255.255.255.255 DHCP 314 DHCP Discover - Transaction ID 0x3d1d
@@ -59,7 +64,8 @@ EOF
run_test ${lnav_test} -n ${test_dir}/dhcp-trunc.pcapng
check_error_output "truncated pcap file is not recognized" <<EOF
-error: unable to open file: {test_dir}/dhcp-trunc.pcapng -- tshark: The file "{test_dir}/dhcp-trunc.pcapng" appears to have been cut short in the middle of a packet.
+✘ error: unable to open file: {test_dir}/dhcp-trunc.pcapng
+ reason: tshark: The file "{test_dir}/dhcp-trunc.pcapng" appears to have been cut short in the middle of a packet.
EOF
fi
@@ -377,8 +383,6 @@ TCF 2014-04-06 11:01:11.475557: 0: <--- R 2 ["P1"] <eom>
EOF
-# The TCSH format converts to local time, so we need to specify a TZ
-export TZ="UTC"
run_test ./drive_logfile -t -f tcsh_history ${srcdir}/logfile_tcsh_history.0
check_output "TCSH timestamp interpreted incorrectly?" <<EOF
@@ -396,6 +400,10 @@ Jul 20 22:59:29 2009 -- 000
Jul 20 22:59:29 2009 -- 000
EOF
+run_cap_test env TZ=America/Los_Angeles ./drive_logfile -t -f access_log ${srcdir}/logfile_access_log.0
+
+run_cap_test env TZ=America/Los_Angeles ${lnav_test} -n ${srcdir}/logfile_access_log.0
+
run_test ./drive_logfile -t -f generic_log ${srcdir}/logfile_tai64n.0
check_output "tai64n timestamps interpreted incorrectly?" <<EOF
@@ -543,6 +551,12 @@ error 0x0
error 0x0
EOF
+run_cap_test ./drive_logfile -t -f generic_log ${test_dir}/logfile_with_zones.0
+
+run_cap_test env TZ=America/Los_Angeles ./drive_logfile -t -f generic_log ${test_dir}/logfile_with_zones.0
+
+run_cap_test env TZ=America/New_York ./drive_logfile -t -f generic_log ${test_dir}/logfile_with_zones.0
+
touch -t 200711030923 ${srcdir}/logfile_glog.0
run_test ./drive_logfile -t -f glog_log ${srcdir}/logfile_glog.0
@@ -588,15 +602,6 @@ info 0x0
error 0x0
EOF
-run_test ${lnav_test} -d /tmp/lnav.err -nt -w logfile_stdin.log <<EOF
-Hi
-EOF
-
-check_output "piping to stdin is not working?" <<EOF
-2013-06-06T19:13:20.123 Hi
-2013-06-06T19:13:20.123 ---- END-OF-STDIN ----
-EOF
-
run_test ${lnav_test} -C ${test_dir}/logfile_bad_access_log.0
sed -ibak -e "s|/.*/logfile_bad_access_log.0|logfile_bad_access_log.0|g" `test_err_filename`
@@ -635,8 +640,8 @@ EOF
run_test ${lnav_test} -n -I ${test_dir} ${srcdir}/logfile_epoch.0
check_output "rewriting machine-oriented timestamp didn't work?" <<EOF
-2015-04-10 02:58:07.123000 Hello, World!
-2015-04-10 02:58:07.456000 Goodbye, World!
+2015-04-10 02:58:07.123 Hello, World!
+2015-04-10 02:58:07.456 Goodbye, World!
EOF
run_test ${lnav_test} -n -I ${test_dir} ${srcdir}/logfile_crlf.0
@@ -705,3 +710,29 @@ run_cap_test ${lnav_test} -n \
run_cap_test ${lnav_test} -n \
-c ':filter-in Air Mob' \
${test_dir}/logfile_ansi.1
+
+export HOME="./file-tz"
+rm -rf "./file-tz"
+mkdir -p $HOME
+
+touch -t 200711030000 ${srcdir}/logfile_syslog.0
+
+run_cap_test ${lnav_test} -n \
+ -c ':set-file-timezone America/Los_Angeles' \
+ ${test_dir}/logfile_syslog.0
+
+# make sure the file options were saved and restored
+run_cap_test ${lnav_test} -n \
+ ${test_dir}/logfile_syslog.0
+
+run_cap_test ${lnav_test} -n \
+ -c ";SELECT options_path, options FROM lnav_file" \
+ ${test_dir}/logfile_syslog.0
+
+run_cap_test ${lnav_test} -n \
+ -c ':set-file-timezone America/New_York' \
+ ${test_dir}/logfile_syslog.0
+
+run_cap_test ${lnav_test} -n \
+ -c ':set-file-timezone bad' \
+ ${test_dir}/logfile_syslog.0
diff --git a/test/test_meta.sh b/test/test_meta.sh
index caab4f9..e57a30c 100644
--- a/test/test_meta.sh
+++ b/test/test_meta.sh
@@ -2,6 +2,7 @@
export YES_COLOR=1
+export TZ=UTC
export HOME="./meta-sessions"
export XDG_CONFIG_HOME="./meta-sessions/.config"
rm -rf "./meta-sessions"
@@ -108,3 +109,28 @@ run_cap_test ${lnav_test} -n -f- \
This is `markdown` now!
EOF
+
+run_cap_test ${lnav_test} -n \
+ -c ":goto 46" \
+ -c ":tag bro-test" \
+ -c ":save-session" \
+ -c ";SELECT log_line, log_tags FROM bro_http_log WHERE log_tags IS NOT NULL" \
+ ${test_dir}/logfile_bro_http.log.0
+
+run_cap_test ${lnav_test} -n \
+ -c ":load-session" \
+ -c ";SELECT log_line, log_tags FROM bro_http_log WHERE log_tags IS NOT NULL" \
+ ${test_dir}/logfile_bro_http.log.0
+
+run_cap_test ${lnav_test} -n \
+ -c ";UPDATE access_log SET log_annotations = '1' WHERE log_line = 0" \
+ ${test_dir}/logfile_access_log.0
+
+run_cap_test ${lnav_test} -n \
+ -c ";UPDATE access_log SET log_annotations = '{\"abc\": \"def\"' WHERE log_line = 0" \
+ ${test_dir}/logfile_access_log.0
+
+run_cap_test ${lnav_test} -n \
+ -c ";UPDATE access_log SET log_annotations = '{\"abc\": \"def\"}' WHERE log_line = 0" \
+ -c ";SELECT log_line,log_annotations FROM access_log WHERE log_annotations IS NOT NULL" \
+ ${test_dir}/logfile_access_log.0
diff --git a/test/test_prql.sh b/test/test_prql.sh
new file mode 100644
index 0000000..bc27908
--- /dev/null
+++ b/test/test_prql.sh
@@ -0,0 +1,17 @@
+#! /bin/bash
+
+export TZ=UTC
+export YES_COLOR=1
+unset XDG_CONFIG_HOME
+
+run_cap_test ${lnav_test} -n \
+ -c ";from access_log | take 1" \
+ ${test_dir}/logfile_access_log.0
+
+run_cap_test ${lnav_test} -n \
+ -c ";from access_log | take abc" \
+ ${test_dir}/logfile_access_log.0
+
+run_cap_test ${lnav_test} -n \
+ -c ";from bro_http_log | stats.hist bro_host slice:'1m'" \
+ ${test_dir}/logfile_bro_http.log.0
diff --git a/test/test_sessions.sh b/test/test_sessions.sh
index db71e5f..7e5b830 100644
--- a/test/test_sessions.sh
+++ b/test/test_sessions.sh
@@ -1,5 +1,6 @@
#! /bin/bash
+export TZ=UTC
export HOME="./sessions"
unset XDG_CONFIG_HOME
rm -rf "./sessions"
@@ -77,6 +78,14 @@ run_cap_test ${lnav_test} -n \
-c ':write-csv-to -' \
${test_dir}/logfile_access_log.0
+# partition name was not saved in session and doesn't not show up in crumbs
+run_cap_test ${lnav_test} -n \
+ -c ":load-session" \
+ -c ':goto 2' \
+ -c ";SELECT top_meta FROM lnav_views WHERE name = 'log'" \
+ -c ':write-json-to -' \
+ ${test_dir}/logfile_access_log.0
+
# adjust time is not working
run_cap_test ${lnav_test} -nq \
-c ":adjust-log-time 2010-01-01T00:00:00" \
@@ -117,3 +126,31 @@ run_cap_test ${lnav_test} -n -d /tmp/lnav.err \
-c ":load-session" \
-c ":test-comment restore hidden lines" \
${test_dir}/logfile_access_log.0
+
+# hiding fields failed
+export TZ="UTC"
+rm -rf ./sessions
+mkdir -p $HOME
+run_cap_test ${lnav_test} -n \
+ -c ":hide-fields bro_uid" \
+ -c ":goto -10" \
+ -c ":save-session" \
+ ${test_dir}/logfile_bro_http.log.0
+
+# restoring hidden fields failed
+run_cap_test ${lnav_test} -n \
+ -c ":load-session" \
+ -c ":goto -10" \
+ -c ":test-comment restoring hidden fields" \
+ ${test_dir}/logfile_bro_http.log.0
+
+export TEST_ANNO=1
+run_cap_test ${lnav_test} -d /tmp/lnav.err -I ${test_dir} -n \
+ -c ':annotate' \
+ -c ':save-session' \
+ support-dump/logfile_access_log.0
+
+run_cap_test ${lnav_test} -d /tmp/lnav.err -I ${test_dir} -n \
+ -c ':load-session' \
+ -c ':export-session-to -' \
+ support-dump/logfile_access_log.0
diff --git a/test/test_shlexer.sh b/test/test_shlexer.sh
index 747de95..e05cc50 100644
--- a/test/test_shlexer.sh
+++ b/test/test_shlexer.sh
@@ -30,3 +30,5 @@ run_cap_test ./drive_shlexer 'abc $DEF 123'
run_cap_test ./drive_shlexer '~ foo'
run_cap_test ./drive_shlexer '~nonexistent/bar baz'
+
+run_cap_test ./drive_shlexer 'abc '
diff --git a/test/test_sql.sh b/test/test_sql.sh
index 369351c..6abb5ad 100644
--- a/test/test_sql.sh
+++ b/test/test_sql.sh
@@ -1,5 +1,6 @@
#! /bin/bash
+export TZ=UTC
export YES_COLOR=1
lnav_test="${top_builddir}/src/lnav-test"
@@ -29,118 +30,26 @@ run_cap_test ${lnav_test} -n \
cp ${srcdir}/logfile_syslog.2 logfile_syslog_test.2
touch -t 201511030923 logfile_syslog_test.2
-run_test ${lnav_test} -n \
+run_cap_test ${lnav_test} -n \
-c ";SELECT *, log_msg_schema FROM all_logs" \
-c ":write-csv-to -" \
logfile_syslog_test.2
-check_output "all_logs does not work?" <<EOF
-log_line,log_part,log_time,log_idle_msecs,log_level,log_mark,log_comment,log_tags,log_filters,log_msg_format,log_msg_schema
-0,<NULL>,2015-11-03 09:23:38.000,0,info,0,<NULL>,<NULL>,<NULL>,# is up,aff2bfc3c61e7b86329b83190f0912b3
-1,<NULL>,2015-11-03 09:23:38.000,0,info,0,<NULL>,<NULL>,<NULL>,# is up,aff2bfc3c61e7b86329b83190f0912b3
-2,<NULL>,2015-11-03 09:23:38.000,0,info,0,<NULL>,<NULL>,<NULL>,# is down,506560b3c73dee057732e69a3c666718
-EOF
-
-
-run_test ${lnav_test} -n \
+run_cap_test ${lnav_test} -n \
-c ";SELECT fields FROM logfmt_log" \
-c ":write-json-to -" \
${test_dir}/logfile_logfmt.0
-check_output "logfmt fields are not handled correctly?" <<EOF
-[
- {
- "fields": {
- "namespace": "inc-1-enh-domain-c14-ns-2",
- "pod": "hello-inc-1-enh-domain-c14-ns-2-3-d8f465685-k75gp",
- "reason": "",
- "status": "Pending"
- }
- },
- {
- "fields": {
- "error": "pod inc-1-domain-c14-ns-6/fe-inc-1-domain-c14-ns-6-5-656d9bb695-4584b is not found: PodNotFound",
- "namespace": "inc-1-domain-c14-ns-6",
- "pod": "fe-inc-1-domain-c14-ns-6-5-656d9bb695-4584b",
- "uid": "be2def59-3a08-42fd-8f84-6f64cfcefa93"
- }
- },
- {
- "fields": {
- "namespace": "inc-1-domain-c14-ns-6",
- "pod": "fe-inc-1-domain-c14-ns-6-5-656d9bb695-4584b",
- "uid": "be2def59-3a08-42fd-8f84-6f64cfcefa93"
- }
- },
- {
- "fields": {
- "namespace": "inc-1-domain-c14-ns-6",
- "pod": "fe-inc-1-domain-c14-ns-6-5-656d9bb695-4584b",
- "uid": "be2def59-3a08-42fd-8f84-6f64cfcefa93"
- }
- },
- {
- "fields": {
- "namespace": "inc-1-enh-domain-c14-ns-2",
- "pod": "hello-inc-1-enh-domain-c14-ns-2-7-5ddd6bcd69-6rqct",
- "reason": "",
- "status": "Pending"
- }
- }
-]
-EOF
-
-
-run_test ${lnav_test} -n \
+run_cap_test ${lnav_test} -n \
-c ";SELECT sc_substatus FROM w3c_log" \
-c ":write-json-to -" \
${test_dir}/logfile_w3c.3
-check_output "w3c quoted strings are not handled correctly?" <<EOF
-[
- {
- "sc_substatus": 0
- },
- {
- "sc_substatus": 0
- },
- {
- "sc_substatus": null
- }
-]
-EOF
-
-run_test ${lnav_test} -n \
+run_cap_test ${lnav_test} -n \
-c ";SELECT cs_headers FROM w3c_log" \
-c ":write-json-to -" \
${test_dir}/logfile_w3c.3
-check_output "w3c headers are not captured?" <<EOF
-[
- {
- "cs_headers": {
- "User-Agent": "Mozilla/5.0 (Linux; Android 4.4.4; SM-G900V Build/KTU84P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.59 Mobile Safari/537.36",
- "Referer": "http://example.com/Search/SearchResults.pg?informationRecipient.languageCode.c=en",
- "Host": "xzy.example.com"
- }
- },
- {
- "cs_headers": {
- "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.1 Safari/537.36",
- "Referer": null,
- "Host": "example.hello.com"
- }
- },
- {
- "cs_headers": {
- "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2062.124 Safari/537.36",
- "Referer": null,
- "Host": "hello.example.com"
- }
- }
-]
-EOF
-
run_cap_test ${lnav_test} -n \
-c ";SELECT * FROM generate_series()" \
${test_dir}/logfile_access_log.0
@@ -158,34 +67,16 @@ run_cap_test ${lnav_test} -n \
-c ";SELECT raise_error('oops!')" \
${test_dir}/logfile_access_log.0
-run_test ${lnav_test} -n \
+run_cap_test ${lnav_test} -n \
-c ";SELECT basename(filepath) as name, content, length(content) FROM lnav_file" \
-c ":write-csv-to -" \
${test_dir}/logfile_empty.0
-check_output "empty content not handled correctly?" <<EOF
-name,content,length(content)
-logfile_empty.0,,0
-EOF
-
-run_test ${lnav_test} -n \
+run_cap_test ${lnav_test} -n \
-c ";SELECT distinct xp.node_text FROM lnav_file, xpath('//author', content) as xp" \
-c ":write-csv-to -" \
${test_dir}/books.xml
-check_output "xpath on file content not working?" <<EOF
-node_text
-"Gambardella, Matthew"
-"Ralls, Kim"
-"Corets, Eva"
-"Randall, Cynthia"
-"Thurman, Paula"
-"Knorr, Stefan"
-"Kress, Peter"
-"O'Brien, Tim"
-"Galos, Mike"
-EOF
-
gzip -c ${srcdir}/logfile_json.json > logfile_json.json.gz
dd if=logfile_json.json.gz of=logfile_json-trunc.json.gz bs=64 count=2
@@ -212,7 +103,7 @@ ts
2013-09-06T22:00:59.124817Z
2013-09-06T22:00:59.124817Z
2013-09-06T22:00:59.124817Z
-2013-09-06T22:00:59.124817Z
+2013-09-06 22:01:00Z
2013-09-06T22:01:49.124817Z
2013-09-06T22:01:49.124817Z
2013-09-06T22:01:49.124817Z
@@ -263,10 +154,10 @@ run_test ${lnav_test} -n \
check_output "time_offset in lnav_file table is not reordering?" <<EOF
Wed May 19 12:00:01 2021 line 1
/abc/def
-Wed May 19 12:00:02 UTC 2021 line 2
+Wed May 19 12:00:02 +0000 2021 line 2
Wed May 19 12:00:03 2021 line 3
/ghi/jkl
-Wed May 19 12:00:04 UTC 2021 line 4
+Wed May 19 12:00:04 +0000 2021 line 4
EOF
@@ -280,15 +171,20 @@ EOF
run_cap_test ${lnav_test} -n \
-c ":goto 2" \
- -c ";SELECT log_top_line()" \
+ -c ";SELECT log_top_line(), log_msg_line()" \
${test_dir}/logfile_uwsgi.0
run_cap_test ${lnav_test} -n \
-c ":goto 2" \
- -c ";SELECT log_top_line()" \
+ -c ";SELECT log_top_line(), log_msg_line()" \
${test_dir}/logfile_empty.0
run_cap_test ${lnav_test} -n \
+ -c ":goto 1" \
+ -c ";SELECT log_top_line(), log_msg_line()" \
+ ${test_dir}/logfile_multiline.0
+
+run_cap_test ${lnav_test} -n \
-c ":goto 2" \
-c ";SELECT log_top_datetime()" \
${test_dir}/logfile_uwsgi.0
@@ -317,49 +213,21 @@ s_runtime
0.01
EOF
-run_test env TZ=UTC ${lnav_test} -n \
+run_cap_test env TZ=UTC ${lnav_test} -n \
-c ";SELECT bro_conn_log.bro_duration as duration, bro_conn_log.bro_uid, group_concat( distinct (bro_method || ' ' || bro_host)) as req from bro_http_log, bro_conn_log where bro_http_log.bro_uid = bro_conn_log.bro_uid group by bro_http_log.bro_uid order by duration desc limit 10" \
-c ":write-csv-to -" \
${test_dir}/logfile_bro_http.log.0 ${test_dir}/logfile_bro_conn.log.0
-check_output "bro logs are not recognized?" <<EOF
-duration,bro_uid,req
-116.438679,CwFs1P2UcUdlSxD2La,GET www.reddit.com
-115.202498,CdZUPH2DKOE7zzCLE3,GET feeds.bbci.co.uk
-115.121914,CdrfXZ1NOFPEawF218,GET c.thumbs.redditmedia.com
-115.121837,CoX7zA3OJKGUOSCBY2,GET e.thumbs.redditmedia.com
-115.12181,CJxSUgkInyKSHiju1,GET e.thumbs.redditmedia.com
-115.121506,CT0JIh479jXIGt0Po1,GET f.thumbs.redditmedia.com
-115.121339,CJwUi9bdB9c1lLW44,GET f.thumbs.redditmedia.com
-115.119217,C6Q4Vm14ZJIlZhsXqk,GET a.thumbs.redditmedia.com
-72.274459,CbNCgO1MzloHRNeY4f,GET www.google.com
-71.658218,CnGze54kQWWpKqrrZ4,GET ajax.googleapis.com
-EOF
-
-run_test env TZ=UTC ${lnav_test} -n \
+run_cap_test env TZ=UTC ${lnav_test} -n \
-c ";SELECT * FROM bro_http_log LIMIT 5" \
-c ":write-csv-to -" \
${test_dir}/logfile_bro_http.log.0
-check_output "bro logs are not recognized?" <<EOF
-log_line,log_part,log_time,log_idle_msecs,log_level,log_mark,log_comment,log_tags,log_filters,bro_ts,bro_uid,bro_id_orig_h,bro_id_orig_p,bro_id_resp_h,bro_id_resp_p,bro_trans_depth,bro_method,bro_host,bro_uri,bro_referrer,bro_version,bro_user_agent,bro_request_body_len,bro_response_body_len,bro_status_code,bro_status_msg,bro_info_code,bro_info_msg,bro_tags,bro_username,bro_password,bro_proxied,bro_orig_fuids,bro_orig_filenames,bro_orig_mime_types,bro_resp_fuids,bro_resp_filenames,bro_resp_mime_types
-0,<NULL>,2011-11-03 00:19:26.452,0,info,0,<NULL>,<NULL>,<NULL>,1320279566.452687,CwFs1P2UcUdlSxD2La,192.168.2.76,52026,132.235.215.119,80,1,GET,www.reddit.com,/,<NULL>,1.1,Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1,0,109978,200,OK,<NULL>,<NULL>,,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,Ftw3fJ2JJF3ntMTL2,<NULL>,text/html
-1,<NULL>,2011-11-03 00:19:26.831,379,info,0,<NULL>,<NULL>,<NULL>,1320279566.831619,CJxSUgkInyKSHiju1,192.168.2.76,52030,72.21.211.173,80,1,GET,e.thumbs.redditmedia.com,/E-pbDbmiBclPkDaX.jpg,http://www.reddit.com/,1.1,Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1,0,2300,200,OK,<NULL>,<NULL>,,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,FFTf9Zdgk3YkfCKo3,<NULL>,image/jpeg
-2,<NULL>,2011-11-03 00:19:26.831,0,info,0,<NULL>,<NULL>,<NULL>,1320279566.831563,CJwUi9bdB9c1lLW44,192.168.2.76,52029,72.21.211.173,80,1,GET,f.thumbs.redditmedia.com,/BP5bQfy4o-C7cF6A.jpg,http://www.reddit.com/,1.1,Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1,0,2272,200,OK,<NULL>,<NULL>,,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,FfXtOj3o7aub4vbs2j,<NULL>,image/jpeg
-3,<NULL>,2011-11-03 00:19:26.831,0,info,0,<NULL>,<NULL>,<NULL>,1320279566.831473,CoX7zA3OJKGUOSCBY2,192.168.2.76,52027,72.21.211.173,80,1,GET,e.thumbs.redditmedia.com,/SVUtep3Rhg5FTRn4.jpg,http://www.reddit.com/,1.1,Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1,0,2562,200,OK,<NULL>,<NULL>,,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,F21Ybs3PTqS6O4Q2Zh,<NULL>,image/jpeg
-4,<NULL>,2011-11-03 00:19:26.831,0,info,0,<NULL>,<NULL>,<NULL>,1320279566.831643,CT0JIh479jXIGt0Po1,192.168.2.76,52031,72.21.211.173,80,1,GET,f.thumbs.redditmedia.com,/uuy31444rLSyKdHS.jpg,http://www.reddit.com/,1.1,Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1,0,1595,200,OK,<NULL>,<NULL>,,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,Fdk0MZ1wQmKWAJ4WH4,<NULL>,image/jpeg
-EOF
-
-run_test env TZ=UTC ${lnav_test} -n \
+run_cap_test env TZ=UTC ${lnav_test} -n \
-c ";SELECT * FROM bro_http_log WHERE log_level = 'error'" \
-c ":write-csv-to -" \
${test_dir}/logfile_bro_http.log.0
-check_output "bro logs are not recognized?" <<EOF
-log_line,log_part,log_time,log_idle_msecs,log_level,log_mark,log_comment,log_tags,log_filters,bro_ts,bro_uid,bro_id_orig_h,bro_id_orig_p,bro_id_resp_h,bro_id_resp_p,bro_trans_depth,bro_method,bro_host,bro_uri,bro_referrer,bro_version,bro_user_agent,bro_request_body_len,bro_response_body_len,bro_status_code,bro_status_msg,bro_info_code,bro_info_msg,bro_tags,bro_username,bro_password,bro_proxied,bro_orig_fuids,bro_orig_filenames,bro_orig_mime_types,bro_resp_fuids,bro_resp_filenames,bro_resp_mime_types
-118,<NULL>,2011-11-03 00:19:49.337,18,error,0,<NULL>,<NULL>,<NULL>,1320279589.337053,CBHHuR1xFnm5C5CQBc,192.168.2.76,52074,74.125.225.76,80,1,GET,i4.ytimg.com,/vi/gDbg_GeuiSY/hqdefault.jpg,<NULL>,1.1,Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:7.0.1) Gecko/20100101 Firefox/7.0.1,0,893,404,Not Found,<NULL>,<NULL>,,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,<NULL>,F2GiAw3j1m22R2yIg2,<NULL>,image/jpeg
-EOF
-
run_test ${lnav_test} -n \
-c ';select log_time from access_log where log_line > 100000' \
-c ':switch-to-view db' \
@@ -417,7 +285,7 @@ run_cap_test ${lnav_test} -n \
-c ':spectrogram c_ip' \
${test_dir}/logfile_access_log.0
-run_cap_test env TZ=UTC LC_NUMERIC=C ${lnav_test} -n \
+run_cap_test env TZ=UTC LC_ALL=C ${lnav_test} -n \
-c ':spectrogram bro_response_body_len' \
${test_dir}/logfile_bro_http.log.0
@@ -493,59 +361,29 @@ log_line,log_part
EOF
-run_test ${lnav_test} -n \
+run_cap_test ${lnav_test} -n \
-I "${top_srcdir}/test" \
-c ";select * from web_status" \
-c ':write-csv-to -' \
${test_dir}/logfile_access_log.0
-check_output "access_log table is not working" <<EOF
-group_concat(cs_uri_stem),sc_status
-"/vmw/cgi/tramp,/vmw/vSphere/default/vmkernel.gz",200
-/vmw/vSphere/default/vmkboot.gz,404
-EOF
-
-
-run_test ${lnav_test} -n \
+run_cap_test ${lnav_test} -n \
-c ";select * from access_log" \
-c ':write-csv-to -' \
${test_dir}/logfile_access_log.0
-check_output "access_log table is not working" <<EOF
-log_line,log_part,log_time,log_idle_msecs,log_level,log_mark,log_comment,log_tags,log_filters,c_ip,cs_method,cs_referer,cs_uri_query,cs_uri_stem,cs_user_agent,cs_username,cs_version,sc_bytes,sc_status,cs_host
-0,<NULL>,2009-07-20 22:59:26.000,0,info,0,<NULL>,<NULL>,<NULL>,192.168.202.254,GET,-,<NULL>,/vmw/cgi/tramp,gPXE/0.9.7,-,HTTP/1.0,134,200,<NULL>
-1,<NULL>,2009-07-20 22:59:29.000,3000,error,0,<NULL>,<NULL>,<NULL>,192.168.202.254,GET,-,<NULL>,/vmw/vSphere/default/vmkboot.gz,gPXE/0.9.7,-,HTTP/1.0,46210,404,<NULL>
-2,<NULL>,2009-07-20 22:59:29.000,0,info,0,<NULL>,<NULL>,<NULL>,192.168.202.254,GET,-,<NULL>,/vmw/vSphere/default/vmkernel.gz,gPXE/0.9.7,-,HTTP/1.0,78929,200,<NULL>
-EOF
-
-
-run_test ${lnav_test} -n \
+run_cap_test ${lnav_test} -n \
-c ";select * from access_log where log_level >= 'warning'" \
-c ':write-csv-to -' \
${test_dir}/logfile_access_log.0
-check_output "loglevel collator is not working" <<EOF
-log_line,log_part,log_time,log_idle_msecs,log_level,log_mark,log_comment,log_tags,log_filters,c_ip,cs_method,cs_referer,cs_uri_query,cs_uri_stem,cs_user_agent,cs_username,cs_version,sc_bytes,sc_status,cs_host
-1,<NULL>,2009-07-20 22:59:29.000,3000,error,0,<NULL>,<NULL>,<NULL>,192.168.202.254,GET,-,<NULL>,/vmw/vSphere/default/vmkboot.gz,gPXE/0.9.7,-,HTTP/1.0,46210,404,<NULL>
-EOF
-
-
# XXX The timestamp on the file is used to determine the year for syslog files.
touch -t 200711030923 ${test_dir}/logfile_syslog.0
-run_test ${lnav_test} -n \
+run_cap_test ${lnav_test} -n \
-c ";select * from syslog_log" \
-c ':write-csv-to -' \
${test_dir}/logfile_syslog.0
-check_output "syslog_log table is not working" <<EOF
-log_line,log_part,log_time,log_idle_msecs,log_level,log_mark,log_comment,log_tags,log_filters,log_hostname,log_msgid,log_pid,log_pri,log_procname,log_struct,log_syslog_tag,syslog_version
-0,<NULL>,2007-11-03 09:23:38.000,0,error,0,<NULL>,<NULL>,<NULL>,veridian,<NULL>,7998,<NULL>,automount,<NULL>,automount[7998],<NULL>
-1,<NULL>,2007-11-03 09:23:38.000,0,info,0,<NULL>,<NULL>,<NULL>,veridian,<NULL>,16442,<NULL>,automount,<NULL>,automount[16442],<NULL>
-2,<NULL>,2007-11-03 09:23:38.000,0,error,0,<NULL>,<NULL>,<NULL>,veridian,<NULL>,7999,<NULL>,automount,<NULL>,automount[7999],<NULL>
-3,<NULL>,2007-11-03 09:47:02.000,1404000,info,0,<NULL>,<NULL>,<NULL>,veridian,<NULL>,<NULL>,<NULL>,sudo,<NULL>,sudo,<NULL>
-EOF
-
-
run_test ${lnav_test} -n \
-c ";select * from syslog_log where log_time >= NULL" \
-c ':write-csv-to -' \
@@ -736,8 +574,8 @@ check_output "schema view is not working" <<EOF
ATTACH DATABASE '' AS 'main';
CREATE VIRTUAL TABLE environ USING environ_vtab_impl();
CREATE VIRTUAL TABLE lnav_static_files USING lnav_static_file_vtab_impl();
-CREATE VIRTUAL TABLE lnav_views USING lnav_views_impl();
CREATE VIRTUAL TABLE lnav_view_filter_stats USING lnav_view_filter_stats_impl();
+CREATE VIRTUAL TABLE lnav_views USING lnav_views_impl();
CREATE VIRTUAL TABLE lnav_view_files USING lnav_view_files_impl();
CREATE VIRTUAL TABLE lnav_view_stack USING lnav_view_stack_impl();
CREATE VIRTUAL TABLE lnav_view_filters USING lnav_view_filters_impl();
@@ -816,58 +654,19 @@ log_line,log_part
2,<NULL>
EOF
+# test the partitions defined in the format
+run_cap_test ${lnav_test} -n \
+ -I ${test_dir} \
+ -c ";SELECT log_line, log_part, log_body FROM syslog_log" \
+ -c ":write-csv-to -" \
+ ${test_dir}/logfile_partitions.0
-run_test ${lnav_test} -n \
+run_cap_test ${lnav_test} -n \
-c ";SELECT * FROM openam_log" \
-c ":write-json-to -" \
${test_dir}/logfile_openam.0
-check_output "write-json-to isn't working?" <<EOF
-[
- {
- "log_line": 0,
- "log_part": null,
- "log_time": "2014-06-15 01:04:52.000",
- "log_idle_msecs": 0,
- "log_level": "info",
- "log_mark": 0,
- "log_comment": null,
- "log_tags": null,
- "log_filters": null,
- "contextid": "82e87195d704585501",
- "data": "http://localhost:8086|/|<samlp:Response xmlns:samlp=\"urn:oasis:names:tc:SAML:2.0:protocol\" ID=\"s2daac0735bf476f4560aab81104b623bedfb0cbc0\" InResponseTo=\"84cbf2be33f6410bbe55877545a93f02\" Version=\"2.0\" IssueInstant=\"2014-06-15T01:04:52Z\" Destination=\"http://localhost:8086/api/1/rest/admin/org/530e42ccd6f45fd16d0d0717/saml/consume\"><saml:Issuer xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\">http://openam.vagrant.dev/openam</saml:Issuer><samlp:Status xmlns:samlp=\"urn:oasis:names:tc:SAML:2.0:protocol\">\\\\n<samlp:StatusCode xmlns:samlp=\"urn:oasis:names:tc:SAML:2.0:protocol\"\\\\nValue=\"urn:oasis:names:tc:SAML:2.0:status:Success\">\\\\n</samlp:StatusCode>\\\\n</samlp:Status><saml:Assertion xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\" ID=\"s2a0bee0da937e236167e99b209802056033816ac2\" IssueInstant=\"2014-06-15T01:04:52Z\" Version=\"2.0\">\\\\n<saml:Issuer>http://openam.vagrant.dev/openam</saml:Issuer><ds:Signature xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\">\\\\n<ds:SignedInfo>\\\\n<ds:CanonicalizationMethod Algorithm=\"http://www.w3.org/2001/10/xml-exc-c14n#\"/>\\\\n<ds:SignatureMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#rsa-sha1\"/>\\\\n<ds:Reference URI=\"#s2a0bee0da937e236167e99b209802056033816ac2\">\\\\n<ds:Transforms>\\\\n<ds:Transform Algorithm=\"http://www.w3.org/2000/09/xmldsig#enveloped-signature\"/>\\\\n<ds:Transform Algorithm=\"http://www.w3.org/2001/10/xml-exc-c14n#\"/>\\\\n</ds:Transforms>\\\\n<ds:DigestMethod Algorithm=\"http://www.w3.org/2000/09/xmldsig#sha1\"/>\\\\n<ds:DigestValue>4uSmVzjovUdQd3px/RcnoxQBsqE=</ds:DigestValue>\\\\n</ds:Reference>\\\\n</ds:SignedInfo>\\\\n<ds:SignatureValue>\\\\nhm/grge36uA6j1OWif2bTcvVTwESjmuJa27NxepW0AiV5YlcsHDl7RAIk6k/CjsSero3bxGbm56m\\\\nYncOEi9F1Tu7dS0bfx+vhm/kKTPgwZctf4GWn4qQwP+KeoZywbNj9ShsYJ+zPKzXwN4xBSuPjMxP\\\\nNf5szzjEWpOndQO/uDs=\\\\n</ds:SignatureValue>\\\\n<ds:KeyInfo>\\\\n<ds:X509Data>\\\\n<ds:X509Certificate>\\\\nMIICQDCCAakCBEeNB0swDQYJKoZIhvcNAQEEBQAwZzELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNh\\\\nbGlmb3JuaWExFDASBgNVBAcTC1NhbnRhIENsYXJhMQwwCgYDVQQKEwNTdW4xEDAOBgNVBAsTB09w\\\\nZW5TU08xDTALBgNVBAMTBHRlc3QwHhcNMDgwMTE1MTkxOTM5WhcNMTgwMTEyMTkxOTM5WjBnMQsw\\\\nCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEUMBIGA1UEBxMLU2FudGEgQ2xhcmExDDAK\\\\nBgNVBAoTA1N1bjEQMA4GA1UECxMHT3BlblNTTzENMAsGA1UEAxMEdGVzdDCBnzANBgkqhkiG9w0B\\\\nAQEFAAOBjQAwgYkCgYEArSQc/U75GB2AtKhbGS5piiLkmJzqEsp64rDxbMJ+xDrye0EN/q1U5Of+\\\\nRkDsaN/igkAvV1cuXEgTL6RlafFPcUX7QxDhZBhsYF9pbwtMzi4A4su9hnxIhURebGEmxKW9qJNY\\\\nJs0Vo5+IgjxuEWnjnnVgHTs1+mq5QYTA7E6ZyL8CAwEAATANBgkqhkiG9w0BAQQFAAOBgQB3Pw/U\\\\nQzPKTPTYi9upbFXlrAKMwtFf2OW4yvGWWvlcwcNSZJmTJ8ARvVYOMEVNbsT4OFcfu2/PeYoAdiDA\\\\ncGy/F2Zuj8XJJpuQRSE6PtQqBuDEHjjmOQJ0rV/r8mO1ZCtHRhpZ5zYRjhRC9eCbjx9VrFax0JDC\\\\n/FfwWigmrW0Y0Q==\\\\n</ds:X509Certificate>\\\\n</ds:X509Data>\\\\n</ds:KeyInfo>\\\\n</ds:Signature><saml:Subject>\\\\n<saml:NameID Format=\"urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress\" NameQualifier=\"http://openam.vagrant.dev/openam\">user@example.com</saml:NameID><saml:SubjectConfirmation Method=\"urn:oasis:names:tc:SAML:2.0:cm:bearer\">\\\\n<saml:SubjectConfirmationData InResponseTo=\"84cbf2be33f6410bbe55877545a93f02\" NotOnOrAfter=\"2014-06-15T01:14:52Z\" Recipient=\"http://localhost:8086/api/1/rest/admin/org/530e42ccd6f45fd16d0d0717/saml/consume\"/></saml:SubjectConfirmation>\\\\n</saml:Subject><saml:Conditions NotBefore=\"2014-06-15T00:54:52Z\" NotOnOrAfter=\"2014-06-15T01:14:52Z\">\\\\n<saml:AudienceRestriction>\\\\n<saml:Audience>http://localhost:8086</saml:Audience>\\\\n</saml:AudienceRestriction>\\\\n</saml:Conditions>\\\\n<saml:AuthnStatement AuthnInstant=\"2014-06-15T01:00:25Z\" SessionIndex=\"s2f9b4d4b453d12b40ef3905cc959cdb40579c2301\"><saml:AuthnContext><saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:PasswordProtectedTransport</saml:AuthnContextClassRef></saml:AuthnContext></saml:AuthnStatement></saml:Assertion></samlp:Response>",
- "domain": "dc=openam",
- "hostname": "192.168.33.1\t",
- "ipaddr": "Not Available",
- "loggedby": "cn=dsameuser,ou=DSAME Users,dc=openam",
- "loginid": "id=openamuser,ou=user,dc=openam",
- "messageid": "SAML2-37",
- "modulename": "SAML2.access",
- "nameid": "user@example.com"
- },
- {
- "log_line": 1,
- "log_part": null,
- "log_time": "2014-06-15 01:04:52.000",
- "log_idle_msecs": 0,
- "log_level": "trace",
- "log_mark": 0,
- "log_comment": null,
- "log_tags": null,
- "log_filters": null,
- "contextid": "ec5708a7f199678a01",
- "data": "vagrant|/",
- "domain": "dc=openam",
- "hostname": "127.0.1.1\t",
- "ipaddr": "Not Available",
- "loggedby": "cn=dsameuser,ou=DSAME Users,dc=openam",
- "loginid": "cn=dsameuser,ou=DSAME Users,dc=openam",
- "messageid": "COT-22",
- "modulename": "COT.access",
- "nameid": "Not Available"
- }
-]
-EOF
+touch -t 200711030000 ${srcdir}/logfile_for_join.0
run_cap_test ${lnav_test} -d "/tmp/lnav.err" -n \
-c ";select log_line, col_0 from logline" \
@@ -952,18 +751,11 @@ unset LNAVSECURE
touch -t 201503240923 ${test_dir}/logfile_syslog_with_access_log.0
-run_test ${lnav_test} -n -d /tmp/lnav.err \
+run_cap_test ${lnav_test} -n -d /tmp/lnav.err \
-c ";select * from access_log" \
-c ':write-csv-to -' \
${test_dir}/logfile_syslog_with_access_log.0
-check_output "access_log not found within syslog file" <<EOF
-log_line,log_part,log_time,log_idle_msecs,log_level,log_mark,log_comment,log_tags,log_filters,c_ip,cs_method,cs_referer,cs_uri_query,cs_uri_stem,cs_user_agent,cs_username,cs_version,sc_bytes,sc_status,cs_host
-1,<NULL>,2015-03-24 14:02:50.000,6927348000,info,0,<NULL>,<NULL>,<NULL>,127.0.0.1,GET,<NULL>,<NULL>,/includes/js/combined-javascript.js,<NULL>,-,HTTP/1.1,65508,200,<NULL>
-2,<NULL>,2015-03-24 14:02:50.000,0,error,0,<NULL>,<NULL>,<NULL>,127.0.0.1,GET,<NULL>,<NULL>,/bad.foo,<NULL>,-,HTTP/1.1,65508,404,<NULL>
-EOF
-
-
run_test ${lnav_test} -n \
-c ";select log_text from generic_log" \
-c ":write-json-to -" \
@@ -1095,3 +887,7 @@ run_cap_test ${lnav_test} -n \
run_cap_test ${lnav_test} -Nn \
-c ";select *,case match_index when 2 then replicate('abc', 1000) else '' end from regexp_capture_into_json('10;50;50;50;', '(\d+);')"
+
+run_cap_test ${lnav_test} -n \
+ -c ";.msgformats" \
+ ${test_dir}/logfile_for_join.0
diff --git a/test/test_sql_anno.sh b/test/test_sql_anno.sh
index e09c312..74af141 100644
--- a/test/test_sql_anno.sh
+++ b/test/test_sql_anno.sh
@@ -48,3 +48,9 @@ run_cap_test ./drive_sql_anno \
"SELECT * from vmw_log, regexp_capture(log_body, '--> /SessionStats/SessionPool/Session/(?<line>[abc]+)')"
run_cap_test ./drive_sql_anno "SELECT * FROM foo.bar"
+
+run_cap_test ./drive_sql_anno "SELECT json_object('abc', 'def') ->> '$.abc'"
+
+run_cap_test ./drive_sql_anno "SELECT 0x77, 123, 123e4"
+
+run_cap_test ./drive_sql_anno "from access_log | filter cs_method == 'GET' || cs_method == 'PUT'"
diff --git a/test/test_sql_fs_func.sh b/test/test_sql_fs_func.sh
index e3da92b..7955c57 100644
--- a/test/test_sql_fs_func.sh
+++ b/test/test_sql_fs_func.sh
@@ -51,3 +51,9 @@ run_cap_test ./drive_sql "select joinpath('foo')"
run_cap_test ./drive_sql "select joinpath('foo', 'bar', 'baz')"
run_cap_test ./drive_sql "select joinpath('foo', 'bar', 'baz', '/root')"
+
+run_cap_test ${lnav_test} -Nn -c ";SELECT shell_exec('echo hi')"
+
+run_cap_test ${lnav_test} -Nn -c ";SELECT * FROM fstat('/non-existent')"
+
+run_cap_test ${lnav_test} -Nn -c ";SELECT * FROM fstat('/*.non-existent')"
diff --git a/test/test_sql_indexes.sh b/test/test_sql_indexes.sh
index 951c7a6..763e234 100644
--- a/test/test_sql_indexes.sh
+++ b/test/test_sql_indexes.sh
@@ -1,5 +1,6 @@
#! /bin/bash
+export TZ=UTC
export YES_COLOR=1
# XXX sqlite reports different results for the "detail" column, so we
@@ -43,3 +44,7 @@ run_cap_test ${lnav_test} -n \
run_cap_test ${lnav_test} -n \
-c ";SELECT * FROM all_logs WHERE log_level > 'error'" \
${test_dir}/logfile_access_log.*
+
+run_cap_test ${lnav_test} -n \
+ -c ";SELECT * FROM all_logs WHERE log_line <= 20" \
+ ${test_dir}/logfile_access_log.*
diff --git a/test/test_sql_regexp.sh b/test/test_sql_regexp.sh
index 23d0425..06d7457 100644
--- a/test/test_sql_regexp.sh
+++ b/test/test_sql_regexp.sh
@@ -29,4 +29,14 @@ run_cap_test ${lnav_test} -nN \
-c ";SELECT * from regexp_capture('abc=def;ghi=jkl;', '^(\w+)=([^;]+);')"
run_cap_test ${lnav_test} -nN \
+ -c ";SELECT * from regexp_capture('abc=def;ghi=jkl;', '^(')"
+
+run_cap_test ${lnav_test} -nN \
-c ";SELECT * from regexp_capture_into_json('abc=def;ghi=jkl;', '^(\w+)=([^;]+);')"
+
+run_cap_test ${lnav_test} -nN \
+ -c ";SELECT * from regexp_capture_into_json('abc=def;ghi=jkl;', '^(')"
+
+run_cap_test ${lnav_test} -n \
+ -c ";select regexp_replace(cs_uri_query, '.*rapidView=(\d+).*', '\1') from access_log;" \
+ ${test_dir}/logfile_regexp_access_log.0
diff --git a/test/test_sql_search_table.sh b/test/test_sql_search_table.sh
index bf5e71b..e1e1dbd 100644
--- a/test/test_sql_search_table.sh
+++ b/test/test_sql_search_table.sh
@@ -1,5 +1,6 @@
#! /bin/bash
+export TZ=UTC
export YES_COLOR=1
run_cap_test ${lnav_test} -n \
diff --git a/test/test_sql_str_func.sh b/test/test_sql_str_func.sh
index e4cb96b..816e260 100644
--- a/test/test_sql_str_func.sh
+++ b/test/test_sql_str_func.sh
@@ -1,5 +1,7 @@
#! /bin/bash
+export YES_COLOR=1
+
run_cap_test ./drive_sql "select length(gzip(1))"
run_cap_test ./drive_sql "select gunzip(gzip(1))"
@@ -109,6 +111,8 @@ run_cap_test ./drive_sql "SELECT encode('foo', null)"
run_cap_test ./drive_sql "SELECT encode(null, 'base64')"
+run_cap_test ./drive_sql "SELECT encode('hi' || char(10), 'hex')"
+
run_cap_test ./drive_sql "SELECT gunzip(decode(encode(gzip('Hello, World!'), 'base64'), 'base64'))"
#run_cap_test env TEST_COMMENT=invalid_url ./drive_sql <<'EOF'
@@ -143,6 +147,10 @@ run_cap_test env TEST_COMMENT=parse_url6 ./drive_sql <<'EOF'
SELECT parse_url('https://example.com/sea%26rch?flag&flag2&=def#frag1%20space')
EOF
+run_cap_test env TEST_COMMENT=parse_url7 ./drive_sql <<'EOF'
+SELECT parse_url('https://example.com/sea%26rch?flag&flag2&=def&flag3=abc+def#frag1%20space')
+EOF
+
run_cap_test env TEST_COMMENT=unparse_url3 ./drive_sql <<'EOF'
SELECT unparse_url(parse_url('https://example.com/search?flag'))
@@ -160,6 +168,26 @@ run_cap_test env TEST_COMMENT=unparse_url6 ./drive_sql <<'EOF'
SELECT unparse_url(parse_url('https://example.com/search?flag&flag2&=def#frag1%20space'))
EOF
+run_cap_test env TEST_COMMENT=unparse_url7 ./drive_sql <<'EOF'
+SELECT unparse_url(NULL)
+EOF
+
+run_cap_test env TEST_COMMENT=unparse_url8 ./drive_sql <<'EOF'
+SELECT unparse_url(123)
+EOF
+
+run_cap_test env TEST_COMMENT=unparse_url9 ./drive_sql <<'EOF'
+SELECT unparse_url('[1, 2, 3]')
+EOF
+
+run_cap_test env TEST_COMMENT=unparse_url10 ./drive_sql <<'EOF'
+SELECT unparse_url(json_object('unknown', 'abc'))
+EOF
+
+run_cap_test env TEST_COMMENT=unparse_url11 ./drive_sql <<'EOF'
+SELECT unparse_url('{}')
+EOF
+
run_cap_test ${lnav_test} -n \
-c ';SELECT log_body, extract(log_body) from vmw_log' \
-c ':write-json-to -' \
@@ -168,3 +196,6 @@ run_cap_test ${lnav_test} -n \
run_cap_test ${lnav_test} -n \
-c ';SELECT anonymize(bro_id_resp_h) FROM bro_http_log' \
${test_dir}/logfile_bro_http.log.0
+
+run_cap_test ${lnav_test} -nN \
+ -c ";SELECT humanize_id('foo'), humanize_id('bar')"
diff --git a/test/test_sql_time_func.sh b/test/test_sql_time_func.sh
index 181dd70..1e35bd9 100644
--- a/test/test_sql_time_func.sh
+++ b/test/test_sql_time_func.sh
@@ -69,3 +69,17 @@ run_cap_test ./drive_sql "select timediff('today', 'yesterday')"
# timeslice day
run_cap_test ./drive_sql "select timediff('foo', 'yesterday')"
+
+run_cap_test ./drive_sql "SELECT timezone('America/Los_Angeles', '2022-03-02T10:00')"
+
+run_cap_test ./drive_sql "SELECT timezone('America/Los_Angeles', '2022-03-02T10:20:30.400-0700')"
+
+run_cap_test ./drive_sql "SELECT timezone('America/Los_Angeles', '2022-04-02T10:20:30.400-0700')"
+
+run_cap_test ./drive_sql "SELECT timezone('America/New_York', '2022-03-02T10:20:30.400-0700')"
+
+run_cap_test ./drive_sql "SELECT timezone('UTC', '2022-03-02T10:20:30.400-0700')"
+
+run_cap_test ${lnav_test} -nN -c ";SELECT timezone('bad-zone', '2022-03-02T10:20:30.400-0700')"
+
+run_cap_test ${lnav_test} -nN -c ";SELECT timezone('UTC', '2022-03-02T10:20:30.400bad')"
diff --git a/test/test_sql_views_vtab.sh b/test/test_sql_views_vtab.sh
index 606a673..c1e4d29 100644
--- a/test/test_sql_views_vtab.sh
+++ b/test/test_sql_views_vtab.sh
@@ -1,5 +1,6 @@
#! /bin/bash
+export TZ=UTC
export YES_COLOR=1
unset XDG_CONFIG_HOME
@@ -121,7 +122,7 @@ run_test ${lnav_test} -n \
check_output "delete from lnav_views table works?" <<EOF
count(*)
-8
+9
EOF
@@ -133,7 +134,7 @@ run_test ${lnav_test} -n \
check_output "insert into lnav_views table works?" <<EOF
count(*)
-8
+9
EOF
run_cap_test ${lnav_test} -n \
@@ -177,3 +178,17 @@ run_cap_test ${lnav_test} -n \
-c ";SELECT top_meta FROM lnav_top_view" \
-c ":write-json-to -" \
${test_dir}/logfile_xml_msg.0
+
+run_cap_test ${lnav_test} -n -I ${test_dir} \
+ -c ";UPDATE lnav_views SET options = json_object('row-details', 'show') WHERE name = 'log'" \
+ -c ":goto 2" \
+ ${test_dir}/logfile_xml_msg.0
+
+run_cap_test ${lnav_test} -n -I ${test_dir} \
+ -c ";UPDATE lnav_views SET options = json_object('row-details', 'show') WHERE name = 'log'" \
+ -c ":goto 9" \
+ ${test_dir}/logfile_bunyan.0
+
+run_cap_test ${lnav_test} -n \
+ -c ";UPDATE lnav_views SET top_meta = json_object('file', 'bad') WHERE name = 'text'" \
+ ${test_dir}/textfile_ansi.0
diff --git a/test/test_sql_xml_func.sh b/test/test_sql_xml_func.sh
index 72f1b0c..51357eb 100644
--- a/test/test_sql_xml_func.sh
+++ b/test/test_sql_xml_func.sh
@@ -1,5 +1,7 @@
#! /bin/bash
+export YES_COLOR=1
+
run_cap_test ./drive_sql "SELECT * FROM xpath('/abc[', '<abc/>')"
run_cap_test ./drive_sql "SELECT * FROM xpath('/abc', '<abc')"
@@ -9,3 +11,11 @@ run_cap_test ./drive_sql "SELECT * FROM xpath('/abc/def', '<abc/>')"
run_cap_test ./drive_sql "SELECT * FROM xpath('/abc/def[@a=\"b\"]', '<abc><def/><def a=\"b\">ghi</def></abc>')"
run_cap_test ./drive_sql "SELECT * FROM xpath('/abc/def', '<abc><def>Hello &gt;</def></abc>')"
+
+run_cap_test ${lnav_test} -n \
+ -c ";SELECT * FROM xpath('/catalog', (SELECT content FROM lnav_file LIMIT 1))" \
+ ${test_dir}/invalid-books.xml
+
+run_cap_test ${lnav_test} -n \
+ -c ";SELECT * FROM xpath('/cat[alog', (SELECT content FROM lnav_file LIMIT 1))" \
+ ${test_dir}/books.xml
diff --git a/test/test_stubs.cc b/test/test_stubs.cc
index 7d273b3..ff18224 100644
--- a/test/test_stubs.cc
+++ b/test/test_stubs.cc
@@ -69,6 +69,11 @@ rebuild_indexes_repeatedly()
{
}
+void
+wait_for_pipers(nonstd::optional<timeval>)
+{
+}
+
readline_context::command_map_t lnav_commands;
namespace injector {
diff --git a/test/test_text_anonymizer.cc b/test/test_text_anonymizer.cc
index 162111f..d163085 100644
--- a/test/test_text_anonymizer.cc
+++ b/test/test_text_anonymizer.cc
@@ -59,7 +59,7 @@ TEST_CASE("url")
lnav::text_anonymizer ta;
CHECK(ta.next(string_fragment::from_const("retrieving https://bob:abc@example.com/fooooooo22/192.168.1.33/barrrrr44?abcdef=foobar&ghijkl=123456&bazzer&ip=192.168.1.2#heading-2")) ==
- "aback https://meerkat:67c93775f715ab8ab01178caf86713c6@achondroplasia.example.com/abaft22/10.0.0.1/abashed44?aberrant=abhorrent&abiding=123456&abject&ip=10.0.0.2#able-2");
+ "aback https://meerkat:67c93775f715ab8ab01178caf86713c6@achondroplasia.example.com/abaft22/10.0.0.1/abashed44?aberrant=abhorrent&abiding=123456&abject&ip=10.0.0.2#heading-2");
}
TEST_CASE("email")
@@ -127,5 +127,5 @@ TEST_CASE("xml")
lnav::text_anonymizer ta;
CHECK(ta.next(string_fragment::from_const("<o:gupdate xmlns:o=\"http://www.google.com/update2/request\" protocol=\"2.0\" version=\"KeystoneDaemon-1.2.0.7709\" ismachine=\"1\" requestid=\"{0DFDBCD1-5E29-4DFC-BD99-31A2397198FE}\">")) ==
- "<o:gupdate xmlns:o=\"http://achondroplasia.example.com/aback2/abandoned\" protocol=\"2.0\" version=\"Abashed-1.2.0.7709\" ismachine=\"1\" requestid=\"{1ca0a968-cbe9-e75b-d00b-4859609878ea}\">");
+ "<o:gupdate xmlns:o=\"http://achondroplasia.example.com/aback2/abandoned\" protocol=\"2.0\" version=\"KeystoneDaemon-1.2.0.7709\" ismachine=\"1\" requestid=\"{1ca0a968-cbe9-e75b-d00b-4859609878ea}\">");
}
diff --git a/test/test_text_file.sh b/test/test_text_file.sh
index 166f790..57ac32e 100644
--- a/test/test_text_file.sh
+++ b/test/test_text_file.sh
@@ -1,9 +1,15 @@
#! /bin/bash
+export TZ=UTC
export YES_COLOR=1
unset XDG_CONFIG_HOME
run_cap_test ${lnav_test} -n \
+ -c ':goto 5' \
+ -c ':filter-out Lorem|sed' \
+ ${test_dir}/textfile_plain.0
+
+run_cap_test ${lnav_test} -n \
${top_srcdir}/README.md
run_cap_test ${lnav_test} -n -c ':goto #screenshot' \
@@ -34,3 +40,85 @@ run_cap_test ${lnav_test} -n \
run_cap_test ${lnav_test} -n \
${test_dir}/textfile_ansi_expanding.0
+
+run_cap_test ${lnav_test} -n \
+ ${test_dir}/textfile_0.md
+
+run_cap_test ${lnav_test} -n \
+ ${test_dir}/pyfile_0.py
+
+run_cap_test ${lnav_test} -n \
+ ${test_dir}/man_echo.txt
+
+run_cap_test ${lnav_test} -n \
+ -c ";SELECT top_meta FROM lnav_views WHERE name = 'text'" \
+ -c ':write-json-to -' \
+ ${test_dir}/man_echo.txt
+
+run_cap_test ${lnav_test} -n \
+ -c ':goto 8' \
+ -c ";SELECT top_meta FROM lnav_views WHERE name = 'text'" \
+ -c ':write-json-to -' \
+ < ${test_dir}/man_echo.txt
+
+run_cap_test ${lnav_test} -n \
+ -c ':goto 6' \
+ -c ";SELECT top_meta FROM lnav_views WHERE name = 'text'" \
+ -c ':write-json-to -' \
+ < ${test_dir}/example.toml
+
+run_cap_test ${lnav_test} -n \
+ -c ':goto 9' \
+ -c ";SELECT top_meta FROM lnav_views WHERE name = 'text'" \
+ -c ':write-json-to -' \
+ < ${test_dir}/example.patch
+
+run_cap_test ${lnav_test} -n \
+ < ${top_srcdir}/autogen.sh
+
+run_cap_test ${lnav_test} -n \
+ -c ';SELECT content FROM lnav_file' \
+ ${test_dir}/textfile_nonl.txt
+
+run_cap_test ${lnav_test} -n \
+ -c ':goto 23' \
+ -c ';SELECT top_meta FROM lnav_top_view' \
+ -c ':write-json-to -' \
+ ${test_dir}/formats/jsontest/format.json
+
+run_cap_test ${lnav_test} -n \
+ -c ':goto 3' \
+ -c ':next-section' \
+ ${test_dir}/books.json
+
+run_cap_test ${lnav_test} -n \
+ -c ':goto 3' \
+ -c ':next-section' \
+ < ${test_dir}/books.json
+
+run_cap_test ${lnav_test} -n \
+ -c ':goto #/catalog/1/title' \
+ ${test_dir}/books.json
+
+run_cap_test ${lnav_test} -n \
+ -c ':goto #/catalog/1/title' \
+ < ${test_dir}/books.json
+
+echo "Hello, World!" | run_cap_test env TEST_COMMENT="piper crumbs" ${lnav_test} -n \
+ -c ';SELECT top_meta FROM lnav_top_view' \
+ -c ':write-json-to -'
+
+echo "Hello, World!" | run_cap_test \
+ env TEST_COMMENT="piper crumbs" TZ=America/Los_Angeles \
+ ${lnav_test} -n \
+ -c ';SELECT top_meta FROM lnav_top_view' \
+ -c ':write-json-to -'
+
+echo "Hello, World!" | run_cap_test \
+ env TEST_COMMENT="piper crumbs" TZ=America/Los_Angeles \
+ ${lnav_test} -nt
+
+${test_dir}/naughty_files.py
+run_cap_test ${lnav_test} -n naughty/file-with-hidden-text.txt
+
+run_cap_test ${lnav_test} -n naughty/file-with-terminal-controls.txt
diff --git a/test/textfile_0.md b/test/textfile_0.md
index 377e46f..7bda8e1 100644
--- a/test/textfile_0.md
+++ b/test/textfile_0.md
@@ -7,3 +7,54 @@
* One
* Two
* Three
+
+<img src="../docs/lnav-tui.png" />
+
+<img src="../docs/lnav-architecture.png" alt="The internal architecture of lnav" />
+
+<span style="color: #f00; font-weight: bold">Bold red</span>
+
+<span style="text-decoration: underline; background-color: darkblue">Underline</span>
+
+<pre>
+ Hello,
+ <span class="name">World</span>!
+</pre>
+
+Goodbye, <span style="border-left: solid cyan; border-right: dashed green">World</span>!
+
+```foolang
+foo bar bar
+baz "xyz"
+```
+
+```c
+/*
+ * This program prints "Hello, World!"
+ */
+
+#include <stdio.h>
+
+int main() {
+ printf("Hello, World!\n");
+}
+```
+
+```python
+def hw(name):
+ """
+ This function prints "Hello, <name>!"
+ """
+
+ print(f"Hello, {name}!") # test comment
+```
+
+```xml
+<?xml version="1.0" encoding="utf-8" ?>
+<books>
+ <!-- Line comment -->
+ <book id="100">
+ <author>Finnegan</author>
+ </book>
+</books>
+```
diff --git a/test/textfile_cjk.0 b/test/textfile_cjk.0
new file mode 100644
index 0000000..09c4899
--- /dev/null
+++ b/test/textfile_cjk.0
@@ -0,0 +1,3 @@
+一二三四五六七八九十Group1一二三四五六七八九十Group2一二三四五六七八九十Group3一二三四五六七八九十Group4一二三四五六七八九十Group5
+
+This is an example of a normally-behavioring text wrap example. All letters are ASCII and containing no CJK letters. \ No newline at end of file
diff --git a/test/textfile_nonl.txt b/test/textfile_nonl.txt
new file mode 100644
index 0000000..f2ba8f8
--- /dev/null
+++ b/test/textfile_nonl.txt
@@ -0,0 +1 @@
+abc \ No newline at end of file
diff --git a/test/textfile_plain.0 b/test/textfile_plain.0
new file mode 100644
index 0000000..f7ad1ef
--- /dev/null
+++ b/test/textfile_plain.0
@@ -0,0 +1,9 @@
+
+Lorem ipsum dolor sit amet, consectetur adipiscing elit,
+sed do eiusmod tempor incididunt ut labore et dolore magna
+aliqua. Ut enim ad minim veniam, quis nostrud exercitation
+ullamco laboris nisi ut aliquip ex ea commodo consequat.
+Duis aute irure dolor in reprehenderit in voluptate velit
+esse cillum dolore eu fugiat nulla pariatur. Excepteur
+sint occaecat cupidatat non proident, sunt in culpa qui
+officia deserunt mollit anim id est laborum.