git@vger.kernel.org list mirror (unofficial, one of many)
 help / color / mirror / code / Atom feed
* [PATCH] more meaningful error message in gitk when git binary is not available
@ 2012-10-01  7:17 Josef Assad
  2012-10-01 13:39 ` Joachim Schmitz
  2012-10-01 17:11 ` Junio C Hamano
  0 siblings, 2 replies; 4+ messages in thread
From: Josef Assad @ 2012-10-01  7:17 UTC (permalink / raw)
  To: git

Hi. I ran across what is a decidedly trivial little issue in gitk. The
TCL/Tk looked simple enough so I am giving you a patch anyhow in case
you want to fix it.

When for whatever reason the git binary is unavailable, gitk would
complain about missing git repository instead, so this patch adds a
check for git binary availability.

In case anyone is curious, I found this issue here:

http://stackoverflow.com/q/11967110/53936



Signed-off-by: Josef Assad <josef@josefassad.com>
---
 gitk-git/gitk |    6 ++++++
 1 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/gitk-git/gitk b/gitk-git/gitk
index d93bd99..7e2e0a7 100755
--- a/gitk-git/gitk
+++ b/gitk-git/gitk
@@ -11680,6 +11680,12 @@ setui $uicolor

 setoptions

+# check that the git executables are available for use
+if [catch {set gitexists [exec which git]}] {
+    show_error {} . [mc "Cannot find a suitable git executable."]
+    exit 1
+}
+
 # check that we can find a .git directory somewhere...
 if {[catch {set gitdir [exec git rev-parse --git-dir]}]} {
     show_error {} . [mc "Cannot find a git repository here."]
-- 
1.7.5.4

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

* Re: [PATCH] more meaningful error message in gitk when git binary is not available
  2012-10-01  7:17 [PATCH] more meaningful error message in gitk when git binary is not available Josef Assad
@ 2012-10-01 13:39 ` Joachim Schmitz
  2012-10-01 17:11 ` Junio C Hamano
  1 sibling, 0 replies; 4+ messages in thread
From: Joachim Schmitz @ 2012-10-01 13:39 UTC (permalink / raw)
  To: git

Josef Assad wrote:
> Hi. I ran across what is a decidedly trivial little issue in gitk. The
> TCL/Tk looked simple enough so I am giving you a patch anyhow in case
> you want to fix it.
> 
> When for whatever reason the git binary is unavailable, gitk would
> complain about missing git repository instead, so this patch adds a
> check for git binary availability.
> 
> In case anyone is curious, I found this issue here:
> 
> http://stackoverflow.com/q/11967110/53936
> 
> 
> 
> Signed-off-by: Josef Assad <josef@josefassad.com>
> ---
> gitk-git/gitk |    6 ++++++
> 1 files changed, 6 insertions(+), 0 deletions(-)
> 
> diff --git a/gitk-git/gitk b/gitk-git/gitk
> index d93bd99..7e2e0a7 100755
> --- a/gitk-git/gitk
> +++ b/gitk-git/gitk
> @@ -11680,6 +11680,12 @@ setui $uicolor
> 
> setoptions
> 
> +# check that the git executables are available for use
> +if [catch {set gitexists [exec which git]}] {

I believe 'which' is not portable, you could use 'type' instead.

> +    show_error {} . [mc "Cannot find a suitable git executable."]
> +    exit 1
> +}
> +
> # check that we can find a .git directory somewhere...
> if {[catch {set gitdir [exec git rev-parse --git-dir]}]} {
>     show_error {} . [mc "Cannot find a git repository here."]

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

* Re: [PATCH] more meaningful error message in gitk when git binary is not available
  2012-10-01  7:17 [PATCH] more meaningful error message in gitk when git binary is not available Josef Assad
  2012-10-01 13:39 ` Joachim Schmitz
@ 2012-10-01 17:11 ` Junio C Hamano
       [not found]   ` <5069D0FE.4000609@josefassad.com>
  1 sibling, 1 reply; 4+ messages in thread
From: Junio C Hamano @ 2012-10-01 17:11 UTC (permalink / raw)
  To: Josef Assad; +Cc: git

Josef Assad <josef@josefassad.com> writes:

> Signed-off-by: Josef Assad <josef@josefassad.com>
> ---
>  gitk-git/gitk |    6 ++++++
>  1 files changed, 6 insertions(+), 0 deletions(-)

Thanks.

> diff --git a/gitk-git/gitk b/gitk-git/gitk
> index d93bd99..7e2e0a7 100755
> --- a/gitk-git/gitk
> +++ b/gitk-git/gitk
> @@ -11680,6 +11680,12 @@ setui $uicolor
>
>  setoptions
>
> +# check that the git executables are available for use
> +if [catch {set gitexists [exec which git]}] {
> +    show_error {} . [mc "Cannot find a suitable git executable."]
> +    exit 1
> +}
> +
>  # check that we can find a .git directory somewhere...
>  if {[catch {set gitdir [exec git rev-parse --git-dir]}]} {
>      show_error {} . [mc "Cannot find a git repository here."]

It is somewhat a stupid solution to add an extra fork that will only
waste cycles in the normal non-error case, especially when we
already have an error codepath that acts on lack of the "git"
command anyway, isn't it?

The "rev-parse" you see in the post-context will fail when we are
not in a git repository, but it will also fail when we do not have
git.

You can add the new check to if {[catch {... git rev-parse }]} block;
before unconditionally saying "cannot find a git repo", you check if
"git" even exists, and give an appropriate error message.  That way,
you do not punish normal use case with an extra useless fork.

Something like this, I presume.


 gitk | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/gitk b/gitk
index d93bd99..60794a7 100755
--- a/gitk
+++ b/gitk
@@ -11682,7 +11682,12 @@ setoptions
 
 # check that we can find a .git directory somewhere...
 if {[catch {set gitdir [exec git rev-parse --git-dir]}]} {
-    show_error {} . [mc "Cannot find a git repository here."]
+    # we could have failed because there is no git to begin with
+    if {[catch {exec git version}]} {
+        show_error {} . [mc "You do not seem to have 'git' command."]
+    } else {
+        show_error {} . [mc "Cannot find a git repository here."]
+    }
     exit 1
 }
 

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

* Re: [PATCH] more meaningful error message in gitk when git binary is not available
       [not found]   ` <5069D0FE.4000609@josefassad.com>
@ 2012-10-01 17:24     ` Josef Assad
  0 siblings, 0 replies; 4+ messages in thread
From: Josef Assad @ 2012-10-01 17:24 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

On 10/01/2012 07:21 PM, Josef Assad wrote:
> On 10/01/2012 07:11 PM, Junio C Hamano wrote:
>> Josef Assad <josef@josefassad.com> writes:
>>
>>> Signed-off-by: Josef Assad <josef@josefassad.com>
>>> ---
>>>  gitk-git/gitk |    6 ++++++
>>>  1 files changed, 6 insertions(+), 0 deletions(-)
>>
>> Thanks.
>>
>>> diff --git a/gitk-git/gitk b/gitk-git/gitk
>>> index d93bd99..7e2e0a7 100755
>>> --- a/gitk-git/gitk
>>> +++ b/gitk-git/gitk
>>> @@ -11680,6 +11680,12 @@ setui $uicolor
>>>
>>>  setoptions
>>>
>>> +# check that the git executables are available for use
>>> +if [catch {set gitexists [exec which git]}] {
>>> +    show_error {} . [mc "Cannot find a suitable git executable."]
>>> +    exit 1
>>> +}
>>> +
>>>  # check that we can find a .git directory somewhere...
>>>  if {[catch {set gitdir [exec git rev-parse --git-dir]}]} {
>>>      show_error {} . [mc "Cannot find a git repository here."]
>>
>> It is somewhat a stupid solution to add an extra fork that will only
>> waste cycles in the normal non-error case, especially when we
>> already have an error codepath that acts on lack of the "git"
>> command anyway, isn't it?
> 
> I don't think it's actually _stupid_, but I also think your solution
> works better if you're trying to avoid one more exec call.
> 
> Mine has one less level of indentation though, and it has clearer
> delineation between checking for and handling two distinct error
> conditions. :)
> 
>> The "rev-parse" you see in the post-context will fail when we are
>> not in a git repository, but it will also fail when we do not have
>> git.
>>
>> You can add the new check to if {[catch {... git rev-parse }]} block;
>> before unconditionally saying "cannot find a git repo", you check if
>> "git" even exists, and give an appropriate error message.  That way,
>> you do not punish normal use case with an extra useless fork.
>>
>> Something like this, I presume.
>>
>>
>>  gitk | 7 ++++++-
>>  1 file changed, 6 insertions(+), 1 deletion(-)
>>
>> diff --git a/gitk b/gitk
>> index d93bd99..60794a7 100755
>> --- a/gitk
>> +++ b/gitk
>> @@ -11682,7 +11682,12 @@ setoptions
>>  
>>  # check that we can find a .git directory somewhere...
>>  if {[catch {set gitdir [exec git rev-parse --git-dir]}]} {
>> -    show_error {} . [mc "Cannot find a git repository here."]
>> +    # we could have failed because there is no git to begin with
>> +    if {[catch {exec git version}]} {
>> +        show_error {} . [mc "You do not seem to have 'git' command."]
>> +    } else {
>> +        show_error {} . [mc "Cannot find a git repository here."]
>> +    }
>>      exit 1
>>  }
> 
> I'm neutral though and not married to my patch in any way, just trying
> to be helpful. In my opinon, yours is cleaner, mine is a tiny bit more
> readable in a file already closing on 12k lines.
> 

Bah, forgot to Cc list. My bad.

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

end of thread, other threads:[~2012-10-01 17:24 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-10-01  7:17 [PATCH] more meaningful error message in gitk when git binary is not available Josef Assad
2012-10-01 13:39 ` Joachim Schmitz
2012-10-01 17:11 ` Junio C Hamano
     [not found]   ` <5069D0FE.4000609@josefassad.com>
2012-10-01 17:24     ` Josef Assad

Code repositories for project(s) associated with this 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).