Code

git-gui: Select subcommands like git does.
authorShawn O. Pearce <spearce@spearce.org>
Fri, 9 Feb 2007 00:41:32 +0000 (19:41 -0500)
committerShawn O. Pearce <spearce@spearce.org>
Fri, 9 Feb 2007 00:41:32 +0000 (19:41 -0500)
If we are invoked as `git-foo`, then we should run the `foo` subcommand,
as the user has made some sort of link from `git-foo` to our actual
program code.  So we should honor their request.

If we are invoked as `git-gui foo`, the user has not made a link (or
did, but is not using it right now) so we should execute the `foo`
subcommand.

We now can start the single commit UI mode via `git-citool` and also
through `git gui citool`.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
git-gui.sh

index 66d85dc6d06cffae2c5e13068886ce50042cbef1..ff5f5a763db038b37056fcb70ef6c963ab150fd2 100755 (executable)
@@ -4917,20 +4917,32 @@ apply_config
 ##
 ## feature option selection
 
+if {[regexp {^git-(.+)$} [appname] _junk subcommand]} {
+       unset _junk
+} else {
+       set subcommand gui
+}
+if {$subcommand eq {gui.sh}} {
+       set subcommand gui
+}
+if {$subcommand eq {gui} && [llength $argv] > 0} {
+       set subcommand [lindex $argv 0]
+       set argv [lrange $argv 1 end]
+}
+
 enable_option multicommit
 enable_option branch
 enable_option transport
 
-if {[appname] eq {git-citool}} {
-       enable_option singlecommit
-
+switch -- $subcommand {
+blame {
        disable_option multicommit
        disable_option branch
        disable_option transport
 }
+citool {
+       enable_option singlecommit
 
-switch -- [lindex $argv 0] {
-blame {
        disable_option multicommit
        disable_option branch
        disable_option transport
@@ -5257,20 +5269,30 @@ bind all <$M1B-Key-W> {destroy [winfo toplevel %W]}
 
 # -- Not a normal commit type invocation?  Do that instead!
 #
-switch -- [lindex $argv 0] {
+switch -- $subcommand {
 blame {
-       if {[llength $argv] == 3} {
-               set current_branch [lindex $argv 1]
-               show_blame $current_branch [lindex $argv 2]
-               return
-       } else {
+       if {[llength $argv] != 2} {
                puts stderr "usage: $argv0 blame commit path"
                exit 1
        }
+       set current_branch [lindex $argv 0]
+       show_blame $current_branch [lindex $argv 1]
+       return
+}
+citool -
+gui {
+       if {[llength $argv] != 0} {
+               puts -nonewline stderr "usage: $argv0"
+               if {$subcommand ne {gui} && [appname] ne "git-$subcommand"} {
+                       puts -nonewline stderr " $subcommand"
+               }
+               puts stderr {}
+               exit 1
+       }
+       # fall through to setup UI for commits
 }
-{} {}
 default {
-       puts stderr "usage: $argv0 \[{blame}\]"
+       puts stderr "usage: $argv0 \[{blame|citool}\]"
        exit 1
 }
 }