* [PATCH] git-rebase--interactive.sh: add config option for custom
@ 2015-06-08 0:53 Michael Rappazzo
2015-06-08 15:28 ` Junio C Hamano
0 siblings, 1 reply; 4+ messages in thread
From: Michael Rappazzo @ 2015-06-08 0:53 UTC (permalink / raw)
To: git
[-- Attachment #1: Type: text/plain, Size: 1174 bytes --]
A config option 'rebase.instructionFormat' can override the
default 'oneline' format of the rebase instruction list.
Since the list is parsed using the left, right or boundary mark plus
the sha1, they are prepended to the instruction format.
Signed-off-by: Michael Rappazzo <rappazzo@gmail.com>
---
git-rebase--interactive.sh | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
index dc3133f..cc79b81 100644
--- a/git-rebase--interactive.sh
+++ b/git-rebase--interactive.sh
@@ -977,7 +977,14 @@ else
revisions=$onto...$orig_head
shortrevisions=$shorthead
fi
-git rev-list $merges_option --pretty=oneline --reverse --left-right --topo-order \
+format=$(git config --get rebase.instructionFormat)
+if test -z "$format"
+then
+ format="%s"
+fi
+# the 'rev-list .. | sed' requires %m to parse; the instruction requires %h to parse
+format="%m%h ${format}"
+git rev-list $merges_option --pretty="${format}" --reverse --left-right --topo-order \
$revisions ${restrict_revision+^$restrict_revision} | \
sed -n "s/^>//p" |
while read -r sha1 rest
---
https://github.com/git/git/pull/146
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH] git-rebase--interactive.sh: add config option for custom
2015-06-08 0:53 [PATCH] git-rebase--interactive.sh: add config option for custom Michael Rappazzo
@ 2015-06-08 15:28 ` Junio C Hamano
2015-06-08 16:01 ` Mike Rappazzo
0 siblings, 1 reply; 4+ messages in thread
From: Junio C Hamano @ 2015-06-08 15:28 UTC (permalink / raw)
To: Michael Rappazzo; +Cc: git
Michael Rappazzo <rappazzo@gmail.com> writes:
> A config option 'rebase.instructionFormat' can override the
> default 'oneline' format of the rebase instruction list.
>
> Since the list is parsed using the left, right or boundary mark plus
> the sha1, they are prepended to the instruction format.
>
> Signed-off-by: Michael Rappazzo <rappazzo@gmail.com>
> ---
Thanks. Roberto's gizmo seems to be working OK ;-)
> git-rebase--interactive.sh | 9 ++++++++-
> 1 file changed, 8 insertions(+), 1 deletion(-)
>
> diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
> index dc3133f..cc79b81 100644
> --- a/git-rebase--interactive.sh
> +++ b/git-rebase--interactive.sh
> @@ -977,7 +977,14 @@ else
> revisions=$onto...$orig_head
> shortrevisions=$shorthead
> fi
> -git rev-list $merges_option --pretty=oneline --reverse --left-right --topo-order \
> +format=$(git config --get rebase.instructionFormat)
> +if test -z "$format"
> +then
> + format="%s"
Style. One indent level in our shell scripts is one HT, not a few spaces.
> +fi
> +# the 'rev-list .. | sed' requires %m to parse; the instruction requires %h to parse
> +format="%m%h ${format}"
I think you want %H not %h here. If you check how the default
"--pretty=online" is shown, you would see something like this:
>1e9676ec0a771de06abca3009eb4bdc5a4ae3312 lockfile: replace ...
>2024d3176536fd437b4c0a744161e96bc150a24e help.c: wrap wait-...
> +git rev-list $merges_option --pretty="${format}" --reverse --left-right --topo-order \
> $revisions ${restrict_revision+^$restrict_revision} | \
> sed -n "s/^>//p" |
This is optional, but I still wonder why the command line cannot be
more like this, though:
format=$(git config --get rebase.insnFormat)
git log --format="%H ${format-%s}" --reverse --right-only --topo-order \
$revisions ${restrict_revision+^$restrict_revision} |
while read -r sha1 junk
do
...
That way we can optimize one "sed" process away.
If this is a good idea, it needs to be a separate follow-up patch
that changes "%m filtered by sed" to "use --right-only". I do not
think such a change breaks anything, but I do not deal with complex
histories myself, so...
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] git-rebase--interactive.sh: add config option for custom
2015-06-08 15:28 ` Junio C Hamano
@ 2015-06-08 16:01 ` Mike Rappazzo
2015-06-08 17:29 ` Junio C Hamano
0 siblings, 1 reply; 4+ messages in thread
From: Mike Rappazzo @ 2015-06-08 16:01 UTC (permalink / raw)
To: Junio C Hamano; +Cc: Git List
On Mon, Jun 8, 2015 at 11:28 AM, Junio C Hamano <gitster@pobox.com> wrote:
> Michael Rappazzo <rappazzo@gmail.com> writes:
>
>> A config option 'rebase.instructionFormat' can override the
>> default 'oneline' format of the rebase instruction list.
>>
>> Since the list is parsed using the left, right or boundary mark plus
>> the sha1, they are prepended to the instruction format.
>>
>> Signed-off-by: Michael Rappazzo <rappazzo@gmail.com>
>> ---
>
> Thanks. Roberto's gizmo seems to be working OK ;-)
Will see if the pull request -> email contraption will allow me to put
[patch v2] in there. I also need to see if it can make a [patch 0/1]
>
>> git-rebase--interactive.sh | 9 ++++++++-
>> 1 file changed, 8 insertions(+), 1 deletion(-)
>>
>> diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
>> index dc3133f..cc79b81 100644
>> --- a/git-rebase--interactive.sh
>> +++ b/git-rebase--interactive.sh
>> @@ -977,7 +977,14 @@ else
>> revisions=$onto...$orig_head
>> shortrevisions=$shorthead
>> fi
>> -git rev-list $merges_option --pretty=oneline --reverse --left-right --topo-order \
>> +format=$(git config --get rebase.instructionFormat)
>> +if test -z "$format"
>> +then
>> + format="%s"
>
> Style. One indent level in our shell scripts is one HT, not a few spaces.
>
>> +fi
>> +# the 'rev-list .. | sed' requires %m to parse; the instruction requires %h to parse
>> +format="%m%h ${format}"
>
> I think you want %H not %h here. If you check how the default
> "--pretty=online" is shown, you would see something like this:
>
> >1e9676ec0a771de06abca3009eb4bdc5a4ae3312 lockfile: replace ...
> >2024d3176536fd437b4c0a744161e96bc150a24e help.c: wrap wait-...
>
>> +git rev-list $merges_option --pretty="${format}" --reverse --left-right --topo-order \
>> $revisions ${restrict_revision+^$restrict_revision} | \
>> sed -n "s/^>//p" |
I will make the changes from above, and resubmit a patch.
>
> This is optional, but I still wonder why the command line cannot be
> more like this, though:
>
> format=$(git config --get rebase.insnFormat)
> git log --format="%H ${format-%s}" --reverse --right-only --topo-order \
> $revisions ${restrict_revision+^$restrict_revision} |
> while read -r sha1 junk
> do
> ...
>
> That way we can optimize one "sed" process away.
>
> If this is a good idea, it needs to be a separate follow-up patch
> that changes "%m filtered by sed" to "use --right-only". I do not
> think such a change breaks anything, but I do not deal with complex
> histories myself, so...
>
As far as I can tell, the rev-list will return multiple lines when not
using 'oneline'. The 'sed -n' will join the lines back together. I
will take a look at moving it to 'git log' for a future change. I
have a huge codebase with tons of branches to experiment with.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] git-rebase--interactive.sh: add config option for custom
2015-06-08 16:01 ` Mike Rappazzo
@ 2015-06-08 17:29 ` Junio C Hamano
0 siblings, 0 replies; 4+ messages in thread
From: Junio C Hamano @ 2015-06-08 17:29 UTC (permalink / raw)
To: Mike Rappazzo; +Cc: Git List
Mike Rappazzo <rappazzo@gmail.com> writes:
> On Mon, Jun 8, 2015 at 11:28 AM, Junio C Hamano <gitster@pobox.com> wrote:
>
>> This is optional, but I still wonder why the command line cannot be
>> more like this, though:
>>
>> format=$(git config --get rebase.insnFormat)
>> git log --format="%H ${format-%s}" --reverse --right-only --topo-order \
>> $revisions ${restrict_revision+^$restrict_revision} |
>> while read -r sha1 junk
>> do
>> ...
>>
>> That way we can optimize one "sed" process away.
>>
>> If this is a good idea, it needs to be a separate follow-up patch
>> that changes "%m filtered by sed" to "use --right-only". I do not
>> think such a change breaks anything, but I do not deal with complex
>> histories myself, so...
>
> As far as I can tell, the rev-list will return multiple lines when not
> using 'oneline'. The 'sed -n' will join the lines back together.
There is no joining going on.
To "rev-list", a custom --pretty/--format is a signal to trigger its
"verbose" mode, and it shows a "commit <object-name>" line and then
the line in the format specified, e.g.
$ git rev-list --pretty='%m%H %<(35,trunc)%s' --right-only --reverse ...2024d3
commit 1e9676ec0a771de06abca3009eb4bdc5a4ae3312
>1e9676ec0a771de06abca3009eb4bdc5a4ae3312 lockfile: replace random() by ran..
commit 2024d3176536fd437b4c0a744161e96bc150a24e
>2024d3176536fd437b4c0a744161e96bc150a24e help.c: wrap wait-only poll() inv..
...
Because of that, "format=%m | sed -n s/>//p" would be one way to
make sure that all lines we care about are prefixed by '>' so that
we can pick them while discarding anything else. So you do need
filtering unless switch to "log", even if you used --right-only.
That is why I didn't use "rev-list" in the message you are
responding to.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2015-06-08 17:30 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-06-08 0:53 [PATCH] git-rebase--interactive.sh: add config option for custom Michael Rappazzo
2015-06-08 15:28 ` Junio C Hamano
2015-06-08 16:01 ` Mike Rappazzo
2015-06-08 17:29 ` Junio C Hamano
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox