Subject: Re: git-blame.el won't run

From: David Kågedal <[email-masked]>
Date: Wed, 21 Feb 2007 14:55:31 +0100

Xavier Maillard <[email-masked]> writes:

> Hi,
>
> This is the backtrace after C-g (after a few minutes):
>
>
> Debugger entered--Lisp error: (quit)
>   process-send-region(#<process git-blame> 1 28910)
>   (let ((display-buf ...) (blame-buf ...) (args ...)) (if startline (setq args ...)) (setq args (append args ...)) (setq git-blame-proc (apply ... "git-blame" blame-buf "git" "blame" args)) (with-current-buffer blame-buf (erase-buffer) (make-local-variable ...) (make-local-variable ...) (setq git-blame-file display-buf) (setq git-blame-current nil)) (set-process-filter git-blame-proc (quote git-blame-filter)) (set-process-sentinel git-blame-proc (quote git-blame-sentinel)) (process-send-region git-blame-proc (point-min) (point-max)) (process-send-eof git-blame-proc))
>   (if git-blame-proc (message "Already running git blame") (let (... ... ...) (if startline ...) (setq args ...) (setq git-blame-proc ...) (with-current-buffer blame-buf ... ... ... ... ...) (set-process-filter git-blame-proc ...) (set-process-sentinel git-blame-proc ...) (process-send-region git-blame-proc ... ...) (process-send-eof git-blame-proc)))
>   git-blame-run()
>   (progn (let (...) (if ... ... ...)) (setq git-blame-cache (make-hash-table :test ...)) (git-blame-run))
>   (if git-blame-mode (progn (let ... ...) (setq git-blame-cache ...) (git-blame-run)) (cancel-timer git-blame-idle-timer))
>   git-blame-mode(nil)
>   call-interactively(git-blame-mode)
>   execute-extended-command(nil)
>   call-interactively(execute-extended-command)

If you switch to the buffer called " git blame for <filename>" (notice
the leading space, you will probably see a usage/error message from
git.

Maybe your git blame doesn't like the --incremental flag or the
--contents flag.  But the problem is that I'm not sure how to make
emacs not hang.

process-send-region blocks when sending the file contents, since git
isn't reading it.  But git finishes, so emacs should be able to detect
that there is no process that can read anything anymore.

-- 
David Kågedal