Merge branch 'maint'
authorShawn O. Pearce <spearce@spearce.org>
Fri, 14 Sep 2007 00:13:59 +0000 (20:13 -0400)
committerShawn O. Pearce <spearce@spearce.org>
Fri, 14 Sep 2007 00:13:59 +0000 (20:13 -0400)
* maint:
  git-gui: Paper bag fix "Commit->Revert" format arguments
  git-gui: Provide 'uninstall' Makefile target to undo an installation
  git-gui: Font chooser to handle a large number of font families

1  2 
Makefile
lib/index.tcl
lib/option.tcl

diff --combined Makefile
index 5b1ff914944a52dcc4519425562e34d6ceea3662,18e67501375c10beebd5ec3a4d73a07aedaca81f..8c87d836d8307098e4c7d6dfbc9d830a253dd0aa
+++ b/Makefile
@@@ -31,6 -31,9 +31,9 @@@ ifndef INSTAL
        INSTALL = install
  endif
  
+ RM_F      ?= rm -f
+ RMDIR     ?= rmdir
  INSTALL_D0 = $(INSTALL) -d -m755 # space is required here
  INSTALL_D1 =
  INSTALL_R0 = $(INSTALL) -m644 # space is required here
@@@ -42,13 -45,17 +45,19 @@@ INSTALL_L1 = && ln # space is required 
  INSTALL_L2 =
  INSTALL_L3 =
  
+ REMOVE_D0  = $(RMDIR) # space is required here
+ REMOVE_D1  = || true
+ REMOVE_F0  = $(RM_F) # space is required here
+ REMOVE_F1  =
+ CLEAN_DST  = true
  ifndef V
        QUIET          = @
        QUIET_GEN      = $(QUIET)echo '   ' GEN $@ &&
        QUIET_BUILT_IN = $(QUIET)echo '   ' BUILTIN $@ &&
        QUIET_INDEX    = $(QUIET)echo '   ' INDEX $(dir $@) &&
 +      QUIET_MSGFMT0  = $(QUIET)printf '    MSGFMT %12s ' $@ && v=`
 +      QUIET_MSGFMT1  = 2>&1` && echo "$$v" | sed -e 's/fuzzy translations/fuzzy/' | sed -e 's/ messages//g'
        QUIET_2DEVNULL = 2>/dev/null
  
        INSTALL_D0 = dir=
        INSTALL_L1 = && src=
        INSTALL_L2 = && dst=
        INSTALL_L3 = && echo '   ' 'LINK       ' `basename "$$dst"` '->' `basename "$$src"` && rm -f "$$dst" && ln "$$src" "$$dst"
+       CLEAN_DST = echo ' ' UNINSTALL
+       REMOVE_D0 = dir=
+       REMOVE_D1 = && echo ' ' REMOVE $$dir && test -d "$$dir" && $(RMDIR) "$$dir" || true
+       REMOVE_F0 = dst=
+       REMOVE_F1 = && echo '   ' REMOVE `basename "$$dst"` && $(RM_F) "$$dst"
  endif
  
  TCL_PATH   ?= tclsh
@@@ -105,21 -118,6 +120,21 @@@ $(patsubst %.sh,%,$(SCRIPT_SH)) : % : %
  $(GITGUI_BUILT_INS): git-gui
        $(QUIET_BUILT_IN)rm -f $@ && ln git-gui $@
  
 +XGETTEXT   ?= xgettext
 +MSGFMT     ?= msgfmt
 +msgsdir     = $(gg_libdir)/msgs
 +msgsdir_SQ  = $(subst ','\'',$(msgsdir))
 +PO_TEMPLATE = po/git-gui.pot
 +ALL_POFILES = $(wildcard po/*.po)
 +ALL_MSGFILES = $(subst .po,.msg,$(ALL_POFILES))
 +
 +$(PO_TEMPLATE): $(SCRIPT_SH) $(ALL_LIBFILES)
 +      $(XGETTEXT) -kmc -LTcl -o $@ $(SCRIPT_SH) $(ALL_LIBFILES)
 +update-po:: $(PO_TEMPLATE)
 +      $(foreach p, $(ALL_POFILES), echo Updating $p ; msgmerge -U $p $(PO_TEMPLATE) ; )
 +$(ALL_MSGFILES): %.msg : %.po
 +      $(QUIET_MSGFMT0)$(MSGFMT) --statistics --tcl $< -l $(basename $(notdir $<)) -d $(dir $@) $(QUIET_MSGFMT1)
 +
  lib/tclIndex: $(ALL_LIBFILES)
        $(QUIET_INDEX)if echo \
          $(foreach p,$(PRELOAD_FILES),source $p\;) \
@@@ -153,7 -151,7 +168,7 @@@ GIT-GUI-VARS: .FORCE-GIT-GUI-VAR
                echo 1>$@ "$$VARS"; \
        fi
  
 -all:: $(ALL_PROGRAMS) lib/tclIndex
 +all:: $(ALL_PROGRAMS) lib/tclIndex $(ALL_MSGFILES)
  
  install: all
        $(QUIET)$(INSTALL_D0)'$(DESTDIR_SQ)$(gitexecdir_SQ)' $(INSTALL_D1)
        $(QUIET)$(INSTALL_D0)'$(DESTDIR_SQ)$(libdir_SQ)' $(INSTALL_D1)
        $(QUIET)$(INSTALL_R0)lib/tclIndex $(INSTALL_R1) '$(DESTDIR_SQ)$(libdir_SQ)'
        $(QUIET)$(foreach p,$(ALL_LIBFILES), $(INSTALL_R0)$p $(INSTALL_R1) '$(DESTDIR_SQ)$(libdir_SQ)' &&) true
 +      $(QUIET)$(INSTALL_D0)'$(DESTDIR_SQ)$(msgsdir_SQ)' $(INSTALL_D1)
 +      $(QUIET)$(foreach p,$(ALL_MSGFILES), $(INSTALL_R0)$p $(INSTALL_R1) '$(DESTDIR_SQ)$(msgsdir_SQ)' &&) true
  
+ uninstall:
+       $(QUIET)$(CLEAN_DST) '$(DESTDIR_SQ)$(gitexecdir_SQ)'
+       $(QUIET)$(REMOVE_F0)'$(DESTDIR_SQ)$(gitexecdir_SQ)'/git-gui $(REMOVE_F1)
+       $(QUIET)$(foreach p,$(GITGUI_BUILT_INS), $(REMOVE_F0)'$(DESTDIR_SQ)$(gitexecdir_SQ)'/$p $(REMOVE_F1) &&) true
+       $(QUIET)$(CLEAN_DST) '$(DESTDIR_SQ)$(libdir_SQ)'
+       $(QUIET)$(REMOVE_F0)'$(DESTDIR_SQ)$(libdir_SQ)'/tclIndex $(REMOVE_F1)
+       $(QUIET)$(foreach p,$(ALL_LIBFILES), $(REMOVE_F0)'$(DESTDIR_SQ)$(libdir_SQ)'/$(notdir $p) $(REMOVE_F1) &&) true
++      $(QUIET)$(CLEAN_DST) '$(DESTDIR_SQ)$(msgsdir_SQ)'
++      $(QUIET)$(foreach p,$(ALL_MSGFILES), $(REMOVE_F0)'$(DESTDIR_SQ)$(msgsdir_SQ)'/$(notdir $p) $(REMOVE_F1) &&) true
+       $(QUIET)$(REMOVE_D0)'$(DESTDIR_SQ)$(gitexecdir_SQ)' $(REMOVE_D1)
++      $(QUIET)$(REMOVE_D0)'$(DESTDIR_SQ)$(msgsdir_SQ)' $(REMOVE_D1)
+       $(QUIET)$(REMOVE_D0)'$(DESTDIR_SQ)$(libdir_SQ)' $(REMOVE_D1)
+       $(QUIET)$(REMOVE_D0)`dirname '$(DESTDIR_SQ)$(libdir_SQ)'` $(REMOVE_D1)
  dist-version:
        @mkdir -p $(TARDIR)
        @echo $(GITGUI_VERSION) > $(TARDIR)/version
  
  clean::
 -      rm -f $(ALL_PROGRAMS) lib/tclIndex
 +      rm -f $(ALL_PROGRAMS) lib/tclIndex po/*.msg
        rm -f GIT-VERSION-FILE GIT-GUI-VARS
  
- .PHONY: all install dist-version clean
+ .PHONY: all install uninstall dist-version clean
  .PHONY: .FORCE-GIT-VERSION-FILE
  .PHONY: .FORCE-GIT-GUI-VARS
diff --combined lib/index.tcl
index 78e2101adaa2bc6c80e7d57878e741fbe86a67f1,44689ab63b6c4563985b42c0ff20b8427f37cadc..228bccfd82b4b9e9f9704cd28efc5252eb5d2aad
@@@ -168,7 -168,7 +168,7 @@@ proc checkout_index {msg pathList after
  
        ui_status [format \
                "%s... %i/%i files (%.2f%%)" \
-               $msg
+               $msg \
                $update_index_cp \
                $totalCnt \
                0.0]
@@@ -351,35 -351,26 +351,35 @@@ proc revert_helper {txt paths} 
                }
        }
  
 +
 +      # Split question between singular and plural cases, because
 +      # such distinction is needed in some languages. Previously, the
 +      # code used "Revert changes in" for both, but that can't work
 +      # in languages where 'in' must be combined with word from
 +      # rest of string (in diffrent way for both cases of course).
 +      #
 +      # FIXME: Unfortunately, even that isn't enough in some languages
 +      # as they have quite complex plural-form rules. Unfortunately,
 +      # msgcat doesn't seem to support that kind of string translation.
 +      #
        set n [llength $pathList]
        if {$n == 0} {
                unlock_index
                return
        } elseif {$n == 1} {
 -              set s "[short_path [lindex $pathList]]"
 +              set query [mc "Revert changes in file %s?" [short_path [lindex $pathList]]]
        } else {
 -              set s "these $n files"
 +              set query [mc "Revert changes in these %i files?" $n]
        }
  
        set reply [tk_dialog \
                .confirm_revert \
                "[appname] ([reponame])" \
 -              "Revert changes in $s?
 -
 -Any unstaged changes will be permanently lost by the revert." \
 +              [mc "Any unstaged changes will be permanently lost by the revert."] \
                question \
                1 \
 -              {Do Nothing} \
 -              {Revert Changes} \
 +              [mc "Do Nothing"] \
 +              [mc "Revert Changes"] \
                ]
        if {$reply == 1} {
                checkout_index \
diff --combined lib/option.tcl
index 31c7d47f358c9821eb6ab991ec7bf1c25c62071e,063f5df6f7cd709e25a8f9c0ede263a3d10f5d8d..03bc08f128b5ab24d716d45b52c3480c889424b6
@@@ -62,7 -62,7 +62,7 @@@ proc do_about {} 
        toplevel $w
        wm geometry $w "+[winfo rootx .]+[winfo rooty .]"
  
 -      label $w.header -text "About [appname]" \
 +      label $w.header -text [mc "About %s" [appname]] \
                -font font_uibold
        pack $w.header -side top -fill x
  
@@@ -74,7 -74,8 +74,7 @@@
        pack $w.buttons -side bottom -fill x -pady 10 -padx 10
  
        label $w.desc \
 -              -text "git-gui - a graphical user interface for Git.
 -$copyright" \
 +              -text "[mc "git-gui - a graphical user interface for Git."]\n$copyright" \
                -padx 5 -pady 5 \
                -justify left \
                -anchor w \
@@@ -156,48 -157,48 +156,48 @@@ proc do_options {} 
        toplevel $w
        wm geometry $w "+[winfo rootx .]+[winfo rooty .]"
  
 -      label $w.header -text "Options" \
 +      label $w.header -text [mc "Options"] \
                -font font_uibold
        pack $w.header -side top -fill x
  
        frame $w.buttons
 -      button $w.buttons.restore -text {Restore Defaults} \
 +      button $w.buttons.restore -text [mc "Restore Defaults"] \
                -default normal \
                -command do_restore_defaults
        pack $w.buttons.restore -side left
 -      button $w.buttons.save -text Save \
 +      button $w.buttons.save -text [mc Save] \
                -default active \
                -command [list do_save_config $w]
        pack $w.buttons.save -side right
 -      button $w.buttons.cancel -text {Cancel} \
 +      button $w.buttons.cancel -text [mc "Cancel"] \
                -default normal \
                -command [list destroy $w]
        pack $w.buttons.cancel -side right -padx 5
        pack $w.buttons -side bottom -fill x -pady 10 -padx 10
  
 -      labelframe $w.repo -text "[reponame] Repository"
 -      labelframe $w.global -text {Global (All Repositories)}
 +      labelframe $w.repo -text [mc "%s Repository" [reponame]]
 +      labelframe $w.global -text [mc "Global (All Repositories)"]
        pack $w.repo -side left -fill both -expand 1 -pady 5 -padx 5
        pack $w.global -side right -fill both -expand 1 -pady 5 -padx 5
  
        set optid 0
        foreach option {
 -              {t user.name {User Name}}
 -              {t user.email {Email Address}}
 -
 -              {b merge.summary {Summarize Merge Commits}}
 -              {i-1..5 merge.verbosity {Merge Verbosity}}
 -              {b merge.diffstat {Show Diffstat After Merge}}
 -
 -              {b gui.trustmtime  {Trust File Modification Timestamps}}
 -              {b gui.pruneduringfetch {Prune Tracking Branches During Fetch}}
 -              {b gui.matchtrackingbranch {Match Tracking Branches}}
 -              {i-0..99 gui.diffcontext {Number of Diff Context Lines}}
 -              {t gui.newbranchtemplate {New Branch Name Template}}
 +              {t user.name {mc "User Name"}}
 +              {t user.email {mc "Email Address"}}
 +
 +              {b merge.summary {mc "Summarize Merge Commits"}}
 +              {i-1..5 merge.verbosity {mc "Merge Verbosity"}}
 +              {b merge.diffstat {mc "Show Diffstat After Merge"}}
 +
 +              {b gui.trustmtime  {mc "Trust File Modification Timestamps"}}
 +              {b gui.pruneduringfetch {mc "Prune Tracking Branches During Fetch"}}
 +              {b gui.matchtrackingbranch {mc "Match Tracking Branches"}}
 +              {i-0..99 gui.diffcontext {mc "Number of Diff Context Lines"}}
 +              {t gui.newbranchtemplate {mc "New Branch Name Template"}}
                } {
                set type [lindex $option 0]
                set name [lindex $option 1]
 -              set text [lindex $option 2]
 +              set text [eval [lindex $option 2]]
                incr optid
                foreach f {repo global} {
                        switch -glob -- $type {
        foreach option $font_descs {
                set name [lindex $option 0]
                set font [lindex $option 1]
 -              set text [lindex $option 2]
 +              set text [eval [lindex $option 2]]
  
                set global_config_new(gui.$font^^family) \
                        [font configure $font -family]
  
                frame $w.global.$name
                label $w.global.$name.l -text "$text:"
-               pack $w.global.$name.l -side left -anchor w -fill x
-               eval tk_optionMenu $w.global.$name.family \
-                       global_config_new(gui.$font^^family) \
-                       $all_fonts
-               spinbox $w.global.$name.size \
-                       -textvariable global_config_new(gui.$font^^size) \
-                       -from 2 -to 80 -increment 1 \
-                       -width 3
-               bind $w.global.$name.size <FocusIn> {%W selection range 0 end}
-               pack $w.global.$name.size -side right -anchor e
-               pack $w.global.$name.family -side right -anchor e
+               button $w.global.$name.b \
+                       -text [mc "Change Font"] \
+                       -command [list \
+                               choose_font::pick \
+                               $w \
+                               [mc "Choose %s" $text] \
+                               global_config_new(gui.$font^^family) \
+                               global_config_new(gui.$font^^size) \
+                               ]
+               label $w.global.$name.f -textvariable global_config_new(gui.$font^^family)
+               label $w.global.$name.s -textvariable global_config_new(gui.$font^^size)
+               label $w.global.$name.pt -text [mc "pt."]
+               pack $w.global.$name.l -side left -anchor w
+               pack $w.global.$name.b -side right -anchor e
+               pack $w.global.$name.pt -side right -anchor w
+               pack $w.global.$name.s -side right -anchor w
+               pack $w.global.$name.f -side right -anchor w
                pack $w.global.$name -side top -anchor w -fill x
        }
  
        bind $w <Visibility> "grab $w; focus $w.buttons.save"
        bind $w <Key-Escape> "destroy $w"
        bind $w <Key-Return> [list do_save_config $w]
 -      wm title $w "[appname] ([reponame]): Options"
 +      wm title $w [append "[appname] ([reponame]): " [mc "Options"]]
        tkwait window $w
  }
  
@@@ -302,7 -309,7 +308,7 @@@ proc do_restore_defaults {} 
  
  proc do_save_config {w} {
        if {[catch {save_config} err]} {
 -              error_popup "Failed to completely save options:\n\n$err"
 +              error_popup [append [mc "Failed to completely save options:"] "\n\n$err"]
        }
        reshow_diff
        destroy $w