Thread (1 message) 1 message, 1 author, 2017-03-02

Re: Rebase sequencer changes prevent exec commands from modifying the todo file?

From: Johannes Schindelin <hidden>
Date: 2017-03-02 16:02:20

Hi Stephen,

On Wed, 1 Mar 2017, Stephen Hicks wrote:
I have a preferred rebase workflow wherein I generate my own TODO file
with 'exec' lines that further modify the TODO file.  I recently noticed
that these changes weren't sticking: they seemed to persist until the
end of the exec'd command, and then as soon as the next command ran
(i.e.  GIT_EDITOR=cat git rebase --edit-todo) they were gone.

I don't understand the changes that have been going through, but I suspect
this is a result of the sequencer refactoring.  Is there a way to prevent
git rebase from overwriting these changes?

To reproduce:
$ git rebase -i HEAD -x "echo x false >> \"$(git rev-parse
--git-dir)/rebase-merge/git-rebase-todo\""

This should cause the rebase to fail (and indeed, it does on 2.11.0.390)
since it inserts an "x false".  But somewhere between there and
2.12.0.rc1.440, this behavior is changed.
Do you also modify the author-script file to execute arbitrary shell
commands? ;-)

Seriously again, it should not be too much of a deal to handle your use
case by re-reading the git-rebase-todo file if it has changed after an
`exec` has modified it. We already force a re-read of the index.

I won't be able to take care of that immediately, though, as I have a
pressing other patch series I need to get done.

If you want to take a crack at it in the meantime, I think this is where I
would start:

https://github.com/git-for-windows/git/blob/ce4c6ca554/sequencer.c#L2020-L2027

I would probably try to make the code smart by looking at the
timestamp/size/inode fields of the stat data of git-rebase-todo, and only
force a re-read in case those fields are different, the `res` variable is
0, and then the code would need to `continue;` in order to skip the
increment of `todo_list->current`.

And before that, I'd turn your example into a test case in
t/t3405-rebase-malformed.sh...

Ciao,
Johannes
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help