git-gui: Allow browser subcommand to start in subdirectory

Like our blame subcommand the browser subcommand now accepts both
a revision and a path, just a revision or just a path.  This way
the user can start the subcommand on any branch, or on any subtree.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
This commit is contained in:
Shawn O. Pearce 2007-07-18 00:53:14 -04:00
parent c52c94524b
commit 85d2d59760
2 changed files with 27 additions and 29 deletions

View File

@ -1976,27 +1976,7 @@ proc usage {} {
# -- Not a normal commit type invocation? Do that instead! # -- Not a normal commit type invocation? Do that instead!
# #
switch -- $subcommand { switch -- $subcommand {
browser { browser -
set subcommand_args {rev?}
switch [llength $argv] {
0 { load_current_branch }
1 {
set current_branch [lindex $argv 0]
if {[regexp {^[0-9a-f]{1,39}$} $current_branch]} {
if {[catch {
set current_branch \
[git rev-parse --verify $current_branch]
} err]} {
puts stderr $err
exit 1
}
}
}
default usage
}
browser::new $current_branch
return
}
blame { blame {
set subcommand_args {rev? path} set subcommand_args {rev? path}
if {$argv eq {}} usage if {$argv eq {}} usage
@ -2044,12 +2024,26 @@ blame {
set current_branch $head set current_branch $head
} }
if {$head eq {} && ![file exists $path]} { switch -- $subcommand {
puts stderr "fatal: cannot stat path $path: No such file or directory" browser {
exit 1 if {$head eq {}} {
if {$path ne {} && [file isdirectory $path]} {
set head $current_branch
} else {
set head $path
set path {}
}
}
browser::new $head $path
}
blame {
if {$head eq {} && ![file exists $path]} {
puts stderr "fatal: cannot stat path $path: No such file or directory"
exit 1
}
blame::new $head $path
}
} }
blame::new $head $path
return return
} }
citool - citool -

View File

@ -13,13 +13,13 @@ field browser_busy 1
field ls_buf {}; # Buffered record output from ls-tree field ls_buf {}; # Buffered record output from ls-tree
constructor new {commit} { constructor new {commit {path {}}} {
global cursor_ptr M1B global cursor_ptr M1B
make_toplevel top w make_toplevel top w
wm title $top "[appname] ([reponame]): File Browser" wm title $top "[appname] ([reponame]): File Browser"
set browser_commit $commit set browser_commit $commit
set browser_path $browser_commit: set browser_path $browser_commit:$path
label $w.path \ label $w.path \
-textvariable @browser_path \ -textvariable @browser_path \
@ -73,7 +73,11 @@ constructor new {commit} {
bind $w_list <Visibility> [list focus $w_list] bind $w_list <Visibility> [list focus $w_list]
set w $w_list set w $w_list
_ls $this $browser_commit if {$path ne {}} {
_ls $this $browser_commit:$path $path
} else {
_ls $this $browser_commit $path
}
return $this return $this
} }