git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH ] "git bisect visualize" results in an invalid error if "gitk" is not installed
@ 2011-03-20 21:10 Maxin john
  2011-03-21 11:29 ` Jeff King
  0 siblings, 1 reply; 4+ messages in thread
From: Maxin john @ 2011-03-20 21:10 UTC (permalink / raw)
  To: Git Mailing List

Hi,

While using "git bisect visualize" on my PC running Ubuntu 10.10, I
came across this error:

$ git bisect visualize
eval: 1: gitk: not found
git: 'bisect' is not a git command. See 'git --help'.

Did you mean this?
	bisect
$

As this distribution don't keep "gitk" as a dependency for git,we will
have to install "gitk" as a separate package.
However, I found the error message a bit confusing. So,I have prepared
a "quick and dirty" patch to solve it.
Please let me know your comments.

Signed-off-by: Maxin B. John <maxin@maxinbjohn.info>
---
diff --git a/git-bisect.sh b/git-bisect.sh
index c21e33c..fefe212 100755
--- a/git-bisect.sh
+++ b/git-bisect.sh
@@ -290,7 +290,8 @@ bisect_visualize() {
        then
                case
"${DISPLAY+set}${SESSIONNAME+set}${MSYSTEM+set}${SECURITYSESSIONID+set}"
in
                '')     set git log ;;
-               set*)   set gitk ;;
+               set*)   is_gitk_present
+                       set gitk ;;
                esac
        else
                case "$1" in
diff --git a/git-sh-setup.sh b/git-sh-setup.sh
index aa16b83..5e78b54 100644
--- a/git-sh-setup.sh
+++ b/git-sh-setup.sh
@@ -132,6 +132,14 @@ is_bare_repository () {
        git rev-parse --is-bare-repository
 }

+is_gitk_present () {
+       GIT_GITK=$(which gitk)
+       test -n "$GIT_GITK" || {
+               echo >&2 "Cannot find 'gitk' in the PATH"
+               exit 1
+       }
+}
+
 cd_to_toplevel () {
        cdup=$(git rev-parse --show-toplevel) &&
        cd "$cdup" || {

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

* Re: [PATCH ] "git bisect visualize" results in an invalid error if "gitk" is not installed
  2011-03-20 21:10 [PATCH ] "git bisect visualize" results in an invalid error if "gitk" is not installed Maxin john
@ 2011-03-21 11:29 ` Jeff King
  2011-03-21 12:26   ` Maxin john
  0 siblings, 1 reply; 4+ messages in thread
From: Jeff King @ 2011-03-21 11:29 UTC (permalink / raw)
  To: Maxin john; +Cc: Git Mailing List

On Sun, Mar 20, 2011 at 11:10:55PM +0200, Maxin john wrote:

> While using "git bisect visualize" on my PC running Ubuntu 10.10, I
> came across this error:
> 
> $ git bisect visualize
> eval: 1: gitk: not found
> git: 'bisect' is not a git command. See 'git --help'.
> 
> Did you mean this?
> 	bisect
> $

Yuck. Definitely non-optimal.

> diff --git a/git-bisect.sh b/git-bisect.sh
> index c21e33c..fefe212 100755
> --- a/git-bisect.sh
> +++ b/git-bisect.sh
> @@ -290,7 +290,8 @@ bisect_visualize() {
>         then
>                 case
> "${DISPLAY+set}${SESSIONNAME+set}${MSYSTEM+set}${SECURITYSESSIONID+set}"
> in
>                 '')     set git log ;;
> -               set*)   set gitk ;;
> +               set*)   is_gitk_present
> +                       set gitk ;;
>                 esac

The point of this code is to use "gitk" if we can (i.e., if we have a
grahpical display of some sort), and "git log" otherwise. Shouldn't "we
are missing gitk" also cause us to fallback to using "git log"? IOW,
something like:

  if test -n "${DISPLAY+set}..." && is_gitk_present; then
    set gitk
  else
    set git log
  fi

> +is_gitk_present () {
> +       GIT_GITK=$(which gitk)
> +       test -n "$GIT_GITK" || {
> +               echo >&2 "Cannot find 'gitk' in the PATH"
> +               exit 1
> +       }
> +}

I don't think this is a portable use of which. In particular, I seem to
recall SunOS which printing some junk to stderr like "no foo in /bin
/usr/bin etc...". I think it even then returns a successful exit code,
just to make it totally useless.

I think we tend to use the shell's "type" builtin for this, which has a
usable exit code.

So the patch would look like:

diff --git a/git-bisect.sh b/git-bisect.sh
index c21e33c..3b3156f 100755
--- a/git-bisect.sh
+++ b/git-bisect.sh
@@ -288,10 +288,12 @@ bisect_visualize() {
 
 	if test $# = 0
 	then
-		case "${DISPLAY+set}${SESSIONNAME+set}${MSYSTEM+set}${SECURITYSESSIONID+set}" in
-		'')	set git log ;;
-		set*)	set gitk ;;
-		esac
+		if test -n "${DISPLAY+set}${SESSIONNAME+set}${MSYSTEM+set}${SECURITYSESSIONID+set}" &&
+		   type gitk >/dev/null 2>&1; then
+			set gitk
+		else
+			set git log
+		fi
 	else
 		case "$1" in
 		git*|tig) ;;

but I didn't test it at all.

-Peff

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

* Re: [PATCH ] "git bisect visualize" results in an invalid error if "gitk" is not installed
  2011-03-21 11:29 ` Jeff King
@ 2011-03-21 12:26   ` Maxin john
  2011-03-21 13:14     ` [PATCH] bisect: visualize with git-log if gitk is unavailable Jeff King
  0 siblings, 1 reply; 4+ messages in thread
From: Maxin john @ 2011-03-21 12:26 UTC (permalink / raw)
  To: Jeff King; +Cc: Git Mailing List

Hi Jeff,

I have tested the patch and it works like a charm!.

Tested-by: Maxin B. John <maxin@maxinbjohn.info>


On Mon, Mar 21, 2011 at 12:29 PM, Jeff King <peff@peff.net> wrote:
> On Sun, Mar 20, 2011 at 11:10:55PM +0200, Maxin john wrote:
>
>> While using "git bisect visualize" on my PC running Ubuntu 10.10, I
>> came across this error:
>>
>> $ git bisect visualize
>> eval: 1: gitk: not found
>> git: 'bisect' is not a git command. See 'git --help'.
>>
>> Did you mean this?
>>       bisect
>> $
>
> Yuck. Definitely non-optimal.
>
>> diff --git a/git-bisect.sh b/git-bisect.sh
>> index c21e33c..fefe212 100755
>> --- a/git-bisect.sh
>> +++ b/git-bisect.sh
>> @@ -290,7 +290,8 @@ bisect_visualize() {
>>         then
>>                 case
>> "${DISPLAY+set}${SESSIONNAME+set}${MSYSTEM+set}${SECURITYSESSIONID+set}"
>> in
>>                 '')     set git log ;;
>> -               set*)   set gitk ;;
>> +               set*)   is_gitk_present
>> +                       set gitk ;;
>>                 esac
>
> The point of this code is to use "gitk" if we can (i.e., if we have a
> grahpical display of some sort), and "git log" otherwise. Shouldn't "we
> are missing gitk" also cause us to fallback to using "git log"? IOW,
> something like:
>
>  if test -n "${DISPLAY+set}..." && is_gitk_present; then
>    set gitk
>  else
>    set git log
>  fi
>

Yes. it is much better than just exiting if "gitk" is not present.

>> +is_gitk_present () {
>> +       GIT_GITK=$(which gitk)
>> +       test -n "$GIT_GITK" || {
>> +               echo >&2 "Cannot find 'gitk' in the PATH"
>> +               exit 1
>> +       }
>> +}
>
> I don't think this is a portable use of which. In particular, I seem to
> recall SunOS which printing some junk to stderr like "no foo in /bin
> /usr/bin etc...". I think it even then returns a successful exit code,
> just to make it totally useless.
>
> I think we tend to use the shell's "type" builtin for this, which has a
> usable exit code.

"type" seems to be a better choice than using "which" for this case.

> So the patch would look like:
>
> diff --git a/git-bisect.sh b/git-bisect.sh
> index c21e33c..3b3156f 100755
> --- a/git-bisect.sh
> +++ b/git-bisect.sh
> @@ -288,10 +288,12 @@ bisect_visualize() {
>
>        if test $# = 0
>        then
> -               case "${DISPLAY+set}${SESSIONNAME+set}${MSYSTEM+set}${SECURITYSESSIONID+set}" in
> -               '')     set git log ;;
> -               set*)   set gitk ;;
> -               esac
> +               if test -n "${DISPLAY+set}${SESSIONNAME+set}${MSYSTEM+set}${SECURITYSESSIONID+set}" &&
> +                  type gitk >/dev/null 2>&1; then
> +                       set gitk
> +               else
> +                       set git log
> +               fi
>        else
>                case "$1" in
>                git*|tig) ;;
>
> but I didn't test it at all.
>
> -Peff
> --
> To unsubscribe from this list: send the line "unsubscribe git" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>

Warm Regards,
Maxin B. John

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

* [PATCH] bisect: visualize with git-log if gitk is unavailable
  2011-03-21 12:26   ` Maxin john
@ 2011-03-21 13:14     ` Jeff King
  0 siblings, 0 replies; 4+ messages in thread
From: Jeff King @ 2011-03-21 13:14 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git, Maxin john

If gitk is not available in the PATH, bisect ends up
exiting with the shell's 127 error code, confusing the git
wrapper into thinking that bisect is not a git command.

We already fallback to git-log if there doesn't seem to be a
graphical display available. We should do the same if gitk
is not available in our PATH at all. This not only fixes the
ugly error message, but is a much more sensible default than
failing to show the user anything.

Reported by Maxin John.

Tested-by: Maxin B. John <maxin@maxinbjohn.info>
Signed-off-by: Jeff King <peff@peff.net>
---
 git-bisect.sh |   10 ++++++----
 1 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/git-bisect.sh b/git-bisect.sh
index c21e33c..415a8d0 100755
--- a/git-bisect.sh
+++ b/git-bisect.sh
@@ -288,10 +288,12 @@ bisect_visualize() {
 
 	if test $# = 0
 	then
-		case "${DISPLAY+set}${SESSIONNAME+set}${MSYSTEM+set}${SECURITYSESSIONID+set}" in
-		'')	set git log ;;
-		set*)	set gitk ;;
-		esac
+		if test -n "${DISPLAY+set}${SESSIONNAME+set}${MSYSTEM+set}${SECURITYSESSIONID+set}" &&
+		   type gitk >/dev/null 2>&1; then
+			set gitk
+		else
+			set git log
+		fi
 	else
 		case "$1" in
 		git*|tig) ;;
-- 
1.7.2.5.22.g853c5

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

end of thread, other threads:[~2011-03-21 13:14 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-03-20 21:10 [PATCH ] "git bisect visualize" results in an invalid error if "gitk" is not installed Maxin john
2011-03-21 11:29 ` Jeff King
2011-03-21 12:26   ` Maxin john
2011-03-21 13:14     ` [PATCH] bisect: visualize with git-log if gitk is unavailable Jeff King

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 NNTP newsgroup(s).