Teach directory traversal about subprojects
[gitweb.git] / git-gui / git-gui.sh
index f84ba3382b3078ee6de45bddfacd650973068303..60e79ca1b01bc8b057abe17ddab484699a7f5fdb 100755 (executable)
@@ -19,9 +19,6 @@ GNU General Public License for more details.
 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA}
-set gitgui_credits {
-Paul Mackerras
-}
 
 ######################################################################
 ##
@@ -302,6 +299,11 @@ proc ask_popup {msg} {
 ##
 ## version check
 
+if {{--version} eq $argv || {version} eq $argv} {
+       puts "git-gui version $appvers"
+       exit
+}
+
 set req_maj 1
 set req_min 5
 
@@ -1171,7 +1173,7 @@ File [short_path $path] cannot be committed by this program.
                }
                }
        }
-       if {!$files_ready} {
+       if {!$files_ready && ![string match *merge $curType]} {
                info_popup {No changes to commit.
 
 You must add at least 1 file before you can commit.
@@ -1267,6 +1269,24 @@ proc commit_committree {fd_wt curHEAD msg} {
                return
        }
 
+       # -- Verify this wasn't an empty change.
+       #
+       if {$commit_type eq {normal}} {
+               set old_tree [git rev-parse "$PARENT^{tree}"]
+               if {$tree_id eq $old_tree} {
+                       info_popup {No changes to commit.
+
+No files were modified by this commit and it
+was not a merge commit.
+
+A rescan will be automatically started now.
+}
+                       unlock_index
+                       rescan {set ui_status_value {No changes to commit.}}
+                       return
+               }
+       }
+
        # -- Build the message.
        #
        set msg_p [gitdir COMMIT_EDITMSG]
@@ -1281,14 +1301,8 @@ proc commit_committree {fd_wt curHEAD msg} {
        # -- Create the commit.
        #
        set cmd [list git commit-tree $tree_id]
-       set parents [concat $PARENT $MERGE_HEAD]
-       if {[llength $parents] > 0} {
-               foreach p $parents {
-                       lappend cmd -p $p
-               }
-       } else {
-               # git commit-tree writes to stderr during initial commit.
-               lappend cmd 2>/dev/null
+       foreach p [concat $PARENT $MERGE_HEAD] {
+               lappend cmd -p $p
        }
        lappend cmd <$msg_p
        if {[catch {set cmt_id [eval exec $cmd]} err]} {
@@ -4480,61 +4494,6 @@ proc do_commit {} {
        commit_tree
 }
 
-proc do_credits {} {
-       global gitgui_credits
-
-       set w .credits_dialog
-
-       toplevel $w
-       wm geometry $w "+[winfo rootx .]+[winfo rooty .]"
-
-       label $w.header -text {git-gui Contributors} -font font_uibold
-       pack $w.header -side top -fill x
-
-       frame $w.buttons
-       button $w.buttons.close -text {Close} \
-               -font font_ui \
-               -command [list destroy $w]
-       pack $w.buttons.close -side right
-       pack $w.buttons -side bottom -fill x -pady 10 -padx 10
-
-       frame $w.credits
-       text $w.credits.t \
-               -background [$w.header cget -background] \
-               -yscrollcommand [list $w.credits.sby set] \
-               -width 20 \
-               -height 10 \
-               -wrap none \
-               -borderwidth 1 \
-               -relief solid \
-               -padx 5 -pady 5 \
-               -font font_ui
-       scrollbar $w.credits.sby -command [list $w.credits.t yview]
-       pack $w.credits.sby -side right -fill y
-       pack $w.credits.t -fill both -expand 1
-       pack $w.credits -side top -fill both -expand 1 -padx 5 -pady 5
-
-       label $w.desc \
-               -text "All portions are copyrighted by their respective authors
-and are distributed under the GNU General Public License." \
-               -padx 5 -pady 5 \
-               -justify left \
-               -anchor w \
-               -borderwidth 1 \
-               -relief solid \
-               -font font_ui
-       pack $w.desc -side top -fill x -padx 5 -pady 5
-
-       $w.credits.t insert end "[string trim $gitgui_credits]\n"
-       $w.credits.t conf -state disabled
-       $w.credits.t see 1.0
-
-       bind $w <Visibility> "grab $w; focus $w"
-       bind $w <Key-Escape> [list destroy $w]
-       wm title $w [$w.header cget -text]
-       tkwait window $w
-}
-
 proc do_about {} {
        global appvers copyright
        global tcl_patchLevel tk_patchLevel
@@ -4551,10 +4510,6 @@ proc do_about {} {
        button $w.buttons.close -text {Close} \
                -font font_ui \
                -command [list destroy $w]
-       button $w.buttons.credits -text {Contributors} \
-               -font font_ui \
-               -command do_credits
-       pack $w.buttons.credits -side left
        pack $w.buttons.close -side right
        pack $w.buttons -side bottom -fill x -pady 10 -padx 10
 
@@ -5104,8 +5059,6 @@ enable_option branch
 enable_option transport
 
 switch -- $subcommand {
---version -
-version -
 browser -
 blame {
        disable_option multicommit
@@ -5256,6 +5209,12 @@ if {[is_enabled branch]} {
                -font font_ui
        lappend disable_on_lock [list .mbar.branch entryconf \
                [.mbar.branch index last] -state]
+
+       .mbar.branch add command -label {Reset...} \
+               -command do_reset_hard \
+               -font font_ui
+       lappend disable_on_lock [list .mbar.branch entryconf \
+               [.mbar.branch index last] -state]
 }
 
 # -- Commit Menu
@@ -5330,6 +5289,34 @@ if {[is_enabled multicommit] || [is_enabled singlecommit]} {
                [list .mbar.commit entryconf [.mbar.commit index last] -state]
 }
 
+# -- Merge Menu
+#
+if {[is_enabled branch]} {
+       menu .mbar.merge
+       .mbar.merge add command -label {Local Merge...} \
+               -command do_local_merge \
+               -font font_ui
+       lappend disable_on_lock \
+               [list .mbar.merge entryconf [.mbar.merge index last] -state]
+       .mbar.merge add command -label {Abort Merge...} \
+               -command do_reset_hard \
+               -font font_ui
+       lappend disable_on_lock \
+               [list .mbar.merge entryconf [.mbar.merge index last] -state]
+
+}
+
+# -- Transport Menu
+#
+if {[is_enabled transport]} {
+       menu .mbar.fetch
+
+       menu .mbar.push
+       .mbar.push add command -label {Push...} \
+               -command do_push_anywhere \
+               -font font_ui
+}
+
 if {[is_MacOSX]} {
        # -- Apple Menu (Mac OS X only)
        #
@@ -5442,11 +5429,6 @@ bind all <$M1B-Key-W> {destroy [winfo toplevel %W]}
 # -- Not a normal commit type invocation?  Do that instead!
 #
 switch -- $subcommand {
---version -
-version {
-       puts "git-gui version $appvers"
-       exit
-}
 browser {
        if {[llength $argv] != 1} {
                puts stderr "usage: $argv0 browser commit"
@@ -5502,28 +5484,6 @@ pack .branch.l1 -side left
 pack .branch.cb -side left -fill x
 pack .branch -side top -fill x
 
-if {[is_enabled branch]} {
-       menu .mbar.merge
-       .mbar.merge add command -label {Local Merge...} \
-               -command do_local_merge \
-               -font font_ui
-       lappend disable_on_lock \
-               [list .mbar.merge entryconf [.mbar.merge index last] -state]
-       .mbar.merge add command -label {Abort Merge...} \
-               -command do_reset_hard \
-               -font font_ui
-       lappend disable_on_lock \
-               [list .mbar.merge entryconf [.mbar.merge index last] -state]
-
-
-       menu .mbar.fetch
-
-       menu .mbar.push
-       .mbar.push add command -label {Push...} \
-               -command do_push_anywhere \
-               -font font_ui
-}
-
 # -- Main Window Layout
 #
 panedwindow .vpane -orient vertical