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>
maint
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
#