Merge branch 'maint'
authorShawn O. Pearce <spearce@spearce.org>
Thu, 12 Jul 2007 06:40:54 +0000 (02:40 -0400)
committerShawn O. Pearce <spearce@spearce.org>
Thu, 12 Jul 2007 06:40:54 +0000 (02:40 -0400)
* maint:
git-gui: Work around bad interaction between Tcl and cmd.exe on ^{tree}

1  2 
lib/commit.tcl
diff --combined lib/commit.tcl
index dc7c88c6017bcb390c599f8b904ad3e7c31cc7d2,e139f4da2b84718d74dce0e9286dedd3cd8465c5..3172d7cb60b87cfb5d681d511fe9c5442749793c
@@@ -25,7 -25,7 +25,7 @@@ You are currently in the middle of a me
        set msg {}
        set parents [list]
        if {[catch {
 -                      set fd [open "| git cat-file commit $curHEAD" r]
 +                      set fd [git_read cat-file commit $curHEAD]
                        fconfigure $fd -encoding binary -translation lf
                        if {[catch {set enc $repo_config(i18n.commitencoding)}]} {
                                set enc utf-8
@@@ -58,7 -58,7 +58,7 @@@
        $ui_comm insert end $msg
        $ui_comm edit reset
        $ui_comm edit modified false
 -      rescan {set ui_status_value {Ready.}}
 +      rescan ui_ready
  }
  
  set GIT_COMMITTER_IDENT {}
@@@ -108,12 -108,12 +108,12 @@@ proc create_new_commit {} 
        $ui_comm delete 0.0 end
        $ui_comm edit reset
        $ui_comm edit modified false
 -      rescan {set ui_status_value {Ready.}}
 +      rescan ui_ready
  }
  
  proc commit_tree {} {
        global HEAD commit_type file_states ui_comm repo_config
 -      global ui_status_value pch_error
 +      global pch_error
  
        if {[committer_ident] eq {}} return
        if {![lock_index update]} return
@@@ -132,7 -132,7 +132,7 @@@ Another Git program has modified this r
  The rescan will be automatically started now.
  }
                unlock_index
 -              rescan {set ui_status_value {Ready.}}
 +              rescan ui_ready
                return
        }
  
@@@ -206,7 -206,7 +206,7 @@@ A good commit message has the followin
                return
        }
  
 -      set ui_status_value {Calling pre-commit hook...}
 +      ui_status {Calling pre-commit hook...}
        set pch_error {}
        set fd_ph [open "| $pchook" r]
        fconfigure $fd_ph -blocking 0 -translation binary
  }
  
  proc commit_prehook_wait {fd_ph curHEAD msg} {
 -      global pch_error ui_status_value
 +      global pch_error
  
        append pch_error [read $fd_ph]
        fconfigure $fd_ph -blocking 1
        if {[eof $fd_ph]} {
                if {[catch {close $fd_ph}]} {
 -                      set ui_status_value {Commit declined by pre-commit hook.}
 +                      ui_status {Commit declined by pre-commit hook.}
                        hook_failed_popup pre-commit $pch_error
                        unlock_index
                } else {
  }
  
  proc commit_writetree {curHEAD msg} {
 -      global ui_status_value
 -
 -      set ui_status_value {Committing changes...}
 -      set fd_wt [open "| git write-tree" r]
 +      ui_status {Committing changes...}
 +      set fd_wt [git_read write-tree]
        fileevent $fd_wt readable \
                [list commit_committree $fd_wt $curHEAD $msg]
  }
  
  proc commit_committree {fd_wt curHEAD msg} {
        global HEAD PARENT MERGE_HEAD commit_type
 -      global all_heads current_branch
 -      global ui_status_value ui_comm selected_commit_type
 +      global current_branch
 +      global ui_comm selected_commit_type
        global file_states selected_paths rescan_active
        global repo_config
  
        gets $fd_wt tree_id
        if {$tree_id eq {} || [catch {close $fd_wt} err]} {
                error_popup "write-tree failed:\n\n$err"
 -              set ui_status_value {Commit failed.}
 +              ui_status {Commit failed.}
                unlock_index
                return
        }
        # -- Verify this wasn't an empty change.
        #
        if {$commit_type eq {normal}} {
-               set old_tree [git rev-parse "$PARENT^{tree}"]
+               set fd_ot [open "| git cat-file commit $PARENT" r]
+               fconfigure $fd_ot -encoding binary -translation lf
+               set old_tree [gets $fd_ot]
+               close $fd_ot
+               if {[string equal -length 5 {tree } $old_tree]
+                       && [string length $old_tree] == 45} {
+                       set old_tree [string range $old_tree 5 end]
+               } else {
+                       error "Commit $PARENT appears to be corrupt"
+               }
                if {$tree_id eq $old_tree} {
                        info_popup {No changes to commit.
  
@@@ -267,7 -280,7 +278,7 @@@ No files were modified by this commit a
  A rescan will be automatically started now.
  }
                        unlock_index
 -                      rescan {set ui_status_value {No changes to commit.}}
 +                      rescan {ui_status {No changes to commit.}}
                        return
                }
        }
        lappend cmd <$msg_p
        if {[catch {set cmt_id [eval git $cmd]} err]} {
                error_popup "commit-tree failed:\n\n$err"
 -              set ui_status_value {Commit failed.}
 +              ui_status {Commit failed.}
                unlock_index
                return
        }
                        git update-ref -m $reflogm HEAD $cmt_id $curHEAD
                } err]} {
                error_popup "update-ref failed:\n\n$err"
 -              set ui_status_value {Commit failed.}
 +              ui_status {Commit failed.}
                unlock_index
                return
        }
  
        # -- Let rerere do its thing.
        #
 -      if {[file isdirectory [gitdir rr-cache]]} {
 +      if {[get_config rerere.enabled] eq {}} {
 +              set rerere [file isdirectory [gitdir rr-cache]]
 +      } else {
 +              set rerere [is_config_true rerere.enabled]
 +      }
 +      if {$rerere} {
                catch {git rerere}
        }
  
  
        if {[is_enabled singlecommit]} do_quit
  
 -      # -- Make sure our current branch exists.
 -      #
 -      if {$commit_type eq {initial}} {
 -              lappend all_heads $current_branch
 -              set all_heads [lsort -unique $all_heads]
 -              populate_branch_menu
 -      }
 -
        # -- Update in memory status
        #
        set selected_commit_type new
        display_all_files
        unlock_index
        reshow_diff
 -      set ui_status_value \
 -              "Created commit [string range $cmt_id 0 7]: $subject"
 +      ui_status "Created commit [string range $cmt_id 0 7]: $subject"
  }