diff options
| -rwxr-xr-x | git-gui.sh | 20 | ||||
| -rw-r--r-- | lib/blame.tcl | 16 | 
2 files changed, 25 insertions, 11 deletions
| diff --git a/git-gui.sh b/git-gui.sh index e90cdde96c..62b1a36a8a 100755 --- a/git-gui.sh +++ b/git-gui.sh @@ -1605,6 +1605,7 @@ browser {  }  blame {  	set subcommand_args {rev? path?} +	set head {}  	set path {}  	set is_path 0  	foreach a $argv { @@ -1614,27 +1615,30 @@ blame {  			break  		} elseif {$a eq {--}} {  			if {$path ne {}} { -				if {$current_branch ne {}} usage -				set current_branch $path +				if {$head ne {}} usage +				set head $path  				set path {}  			}  			set is_path 1 -		} elseif {$current_branch eq {}} { -			if {$current_branch ne {}} usage -			set current_branch $a +		} elseif {$head eq {}} { +			if {$head ne {}} usage +			set head $a  		} else {  			usage  		}  	}  	unset is_path -	if {$current_branch eq {} && $path ne {}} { +	if {$head eq {}} {  		set current_branch [git symbolic-ref HEAD]  		regsub ^refs/((heads|tags|remotes)/)? \  			$current_branch {} current_branch +	} else { +		set current_branch $head  	} -	if {$current_branch eq {} || $path eq {}} usage -	blame::new $current_branch $path + +	if {$path eq {}} usage +	blame::new $head $path  	return  }  citool - diff --git a/lib/blame.tcl b/lib/blame.tcl index 37ce3e7a86..8ac0104187 100644 --- a/lib/blame.tcl +++ b/lib/blame.tcl @@ -170,8 +170,12 @@ constructor new {i_commit i_path} {  	bind $top <Visibility> "focus $top"  	bind $top <Destroy> [list delete_this $this] -	set cmd [list git cat-file blob "$commit:$path"] -	set fd [open "| $cmd" r] +	if {$commit eq {}} { +		set fd [open $path r] +	} else { +		set cmd [list git cat-file blob "$commit:$path"] +		set fd [open "| $cmd" r] +	}  	fconfigure $fd -blocking 0 -translation lf -encoding binary  	fileevent $fd readable [cb _read_file $fd]  } @@ -194,7 +198,13 @@ method _read_file {fd} {  	if {[eof $fd]} {  		close $fd  		_status $this -		set cmd [list git blame -M -C --incremental $commit -- $path] +		set cmd [list git blame -M -C --incremental] +		if {$commit eq {}} { +			lappend cmd --contents $path +		} else { +			lappend cmd $commit +		} +		lappend cmd -- $path  		set fd [open "| $cmd" r]  		fconfigure $fd -blocking 0 -translation lf -encoding binary  		fileevent $fd readable [cb _read_blame $fd] | 
