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:
parent
c52c94524b
commit
85d2d59760
46
git-gui.sh
46
git-gui.sh
@ -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 -
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user