Browse Source

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>
maint
Shawn O. Pearce 18 years ago
parent
commit
85d2d59760
  1. 38
      git-gui.sh
  2. 10
      lib/browser.tcl

38
git-gui.sh

@ -1976,27 +1976,7 @@ proc usage {} { @@ -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 { @@ -2044,12 +2024,26 @@ blame {
set current_branch $head
}

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
}
}
return
}
citool -

10
lib/browser.tcl

@ -13,13 +13,13 @@ field browser_busy 1 @@ -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} { @@ -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
}


Loading…
Cancel
Save