Subject: bug#43582: 27.1; Avoid topic changes to topicless group

From: dick <[email-masked]>
Date: Wed, 23 Sep 2020 17:24:26 -0400

Note gnus.general appears *twice* because `gnus-topic-change-level' on a
topicless group will blithely add it to gnus-topic-alist without updating the
group buffer to reflect its new position in the "topology."

emacs-27.1 -Q --batch \
--eval "(custom-set-variables \
 '(network-security-level (quote low)) \
 '(gnus-interactive-exit (quote quiet)) \
 '(gnus-large-newsgroup 4000) \
 '(gnus-select-method (quote (nntp \"news.gmane.io\"))) \
 '(gnus-add-timestamp-to-message (quote log)) \
 '(gnus-before-startup-hook (quote (toggle-debug-on-error))) \
 '(gnus-always-read-dribble-file t) \
 '(gnus-use-dribble-file nil) \
 '(gnus-read-newsrc-file nil) \
 '(gnus-parameters (quote ((\"^nntp\" (display . 1000))))) \
 '(gnus-summary-prepared-hook (quote (gnus-summary-hide-all-threads))) \
 '(gnus-startup-file \"/var/tmp/foo\") \
 )" \
-l gnus-topic \
--eval "(add-hook 'gnus-group-mode-hook 'gnus-topic-mode)" \
-f gnus \
--eval "(gnus-server-open-all-servers)" \
--eval "(gnus-fetch-group \"nntp+news.gmane.io:gmane.emacs.gnus.general\")" \
--eval "(with-current-buffer (gnus-summary-buffer-name \"nntp+news.gmane.io:gmane.emacs.gnus.general\") (gnus-summary-exit))" \
--eval "(goto-char (point-min))" \
--eval "(save-excursion (gnus-group-subscribe nil))" \
--eval "(gnus-topic-move-group nil \"misc\")" \
--eval "(princ (buffer-string) #'external-debugging-output)"

>From 88fe5b506efc230cbf172389844502dcc33d98c6 Mon Sep 17 00:00:00 2001
From: dickmao <none>
Date: Wed, 23 Sep 2020 17:15:09 -0400
Subject: [PATCH] Bad things happen when applying topic changes to topicless
 groups

* lisp/gnus/gnus-topic.el (gnus-topic-change-level):
Do not change gnus-topic-alist when group is outside "toplogy."
---
 lisp/gnus/gnus-topic.el | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/lisp/gnus/gnus-topic.el b/lisp/gnus/gnus-topic.el
index ffd26bb30f..c913002f70 100644
--- a/lisp/gnus/gnus-topic.el
+++ b/lisp/gnus/gnus-topic.el
@@ -897,9 +897,7 @@ gnus-topic-change-level
     (let ((inhibit-read-only t))
       (unless gnus-topic-inhibit-change-level
 	(gnus-group-goto-group (or (car (nth 1 previous)) group))
-	(when (and gnus-topic-mode
-		   gnus-topic-alist
-		   (not gnus-topic-inhibit-change-level))
+	(when (and gnus-topic-mode gnus-topic-alist (gnus-current-topic))
 	  ;; Remove the group from the topics.
 	  (if (and (< oldlevel gnus-level-zombie)
 		   (>= level gnus-level-zombie))
-- 
2.26.2

In GNU Emacs 27.1 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.22.30)
 of 2020-08-25 built on dick
Repository revision: ddd82c2b1261b2c5d5425c0738112f47e2bb18bf
Repository branch: gnus-dev-27
Windowing system distributor 'The X.Org Foundation', version 11.0.11906000
System Description: Ubuntu 18.04.4 LTS

Recent messages:
#	todo.org
#

Quit [4 times]
Mark set
Auto-saving...done
Saving file /home/dick/emacs/.git/COMMIT_EDITMSG...
Wrote /home/dick/emacs/.git/COMMIT_EDITMSG
Git finished
Mark saved where search started [2 times]

Configured using:
 'configure --prefix=/home/dick/.local --with-rsvg=yes --with-xml2=yes'

Configured features:
XPM JPEG TIFF GIF PNG RSVG SOUND DBUS GSETTINGS GLIB NOTIFY INOTIFY LIBSELINUX
GNUTLS LIBXML2 FREETYPE HARFBUZZ XFT ZLIB TOOLKIT_SCROLL_BARS GTK3 X11 XDBE
XIM MODULES THREADS JSON PDUMPER GMP

Important settings:
  value of $LANG: en_US.UTF-8
  locale-coding-system: utf-8-unix

Major mode: Outline

Minor modes in effect:
  semantic-minor-modes-format: ((:eval (if (or semantic-highlight-edits-mode semantic-show-unmatched-syntax-mode)  S)))
  pdf-occur-global-minor-mode: t
  bug-reference-mode: t
  pyvenv-mode: t
  show-paren-mode: t
  global-magit-file-mode: t
  magit-file-mode: t
  magit-auto-revert-mode: t
  auto-revert-mode: t
  global-git-commit-mode: t
  async-bytecomp-package-mode: t
  flx-ido-mode: t
  projectile-mode: t
  ido-everywhere: t
  override-global-mode: t
  shell-dirtrack-mode: t
  global-hl-line-mode: t
  winner-mode: t
  cl-old-struct-compat-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  mouse-wheel-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-mode: t
  blink-cursor-mode: t
  auto-composition-mode: t
  auto-encryption-mode: t
  auto-compression-mode: t
  column-number-mode: t
  line-number-mode: t
  transient-mark-mode: t

Load-path shadows:
/home/dick/ESS/lisp/obsolete/ess-swv hides /home/dick/ESS/lisp/ess-swv
/home/dick/ESS/lisp/obsolete/ess-rutils hides /home/dick/ESS/lisp/ess-rutils
/home/dick/ESS/lisp/obsolete/ess-noweb hides /home/dick/ESS/lisp/ess-noweb
/home/dick/ESS/lisp/obsolete/mouseme hides /home/dick/ESS/lisp/mouseme
/home/dick/ESS/lisp/obsolete/ess-mouse hides /home/dick/ESS/lisp/ess-mouse
/home/dick/ESS/lisp/obsolete/ess-noweb-mode hides /home/dick/ESS/lisp/ess-noweb-mode
/home/dick/ESS/lisp/obsolete/make-regexp hides /home/dick/ESS/lisp/make-regexp
/home/dick/ESS/lisp/obsolete/ess-r-a hides /home/dick/ESS/lisp/ess-r-a
/home/dick/ESS/lisp/obsolete/ess-noweb-font-lock-mode hides /home/dick/ESS/lisp/ess-noweb-font-lock-mode
/home/dick/gomacro-mode/gomacro-mode hides /home/dick/.emacs.d/elpa/gomacro-mode-20200326.1103/gomacro-mode
/home/dick/ESS/lisp/julia-mode-latexsubs hides /home/dick/.emacs.d/elpa/julia-mode-20200717.1915/julia-mode-latexsubs
/home/dick/ESS/lisp/julia-mode hides /home/dick/.emacs.d/elpa/julia-mode-20200717.1915/julia-mode
/home/dick/.emacs.d/elpa/hydra-20170924.2259/lv hides /home/dick/.emacs.d/elpa/lv-20191106.1238/lv
/home/dick/melpa-stats/melpa-stats hides /home/dick/.emacs.d/elpa/melpa-stats-20190720.1833/melpa-stats
/home/dick/.emacs.d/elpa/async-20200113.1745/async-autoloads hides /home/dick/.local/share/emacs/site-lisp/emacs-async/async-autoloads
/home/dick/.emacs.d/elpa/async-20200113.1745/async-bytecomp hides /home/dick/.local/share/emacs/site-lisp/emacs-async/async-bytecomp
/home/dick/.emacs.d/elpa/async-20200113.1745/smtpmail-async hides /home/dick/.local/share/emacs/site-lisp/emacs-async/smtpmail-async
/home/dick/.emacs.d/elpa/async-20200113.1745/dired-async hides /home/dick/.local/share/emacs/site-lisp/emacs-async/dired-async
/home/dick/.emacs.d/elpa/async-20200113.1745/async hides /home/dick/.local/share/emacs/site-lisp/emacs-async/async
/home/dick/.emacs.d/elpa/async-20200113.1745/async-pkg hides /home/dick/.local/share/emacs/site-lisp/emacs-async/async-pkg
/home/dick/.emacs.d/lisp/json hides /home/dick/.local/share/emacs/27.1/lisp/json
/home/dick/.emacs.d/elpa/map-2.1/map hides /home/dick/.local/share/emacs/27.1/lisp/emacs-lisp/map

Features:
(edebug deuglify gnus-async gnus-cite gnus-cus gnus-demon gnus-diary nndiary
gnus-draft gnus-agent nnvirtual nntp gnus-cache nndraft nnmh gnus-dup gnus-fun
gnus-html url-queue mm-url gnus-kill gnus-logic gnus-mh mh-comp mh-scan
mh-gnus mh-e mh-compat mh-buffers mh-loaddefs gnus-registry registry gnus-salt
gnus-score score-mode gnus-srvr gnus-topic gnus-uu yenc gnus-vm debbugs-gnu
debbugs soap-client rng-xsd rng-dt rng-util xsd-regexp shadow sort flyspell
ispell footnote mail-extr gnus-msg gnus-art mm-uu mml2015 mm-view mml-smime
smime dig emacsbug sendmail dired-aux rect git-rebase sx-interaction
sx-compose sx-question-list sx-favorites sx-networks sx-site sx-tag sx-time
sx-question-mode sx-question-print sx-user sx-babel sx-button markdown-mode
edit-indirect sx-switchto sx-question sx-method sx-auth sx-filter sx-request
sx-encoding sx-cache pdf-sync pdf-annot pdf-outline pdf-history pdf-occur
pdf-links pdf-tools pdf-isearch tablist pdf-misc pdf-view magit-bookmark
bookmark pdf-cache pdf-info tq pdf-util tablist-filter semantic/wisent/comp
semantic/wisent semantic/wisent/wisent semantic/util-modes semantic/util
semantic semantic/tag semantic/lex semantic/fw mode-local cedet tar-mode
arc-mode archive-mode make-mode tabify linum term disp-table ehelp fzf
autoload lisp-mnt mm-archive timezone ein-markdown-mode ein-ipynb-mode
ein-process ein-jupyter exec-path-from-shell ein-dev ein-notebook ein-gat
ein-python-send ein-traceback ein-shared-output ein-pytools ein-pager view
ein-completer ein-notification ein-scratchsheet ein-worksheet poly-ein
display-line-numbers polymode poly-lock polymode-base polymode-weave
polymode-export polymode-compat polymode-methods polymode-core
polymode-classes eieio-custom ein-kill-ring ein-kernelinfo ein-file
ein-notebooklist eieio-opt speedbar sb-image ezimage dframe ein-contents-api
bug-reference magit-extras mule-util face-remap vc vc-dispatcher cl-print
debug backtrace pulse ivy delsel colir color ivy-overlay dumb-jump f
company-oddmuse company-keywords company-etags company-gtags
company-dabbrev-code company-dabbrev company-files company-cmake company-xcode
company-eclim company-css company-nxml company-bbdb company-go
company-template company-c-headers es-mode js yasnippet-snippets yasnippet
company-capf help-fns radix-tree elpy elpy-rpc pyvenv eshell esh-cmd esh-ext
esh-opt esh-proc esh-io esh-arg esh-module esh-groups esh-util elpy-shell
elpy-profile elpy-django elpy-refactor python tramp-sh jsonnet-mode ag vc-svn
find-dired s sh-script executable org-element avl-tree ol-eww ol-rmail ol-mhe
ol-irc ol-info ol-gnus nnir gnus-sum gnus-group gnus-undo gnus-start
gnus-cloud nnimap nnmail mail-source utf7 netrc nnoo gnus-spec gnus-int
gnus-range gnus-win ol-docview doc-view image-mode exif ol-bibtex bibtex
ol-bbdb ol-w3m org-tempo tempo org org-macro org-footnote org-pcomplete
org-list org-faces org-entities org-version ob-jupyter jupyter-org-extensions
jupyter-org-client jupyter-repl jupyter-kernel-manager jupyter-channel
jupyter-widget-client simple-httpd jupyter-client jupyter-comm-layer
jupyter-messages hmac-def jupyter-mime shr svg dom jupyter-kernelspec
jupyter-env jupyter-base tramp tramp-loaddefs trampver tramp-integration
files-x tramp-compat parse-time iso8601 ls-lisp eieio-base ob-emacs-lisp
ob-ein ein-cell ein-output-area ein-kernel ein-ipdb ein-query ein-events
ein-websocket websocket bindat ein-node ewoc ein-log ein-classes ein-core
request ein ein-utils deferred cc-mode cc-fonts cc-guess cc-menus cc-cmds
cc-styles cc-align cc-engine cc-vars cc-defs ob ob-tangle org-src ob-ref
ob-lob ob-table ob-exp ob-comint ob-core ob-eval org-table ol org-keys
org-compat org-macs org-loaddefs cal-menu calendar cal-loaddefs conf-mode
network-stream url-http url-gw nsm url-cache url-auth misearch multi-isearch
flycheck find-func jka-compr let-alist go-eldoc gomacro-mode go-mode find-file
ffap paredit-ext paredit dired-x inf-ruby ruby-mode smie melpa-stats ht
dash-functional anaphora a pp sx key-combo company haskell-interactive-mode
haskell-presentation-mode haskell-process haskell-session haskell-compile
haskell-mode haskell-cabal haskell-utils haskell-font-lock haskell-indentation
haskell-string haskell-sort-imports haskell-lexeme rx haskell-align-imports
haskell-complete-module haskell-ghc-support etags fileloop generator dabbrev
haskell-customize hydra lv use-package-ensure paren magit-patch-changelog
magit-patch magit-submodule magit-obsolete magit-popup magit-blame magit-stash
magit-reflog magit-bisect magit-push magit-pull magit-fetch magit-clone
magit-remote magit-commit magit-sequence magit-notes magit-worktree magit-tag
magit-merge magit-branch magit-reset magit-files magit-refs magit-status magit
magit-repos magit-apply magit-wip magit-log which-func imenu magit-diff
smerge-mode diff diff-mode magit-core magit-autorevert autorevert filenotify
magit-margin magit-transient magit-process magit-mode git-commit transient
magit-git magit-section magit-utils crm log-edit message rmc dired
dired-loaddefs rfc822 mml mml-sec mm-decode mm-bodies mm-encode mail-parse
rfc2231 mailabbrev gmm-utils mailheader pcvs-util add-log with-editor
async-bytecomp async pcase server dash flx-ido flx solarized-theme
solarized-definitions projectile ibuf-ext ibuffer ibuffer-loaddefs grep gnus
nnheader gnus-util rmail rmail-loaddefs rfc2047 rfc2045 ietf-drums
text-property-search time-date mail-utils mm-util mail-prsvr
google-translate-default-ui google-translate-core-ui ido google-translate-core
google-translate-tk google-translate-backend use-package-bind-key bind-key
auto-complete popup cus-edit cus-start cus-load wid-edit ess-r-mode
ess-r-flymake flymake-proc flymake warnings thingatpt ess-r-xref xref ess-trns
ess-r-package shell pcomplete ess-r-completion ess-roxy ess-r-syntax ess-rd
noutline outline easy-mmode hideshow ess-s-lang ess-help ess-mode ess-inf
project format-spec ess-tracebug ess ess-utils ess-custom compile comint
ansi-color ace-window avy emms-player-mplayer emms-player-simple emms
emms-compat twittering-mode epa derived epg epg-config tls gnutls puny url
url-proxy url-privacy url-expand url-methods url-history url-cookie url-domsuf
url-util mailcap advice xml cl cl-extra help-mode use-package-core hl-line
winner ring finder-inf howdoyou-autoloads json-reformat-autoloads
json-snatcher-autoloads edmacro kmacro sml-mode-autoloads
tornado-template-mode-autoloads info package easymenu browse-url url-handlers
url-parse auth-source cl-seq eieio eieio-core cl-macs eieio-loaddefs
password-cache json subr-x map url-vars seq byte-opt gv bytecomp byte-compile
cconv cl-loaddefs cl-lib tooltip eldoc electric uniquify ediff-hook vc-hooks
lisp-float-type 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
elisp-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow
isearch timer select scroll-bar mouse jit-lock font-lock syntax facemenu
font-core term/tty-colors frame minibuffer cl-generic 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 charscript charprop case-table epa-hook jka-cmpr-hook help
simple abbrev obarray cl-preloaded nadvice loaddefs button faces cus-face
macroexp files text-properties overlay sha1 md5 base64 format env code-pages
mule custom widget hashtable-print-readable backquote threads dbusbind inotify
dynamic-setting system-font-setting font-render-setting move-toolbar gtk
x-toolkit x multi-tty make-network-process emacs)

Memory information:
((conses 16 3031264 413991)
 (symbols 48 73036 0)
 (strings 32 328820 55332)
 (string-bytes 1 13170408)
 (vectors 16 302683)
 (vector-slots 8 8429273 461014)
 (floats 8 4346 4887)
 (intervals 56 109714 4679)
 (buffers 1000 275))