git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
* [PATCH 0/3] completion: trivial cleanups
@ 2012-01-29 23:41 Felipe Contreras
  2012-01-29 23:41 ` [PATCH 1/3] completion: be nicer with zsh Felipe Contreras
                   ` (2 more replies)
  0 siblings, 3 replies; 28+ messages in thread
From: Felipe Contreras @ 2012-01-29 23:41 UTC (permalink / raw)
  To: git; +Cc: Felipe Contreras

And an improvement for zsh.

Felipe Contreras (3):
  completion: be nicer with zsh
  completion: remove old code
  completion: remove unused code

 contrib/completion/git-completion.bash |   47 +++++---------------------------
 1 files changed, 7 insertions(+), 40 deletions(-)

-- 
1.7.8.3

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

* [PATCH 1/3] completion: be nicer with zsh
  2012-01-29 23:41 [PATCH 0/3] completion: trivial cleanups Felipe Contreras
@ 2012-01-29 23:41 ` Felipe Contreras
  2012-01-30  4:34   ` Junio C Hamano
  2012-01-29 23:41 ` [PATCH 2/3] completion: remove old code Felipe Contreras
  2012-01-29 23:41 ` [PATCH 3/3] completion: remove unused code Felipe Contreras
  2 siblings, 1 reply; 28+ messages in thread
From: Felipe Contreras @ 2012-01-29 23:41 UTC (permalink / raw)
  To: git; +Cc: Felipe Contreras

And yet another bug in zsh[1] causes a mismatch; zsh seems to have
problem emulating wordspliting, but only when the ':' command is
involved.

Let's avoid it. This has the advantage that the code is now actually
understandable (at least to me), while before it looked like voodoo.

I found this issue because __git_compute_porcelain_commands listed all
commands (not only porcelain).

[1] http://article.gmane.org/gmane.comp.shells.zsh.devel/24296

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
 contrib/completion/git-completion.bash |    9 ++++++---
 1 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index 1496c6d..7051c7a 100755
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -676,7 +676,8 @@ __git_merge_strategies=
 # is needed.
 __git_compute_merge_strategies ()
 {
-	: ${__git_merge_strategies:=$(__git_list_merge_strategies)}
+	test "$__git_merge_strategies" && return
+	__git_merge_strategies=$(__git_list_merge_strategies 2> /dev/null)
 }
 
 __git_complete_revlist_file ()
@@ -854,7 +855,8 @@ __git_list_all_commands ()
 __git_all_commands=
 __git_compute_all_commands ()
 {
-	: ${__git_all_commands:=$(__git_list_all_commands)}
+	test "$__git_all_commands" && return
+	__git_all_commands=$(__git_list_all_commands 2> /dev/null)
 }
 
 __git_list_porcelain_commands ()
@@ -947,7 +949,8 @@ __git_porcelain_commands=
 __git_compute_porcelain_commands ()
 {
 	__git_compute_all_commands
-	: ${__git_porcelain_commands:=$(__git_list_porcelain_commands)}
+	test "$__git_porcelain_commands" && return
+	__git_porcelain_commands=$(__git_list_porcelain_commands 2> /dev/null)
 }
 
 __git_pretty_aliases ()
-- 
1.7.8.3

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

* [PATCH 2/3] completion: remove old code
  2012-01-29 23:41 [PATCH 0/3] completion: trivial cleanups Felipe Contreras
  2012-01-29 23:41 ` [PATCH 1/3] completion: be nicer with zsh Felipe Contreras
@ 2012-01-29 23:41 ` Felipe Contreras
  2012-01-30  2:36   ` Jonathan Nieder
  2012-01-29 23:41 ` [PATCH 3/3] completion: remove unused code Felipe Contreras
  2 siblings, 1 reply; 28+ messages in thread
From: Felipe Contreras @ 2012-01-29 23:41 UTC (permalink / raw)
  To: git; +Cc: Felipe Contreras

We don't need to check for GIT_DIR/remotes, right? This was removed long
time ago.

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
 contrib/completion/git-completion.bash |    8 +-------
 1 files changed, 1 insertions(+), 7 deletions(-)

diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index 7051c7a..f7278b5 100755
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -643,13 +643,7 @@ __git_refs_remotes ()
 
 __git_remotes ()
 {
-	local i ngoff IFS=$'\n' d="$(__gitdir)"
-	__git_shopt -q nullglob || ngoff=1
-	__git_shopt -s nullglob
-	for i in "$d/remotes"/*; do
-		echo ${i#$d/remotes/}
-	done
-	[ "$ngoff" ] && __git_shopt -u nullglob
+	local i IFS=$'\n' d="$(__gitdir)"
 	for i in $(git --git-dir="$d" config --get-regexp 'remote\..*\.url' 2>/dev/null); do
 		i="${i#remote.}"
 		echo "${i/.url*/}"
-- 
1.7.8.3

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

* [PATCH 3/3] completion: remove unused code
  2012-01-29 23:41 [PATCH 0/3] completion: trivial cleanups Felipe Contreras
  2012-01-29 23:41 ` [PATCH 1/3] completion: be nicer with zsh Felipe Contreras
  2012-01-29 23:41 ` [PATCH 2/3] completion: remove old code Felipe Contreras
@ 2012-01-29 23:41 ` Felipe Contreras
  2012-01-30  2:50   ` Jonathan Nieder
  2 siblings, 1 reply; 28+ messages in thread
From: Felipe Contreras @ 2012-01-29 23:41 UTC (permalink / raw)
  To: git; +Cc: Felipe Contreras

No need for thus rather complicated piece of code :)

Signed-off-by: Felipe Contreras <felipe.contreras@gmail.com>
---
 contrib/completion/git-completion.bash |   30 ------------------------------
 1 files changed, 0 insertions(+), 30 deletions(-)

diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index f7278b5..59a4650 100755
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -2730,33 +2730,3 @@ if [ Cygwin = "$(uname -o 2>/dev/null)" ]; then
 complete -o bashdefault -o default -o nospace -F _git git.exe 2>/dev/null \
 	|| complete -o default -o nospace -F _git git.exe
 fi
-
-if [[ -n ${ZSH_VERSION-} ]]; then
-	__git_shopt () {
-		local option
-		if [ $# -ne 2 ]; then
-			echo "USAGE: $0 (-q|-s|-u) <option>" >&2
-			return 1
-		fi
-		case "$2" in
-		nullglob)
-			option="$2"
-			;;
-		*)
-			echo "$0: invalid option: $2" >&2
-			return 1
-		esac
-		case "$1" in
-		-q)	setopt | grep -q "$option" ;;
-		-u)	unsetopt "$option" ;;
-		-s)	setopt "$option" ;;
-		*)
-			echo "$0: invalid flag: $1" >&2
-			return 1
-		esac
-	}
-else
-	__git_shopt () {
-		shopt "$@"
-	}
-fi
-- 
1.7.8.3

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

* Re: [PATCH 2/3] completion: remove old code
  2012-01-29 23:41 ` [PATCH 2/3] completion: remove old code Felipe Contreras
@ 2012-01-30  2:36   ` Jonathan Nieder
  2012-01-30  3:24     ` Felipe Contreras
  0 siblings, 1 reply; 28+ messages in thread
From: Jonathan Nieder @ 2012-01-30  2:36 UTC (permalink / raw)
  To: Felipe Contreras; +Cc: git

Hi,

Felipe Contreras wrote:

> We don't need to check for GIT_DIR/remotes, right? This was removed long
> time ago.

I don't follow.  fetch, push, and remote still look in .git/remotes
like they always did, last time I checked.

Perhaps you mean that /usr/share/git-core/templates/ no longer
contains a remotes/ directory?  That's true but not particularly
relevant.  A more relevant detail would be that very few people _use_
the .git/remotes feature, though it is not obvious to me whether that
justifies removing this code from the git-completion script that
already works.

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

* Re: [PATCH 3/3] completion: remove unused code
  2012-01-29 23:41 ` [PATCH 3/3] completion: remove unused code Felipe Contreras
@ 2012-01-30  2:50   ` Jonathan Nieder
  2012-01-30  3:29     ` Jonathan Nieder
  2012-01-30  3:30     ` Felipe Contreras
  0 siblings, 2 replies; 28+ messages in thread
From: Jonathan Nieder @ 2012-01-30  2:50 UTC (permalink / raw)
  To: Felipe Contreras; +Cc: git

Felipe Contreras wrote:

> No need for thus rather complicated piece of code :)
[...]
>  contrib/completion/git-completion.bash |   30 ------------------------------
>  1 files changed, 0 insertions(+), 30 deletions(-)
[...]
> --- a/contrib/completion/git-completion.bash
> +++ b/contrib/completion/git-completion.bash
> @@ -2730,33 +2730,3 @@ if [ Cygwin = "$(uname -o 2>/dev/null)" ]; then
[...]
> -if [[ -n ${ZSH_VERSION-} ]]; then
> -	__git_shopt () {
[...]
> -else
> -	__git_shopt () {
> -		shopt "$@"
> -	}
> -fi

What codebase does this apply to?  My copy of git-completion.bash
contains a number of calls to __git_shopt, which will fail after this
change.

By the way, is there any reason you did not cc this series to Gábor or
others who also know the completion code well?  The patches are not
marked with RFC/ so I assume they are intended for direct application,
which seems somewhat odd to me.

Thanks and hope that helps,
Jonathan

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

* Re: [PATCH 2/3] completion: remove old code
  2012-01-30  2:36   ` Jonathan Nieder
@ 2012-01-30  3:24     ` Felipe Contreras
  2012-01-30  3:27       ` Jonathan Nieder
  2012-01-30  4:27       ` Junio C Hamano
  0 siblings, 2 replies; 28+ messages in thread
From: Felipe Contreras @ 2012-01-30  3:24 UTC (permalink / raw)
  To: Jonathan Nieder; +Cc: git

On Mon, Jan 30, 2012 at 4:36 AM, Jonathan Nieder <jrnieder@gmail.com> wrote:
> Felipe Contreras wrote:
>
>> We don't need to check for GIT_DIR/remotes, right? This was removed long
>> time ago.
>
> I don't follow.  fetch, push, and remote still look in .git/remotes
> like they always did, last time I checked.
>
> Perhaps you mean that /usr/share/git-core/templates/ no longer
> contains a remotes/ directory?  That's true but not particularly
> relevant.  A more relevant detail would be that very few people _use_
> the .git/remotes feature, though it is not obvious to me whether that
> justifies removing this code from the git-completion script that
> already works.

The problem is all the 'nullglob' stuff. It's *a lot* of code for this
feature that nobody uses.

OK, maybe some people use it, but most likely they are using an old
version of git, and thus an old version of the completion script.

Anyway, aren't there easier ways to get this? Perhaps first checking
if the directory exists, to avoid wasting cycles.

Something like:
  test -d "$d/remotes" && ls -1 "$d/remotes"

-- 
Felipe Contreras

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

* Re: [PATCH 2/3] completion: remove old code
  2012-01-30  3:24     ` Felipe Contreras
@ 2012-01-30  3:27       ` Jonathan Nieder
  2012-01-30  4:27       ` Junio C Hamano
  1 sibling, 0 replies; 28+ messages in thread
From: Jonathan Nieder @ 2012-01-30  3:27 UTC (permalink / raw)
  To: Felipe Contreras; +Cc: git

Felipe Contreras wrote:

> Anyway, aren't there easier ways to get this? Perhaps first checking
> if the directory exists, to avoid wasting cycles.
>
> Something like:
>   test -d "$d/remotes" && ls -1 "$d/remotes"

Yeah, that sounds like a good idea.  Could you send a patch that does
that?

Thanks,
Jonathan

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

* Re: [PATCH 3/3] completion: remove unused code
  2012-01-30  2:50   ` Jonathan Nieder
@ 2012-01-30  3:29     ` Jonathan Nieder
  2012-01-30  3:30     ` Felipe Contreras
  1 sibling, 0 replies; 28+ messages in thread
From: Jonathan Nieder @ 2012-01-30  3:29 UTC (permalink / raw)
  To: Felipe Contreras; +Cc: git

Jonathan Nieder wrote:

> What codebase does this apply to?  My copy of git-completion.bash
> contains a number of calls to __git_shopt

Ah, now I get it.  This would have been easier to understand if
squashed in with patch 2/3.

And it certainly looks like a good change, yes. :)

Thanks for explaining,
Jonathan

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

* Re: [PATCH 3/3] completion: remove unused code
  2012-01-30  2:50   ` Jonathan Nieder
  2012-01-30  3:29     ` Jonathan Nieder
@ 2012-01-30  3:30     ` Felipe Contreras
  2012-01-30  7:44       ` Thomas Rast
  1 sibling, 1 reply; 28+ messages in thread
From: Felipe Contreras @ 2012-01-30  3:30 UTC (permalink / raw)
  To: Jonathan Nieder; +Cc: git

On Mon, Jan 30, 2012 at 4:50 AM, Jonathan Nieder <jrnieder@gmail.com> wrote:
> Felipe Contreras wrote:
>
>> No need for thus rather complicated piece of code :)
> [...]
>>  contrib/completion/git-completion.bash |   30 ------------------------------
>>  1 files changed, 0 insertions(+), 30 deletions(-)
> [...]
>> --- a/contrib/completion/git-completion.bash
>> +++ b/contrib/completion/git-completion.bash
>> @@ -2730,33 +2730,3 @@ if [ Cygwin = "$(uname -o 2>/dev/null)" ]; then
> [...]
>> -if [[ -n ${ZSH_VERSION-} ]]; then
>> -     __git_shopt () {
> [...]
>> -else
>> -     __git_shopt () {
>> -             shopt "$@"
>> -     }
>> -fi
>
> What codebase does this apply to?  My copy of git-completion.bash
> contains a number of calls to __git_shopt, which will fail after this
> change.

The latest and greatest of course:

http://git.kernel.org/?p=git/git.git;a=blob;f=contrib/completion/git-completion.bash

It's only used in __git_remotes.

> By the way, is there any reason you did not cc this series to Gábor or
> others who also know the completion code well?  The patches are not
> marked with RFC/ so I assume they are intended for direct application,
> which seems somewhat odd to me.

No reason. I hope they read the mailing list, otherwise I'll resend
and CC them. A get_maintainers script, or something like that would
make things easier.

Cheers.

-- 
Felipe Contreras

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

* Re: [PATCH 2/3] completion: remove old code
  2012-01-30  3:24     ` Felipe Contreras
  2012-01-30  3:27       ` Jonathan Nieder
@ 2012-01-30  4:27       ` Junio C Hamano
  2012-01-30 10:51         ` Felipe Contreras
  1 sibling, 1 reply; 28+ messages in thread
From: Junio C Hamano @ 2012-01-30  4:27 UTC (permalink / raw)
  To: Felipe Contreras; +Cc: Jonathan Nieder, git

Felipe Contreras <felipe.contreras@gmail.com> writes:

> OK, maybe some people use it, but most likely they are using an old
> version of git, and thus an old version of the completion script.

Please adjust your attitude about backward compatibility to match the
standard used for other parts of Git.

Most likely they are using repositories that they started using with an
old version, but at the same time, most likely they are happily using more
modern version exactly because the rest of Git still support it, except
for the completion script after _this_ patch breaks the support.

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

* Re: [PATCH 1/3] completion: be nicer with zsh
  2012-01-29 23:41 ` [PATCH 1/3] completion: be nicer with zsh Felipe Contreras
@ 2012-01-30  4:34   ` Junio C Hamano
  2012-01-30  5:50     ` Junio C Hamano
  2012-01-30 10:35     ` Felipe Contreras
  0 siblings, 2 replies; 28+ messages in thread
From: Junio C Hamano @ 2012-01-30  4:34 UTC (permalink / raw)
  To: Felipe Contreras; +Cc: git

Felipe Contreras <felipe.contreras@gmail.com> writes:

> Let's avoid it. This has the advantage that the code is now actually
> understandable (at least to me), while before it looked like voodoo.

I am somewhat hesitant to accept a patch to shell scripts on the basis
that the patch author does not understand the existing constructs that
are standard parts of shell idioms.

Avoiding zsh's bug that cannot use conditional assignment on the no-op
colon command (if the bug is really that; it is somewhat hard to imagine
if the bug exists only for colon command, though) *is* by itself a good
justification for this change, even though the resulting code is harder to
read for people who are used to read shell scripts.

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

* Re: [PATCH 1/3] completion: be nicer with zsh
  2012-01-30  4:34   ` Junio C Hamano
@ 2012-01-30  5:50     ` Junio C Hamano
  2012-01-30 10:30       ` Felipe Contreras
  2012-01-30 10:35     ` Felipe Contreras
  1 sibling, 1 reply; 28+ messages in thread
From: Junio C Hamano @ 2012-01-30  5:50 UTC (permalink / raw)
  To: Felipe Contreras; +Cc: git

Junio C Hamano <gitster@pobox.com> writes:

> Avoiding zsh's bug that cannot use conditional assignment on the no-op
> colon command (if the bug is really that; it is somewhat hard to imagine
> if the bug exists only for colon command, though) *is* by itself a good
> justification for this change, even though the resulting code is harder to
> read for people who are used to read shell scripts.

Just from my curiosity, I am wondering what zsh does when given these:

	bar () { echo "frotz nitfol xyzzy" }

	unset foo; : ${foo:=$(bar)}; echo "<$?,$foo>"
        unset foo; true ${foo:=$(bar)}; echo "<$?,$foo>"
        unset foo; echo >/dev/null ${foo:=$(bar)}; echo "<$?,$foo>"

The first one is exactly your "And yet another bug in zsh[1] causes a
mismatch; zsh seems to have problem emulating wordspliting, but only when
the ':' command is involved.", so we already know it "seems to have
problem emulating word-splitting" (by the way, can we replace that with
exact description of faulty symptom? e.g. "does not split words at $IFS"
might be what you meant but still when we are assigning the result to a
single variable, it is unclear how that matters).

Note that I am not suggesting to rewrite the existing ": ${var:=val}" with
"echo ${var:val} >/dev/null" at all. Even if "echo >/dev/null" makes it
work as expected, your rewrite to protect it with an explicit conditional
e.g. "test -n ${foo:-} || foo=$(bar)" would be a lot better than funny
construct like "echo >/dev/null ${foo:=$(bar)", because it is not an
established shell idiom to use default assignment with anything but ":".

Thanks.

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

* Re: [PATCH 3/3] completion: remove unused code
  2012-01-30  3:30     ` Felipe Contreras
@ 2012-01-30  7:44       ` Thomas Rast
  2012-01-30  8:22         ` Junio C Hamano
  0 siblings, 1 reply; 28+ messages in thread
From: Thomas Rast @ 2012-01-30  7:44 UTC (permalink / raw)
  To: Felipe Contreras; +Cc: Jonathan Nieder, git

Felipe Contreras <felipe.contreras@gmail.com> writes:

> No reason. I hope they read the mailing list, otherwise I'll resend
> and CC them. A get_maintainers script, or something like that would
> make things easier.

I simply use

  git shortlog -sn --no-merges v1.7.0.. -- contrib/completion/

(In many parts the revision limiter can be omitted without losing much,
but e.g. here this drops Shawn who hasn't worked on it since 2009.)

-- 
Thomas Rast
trast@{inf,student}.ethz.ch

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

* Re: [PATCH 3/3] completion: remove unused code
  2012-01-30  7:44       ` Thomas Rast
@ 2012-01-30  8:22         ` Junio C Hamano
  2012-01-30 10:38           ` Felipe Contreras
  0 siblings, 1 reply; 28+ messages in thread
From: Junio C Hamano @ 2012-01-30  8:22 UTC (permalink / raw)
  To: Thomas Rast, Felipe Contreras; +Cc: Jonathan Nieder, git



Thomas Rast <trast@inf.ethz.ch> wrote:

>Felipe Contreras <felipe.contreras@gmail.com> writes:
>
>> No reason. I hope they read the mailing list, otherwise I'll resend
>> and CC them. A get_maintainers script, or something like that would
>> make things easier.
>
>I simply use
>
>  git shortlog -sn --no-merges v1.7.0.. -- contrib/completion/
>
>(In many parts the revision limiter can be omitted without losing much,
>but e.g. here this drops Shawn who hasn't worked on it since 2009.)

Or "--since=1.year", which you can keep using forever without adjusting.

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

* Re: [PATCH 1/3] completion: be nicer with zsh
  2012-01-30  5:50     ` Junio C Hamano
@ 2012-01-30 10:30       ` Felipe Contreras
  0 siblings, 0 replies; 28+ messages in thread
From: Felipe Contreras @ 2012-01-30 10:30 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

On Mon, Jan 30, 2012 at 7:50 AM, Junio C Hamano <gitster@pobox.com> wrote:
> Junio C Hamano <gitster@pobox.com> writes:
>
>> Avoiding zsh's bug that cannot use conditional assignment on the no-op
>> colon command (if the bug is really that; it is somewhat hard to imagine
>> if the bug exists only for colon command, though) *is* by itself a good
>> justification for this change, even though the resulting code is harder to
>> read for people who are used to read shell scripts.
>
> Just from my curiosity, I am wondering what zsh does when given these:
>
>        bar () { echo "frotz nitfol xyzzy" }
>
>        unset foo; : ${foo:=$(bar)}; echo "<$?,$foo>"
>        unset foo; true ${foo:=$(bar)}; echo "<$?,$foo>"
>        unset foo; echo >/dev/null ${foo:=$(bar)}; echo "<$?,$foo>"

<0,frotz nitfol xyzzy>
<0,frotz nitfol xyzzy>
<0,frotz nitfol xyzzy>

And that's _without_ bash emulation.

BTW. That code didn't work for me in bash (though it did in zsh), I
had to add a semicolon:

 bar () { echo "frotz nitfol xyzzy" ;}

> The first one is exactly your "And yet another bug in zsh[1] causes a
> mismatch; zsh seems to have problem emulating wordspliting, but only when
> the ':' command is involved.", so we already know it "seems to have
> problem emulating word-splitting" (by the way, can we replace that with
> exact description of faulty symptom? e.g. "does not split words at $IFS"
> might be what you meant but still when we are assigning the result to a
> single variable, it is unclear how that matters).

That's not the problem, the problem is that this doesn't work in zsh:

array="a b c"
for i in $array; do
 echo $i
done

The result is "a b c". Unless sh emulation is on. This is the correct
way in zsh:

array="a b c"
for i in ${=array}; do
 echo $i
done

But this behavior can be controlled with SH_WORD_SPLIT.

Anyway, as I said, the problem is that the ':' have some problems, and
sh emulation seems to be turned off inside such command, or at least
SH_WORD_SPLIT was reset in my tests.

-- 
Felipe Contreras

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

* Re: [PATCH 1/3] completion: be nicer with zsh
  2012-01-30  4:34   ` Junio C Hamano
  2012-01-30  5:50     ` Junio C Hamano
@ 2012-01-30 10:35     ` Felipe Contreras
  2012-01-30 18:07       ` Junio C Hamano
  1 sibling, 1 reply; 28+ messages in thread
From: Felipe Contreras @ 2012-01-30 10:35 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

On Mon, Jan 30, 2012 at 6:34 AM, Junio C Hamano <gitster@pobox.com> wrote:
> Felipe Contreras <felipe.contreras@gmail.com> writes:
>
>> Let's avoid it. This has the advantage that the code is now actually
>> understandable (at least to me), while before it looked like voodoo.
>
> I am somewhat hesitant to accept a patch to shell scripts on the basis
> that the patch author does not understand the existing constructs that
> are standard parts of shell idioms.

I have been writing shell scripts for years[1], and I have *never* had
an encounter with ':'. vim's sh syntax doesn't seem to be prepared for
it, and zsh's sh emulation has problems only when ':' is involved, so
I still think ':' is quite obscure.

Plus, I haven't seen ${foo:=bar} that often.

In any case, there's no need for ad hominem arguments; there is a
problem when using zsh, that's a fact.

[1] https://www.ohloh.net/accounts/felipec/positions/total

-- 
Felipe Contreras

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

* Re: [PATCH 3/3] completion: remove unused code
  2012-01-30  8:22         ` Junio C Hamano
@ 2012-01-30 10:38           ` Felipe Contreras
  2012-01-30 13:19             ` Thomas Rast
  0 siblings, 1 reply; 28+ messages in thread
From: Felipe Contreras @ 2012-01-30 10:38 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Thomas Rast, Jonathan Nieder, git

On Mon, Jan 30, 2012 at 10:22 AM, Junio C Hamano <jch2355@gmail.com> wrote:
> Thomas Rast <trast@inf.ethz.ch> wrote:
>>Felipe Contreras <felipe.contreras@gmail.com> writes:
>>
>>> No reason. I hope they read the mailing list, otherwise I'll resend
>>> and CC them. A get_maintainers script, or something like that would
>>> make things easier.
>>
>>I simply use
>>
>>  git shortlog -sn --no-merges v1.7.0.. -- contrib/completion/
>>
>>(In many parts the revision limiter can be omitted without losing much,
>>but e.g. here this drops Shawn who hasn't worked on it since 2009.)
>
> Or "--since=1.year", which you can keep using forever without adjusting.

Perhaps something like that can be stored in a script somewhere in
git's codebase so that people can set sendemail.cccmd to that.

-- 
Felipe Contreras

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

* Re: [PATCH 2/3] completion: remove old code
  2012-01-30  4:27       ` Junio C Hamano
@ 2012-01-30 10:51         ` Felipe Contreras
  2012-01-30 11:19           ` Frans Klaver
  0 siblings, 1 reply; 28+ messages in thread
From: Felipe Contreras @ 2012-01-30 10:51 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Jonathan Nieder, git

On Mon, Jan 30, 2012 at 6:27 AM, Junio C Hamano <gitster@pobox.com> wrote:
> Felipe Contreras <felipe.contreras@gmail.com> writes:
>
>> OK, maybe some people use it, but most likely they are using an old
>> version of git, and thus an old version of the completion script.
>
> Please adjust your attitude about backward compatibility to match the
> standard used for other parts of Git.

What attitude? I am simply stating a fact. How much percentage of
people do you think still have .git/remotes around? How many people do
you think have clones more than 3 years old? And how many of these
people would complain if remotes were not properly completed for these
repos?

I doubt anybody would have complained, but I guess we would never
know, because I already proposed a solution that would work for them
and only uses a *single* line of code, unlike the current 40 ones.

I don't see what is the problem with the attitude of sending a patch
to remove code that most likely nobody cares about (neither you or I
have numbers on this), and then finding an alternative when people do
care about it.

Cheers.

-- 
Felipe Contreras

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

* Re: [PATCH 2/3] completion: remove old code
  2012-01-30 10:51         ` Felipe Contreras
@ 2012-01-30 11:19           ` Frans Klaver
  2012-01-30 11:55             ` Felipe Contreras
  0 siblings, 1 reply; 28+ messages in thread
From: Frans Klaver @ 2012-01-30 11:19 UTC (permalink / raw)
  To: Felipe Contreras; +Cc: Junio C Hamano, Jonathan Nieder, git

Hi,

On Mon, Jan 30, 2012 at 11:51 AM, Felipe Contreras
<felipe.contreras@gmail.com> wrote:
> On Mon, Jan 30, 2012 at 6:27 AM, Junio C Hamano <gitster@pobox.com> wrote:
>> Felipe Contreras <felipe.contreras@gmail.com> writes:
>>
>>> OK, maybe some people use it, but most likely they are using an old
>>> version of git, and thus an old version of the completion script.
>>
>> Please adjust your attitude about backward compatibility to match the
>> standard used for other parts of Git.
>
> What attitude?

This attitude:

> I am simply stating a fact. How much percentage of
> people do you think still have .git/remotes around? How many people do
> you think have clones more than 3 years old? And how many of these
> people would complain if remotes were not properly completed for these
> repos?
>
> I doubt anybody would have complained, but I guess we would never
> know, because I already proposed a solution that would work for them
> and only uses a *single* line of code, unlike the current 40 ones.
>
> I don't see what is the problem with the attitude of sending a patch
> to remove code that most likely nobody cares about (neither you or I
> have numbers on this), and then finding an alternative when people do
> care about it.

I don't think Junio actually meant an "attitude", but just your angle
of approach (== attitude) on backwards compatibility.

Maybe numbers for this could be generated from the next git user
survey. If numbers justify this change, maybe this or something like
it could be scheduled for a major release of git.

Cheers,
Frans

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

* Re: [PATCH 2/3] completion: remove old code
  2012-01-30 11:19           ` Frans Klaver
@ 2012-01-30 11:55             ` Felipe Contreras
  2012-01-30 12:21               ` Frans Klaver
  0 siblings, 1 reply; 28+ messages in thread
From: Felipe Contreras @ 2012-01-30 11:55 UTC (permalink / raw)
  To: Frans Klaver; +Cc: Junio C Hamano, Jonathan Nieder, git

On Mon, Jan 30, 2012 at 1:19 PM, Frans Klaver <fransklaver@gmail.com> wrote:
> On Mon, Jan 30, 2012 at 11:51 AM, Felipe Contreras
> <felipe.contreras@gmail.com> wrote:
>> On Mon, Jan 30, 2012 at 6:27 AM, Junio C Hamano <gitster@pobox.com> wrote:
>>> Felipe Contreras <felipe.contreras@gmail.com> writes:
>>>
>>>> OK, maybe some people use it, but most likely they are using an old
>>>> version of git, and thus an old version of the completion script.
>>>
>>> Please adjust your attitude about backward compatibility to match the
>>> standard used for other parts of Git.
>>
>> What attitude?
>
> This attitude:
>
>> I am simply stating a fact. How much percentage of
>> people do you think still have .git/remotes around? How many people do
>> you think have clones more than 3 years old? And how many of these
>> people would complain if remotes were not properly completed for these
>> repos?
>>
>> I doubt anybody would have complained, but I guess we would never
>> know, because I already proposed a solution that would work for them
>> and only uses a *single* line of code, unlike the current 40 ones.
>>
>> I don't see what is the problem with the attitude of sending a patch
>> to remove code that most likely nobody cares about (neither you or I
>> have numbers on this), and then finding an alternative when people do
>> care about it.
>
> I don't think Junio actually meant an "attitude", but just your angle
> of approach (== attitude) on backwards compatibility.

We are not talking about backwards compatibility; we are talking about
compatibility of remotes completion of the bash completion script of
repositories more than 3 years old with remotes that haven't been
migrated.

This barely resembles the git-foo -> 'git foo', which truly broke
backwards compatibility, and at the time I proposed many different
approaches to deal with these type of problems, which seem to be
followed now (although probably not because of my recommendations).

But this has nothing to do with _attitude_; I am merely stating fact.
I have never expressed any opinion or attitude with respect to how
backwards compatibility should be handled in this thread, have I?

> Maybe numbers for this could be generated from the next git user
> survey. If numbers justify this change, maybe this or something like
> it could be scheduled for a major release of git.

Maybe, but I doubt this issue hardly deserves much discussion.

Nobody is proposing to break backwards compatibility--as you can see,
I already proposed a simple solution that should work.

And FTR, when I wrote 'We don't need to check for GIT_DIR/remotes,
right? This was removed long time ago." I clearly wasn't sure if
.git/remotes was still used or not, after Jonathan Nieder replied, I
checked the source code of remotes.c, and I found that it was still
supported, so I wrote the proposed alternative.

-- 
Felipe Contreras

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

* Re: [PATCH 2/3] completion: remove old code
  2012-01-30 11:55             ` Felipe Contreras
@ 2012-01-30 12:21               ` Frans Klaver
  2012-01-30 13:59                 ` Felipe Contreras
  0 siblings, 1 reply; 28+ messages in thread
From: Frans Klaver @ 2012-01-30 12:21 UTC (permalink / raw)
  To: Felipe Contreras; +Cc: Junio C Hamano, Jonathan Nieder, git

On Mon, Jan 30, 2012 at 12:55 PM, Felipe Contreras
<felipe.contreras@gmail.com> wrote:

> We are not talking about backwards compatibility; we are talking about
> compatibility of remotes completion of the bash completion script of
> repositories more than 3 years old with remotes that haven't been
> migrated.

What's not backward about that?


> This barely resembles the git-foo -> 'git foo', which truly broke
> backwards compatibility, and at the time I proposed many different
> approaches to deal with these type of problems, which seem to be
> followed now (although probably not because of my recommendations).
>
> But this has nothing to do with _attitude_; I am merely stating fact.
> I have never expressed any opinion or attitude with respect to how
> backwards compatibility should be handled in this thread, have I?

As far as I know you haven't explicitly said anything about that.
There may still be a possibility that the sentence Junio quoted in his
reply could have implied a certain attitude.

>> Maybe numbers for this could be generated from the next git user
>> survey. If numbers justify this change, maybe this or something like
>> it could be scheduled for a major release of git.
>
> Maybe, but I doubt this issue hardly deserves much discussion.

I wouldn't know about that. Apparently not everybody is happy with
applying it without further discussion.

Cheers,
Frans

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

* Re: [PATCH 3/3] completion: remove unused code
  2012-01-30 10:38           ` Felipe Contreras
@ 2012-01-30 13:19             ` Thomas Rast
  2012-01-30 13:51               ` Felipe Contreras
  0 siblings, 1 reply; 28+ messages in thread
From: Thomas Rast @ 2012-01-30 13:19 UTC (permalink / raw)
  To: Felipe Contreras; +Cc: Junio C Hamano, Jonathan Nieder, git

Felipe Contreras <felipe.contreras@gmail.com> writes:

> On Mon, Jan 30, 2012 at 10:22 AM, Junio C Hamano <jch2355@gmail.com> wrote:
>> Thomas Rast <trast@inf.ethz.ch> wrote:
>>>Felipe Contreras <felipe.contreras@gmail.com> writes:
>>>
>>>> No reason. I hope they read the mailing list, otherwise I'll resend
>>>> and CC them. A get_maintainers script, or something like that would
>>>> make things easier.
>>>
>>>I simply use
>>>
>>>  git shortlog -sn --no-merges v1.7.0.. -- contrib/completion/
>>>
>>>(In many parts the revision limiter can be omitted without losing much,
>>>but e.g. here this drops Shawn who hasn't worked on it since 2009.)
>>
>> Or "--since=1.year", which you can keep using forever without adjusting.
>
> Perhaps something like that can be stored in a script somewhere in
> git's codebase so that people can set sendemail.cccmd to that.

Umm, that seems rather AI-complete.  You should always compile the list
by hand.

For example, the list in this case started

      25  SZEDER Gábor
       4  Michael J Gruber
       3  Teemu Matilainen
       3  Thomas Rast

Would you Cc Michael, Teemu and me?  Probably not.  What if it started

       5  SZEDER Gábor
       4  Michael J Gruber
       3  Teemu Matilainen
       3  Thomas Rast

Also, something I didn't mention so far was that you may be patching
squarely into the code of one contributor, even if he only had a single
patch in that area.  To catch this, you should blame the code you are
fixing (you already checked the message of the commit to verify whether
the bug/feature was intentional, right?).  On top of that, the patch may
have involved a large number of people not listed in the Author field.
As a random example,

  $ git shortlog -sn --no-merges v1.7.0..origin/next -- grep.[ch] builtin/grep.[ch]
      15  René Scharfe
       9  Junio C Hamano
       8  Nguyễn Thái Ngọc Duy
       5  Michał Kiedrowicz
       4  Johannes Schindelin
       3  Jeff King
       3  Thomas Rast

but if you were to submit a patch that disputes the case made by
53b8d931, you should probably cc René, Peff and me (see the Helped-by
lines).

Ok, this got rather long-winded.  But I think the bottom line is, trying
to put this in sendemail.cccmd is trying to script common sense.

--
Thomas Rast
trast@{inf,student}.ethz.ch

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

* Re: [PATCH 3/3] completion: remove unused code
  2012-01-30 13:19             ` Thomas Rast
@ 2012-01-30 13:51               ` Felipe Contreras
  0 siblings, 0 replies; 28+ messages in thread
From: Felipe Contreras @ 2012-01-30 13:51 UTC (permalink / raw)
  To: Thomas Rast; +Cc: Junio C Hamano, Jonathan Nieder, git

On Mon, Jan 30, 2012 at 3:19 PM, Thomas Rast <trast@inf.ethz.ch> wrote:
> Felipe Contreras <felipe.contreras@gmail.com> writes:
>
>> On Mon, Jan 30, 2012 at 10:22 AM, Junio C Hamano <jch2355@gmail.com> wrote:
>>> Thomas Rast <trast@inf.ethz.ch> wrote:
>>>>Felipe Contreras <felipe.contreras@gmail.com> writes:
>>>>
>>>>> No reason. I hope they read the mailing list, otherwise I'll resend
>>>>> and CC them. A get_maintainers script, or something like that would
>>>>> make things easier.
>>>>
>>>>I simply use
>>>>
>>>>  git shortlog -sn --no-merges v1.7.0.. -- contrib/completion/
>>>>
>>>>(In many parts the revision limiter can be omitted without losing much,
>>>>but e.g. here this drops Shawn who hasn't worked on it since 2009.)
>>>
>>> Or "--since=1.year", which you can keep using forever without adjusting.
>>
>> Perhaps something like that can be stored in a script somewhere in
>> git's codebase so that people can set sendemail.cccmd to that.
>
> Umm, that seems rather AI-complete.  You should always compile the list
> by hand.

Why? Take a look at the Linux kernel; having tons of contributors,
many still haven't learned the ropes, and looking at MAINTAIERS, plus
the output of 'git blame', for potentially dozens of patches is too
burdensome, which is why they have 'scripts/get_maintainer.pl' that
does a pretty good job of figuring out who to cc so you don't have to
think about it.

> Ok, this got rather long-winded.  But I think the bottom line is, trying
> to put this in sendemail.cccmd is trying to script common sense.

It's still better than nothing.

I once wrote a much smarter script[1], but it never go into the tree.

The output I get is this:
"Shawn O. Pearce" <spearce@spearce.org>>
"Jonathan Nieder" <jrnieder@gmail.com>
"Mark Lodato" <lodatom@gmail.com>
"Junio C Hamano" <junkio@cox.net>
"Ted Pavlic" <ted@tedpavlic.com>

Note: seems like there's a bug with git blame -P:
% g blame -p -L 2730,+33 contrib/completion/git-completion.bash | grep
author-mail

And if this script is such a bad idea; why do you think sendmail.cccmd exists?

I think we should have a simple script that at least does something
sensible, at least in contrib, but I hope we could even have a
standard git-cccmd that all projects could use.

It looks like my ruby script never had much of a chance getting
anywhere, so would it be accepted in another format? perl? python?
bash?

Cheers.

[1] http://thread.gmane.org/gmane.comp.version-control.git/130391

-- 
Felipe Contreras

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

* Re: [PATCH 2/3] completion: remove old code
  2012-01-30 12:21               ` Frans Klaver
@ 2012-01-30 13:59                 ` Felipe Contreras
  2012-01-30 14:02                   ` Jonathan Nieder
  0 siblings, 1 reply; 28+ messages in thread
From: Felipe Contreras @ 2012-01-30 13:59 UTC (permalink / raw)
  To: Frans Klaver; +Cc: Junio C Hamano, Jonathan Nieder, git

On Mon, Jan 30, 2012 at 2:21 PM, Frans Klaver <fransklaver@gmail.com> wrote:
> On Mon, Jan 30, 2012 at 12:55 PM, Felipe Contreras
> <felipe.contreras@gmail.com> wrote:
>
>> We are not talking about backwards compatibility; we are talking about
>> compatibility of remotes completion of the bash completion script of
>> repositories more than 3 years old with remotes that haven't been
>> migrated.
>
> What's not backward about that?

Not all backwards compatibility issues are the same.

>> This barely resembles the git-foo -> 'git foo', which truly broke
>> backwards compatibility, and at the time I proposed many different
>> approaches to deal with these type of problems, which seem to be
>> followed now (although probably not because of my recommendations).
>>
>> But this has nothing to do with _attitude_; I am merely stating fact.
>> I have never expressed any opinion or attitude with respect to how
>> backwards compatibility should be handled in this thread, have I?
>
> As far as I know you haven't explicitly said anything about that.
> There may still be a possibility that the sentence Junio quoted in his
> reply could have implied a certain attitude.

I already asked, but I ask again; what would be that attitude? Not
caring about backwards compatibility? Then that implication would have
been wrong.

If you look a few lines below, you would see a change that doesn't
break backwards compatibility, which proves the previous implication
wrong... Not to mention previous discussions.

>>> Maybe numbers for this could be generated from the next git user
>>> survey. If numbers justify this change, maybe this or something like
>>> it could be scheduled for a major release of git.
>>
>> Maybe, but I doubt this issue hardly deserves much discussion.
>
> I wouldn't know about that. Apparently not everybody is happy with
> applying it without further discussion.

Jonathan Nieder is happy with the 'ls -1 "$d/remotes"' change, and I
haven't seen anybody object it.

Either way. I'm not going to discuss in this thread any more. I'll
resend the patches, feel free to comment there.

-- 
Felipe Contreras

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

* Re: [PATCH 2/3] completion: remove old code
  2012-01-30 13:59                 ` Felipe Contreras
@ 2012-01-30 14:02                   ` Jonathan Nieder
  0 siblings, 0 replies; 28+ messages in thread
From: Jonathan Nieder @ 2012-01-30 14:02 UTC (permalink / raw)
  To: Felipe Contreras; +Cc: Frans Klaver, Junio C Hamano, git

Felipe Contreras wrote:

> Either way. I'm not going to discuss in this thread any more. I'll
> resend the patches, feel free to comment there.

Good idea.  Just for the record, I'm not happy with any patch until
I've seen the code. ;-)

Thanks,
Jonathan

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

* Re: [PATCH 1/3] completion: be nicer with zsh
  2012-01-30 10:35     ` Felipe Contreras
@ 2012-01-30 18:07       ` Junio C Hamano
  2012-01-30 18:21         ` Felipe Contreras
  0 siblings, 1 reply; 28+ messages in thread
From: Junio C Hamano @ 2012-01-30 18:07 UTC (permalink / raw)
  To: Felipe Contreras; +Cc: Junio C Hamano, git

Felipe Contreras <felipe.contreras@gmail.com> writes:

> In any case, there's no need for ad hominem arguments; there is a
> problem when using zsh, that's a fact.

There was no ad-hominem argument at all.

Read your two lines I quoted "... the code is now actually understandable
(at least to me), while before it looked like voodoo", which was your
words.  What does it tell the reader?  The patch author (1) did not
understand existing code (voodoo) and (2) the change is a good thing as a
style/readability improvement.

I was saying that I did not want to see that in the justification, because
(2) is not true, while (1) may be.

The patch as-is is a good change that works around issues with zsh's POSIX
emulation, and that is sufficient-enough justification. IOW, we are in
agreement on the later half of your sentence.

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

* Re: [PATCH 1/3] completion: be nicer with zsh
  2012-01-30 18:07       ` Junio C Hamano
@ 2012-01-30 18:21         ` Felipe Contreras
  0 siblings, 0 replies; 28+ messages in thread
From: Felipe Contreras @ 2012-01-30 18:21 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

On Mon, Jan 30, 2012 at 8:07 PM, Junio C Hamano <gitster@pobox.com> wrote:
> Felipe Contreras <felipe.contreras@gmail.com> writes:
>
>> In any case, there's no need for ad hominem arguments; there is a
>> problem when using zsh, that's a fact.
>
> There was no ad-hominem argument at all.
>
> Read your two lines I quoted "... the code is now actually understandable
> (at least to me), while before it looked like voodoo", which was your
> words.  What does it tell the reader?  The patch author (1) did not
> understand existing code (voodoo) and (2) the change is a good thing as a
> style/readability improvement.

I disagree. Another possibility is that the code actually looked like
voodoo (it was obfuscated). You might disagree, but the fact that one
of the main editors (the most used?) doesn't even recognize the syntax
of this code I think is pretty telling.

> I was saying that I did not want to see that in the justification, because
> (2) is not true, while (1) may be.

That's not true: (2) might be true; at least it's debatable.

> The patch as-is is a good change that works around issues with zsh's POSIX
> emulation, and that is sufficient-enough justification. IOW, we are in
> agreement on the later half of your sentence.

So, I shall just remove that part of the explanation?

-- 
Felipe Contreras

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

end of thread, other threads:[~2012-01-30 18:21 UTC | newest]

Thread overview: 28+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-01-29 23:41 [PATCH 0/3] completion: trivial cleanups Felipe Contreras
2012-01-29 23:41 ` [PATCH 1/3] completion: be nicer with zsh Felipe Contreras
2012-01-30  4:34   ` Junio C Hamano
2012-01-30  5:50     ` Junio C Hamano
2012-01-30 10:30       ` Felipe Contreras
2012-01-30 10:35     ` Felipe Contreras
2012-01-30 18:07       ` Junio C Hamano
2012-01-30 18:21         ` Felipe Contreras
2012-01-29 23:41 ` [PATCH 2/3] completion: remove old code Felipe Contreras
2012-01-30  2:36   ` Jonathan Nieder
2012-01-30  3:24     ` Felipe Contreras
2012-01-30  3:27       ` Jonathan Nieder
2012-01-30  4:27       ` Junio C Hamano
2012-01-30 10:51         ` Felipe Contreras
2012-01-30 11:19           ` Frans Klaver
2012-01-30 11:55             ` Felipe Contreras
2012-01-30 12:21               ` Frans Klaver
2012-01-30 13:59                 ` Felipe Contreras
2012-01-30 14:02                   ` Jonathan Nieder
2012-01-29 23:41 ` [PATCH 3/3] completion: remove unused code Felipe Contreras
2012-01-30  2:50   ` Jonathan Nieder
2012-01-30  3:29     ` Jonathan Nieder
2012-01-30  3:30     ` Felipe Contreras
2012-01-30  7:44       ` Thomas Rast
2012-01-30  8:22         ` Junio C Hamano
2012-01-30 10:38           ` Felipe Contreras
2012-01-30 13:19             ` Thomas Rast
2012-01-30 13:51               ` Felipe Contreras

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).