Package: emacs;
Reported by: Xiyue Deng <manphiz <at> gmail.com>
Date: Fri, 27 Oct 2023 21:01:02 UTC
Severity: normal
Found in version 29.1
Done: Mattias Engdegård <mattias.engdegard <at> gmail.com>
Bug is archived. No further changes may be made.
To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 66782 in the body.
You can then email your comments to 66782 AT debbugs.gnu.org in the normal way.
Toggle the display of automated, internal messages from the tracker.
View this report as an mbox folder, status mbox, maintainer mbox
bug-gnu-emacs <at> gnu.org
:bug#66782
; Package emacs
.
(Fri, 27 Oct 2023 21:01:02 GMT) Full text and rfc822 format available.Xiyue Deng <manphiz <at> gmail.com>
:bug-gnu-emacs <at> gnu.org
.
(Fri, 27 Oct 2023 21:01:02 GMT) Full text and rfc822 format available.Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):
From: Xiyue Deng <manphiz <at> gmail.com> To: bug-gnu-emacs <at> gnu.org Subject: 29.1; ERT tests reports test redefined depending on loading sequence Date: Fri, 27 Oct 2023 13:59:07 -0700
ERT may report error of `Test 'foo' redefined' when `foo' is not actually reused but due to loading sequence of the test source files, e.g. when some test A requires some other test B and A is loaded before B. A minimum test case with two ert test files: ,---- | $ cat ert-1-test.el | (require 'ert) | | (ert-deftest first-test () | (should (= (+ 1 2) 3))) | | (provide 'ert-1-test) `---- ,---- | $ cat ert-2-test.el | (require 'ert) | (require 'ert-1-test) | | (ert-deftest second-test () | (should (= (+ 2 3) 5))) `---- If running ert by first loading ert-1-test and then ert-2-test then it goes fine: ,---- | $ emacs -batch -Q -L . -l ert -l ert-1-test.el -l ert-2-test.el -f ert-run-tests-batch-and-exit | Running 2 tests (2023-10-27 03:42:24-0700, selector ‘t’) | passed 1/2 first-test (0.000054 sec) | passed 2/2 second-test (0.000025 sec) | | Ran 2 tests, 2 results as expected, 0 unexpected (2023-10-27 03:42:24-0700, 0.000204 sec) `---- However, if the sequence is changed, ERT will report error: ,---- | $ emacs -batch -Q -L . -l ert -l ert-2-test.el -l ert-1-test.el -f ert-run-tests-batch-and-exit | | Error: error ("Test ‘first-test’ redefined") | mapbacktrace(#f(compiled-function (evald func args flags) #<bytecode 0x1cdb26547dae8645>)) | debug-early-backtrace() | debug-early(error (error "Test ‘first-test’ redefined")) | error("Test `%s' redefined" first-test) | ert-set-test(first-test #s(ert-test :name first-test :documentation nil :body (lambda nil (let* ((fn-10 #'=) (args-11 (condition-case err (let ((signal-hook-function #'ert--should-signal-hook)) (list (+ 1 2) 3)) (error (progn (setq fn-10 #'signal) (list (car err) (cdr err))))))) (let ((value-12 'ert-form-evaluation-aborted-13)) (let (form-description-14) (if (unwind-protect (setq value-12 (apply fn-10 args-11)) (setq form-description-14 (nconc (list '(should (= (+ 1 2) 3))) (list :form (cons fn-10 args-11)) (if (eql value-12 'ert-form-evaluation-aborted-13) nil (list :value value-12)) (if (eql value-12 'ert-form-evaluation-aborted-13) nil (let* ((-explainer- (and t (ert--get-explainer '=)))) (if -explainer- (list :explanation (apply -explainer- args-11)) nil))))) (ert--signal-should-execution form-description-14)) nil (ert-fail form-description-14))) value-12))) :most-recent-result nil :expected-result-type :passed :tags nil :file-name "/home/xiyueden/Projects/test/ert-test/ert-1-test.el")) | load-with-code-conversion("/home/xiyueden/Projects/test/ert-test/ert-1-test.el" "/home/xiyueden/Projects/test/ert-test/ert-1-test.el" nil t) | command-line-1(("-L" "." "-l" "ert" "-l" "ert-2-test.el" "-l" "ert-1-test.el" "-f" "ert-run-tests-batch-and-exit")) | command-line() | normal-top-level() | Test ‘first-test’ redefined `---- As you can see there's only one `first-test' defined. The error message is misleading. A real world example of this can be found in lsp-mode, where test/lsp-clangd-test.el[1] requires test/lsp-integration-test.el[2]. See also the discussion on an Debian bug[3]. This used to work fine but not after Emacs 29 started checking for used test names. A guess of the cause is that if the depending test is loaded first, the dependent test will first get processed through require and then processed again through `-l'. Fixing this may require a topological sorting of the libraries loaded through `-l' based on their dependency graph. However, I'd like to see whether upstream considers this type of usage well-formed and should be supported. If not, upstream should give a warning on such usage, such as printing a warning when requiring other modules that has `ert-deftest'. Meanwhile, an improved error message would also be great. [1] https://github.com/emacs-lsp/lsp-mode/blob/master/test/lsp-clangd-test.el#L26 [2] https://github.com/emacs-lsp/lsp-mode/blob/master/test/lsp-integration-test.el#L674 [3] https://bugs.debian.org/1054494 In GNU Emacs 29.1 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.37, cairo version 1.16.0) of 2023-09-19, modified by Debian built on debian-hx90 System Description: Debian GNU/Linux 12 (bookworm) Configured using: 'configure --build x86_64-linux-gnu --prefix=/usr --sharedstatedir=/var/lib --libexecdir=/usr/libexec --localstatedir=/var/lib --infodir=/usr/share/info --mandir=/usr/share/man --with-libsystemd --with-pop=yes --enable-locallisppath=/etc/emacs:/usr/local/share/emacs/29.1/site-lisp:/usr/local/share/emacs/site-lisp:/usr/share/emacs/29.1/site-lisp:/usr/share/emacs/site-lisp --with-sound=alsa --without-gconf --with-mailutils --with-native-compilation --build x86_64-linux-gnu --prefix=/usr --sharedstatedir=/var/lib --libexecdir=/usr/libexec --localstatedir=/var/lib --infodir=/usr/share/info --mandir=/usr/share/man --with-libsystemd --with-pop=yes --enable-locallisppath=/etc/emacs:/usr/local/share/emacs/29.1/site-lisp:/usr/local/share/emacs/site-lisp:/usr/share/emacs/29.1/site-lisp:/usr/share/emacs/site-lisp --with-sound=alsa --without-gconf --with-mailutils --with-native-compilation --with-cairo --with-x=yes --with-x-toolkit=gtk3 --with-toolkit-scroll-bars 'CFLAGS=-g -O2 -ffile-prefix-map=/build/emacs-bYKTEl/emacs-29.1+1=. -fstack-protector-strong -Wformat -Werror=format-security -Wall' 'CPPFLAGS=-Wdate-time -D_FORTIFY_SOURCE=2' LDFLAGS=-Wl,-z,relro' Configured features: ACL CAIRO DBUS FREETYPE GIF GLIB GMP GNUTLS GPM GSETTINGS HARFBUZZ JPEG JSON LCMS2 LIBOTF LIBSELINUX LIBSYSTEMD LIBXML2 M17N_FLT MODULES NATIVE_COMP NOTIFY INOTIFY PDUMPER PNG RSVG SECCOMP SOUND SQLITE3 THREADS TIFF TOOLKIT_SCROLL_BARS TREE_SITTER WEBP X11 XDBE XIM XINPUT2 XPM GTK3 ZLIB Important settings: value of $LANG: en_US.UTF-8 locale-coding-system: utf-8-unix Major mode: ELisp/d Minor modes in effect: server-mode: t shell-dirtrack-mode: t windmove-mode: t subword-mode: t whitespace-mode: t yas-minor-mode: t icomplete-mode: t global-company-mode: t company-mode: t rcirc-track-minor-mode: t erc-list-mode: t erc-menu-mode: t erc-autojoin-mode: t erc-ring-mode: t erc-track-mode: t erc-match-mode: t erc-button-mode: t erc-fill-mode: t erc-stamp-mode: t erc-netsplit-mode: t erc-spelling-mode: t flyspell-mode: t erc-log-mode: t erc-irccontrols-mode: t erc-noncommands-mode: t erc-move-to-prompt-mode: t erc-readonly-mode: t erc-networks-mode: t override-global-mode: t global-display-line-numbers-mode: t display-line-numbers-mode: t global-auto-revert-mode: t tooltip-mode: t global-eldoc-mode: t eldoc-mode: t show-paren-mode: t electric-indent-mode: t mouse-wheel-mode: t tool-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t blink-cursor-mode: t column-number-mode: t line-number-mode: t transient-mark-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t Load-path shadows: /home/xiyueden/.config/emacs/elpa/auctex-13.2.1/tex-site hides /usr/share/emacs/site-lisp/tex-site /home/xiyueden/.config/emacs/elpa/auctex-13.2.1/auctex hides /usr/share/emacs/site-lisp/auctex /home/xiyueden/.config/emacs/elpa/bar-cursor-20201204.2244/bar-cursor-pkg hides /usr/share/emacs/site-lisp/elpa/bar-cursor-2.0/bar-cursor-pkg /home/xiyueden/.config/emacs/elpa/bar-cursor-20201204.2244/bar-cursor hides /usr/share/emacs/site-lisp/elpa/bar-cursor-2.0/bar-cursor /home/xiyueden/.config/emacs/elpa/bar-cursor-20201204.2244/bar-cursor-autoloads hides /usr/share/emacs/site-lisp/elpa/bar-cursor-2.0/bar-cursor-autoloads /home/xiyueden/.config/emacs/elpa/boxquote-2.3/boxquote hides /usr/share/emacs/site-lisp/elpa/boxquote-2.2/boxquote /home/xiyueden/.config/emacs/elpa/boxquote-2.3/boxquote-autoloads hides /usr/share/emacs/site-lisp/elpa/boxquote-2.2/boxquote-autoloads /home/xiyueden/.config/emacs/elpa/boxquote-2.3/boxquote-pkg hides /usr/share/emacs/site-lisp/elpa/boxquote-2.2/boxquote-pkg /home/xiyueden/.config/emacs/elpa/buttercup-1.31/buttercup hides /usr/share/emacs/site-lisp/elpa/buttercup-1.26/buttercup /home/xiyueden/.config/emacs/elpa/buttercup-1.31/buttercup-pkg hides /usr/share/emacs/site-lisp/elpa/buttercup-1.26/buttercup-pkg /home/xiyueden/.config/emacs/elpa/buttercup-1.31/buttercup-compat hides /usr/share/emacs/site-lisp/elpa/buttercup-1.26/buttercup-compat /home/xiyueden/.config/emacs/elpa/buttercup-1.31/buttercup-autoloads hides /usr/share/emacs/site-lisp/elpa/buttercup-1.26/buttercup-autoloads /home/xiyueden/.config/emacs/elpa/cmake-mode-3.27.6/cmake-mode hides /usr/share/emacs/site-lisp/elpa/cmake-mode-3.25.1/cmake-mode /home/xiyueden/.config/emacs/elpa/cmake-mode-3.27.6/cmake-mode-autoloads hides /usr/share/emacs/site-lisp/elpa/cmake-mode-3.25.1/cmake-mode-autoloads /home/xiyueden/.config/emacs/elpa/cmake-mode-3.27.6/cmake-mode-pkg hides /usr/share/emacs/site-lisp/elpa/cmake-mode-3.25.1/cmake-mode-pkg /home/xiyueden/.config/emacs/elpa/diminish-0.46/diminish-pkg hides /usr/share/emacs/site-lisp/elpa/diminish-0.45/diminish-pkg /home/xiyueden/.config/emacs/elpa/diminish-0.46/diminish hides /usr/share/emacs/site-lisp/elpa/diminish-0.45/diminish /home/xiyueden/.config/emacs/elpa/diminish-0.46/diminish-autoloads hides /usr/share/emacs/site-lisp/elpa/diminish-0.45/diminish-autoloads /usr/share/emacs/site-lisp/elpa/debian-el-37/debian-autoloads hides /usr/share/emacs/site-lisp/elpa/dpkg-dev-el-37.0/debian-autoloads /home/xiyueden/.config/emacs/elpa/folding-20230919.1053/folding hides /usr/share/emacs/site-lisp/elpa/folding-20220110.1718/folding /home/xiyueden/.config/emacs/elpa/folding-20230919.1053/folding-autoloads hides /usr/share/emacs/site-lisp/elpa/folding-20220110.1718/folding-autoloads /home/xiyueden/.config/emacs/elpa/folding-20230919.1053/folding-pkg hides /usr/share/emacs/site-lisp/elpa/folding-20220110.1718/folding-pkg /home/xiyueden/.config/emacs/elpa/git-modes-1.4.1/git-modes hides /usr/share/emacs/site-lisp/elpa/git-modes-1.4.0/git-modes /home/xiyueden/.config/emacs/elpa/git-modes-1.4.1/git-modes-pkg hides /usr/share/emacs/site-lisp/elpa/git-modes-1.4.0/git-modes-pkg /home/xiyueden/.config/emacs/elpa/git-modes-1.4.1/git-modes-autoloads hides /usr/share/emacs/site-lisp/elpa/git-modes-1.4.0/git-modes-autoloads /home/xiyueden/.config/emacs/elpa/git-modes-1.4.1/gitattributes-mode hides /usr/share/emacs/site-lisp/elpa/gitattributes-mode-1.4.0/gitattributes-mode /home/xiyueden/.config/emacs/elpa/git-modes-1.4.1/gitconfig-mode hides /usr/share/emacs/site-lisp/elpa/gitconfig-mode-1.4.0/gitconfig-mode /home/xiyueden/.config/emacs/elpa/git-modes-1.4.1/gitignore-mode hides /usr/share/emacs/site-lisp/elpa/gitignore-mode-1.4.0/gitignore-mode /home/xiyueden/.config/emacs/elpa/gnuplot-0.8.1/gnuplot-context hides /usr/share/emacs/site-lisp/elpa/gnuplot-0.8.0/gnuplot-context /home/xiyueden/.config/emacs/elpa/gnuplot-0.8.1/gnuplot hides /usr/share/emacs/site-lisp/elpa/gnuplot-0.8.0/gnuplot /home/xiyueden/.config/emacs/elpa/gnuplot-0.8.1/gnuplot-gui hides /usr/share/emacs/site-lisp/elpa/gnuplot-0.8.0/gnuplot-gui /home/xiyueden/.config/emacs/elpa/gnuplot-0.8.1/gnuplot-autoloads hides /usr/share/emacs/site-lisp/elpa/gnuplot-0.8.0/gnuplot-autoloads /usr/share/emacs/site-lisp/elpa/debian-el-37/debian-autoloads hides /usr/share/emacs/site-lisp/elpa/gnuplot-0.8.0/debian-autoloads /home/xiyueden/.config/emacs/elpa/gnuplot-0.8.1/gnuplot-pkg hides /usr/share/emacs/site-lisp/elpa/gnuplot-0.8.0/gnuplot-pkg /home/xiyueden/.config/emacs/elpa/helm-core-3.9.5/helm hides /usr/share/emacs/site-lisp/elpa/helm-core-3.8.4/helm /home/xiyueden/.config/emacs/elpa/helm-core-3.9.5/helm-core-pkg hides /usr/share/emacs/site-lisp/elpa/helm-core-3.8.4/helm-core-pkg /home/xiyueden/.config/emacs/elpa/helm-core-3.9.5/helm-multi-match hides /usr/share/emacs/site-lisp/elpa/helm-core-3.8.4/helm-multi-match /home/xiyueden/.config/emacs/elpa/helm-core-3.9.5/helm-lib hides /usr/share/emacs/site-lisp/elpa/helm-core-3.8.4/helm-lib /home/xiyueden/.config/emacs/elpa/helm-core-3.9.5/helm-source hides /usr/share/emacs/site-lisp/elpa/helm-core-3.8.4/helm-source /home/xiyueden/.config/emacs/elpa/helm-core-3.9.5/helm-core-autoloads hides /usr/share/emacs/site-lisp/elpa/helm-core-3.8.4/helm-core-autoloads /home/xiyueden/.config/emacs/elpa/htmlize-1.57/htmlize hides /usr/share/emacs/site-lisp/elpa/htmlize-1.56/htmlize /home/xiyueden/.config/emacs/elpa/htmlize-1.57/htmlize-autoloads hides /usr/share/emacs/site-lisp/elpa/htmlize-1.56/htmlize-autoloads /home/xiyueden/.config/emacs/elpa/htmlize-1.57/htmlize-pkg hides /usr/share/emacs/site-lisp/elpa/htmlize-1.56/htmlize-pkg /home/xiyueden/.config/emacs/elpa/initsplit-20160919.1818/initsplit hides /usr/share/emacs/site-lisp/elpa/initsplit-1.8/initsplit /home/xiyueden/.config/emacs/elpa/initsplit-20160919.1818/initsplit-autoloads hides /usr/share/emacs/site-lisp/elpa/initsplit-1.8/initsplit-autoloads /home/xiyueden/.config/emacs/elpa/initsplit-20160919.1818/initsplit-pkg hides /usr/share/emacs/site-lisp/elpa/initsplit-1.8/initsplit-pkg /home/xiyueden/.config/emacs/elpa/js2-mode-20230408/js2-imenu-extras hides /usr/share/emacs/site-lisp/elpa/js2-mode-20201220/js2-imenu-extras /home/xiyueden/.config/emacs/elpa/js2-mode-20230408/js2-old-indent hides /usr/share/emacs/site-lisp/elpa/js2-mode-20201220/js2-old-indent /home/xiyueden/.config/emacs/elpa/js2-mode-20230408/js2-mode hides /usr/share/emacs/site-lisp/elpa/js2-mode-20201220/js2-mode /home/xiyueden/.config/emacs/elpa/js2-mode-20230408/js2-mode-pkg hides /usr/share/emacs/site-lisp/elpa/js2-mode-20201220/js2-mode-pkg /home/xiyueden/.config/emacs/elpa/js2-mode-20230408/js2-mode-autoloads hides /usr/share/emacs/site-lisp/elpa/js2-mode-20201220/js2-mode-autoloads /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-section hides /usr/share/emacs/site-lisp/elpa/magit-section-3.3.0/magit-section /home/xiyueden/.config/emacs/elpa/markdown-mode-2.6/markdown-mode hides /usr/share/emacs/site-lisp/elpa/markdown-mode-2.5/markdown-mode /home/xiyueden/.config/emacs/elpa/markdown-mode-2.6/markdown-mode-pkg hides /usr/share/emacs/site-lisp/elpa/markdown-mode-2.5/markdown-mode-pkg /home/xiyueden/.config/emacs/elpa/markdown-mode-2.6/markdown-mode-autoloads hides /usr/share/emacs/site-lisp/elpa/markdown-mode-2.5/markdown-mode-autoloads /home/xiyueden/.config/emacs/elpa/meson-mode-0.3/meson-mode hides /usr/share/emacs/site-lisp/elpa/meson-mode-0.2/meson-mode /home/xiyueden/.config/emacs/elpa/meson-mode-0.3/utils hides /usr/share/emacs/site-lisp/elpa/meson-mode-0.2/utils /home/xiyueden/.config/emacs/elpa/meson-mode-0.3/meson-mode-autoloads hides /usr/share/emacs/site-lisp/elpa/meson-mode-0.2/meson-mode-autoloads /home/xiyueden/.config/emacs/elpa/meson-mode-0.3/meson-mode-pkg hides /usr/share/emacs/site-lisp/elpa/meson-mode-0.2/meson-mode-pkg /home/xiyueden/.config/emacs/elpa/popup-0.5.9/popup hides /usr/share/emacs/site-lisp/elpa/popup-0.5.8/popup /home/xiyueden/.config/emacs/elpa/popup-0.5.9/popup-pkg hides /usr/share/emacs/site-lisp/elpa/popup-0.5.8/popup-pkg /home/xiyueden/.config/emacs/elpa/popup-0.5.9/popup-autoloads hides /usr/share/emacs/site-lisp/elpa/popup-0.5.8/popup-autoloads /home/xiyueden/.config/emacs/elpa/rust-mode-1.0.5/rust-mode hides /usr/share/emacs/site-lisp/elpa/rust-mode-0.4.0/rust-mode /home/xiyueden/.config/emacs/elpa/rust-mode-1.0.5/rust-mode-autoloads hides /usr/share/emacs/site-lisp/elpa/rust-mode-0.4.0/rust-mode-autoloads /home/xiyueden/.config/emacs/elpa/rust-mode-1.0.5/rust-mode-pkg hides /usr/share/emacs/site-lisp/elpa/rust-mode-0.4.0/rust-mode-pkg /home/xiyueden/.config/emacs/elpa/session-20210422.53/session-autoloads hides /usr/share/emacs/site-lisp/elpa/session-2.4.2/session-autoloads /home/xiyueden/.config/emacs/elpa/session-20210422.53/session-pkg hides /usr/share/emacs/site-lisp/elpa/session-2.4.2/session-pkg /home/xiyueden/.config/emacs/elpa/session-20210422.53/session hides /usr/share/emacs/site-lisp/elpa/session-2.4.2/session /home/xiyueden/.config/emacs/elpa/tabbar-20180726.1735/tabbar-pkg hides /usr/share/emacs/site-lisp/elpa/tabbar-20160524/tabbar-pkg /home/xiyueden/.config/emacs/elpa/tabbar-20180726.1735/tabbar-autoloads hides /usr/share/emacs/site-lisp/elpa/tabbar-20160524/tabbar-autoloads /home/xiyueden/.config/emacs/elpa/tabbar-20180726.1735/tabbar hides /usr/share/emacs/site-lisp/elpa/tabbar-20160524/tabbar /home/xiyueden/.config/emacs/elpa/vterm-20230417.424/vterm hides /usr/share/emacs/site-lisp/elpa/vterm-0.0.2/vterm /home/xiyueden/.config/emacs/elpa/vterm-20230417.424/vterm-pkg hides /usr/share/emacs/site-lisp/elpa/vterm-0.0.2/vterm-pkg /home/xiyueden/.config/emacs/elpa/vterm-20230417.424/vterm-autoloads hides /usr/share/emacs/site-lisp/elpa/vterm-0.0.2/vterm-autoloads /home/xiyueden/.config/emacs/elpa/web-mode-17.3.14/web-mode-pkg hides /usr/share/emacs/site-lisp/elpa/web-mode-17.0.2/web-mode-pkg /home/xiyueden/.config/emacs/elpa/web-mode-17.3.14/web-mode-autoloads hides /usr/share/emacs/site-lisp/elpa/web-mode-17.0.2/web-mode-autoloads /home/xiyueden/.config/emacs/elpa/web-mode-17.3.14/web-mode hides /usr/share/emacs/site-lisp/elpa/web-mode-17.0.2/web-mode /home/xiyueden/.config/emacs/elpa/with-editor-3.3.2/with-editor-pkg hides /usr/share/emacs/site-lisp/elpa/with-editor-3.0.5/with-editor-pkg /home/xiyueden/.config/emacs/elpa/with-editor-3.3.2/with-editor hides /usr/share/emacs/site-lisp/elpa/with-editor-3.0.5/with-editor /home/xiyueden/.config/emacs/elpa/with-editor-3.3.2/with-editor-autoloads hides /usr/share/emacs/site-lisp/elpa/with-editor-3.0.5/with-editor-autoloads /home/xiyueden/.config/emacs/elpa/yasnippet-snippets-20230815.820/yasnippet-snippets hides /usr/share/emacs/site-lisp/elpa/yasnippet-snippets-20220713/yasnippet-snippets /home/xiyueden/.config/emacs/elpa/yasnippet-snippets-20230815.820/yasnippet-snippets-pkg hides /usr/share/emacs/site-lisp/elpa/yasnippet-snippets-20220713/yasnippet-snippets-pkg /home/xiyueden/.config/emacs/elpa/yasnippet-snippets-20230815.820/yasnippet-snippets-autoloads hides /usr/share/emacs/site-lisp/elpa/yasnippet-snippets-20220713/yasnippet-snippets-autoloads /home/xiyueden/.config/emacs/elpa/zenburn-theme-2.8.0/zenburn-theme hides /usr/share/emacs/site-lisp/elpa/zenburn-theme-2.7.0/zenburn-theme /home/xiyueden/.config/emacs/elpa/zenburn-theme-2.8.0/zenburn-theme-pkg hides /usr/share/emacs/site-lisp/elpa/zenburn-theme-2.7.0/zenburn-theme-pkg /home/xiyueden/.config/emacs/elpa/zenburn-theme-2.8.0/zenburn-theme-autoloads hides /usr/share/emacs/site-lisp/elpa/zenburn-theme-2.7.0/zenburn-theme-autoloads /usr/share/emacs/site-lisp/elpa/apache-mode-2.2.0/apache-mode-autoloads hides /usr/share/emacs/site-lisp/elpa-src/apache-mode-2.2.0/apache-mode-autoloads /usr/share/emacs/site-lisp/elpa/apache-mode-2.2.0/apache-mode-pkg hides /usr/share/emacs/site-lisp/elpa-src/apache-mode-2.2.0/apache-mode-pkg /usr/share/emacs/site-lisp/elpa/apache-mode-2.2.0/apache-mode hides /usr/share/emacs/site-lisp/elpa-src/apache-mode-2.2.0/apache-mode /usr/share/emacs/site-lisp/elpa/async-1.9.7/smtpmail-async hides /usr/share/emacs/site-lisp/elpa-src/async-1.9.7/smtpmail-async /usr/share/emacs/site-lisp/elpa/async-1.9.7/dired-async hides /usr/share/emacs/site-lisp/elpa-src/async-1.9.7/dired-async /usr/share/emacs/site-lisp/elpa/async-1.9.7/async hides /usr/share/emacs/site-lisp/elpa-src/async-1.9.7/async /usr/share/emacs/site-lisp/elpa/async-1.9.7/async-pkg hides /usr/share/emacs/site-lisp/elpa-src/async-1.9.7/async-pkg /usr/share/emacs/site-lisp/elpa/async-1.9.7/async-autoloads hides /usr/share/emacs/site-lisp/elpa-src/async-1.9.7/async-autoloads /usr/share/emacs/site-lisp/elpa/async-1.9.7/async-bytecomp hides /usr/share/emacs/site-lisp/elpa-src/async-1.9.7/async-bytecomp /home/xiyueden/.config/emacs/elpa/bar-cursor-20201204.2244/bar-cursor-pkg hides /usr/share/emacs/site-lisp/elpa-src/bar-cursor-2.0/bar-cursor-pkg /home/xiyueden/.config/emacs/elpa/bar-cursor-20201204.2244/bar-cursor hides /usr/share/emacs/site-lisp/elpa-src/bar-cursor-2.0/bar-cursor /home/xiyueden/.config/emacs/elpa/bar-cursor-20201204.2244/bar-cursor-autoloads hides /usr/share/emacs/site-lisp/elpa-src/bar-cursor-2.0/bar-cursor-autoloads /usr/share/emacs/site-lisp/elpa/bind-key-2.4.1/bind-key-autoloads hides /usr/share/emacs/site-lisp/elpa-src/bind-key-2.4.1/bind-key-autoloads /usr/share/emacs/site-lisp/elpa/bind-key-2.4.1/bind-key-pkg hides /usr/share/emacs/site-lisp/elpa-src/bind-key-2.4.1/bind-key-pkg /usr/share/emacs/site-lisp/elpa/bind-key-2.4.1/bind-key hides /usr/share/emacs/site-lisp/elpa-src/bind-key-2.4.1/bind-key /usr/share/emacs/site-lisp/elpa/bm-201905/bm-sync hides /usr/share/emacs/site-lisp/elpa-src/bm-201905/bm-sync /usr/share/emacs/site-lisp/elpa/bm-201905/bm-pkg hides /usr/share/emacs/site-lisp/elpa-src/bm-201905/bm-pkg /usr/share/emacs/site-lisp/elpa/bm-201905/bm-autoloads hides /usr/share/emacs/site-lisp/elpa-src/bm-201905/bm-autoloads /usr/share/emacs/site-lisp/elpa/bm-201905/bm hides /usr/share/emacs/site-lisp/elpa-src/bm-201905/bm /home/xiyueden/.config/emacs/elpa/boxquote-2.3/boxquote hides /usr/share/emacs/site-lisp/elpa-src/boxquote-2.2/boxquote /home/xiyueden/.config/emacs/elpa/boxquote-2.3/boxquote-autoloads hides /usr/share/emacs/site-lisp/elpa-src/boxquote-2.2/boxquote-autoloads /home/xiyueden/.config/emacs/elpa/boxquote-2.3/boxquote-pkg hides /usr/share/emacs/site-lisp/elpa-src/boxquote-2.2/boxquote-pkg /usr/share/emacs/site-lisp/elpa/browse-kill-ring-2.0.0/browse-kill-ring-pkg hides /usr/share/emacs/site-lisp/elpa-src/browse-kill-ring-2.0.0/browse-kill-ring-pkg /usr/share/emacs/site-lisp/elpa/browse-kill-ring-2.0.0/browse-kill-ring hides /usr/share/emacs/site-lisp/elpa-src/browse-kill-ring-2.0.0/browse-kill-ring /usr/share/emacs/site-lisp/elpa/browse-kill-ring-2.0.0/browse-kill-ring-autoloads hides /usr/share/emacs/site-lisp/elpa-src/browse-kill-ring-2.0.0/browse-kill-ring-autoloads /home/xiyueden/.config/emacs/elpa/buttercup-1.31/buttercup-pkg hides /usr/share/emacs/site-lisp/elpa-src/buttercup-1.26/buttercup-pkg /home/xiyueden/.config/emacs/elpa/buttercup-1.31/buttercup hides /usr/share/emacs/site-lisp/elpa-src/buttercup-1.26/buttercup /home/xiyueden/.config/emacs/elpa/buttercup-1.31/buttercup-autoloads hides /usr/share/emacs/site-lisp/elpa-src/buttercup-1.26/buttercup-autoloads /home/xiyueden/.config/emacs/elpa/buttercup-1.31/buttercup-compat hides /usr/share/emacs/site-lisp/elpa-src/buttercup-1.26/buttercup-compat /home/xiyueden/.config/emacs/elpa/cmake-mode-3.27.6/cmake-mode hides /usr/share/emacs/site-lisp/elpa-src/cmake-mode-3.25.1/cmake-mode /home/xiyueden/.config/emacs/elpa/cmake-mode-3.27.6/cmake-mode-autoloads hides /usr/share/emacs/site-lisp/elpa-src/cmake-mode-3.25.1/cmake-mode-autoloads /home/xiyueden/.config/emacs/elpa/cmake-mode-3.27.6/cmake-mode-pkg hides /usr/share/emacs/site-lisp/elpa-src/cmake-mode-3.25.1/cmake-mode-pkg /usr/share/emacs/site-lisp/elpa/company-0.9.13/company-dabbrev hides /usr/share/emacs/site-lisp/elpa-src/company-0.9.13/company-dabbrev /usr/share/emacs/site-lisp/elpa/company-0.9.13/async-tests hides /usr/share/emacs/site-lisp/elpa-src/company-0.9.13/async-tests /usr/share/emacs/site-lisp/elpa/company-0.9.13/company-capf hides /usr/share/emacs/site-lisp/elpa-src/company-0.9.13/company-capf /usr/share/emacs/site-lisp/elpa/company-0.9.13/company-yasnippet hides /usr/share/emacs/site-lisp/elpa-src/company-0.9.13/company-yasnippet /usr/share/emacs/site-lisp/elpa/company-0.9.13/company-ispell hides /usr/share/emacs/site-lisp/elpa-src/company-0.9.13/company-ispell /usr/share/emacs/site-lisp/elpa/company-0.9.13/company-etags hides /usr/share/emacs/site-lisp/elpa-src/company-0.9.13/company-etags /usr/share/emacs/site-lisp/elpa/company-0.9.13/company-template hides /usr/share/emacs/site-lisp/elpa-src/company-0.9.13/company-template /usr/share/emacs/site-lisp/elpa/company-0.9.13/company-abbrev hides /usr/share/emacs/site-lisp/elpa-src/company-0.9.13/company-abbrev /usr/share/emacs/site-lisp/elpa/company-0.9.13/company-files hides /usr/share/emacs/site-lisp/elpa-src/company-0.9.13/company-files /usr/share/emacs/site-lisp/elpa/company-0.9.13/template-tests hides /usr/share/emacs/site-lisp/elpa-src/company-0.9.13/template-tests /usr/share/emacs/site-lisp/elpa/company-0.9.13/company-xcode hides /usr/share/emacs/site-lisp/elpa-src/company-0.9.13/company-xcode /usr/share/emacs/site-lisp/elpa/company-0.9.13/company-css hides /usr/share/emacs/site-lisp/elpa-src/company-0.9.13/company-css /usr/share/emacs/site-lisp/elpa/company-0.9.13/company-tests hides /usr/share/emacs/site-lisp/elpa-src/company-0.9.13/company-tests /usr/share/emacs/site-lisp/elpa/company-0.9.13/bbdb-tests hides /usr/share/emacs/site-lisp/elpa-src/company-0.9.13/bbdb-tests /usr/share/emacs/site-lisp/elpa/company-0.9.13/company-dabbrev-code hides /usr/share/emacs/site-lisp/elpa-src/company-0.9.13/company-dabbrev-code /usr/share/emacs/site-lisp/elpa/company-0.9.13/company-pkg hides /usr/share/emacs/site-lisp/elpa-src/company-0.9.13/company-pkg /usr/share/emacs/site-lisp/elpa/company-0.9.13/company-oddmuse hides /usr/share/emacs/site-lisp/elpa-src/company-0.9.13/company-oddmuse /usr/share/emacs/site-lisp/elpa/company-0.9.13/clang-tests hides /usr/share/emacs/site-lisp/elpa-src/company-0.9.13/clang-tests /usr/share/emacs/site-lisp/elpa/company-0.9.13/company-bbdb hides /usr/share/emacs/site-lisp/elpa-src/company-0.9.13/company-bbdb /usr/share/emacs/site-lisp/elpa/company-0.9.13/transformers-tests hides /usr/share/emacs/site-lisp/elpa-src/company-0.9.13/transformers-tests /usr/share/emacs/site-lisp/elpa/company-0.9.13/frontends-tests hides /usr/share/emacs/site-lisp/elpa-src/company-0.9.13/frontends-tests /usr/share/emacs/site-lisp/elpa/company-0.9.13/core-tests hides /usr/share/emacs/site-lisp/elpa-src/company-0.9.13/core-tests /usr/share/emacs/site-lisp/elpa/company-0.9.13/company hides /usr/share/emacs/site-lisp/elpa-src/company-0.9.13/company /usr/share/emacs/site-lisp/elpa/company-0.9.13/company-clang hides /usr/share/emacs/site-lisp/elpa-src/company-0.9.13/company-clang /usr/share/emacs/site-lisp/elpa/company-0.9.13/company-nxml hides /usr/share/emacs/site-lisp/elpa-src/company-0.9.13/company-nxml /usr/share/emacs/site-lisp/elpa/company-0.9.13/company-gtags hides /usr/share/emacs/site-lisp/elpa-src/company-0.9.13/company-gtags /usr/share/emacs/site-lisp/elpa/company-0.9.13/company-tempo hides /usr/share/emacs/site-lisp/elpa-src/company-0.9.13/company-tempo /usr/share/emacs/site-lisp/elpa/company-0.9.13/capf-tests hides /usr/share/emacs/site-lisp/elpa-src/company-0.9.13/capf-tests /usr/share/emacs/site-lisp/elpa/company-0.9.13/company-autoloads hides /usr/share/emacs/site-lisp/elpa-src/company-0.9.13/company-autoloads /usr/share/emacs/site-lisp/elpa/company-0.9.13/company-cmake hides /usr/share/emacs/site-lisp/elpa-src/company-0.9.13/company-cmake /usr/share/emacs/site-lisp/elpa/company-0.9.13/company-tng hides /usr/share/emacs/site-lisp/elpa-src/company-0.9.13/company-tng /usr/share/emacs/site-lisp/elpa/company-0.9.13/keywords-tests hides /usr/share/emacs/site-lisp/elpa-src/company-0.9.13/keywords-tests /usr/share/emacs/site-lisp/elpa/company-0.9.13/company-elisp hides /usr/share/emacs/site-lisp/elpa-src/company-0.9.13/company-elisp /usr/share/emacs/site-lisp/elpa/company-0.9.13/all hides /usr/share/emacs/site-lisp/elpa-src/company-0.9.13/all /usr/share/emacs/site-lisp/elpa/company-0.9.13/company-semantic hides /usr/share/emacs/site-lisp/elpa-src/company-0.9.13/company-semantic /usr/share/emacs/site-lisp/elpa/company-0.9.13/company-eclim hides /usr/share/emacs/site-lisp/elpa-src/company-0.9.13/company-eclim /usr/share/emacs/site-lisp/elpa/company-0.9.13/files-tests hides /usr/share/emacs/site-lisp/elpa-src/company-0.9.13/files-tests /usr/share/emacs/site-lisp/elpa/company-0.9.13/elisp-tests hides /usr/share/emacs/site-lisp/elpa-src/company-0.9.13/elisp-tests /usr/share/emacs/site-lisp/elpa/company-0.9.13/company-keywords hides /usr/share/emacs/site-lisp/elpa-src/company-0.9.13/company-keywords /usr/share/emacs/site-lisp/elpa/company-0.9.13/cmake-tests hides /usr/share/emacs/site-lisp/elpa-src/company-0.9.13/cmake-tests /usr/share/emacs/site-lisp/elpa/csv-mode-1.22/csv-mode-autoloads hides /usr/share/emacs/site-lisp/elpa-src/csv-mode-1.22/csv-mode-autoloads /usr/share/emacs/site-lisp/elpa/csv-mode-1.22/csv-mode hides /usr/share/emacs/site-lisp/elpa-src/csv-mode-1.22/csv-mode /usr/share/emacs/site-lisp/elpa/csv-mode-1.22/csv-mode-tests hides /usr/share/emacs/site-lisp/elpa-src/csv-mode-1.22/csv-mode-tests /usr/share/emacs/site-lisp/elpa/csv-mode-1.22/csv-mode-pkg hides /usr/share/emacs/site-lisp/elpa-src/csv-mode-1.22/csv-mode-pkg /usr/share/emacs/site-lisp/elpa/dash-2.19.1/dash hides /usr/share/emacs/site-lisp/elpa-src/dash-2.19.1/dash /usr/share/emacs/site-lisp/elpa/dash-2.19.1/dash-pkg hides /usr/share/emacs/site-lisp/elpa-src/dash-2.19.1/dash-pkg /usr/share/emacs/site-lisp/elpa/dash-2.19.1/dash-autoloads hides /usr/share/emacs/site-lisp/elpa-src/dash-2.19.1/dash-autoloads /usr/share/emacs/site-lisp/elpa/debian-el-37/debian-el-autoloads hides /usr/share/emacs/site-lisp/elpa-src/debian-el-37/debian-el-autoloads /usr/share/emacs/site-lisp/elpa/debian-el-37/apt-sources hides /usr/share/emacs/site-lisp/elpa-src/debian-el-37/apt-sources /usr/share/emacs/site-lisp/elpa/debian-el-37/debian-bug hides /usr/share/emacs/site-lisp/elpa-src/debian-el-37/debian-bug /usr/share/emacs/site-lisp/elpa/debian-el-37/apt-utils hides /usr/share/emacs/site-lisp/elpa-src/debian-el-37/apt-utils /usr/share/emacs/site-lisp/elpa/debian-el-37/debian-el-pkg hides /usr/share/emacs/site-lisp/elpa-src/debian-el-37/debian-el-pkg /usr/share/emacs/site-lisp/elpa/debian-el-37/debian-autoloads hides /usr/share/emacs/site-lisp/elpa-src/debian-el-37/debian-autoloads /usr/share/emacs/site-lisp/elpa/debian-el-37/gnus-BTS hides /usr/share/emacs/site-lisp/elpa-src/debian-el-37/gnus-BTS /usr/share/emacs/site-lisp/elpa/debian-el-37/deb-view hides /usr/share/emacs/site-lisp/elpa-src/debian-el-37/deb-view /usr/share/emacs/site-lisp/elpa/debian-el-37/debian-el hides /usr/share/emacs/site-lisp/elpa-src/debian-el-37/debian-el /usr/share/emacs/site-lisp/elpa/debian-el-37/preseed hides /usr/share/emacs/site-lisp/elpa-src/debian-el-37/preseed /usr/share/emacs/site-lisp/elpa/devscripts-40/devscripts hides /usr/share/emacs/site-lisp/elpa-src/devscripts-40/devscripts /usr/share/emacs/site-lisp/elpa/devscripts-40/devscripts-autoloads hides /usr/share/emacs/site-lisp/elpa-src/devscripts-40/devscripts-autoloads /usr/share/emacs/site-lisp/elpa/devscripts-40/pbuilder-mode hides /usr/share/emacs/site-lisp/elpa-src/devscripts-40/pbuilder-mode /usr/share/emacs/site-lisp/elpa/devscripts-40/devscripts-pkg hides /usr/share/emacs/site-lisp/elpa-src/devscripts-40/devscripts-pkg /usr/share/emacs/site-lisp/elpa/devscripts-40/pbuilder-log-view-mode hides /usr/share/emacs/site-lisp/elpa-src/devscripts-40/pbuilder-log-view-mode /home/xiyueden/.config/emacs/elpa/diminish-0.46/diminish-pkg hides /usr/share/emacs/site-lisp/elpa-src/diminish-0.45/diminish-pkg /home/xiyueden/.config/emacs/elpa/diminish-0.46/diminish hides /usr/share/emacs/site-lisp/elpa-src/diminish-0.45/diminish /home/xiyueden/.config/emacs/elpa/diminish-0.46/diminish-autoloads hides /usr/share/emacs/site-lisp/elpa-src/diminish-0.45/diminish-autoloads /usr/share/emacs/site-lisp/elpa/dockerfile-mode-1.7/dockerfile-mode hides /usr/share/emacs/site-lisp/elpa-src/dockerfile-mode-1.7/dockerfile-mode /usr/share/emacs/site-lisp/elpa/dockerfile-mode-1.7/dockerfile-mode-autoloads hides /usr/share/emacs/site-lisp/elpa-src/dockerfile-mode-1.7/dockerfile-mode-autoloads /usr/share/emacs/site-lisp/elpa/dockerfile-mode-1.7/dockerfile-mode-pkg hides /usr/share/emacs/site-lisp/elpa-src/dockerfile-mode-1.7/dockerfile-mode-pkg /usr/share/emacs/site-lisp/elpa/dpkg-dev-el-37.0/debian-bts-control hides /usr/share/emacs/site-lisp/elpa-src/dpkg-dev-el-37.0/debian-bts-control /usr/share/emacs/site-lisp/elpa/dpkg-dev-el-37.0/debian-changelog-mode hides /usr/share/emacs/site-lisp/elpa-src/dpkg-dev-el-37.0/debian-changelog-mode /usr/share/emacs/site-lisp/elpa/dpkg-dev-el-37.0/dpkg-dev-el-autoloads hides /usr/share/emacs/site-lisp/elpa-src/dpkg-dev-el-37.0/dpkg-dev-el-autoloads /usr/share/emacs/site-lisp/elpa/dpkg-dev-el-37.0/dpkg-dev-el-pkg hides /usr/share/emacs/site-lisp/elpa-src/dpkg-dev-el-37.0/dpkg-dev-el-pkg /usr/share/emacs/site-lisp/elpa/debian-el-37/debian-autoloads hides /usr/share/emacs/site-lisp/elpa-src/dpkg-dev-el-37.0/debian-autoloads /usr/share/emacs/site-lisp/elpa/dpkg-dev-el-37.0/dpkg-dev-el hides /usr/share/emacs/site-lisp/elpa-src/dpkg-dev-el-37.0/dpkg-dev-el /usr/share/emacs/site-lisp/elpa/dpkg-dev-el-37.0/debian-control-mode hides /usr/share/emacs/site-lisp/elpa-src/dpkg-dev-el-37.0/debian-control-mode /usr/share/emacs/site-lisp/elpa/dpkg-dev-el-37.0/debian-copyright hides /usr/share/emacs/site-lisp/elpa-src/dpkg-dev-el-37.0/debian-copyright /usr/share/emacs/site-lisp/elpa/dpkg-dev-el-37.0/readme-debian hides /usr/share/emacs/site-lisp/elpa-src/dpkg-dev-el-37.0/readme-debian /usr/share/emacs/site-lisp/elpa/eproject-1.5/eproject-perl hides /usr/share/emacs/site-lisp/elpa-src/eproject-1.5/eproject-perl /usr/share/emacs/site-lisp/elpa/eproject-1.5/eproject-javascript-bower hides /usr/share/emacs/site-lisp/elpa-src/eproject-1.5/eproject-javascript-bower /usr/share/emacs/site-lisp/elpa/eproject-1.5/eproject-autoloads hides /usr/share/emacs/site-lisp/elpa-src/eproject-1.5/eproject-autoloads /usr/share/emacs/site-lisp/elpa/eproject-1.5/eproject-javascript-grunt hides /usr/share/emacs/site-lisp/elpa-src/eproject-1.5/eproject-javascript-grunt /usr/share/emacs/site-lisp/elpa/eproject-1.5/eproject-tests hides /usr/share/emacs/site-lisp/elpa-src/eproject-1.5/eproject-tests /usr/share/emacs/site-lisp/elpa/eproject-1.5/eproject-ruby hides /usr/share/emacs/site-lisp/elpa-src/eproject-1.5/eproject-ruby /usr/share/emacs/site-lisp/elpa/eproject-1.5/eproject-clojure-leiningen hides /usr/share/emacs/site-lisp/elpa-src/eproject-1.5/eproject-clojure-leiningen /usr/share/emacs/site-lisp/elpa/eproject-1.5/eproject-extras hides /usr/share/emacs/site-lisp/elpa-src/eproject-1.5/eproject-extras /usr/share/emacs/site-lisp/elpa/eproject-1.5/eproject-python hides /usr/share/emacs/site-lisp/elpa-src/eproject-1.5/eproject-python /usr/share/emacs/site-lisp/elpa/eproject-1.5/eproject-javascript-npm hides /usr/share/emacs/site-lisp/elpa-src/eproject-1.5/eproject-javascript-npm /usr/share/emacs/site-lisp/elpa/eproject-1.5/eproject-php-composer hides /usr/share/emacs/site-lisp/elpa-src/eproject-1.5/eproject-php-composer /usr/share/emacs/site-lisp/elpa/eproject-1.5/eproject hides /usr/share/emacs/site-lisp/elpa-src/eproject-1.5/eproject /usr/share/emacs/site-lisp/elpa/eproject-1.5/eproject-arduino hides /usr/share/emacs/site-lisp/elpa-src/eproject-1.5/eproject-arduino /usr/share/emacs/site-lisp/elpa/eproject-1.5/eproject-ruby-on-rails hides /usr/share/emacs/site-lisp/elpa-src/eproject-1.5/eproject-ruby-on-rails /usr/share/emacs/site-lisp/elpa/eproject-1.5/eproject-pkg hides /usr/share/emacs/site-lisp/elpa-src/eproject-1.5/eproject-pkg /usr/share/emacs/site-lisp/elpa/eproject-1.5/eproject-android hides /usr/share/emacs/site-lisp/elpa-src/eproject-1.5/eproject-android /home/xiyueden/.config/emacs/elpa/folding-20230919.1053/folding hides /usr/share/emacs/site-lisp/elpa-src/folding-20220110.1718/folding /home/xiyueden/.config/emacs/elpa/folding-20230919.1053/folding-autoloads hides /usr/share/emacs/site-lisp/elpa-src/folding-20220110.1718/folding-autoloads /home/xiyueden/.config/emacs/elpa/folding-20230919.1053/folding-pkg hides /usr/share/emacs/site-lisp/elpa-src/folding-20220110.1718/folding-pkg /usr/share/emacs/site-lisp/elpa/git-commit-3.3.0/git-commit hides /usr/share/emacs/site-lisp/elpa-src/git-commit-3.3.0/git-commit /usr/share/emacs/site-lisp/elpa/git-commit-3.3.0/git-commit-autoloads hides /usr/share/emacs/site-lisp/elpa-src/git-commit-3.3.0/git-commit-autoloads /usr/share/emacs/site-lisp/elpa/git-commit-3.3.0/git-commit-pkg hides /usr/share/emacs/site-lisp/elpa-src/git-commit-3.3.0/git-commit-pkg /home/xiyueden/.config/emacs/elpa/git-modes-1.4.1/git-modes hides /usr/share/emacs/site-lisp/elpa-src/git-modes-1.4.0/git-modes /home/xiyueden/.config/emacs/elpa/git-modes-1.4.1/git-modes-pkg hides /usr/share/emacs/site-lisp/elpa-src/git-modes-1.4.0/git-modes-pkg /home/xiyueden/.config/emacs/elpa/git-modes-1.4.1/git-modes-autoloads hides /usr/share/emacs/site-lisp/elpa-src/git-modes-1.4.0/git-modes-autoloads /usr/share/emacs/site-lisp/elpa/gitattributes-mode-1.4.0/gitattributes-mode-pkg hides /usr/share/emacs/site-lisp/elpa-src/gitattributes-mode-1.4.0/gitattributes-mode-pkg /usr/share/emacs/site-lisp/elpa/gitattributes-mode-1.4.0/gitattributes-mode-autoloads hides /usr/share/emacs/site-lisp/elpa-src/gitattributes-mode-1.4.0/gitattributes-mode-autoloads /home/xiyueden/.config/emacs/elpa/git-modes-1.4.1/gitattributes-mode hides /usr/share/emacs/site-lisp/elpa-src/gitattributes-mode-1.4.0/gitattributes-mode /usr/share/emacs/site-lisp/elpa/gitconfig-mode-1.4.0/gitconfig-mode-autoloads hides /usr/share/emacs/site-lisp/elpa-src/gitconfig-mode-1.4.0/gitconfig-mode-autoloads /usr/share/emacs/site-lisp/elpa/gitconfig-mode-1.4.0/gitconfig-mode-pkg hides /usr/share/emacs/site-lisp/elpa-src/gitconfig-mode-1.4.0/gitconfig-mode-pkg /home/xiyueden/.config/emacs/elpa/git-modes-1.4.1/gitconfig-mode hides /usr/share/emacs/site-lisp/elpa-src/gitconfig-mode-1.4.0/gitconfig-mode /usr/share/emacs/site-lisp/elpa/gitignore-mode-1.4.0/gitignore-mode-pkg hides /usr/share/emacs/site-lisp/elpa-src/gitignore-mode-1.4.0/gitignore-mode-pkg /usr/share/emacs/site-lisp/elpa/gitignore-mode-1.4.0/gitignore-mode-autoloads hides /usr/share/emacs/site-lisp/elpa-src/gitignore-mode-1.4.0/gitignore-mode-autoloads /home/xiyueden/.config/emacs/elpa/git-modes-1.4.1/gitignore-mode hides /usr/share/emacs/site-lisp/elpa-src/gitignore-mode-1.4.0/gitignore-mode /home/xiyueden/.config/emacs/elpa/gnuplot-0.8.1/gnuplot hides /usr/share/emacs/site-lisp/elpa-src/gnuplot-0.8.0/gnuplot /home/xiyueden/.config/emacs/elpa/gnuplot-0.8.1/gnuplot-autoloads hides /usr/share/emacs/site-lisp/elpa-src/gnuplot-0.8.0/gnuplot-autoloads /usr/share/emacs/site-lisp/elpa/debian-el-37/debian-autoloads hides /usr/share/emacs/site-lisp/elpa-src/gnuplot-0.8.0/debian-autoloads /home/xiyueden/.config/emacs/elpa/gnuplot-0.8.1/gnuplot-pkg hides /usr/share/emacs/site-lisp/elpa-src/gnuplot-0.8.0/gnuplot-pkg /home/xiyueden/.config/emacs/elpa/gnuplot-0.8.1/gnuplot-context hides /usr/share/emacs/site-lisp/elpa-src/gnuplot-0.8.0/gnuplot-context /home/xiyueden/.config/emacs/elpa/gnuplot-0.8.1/gnuplot-gui hides /usr/share/emacs/site-lisp/elpa-src/gnuplot-0.8.0/gnuplot-gui /usr/share/emacs/site-lisp/elpa/go-mode-1.6.0/go-mode hides /usr/share/emacs/site-lisp/elpa-src/go-mode-1.6.0/go-mode /usr/share/emacs/site-lisp/elpa/go-mode-1.6.0/go-guru hides /usr/share/emacs/site-lisp/elpa-src/go-mode-1.6.0/go-guru /usr/share/emacs/site-lisp/elpa/go-mode-1.6.0/go-mode-pkg hides /usr/share/emacs/site-lisp/elpa-src/go-mode-1.6.0/go-mode-pkg /usr/share/emacs/site-lisp/elpa/go-mode-1.6.0/go-mode-autoloads hides /usr/share/emacs/site-lisp/elpa-src/go-mode-1.6.0/go-mode-autoloads /usr/share/emacs/site-lisp/elpa/go-mode-1.6.0/go-rename hides /usr/share/emacs/site-lisp/elpa-src/go-mode-1.6.0/go-rename /usr/share/emacs/site-lisp/elpa/graphviz-dot-mode-0.4.2/graphviz-dot-mode-autoloads hides /usr/share/emacs/site-lisp/elpa-src/graphviz-dot-mode-0.4.2/graphviz-dot-mode-autoloads /usr/share/emacs/site-lisp/elpa/graphviz-dot-mode-0.4.2/company-graphviz-dot hides /usr/share/emacs/site-lisp/elpa-src/graphviz-dot-mode-0.4.2/company-graphviz-dot /usr/share/emacs/site-lisp/elpa/graphviz-dot-mode-0.4.2/graphviz-dot-mode-pkg hides /usr/share/emacs/site-lisp/elpa-src/graphviz-dot-mode-0.4.2/graphviz-dot-mode-pkg /usr/share/emacs/site-lisp/elpa/graphviz-dot-mode-0.4.2/graphviz-dot-mode hides /usr/share/emacs/site-lisp/elpa-src/graphviz-dot-mode-0.4.2/graphviz-dot-mode /usr/share/emacs/site-lisp/elpa/helm-3.8.4/helm-font hides /usr/share/emacs/site-lisp/elpa-src/helm-3.8.4/helm-font /usr/share/emacs/site-lisp/elpa/helm-3.8.4/helm-locate hides /usr/share/emacs/site-lisp/elpa-src/helm-3.8.4/helm-locate /usr/share/emacs/site-lisp/elpa/helm-3.8.4/helm-net hides /usr/share/emacs/site-lisp/elpa-src/helm-3.8.4/helm-net /usr/share/emacs/site-lisp/elpa/helm-3.8.4/helm-id-utils hides /usr/share/emacs/site-lisp/elpa-src/helm-3.8.4/helm-id-utils /usr/share/emacs/site-lisp/elpa/helm-3.8.4/helm-x-files hides /usr/share/emacs/site-lisp/elpa-src/helm-3.8.4/helm-x-files /usr/share/emacs/site-lisp/elpa/helm-3.8.4/helm-eval hides /usr/share/emacs/site-lisp/elpa-src/helm-3.8.4/helm-eval /usr/share/emacs/site-lisp/elpa/helm-3.8.4/helm-eshell hides /usr/share/emacs/site-lisp/elpa-src/helm-3.8.4/helm-eshell /usr/share/emacs/site-lisp/elpa/helm-3.8.4/helm-find hides /usr/share/emacs/site-lisp/elpa-src/helm-3.8.4/helm-find /usr/share/emacs/site-lisp/elpa/helm-3.8.4/helm-global-bindings hides /usr/share/emacs/site-lisp/elpa-src/helm-3.8.4/helm-global-bindings /usr/share/emacs/site-lisp/elpa/helm-3.8.4/helm-occur hides /usr/share/emacs/site-lisp/elpa-src/helm-3.8.4/helm-occur /usr/share/emacs/site-lisp/elpa/helm-3.8.4/helm-comint hides /usr/share/emacs/site-lisp/elpa-src/helm-3.8.4/helm-comint /usr/share/emacs/site-lisp/elpa/helm-3.8.4/helm-info hides /usr/share/emacs/site-lisp/elpa-src/helm-3.8.4/helm-info /usr/share/emacs/site-lisp/elpa/helm-3.8.4/helm-mode hides /usr/share/emacs/site-lisp/elpa-src/helm-3.8.4/helm-mode /usr/share/emacs/site-lisp/elpa/helm-3.8.4/helm-bookmark hides /usr/share/emacs/site-lisp/elpa-src/helm-3.8.4/helm-bookmark /usr/share/emacs/site-lisp/elpa/helm-3.8.4/helm-config hides /usr/share/emacs/site-lisp/elpa-src/helm-3.8.4/helm-config /usr/share/emacs/site-lisp/elpa/helm-3.8.4/helm-tags hides /usr/share/emacs/site-lisp/elpa-src/helm-3.8.4/helm-tags /usr/share/emacs/site-lisp/elpa/helm-3.8.4/helm-imenu hides /usr/share/emacs/site-lisp/elpa-src/helm-3.8.4/helm-imenu /usr/share/emacs/site-lisp/elpa/helm-3.8.4/helm-color hides /usr/share/emacs/site-lisp/elpa-src/helm-3.8.4/helm-color /usr/share/emacs/site-lisp/elpa/helm-3.8.4/helm-regexp hides /usr/share/emacs/site-lisp/elpa-src/helm-3.8.4/helm-regexp /usr/share/emacs/site-lisp/elpa/helm-3.8.4/helm-external hides /usr/share/emacs/site-lisp/elpa-src/helm-3.8.4/helm-external /usr/share/emacs/site-lisp/elpa/helm-3.8.4/helm-types hides /usr/share/emacs/site-lisp/elpa-src/helm-3.8.4/helm-types /usr/share/emacs/site-lisp/elpa/helm-3.8.4/helm-pkg hides /usr/share/emacs/site-lisp/elpa-src/helm-3.8.4/helm-pkg /usr/share/emacs/site-lisp/elpa/helm-3.8.4/helm-misc hides /usr/share/emacs/site-lisp/elpa-src/helm-3.8.4/helm-misc /usr/share/emacs/site-lisp/elpa/helm-3.8.4/helm-ring hides /usr/share/emacs/site-lisp/elpa-src/helm-3.8.4/helm-ring /usr/share/emacs/site-lisp/elpa/helm-3.8.4/helm-sys hides /usr/share/emacs/site-lisp/elpa-src/helm-3.8.4/helm-sys /usr/share/emacs/site-lisp/elpa/helm-3.8.4/helm-semantic hides /usr/share/emacs/site-lisp/elpa-src/helm-3.8.4/helm-semantic /usr/share/emacs/site-lisp/elpa/helm-3.8.4/helm-easymenu hides /usr/share/emacs/site-lisp/elpa-src/helm-3.8.4/helm-easymenu /usr/share/emacs/site-lisp/elpa/helm-3.8.4/helm-grep hides /usr/share/emacs/site-lisp/elpa-src/helm-3.8.4/helm-grep /usr/share/emacs/site-lisp/elpa/helm-3.8.4/helm-autoloads hides /usr/share/emacs/site-lisp/elpa-src/helm-3.8.4/helm-autoloads /usr/share/emacs/site-lisp/elpa/helm-3.8.4/helm-man hides /usr/share/emacs/site-lisp/elpa-src/helm-3.8.4/helm-man /usr/share/emacs/site-lisp/elpa/helm-3.8.4/helm-adaptive hides /usr/share/emacs/site-lisp/elpa-src/helm-3.8.4/helm-adaptive /usr/share/emacs/site-lisp/elpa/helm-3.8.4/helm-files hides /usr/share/emacs/site-lisp/elpa-src/helm-3.8.4/helm-files /usr/share/emacs/site-lisp/elpa/helm-3.8.4/helm-elisp hides /usr/share/emacs/site-lisp/elpa-src/helm-3.8.4/helm-elisp /usr/share/emacs/site-lisp/elpa/helm-3.8.4/helm-help hides /usr/share/emacs/site-lisp/elpa-src/helm-3.8.4/helm-help /usr/share/emacs/site-lisp/elpa/helm-3.8.4/helm-shell hides /usr/share/emacs/site-lisp/elpa-src/helm-3.8.4/helm-shell /usr/share/emacs/site-lisp/elpa/helm-3.8.4/helm-utils hides /usr/share/emacs/site-lisp/elpa-src/helm-3.8.4/helm-utils /usr/share/emacs/site-lisp/elpa/helm-3.8.4/helm-dabbrev hides /usr/share/emacs/site-lisp/elpa-src/helm-3.8.4/helm-dabbrev /usr/share/emacs/site-lisp/elpa/helm-3.8.4/helm-elisp-package hides /usr/share/emacs/site-lisp/elpa-src/helm-3.8.4/helm-elisp-package /usr/share/emacs/site-lisp/elpa/helm-3.8.4/helm-command hides /usr/share/emacs/site-lisp/elpa-src/helm-3.8.4/helm-command /usr/share/emacs/site-lisp/elpa/helm-3.8.4/helm-buffers hides /usr/share/emacs/site-lisp/elpa-src/helm-3.8.4/helm-buffers /usr/share/emacs/site-lisp/elpa/helm-3.8.4/helm-for-files hides /usr/share/emacs/site-lisp/elpa-src/helm-3.8.4/helm-for-files /home/xiyueden/.config/emacs/elpa/helm-core-3.9.5/helm hides /usr/share/emacs/site-lisp/elpa-src/helm-core-3.8.4/helm /home/xiyueden/.config/emacs/elpa/helm-core-3.9.5/helm-core-pkg hides /usr/share/emacs/site-lisp/elpa-src/helm-core-3.8.4/helm-core-pkg /home/xiyueden/.config/emacs/elpa/helm-core-3.9.5/helm-lib hides /usr/share/emacs/site-lisp/elpa-src/helm-core-3.8.4/helm-lib /home/xiyueden/.config/emacs/elpa/helm-core-3.9.5/helm-source hides /usr/share/emacs/site-lisp/elpa-src/helm-core-3.8.4/helm-source /home/xiyueden/.config/emacs/elpa/helm-core-3.9.5/helm-core-autoloads hides /usr/share/emacs/site-lisp/elpa-src/helm-core-3.8.4/helm-core-autoloads /home/xiyueden/.config/emacs/elpa/helm-core-3.9.5/helm-multi-match hides /usr/share/emacs/site-lisp/elpa-src/helm-core-3.8.4/helm-multi-match /home/xiyueden/.config/emacs/elpa/htmlize-1.57/htmlize hides /usr/share/emacs/site-lisp/elpa-src/htmlize-1.56/htmlize /home/xiyueden/.config/emacs/elpa/htmlize-1.57/htmlize-autoloads hides /usr/share/emacs/site-lisp/elpa-src/htmlize-1.56/htmlize-autoloads /home/xiyueden/.config/emacs/elpa/htmlize-1.57/htmlize-pkg hides /usr/share/emacs/site-lisp/elpa-src/htmlize-1.56/htmlize-pkg /home/xiyueden/.config/emacs/elpa/initsplit-20160919.1818/initsplit hides /usr/share/emacs/site-lisp/elpa-src/initsplit-1.8/initsplit /usr/share/emacs/site-lisp/elpa/initsplit-1.8/initsplit-test hides /usr/share/emacs/site-lisp/elpa-src/initsplit-1.8/initsplit-test /home/xiyueden/.config/emacs/elpa/initsplit-20160919.1818/initsplit-autoloads hides /usr/share/emacs/site-lisp/elpa-src/initsplit-1.8/initsplit-autoloads /home/xiyueden/.config/emacs/elpa/initsplit-20160919.1818/initsplit-pkg hides /usr/share/emacs/site-lisp/elpa-src/initsplit-1.8/initsplit-pkg /home/xiyueden/.config/emacs/elpa/js2-mode-20230408/js2-old-indent hides /usr/share/emacs/site-lisp/elpa-src/js2-mode-20201220/js2-old-indent /home/xiyueden/.config/emacs/elpa/js2-mode-20230408/js2-mode hides /usr/share/emacs/site-lisp/elpa-src/js2-mode-20201220/js2-mode /home/xiyueden/.config/emacs/elpa/js2-mode-20230408/js2-imenu-extras hides /usr/share/emacs/site-lisp/elpa-src/js2-mode-20201220/js2-imenu-extras /home/xiyueden/.config/emacs/elpa/js2-mode-20230408/js2-mode-pkg hides /usr/share/emacs/site-lisp/elpa-src/js2-mode-20201220/js2-mode-pkg /home/xiyueden/.config/emacs/elpa/js2-mode-20230408/js2-mode-autoloads hides /usr/share/emacs/site-lisp/elpa-src/js2-mode-20201220/js2-mode-autoloads /usr/share/emacs/site-lisp/elpa/lintian-0.1/lintian-pkg hides /usr/share/emacs/site-lisp/elpa-src/lintian-0.1/lintian-pkg /usr/share/emacs/site-lisp/elpa/lintian-0.1/lintian-autoloads hides /usr/share/emacs/site-lisp/elpa-src/lintian-0.1/lintian-autoloads /usr/share/emacs/site-lisp/elpa/lintian-0.1/lintian hides /usr/share/emacs/site-lisp/elpa-src/lintian-0.1/lintian /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-remote hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-remote /usr/share/emacs/site-lisp/elpa/magit-3.3.0/git-rebase hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/git-rebase /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-bisect hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-bisect /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-margin hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-margin /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-merge hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-merge /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-section hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-section /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-patch hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-patch /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-commit hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-commit /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-autoloads hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-autoloads /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-files hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-files /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-stash hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-stash /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-bookmark hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-bookmark /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-submodule hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-submodule /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-apply hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-apply /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-repos hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-repos /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-core hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-core /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-subtree hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-subtree /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-autorevert hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-autorevert /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-gitignore hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-gitignore /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-transient hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-transient /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-extras hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-extras /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-git hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-git /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-notes hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-notes /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-reflog hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-reflog /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-mode hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-mode /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-push hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-push /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-tag hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-tag /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-process hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-process /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-ediff hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-ediff /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-imenu hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-imenu /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-diff hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-diff /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-clone hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-clone /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-log hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-log /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-utils hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-utils /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-wip hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-wip /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-branch hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-branch /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-pull hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-pull /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-reset hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-reset /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-sequence hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-sequence /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-status hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-status /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-refs hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-refs /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-obsolete hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-obsolete /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-fetch hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-fetch /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-worktree hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-worktree /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-blame hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-blame /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-pkg hides /usr/share/emacs/site-lisp/elpa-src/magit-3.3.0/magit-pkg /usr/share/emacs/site-lisp/elpa/magit-section-3.3.0/magit-section-autoloads hides /usr/share/emacs/site-lisp/elpa-src/magit-section-3.3.0/magit-section-autoloads /usr/share/emacs/site-lisp/elpa/magit-3.3.0/magit-section hides /usr/share/emacs/site-lisp/elpa-src/magit-section-3.3.0/magit-section /usr/share/emacs/site-lisp/elpa/magit-section-3.3.0/magit-section-pkg hides /usr/share/emacs/site-lisp/elpa-src/magit-section-3.3.0/magit-section-pkg /home/xiyueden/.config/emacs/elpa/markdown-mode-2.6/markdown-mode hides /usr/share/emacs/site-lisp/elpa-src/markdown-mode-2.5/markdown-mode /home/xiyueden/.config/emacs/elpa/markdown-mode-2.6/markdown-mode-pkg hides /usr/share/emacs/site-lisp/elpa-src/markdown-mode-2.5/markdown-mode-pkg /home/xiyueden/.config/emacs/elpa/markdown-mode-2.6/markdown-mode-autoloads hides /usr/share/emacs/site-lisp/elpa-src/markdown-mode-2.5/markdown-mode-autoloads /home/xiyueden/.config/emacs/elpa/meson-mode-0.3/meson-mode hides /usr/share/emacs/site-lisp/elpa-src/meson-mode-0.2/meson-mode /home/xiyueden/.config/emacs/elpa/meson-mode-0.3/utils hides /usr/share/emacs/site-lisp/elpa-src/meson-mode-0.2/utils /home/xiyueden/.config/emacs/elpa/meson-mode-0.3/meson-mode-autoloads hides /usr/share/emacs/site-lisp/elpa-src/meson-mode-0.2/meson-mode-autoloads /home/xiyueden/.config/emacs/elpa/meson-mode-0.3/meson-mode-pkg hides /usr/share/emacs/site-lisp/elpa-src/meson-mode-0.2/meson-mode-pkg /usr/share/emacs/site-lisp/elpa/mu4e-1.8.14/mu4e-draft hides /usr/share/emacs/site-lisp/elpa-src/mu4e-1.8.14/mu4e-draft /usr/share/emacs/site-lisp/elpa/mu4e-1.8.14/mu4e-view hides /usr/share/emacs/site-lisp/elpa-src/mu4e-1.8.14/mu4e-view /usr/share/emacs/site-lisp/elpa/mu4e-1.8.14/mu4e-message hides /usr/share/emacs/site-lisp/elpa-src/mu4e-1.8.14/mu4e-message /usr/share/emacs/site-lisp/elpa/mu4e-1.8.14/mu4e-helpers hides /usr/share/emacs/site-lisp/elpa-src/mu4e-1.8.14/mu4e-helpers /usr/share/emacs/site-lisp/elpa/mu4e-1.8.14/mu4e-pkg hides /usr/share/emacs/site-lisp/elpa-src/mu4e-1.8.14/mu4e-pkg /usr/share/emacs/site-lisp/elpa/mu4e-1.8.14/mu4e-bookmarks hides /usr/share/emacs/site-lisp/elpa-src/mu4e-1.8.14/mu4e-bookmarks /usr/share/emacs/site-lisp/elpa/mu4e-1.8.14/mu4e-server hides /usr/share/emacs/site-lisp/elpa-src/mu4e-1.8.14/mu4e-server /usr/share/emacs/site-lisp/elpa/mu4e-1.8.14/mu4e-contrib hides /usr/share/emacs/site-lisp/elpa-src/mu4e-1.8.14/mu4e-contrib /usr/share/emacs/site-lisp/elpa/mu4e-1.8.14/mu4e-config hides /usr/share/emacs/site-lisp/elpa-src/mu4e-1.8.14/mu4e-config /usr/share/emacs/site-lisp/elpa/mu4e-1.8.14/mu4e-autoloads hides /usr/share/emacs/site-lisp/elpa-src/mu4e-1.8.14/mu4e-autoloads /usr/share/emacs/site-lisp/elpa/mu4e-1.8.14/mu4e-icalendar hides /usr/share/emacs/site-lisp/elpa-src/mu4e-1.8.14/mu4e-icalendar /usr/share/emacs/site-lisp/elpa/mu4e-1.8.14/mu4e-mark hides /usr/share/emacs/site-lisp/elpa-src/mu4e-1.8.14/mu4e-mark /usr/share/emacs/site-lisp/elpa/mu4e-1.8.14/mu4e-headers hides /usr/share/emacs/site-lisp/elpa-src/mu4e-1.8.14/mu4e-headers /usr/share/emacs/site-lisp/elpa/mu4e-1.8.14/mu4e-org hides /usr/share/emacs/site-lisp/elpa-src/mu4e-1.8.14/mu4e-org /usr/share/emacs/site-lisp/elpa/mu4e-1.8.14/mu4e hides /usr/share/emacs/site-lisp/elpa-src/mu4e-1.8.14/mu4e /usr/share/emacs/site-lisp/elpa/mu4e-1.8.14/mu4e-contacts hides /usr/share/emacs/site-lisp/elpa-src/mu4e-1.8.14/mu4e-contacts /usr/share/emacs/site-lisp/elpa/mu4e-1.8.14/mu4e-speedbar hides /usr/share/emacs/site-lisp/elpa-src/mu4e-1.8.14/mu4e-speedbar /usr/share/emacs/site-lisp/elpa/mu4e-1.8.14/mu4e-vars hides /usr/share/emacs/site-lisp/elpa-src/mu4e-1.8.14/mu4e-vars /usr/share/emacs/site-lisp/elpa/mu4e-1.8.14/mu4e-actions hides /usr/share/emacs/site-lisp/elpa-src/mu4e-1.8.14/mu4e-actions /usr/share/emacs/site-lisp/elpa/mu4e-1.8.14/mu4e-main hides /usr/share/emacs/site-lisp/elpa-src/mu4e-1.8.14/mu4e-main /usr/share/emacs/site-lisp/elpa/mu4e-1.8.14/mu4e-search hides /usr/share/emacs/site-lisp/elpa-src/mu4e-1.8.14/mu4e-search /usr/share/emacs/site-lisp/elpa/mu4e-1.8.14/mu4e-context hides /usr/share/emacs/site-lisp/elpa-src/mu4e-1.8.14/mu4e-context /usr/share/emacs/site-lisp/elpa/mu4e-1.8.14/mu4e-compose hides /usr/share/emacs/site-lisp/elpa-src/mu4e-1.8.14/mu4e-compose /usr/share/emacs/site-lisp/elpa/mu4e-1.8.14/mu4e-lists hides /usr/share/emacs/site-lisp/elpa-src/mu4e-1.8.14/mu4e-lists /usr/share/emacs/site-lisp/elpa/mu4e-1.8.14/mu4e-folders hides /usr/share/emacs/site-lisp/elpa-src/mu4e-1.8.14/mu4e-folders /usr/share/emacs/site-lisp/elpa/mu4e-1.8.14/mu4e-update hides /usr/share/emacs/site-lisp/elpa-src/mu4e-1.8.14/mu4e-update /usr/share/emacs/site-lisp/elpa/mutt-alias-1.4/mutt-alias hides /usr/share/emacs/site-lisp/elpa-src/mutt-alias-1.4/mutt-alias /usr/share/emacs/site-lisp/elpa/mutt-alias-1.4/mutt-alias-pkg hides /usr/share/emacs/site-lisp/elpa-src/mutt-alias-1.4/mutt-alias-pkg /usr/share/emacs/site-lisp/elpa/mutt-alias-1.4/mutt-alias-autoloads hides /usr/share/emacs/site-lisp/elpa-src/mutt-alias-1.4/mutt-alias-autoloads /usr/share/emacs/site-lisp/elpa/muttrc-mode-1.2.1/muttrc-mode-autoloads hides /usr/share/emacs/site-lisp/elpa-src/muttrc-mode-1.2.1/muttrc-mode-autoloads /usr/share/emacs/site-lisp/elpa/muttrc-mode-1.2.1/muttrc-mode hides /usr/share/emacs/site-lisp/elpa-src/muttrc-mode-1.2.1/muttrc-mode /usr/share/emacs/site-lisp/elpa/muttrc-mode-1.2.1/muttrc-mode-pkg hides /usr/share/emacs/site-lisp/elpa-src/muttrc-mode-1.2.1/muttrc-mode-pkg /usr/share/emacs/site-lisp/elpa/po-mode-0.21/po-mode-pkg hides /usr/share/emacs/site-lisp/elpa-src/po-mode-0.21/po-mode-pkg /usr/share/emacs/site-lisp/elpa/po-mode-0.21/po-mode-autoloads hides /usr/share/emacs/site-lisp/elpa-src/po-mode-0.21/po-mode-autoloads /usr/share/emacs/site-lisp/elpa/po-mode-0.21/po-mode hides /usr/share/emacs/site-lisp/elpa-src/po-mode-0.21/po-mode /usr/share/emacs/site-lisp/elpa/pod-mode-1.3/pod-mode-pkg hides /usr/share/emacs/site-lisp/elpa-src/pod-mode-1.3/pod-mode-pkg /usr/share/emacs/site-lisp/elpa/pod-mode-1.3/pod-mode-autoloads hides /usr/share/emacs/site-lisp/elpa-src/pod-mode-1.3/pod-mode-autoloads /usr/share/emacs/site-lisp/elpa/pod-mode-1.3/pod-mode hides /usr/share/emacs/site-lisp/elpa-src/pod-mode-1.3/pod-mode /home/xiyueden/.config/emacs/elpa/popup-0.5.9/popup hides /usr/share/emacs/site-lisp/elpa-src/popup-0.5.8/popup /home/xiyueden/.config/emacs/elpa/popup-0.5.9/popup-pkg hides /usr/share/emacs/site-lisp/elpa-src/popup-0.5.8/popup-pkg /home/xiyueden/.config/emacs/elpa/popup-0.5.9/popup-autoloads hides /usr/share/emacs/site-lisp/elpa-src/popup-0.5.8/popup-autoloads /usr/share/emacs/site-lisp/elpa/py-isort-2016.1/py-isort hides /usr/share/emacs/site-lisp/elpa-src/py-isort-2016.1/py-isort /usr/share/emacs/site-lisp/elpa/py-isort-2016.1/py-isort-autoloads hides /usr/share/emacs/site-lisp/elpa-src/py-isort-2016.1/py-isort-autoloads /usr/share/emacs/site-lisp/elpa/py-isort-2016.1/py-isort-pkg hides /usr/share/emacs/site-lisp/elpa-src/py-isort-2016.1/py-isort-pkg /home/xiyueden/.config/emacs/elpa/rust-mode-1.0.5/rust-mode-autoloads hides /usr/share/emacs/site-lisp/elpa-src/rust-mode-0.4.0/rust-mode-autoloads /home/xiyueden/.config/emacs/elpa/rust-mode-1.0.5/rust-mode hides /usr/share/emacs/site-lisp/elpa-src/rust-mode-0.4.0/rust-mode /home/xiyueden/.config/emacs/elpa/rust-mode-1.0.5/rust-mode-pkg hides /usr/share/emacs/site-lisp/elpa-src/rust-mode-0.4.0/rust-mode-pkg /home/xiyueden/.config/emacs/elpa/session-20210422.53/session-autoloads hides /usr/share/emacs/site-lisp/elpa-src/session-2.4.2/session-autoloads /home/xiyueden/.config/emacs/elpa/session-20210422.53/session hides /usr/share/emacs/site-lisp/elpa-src/session-2.4.2/session /home/xiyueden/.config/emacs/elpa/session-20210422.53/session-pkg hides /usr/share/emacs/site-lisp/elpa-src/session-2.4.2/session-pkg /home/xiyueden/.config/emacs/elpa/tabbar-20180726.1735/tabbar-pkg hides /usr/share/emacs/site-lisp/elpa-src/tabbar-20160524/tabbar-pkg /usr/share/emacs/site-lisp/elpa/tabbar-20160524/tabbar-window hides /usr/share/emacs/site-lisp/elpa-src/tabbar-20160524/tabbar-window /usr/share/emacs/site-lisp/elpa/tabbar-20160524/one-buffer-one-frame hides /usr/share/emacs/site-lisp/elpa-src/tabbar-20160524/one-buffer-one-frame /usr/share/emacs/site-lisp/elpa/tabbar-20160524/aquamacs-tools hides /usr/share/emacs/site-lisp/elpa-src/tabbar-20160524/aquamacs-tools /usr/share/emacs/site-lisp/elpa/tabbar-20160524/aquamacs-compat hides /usr/share/emacs/site-lisp/elpa-src/tabbar-20160524/aquamacs-compat /home/xiyueden/.config/emacs/elpa/tabbar-20180726.1735/tabbar-autoloads hides /usr/share/emacs/site-lisp/elpa-src/tabbar-20160524/tabbar-autoloads /usr/share/emacs/site-lisp/elpa/tabbar-20160524/aquamacs-tabbar hides /usr/share/emacs/site-lisp/elpa-src/tabbar-20160524/aquamacs-tabbar /home/xiyueden/.config/emacs/elpa/tabbar-20180726.1735/tabbar hides /usr/share/emacs/site-lisp/elpa-src/tabbar-20160524/tabbar /usr/share/emacs/site-lisp/elpa/vterm-0.0.2/vterm-load-path hides /usr/share/emacs/site-lisp/elpa-src/vterm-0.0.2/vterm-load-path /home/xiyueden/.config/emacs/elpa/vterm-20230417.424/vterm hides /usr/share/emacs/site-lisp/elpa-src/vterm-0.0.2/vterm /home/xiyueden/.config/emacs/elpa/vterm-20230417.424/vterm-pkg hides /usr/share/emacs/site-lisp/elpa-src/vterm-0.0.2/vterm-pkg /home/xiyueden/.config/emacs/elpa/vterm-20230417.424/vterm-autoloads hides /usr/share/emacs/site-lisp/elpa-src/vterm-0.0.2/vterm-autoloads /home/xiyueden/.config/emacs/elpa/web-mode-17.3.14/web-mode-pkg hides /usr/share/emacs/site-lisp/elpa-src/web-mode-17.0.2/web-mode-pkg /home/xiyueden/.config/emacs/elpa/web-mode-17.3.14/web-mode-autoloads hides /usr/share/emacs/site-lisp/elpa-src/web-mode-17.0.2/web-mode-autoloads /home/xiyueden/.config/emacs/elpa/web-mode-17.3.14/web-mode hides /usr/share/emacs/site-lisp/elpa-src/web-mode-17.0.2/web-mode /home/xiyueden/.config/emacs/elpa/with-editor-3.3.2/with-editor-pkg hides /usr/share/emacs/site-lisp/elpa-src/with-editor-3.0.5/with-editor-pkg /home/xiyueden/.config/emacs/elpa/with-editor-3.3.2/with-editor-autoloads hides /usr/share/emacs/site-lisp/elpa-src/with-editor-3.0.5/with-editor-autoloads /home/xiyueden/.config/emacs/elpa/with-editor-3.3.2/with-editor hides /usr/share/emacs/site-lisp/elpa-src/with-editor-3.0.5/with-editor /usr/share/emacs/site-lisp/elpa/yaml-mode-0.0.15/yaml-mode-pkg hides /usr/share/emacs/site-lisp/elpa-src/yaml-mode-0.0.15/yaml-mode-pkg /usr/share/emacs/site-lisp/elpa/yaml-mode-0.0.15/yaml-mode hides /usr/share/emacs/site-lisp/elpa-src/yaml-mode-0.0.15/yaml-mode /usr/share/emacs/site-lisp/elpa/yaml-mode-0.0.15/yaml-mode-autoloads hides /usr/share/emacs/site-lisp/elpa-src/yaml-mode-0.0.15/yaml-mode-autoloads /usr/share/emacs/site-lisp/elpa/yasnippet-0.14.0/yasnippet-autoloads hides /usr/share/emacs/site-lisp/elpa-src/yasnippet-0.14.0/yasnippet-autoloads /usr/share/emacs/site-lisp/elpa/yasnippet-0.14.0/yasnippet-pkg hides /usr/share/emacs/site-lisp/elpa-src/yasnippet-0.14.0/yasnippet-pkg /usr/share/emacs/site-lisp/elpa/yasnippet-0.14.0/yasnippet hides /usr/share/emacs/site-lisp/elpa-src/yasnippet-0.14.0/yasnippet /home/xiyueden/.config/emacs/elpa/yasnippet-snippets-20230815.820/yasnippet-snippets hides /usr/share/emacs/site-lisp/elpa-src/yasnippet-snippets-20220713/yasnippet-snippets /home/xiyueden/.config/emacs/elpa/yasnippet-snippets-20230815.820/yasnippet-snippets-pkg hides /usr/share/emacs/site-lisp/elpa-src/yasnippet-snippets-20220713/yasnippet-snippets-pkg /home/xiyueden/.config/emacs/elpa/yasnippet-snippets-20230815.820/yasnippet-snippets-autoloads hides /usr/share/emacs/site-lisp/elpa-src/yasnippet-snippets-20220713/yasnippet-snippets-autoloads /home/xiyueden/.config/emacs/elpa/zenburn-theme-2.8.0/zenburn-theme hides /usr/share/emacs/site-lisp/elpa-src/zenburn-theme-2.7.0/zenburn-theme /home/xiyueden/.config/emacs/elpa/zenburn-theme-2.8.0/zenburn-theme-pkg hides /usr/share/emacs/site-lisp/elpa-src/zenburn-theme-2.7.0/zenburn-theme-pkg /home/xiyueden/.config/emacs/elpa/zenburn-theme-2.8.0/zenburn-theme-autoloads hides /usr/share/emacs/site-lisp/elpa-src/zenburn-theme-2.7.0/zenburn-theme-autoloads /usr/share/emacs/site-lisp/elpa/bind-key-2.4.1/bind-key hides /usr/share/emacs/29.1/lisp/use-package/bind-key /home/xiyueden/.config/emacs/elpa/project-0.10.0/project hides /usr/share/emacs/29.1/lisp/progmodes/project /home/xiyueden/.config/emacs/elpa/eldoc-1.14.0/eldoc hides /usr/share/emacs/29.1/lisp/emacs-lisp/eldoc /home/xiyueden/.config/emacs/elpa/seq-2.24/seq hides /usr/share/emacs/29.1/lisp/emacs-lisp/seq /home/xiyueden/.config/emacs/elpa/auctex-13.2.1/tex-info hides /usr/share/auctex/tex-info /home/xiyueden/.config/emacs/elpa/auctex-13.2.1/latex-flymake hides /usr/share/auctex/latex-flymake /home/xiyueden/.config/emacs/elpa/auctex-13.2.1/texmathp hides /usr/share/auctex/texmathp /home/xiyueden/.config/emacs/elpa/auctex-13.2.1/toolbar-x hides /usr/share/auctex/toolbar-x /home/xiyueden/.config/emacs/elpa/auctex-13.2.1/tex-style hides /usr/share/auctex/tex-style /home/xiyueden/.config/emacs/elpa/auctex-13.2.1/tex-font hides /usr/share/auctex/tex-font /home/xiyueden/.config/emacs/elpa/auctex-13.2.1/tex-jp hides /usr/share/auctex/tex-jp /home/xiyueden/.config/emacs/elpa/auctex-13.2.1/tex-mik hides /usr/share/auctex/tex-mik /home/xiyueden/.config/emacs/elpa/auctex-13.2.1/plain-tex hides /usr/share/auctex/plain-tex /home/xiyueden/.config/emacs/elpa/auctex-13.2.1/tex-fold hides /usr/share/auctex/tex-fold /home/xiyueden/.config/emacs/elpa/auctex-13.2.1/tex-ispell hides /usr/share/auctex/tex-ispell /home/xiyueden/.config/emacs/elpa/auctex-13.2.1/tex-bar hides /usr/share/auctex/tex-bar /home/xiyueden/.config/emacs/elpa/auctex-13.2.1/bib-cite hides /usr/share/auctex/bib-cite /home/xiyueden/.config/emacs/elpa/auctex-13.2.1/preview hides /usr/share/auctex/preview /home/xiyueden/.config/emacs/elpa/auctex-13.2.1/context-nl hides /usr/share/auctex/context-nl /home/xiyueden/.config/emacs/elpa/auctex-13.2.1/multi-prompt hides /usr/share/auctex/multi-prompt /home/xiyueden/.config/emacs/elpa/auctex-13.2.1/context-en hides /usr/share/auctex/context-en /home/xiyueden/.config/emacs/elpa/auctex-13.2.1/tex hides /usr/share/auctex/tex /home/xiyueden/.config/emacs/elpa/auctex-13.2.1/font-latex hides /usr/share/auctex/font-latex /home/xiyueden/.config/emacs/elpa/auctex-13.2.1/context hides /usr/share/auctex/context /home/xiyueden/.config/emacs/elpa/auctex-13.2.1/latex hides /usr/share/auctex/latex Features: (shadow sort mail-extr emacsbug message yank-media puny rfc822 mml mml-sec mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader sendmail rfc2047 rfc2045 ietf-drums with-editor server vterm bookmark tramp tramp-loaddefs trampver tramp-integration files-x tramp-compat face-remap color term shell ehelp vterm-module windmove mule-util jka-compr magit-utils crm dash misearch multi-isearch comp comp-cstr rx eglot external-completion array jsonrpc ert ewoc debug backtrace find-func imenu term/xterm xterm cap-words superword subword disp-table whitespace yasnippet-snippets yasnippet icomplete company-oddmuse company-keywords company-etags etags fileloop generator xref company-gtags company-dabbrev-code company-dabbrev company-files company-capf company-cmake company-xcode company-clang company-semantic company-eclim company-template company-bbdb diminish company edmacro kmacro pcase init zenburn-theme keychain-environment gnus nnheader gnus-util mail-utils range mm-util mail-prsvr flymake-proc flymake project compile text-property-search warnings icons epa derived epg rfc6068 epg-config rcirc parse-time advice erc-list erc-menu erc-join erc-ring erc-pcomplete pcomplete comint ansi-osc ansi-color ring erc-track erc-match erc-button wid-edit erc-fill erc-stamp erc-netsplit erc-spelling flyspell ispell erc-log erc-goodies erc iso8601 time-date thingatpt pp format-spec erc-backend erc-networks erc-common erc-compat compat erc-loaddefs cl-extra help-mode use-package use-package-ensure use-package-delight use-package-diminish use-package-bind-key bind-key easy-mmode use-package-core display-line-numbers autorevert filenotify preview-latex tex-site bar-cursor-autoloads boxquote-autoloads buttercup-autoloads cmake-mode-autoloads diminish-autoloads eldoc-autoloads flutter-autoloads folding-autoloads git-modes-autoloads gnuplot-autoloads helm-core-autoloads htmlize-autoloads initsplit-autoloads js2-mode-autoloads markdown-mode-autoloads meson-mode-autoloads popup-autoloads project-autoloads rust-mode-autoloads session-autoloads tabbar-autoloads vterm-autoloads web-mode-autoloads yasnippet-snippets-autoloads zenburn-theme-autoloads dpkg-dev-el debian-el-autoloads debian-el dired dired-loaddefs finder-inf with-editor-autoloads info compat-autoloads seq-autoloads package browse-url url url-proxy url-privacy url-expand url-methods url-history url-cookie generate-lisp-file url-domsuf url-util mailcap url-handlers url-parse auth-source cl-seq eieio eieio-core cl-macs password-cache json subr-x map byte-opt gv bytecomp byte-compile url-vars cl-loaddefs cl-lib rmc iso-transl tooltip cconv eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel term/x-win x-win term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe tabulated-list replace newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock font-lock syntax font-core term/tty-colors frame minibuffer nadvice seq simple cl-generic indonesian philippine cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese composite emoji-zwj charscript charprop case-table epa-hook jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs theme-loaddefs faces cus-face macroexp files window text-properties overlay sha1 md5 base64 format env code-pages mule custom widget keymap hashtable-print-readable backquote threads dbusbind inotify lcms2 dynamic-setting system-font-setting font-render-setting cairo move-toolbar gtk x-toolkit xinput2 x multi-tty make-network-process native-compile emacs) Memory information: ((conses 16 307913 16767) (symbols 48 24491 0) (strings 32 75705 7313) (string-bytes 1 2561105) (vectors 16 40749) (vector-slots 8 778130 14226) (floats 8 214 912) (intervals 56 1125 606) (buffers 984 18))
bug-gnu-emacs <at> gnu.org
:bug#66782
; Package emacs
.
(Sat, 28 Oct 2023 06:34:02 GMT) Full text and rfc822 format available.Message #8 received at 66782 <at> debbugs.gnu.org (full text, mbox):
From: Eli Zaretskii <eliz <at> gnu.org> To: Xiyue Deng <manphiz <at> gmail.com>, Mattias Engdegård <mattiase <at> acm.org> Cc: 66782 <at> debbugs.gnu.org Subject: Re: bug#66782: 29.1; ERT tests reports test redefined depending on loading sequence Date: Sat, 28 Oct 2023 09:32:43 +0300
> From: Xiyue Deng <manphiz <at> gmail.com> > Date: Fri, 27 Oct 2023 13:59:07 -0700 > > As you can see there's only one `first-test' defined. The error message > is misleading. > > A real world example of this can be found in lsp-mode, where > test/lsp-clangd-test.el[1] requires test/lsp-integration-test.el[2]. > See also the discussion on an Debian bug[3]. If test2 requires test1, why are both of them explicitly run from the command line? Isn't that redundant, since running test2 will also run the tests defined by test1? > However, I'd like to see whether upstream considers this type of usage > well-formed and should be supported. If not, upstream should give a > warning on such usage, such as printing a warning when requiring other > modules that has `ert-deftest'. Meanwhile, an improved error message > would also be great. I could agree to improving the error message, but I don't see why we should do anything beyond that, FWIW. Adding Mattias, who added this check 2 years ago.
bug-gnu-emacs <at> gnu.org
:bug#66782
; Package emacs
.
(Sat, 28 Oct 2023 09:41:02 GMT) Full text and rfc822 format available.Message #11 received at 66782 <at> debbugs.gnu.org (full text, mbox):
From: Xiyue Deng <manphiz <at> gmail.com> To: Eli Zaretskii <eliz <at> gnu.org> Cc: Mattias Engdegård <mattiase <at> acm.org>, 66782 <at> debbugs.gnu.org Subject: Re: bug#66782: 29.1; ERT tests report test redefined depending on loading sequence Date: Sat, 28 Oct 2023 02:39:46 -0700
Eli Zaretskii <eliz <at> gnu.org> writes: >> From: Xiyue Deng <manphiz <at> gmail.com> >> Date: Fri, 27 Oct 2023 13:59:07 -0700 >> >> As you can see there's only one `first-test' defined. The error message >> is misleading. >> >> A real world example of this can be found in lsp-mode, where >> test/lsp-clangd-test.el[1] requires test/lsp-integration-test.el[2]. >> See also the discussion on an Debian bug[3]. > > If test2 requires test1, why are both of them explicitly run from the > command line? Isn't that redundant, since running test2 will also run > the tests defined by test1? > IIUC most projects just run all tests without explicit dependency detection. For example, in lsp-mode it uses eask ert-runner to run all tests[1]. In Debian it doesn't support cask or eask, so it also has a custom script that detects all test files and loads them all to run under ert[2]. In those cases the loading sequence of the test files is random. I think few projects actually check for such dependency, which is not worth the trouble when the test file count is large. On the other hand, such use is pretty rare if not wrong. As in the case of lsp-mode, lsp-clangd-test actually just requires lsp-integration-test just for a macro, which could have been defined elsewhere in a helper module and be required from both tests and the problem would be solved. As an alternative exists, I wonder whether upstream may consider requiring a file containing ert tests a misuse in ert tests and should be discouraged, as it may lead to unexpected side effects depending on loading sequence. >> However, I'd like to see whether upstream considers this type of usage >> well-formed and should be supported. If not, upstream should give a >> warning on such usage, such as printing a warning when requiring other >> modules that has `ert-deftest'. Meanwhile, an improved error message >> would also be great. > > I could agree to improving the error message, but I don't see why we > should do anything beyond that, FWIW. > This would also be better. > Adding Mattias, who added this check 2 years ago. [1] https://github.com/emacs-lsp/lsp-mode/blob/master/Makefile#L42 [2] https://salsa.debian.org/emacsen-team/dh-elpa/-/blob/master/dh_elpa_test#L386-396 -- Xiyue Deng
bug-gnu-emacs <at> gnu.org
:bug#66782
; Package emacs
.
(Sat, 28 Oct 2023 09:50:01 GMT) Full text and rfc822 format available.Message #14 received at 66782 <at> debbugs.gnu.org (full text, mbox):
From: Eli Zaretskii <eliz <at> gnu.org> To: Xiyue Deng <manphiz <at> gmail.com> Cc: mattiase <at> acm.org, 66782 <at> debbugs.gnu.org Subject: Re: bug#66782: 29.1; ERT tests report test redefined depending on loading sequence Date: Sat, 28 Oct 2023 12:48:34 +0300
> From: Xiyue Deng <manphiz <at> gmail.com> > Cc: Mattias Engdegård <mattiase <at> acm.org>, > 66782 <at> debbugs.gnu.org > Date: Sat, 28 Oct 2023 02:39:46 -0700 > > Eli Zaretskii <eliz <at> gnu.org> writes: > > > If test2 requires test1, why are both of them explicitly run from the > > command line? Isn't that redundant, since running test2 will also run > > the tests defined by test1? > > IIUC most projects just run all tests without explicit dependency > detection. For example, in lsp-mode it uses eask ert-runner to run all > tests[1]. OK, but why do that in a single Emacs session? That is unclean for much more important reasons: some left-overs from previous tests could affect the following tests. IMO, each test should be run in a fresh Emacs session, i.e. no command line should ever load more than a single test file.
bug-gnu-emacs <at> gnu.org
:bug#66782
; Package emacs
.
(Sat, 28 Oct 2023 11:15:01 GMT) Full text and rfc822 format available.Message #17 received at 66782 <at> debbugs.gnu.org (full text, mbox):
From: Xiyue Deng <manphiz <at> gmail.com> To: Eli Zaretskii <eliz <at> gnu.org> Cc: mattiase <at> acm.org, 66782 <at> debbugs.gnu.org Subject: Re: bug#66782: 29.1; ERT tests report test redefined depending on loading sequence Date: Sat, 28 Oct 2023 04:14:15 -0700
Eli Zaretskii <eliz <at> gnu.org> writes: >> From: Xiyue Deng <manphiz <at> gmail.com> >> Cc: Mattias Engdegård <mattiase <at> acm.org>, >> 66782 <at> debbugs.gnu.org >> Date: Sat, 28 Oct 2023 02:39:46 -0700 >> >> Eli Zaretskii <eliz <at> gnu.org> writes: >> >> > If test2 requires test1, why are both of them explicitly run from the >> > command line? Isn't that redundant, since running test2 will also run >> > the tests defined by test1? >> >> IIUC most projects just run all tests without explicit dependency >> detection. For example, in lsp-mode it uses eask ert-runner to run all >> tests[1]. > > OK, but why do that in a single Emacs session? That is unclean for > much more important reasons: some left-overs from previous tests could > affect the following tests. IMO, each test should be run in a fresh > Emacs session, i.e. no command line should ever load more than a > single test file. I think one reason is that doing all test in one session gives you a nice summary of how many tests passed and which ones failed in the end. If you run just one test per session you'll have to inspect the results manually which could be much more time consuming for large test suites, and plus it may be slower. -- Xiyue Deng
bug-gnu-emacs <at> gnu.org
:bug#66782
; Package emacs
.
(Sat, 28 Oct 2023 11:36:02 GMT) Full text and rfc822 format available.Message #20 received at 66782 <at> debbugs.gnu.org (full text, mbox):
From: Eli Zaretskii <eliz <at> gnu.org> To: Xiyue Deng <manphiz <at> gmail.com> Cc: mattiase <at> acm.org, 66782 <at> debbugs.gnu.org Subject: Re: bug#66782: 29.1; ERT tests report test redefined depending on loading sequence Date: Sat, 28 Oct 2023 14:34:53 +0300
> From: Xiyue Deng <manphiz <at> gmail.com> > Cc: mattiase <at> acm.org, 66782 <at> debbugs.gnu.org > Date: Sat, 28 Oct 2023 04:14:15 -0700 > > Eli Zaretskii <eliz <at> gnu.org> writes: > > > OK, but why do that in a single Emacs session? That is unclean for > > much more important reasons: some left-overs from previous tests could > > affect the following tests. IMO, each test should be run in a fresh > > Emacs session, i.e. no command line should ever load more than a > > single test file. > > I think one reason is that doing all test in one session gives you a > nice summary of how many tests passed and which ones failed in the end. > If you run just one test per session you'll have to inspect the results > manually which could be much more time consuming for large test suites, > and plus it may be slower. The usual way of doing this is to generate summary by some shell script, which runs all the tests one by one. Emacs is not the only program that can count ;-)
bug-gnu-emacs <at> gnu.org
:bug#66782
; Package emacs
.
(Sat, 28 Oct 2023 11:52:02 GMT) Full text and rfc822 format available.Message #23 received at 66782 <at> debbugs.gnu.org (full text, mbox):
From: Xiyue Deng <manphiz <at> gmail.com> To: Eli Zaretskii <eliz <at> gnu.org> Cc: mattiase <at> acm.org, 66782 <at> debbugs.gnu.org Subject: Re: bug#66782: 29.1; ERT tests report test redefined depending on loading sequence Date: Sat, 28 Oct 2023 04:50:37 -0700
Eli Zaretskii <eliz <at> gnu.org> writes: >> From: Xiyue Deng <manphiz <at> gmail.com> >> Cc: mattiase <at> acm.org, 66782 <at> debbugs.gnu.org >> Date: Sat, 28 Oct 2023 04:14:15 -0700 >> >> Eli Zaretskii <eliz <at> gnu.org> writes: >> >> > OK, but why do that in a single Emacs session? That is unclean for >> > much more important reasons: some left-overs from previous tests could >> > affect the following tests. IMO, each test should be run in a fresh >> > Emacs session, i.e. no command line should ever load more than a >> > single test file. >> >> I think one reason is that doing all test in one session gives you a >> nice summary of how many tests passed and which ones failed in the end. >> If you run just one test per session you'll have to inspect the results >> manually which could be much more time consuming for large test suites, >> and plus it may be slower. > > The usual way of doing this is to generate summary by some shell > script, which runs all the tests one by one. Emacs is not the only > program that can count ;-) > That also works of course, though personally I would prefer the good and reliable `ert-summarize-tests-batch-and-exit'[1] so that I don't have to reinvent the wheel ;-) [1] https://www.gnu.org/software/emacs/manual/html_node/ert/Running-Tests-in-Batch-Mode.html P.S. I also thought of another potential counter-example of preferring running one test file over running many in one batch: the tests within the same test file may also leave garbage for the rest of the tests, so to avoid that we would have to prefer running one test per session (do we have such a filter?), which may become even slower. -- Xiyue Deng
bug-gnu-emacs <at> gnu.org
:bug#66782
; Package emacs
.
(Sat, 28 Oct 2023 12:05:01 GMT) Full text and rfc822 format available.Message #26 received at 66782 <at> debbugs.gnu.org (full text, mbox):
From: Eli Zaretskii <eliz <at> gnu.org> To: Xiyue Deng <manphiz <at> gmail.com> Cc: mattiase <at> acm.org, 66782 <at> debbugs.gnu.org Subject: Re: bug#66782: 29.1; ERT tests report test redefined depending on loading sequence Date: Sat, 28 Oct 2023 15:03:47 +0300
> From: Xiyue Deng <manphiz <at> gmail.com> > Cc: mattiase <at> acm.org, 66782 <at> debbugs.gnu.org > Date: Sat, 28 Oct 2023 04:50:37 -0700 > > P.S. I also thought of another potential counter-example of preferring > running one test file over running many in one batch: the tests within > the same test file may also leave garbage for the rest of the tests We could reasonably expect from the author of a single .el test file to make sure the tests in that file don't interfere with one another and make the necessary cleanups for that purpose. But it is much harder to expect the same from several disparate test files, which can quite frequently be written and maintained by different people.
bug-gnu-emacs <at> gnu.org
:bug#66782
; Package emacs
.
(Sat, 28 Oct 2023 12:48:01 GMT) Full text and rfc822 format available.Message #29 received at 66782 <at> debbugs.gnu.org (full text, mbox):
From: Mattias Engdegård <mattias.engdegard <at> gmail.com> To: Eli Zaretskii <eliz <at> gnu.org> Cc: 66782 <at> debbugs.gnu.org, Xiyue Deng <manphiz <at> gmail.com> Subject: Re: bug#66782: 29.1; ERT tests report test redefined depending on loading sequence Date: Sat, 28 Oct 2023 14:46:23 +0200
28 okt. 2023 kl. 14.03 skrev Eli Zaretskii <eliz <at> gnu.org>: > We could reasonably expect from the author of a single .el test file > to make sure the tests in that file don't interfere with one another > and make the necessary cleanups for that purpose. But it is much > harder to expect the same from several disparate test files, which can > quite frequently be written and maintained by different people. I agree, and I have found this to be far from uncommon in practice. Treating redefined test cases as errors found and still finds serious testing bugs, so we definitely want to keep the check as it is or in some equivalent form (a warning wouldn't be nearly as good). And I also agree that the way this test runner explicitly loads .el files without any concern for whether they logically represent a single test collection or are just sub-modules for use in other tests, is quite questionable. I may be missing the point entirely, but what about using a file name convention like Emacs, where only *-tests.el are considered to be actual tests?
bug-gnu-emacs <at> gnu.org
:bug#66782
; Package emacs
.
(Sat, 28 Oct 2023 19:43:02 GMT) Full text and rfc822 format available.Message #32 received at 66782 <at> debbugs.gnu.org (full text, mbox):
From: Xiyue Deng <manphiz <at> gmail.com> To: Eli Zaretskii <eliz <at> gnu.org> Cc: mattiase <at> acm.org, 66782 <at> debbugs.gnu.org Subject: Re: bug#66782: 29.1; ERT tests report test redefined depending on loading sequence Date: Sat, 28 Oct 2023 12:41:19 -0700
Eli Zaretskii <eliz <at> gnu.org> writes: >> From: Xiyue Deng <manphiz <at> gmail.com> >> Cc: mattiase <at> acm.org, 66782 <at> debbugs.gnu.org >> Date: Sat, 28 Oct 2023 04:50:37 -0700 >> >> P.S. I also thought of another potential counter-example of preferring >> running one test file over running many in one batch: the tests within >> the same test file may also leave garbage for the rest of the tests > > We could reasonably expect from the author of a single .el test file > to make sure the tests in that file don't interfere with one another > and make the necessary cleanups for that purpose. But it is much > harder to expect the same from several disparate test files, which can > quite frequently be written and maintained by different people. Fair enough. And of course ideally each test should be able to run either independently and batched together so that running everything in batch is possible with the nice summary :-) -- Xiyue Deng
bug-gnu-emacs <at> gnu.org
:bug#66782
; Package emacs
.
(Sat, 28 Oct 2023 21:21:02 GMT) Full text and rfc822 format available.Message #35 received at 66782 <at> debbugs.gnu.org (full text, mbox):
From: Xiyue Deng <manphiz <at> gmail.com> To: Mattias Engdegård <mattias.engdegard <at> gmail.com> Cc: Eli Zaretskii <eliz <at> gnu.org>, 66782 <at> debbugs.gnu.org Subject: Re: bug#66782: 29.1; ERT tests report test redefined depending on loading sequence Date: Sat, 28 Oct 2023 14:19:40 -0700
Mattias Engdegård <mattias.engdegard <at> gmail.com> writes: > 28 okt. 2023 kl. 14.03 skrev Eli Zaretskii <eliz <at> gnu.org>: > >> We could reasonably expect from the author of a single .el test file >> to make sure the tests in that file don't interfere with one another >> and make the necessary cleanups for that purpose. But it is much >> harder to expect the same from several disparate test files, which can >> quite frequently be written and maintained by different people. > > I agree, and I have found this to be far from uncommon in practice. > > Treating redefined test cases as errors found and still finds serious testing > bugs, so we definitely want to keep the check as it is or in some equivalent > form (a warning wouldn't be nearly as good). > I also agree, and I would definitely keep the current check. At the very least, duplicated test name makes identifying failed tests harder. > And I also agree that the way this test runner explicitly loads .el files > without any concern for whether they logically represent a single test > collection or are just sub-modules for use in other tests, is quite > questionable. > Exactly. > I may be missing the point entirely, but what about using a file name convention > like Emacs, where only *-tests.el are considered to be actual tests? > Which is why I'm asking for upstream stance on whether it will consider requiring other test modules as well-formed. To clarify one of my original proposals: if it makes no sense for a `ert-deftest' to depend on other `ert-deftest', I would say there is no reason for such a dependency, and people should move reusable components to a helper module instead. And of course a better error message such as forbidding such requires would be better. Wdyt? > -- Xiyue Deng
bug-gnu-emacs <at> gnu.org
:bug#66782
; Package emacs
.
(Sun, 29 Oct 2023 12:10:02 GMT) Full text and rfc822 format available.Message #38 received at 66782 <at> debbugs.gnu.org (full text, mbox):
From: Mattias Engdegård <mattias.engdegard <at> gmail.com> To: Xiyue Deng <manphiz <at> gmail.com> Cc: Eli Zaretskii <eliz <at> gnu.org>, 66782 <at> debbugs.gnu.org Subject: Re: bug#66782: 29.1; ERT tests report test redefined depending on loading sequence Date: Sun, 29 Oct 2023 13:09:11 +0100
28 okt. 2023 kl. 23.19 skrev Xiyue Deng <manphiz <at> gmail.com>: > To clarify one of my > original proposals: if it makes no sense for a `ert-deftest' to depend > on other `ert-deftest', I would say there is no reason for such a > dependency, and people should move reusable components to a helper > module instead. There is no reason for one `ert-deftest` to make use of another, but was that the case here? I interpreted it as a test suite that spread its `ert-deftest` definitions over multiple .el files which isn't necessarily a bad way of organising them. As said before, there is little sense in including the same individual tests from multiple 'root' .el files since that would run them more than once. Perhaps that is what you meant? If so, please forgive me for the pedantry.
bug-gnu-emacs <at> gnu.org
:bug#66782
; Package emacs
.
(Sun, 29 Oct 2023 21:55:02 GMT) Full text and rfc822 format available.Message #41 received at 66782 <at> debbugs.gnu.org (full text, mbox):
From: Xiyue Deng <manphiz <at> gmail.com> To: Mattias Engdegård <mattias.engdegard <at> gmail.com> Cc: Eli Zaretskii <eliz <at> gnu.org>, 66782 <at> debbugs.gnu.org Subject: Re: bug#66782: 29.1; ERT tests report test redefined depending on loading sequence Date: Sun, 29 Oct 2023 14:53:23 -0700
Mattias Engdegård <mattias.engdegard <at> gmail.com> writes: > 28 okt. 2023 kl. 23.19 skrev Xiyue Deng <manphiz <at> gmail.com>: > >> To clarify one of my >> original proposals: if it makes no sense for a `ert-deftest' to depend >> on other `ert-deftest', I would say there is no reason for such a >> dependency, and people should move reusable components to a helper >> module instead. > > There is no reason for one `ert-deftest` to make use of another, but was that > the case here? I interpreted it as a test suite that spread its `ert-deftest` > definitions over multiple .el files which isn't necessarily a bad way of > organising them. > As they just use eask to run all tests under folder test in their Makefile[1], I don't think spreading definitions is what they are doing. To clarify, I think instead they are requiring lsp-integration-test just because they want use the `lsp-test-wait' macro[2] in lsp-clangd-test[3][4][5], which could have been done by putting those macros in a separate file and requiring that from both tests. > As said before, there is little sense in including the same individual tests from multiple 'root' .el files since that would run them more than once. > > Perhaps that is what you meant? If so, please forgive me for the pedantry. > Exactly, and no worries. As far as I know, there is no practical use for a test case to depend on another test case in any language I worked with as a test case provides no reusable component. On the other hand, there are alternatives that makes more sense to do what they (e.g. lsp-mode) are doing. Again, IMHO I think it makes sense for ERT not to support it or to even forbid it. Doing this also avoids such misleading error message I was reporting, which got triggered depending on the loading sequence which may make test suites flaky (as the loading sequence is not deterministic). [1] https://github.com/emacs-lsp/lsp-mode/blob/master/Makefile#L42 [2] https://github.com/emacs-lsp/lsp-mode/blob/master/test/lsp-integration-test.el#L51 [3] https://github.com/emacs-lsp/lsp-mode/blob/master/test/lsp-clangd-test.el#L109 [4] https://github.com/emacs-lsp/lsp-mode/blob/master/test/lsp-clangd-test.el#L118 [5] https://github.com/emacs-lsp/lsp-mode/blob/master/test/lsp-clangd-test.el#L141 -- Xiyue Deng
bug-gnu-emacs <at> gnu.org
:bug#66782
; Package emacs
.
(Mon, 30 Oct 2023 12:06:01 GMT) Full text and rfc822 format available.Message #44 received at 66782 <at> debbugs.gnu.org (full text, mbox):
From: Mattias Engdegård <mattias.engdegard <at> gmail.com> To: Xiyue Deng <manphiz <at> gmail.com> Cc: Eli Zaretskii <eliz <at> gnu.org>, 66782 <at> debbugs.gnu.org Subject: Re: bug#66782: 29.1; ERT tests report test redefined depending on loading sequence Date: Mon, 30 Oct 2023 13:04:58 +0100
29 okt. 2023 kl. 22.53 skrev Xiyue Deng <manphiz <at> gmail.com>: > As far as I know, there is no practical use for a test case to depend on > another test case in any language I worked with as a test case provides > no reusable component. On the other hand, there are alternatives that > makes more sense to do what they (e.g. lsp-mode) are doing. Again, IMHO > I think it makes sense for ERT not to support it or to even forbid it. > Doing this also avoids such misleading error message I was reporting, > which got triggered depending on the loading sequence which may make > test suites flaky (as the loading sequence is not deterministic). I don't think ERT can forbid anyone from loading in the same .el file multiple times because it's none of its business. Or did you have something else in mind? All in all, I'm not sure there is anything that we can do in Emacs right now that would help, but if you have any concrete suggestions, do tell.
bug-gnu-emacs <at> gnu.org
:bug#66782
; Package emacs
.
(Mon, 30 Oct 2023 20:49:01 GMT) Full text and rfc822 format available.Message #47 received at 66782 <at> debbugs.gnu.org (full text, mbox):
From: Xiyue Deng <manphiz <at> gmail.com> To: Mattias Engdegård <mattias.engdegard <at> gmail.com> Cc: Eli Zaretskii <eliz <at> gnu.org>, 66782 <at> debbugs.gnu.org Subject: Re: bug#66782: 29.1; ERT tests report test redefined depending on loading sequence Date: Mon, 30 Oct 2023 13:47:53 -0700
Mattias Engdegård <mattias.engdegard <at> gmail.com> writes: > 29 okt. 2023 kl. 22.53 skrev Xiyue Deng <manphiz <at> gmail.com>: > >> As far as I know, there is no practical use for a test case to depend on >> another test case in any language I worked with as a test case provides >> no reusable component. On the other hand, there are alternatives that >> makes more sense to do what they (e.g. lsp-mode) are doing. Again, IMHO >> I think it makes sense for ERT not to support it or to even forbid it. >> Doing this also avoids such misleading error message I was reporting, >> which got triggered depending on the loading sequence which may make >> test suites flaky (as the loading sequence is not deterministic). > > I don't think ERT can forbid anyone from loading in the same .el file multiple times because it's none of its business. Or did you have something else in mind? > It's not that loading the same .el multiple times that caused this error, but loading a module with `ert-deftest' and both .el modules are passed to batch ert processing which is common practice. But see below. > All in all, I'm not sure there is anything that we can do in Emacs right now that would help, but if you have any concrete suggestions, do tell. > I understand if upstream don't want to complicate `require' logic too much. However I wonder whether it's OK to add warning if a required module has `ert-deftest' in it, so that it can help people identify that a `Test "foo" redefined' error is due to requiring other module instead of an actual duplicated test name. How does this sound? -- Xiyue Deng
bug-gnu-emacs <at> gnu.org
:bug#66782
; Package emacs
.
(Thu, 02 Nov 2023 17:18:01 GMT) Full text and rfc822 format available.Message #50 received at 66782 <at> debbugs.gnu.org (full text, mbox):
From: Xiyue Deng <manphiz <at> gmail.com> To: Mattias Engdegård <mattias.engdegard <at> gmail.com> Cc: Eli Zaretskii <eliz <at> gnu.org>, 66782 <at> debbugs.gnu.org Subject: Re: bug#66782: 29.1; ERT tests report test redefined depending on loading sequence Date: Thu, 02 Nov 2023 10:17:01 -0700
[Message part 1 (text/plain, inline)]
Xiyue Deng <manphiz <at> gmail.com> writes: > Mattias Engdegård <mattias.engdegard <at> gmail.com> writes: > >> 29 okt. 2023 kl. 22.53 skrev Xiyue Deng <manphiz <at> gmail.com>: >> >>> As far as I know, there is no practical use for a test case to depend on >>> another test case in any language I worked with as a test case provides >>> no reusable component. On the other hand, there are alternatives that >>> makes more sense to do what they (e.g. lsp-mode) are doing. Again, IMHO >>> I think it makes sense for ERT not to support it or to even forbid it. >>> Doing this also avoids such misleading error message I was reporting, >>> which got triggered depending on the loading sequence which may make >>> test suites flaky (as the loading sequence is not deterministic). >> >> I don't think ERT can forbid anyone from loading in the same .el file multiple times because it's none of its business. Or did you have something else in mind? >> > > It's not that loading the same .el multiple times that caused this > error, but loading a module with `ert-deftest' and both .el modules are > passed to batch ert processing which is common practice. But see below. > >> All in all, I'm not sure there is anything that we can do in Emacs right now that would help, but if you have any concrete suggestions, do tell. >> > > I understand if upstream don't want to complicate `require' logic too > much. However I wonder whether it's OK to add warning if a required > module has `ert-deftest' in it, so that it can help people identify that > a `Test "foo" redefined' error is due to requiring other module instead > of an actual duplicated test name. How does this sound? As I didn't get an answer I assume this was a no-go. So instead I'd like to propose a slight change to the error message to mention that it may also be caused by an ert test being loaded multiple times. Patch is attached, please let me know whether this works. -- Xiyue Deng
[0001-Revise-test-redefined-error-message.patch (text/x-diff, attachment)]
bug-gnu-emacs <at> gnu.org
:bug#66782
; Package emacs
.
(Thu, 02 Nov 2023 18:58:01 GMT) Full text and rfc822 format available.Message #53 received at 66782 <at> debbugs.gnu.org (full text, mbox):
From: Mattias Engdegård <mattias.engdegard <at> gmail.com> To: Xiyue Deng <manphiz <at> gmail.com> Cc: Eli Zaretskii <eliz <at> gnu.org>, 66782 <at> debbugs.gnu.org Subject: Re: bug#66782: 29.1; ERT tests report test redefined depending on loading sequence Date: Thu, 2 Nov 2023 19:56:41 +0100
2 nov. 2023 kl. 18.17 skrev Xiyue Deng <manphiz <at> gmail.com>: >> I understand if upstream don't want to complicate `require' logic too >> much. However I wonder whether it's OK to add warning if a required >> module has `ert-deftest' in it, so that it can help people identify that >> a `Test "foo" redefined' error is due to requiring other module instead >> of an actual duplicated test name. How does this sound? > > As I didn't get an answer I assume this was a no-go. No, please don't make such an assumption -- I was just busy elsewhere and hadn't given your message the attention it deserved. Sorry about that. That said, in this case I'm not sure how to implement your suggestion in a clean way and if all that effort is really worth the trouble, so perhaps the answer would be the same anyway. And we probably don't want to prohibit `ert-deftest` in required modules in general for reasons mentioned -- they could be used with perfectly fine discipline elsewhere. > So instead I'd > like to propose a slight change to the error message to mention that it > may also be caused by an ert test being loaded multiple times. Patch is > attached, please let me know whether this works. I wouldn't mind such a change if it really would help. Would it? Isn't it just restating the problem in other words?
bug-gnu-emacs <at> gnu.org
:bug#66782
; Package emacs
.
(Thu, 02 Nov 2023 22:02:02 GMT) Full text and rfc822 format available.Message #56 received at 66782 <at> debbugs.gnu.org (full text, mbox):
From: Xiyue Deng <manphiz <at> gmail.com> To: Mattias Engdegård <mattias.engdegard <at> gmail.com> Cc: Eli Zaretskii <eliz <at> gnu.org>, 66782 <at> debbugs.gnu.org Subject: Re: bug#66782: 29.1; ERT tests report test redefined depending on loading sequence Date: Thu, 02 Nov 2023 15:00:23 -0700
Hi Mattias, Mattias Engdegård <mattias.engdegard <at> gmail.com> writes: > 2 nov. 2023 kl. 18.17 skrev Xiyue Deng <manphiz <at> gmail.com>: > >>> I understand if upstream don't want to complicate `require' logic too >>> much. However I wonder whether it's OK to add warning if a required >>> module has `ert-deftest' in it, so that it can help people identify that >>> a `Test "foo" redefined' error is due to requiring other module instead >>> of an actual duplicated test name. How does this sound? >> >> As I didn't get an answer I assume this was a no-go. > > No, please don't make such an assumption -- I was just busy elsewhere and hadn't given your message the attention it deserved. Sorry about that. > Sorry if I sounded pushy which I didn't intend to, ... > That said, in this case I'm not sure how to implement your suggestion in a clean > way and if all that effort is really worth the trouble, so perhaps the answer > would be the same anyway. And we probably don't want to prohibit `ert-deftest` > in required modules in general for reasons mentioned -- they could be used with > perfectly fine discipline elsewhere. > And glad we are in agreement here, as I realizing adding this extra checking to require may add some unnecessary complexity. >> So instead I'd >> like to propose a slight change to the error message to mention that it >> may also be caused by an ert test being loaded multiple times. Patch is >> attached, please let me know whether this works. > > I wouldn't mind such a change if it really would help. Would it? Isn't it just restating the problem in other words? > Let me clarify my intent, which is trying to do is to distinguish the two possible scenarios that cause this error: 1) Tests that are different but use the same test name. 2) There is no tests sharing the same name, but caused by double loading the same test unit through a dependency by require. Case 1 happens a lot in the wild and has caused many FTBFS bugs in Debian after upgrading Emacs to 29.1 (e.g. [1][2]), and the fix is simply to rename the tests. Case 2 is kinda tricky as there are no tests actually sharing a name here. See also in [3], which had many test with same name as in case 1 but for the specific error on `lsp-text-document-hover-request' it's actually case 2. As a matter of fact I've spent a non-trivial time trying to debug this one as it depends on the loading sequence which caused the failure to be flaky. So I hope my proposed change can help people on realizing that it's case 2 a bit faster. > [1] https://bugs.debian.org/1052865 [2] https://bugs.debian.org/1052922 [3] https://bugs.debian.org/1052939 -- Xiyue Deng
Mattias Engdegård <mattias.engdegard <at> gmail.com>
:Xiyue Deng <manphiz <at> gmail.com>
:Message #61 received at 66782-done <at> debbugs.gnu.org (full text, mbox):
From: Mattias Engdegård <mattias.engdegard <at> gmail.com> To: Xiyue Deng <manphiz <at> gmail.com> Cc: Eli Zaretskii <eliz <at> gnu.org>, 66782-done <at> debbugs.gnu.org Subject: Re: bug#66782: 29.1; ERT tests report test redefined depending on loading sequence Date: Fri, 3 Nov 2023 18:14:24 +0100
2 nov. 2023 kl. 23.00 skrev Xiyue Deng <manphiz <at> gmail.com>: > 1) Tests that are different but use the same test name. > > 2) There is no tests sharing the same name, but caused by double loading > the same test unit through a dependency by require. > > Case 1 happens a lot in the wild and has caused many FTBFS bugs in > Debian after upgrading Emacs to 29.1 (e.g. [1][2]), and the fix is > simply to rename the tests. Thank you, I'm happy to hear that the check actually caught the kind of errors it was supposed to find. > As a matter of fact I've spent a non-trivial time > trying to debug this one as it depends on the loading sequence which > caused the failure to be flaky. So I hope my proposed change can help > people on realizing that it's case 2 a bit faster. That's fine, adding something like what you suggested doesn't cost us anything: now done on master (425d23fbea). I'm closing the bug now, but do say if there is something I forgot.
bug-gnu-emacs <at> gnu.org
:bug#66782
; Package emacs
.
(Fri, 03 Nov 2023 17:57:01 GMT) Full text and rfc822 format available.Message #64 received at 66782-done <at> debbugs.gnu.org (full text, mbox):
From: Xiyue Deng <manphiz <at> gmail.com> To: Mattias Engdegård <mattias.engdegard <at> gmail.com> Cc: Eli Zaretskii <eliz <at> gnu.org>, 66782-done <at> debbugs.gnu.org Subject: Re: bug#66782: 29.1; ERT tests report test redefined depending on loading sequence Date: Fri, 03 Nov 2023 10:56:00 -0700
Mattias Engdegård <mattias.engdegard <at> gmail.com> writes: > 2 nov. 2023 kl. 23.00 skrev Xiyue Deng <manphiz <at> gmail.com>: > >> 1) Tests that are different but use the same test name. >> >> 2) There is no tests sharing the same name, but caused by double loading >> the same test unit through a dependency by require. >> >> Case 1 happens a lot in the wild and has caused many FTBFS bugs in >> Debian after upgrading Emacs to 29.1 (e.g. [1][2]), and the fix is >> simply to rename the tests. > > Thank you, I'm happy to hear that the check actually caught the kind of errors it was supposed to find. > >> As a matter of fact I've spent a non-trivial time >> trying to debug this one as it depends on the loading sequence which >> caused the failure to be flaky. So I hope my proposed change can help >> people on realizing that it's case 2 a bit faster. > > That's fine, adding something like what you suggested doesn't cost us anything: now done on master (425d23fbea). > > I'm closing the bug now, but do say if there is something I forgot. > Thanks Mattias! Would be better if this can be applied to 29 branch as well now that 29.2 is around the corner :-) -- Xiyue Deng
bug-gnu-emacs <at> gnu.org
:bug#66782
; Package emacs
.
(Sat, 04 Nov 2023 08:53:02 GMT) Full text and rfc822 format available.Message #67 received at 66782-done <at> debbugs.gnu.org (full text, mbox):
From: Eli Zaretskii <eliz <at> gnu.org> To: Xiyue Deng <manphiz <at> gmail.com> Cc: mattias.engdegard <at> gmail.com, 66782-done <at> debbugs.gnu.org Subject: Re: bug#66782: 29.1; ERT tests report test redefined depending on loading sequence Date: Sat, 04 Nov 2023 10:51:46 +0200
> From: Xiyue Deng <manphiz <at> gmail.com> > Cc: Eli Zaretskii <eliz <at> gnu.org>, 66782-done <at> debbugs.gnu.org > Date: Fri, 03 Nov 2023 10:56:00 -0700 > > Mattias Engdegård <mattias.engdegard <at> gmail.com> writes: > > > That's fine, adding something like what you suggested doesn't cost us anything: now done on master (425d23fbea). > > > > I'm closing the bug now, but do say if there is something I forgot. > > > > Thanks Mattias! Would be better if this can be applied to 29 branch as > well now that 29.2 is around the corner :-) I cherry-picked the change to the emacs-29 branch.
Debbugs Internal Request <help-debbugs <at> gnu.org>
to internal_control <at> debbugs.gnu.org
.
(Sat, 02 Dec 2023 12:24:11 GMT) Full text and rfc822 format available.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.