git-gui: Add more integration options to citool.

- Make citool return nonzero exit code if it did not commit.
- Add a mode where it does not actually commit and simply
  exits with zero code. Commit message is either disabled,
  or simply dumped to GITGUI_EDITMSG before exiting.
- Add an option to immediately start it in amend mode.

Rationale:

1) Use 'git citool --nocommit' instead of mergetool in scripts.
2) Use 'git citool --amend' to edit commits while rebasing.

Signed-off-by: Alexander Gavrilov <angavrilov@gmail.com>
Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
This commit is contained in:
Alexander Gavrilov 2008-09-12 22:43:49 +04:00 committed by Shawn O. Pearce
parent 146ed90f02
commit 1e65c6225d
2 changed files with 83 additions and 6 deletions

View file

@ -948,10 +948,32 @@ blame {
}
citool {
enable_option singlecommit
enable_option retcode
disable_option multicommit
disable_option branch
disable_option transport
while {[llength $argv] > 0} {
set a [lindex $argv 0]
switch -- $a {
--amend {
enable_option initialamend
}
--nocommit {
enable_option nocommit
enable_option nocommitmsg
}
--commitmsg {
disable_option nocommitmsg
}
default {
break
}
}
set argv [lrange $argv 1 end]
}
}
}
@ -1108,6 +1130,20 @@ proc PARENT {} {
return $empty_tree
}
proc force_amend {} {
global selected_commit_type
global HEAD PARENT MERGE_HEAD commit_type
repository_state newType newHEAD newMERGE_HEAD
set HEAD $newHEAD
set PARENT $newHEAD
set MERGE_HEAD $newMERGE_HEAD
set commit_type $newType
set selected_commit_type amend
do_select_commit_type
}
proc rescan {after {honor_trustmtime 1}} {
global HEAD PARENT MERGE_HEAD commit_type
global ui_index ui_workdir ui_comm
@ -1754,11 +1790,19 @@ proc do_gitk {revs} {
}
set is_quitting 0
set ret_code 1
proc do_quit {} {
proc terminate_me {win} {
global ret_code
if {$win ne {.}} return
exit $ret_code
}
proc do_quit {{rc {1}}} {
global ui_comm is_quitting repo_config commit_type
global GITGUI_BCK_exists GITGUI_BCK_i
global ui_comm_spell
global ret_code
if {$is_quitting} return
set is_quitting 1
@ -1813,6 +1857,7 @@ proc do_quit {} {
}
}
set ret_code $rc
destroy .
}
@ -2215,6 +2260,14 @@ if {[is_enabled branch]} {
# -- Commit Menu
#
proc commit_btn_caption {} {
if {[is_enabled nocommit]} {
return [mc "Done"]
} else {
return [mc Commit@@verb]
}
}
if {[is_enabled multicommit] || [is_enabled singlecommit]} {
menu .mbar.commit
@ -2280,7 +2333,7 @@ if {[is_enabled multicommit] || [is_enabled singlecommit]} {
-command do_signoff \
-accelerator $M1T-S
.mbar.commit add command -label [mc Commit@@verb] \
.mbar.commit add command -label [commit_btn_caption] \
-command do_commit \
-accelerator $M1T-Return
lappend disable_on_lock \
@ -2608,7 +2661,7 @@ button .vpane.lower.commarea.buttons.signoff -text [mc "Sign Off"] \
-command do_signoff
pack .vpane.lower.commarea.buttons.signoff -side top -fill x
button .vpane.lower.commarea.buttons.commit -text [mc Commit@@verb] \
button .vpane.lower.commarea.buttons.commit -text [commit_btn_caption] \
-command do_commit
pack .vpane.lower.commarea.buttons.commit -side top -fill x
lappend disable_on_lock \
@ -2618,6 +2671,13 @@ button .vpane.lower.commarea.buttons.push -text [mc Push] \
-command do_push_anywhere
pack .vpane.lower.commarea.buttons.push -side top -fill x
if {[is_enabled nocommitmsg]} {
.vpane.lower.commarea.buttons.signoff configure -state disabled
}
if {[is_enabled nocommit]} {
.vpane.lower.commarea.buttons.push configure -state disabled
}
# -- Commit Message Buffer
#
frame .vpane.lower.commarea.buffer
@ -3199,7 +3259,20 @@ lock_index begin-read
if {![winfo ismapped .]} {
wm deiconify .
}
after 1 do_rescan
after 1 {
if {[is_enabled initialamend]} {
force_amend
} else {
do_rescan
}
if {[is_enabled nocommitmsg]} {
$ui_comm configure -state disabled -background gray
}
}
if {[is_enabled multicommit]} {
after 1000 hint_gc
}
if {[is_enabled retcode]} {
bind . <Destroy> {+terminate_me %W}
}

View file

@ -168,7 +168,7 @@ File %s cannot be committed by this program.
}
}
}
if {!$files_ready && ![string match *merge $curType]} {
if {!$files_ready && ![string match *merge $curType] && ![is_enabled nocommit]} {
info_popup [mc "No changes to commit.
You must stage at least 1 file before you can commit.
@ -177,6 +177,8 @@ You must stage at least 1 file before you can commit.
return
}
if {[is_enabled nocommitmsg]} { do_quit 0 }
# -- A message is required.
#
set msg [string trim [$ui_comm get 1.0 end]]
@ -212,6 +214,8 @@ A good commit message has the following format:
puts $msg_wt $msg
close $msg_wt
if {[is_enabled nocommit]} { do_quit 0 }
# -- Run the pre-commit hook.
#
set fd_ph [githook_read pre-commit]
@ -410,7 +414,7 @@ A rescan will be automatically started now.
set ::GITGUI_BCK_exists 0
}
if {[is_enabled singlecommit]} do_quit
if {[is_enabled singlecommit]} { do_quit 0 }
# -- Update in memory status
#