Mercurial > hg
annotate contrib/hg-test-mode.el @ 46495:5aac1a1a5beb
tagcache: distinguish between invalid and missing entries
The TortoiseHg repo has typically not had a newly applied tag accessible by name
for recent releases, for unknown reasons. Deleting and rebuilding the tag cache
doesn't fix it, though deleting the cache and running `hg log -r $new_tag` does.
Eventually the situation does sort itself out for new clones from the server.
In an effort to figure out what the issue is, Pierre-Yves David suggested
listing these entries in the debug output more specifically.
This isn't complete yet- the second test change that says "missing" is more like
"invalid", since it was truncated. The problem there is the code that reads the
raw array truncates any partial records and then fills it with 0xFF, which
signifies that it is missing. As a side note, that means the check for the
length when validating an existing entry never fails.
Differential Revision: https://phab.mercurial-scm.org/D9811
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Thu, 24 Dec 2020 11:21:23 -0500 |
parents | 19979b8b87e2 |
children | d4ba4d51f85f |
rev | line source |
---|---|
22081
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1 ;; hg-test-mode.el - Major mode for editing Mercurial tests |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
2 ;; |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
3 ;; Copyright 2014 Matt Mackall <mpm@selenic.com> |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
4 ;; "I have no idea what I'm doing" |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
5 ;; |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
6 ;; This software may be used and distributed according to the terms of the |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
7 ;; GNU General Public License version 2 or any later version. |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
8 ;; |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
9 ;; To enable, add something like the following to your .emacs: |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
10 ;; |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
11 ;; (if (file-exists-p "~/hg/contrib/hg-test-mode.el") |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
12 ;; (load "~/hg/contrib/hg-test-mode.el")) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
13 |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
14 (defvar hg-test-mode-hook nil) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
15 |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
16 (defvar hg-test-mode-map |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
17 (let ((map (make-keymap))) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
18 (define-key map "\C-j" 'newline-and-indent) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
19 map) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
20 "Keymap for hg test major mode") |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
21 |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
22 (add-to-list 'auto-mode-alist '("\\.t\\'" . hg-test-mode)) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
23 |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
24 (defconst hg-test-font-lock-keywords-1 |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
25 (list |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
26 '("^ \\(\\$\\|>>>\\) " 1 font-lock-builtin-face) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
27 '("^ \\(>\\|\\.\\.\\.\\) " 1 font-lock-constant-face) |
22125
7fce964be27d
hg-test-mode: make exit code highlight work again
Matt Mackall <mpm@selenic.com>
parents:
22109
diff
changeset
|
28 '("^ \\([[][0-9]+[]]\\)$" 1 font-lock-warning-face) |
22109
feab93a24e81
hg-test-mode: don't highlight variables in output
Matt Mackall <mpm@selenic.com>
parents:
22092
diff
changeset
|
29 '("^ \\(.*?\\)\\(\\( [(][-a-z]+[)]\\)*\\)$" 1 font-lock-string-face) |
22092
6e5ff8e26af6
hg-test-mode: colorize HGFOO and TESTFOO environment variables
Matt Mackall <mpm@selenic.com>
parents:
22081
diff
changeset
|
30 '("\\$?\\(HG\\|TEST\\)\\w+=?" . font-lock-variable-name-face) |
22081
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
31 '("^ \\(.*?\\)\\(\\( [(][-a-z]+[)]\\)+\\)$" 2 font-lock-type-face) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
32 '("^#.*" . font-lock-preprocessor-face) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
33 '("^\\([^ ].*\\)$" 1 font-lock-comment-face) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
34 ) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
35 "Minimal highlighting expressions for hg-test mode") |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
36 |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
37 (defvar hg-test-font-lock-keywords hg-test-font-lock-keywords-1 |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
38 "Default highlighting expressions for hg-test mode") |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
39 |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
40 (defvar hg-test-mode-syntax-table |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
41 (let ((st (make-syntax-table))) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
42 (modify-syntax-entry ?\" "w" st) ;; disable standard quoting |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
43 st) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
44 "Syntax table for hg-test mode") |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
45 |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
46 (defun hg-test-mode () |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
47 (interactive) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
48 (kill-all-local-variables) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
49 (use-local-map hg-test-mode-map) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
50 (set-syntax-table hg-test-mode-syntax-table) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
51 (set (make-local-variable 'font-lock-defaults) '(hg-test-font-lock-keywords)) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
52 (setq major-mode 'hg-test-mode) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
53 (setq mode-name "hg-test") |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
54 (run-hooks 'hg-test-mode-hook)) |
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
55 |
41785
b6a757de2fff
contrib: add compilation-mode linking for our test output
Augie Fackler <augie@google.com>
parents:
22125
diff
changeset
|
56 (with-eval-after-load "compile" |
41786
b6c062bb4be3
contrib: also linkify tracebacks in compilation output when using hg-test-mode
Augie Fackler <augie@google.com>
parents:
41785
diff
changeset
|
57 ;; Link to Python sources in tracebacks in .t failures. |
b6c062bb4be3
contrib: also linkify tracebacks in compilation output when using hg-test-mode
Augie Fackler <augie@google.com>
parents:
41785
diff
changeset
|
58 (add-to-list 'compilation-error-regexp-alist-alist |
b6c062bb4be3
contrib: also linkify tracebacks in compilation output when using hg-test-mode
Augie Fackler <augie@google.com>
parents:
41785
diff
changeset
|
59 '(hg-test-output-python-tb |
b6c062bb4be3
contrib: also linkify tracebacks in compilation output when using hg-test-mode
Augie Fackler <augie@google.com>
parents:
41785
diff
changeset
|
60 "^\\+ +File ['\"]\\([^'\"]+\\)['\"], line \\([0-9]+\\)," 1 2)) |
b6c062bb4be3
contrib: also linkify tracebacks in compilation output when using hg-test-mode
Augie Fackler <augie@google.com>
parents:
41785
diff
changeset
|
61 (add-to-list 'compilation-error-regexp-alist 'hg-test-output-python-tb) |
41785
b6a757de2fff
contrib: add compilation-mode linking for our test output
Augie Fackler <augie@google.com>
parents:
22125
diff
changeset
|
62 ;; Link to source files in test-check-code.t violations. |
b6a757de2fff
contrib: add compilation-mode linking for our test output
Augie Fackler <augie@google.com>
parents:
22125
diff
changeset
|
63 (add-to-list 'compilation-error-regexp-alist-alist |
b6a757de2fff
contrib: add compilation-mode linking for our test output
Augie Fackler <augie@google.com>
parents:
22125
diff
changeset
|
64 '(hg-test-check-code-output |
b6a757de2fff
contrib: add compilation-mode linking for our test output
Augie Fackler <augie@google.com>
parents:
22125
diff
changeset
|
65 "\\+ \\([^:\n]+\\):\\([0-9]+\\):$" 1 2)) |
b6a757de2fff
contrib: add compilation-mode linking for our test output
Augie Fackler <augie@google.com>
parents:
22125
diff
changeset
|
66 (add-to-list 'compilation-error-regexp-alist 'hg-test-check-code-output)) |
b6a757de2fff
contrib: add compilation-mode linking for our test output
Augie Fackler <augie@google.com>
parents:
22125
diff
changeset
|
67 |
41788
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
68 (defun hg-test-mode--test-one-error-line-regexp (test) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
69 (erase-buffer) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
70 (setq compilation-locs (make-hash-table)) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
71 (insert (car test)) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
72 (compilation-parse-errors (point-min) (point-max)) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
73 (let ((msg (get-text-property 1 'compilation-message))) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
74 (should msg) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
75 (let ((loc (compilation--message->loc msg)) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
76 (line (nth 1 test)) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
77 (file (nth 2 test))) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
78 (should (equal (compilation--loc->line loc) line)) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
79 (should (equal (caar (compilation--loc->file-struct loc)) file))) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
80 msg)) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
81 |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
82 (require 'ert) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
83 (ert-deftest hg-test-mode--compilation-mode-support () |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
84 "Test hg-specific compilation-mode regular expressions" |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
85 (require 'compile) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
86 (with-temp-buffer |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
87 (font-lock-mode -1) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
88 (mapc 'hg-test-mode--test-one-error-line-regexp |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
89 '( |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
90 ("+ contrib/debugshell.py:37:" 37 "contrib/debugshell.py") |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
91 ("+ File \"/tmp/hg/mercurial/commands.py\", line 3115, in help_" |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
92 3115 "/tmp/hg/mercurial/commands.py") |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
93 ("+ File \"mercurial/dispatch.py\", line 225, in dispatch" |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
94 225 "mercurial/dispatch.py"))))) |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
95 |
19979b8b87e2
tests: add test for hg-test-mode emacs code
Augie Fackler <augie@google.com>
parents:
41786
diff
changeset
|
96 |
22081
ed426b011612
contrib: add emacs mode for *.t files
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
97 (provide 'hg-test-mode) |