Subject: Re: bug#15365: 24.3.50; Segfault when calling vc-git-log-edit-toggle-amend

From: Eli Zaretskii <[email-masked]>
Date: Sun, 15 Sep 2013 09:20:23 +0300

> Date: Sun, 15 Sep 2013 06:01:29 +0300
> From: Dmitry Gutov <[email-masked]>
> CC: [email-masked], [email-masked]
> 
> On 14.09.2013 16:45, Eli Zaretskii wrote:
> >> I've been using `vc-git-log-edit-toggle-amend' without crashes for
> >> nearly a year now, since it's been added.
> >
> > If you can identify the last revision where this abort didn't happen,
> > I could try figuring out what changed.
> 
> It's 114149.

Thanks, I will have a look.

Do the situations that triggered the bug involve font changes?  (The
revision you pointed to made tracking of font changes be per frame,
rather than global.)

In any case, that revision was about making redisplay optimizations
more aggressive, so it is small wonder that try_window_id, which is
part of those optimizations, is now called in situations where
previously it wasn't.  IOW, it is quite possible that there's nothing
wrong with try_window_id being invoked in these situations.

> (TIL that 'git bisect', unlike its Bazaar counterpart, supports 
> filtering commits by files they touched. xdisp.c, in this example).

The display engine is not limited to xdisp.c; dispnew.c and
dispextern.h are important parts of it, and sometimes window.c and the
display-specific back-ends (xterm.c and xfns.c for X and similarly for
w32 and NS) are also involved.

>  >> Why scratch?
>  >
>  > Because it could be messed up by the testing.
> 
> None of GitHub repositories are publicly writable, so there's zero 
> danger of that.

Thanks, I didn't know that.  (Of course, I never had to use GitHub,
either.)

>  > I don't know how to make sure my commits are never pushed.
> 
> Aside from you not having commit rights, Git doesn't have anything 
> analogous to Bzr's bound branches built-in, so 'git push' always has to 
> be called explicitly (or one can write a custom hook).

I know about "git push" vs "git commit".  What I didn't know is what
exactly do the Emacs commands you used do, in git terms, and how does
that relate to commit and push and the myriad of their options.  The
only thing that was clear to me was that a commit is required, because
that's what "C-x v v" does in a modified buffer.  I know nothing about
"C-c C-e" in that context.

And even if I knew that "push" is not involved, committing to a
repository that tracks upstream development (which is all I do with
git) would need some way to subsequently un-commit that, something I
don't know how to do with git.  I didn't want to screw up my work on
GNU Make and Gawk, I'm sure you will understand.