Re: [PATCH v2] completion: Add '--edit-todo' to rebase
Quoting John Keeping <john@keeping.me.uk>:
Show 44 quoted lines
> On Thu, Jul 30, 2015 at 01:24:03PM +0200, SZEDER Gábor wrote:
>>
>> Quoting Thomas Braun <thomas.braun@virtuell-zuhause.de>:
>>
>>> Signed-off-by: Thomas Braun <thomas.braun@virtuell-zuhause.de>
>>> ---
>>>> John Keeping <john@keeping.me.uk> hat am 13. Juli 2015 um 15:11
>> geschrieben:
>>>> git-rebase.sh contains:
>>>>
>>>> if test "$action" = "edit-todo" && test "$type" != "interactive"
>>>> then
>>>> die "$(gettext "The --edit-todo action can only be used during
>> interactive
>>>> rebase.")"
>>>> fi
>>>>
>>>> I wonder if it's worth doing a similar check here, which presumably
>>>> means testing if "$dir"/interactive exists.
>>>
>>> Good point. Thanks for the hint.
>>
>> Perhaps the subject line could say "completion: offer '--edit-todo'
>> during interactive rebase" to be a bit more specific.
>>
>>> contrib/completion/git-completion.bash | 6 +++++-
>>> 1 file changed, 5 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/contrib/completion/git-completion.bash
>>> b/contrib/completion/git-completion.bash
>>> index c97c648..b03050e 100644
>>> --- a/contrib/completion/git-completion.bash
>>> +++ b/contrib/completion/git-completion.bash
>>> @@ -1668,7 +1668,11 @@ _git_rebase ()
>>> {
>>> local dir="$(__gitdir)"
>>> if [ -d "$dir"/rebase-apply ] || [ -d "$dir"/rebase-merge ]; then
>>> - __gitcomp "--continue --skip --abort"
>>> + if [ -d "$dir"/interactive ]; then
>>
>> This doesn't work for me, I think it looks for the right file at the
>> wrong place. During an interactive rebase I have no
>> '.git/interactive' file but a '.git/rebase-merge/interactive', so I
>> never get '--edit-todo'.Just noticed another issue here: it looks for a directory, though it should look for a file.
Show 13 quoted lines
>> After some playing around and a cursory look at the source it seems to
>> me that I have '.git/rebase-apply' during a "regular" rebase and
>> '.git/rebase-merge' during an interactive rebase, and git-rebase.sh
>> checks the presence of the 'interactive' file only in
>> '.git/rebase-merge'. It's not clear to me yet whether it's possible
>> to have a '.git/rebase-merge' without the file 'interactive' in it.
>> If it is possible, then I'd like to know with which commands and under
>> what circumstances. If it isn't, then we wouldn't have to look for
>> the file at all, because checking the presence of the directory would
>> be enough.
>
> "git rebase --merge" will use ".git/rebase-merge" without creating the
> "interactive" flag.
Oh, right, thanks. I should have remembered, I wrote the test of the prompt script for that case... (On a related note: is it possible to have a '.git/rebase-apply' directory, but neither 'rebasing' or 'applying' files within? The prompt script has a long if-elif chain with such a branch, and I remember wondering how I could trigger it for testing.)
Anyway, so this could be something like (modulo likely whitespace damage):
Show changes to contrib/completion/git-completion.bash +4 −1
diff --git a/contrib/completion/git-completion.bash
b/contrib/completion/git-completion.bash
index 07c34ef913..fac01d6985 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -1667,7 +1667,10 @@ _git_push ()
_git_rebase ()
{
local dir="$(__gitdir)"
- if [ -d "$dir"/rebase-apply ] || [ -d "$dir"/rebase-merge ]; then
+ if [ -f "$dir"/rebase-merge/interactive ]; then
+ __gitcomp "--continue --skip --abort --edit-todo"
+ return
+ elif [ -d "$dir"/rebase-apply ] || [ -d "$dir"/rebase-merge ]; then
__gitcomp "--continue --skip --abort"
return
fi
Best,
Gábor