aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShawn O. Pearce <spearce@spearce.org>2007-07-18 00:53:14 -0400
committerShawn O. Pearce <spearce@spearce.org>2007-07-18 00:53:14 -0400
commit85d2d59760e5de7f288109cb278eb91da0d5f9bf (patch)
tree1bd8c58da334fce06da06b975d5553d84b294512
parentc52c94524bdf9bbe515137b7f3f0240bc10a7f63 (diff)
downloadgit-85d2d59760e5de7f288109cb278eb91da0d5f9bf.tar.gz
git-85d2d59760e5de7f288109cb278eb91da0d5f9bf.tar.xz
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>
-rwxr-xr-xgit-gui.sh46
-rw-r--r--lib/browser.tcl10
2 files changed, 27 insertions, 29 deletions
diff --git a/git-gui.sh b/git-gui.sh
index 9ddb61ea9..267d60621 100755
--- a/git-gui.sh
+++ b/git-gui.sh
@@ -1976,27 +1976,7 @@ proc usage {} {
# -- Not a normal commit type invocation? Do that instead!
#
switch -- $subcommand {
-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
-}
+browser -
blame {
set subcommand_args {rev? path}
if {$argv eq {}} usage
@@ -2044,12 +2024,26 @@ blame {
set current_branch $head
}
- if {$head eq {} && ![file exists $path]} {
- puts stderr "fatal: cannot stat path $path: No such file or directory"
- exit 1
+ switch -- $subcommand {
+ browser {
+ 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
}
citool -
diff --git a/lib/browser.tcl b/lib/browser.tcl
index 911e5af7f..e8802d001 100644
--- a/lib/browser.tcl
+++ b/lib/browser.tcl
@@ -13,13 +13,13 @@ field browser_busy 1
field ls_buf {}; # Buffered record output from ls-tree
-constructor new {commit} {
+constructor new {commit {path {}}} {
global cursor_ptr M1B
make_toplevel top w
wm title $top "[appname] ([reponame]): File Browser"
set browser_commit $commit
- set browser_path $browser_commit:
+ set browser_path $browser_commit:$path
label $w.path \
-textvariable @browser_path \
@@ -73,7 +73,11 @@ constructor new {commit} {
bind $w_list <Visibility> [list focus $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
}