set s [gets $f]
close $f
- switch -glob -- $s {
+ switch -glob -- [lindex $s 0] {
#!*sh { set i sh }
#!*perl { set i perl }
#!*python { set i python }
if {$interp eq {}} {
error "git-$name requires $i (not in PATH)"
}
- set v [list $interp $p]
+ set v [concat [list $interp] [lrange $s 1 end] [list $p]]
} else {
# Assume it is builtin to git somehow and we
# aren't actually able to see a file for it.
error_popup "Git directory not found:\n\n$_gitdir"
exit 1
}
-if {![is_enabled bare]} {
+if {$_prefix ne {}} {
+ regsub -all {[^/]+/} $_prefix ../ cdup
+ if {[catch {cd $cdup} err]} {
+ catch {wm withdraw .}
+ error_popup "Cannot move to top of working directory:\n\n$err"
+ exit 1
+ }
+ unset cdup
+} elseif {![is_enabled bare]} {
if {[lindex [file split $_gitdir] end] ne {.git}} {
catch {wm withdraw .}
error_popup "Cannot use funny .git directory:\n\n$_gitdir"
set current_branch {}
set is_detached 0
set current_diff_path {}
+set is_3way_diff 0
set selected_commit_type new
######################################################################
set ::cursorX $x
set ::cursorY $y
if {$::ui_index eq $::current_diff_side} {
- $ctxm entryconf $::ui_diff_applyhunk \
- -state normal \
- -label {Unstage Hunk From Commit}
- } elseif {$current_diff_path eq {}
- || ![info exists file_states($current_diff_path)]
- || {_O} eq [lindex $file_states($current_diff_path) 0]} {
- $ctxm entryconf $::ui_diff_applyhunk \
- -state disabled \
- -label {Stage Hunk For Commit}
+ set s normal
+ set l "Unstage Hunk From Commit"
} else {
- $ctxm entryconf $::ui_diff_applyhunk \
- -state normal \
- -label {Stage Hunk For Commit}
+ if {$current_diff_path eq {}
+ || ![info exists file_states($current_diff_path)]
+ || {_O} eq [lindex $file_states($current_diff_path) 0]} {
+ set s disabled
+ } else {
+ set s normal
+ }
+ set l "Stage Hunk For Commit"
+ }
+ if {$::is_3way_diff} {
+ set s disabled
}
+ $ctxm entryconf $::ui_diff_applyhunk -state $s -label $l
tk_popup $ctxm $X $Y
}
bind_button3 $ui_diff [list popup_diff_menu $ctxm %x %y %X %Y]