GNU bug report logs - #22481
25.1.50; vc-hg: emacs "deadlocks" after using hg with huge amounts of ignored files in the repo

Previous Next

Package: emacs;

Reported by: Jan Synacek <jsynacek <at> redhat.com>

Date: Thu, 28 Jan 2016 09:12:01 UTC

Severity: normal

Merged with 19304

Found in versions 25.0.50, 25.1.50

Fixed in version 25.1

Done: Dmitry Gutov <dgutov <at> yandex.ru>

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 22481 in the body.
You can then email your comments to 22481 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


Report forwarded to bug-gnu-emacs <at> gnu.org:
bug#22481; Package emacs. (Thu, 28 Jan 2016 09:12:01 GMT) Full text and rfc822 format available.

Acknowledgement sent to Jan Synacek <jsynacek <at> redhat.com>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs <at> gnu.org. (Thu, 28 Jan 2016 09:12:01 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Jan Synacek <jsynacek <at> redhat.com>
To: bug-gnu-emacs <at> gnu.org
Subject: 25.1.50;
 vc-hg: emacs "deadlocks" after using hg with huge amounts of ignored
 files in the repo
Date: Thu, 28 Jan 2016 10:10:36 +0100
Steps to reproduce:

1) hg clone https://bitbucket.org/vim-mirror/vim (or any other repo will
do, but I couldn't resist reproducing the issue on this one...)
2) Generate a million files, that will be considered "ignored" in the repo
   $ cd vim
   $ for i in $(seq 1 1000000); do echo ignored > ignored-$i.rej; done
3) Fire up emacs, C-x C-f <the vim repo directory>
   At this point, it will take a while, but that may be a separate issue.
4) Edit any tracked file and save it.
5) C-x v d ENTER
6) Go to a file that's been modified and hit 'v', enter a log message,
   then C-c C-c to commit the change.
7) Hit 'g' to refresh the buffer.
8) Observe the freeze.

Emacs freezes because it's running 'hg status -mardui -C <files>'. The
'-i' is the problem here. Since it takes hg itself a very long time, I'm
not sure if it can be directly fixed in Emacs. But at least a
configuration option that would allow one to disable the "-i" option
would be nice.

Original bugreport: https://bugzilla.redhat.com/show_bug.cgi?id=1232422


In GNU Emacs 25.1.50.2 (x86_64-redhat-linux-gnu, GTK+ Version 3.18.6)
 of 2016-01-28 built on copr-builder-504260318.novalocal
Windowing system distributor 'Fedora Project', version 11.0.11800000
System Description:	Generic release 23 (Generic)

Configured using:
 'configure --build=x86_64-redhat-linux-gnu
 --host=x86_64-redhat-linux-gnu --program-prefix=
 --disable-dependency-tracking --prefix=/usr --exec-prefix=/usr
 --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc
 --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib64
 --libexecdir=/usr/libexec --localstatedir=/var
 --sharedstatedir=/var/lib --mandir=/usr/share/man
 --infodir=/usr/share/info --with-dbus --with-gif --with-jpeg --with-png
 --with-rsvg --with-tiff --with-xft --with-xpm --with-x-toolkit=gtk3
 --with-gpm=no build_alias=x86_64-redhat-linux-gnu
 host_alias=x86_64-redhat-linux-gnu 'CFLAGS=-DMAIL_USE_LOCKF -O2 -g
 -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2
 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4
 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1
 -m64 -mtune=generic' LDFLAGS=-Wl,-z,relro
 PKG_CONFIG_PATH=:/usr/lib64/pkgconfig:/usr/share/pkgconfig'

Configured features:
XPM JPEG TIFF GIF PNG RSVG IMAGEMAGICK SOUND DBUS GCONF GSETTINGS NOTIFY
ACL LIBSELINUX GNUTLS LIBXML2 FREETYPE M17N_FLT LIBOTF XFT ZLIB
TOOLKIT_SCROLL_BARS GTK3 X11

Important settings:
  value of $LANG: en_US.utf8
  value of $XMODIFIERS: @im=none
  locale-coding-system: utf-8-unix

Major mode: ERC

Minor modes in effect:
  diff-auto-refine-mode: t
  erc-notifications-mode: t
  shell-dirtrack-mode: t
  erc-list-mode: t
  erc-menu-mode: t
  erc-autojoin-mode: t
  erc-ring-mode: t
  erc-networks-mode: t
  erc-pcomplete-mode: t
  erc-track-mode: t
  erc-track-minor-mode: t
  erc-match-mode: t
  erc-button-mode: t
  erc-fill-mode: t
  erc-stamp-mode: t
  erc-netsplit-mode: t
  erc-irccontrols-mode: t
  erc-noncommands-mode: t
  erc-move-to-prompt-mode: t
  erc-readonly-mode: t
  recentf-mode: t
  override-global-mode: t
  show-paren-mode: t
  tooltip-mode: t
  global-eldoc-mode: t
  electric-indent-mode: t
  mouse-wheel-mode: t
  file-name-shadow-mode: t
  global-font-lock-mode: t
  font-lock-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

Recent messages:
Loading /home/jsynacek/.emacs.d/recentf...done
Cleaning up the recentf list...done (0 removed)
For information about GNU Emacs and the GNU system, type C-h C-a.
ad-handle-definition: ‘tramp-read-passwd’ got redefined
(redacted for private info)
Mark set
Could not load org-notmuch

Load-path shadows:
/home/jsynacek/.emacs.d/elpa/helm-20160119.417/helm-multi-match hides /home/jsynacek/.emacs.d/elpa/helm-core-20160119.936/helm-multi-match
/home/jsynacek/.emacs.d/elpa/magit-20160119.1409/magit-popup hides /home/jsynacek/.emacs.d/elpa/magit-popup-20160119.1409/magit-popup

Features:
(shadow sort mail-extr emacsbug sendmail notmuch hl-line notmuch-message
notmuch-maildir-fcc notmuch-hello notmuch-tree notmuch-parser
notmuch-show notmuch-print notmuch-crypto notmuch-mua notmuch-address
notmuch-wash diff-mode coolj notmuch-query goto-addr icalendar diary-lib
diary-loaddefs cal-menu calendar cal-loaddefs notmuch-tag crm
notmuch-lib notmuch-version cl message idna rfc822 mml mailabbrev
mail-utils gmm-utils mailheader mm-view mml-smime mml-sec epg smime dig
mm-decode mm-bodies mm-encode mail-parse rfc2231 rfc2047 rfc2045
ietf-drums erc-desktop-notifications notifications dbus winner
helm-command helm-elisp helm-eval edebug helm-mode helm-files rx
image-dired tramp tramp-compat tramp-loaddefs trampver ucs-normalize
shell dired-aux ffap helm-buffers helm-elscreen helm-tags helm-bookmark
helm-adaptive helm-info bookmark helm-locate helm-external helm-net
browse-url xml url url-proxy url-privacy url-expand url-methods
url-history url-cookie url-domsuf url-util mailcap helm-types private
erc-list erc-menu erc-join erc-ring erc-networks erc-pcomplete pcomplete
erc-track erc-match erc-button erc-fill erc-stamp erc-netsplit
erc-goodies erc erc-backend erc-compat format-spec thingatpt pp
helm-swoop helm-grep helm-regexp helm-plugin helm-utils compile comint
ansi-color ring helm-help helm helm-source eieio-compat helm-multi-match
helm-lib geiser recentf tree-widget wid-edit edmacro kmacro dired-x
dired dired-loaddefs cc-mode cc-fonts cc-guess cc-menus cc-cmds
cc-styles cc-align cc-engine cc-vars cc-defs use-package diminish
bind-key easy-mmode advice finder-inf goto-chg-autoloads
undo-tree-autoloads info package epg-config url-handlers url-parse
auth-source cl-seq eieio byte-opt bytecomp byte-compile cl-extra cconv
eieio-core cl-macs gv eieio-loaddefs gnus-util mm-util help-fns
help-mode easymenu cl-loaddefs pcase cl-lib mail-prsvr password-cache
url-vars paren time-date mule-util tooltip eldoc electric uniquify
ediff-hook vc-hooks lisp-float-type mwheel x-win term/common-win x-dnd
tool-bar dnd fontset image regexp-opt fringe tabulated-list newcomment
elisp-mode lisp-mode prog-mode register page menu-bar rfn-eshadow timer
select scroll-bar mouse jit-lock font-lock syntax facemenu font-core
frame 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 charscript
case-table epa-hook jka-cmpr-hook help simple abbrev obarray minibuffer
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 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 404816 27547)
 (symbols 48 39279 0)
 (miscs 40 147 579)
 (strings 32 78662 12230)
 (string-bytes 1 2409843)
 (vectors 16 58360)
 (vector-slots 8 965773 25031)
 (floats 8 378 279)
 (intervals 56 1052 111)
 (buffers 976 19)
 (heap 1024 47080 3625))

-- 
Jan Synacek
Software Engineer, Red Hat




Severity set to 'minor' from 'normal' Request was from Glenn Morris <rgm <at> gnu.org> to control <at> debbugs.gnu.org. (Thu, 28 Jan 2016 22:36:02 GMT) Full text and rfc822 format available.

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#22481; Package emacs. (Fri, 29 Jan 2016 01:55:02 GMT) Full text and rfc822 format available.

Message #10 received at 22481 <at> debbugs.gnu.org (full text, mbox):

From: Dmitry Gutov <dgutov <at> yandex.ru>
To: Jan Synacek <jsynacek <at> redhat.com>, 22481 <at> debbugs.gnu.org
Subject: Re: bug#22481: 25.1.50; vc-hg: emacs "deadlocks" after using hg with
 huge amounts of ignored files in the repo
Date: Fri, 29 Jan 2016 04:53:58 +0300
On 01/28/2016 12:10 PM, Jan Synacek wrote:

> Emacs freezes because it's running 'hg status -mardui -C <files>'. The
> '-i' is the problem here. Since it takes hg itself a very long time, I'm
> not sure if it can be directly fixed in Emacs. But at least a
> configuration option that would allow one to disable the "-i" option
> would be nice.

Haven't we fixed this already? See 
http://debbugs.gnu.org/cgi/bugreport.cgi?bug=19304, I've fixed what I 
could reproduce.

The current definition of vc-hg-status-files looks like this:

(defun vc-hg-dir-status-files (dir files update-function)
  (apply 'vc-hg-command (current-buffer) 'async dir "status"
         (concat "-mardu" (if files "i"))
         "-C" files)
  (vc-run-delayed
    (vc-hg-after-dir-status update-function)))

IOW, we only pass '-i' when we ask the backend for the status of 
specific files. Which shouldn't be slow.

If it is, I'm pretty sure it's Mercurial's problem.

(You can add a (message "files: %s" files) call at the beginning of 
vc-hg-dir-status-files, to see what file list it's called with.





Forcibly Merged 19304 22481. Request was from Glenn Morris <rgm <at> gnu.org> to control <at> debbugs.gnu.org. (Fri, 29 Jan 2016 02:10:01 GMT) Full text and rfc822 format available.

Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#22481; Package emacs. (Fri, 29 Jan 2016 08:43:02 GMT) Full text and rfc822 format available.

Message #15 received at 22481 <at> debbugs.gnu.org (full text, mbox):

From: Jan Synacek <jsynacek <at> redhat.com>
To: Dmitry Gutov <dgutov <at> yandex.ru>, 22481 <at> debbugs.gnu.org
Subject: Re: bug#22481: 25.1.50;
 vc-hg: emacs "deadlocks" after using hg with huge amounts of ignored
 files in the repo
Date: Fri, 29 Jan 2016 09:42:32 +0100
Dmitry Gutov <dgutov <at> yandex.ru> writes:

> On 01/28/2016 12:10 PM, Jan Synacek wrote:
>
>> Emacs freezes because it's running 'hg status -mardui -C <files>'. The
>> '-i' is the problem here. Since it takes hg itself a very long time, I'm
>> not sure if it can be directly fixed in Emacs. But at least a
>> configuration option that would allow one to disable the "-i" option
>> would be nice.
>
> Haven't we fixed this already? See 
> http://debbugs.gnu.org/cgi/bugreport.cgi?bug=19304, I've fixed what I 
> could reproduce.

Please, try my reproducer. The refresh *after* committing a message
tries to display the ignored files.

-- 
Jan Synacek
Software Engineer, Red Hat




Information forwarded to bug-gnu-emacs <at> gnu.org:
bug#22481; Package emacs. (Sat, 30 Jan 2016 02:51:02 GMT) Full text and rfc822 format available.

Message #18 received at 22481 <at> debbugs.gnu.org (full text, mbox):

From: Dmitry Gutov <dgutov <at> yandex.ru>
To: Jan Synacek <jsynacek <at> redhat.com>, 22481 <at> debbugs.gnu.org
Subject: Re: bug#22481: 25.1.50; vc-hg: emacs "deadlocks" after using hg with
 huge amounts of ignored files in the repo
Date: Sat, 30 Jan 2016 05:50:23 +0300
On 01/29/2016 11:42 AM, Jan Synacek wrote:

> Please, try my reproducer. The refresh *after* committing a message
> tries to display the ignored files.

So, this is the actual problem. Thanks. It would've been great if I 
didn't have to

for i in $(seq 1 1000000); do echo ignored > ignored-$i.rej; done

which took several minutes on my machine, and took considerable time to 
clean up, too.

Another way to reproduce this:

- Make changes to a file.
- Undo those changes, so it shows up as 'up-to-date' in vc-dir.
- Press 'g' there. See the ignored files show up.




Reply sent to Dmitry Gutov <dgutov <at> yandex.ru>:
You have taken responsibility. (Sat, 30 Jan 2016 04:01:02 GMT) Full text and rfc822 format available.

Notification sent to Jan Synacek <jsynacek <at> redhat.com>:
bug acknowledged by developer. (Sat, 30 Jan 2016 04:01:02 GMT) Full text and rfc822 format available.

Message #23 received at 22481-done <at> debbugs.gnu.org (full text, mbox):

From: Dmitry Gutov <dgutov <at> yandex.ru>
To: Jan Synacek <jsynacek <at> redhat.com>, 22481-done <at> debbugs.gnu.org
Subject: Re: bug#22481: 25.1.50; vc-hg: emacs "deadlocks" after using hg with
 huge amounts of ignored files in the repo
Date: Sat, 30 Jan 2016 07:00:28 +0300
Version: 25.1

> - Press 'g' there. See the ignored files show up.

Should be fixed in 06083cf now. Thanks again, closing.




Reply sent to Dmitry Gutov <dgutov <at> yandex.ru>:
You have taken responsibility. (Sat, 30 Jan 2016 04:01:02 GMT) Full text and rfc822 format available.

Notification sent to sds <at> gnu.org:
bug acknowledged by developer. (Sat, 30 Jan 2016 04:01:03 GMT) Full text and rfc822 format available.

bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Sat, 27 Feb 2016 12:24:03 GMT) Full text and rfc822 format available.

This bug report was last modified 9 years and 118 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.