All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] git-rebase--interactive.sh: add config option for custom instruction format
@ 2015-06-08 21:00 Michael Rappazzo
  2015-06-08 21:00 ` Michael Rappazzo
  2015-06-08 22:17 ` Junio C Hamano
  0 siblings, 2 replies; 9+ messages in thread
From: Michael Rappazzo @ 2015-06-08 21:00 UTC (permalink / raw)
  To: gitster; +Cc: git, Michael Rappazzo

Difference between v1 and v2 of this patch:

    - Fixed indentation from spaces to match the existing style
    - Changed the prepended sha1 from short (%h) to long (%H)
    - Used bash variable default when the config option is not present

Michael Rappazzo (1):
  git-rebase--interactive.sh: add config option for custom instruction
    format

 git-rebase--interactive.sh | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

-- 
2.4.2

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH v2] git-rebase--interactive.sh: add config option for custom instruction format
  2015-06-08 21:00 [PATCH v2] git-rebase--interactive.sh: add config option for custom instruction format Michael Rappazzo
@ 2015-06-08 21:00 ` Michael Rappazzo
  2015-06-08 21:29   ` Junio C Hamano
  2015-06-09  9:36   ` Johannes Schindelin
  2015-06-08 22:17 ` Junio C Hamano
  1 sibling, 2 replies; 9+ messages in thread
From: Michael Rappazzo @ 2015-06-08 21:00 UTC (permalink / raw)
  To: gitster; +Cc: git, Michael Rappazzo

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 | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
index dc3133f..b92375e 100644
--- a/git-rebase--interactive.sh
+++ b/git-rebase--interactive.sh
@@ -977,7 +977,9 @@ 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)
+# the 'rev-list .. | sed' requires %m to parse; the instruction requires %H to parse
+git rev-list $merges_option --format="%m%H ${format-%s}" --reverse --left-right --topo-order \
 	$revisions ${restrict_revision+^$restrict_revision} | \
 	sed -n "s/^>//p" |
 while read -r sha1 rest
-- 
2.4.2

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH v2] git-rebase--interactive.sh: add config option for custom instruction format
  2015-06-08 21:00 ` Michael Rappazzo
@ 2015-06-08 21:29   ` Junio C Hamano
  2015-06-09  9:36   ` Johannes Schindelin
  1 sibling, 0 replies; 9+ messages in thread
From: Junio C Hamano @ 2015-06-08 21:29 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>
> ---
>  git-rebase--interactive.sh | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
> index dc3133f..b92375e 100644
> --- a/git-rebase--interactive.sh
> +++ b/git-rebase--interactive.sh
> @@ -977,7 +977,9 @@ 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)
> +# the 'rev-list .. | sed' requires %m to parse; the instruction requires %H to parse
> +git rev-list $merges_option --format="%m%H ${format-%s}" --reverse --left-right --topo-order \
>  	$revisions ${restrict_revision+^$restrict_revision} | \
>  	sed -n "s/^>//p" |
>  while read -r sha1 rest

Looks OK, but

 - Needs a patch to Documentation/config.txt and possibly also
   Documentation/git-rebase.txt

 - Needs tests somewhere in t34?? series.

Also I think "git rev-list" line has got way too long.  As it is
already using backslash-continuation, do not hesitate to fold it
further, e.g. 

        git rev-list $merges_option --format="%m%H ${format-%s}" \
                --reverse --left-right --topo-order \
                $revisions ${restrict_revision+^$restrict_revision} | \
                sed -n "s/^>//p" |
	while ...

Thanks.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v2] git-rebase--interactive.sh: add config option for custom instruction format
  2015-06-08 21:00 [PATCH v2] git-rebase--interactive.sh: add config option for custom instruction format Michael Rappazzo
  2015-06-08 21:00 ` Michael Rappazzo
@ 2015-06-08 22:17 ` Junio C Hamano
  1 sibling, 0 replies; 9+ messages in thread
From: Junio C Hamano @ 2015-06-08 22:17 UTC (permalink / raw)
  To: Michael Rappazzo; +Cc: git

Michael Rappazzo <rappazzo@gmail.com> writes:

> Difference between v1 and v2 of this patch:
>
>     - Fixed indentation from spaces to match the existing style
>     - Changed the prepended sha1 from short (%h) to long (%H)
>     - Used bash variable default when the config option is not present
>
> Michael Rappazzo (1):
>   git-rebase--interactive.sh: add config option for custom instruction
>     format
>
>  git-rebase--interactive.sh | 4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)

Does this pass tests?  I see many failures including t3415.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v2] git-rebase--interactive.sh: add config option for custom instruction format
  2015-06-08 21:00 ` Michael Rappazzo
  2015-06-08 21:29   ` Junio C Hamano
@ 2015-06-09  9:36   ` Johannes Schindelin
  2015-06-09 10:26     ` Mike Rappazzo
  2015-06-09 19:23     ` Junio C Hamano
  1 sibling, 2 replies; 9+ messages in thread
From: Johannes Schindelin @ 2015-06-09  9:36 UTC (permalink / raw)
  To: Michael Rappazzo; +Cc: gitster, git

Hi,

On 2015-06-08 23:00, Michael Rappazzo wrote:

> diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
> index dc3133f..b92375e 100644
> --- a/git-rebase--interactive.sh
> +++ b/git-rebase--interactive.sh
> @@ -977,7 +977,9 @@ 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)
> +# the 'rev-list .. | sed' requires %m to parse; the instruction
> requires %H to parse
> +git rev-list $merges_option --format="%m%H ${format-%s}" --reverse
> --left-right --topo-order \

These two lines are too long (longer than 80 columns)...

Besides, are you sure you don't want to substitute an empty 'rebase.instructionFormat' by '%s'? I would have expected to read `${format:-%s}` (note the colon), but then, this was Junio's suggestion... Junio, what do you think, should we not rather substitute empty values by `%s` as if the config setting was unset?

>  	$revisions ${restrict_revision+^$restrict_revision} | \
>  	sed -n "s/^>//p" |
>  while read -r sha1 rest

Ciao,
Johannes

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v2] git-rebase--interactive.sh: add config option for custom instruction format
  2015-06-09  9:36   ` Johannes Schindelin
@ 2015-06-09 10:26     ` Mike Rappazzo
  2015-06-09 19:23     ` Junio C Hamano
  1 sibling, 0 replies; 9+ messages in thread
From: Mike Rappazzo @ 2015-06-09 10:26 UTC (permalink / raw)
  Cc: Git List

I see your point, and I'll explore that avenue.

Personally, I like the idea that one could also use the short hash if
the custom instruction started with "%h ", but I see the value in
leaving the variable blank.

After running the tests with a custom format enabled, I did find that
autosquash doesn't work, so I am working to correct that.

On Tue, Jun 9, 2015 at 5:36 AM, Johannes Schindelin
<johannes.schindelin@gmx.de> wrote:
> Hi,
>
> On 2015-06-08 23:00, Michael Rappazzo wrote:
>
>> diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
>> index dc3133f..b92375e 100644
>> --- a/git-rebase--interactive.sh
>> +++ b/git-rebase--interactive.sh
>> @@ -977,7 +977,9 @@ 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)
>> +# the 'rev-list .. | sed' requires %m to parse; the instruction
>> requires %H to parse
>> +git rev-list $merges_option --format="%m%H ${format-%s}" --reverse
>> --left-right --topo-order \
>
> These two lines are too long (longer than 80 columns)...
>
> Besides, are you sure you don't want to substitute an empty 'rebase.instructionFormat' by '%s'? I would have expected to read `${format:-%s}` (note the colon), but then, this was Junio's suggestion... Junio, what do you think, should we not rather substitute empty values by `%s` as if the config setting was unset?
>
>>       $revisions ${restrict_revision+^$restrict_revision} | \
>>       sed -n "s/^>//p" |
>>  while read -r sha1 rest
>
> Ciao,
> Johannes

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v2] git-rebase--interactive.sh: add config option for custom instruction format
  2015-06-09  9:36   ` Johannes Schindelin
  2015-06-09 10:26     ` Mike Rappazzo
@ 2015-06-09 19:23     ` Junio C Hamano
  2015-06-09 19:38       ` Mike Rappazzo
  1 sibling, 1 reply; 9+ messages in thread
From: Junio C Hamano @ 2015-06-09 19:23 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: Michael Rappazzo, git

Johannes Schindelin <johannes.schindelin@gmx.de> writes:

> Besides, are you sure you don't want to substitute an empty
> rebase.instructionFormat' by '%s'? I would have expected to read
> ${format:-%s}` (note the colon), but then, this was Junio's
> suggestion...

That was me simply being sloppy myself, expecting people not to copy
and paste literally without thinking.  Thanks for noticing.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v2] git-rebase--interactive.sh: add config option for custom instruction format
  2015-06-09 19:23     ` Junio C Hamano
@ 2015-06-09 19:38       ` Mike Rappazzo
  2015-06-10  0:44         ` Junio C Hamano
  0 siblings, 1 reply; 9+ messages in thread
From: Mike Rappazzo @ 2015-06-09 19:38 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Johannes Schindelin, Git List

I have since reworked this script to support the short hash in the
custom format as a special case:

-git rev-list $merges_option --pretty=oneline --reverse --left-right
--topo-order \
+format=$(git config --get rebase.instructionFormat)
+no_format=$?
+if test ${no_format} -ne 0
+then
+ format="%H %s"
+elif test "${format:0:3}" != "%H " && test "${format:0:3}" != "%h "
+then
+ format="%H ${format}"
+fi
+# the 'rev-list .. | sed' requires %m to parse; the instruction
requires %H to parse
+git rev-list $merges_option --format="%m${format}" \
+ --reverse --left-right --topo-order \

I also use the $no_format variable later on in the autosquash
re-ordering, and have the tests passing.  I want to add some new tests
on the custom format, and will send a new patch when that is complete.

On Tue, Jun 9, 2015 at 3:23 PM, Junio C Hamano <gitster@pobox.com> wrote:
> Johannes Schindelin <johannes.schindelin@gmx.de> writes:
>
>> Besides, are you sure you don't want to substitute an empty
>> rebase.instructionFormat' by '%s'? I would have expected to read
>> ${format:-%s}` (note the colon), but then, this was Junio's
>> suggestion...
>
> That was me simply being sloppy myself, expecting people not to copy
> and paste literally without thinking.  Thanks for noticing.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH v2] git-rebase--interactive.sh: add config option for custom instruction format
  2015-06-09 19:38       ` Mike Rappazzo
@ 2015-06-10  0:44         ` Junio C Hamano
  0 siblings, 0 replies; 9+ messages in thread
From: Junio C Hamano @ 2015-06-10  0:44 UTC (permalink / raw)
  To: Mike Rappazzo; +Cc: Johannes Schindelin, Git List

Mike Rappazzo <rappazzo@gmail.com> writes:

> I have since reworked this script to support the short hash in the
> custom format as a special case:

I thought that we always give short form when presenting it to the
end user to edit, but for internal bookkeeping purposes we make sure
that we use the full SHA-1, so that new objects created during the
rebase session will not cause "used to be unique but not anymore"
ambiguity in the commit object names in the instruction sheet.

I have been assuming that the "rev-list" we have been mucking with
was to prepare the latter, the internal bookkeeping data, which must
always spell 40-hex (that is why the default "oneline" is not
"--oneline" but "--pretty=oneline).

Why is it necessary to make %m%H part customizable in the first
place?

Puzzled....

>
> -git rev-list $merges_option --pretty=oneline --reverse --left-right
> --topo-order \
> +format=$(git config --get rebase.instructionFormat)
> +no_format=$?
> +if test ${no_format} -ne 0
> +then
> + format="%H %s"
> +elif test "${format:0:3}" != "%H " && test "${format:0:3}" != "%h "

Do not use bash-ism "substring".

> +then
> + format="%H ${format}"
> +fi
> +# the 'rev-list .. | sed' requires %m to parse; the instruction
> requires %H to parse
> +git rev-list $merges_option --format="%m${format}" \
> + --reverse --left-right --topo-order \
>
> I also use the $no_format variable later on in the autosquash
> re-ordering, and have the tests passing.  I want to add some new tests
> on the custom format, and will send a new patch when that is complete.
>
> On Tue, Jun 9, 2015 at 3:23 PM, Junio C Hamano <gitster@pobox.com> wrote:
>> Johannes Schindelin <johannes.schindelin@gmx.de> writes:
>>
>>> Besides, are you sure you don't want to substitute an empty
>>> rebase.instructionFormat' by '%s'? I would have expected to read
>>> ${format:-%s}` (note the colon), but then, this was Junio's
>>> suggestion...
>>
>> That was me simply being sloppy myself, expecting people not to copy
>> and paste literally without thinking.  Thanks for noticing.

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2015-06-10  0:44 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-06-08 21:00 [PATCH v2] git-rebase--interactive.sh: add config option for custom instruction format Michael Rappazzo
2015-06-08 21:00 ` Michael Rappazzo
2015-06-08 21:29   ` Junio C Hamano
2015-06-09  9:36   ` Johannes Schindelin
2015-06-09 10:26     ` Mike Rappazzo
2015-06-09 19:23     ` Junio C Hamano
2015-06-09 19:38       ` Mike Rappazzo
2015-06-10  0:44         ` Junio C Hamano
2015-06-08 22:17 ` Junio C Hamano

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.