Git development
 help / color / mirror / Atom feed
* [PATCH 4/9] gitk i18n: Initial German translation.
From: Christian Stimming @ 2007-11-07 17:44 UTC (permalink / raw)
  To: Paul Mackerras; +Cc: Junio C Hamano, git
In-Reply-To: <200711071842.55975.stimming@tuhh.de>

---
In order to test the i18n code, I prepared half-completed 
German translation.

 po/de.po |  703 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 703 insertions(+), 0 deletions(-)
 create mode 100644 po/de.po

diff --git a/po/de.po b/po/de.po
new file mode 100644
index 0000000..8c41069
--- /dev/null
+++ b/po/de.po
@@ -0,0 +1,703 @@
+# Translation of git-gui to German.
+# Copyright (C) 2007 Shawn Pearce, et al.
+# This file is distributed under the same license as the git package.
+# Christian Stimming <stimming@tuhh.de>, 2007
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: git-gui\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2007-11-07 12:27+0100\n"
+"PO-Revision-Date: 2007-11-07 12:36+0100\n"
+"Last-Translator: Christian Stimming <stimming@tuhh.de>\n"
+"Language-Team: German\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: gitk:101
+msgid "Error executing git rev-list:"
+msgstr ""
+
+#: gitk:114
+msgid "Reading"
+msgstr "Lesen"
+
+#: gitk:141 gitk:2151
+msgid "Reading commits..."
+msgstr "Versionen lesen..."
+
+#: gitk:264
+msgid "Can't parse git log output:"
+msgstr "Git log Ausgabe kann nicht erkannt werden:"
+
+#: gitk:375 gitk:2155
+msgid "No commits selected"
+msgstr "Keine Versionen ausgewählt."
+
+#: gitk:486
+msgid "No commit information available"
+msgstr ""
+
+#: gitk:585 gitk:607 gitk:1914 gitk:6374 gitk:7875 gitk:8035
+msgid "OK"
+msgstr "Ok"
+
+#: gitk:609 gitk:1916 gitk:6054 gitk:6125 gitk:6226 gitk:6272 gitk:6376
+#: gitk:7877 gitk:8037
+msgid "Cancel"
+msgstr "Abbrechen"
+
+#: gitk:633
+msgid "File"
+msgstr "Datei"
+
+#: gitk:636
+msgid "Update"
+msgstr "Aktualisieren"
+
+#: gitk:637
+msgid "Reread references"
+msgstr "Zweige neu laden"
+
+#: gitk:638
+msgid "List references"
+msgstr "Zweige auflisten"
+
+#: gitk:639
+msgid "Quit"
+msgstr "Beenden"
+
+#: gitk:642
+msgid "Edit"
+msgstr "Bearbeiten"
+
+#: gitk:643
+msgid "Preferences"
+msgstr "Einstellungen"
+
+#: gitk:647
+msgid "View"
+msgstr "Ansicht"
+
+#: gitk:648
+msgid "New view..."
+msgstr "Neue Ansicht..."
+
+#: gitk:649 gitk:2093 gitk:8666
+msgid "Edit view..."
+msgstr "Ansicht bearbeiten..."
+
+#: gitk:651 gitk:2094 gitk:8667
+msgid "Delete view"
+msgstr "Ansicht löschen"
+
+#: gitk:653
+msgid "All files"
+msgstr "Alle Dateien"
+
+#: gitk:657
+msgid "Help"
+msgstr "Hilfe"
+
+#: gitk:658 gitk:1280
+msgid "About gitk"
+msgstr "Über gitk"
+
+#: gitk:659
+msgid "Key bindings"
+msgstr "Tastenkürzel"
+
+#: gitk:716
+msgid "SHA1 ID: "
+msgstr ""
+
+#: gitk:766
+msgid "Find"
+msgstr "Suche"
+
+#: gitk:767
+msgid "next"
+msgstr "nächste"
+
+#: gitk:768
+msgid "prev"
+msgstr "vorige"
+
+#: gitk:769
+msgid "commit"
+msgstr "Version"
+
+#: gitk:772 gitk:774 gitk:2316 gitk:2339 gitk:2363 gitk:4265 gitk:4328
+msgid "containing:"
+msgstr "enthaltend:"
+
+#: gitk:775 gitk:1746 gitk:1751 gitk:2391
+msgid "touching paths:"
+msgstr "Pfad betreffend:"
+
+#: gitk:776 gitk:2396
+msgid "adding/removing string:"
+msgstr "String dazu/löschen:"
+
+#: gitk:787 gitk:789
+msgid "Exact"
+msgstr "Exakt"
+
+#: gitk:789 gitk:2474 gitk:4233
+msgid "IgnCase"
+msgstr "Kein Groß/Klein"
+
+#: gitk:789 gitk:2365 gitk:2472 gitk:4229
+msgid "Regexp"
+msgstr "Regexp"
+
+#: gitk:793 gitk:794 gitk:2493 gitk:2523 gitk:2530 gitk:4339 gitk:4395
+msgid "All fields"
+msgstr "Alle Felder"
+
+#: gitk:794 gitk:2491 gitk:2523 gitk:4295
+msgid "Headline"
+msgstr "Überschrift"
+
+#: gitk:795 gitk:2491 gitk:4295 gitk:4395 gitk:4783
+msgid "Comments"
+msgstr "Beschreibung"
+
+#: gitk:795 gitk:2491 gitk:2495 gitk:2530 gitk:4295 gitk:4719 gitk:5903
+#: gitk:5918
+msgid "Author"
+msgstr "Autor"
+
+#: gitk:795 gitk:2491 gitk:4295 gitk:4721
+msgid "Committer"
+msgstr "Eintragender"
+
+#: gitk:825
+msgid "Search"
+msgstr "Suche"
+
+#: gitk:833
+msgid "Diff"
+msgstr "Vergleich"
+
+#: gitk:835
+msgid "Old version"
+msgstr "Alte Version"
+
+#: gitk:837
+msgid "New version"
+msgstr "Neue Version"
+
+#: gitk:839
+msgid "Lines of context"
+msgstr "Kontextzeilen"
+
+#: gitk:898
+msgid "Patch"
+msgstr ""
+
+#: gitk:901
+msgid "Tree"
+msgstr "Baum"
+
+#: gitk:1018 gitk:1033 gitk:5969
+msgid "Diff this -> selected"
+msgstr "Vergleich diese -> gewählte"
+
+#: gitk:1020 gitk:1035 gitk:5970
+msgid "Diff selected -> this"
+msgstr "Vergleich gewählte -> diese"
+
+#: gitk:1022 gitk:1037 gitk:5971
+msgid "Make patch"
+msgstr "Patch erstellen"
+
+#: gitk:1023 gitk:6109
+msgid "Create tag"
+msgstr "Markierung erstellen"
+
+#: gitk:1024 gitk:6206
+msgid "Write commit to file"
+msgstr "Version in Datei schreiben"
+
+#: gitk:1025 gitk:6260
+msgid "Create new branch"
+msgstr "Neuen Zweig erstellen"
+
+#: gitk:1026
+msgid "Cherry-pick this commit"
+msgstr "Diese Version pflücken"
+
+#: gitk:1028
+msgid "Reset HEAD branch to here"
+msgstr "HEAD-Zweig auf diese Version zurücksetzen"
+
+#: gitk:1044
+msgid "Check out this branch"
+msgstr "Auf diesen Zweig umstellen"
+
+#: gitk:1046
+msgid "Remove this branch"
+msgstr "Zweig löschen"
+
+#: gitk:1052
+msgid "Highlight this too"
+msgstr ""
+
+#: gitk:1054
+msgid "Highlight this only"
+msgstr ""
+
+#: gitk:1281
+msgid ""
+"\n"
+"Gitk - a commit viewer for git\n"
+"\n"
+"Copyright © 2005-2006 Paul Mackerras\n"
+"\n"
+"Use and redistribute under the terms of the GNU General Public License"
+msgstr ""
+
+#: gitk:1290 gitk:1354 gitk:6532
+msgid "Close"
+msgstr "Schließen"
+
+#: gitk:1311
+msgid "Gitk key bindings"
+msgstr ""
+
+#: gitk:1863
+msgid "Gitk view definition"
+msgstr ""
+
+#: gitk:1888
+msgid "Name"
+msgstr "Name"
+
+#: gitk:1891
+msgid "Remember this view"
+msgstr "Diese Ansicht speichern"
+
+#: gitk:1895
+msgid "Commits to include (arguments to git rev-list):"
+msgstr ""
+
+#: gitk:1901
+msgid "Enter files and directories to include, one per line:"
+msgstr ""
+
+#: gitk:1950
+msgid "Error in commit selection arguments:"
+msgstr ""
+
+#: gitk:2001 gitk:2087 gitk:2543 gitk:2557 gitk:3740 gitk:8635 gitk:8636
+msgid "None"
+msgstr "Keine"
+
+#: gitk:2491 gitk:4295 gitk:5905 gitk:5920
+msgid "Date"
+msgstr "Datum"
+
+#: gitk:2491 gitk:4295
+msgid "CDate"
+msgstr "Eintragedatum"
+
+#: gitk:2640 gitk:2645
+msgid "Descendent"
+msgstr ""
+
+#: gitk:2641
+msgid "Not descendent"
+msgstr ""
+
+#: gitk:2648 gitk:2653
+msgid "Ancestor"
+msgstr ""
+
+#: gitk:2649
+msgid "Not ancestor"
+msgstr ""
+
+#: gitk:2883
+msgid "Local changes checked in to index but not committed"
+msgstr ""
+
+#: gitk:2913
+msgid "Local uncommitted changes, not checked in to index"
+msgstr ""
+
+#: gitk:4264
+msgid "Searching"
+msgstr "Suchen"
+
+#: gitk:4723
+msgid "Tags:"
+msgstr "Markierungen:"
+
+#: gitk:4740 gitk:4746 gitk:5898
+msgid "Parent"
+msgstr "Eltern"
+
+#: gitk:4751
+msgid "Child"
+msgstr "Kind"
+
+#: gitk:4760
+msgid "Branch"
+msgstr "Zweig"
+
+#: gitk:4763
+msgid "Follows"
+msgstr ""
+
+#: gitk:4766
+msgid "Precedes"
+msgstr ""
+
+#: gitk:5048
+msgid "Error getting merge diffs:"
+msgstr "Fehler beim Laden des Vergleichs:"
+
+#: gitk:5725
+msgid "Goto:"
+msgstr ""
+
+#: gitk:5727
+msgid "SHA1 ID:"
+msgstr ""
+
+#: gitk:5752
+#, tcl-format
+msgid "Short SHA1 id %s is ambiguous"
+msgstr ""
+
+#: gitk:5764
+#, tcl-format
+msgid "SHA1 id %s is not known"
+msgstr ""
+
+#: gitk:5766
+#, tcl-format
+msgid "Tag/Head %s is not known"
+msgstr ""
+
+#: gitk:5908
+msgid "Children"
+msgstr "Kinder"
+
+#: gitk:5965
+#, tcl-format
+msgid "Reset %s branch to here"
+msgstr "Zweig »%s« hierher zurücksetzen"
+
+#: gitk:5996
+msgid "Top"
+msgstr "Oben"
+
+#: gitk:5997
+msgid "From"
+msgstr "Von"
+
+#: gitk:6002
+msgid "To"
+msgstr "bis"
+
+#: gitk:6025
+msgid "Generate patch"
+msgstr "Patch erstellen"
+
+#: gitk:6027
+msgid "From:"
+msgstr "Von:"
+
+#: gitk:6036
+msgid "To:"
+msgstr "bis:"
+
+#: gitk:6045
+msgid "Reverse"
+msgstr "Umgekehrt"
+
+#: gitk:6047 gitk:6220
+msgid "Output file:"
+msgstr ""
+
+#: gitk:6053
+msgid "Generate"
+msgstr "Erzeugen"
+
+#: gitk:6089
+msgid "Error creating patch:"
+msgstr ""
+
+#: gitk:6111 gitk:6208 gitk:6262
+msgid "ID:"
+msgstr ""
+
+#: gitk:6120
+msgid "Tag name:"
+msgstr "Markierungsname:"
+
+#: gitk:6124 gitk:6271
+msgid "Create"
+msgstr "Erstellen"
+
+#: gitk:6139
+msgid "No tag name specified"
+msgstr ""
+
+#: gitk:6143
+#, tcl-format
+msgid "Tag \"%s\" already exists"
+msgstr "Markierung »%s« existiert bereits."
+
+#: gitk:6153
+msgid "Error creating tag:"
+msgstr ""
+
+#: gitk:6217
+msgid "Command:"
+msgstr ""
+
+#: gitk:6225
+msgid "Write"
+msgstr "Schreiben"
+
+#: gitk:6241
+msgid "Error writing commit:"
+msgstr ""
+
+#: gitk:6267
+msgid "Name:"
+msgstr "Name:"
+
+#: gitk:6286
+msgid "Please specify a name for the new branch"
+msgstr ""
+
+#: gitk:6315
+#, tcl-format
+msgid "Commit %s is already included in branch %s -- really re-apply it?"
+msgstr ""
+
+#: gitk:6320
+msgid "Cherry-picking"
+msgstr "Version pflücken"
+
+#: gitk:6332
+msgid "No changes committed"
+msgstr "Keine Änderungen eingetragen"
+
+#: gitk:6355
+msgid "Confirm reset"
+msgstr "Zurücksetzen bestätigen"
+
+#: gitk:6357
+#, tcl-format
+msgid "Reset branch %s to %s?"
+msgstr ""
+
+#: gitk:6361
+msgid "Reset type:"
+msgstr "Art des Zurücksetzens:"
+
+#: gitk:6365
+msgid "Soft: Leave working tree and index untouched"
+msgstr "Weich: Arbeitskopie und Bereitstellung unverändert"
+
+#: gitk:6368
+msgid "Mixed: Leave working tree untouched, reset index"
+msgstr ""
+"Gemischt: Arbeitskopie unverändert,\n"
+"Bereitstellung zurückgesetzt"
+
+#: gitk:6371
+msgid ""
+"Hard: Reset working tree and index\n"
+"(discard ALL local changes)"
+msgstr ""
+"Hart: Arbeitskopie und Bereitstellung\n"
+"(Alle lokalen Änderungen werden gelöscht)"
+
+#: gitk:6387
+msgid "Resetting"
+msgstr "Zurücksetzen"
+
+#: gitk:6444
+msgid "Checking out"
+msgstr ""
+
+#: gitk:6474
+msgid "Cannot delete the currently checked-out branch"
+msgstr ""
+
+#: gitk:6480
+#, tcl-format
+msgid ""
+"The commits on branch %s aren't on any other branch.\n"
+"Really delete branch %s?"
+msgstr ""
+
+#: gitk:6511
+#, tcl-format
+msgid "Tags and heads: %s"
+msgstr ""
+
+#: gitk:6525
+msgid "Filter"
+msgstr ""
+
+#: gitk:6820
+msgid ""
+"Error reading commit topology information; branch and preceding/following "
+"tag information will be incomplete."
+msgstr ""
+
+#: gitk:7804
+msgid "Tag"
+msgstr "Markierung"
+
+#: gitk:7804
+msgid "Id"
+msgstr ""
+
+#: gitk:7844
+msgid "Gitk font chooser"
+msgstr ""
+
+#: gitk:7861
+msgid "B"
+msgstr "F"
+
+#: gitk:7864
+msgid "I"
+msgstr "K"
+
+#: gitk:7959
+msgid "Gitk preferences"
+msgstr "Gitk Einstellungen"
+
+#: gitk:7960
+msgid "Commit list display options"
+msgstr ""
+
+#: gitk:7964
+msgid "Maximum graph width (lines)"
+msgstr ""
+
+#: gitk:7968
+#, tcl-format
+msgid "Maximum graph width (% of pane)"
+msgstr ""
+
+#: gitk:7973
+msgid "Show local changes"
+msgstr ""
+
+#: gitk:7978
+msgid "Diff display options"
+msgstr ""
+
+#: gitk:7981
+msgid "Tab spacing"
+msgstr ""
+
+#: gitk:7985
+msgid "Display nearby tags"
+msgstr ""
+
+#: gitk:7990
+msgid "Limit diffs to listed paths"
+msgstr ""
+
+#: gitk:7995
+msgid "Colors: press to choose"
+msgstr ""
+
+#: gitk:7999
+msgid "Background"
+msgstr "Vordergrund"
+
+#: gitk:8003
+msgid "Foreground"
+msgstr "Hintergrund"
+
+#: gitk:8007
+msgid "Diff: old lines"
+msgstr ""
+
+#: gitk:8012
+msgid "Diff: new lines"
+msgstr ""
+
+#: gitk:8017
+msgid "Diff: hunk header"
+msgstr ""
+
+#: gitk:8023
+msgid "Select bg"
+msgstr "Hintergrundfarbe Auswählen"
+
+#: gitk:8027
+msgid "Fonts: press to choose"
+msgstr ""
+
+#: gitk:8030
+msgid "Main font"
+msgstr ""
+
+#: gitk:8031
+msgid "Diff display font"
+msgstr ""
+
+#: gitk:8032
+msgid "User interface font"
+msgstr ""
+
+#: gitk:8050
+#, tcl-format
+msgid "Gitk: choose color for %s"
+msgstr ""
+
+#: gitk:8431
+msgid ""
+"Sorry, gitk cannot run with this version of Tcl/Tk.\n"
+" Gitk requires at least Tcl/Tk 8.4."
+msgstr ""
+
+#: gitk:8516
+msgid "Cannot find a git repository here."
+msgstr ""
+
+#: gitk:8520
+#, tcl-format
+msgid "Cannot find the git directory \"%s\"."
+msgstr ""
+
+#: gitk:8559
+#, tcl-format
+msgid "Ambiguous argument '%s': both revision and filename"
+msgstr ""
+
+#: gitk:8571
+msgid "Bad arguments to gitk:"
+msgstr ""
+
+#: gitk:8583
+msgid "Couldn't get list of unmerged files:"
+msgstr ""
+
+#: gitk:8599
+msgid "No files selected: --merge specified but no files are unmerged."
+msgstr ""
+
+#: gitk:8602
+msgid ""
+"No files selected: --merge specified but no unmerged files are within file "
+"limit."
+msgstr ""
+
+#: gitk:8661
+msgid "Command line"
+msgstr "Kommandozeile"
-- 
1.5.3.4.206.g58ba4

^ permalink raw reply related

* [PATCH 3/9] gitk i18n implementation: Markup many strings for translation.
From: Christian Stimming @ 2007-11-07 17:42 UTC (permalink / raw)
  To: Paul Mackerras; +Cc: Junio C Hamano, git
In-Reply-To: <200711071840.59972.stimming@tuhh.de>

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset=utf-8, Size: 47874 bytes --]

---
This patch should intentionally markup only those strings that aren't used
in any peculiar way, but are just plain strings. The more involved strings
in optionmenu widgets will come in a separate patch.

 gitk |  401 
+++++++++++++++++++++++++++++++++---------------------------------
 1 files changed, 201 insertions(+), 200 deletions(-)

diff --git a/gitk b/gitk
index 629acfb..e291577 100755
--- a/gitk
+++ b/gitk
@@ -98,7 +98,7 @@ proc start_rev_list {view} {
 	set fd [open [concat | git log --no-color -z --pretty=raw $order --parents \
 			 --boundary $viewargs($view) "--" $viewfiles($view)] r]
     } err]} {
-	error_popup "Error executing git rev-list: $err"
+	error_popup "[mc "Error executing git rev-list:"] $err"
 	exit 1
     }
     set commfd($view) $fd
@@ -111,7 +111,7 @@ proc start_rev_list {view} {
 	fconfigure $fd -encoding $tclencoding
     }
     filerun $fd [list getcommitlines $fd $view]
-    nowbusy $view "Reading"
+    nowbusy $view [mc "Reading"]
     if {$view == $curview} {
 	set progressdirn 1
 	set progresscoords {0 0}
@@ -138,7 +138,7 @@ proc getcommits {} {
     set phase getcommits
     initlayout
     start_rev_list $curview
-    show_status "Reading commits..."
+    show_status [mc "Reading commits..."]
 }
 
 # This makes a string representation of a positive integer which
@@ -261,7 +261,7 @@ proc getcommitlines {fd view}  {
 	    if {[string length $shortcmit] > 80} {
 		set shortcmit "[string range $shortcmit 0 80]..."
 	    }
-	    error_popup "Can't parse git log output: {$shortcmit}"
+	    error_popup "[mc "Can't parse git log output:"] {$shortcmit}"
 	    exit 1
 	}
 	set id [lindex $ids 0]
@@ -372,7 +372,7 @@ proc chewcommits {view} {
 		#set ms [expr {[clock clicks -milliseconds] - $startmsecs}]
 		#puts "overall $ms ms for $numcommits commits"
 	    } else {
-		show_status "No commits selected"
+		show_status [mc "No commits selected"]
 	    }
 	    notbusy layout
 	    set phase {}
@@ -483,7 +483,7 @@ proc getcommit {id} {
     } else {
 	readcommit $id
 	if {![info exists commitinfo($id)]} {
-	    set commitinfo($id) {"No commit information available"}
+	    set commitinfo($id) [list [mc "No commit information available"]]
 	}
     }
     return 1
@@ -582,7 +582,7 @@ proc removehead {id name} {
 proc show_error {w top msg} {
     message $w.m -text $msg -justify center -aspect 400
     pack $w.m -side top -fill x -padx 20 -pady 20
-    button $w.ok -text OK -command "destroy $top"
+    button $w.ok -text [mc OK] -command "destroy $top"
     pack $w.ok -side bottom -fill x
     bind $top <Visibility> "grab $top; focus $top"
     bind $top <Key-Return> "destroy $top"
@@ -604,9 +604,9 @@ proc confirm_popup msg {
     wm transient $w .
     message $w.m -text $msg -justify center -aspect 400
     pack $w.m -side top -fill x -padx 20 -pady 20
-    button $w.ok -text OK -command "set confirm_ok 1; destroy $w"
+    button $w.ok -text [mc OK] -command "set confirm_ok 1; destroy $w"
     pack $w.ok -side left -fill x
-    button $w.cancel -text Cancel -command "destroy $w"
+    button $w.cancel -text [mc Cancel] -command "destroy $w"
     pack $w.cancel -side right -fill x
     bind $w <Visibility> "grab $w; focus $w"
     tkwait window $w
@@ -630,33 +630,33 @@ proc makewindow {} {
     global have_tk85
 
     menu .bar
-    .bar add cascade -label "File" -menu .bar.file
+    .bar add cascade -label [mc "File"] -menu .bar.file
     .bar configure -font uifont
     menu .bar.file
-    .bar.file add command -label "Update" -command updatecommits
-    .bar.file add command -label "Reread references" -command rereadrefs
-    .bar.file add command -label "List references" -command showrefs
-    .bar.file add command -label "Quit" -command doquit
+    .bar.file add command -label [mc "Update"] -command updatecommits
+    .bar.file add command -label [mc "Reread references"] -command rereadrefs
+    .bar.file add command -label [mc "List references"] -command showrefs
+    .bar.file add command -label [mc "Quit"] -command doquit
     .bar.file configure -font uifont
     menu .bar.edit
-    .bar add cascade -label "Edit" -menu .bar.edit
-    .bar.edit add command -label "Preferences" -command doprefs
+    .bar add cascade -label [mc "Edit"] -menu .bar.edit
+    .bar.edit add command -label [mc "Preferences"] -command doprefs
     .bar.edit configure -font uifont
 
     menu .bar.view -font uifont
-    .bar add cascade -label "View" -menu .bar.view
-    .bar.view add command -label "New view..." -command {newview 0}
-    .bar.view add command -label "Edit view..." -command editview \
+    .bar add cascade -label [mc "View"] -menu .bar.view
+    .bar.view add command -label [mc "New view..."] -command {newview 0}
+    .bar.view add command -label [mc "Edit view..."] -command editview \
 	-state disabled
-    .bar.view add command -label "Delete view" -command delview -state 
disabled
+    .bar.view add command -label [mc "Delete view"] -command delview -state 
disabled
     .bar.view add separator
-    .bar.view add radiobutton -label "All files" -command {showview 0} \
+    .bar.view add radiobutton -label [mc "All files"] -command {showview 0} \
 	-variable selectedview -value 0
 
     menu .bar.help
-    .bar add cascade -label "Help" -menu .bar.help
-    .bar.help add command -label "About gitk" -command about
-    .bar.help add command -label "Key bindings" -command keys
+    .bar add cascade -label [mc "Help"] -menu .bar.help
+    .bar.help add command -label [mc "About gitk"] -command about
+    .bar.help add command -label [mc "Key bindings"] -command keys
     .bar.help configure -font uifont
     . configure -menu .bar
 
@@ -713,7 +713,7 @@ proc makewindow {} {
     set sha1entry .tf.bar.sha1
     set entries $sha1entry
     set sha1but .tf.bar.sha1label
-    button $sha1but -text "SHA1 ID: " -state disabled -relief flat \
+    button $sha1but -text [mc "SHA1 ID: "] -state disabled -relief flat \
 	-command gotocommit -width 8 -font uifont
     $sha1but conf -disabledforeground [$sha1but cget -foreground]
     pack .tf.bar.sha1label -side left
@@ -763,10 +763,10 @@ proc makewindow {} {
     set progupdatepending 0
 
     # build up the bottom bar of upper window
-    label .tf.lbar.flabel -text "Find " -font uifont
-    button .tf.lbar.fnext -text "next" -command {dofind 1 1} -font uifont
-    button .tf.lbar.fprev -text "prev" -command {dofind -1 1} -font uifont
-    label .tf.lbar.flab2 -text " commit " -font uifont
+    label .tf.lbar.flabel -text "[mc "Find"] " -font uifont
+    button .tf.lbar.fnext -text [mc "next"] -command {dofind 1 1} -font 
uifont
+    button .tf.lbar.fprev -text [mc "prev"] -command {dofind -1 1} -font 
uifont
+    label .tf.lbar.flab2 -text " [mc "commit"] " -font uifont
     pack .tf.lbar.flabel .tf.lbar.fnext .tf.lbar.fprev .tf.lbar.flab2 \
 	-side left -fill y
     set gdttype "containing:"
@@ -822,7 +822,7 @@ proc makewindow {} {
     frame .bleft.top
     frame .bleft.mid
 
-    button .bleft.top.search -text "Search" -command dosearch \
+    button .bleft.top.search -text [mc "Search"] -command dosearch \
 	-font uifont
     pack .bleft.top.search -side left -padx 5
     set sstring .bleft.top.sstring
@@ -830,13 +830,13 @@ proc makewindow {} {
     lappend entries $sstring
     trace add variable searchstring write incrsearch
     pack $sstring -side left -expand 1 -fill x
-    radiobutton .bleft.mid.diff -text "Diff" -font uifont \
+    radiobutton .bleft.mid.diff -text [mc "Diff"] -font uifont \
 	-command changediffdisp -variable diffelide -value {0 0}
-    radiobutton .bleft.mid.old -text "Old version" -font uifont \
+    radiobutton .bleft.mid.old -text [mc "Old version"] -font uifont \
 	-command changediffdisp -variable diffelide -value {0 1}
-    radiobutton .bleft.mid.new -text "New version" -font uifont \
+    radiobutton .bleft.mid.new -text [mc "New version"] -font uifont \
 	-command changediffdisp -variable diffelide -value {1 0}
-    label .bleft.mid.labeldiffcontext -text "      Lines of context: " \
+    label .bleft.mid.labeldiffcontext -text "      [mc "Lines of context"]: " 
\
 	-font uifont
     pack .bleft.mid.diff .bleft.mid.old .bleft.mid.new -side left
     spinbox .bleft.mid.diffcontext -width 5 -font textfont \
@@ -895,10 +895,10 @@ proc makewindow {} {
     # lower right
     frame .bright
     frame .bright.mode
-    radiobutton .bright.mode.patch -text "Patch" \
+    radiobutton .bright.mode.patch -text [mc "Patch"] \
 	-command reselectline -variable cmitmode -value "patch"
     .bright.mode.patch configure -font uifont
-    radiobutton .bright.mode.tree -text "Tree" \
+    radiobutton .bright.mode.tree -text [mc "Tree"] \
 	-command reselectline -variable cmitmode -value "tree"
     .bright.mode.tree configure -font uifont
     grid .bright.mode.patch .bright.mode.tree -sticky ew
@@ -1015,43 +1015,43 @@ proc makewindow {} {
 
     set rowctxmenu .rowctxmenu
     menu $rowctxmenu -tearoff 0
-    $rowctxmenu add command -label "Diff this -> selected" \
+    $rowctxmenu add command -label [mc "Diff this -> selected"] \
 	-command {diffvssel 0}
-    $rowctxmenu add command -label "Diff selected -> this" \
+    $rowctxmenu add command -label [mc "Diff selected -> this"] \
 	-command {diffvssel 1}
-    $rowctxmenu add command -label "Make patch" -command mkpatch
-    $rowctxmenu add command -label "Create tag" -command mktag
-    $rowctxmenu add command -label "Write commit to file" -command 
writecommit
-    $rowctxmenu add command -label "Create new branch" -command mkbranch
-    $rowctxmenu add command -label "Cherry-pick this commit" \
+    $rowctxmenu add command -label [mc "Make patch"] -command mkpatch
+    $rowctxmenu add command -label [mc "Create tag"] -command mktag
+    $rowctxmenu add command -label [mc "Write commit to file"] -command 
writecommit
+    $rowctxmenu add command -label [mc "Create new branch"] -command mkbranch
+    $rowctxmenu add command -label [mc "Cherry-pick this commit"] \
 	-command cherrypick
-    $rowctxmenu add command -label "Reset HEAD branch to here" \
+    $rowctxmenu add command -label [mc "Reset HEAD branch to here"] \
 	-command resethead
 
     set fakerowmenu .fakerowmenu
     menu $fakerowmenu -tearoff 0
-    $fakerowmenu add command -label "Diff this -> selected" \
+    $fakerowmenu add command -label [mc "Diff this -> selected"] \
 	-command {diffvssel 0}
-    $fakerowmenu add command -label "Diff selected -> this" \
+    $fakerowmenu add command -label [mc "Diff selected -> this"] \
 	-command {diffvssel 1}
-    $fakerowmenu add command -label "Make patch" -command mkpatch
-#    $fakerowmenu add command -label "Commit" -command {mkcommit 0}
-#    $fakerowmenu add command -label "Commit all" -command {mkcommit 1}
-#    $fakerowmenu add command -label "Revert local changes" -command 
revertlocal
+    $fakerowmenu add command -label [mc "Make patch"] -command mkpatch
+#    $fakerowmenu add command -label [mc "Commit"] -command {mkcommit 0}
+#    $fakerowmenu add command -label [mc "Commit all"] -command {mkcommit 1}
+#    $fakerowmenu add command -label [mc "Revert local changes"] -command 
revertlocal
 
     set headctxmenu .headctxmenu
     menu $headctxmenu -tearoff 0
-    $headctxmenu add command -label "Check out this branch" \
+    $headctxmenu add command -label [mc "Check out this branch"] \
 	-command cobranch
-    $headctxmenu add command -label "Remove this branch" \
+    $headctxmenu add command -label [mc "Remove this branch"] \
 	-command rmbranch
 
     global flist_menu
     set flist_menu .flistctxmenu
     menu $flist_menu -tearoff 0
-    $flist_menu add command -label "Highlight this too" \
+    $flist_menu add command -label [mc "Highlight this too"] \
 	-command {flist_hl 0}
-    $flist_menu add command -label "Highlight this only" \
+    $flist_menu add command -label [mc "Highlight this only"] \
 	-command {flist_hl 1}
 }
 
@@ -1277,17 +1277,17 @@ proc about {} {
 	return
     }
     toplevel $w
-    wm title $w "About gitk"
-    message $w.m -text {
+    wm title $w [mc "About gitk"]
+    message $w.m -text [mc "
 Gitk - a commit viewer for git
 
 Copyright © 2005-2006 Paul Mackerras
 
-Use and redistribute under the terms of the GNU General Public License} \
+Use and redistribute under the terms of the GNU General Public License"] \
 	    -justify center -aspect 400 -border 2 -bg white -relief groove
     pack $w.m -side top -fill x -padx 2 -pady 2
     $w.m configure -font uifont
-    button $w.ok -text Close -command "destroy $w" -default active
+    button $w.ok -text [mc "Close"] -command "destroy $w" -default active
     pack $w.ok -side bottom
     $w.ok configure -font uifont
     bind $w <Visibility> "focus $w.ok"
@@ -1308,8 +1308,8 @@ proc keys {} {
 	set M1T Ctrl
     }
     toplevel $w
-    wm title $w "Gitk key bindings"
-    message $w.m -text "
+    wm title $w [mc "Gitk key bindings"]
+    message $w.m -text [mc "
 Gitk key bindings:
 
 <$M1T-Q>		Quit
@@ -1347,11 +1347,11 @@ f		Scroll diff view to next file
 <$M1T-KP->	Decrease font size
 <$M1T-minus>	Decrease font size
 <F5>		Update
-" \
+"] \
 	    -justify left -bg white -border 2 -relief groove
     pack $w.m -side top -fill both -padx 2 -pady 2
     $w.m configure -font uifont
-    button $w.ok -text Close -command "destroy $w" -default active
+    button $w.ok -text [mc "Close"] -command "destroy $w" -default active
     pack $w.ok -side bottom
     $w.ok configure -font uifont
     bind $w <Visibility> "focus $w.ok"
@@ -1860,7 +1860,7 @@ proc newview {ishighlight} {
     set newviewname($nextviewnum) "View $nextviewnum"
     set newviewperm($nextviewnum) 0
     set newviewargs($nextviewnum) [shellarglist $revtreeargs]
-    vieweditor $top $nextviewnum "Gitk view definition"
+    vieweditor $top $nextviewnum [mc "Gitk view definition"]
 }
 
 proc editview {} {
@@ -1885,20 +1885,20 @@ proc vieweditor {top n title} {
 
     toplevel $top
     wm title $top $title
-    label $top.nl -text "Name" -font uifont
+    label $top.nl -text [mc "Name"] -font uifont
     entry $top.name -width 20 -textvariable newviewname($n) -font uifont
     grid $top.nl $top.name -sticky w -pady 5
-    checkbutton $top.perm -text "Remember this view" -variable 
newviewperm($n) \
+    checkbutton $top.perm -text [mc "Remember this view"] -variable 
newviewperm($n) \
 	-font uifont
     grid $top.perm - -pady 5 -sticky w
     message $top.al -aspect 1000 -font uifont \
-	-text "Commits to include (arguments to git rev-list):"
+	-text [mc "Commits to include (arguments to git rev-list):"]
     grid $top.al - -sticky w -pady 5
     entry $top.args -width 50 -textvariable newviewargs($n) \
 	-background white -font uifont
     grid $top.args - -sticky ew -padx 5
     message $top.l -aspect 1000 -font uifont \
-	-text "Enter files and directories to include, one per line:"
+	-text [mc "Enter files and directories to include, one per line:"]
     grid $top.l - -sticky w
     text $top.t -width 40 -height 10 -background white -font uifont
     if {[info exists viewfiles($n)]} {
@@ -1911,9 +1911,9 @@ proc vieweditor {top n title} {
     }
     grid $top.t - -sticky ew -padx 5
     frame $top.buts
-    button $top.buts.ok -text "OK" -command [list newviewok $top $n] \
+    button $top.buts.ok -text [mc "OK"] -command [list newviewok $top $n] \
 	-font uifont
-    button $top.buts.can -text "Cancel" -command [list destroy $top] \
+    button $top.buts.can -text [mc "Cancel"] -command [list destroy $top] \
 	-font uifont
     grid $top.buts.ok $top.buts.can
     grid columnconfigure $top.buts 0 -weight 1 -uniform a
@@ -1947,7 +1947,7 @@ proc newviewok {top n} {
     if {[catch {
 	set newargs [shellsplit $newviewargs($n)]
     } err]} {
-	error_popup "Error in commit selection arguments: $err"
+	error_popup "[mc "Error in commit selection arguments:"] $err"
 	wm raise $top
 	focus $top
 	return
@@ -2090,8 +2090,8 @@ proc showview {n} {
 
     set curview $n
     set selectedview $n
-    .bar.view entryconf Edit* -state [expr {$n == 0? "disabled": "normal"}]
-    .bar.view entryconf Delete* -state [expr {$n == 0? "disabled": "normal"}]
+    .bar.view entryconf [mc "Edit view..."] -state [expr {$n == 
0? "disabled": "normal"}]
+    .bar.view entryconf [mc "Delete view"] -state [expr {$n == 
0? "disabled": "normal"}]
 
     run refill_reflist
     if {![info exists viewdata($n)]} {
@@ -2148,11 +2148,11 @@ proc showview {n} {
     }
     if {$phase ne {}} {
 	if {$phase eq "getcommits"} {
-	    show_status "Reading commits..."
+	    show_status [mc "Reading commits..."]
 	}
 	run chewcommits $n
     } elseif {$numcommits == 0} {
-	show_status "No commits selected"
+	show_status [mc "No commits selected"]
     }
 }
 
@@ -2880,7 +2880,7 @@ proc readdiffindex {fd serial} {
     if {$isdiff && $serial == $lserial && $localirow == -1} {
 	# add the line for the changes in the index to the graph
 	set localirow $commitrow($curview,$mainheadid)
-	set hl "Local changes checked in to index but not committed"
+	set hl [mc "Local changes checked in to index but not committed"]
 	set commitinfo($nullid2) [list  $hl {} {} {} {} "    $hl\n"]
 	set commitdata($nullid2) "\n    $hl\n"
 	insertrow $localirow $nullid2
@@ -2910,7 +2910,7 @@ proc readdifffiles {fd serial} {
 	} else {
 	    set localfrow $commitrow($curview,$mainheadid)
 	}
-	set hl "Local uncommitted changes, not checked in to index"
+	set hl [mc "Local uncommitted changes, not checked in to index"]
 	set commitinfo($nullid) [list  $hl {} {} {} {} "    $hl\n"]
 	set commitdata($nullid) "\n    $hl\n"
 	insertrow $localfrow $nullid
@@ -4716,11 +4716,11 @@ proc selectline {l isnew} {
     set linknum 0
     set info $commitinfo($id)
     set date [formatdate [lindex $info 2]]
-    $ctext insert end "Author: [lindex $info 1]  $date\n"
+    $ctext insert end "[mc "Author"]: [lindex $info 1]  $date\n"
     set date [formatdate [lindex $info 4]]
-    $ctext insert end "Committer: [lindex $info 3]  $date\n"
+    $ctext insert end "[mc "Committer"]: [lindex $info 3]  $date\n"
     if {[info exists idtags($id)]} {
-	$ctext insert end "Tags:"
+	$ctext insert end [mc "Tags:"]
 	foreach tag $idtags($id) {
 	    $ctext insert end " $tag"
 	}
@@ -4737,18 +4737,18 @@ proc selectline {l isnew} {
 	    } else {
 		set tag m$np
 	    }
-	    $ctext insert end "Parent: " $tag
+	    $ctext insert end "[mc "Parent"]: " $tag
 	    appendwithlinks [commit_descriptor $p] {}
 	    incr np
 	}
     } else {
 	foreach p $olds {
-	    append headers "Parent: [commit_descriptor $p]"
+	    append headers "[mc "Parent"]: [commit_descriptor $p]"
 	}
     }
 
     foreach c $children($curview,$id) {
-	append headers "Child:  [commit_descriptor $c]"
+	append headers "[mc "Child"]:  [commit_descriptor $c]"
     }
 
     # make anything that looks like a SHA1 ID be a clickable link
@@ -4757,13 +4757,13 @@ proc selectline {l isnew} {
 	if {![info exists allcommits]} {
 	    getallcommits
 	}
-	$ctext insert end "Branch: "
+	$ctext insert end "[mc "Branch"]: "
 	$ctext mark set branch "end -1c"
 	$ctext mark gravity branch left
-	$ctext insert end "\nFollows: "
+	$ctext insert end "\n[mc "Follows"]: "
 	$ctext mark set follows "end -1c"
 	$ctext mark gravity follows left
-	$ctext insert end "\nPrecedes: "
+	$ctext insert end "\n[mc "Precedes"]: "
 	$ctext mark set precedes "end -1c"
 	$ctext mark gravity precedes left
 	$ctext insert end "\n"
@@ -5045,7 +5045,7 @@ proc mergediff {id l} {
 	set cmd [concat $cmd -- $viewfiles($curview)]
     }
     if {[catch {set mdf [open $cmd r]} err]} {
-	error_popup "Error getting merge diffs: $err"
+	error_popup "[mc "Error getting merge diffs:"] $err"
 	return
     }
     fconfigure $mdf -blocking 0
@@ -5722,9 +5722,9 @@ proc sha1change {n1 n2 op} {
     }
     if {[$sha1but cget -state] == $state} return
     if {$state == "normal"} {
-	$sha1but conf -state normal -relief raised -text "Goto: "
+	$sha1but conf -state normal -relief raised -text "[mc "Goto:"] "
     } else {
-	$sha1but conf -state disabled -relief flat -text "SHA1 ID: "
+	$sha1but conf -state disabled -relief flat -text "[mc "SHA1 ID:"] "
     }
 }
 
@@ -5749,7 +5749,7 @@ proc gotocommit {} {
 	    }
 	    if {$matches ne {}} {
 		if {[llength $matches] > 1} {
-		    error_popup "Short SHA1 id $id is ambiguous"
+		    error_popup [mc "Short SHA1 id %s is ambiguous" $id]
 		    return
 		}
 		set id [lindex $matches 0]
@@ -5761,11 +5761,11 @@ proc gotocommit {} {
 	return
     }
     if {[regexp {^[0-9a-fA-F]{4,}$} $sha1string]} {
-	set type "SHA1 id"
+	set msg [mc "SHA1 id %s is not known" $sha1string]
     } else {
-	set type "Tag/Head"
+	set msg [mc "Tag/Head %s is not known" $sha1string]
     }
-    error_popup "$type $sha1string is not known"
+    error_popup $msg
 }
 
 proc lineenter {x y id} {
@@ -5895,17 +5895,17 @@ proc lineclick {x y id isnew} {
     $ctext conf -state normal
     clear_ctext
     settabs 0
-    $ctext insert end "Parent:\t"
+    $ctext insert end "[mc "Parent"]:\t"
     $ctext insert end $id link0
     setlink $id link0
     set info $commitinfo($id)
     $ctext insert end "\n\t[lindex $info 0]\n"
-    $ctext insert end "\tAuthor:\t[lindex $info 1]\n"
+    $ctext insert end "\t[mc "Author"]:\t[lindex $info 1]\n"
     set date [formatdate [lindex $info 2]]
-    $ctext insert end "\tDate:\t$date\n"
+    $ctext insert end "\t[mc "Date"]:\t$date\n"
     set kids $children($curview,$id)
     if {$kids ne {}} {
-	$ctext insert end "\nChildren:"
+	$ctext insert end "\n[mc "Children"]:"
 	set i 0
 	foreach child $kids {
 	    incr i
@@ -5915,9 +5915,9 @@ proc lineclick {x y id isnew} {
 	    $ctext insert end $child link$i
 	    setlink $child link$i
 	    $ctext insert end "\n\t[lindex $info 0]"
-	    $ctext insert end "\n\tAuthor:\t[lindex $info 1]"
+	    $ctext insert end "\n\t[mc "Author"]:\t[lindex $info 1]"
 	    set date [formatdate [lindex $info 2]]
-	    $ctext insert end "\n\tDate:\t$date\n"
+	    $ctext insert end "\n\t[mc "Date"]:\t$date\n"
 	}
     }
     $ctext conf -state disabled
@@ -5962,13 +5962,13 @@ proc rowmenu {x y id} {
     }
     if {$id ne $nullid && $id ne $nullid2} {
 	set menu $rowctxmenu
-	$menu entryconfigure 7 -label "Reset $mainhead branch to here"
+	$menu entryconfigure 7 -label [mc "Reset %s branch to here" $mainhead]
     } else {
 	set menu $fakerowmenu
     }
-    $menu entryconfigure "Diff this*" -state $state
-    $menu entryconfigure "Diff selected*" -state $state
-    $menu entryconfigure "Make patch" -state $state
+    $menu entryconfigure [mc "Diff this -> selected"] -state $state
+    $menu entryconfigure [mc "Diff selected -> this"] -state $state
+    $menu entryconfigure [mc "Make patch"] -state $state
     tk_popup $menu $x $y
 }
 
@@ -5993,13 +5993,13 @@ proc doseldiff {oldid newid} {
 
     $ctext conf -state normal
     clear_ctext
-    init_flist "Top"
-    $ctext insert end "From "
+    init_flist [mc "Top"]
+    $ctext insert end "[mc "From"] "
     $ctext insert end $oldid link0
     setlink $oldid link0
     $ctext insert end "\n     "
     $ctext insert end [lindex $commitinfo($oldid) 0]
-    $ctext insert end "\n\nTo   "
+    $ctext insert end "\n\n[mc "To"]   "
     $ctext insert end $newid link1
     setlink $newid link1
     $ctext insert end "\n     "
@@ -6022,9 +6022,9 @@ proc mkpatch {} {
     set patchtop $top
     catch {destroy $top}
     toplevel $top
-    label $top.title -text "Generate patch"
+    label $top.title -text [mc "Generate patch"]
     grid $top.title - -pady 10
-    label $top.from -text "From:"
+    label $top.from -text [mc "From:"]
     entry $top.fromsha1 -width 40 -relief flat
     $top.fromsha1 insert 0 $oldid
     $top.fromsha1 conf -state readonly
@@ -6033,7 +6033,7 @@ proc mkpatch {} {
     $top.fromhead insert 0 $oldhead
     $top.fromhead conf -state readonly
     grid x $top.fromhead -sticky w
-    label $top.to -text "To:"
+    label $top.to -text [mc "To:"]
     entry $top.tosha1 -width 40 -relief flat
     $top.tosha1 insert 0 $newid
     $top.tosha1 conf -state readonly
@@ -6042,16 +6042,16 @@ proc mkpatch {} {
     $top.tohead insert 0 $newhead
     $top.tohead conf -state readonly
     grid x $top.tohead -sticky w
-    button $top.rev -text "Reverse" -command mkpatchrev -padx 5
+    button $top.rev -text [mc "Reverse"] -command mkpatchrev -padx 5
     grid $top.rev x -pady 10
-    label $top.flab -text "Output file:"
+    label $top.flab -text [mc "Output file:"]
     entry $top.fname -width 60
     $top.fname insert 0 [file normalize "patch$patchnum.patch"]
     incr patchnum
     grid $top.flab $top.fname -sticky w
     frame $top.buts
-    button $top.buts.gen -text "Generate" -command mkpatchgo
-    button $top.buts.can -text "Cancel" -command mkpatchcan
+    button $top.buts.gen -text [mc "Generate"] -command mkpatchgo
+    button $top.buts.can -text [mc "Cancel"] -command mkpatchcan
     grid $top.buts.gen $top.buts.can
     grid columnconfigure $top.buts 0 -weight 1 -uniform a
     grid columnconfigure $top.buts 1 -weight 1 -uniform a
@@ -6086,7 +6086,7 @@ proc mkpatchgo {} {
     set cmd [lrange $cmd 1 end]
     lappend cmd >$fname &
     if {[catch {eval exec $cmd} err]} {
-	error_popup "Error creating patch: $err"
+	error_popup "[mc "Error creating patch:"] $err"
     }
     catch {destroy $patchtop}
     unset patchtop
@@ -6106,9 +6106,9 @@ proc mktag {} {
     set mktagtop $top
     catch {destroy $top}
     toplevel $top
-    label $top.title -text "Create tag"
+    label $top.title -text [mc "Create tag"]
     grid $top.title - -pady 10
-    label $top.id -text "ID:"
+    label $top.id -text [mc "ID:"]
     entry $top.sha1 -width 40 -relief flat
     $top.sha1 insert 0 $rowmenuid
     $top.sha1 conf -state readonly
@@ -6117,12 +6117,12 @@ proc mktag {} {
     $top.head insert 0 [lindex $commitinfo($rowmenuid) 0]
     $top.head conf -state readonly
     grid x $top.head -sticky w
-    label $top.tlab -text "Tag name:"
+    label $top.tlab -text [mc "Tag name:"]
     entry $top.tag -width 60
     grid $top.tlab $top.tag -sticky w
     frame $top.buts
-    button $top.buts.gen -text "Create" -command mktaggo
-    button $top.buts.can -text "Cancel" -command mktagcan
+    button $top.buts.gen -text [mc "Create"] -command mktaggo
+    button $top.buts.can -text [mc "Cancel"] -command mktagcan
     grid $top.buts.gen $top.buts.can
     grid columnconfigure $top.buts 0 -weight 1 -uniform a
     grid columnconfigure $top.buts 1 -weight 1 -uniform a
@@ -6136,11 +6136,11 @@ proc domktag {} {
     set id [$mktagtop.sha1 get]
     set tag [$mktagtop.tag get]
     if {$tag == {}} {
-	error_popup "No tag name specified"
+	error_popup [mc "No tag name specified"]
 	return
     }
     if {[info exists tagids($tag)]} {
-	error_popup "Tag \"$tag\" already exists"
+	error_popup [mc "Tag \"%s\" already exists" $tag]
 	return
     }
     if {[catch {
@@ -6150,7 +6150,7 @@ proc domktag {} {
 	puts $f $id
 	close $f
     } err]} {
-	error_popup "Error creating tag: $err"
+	error_popup "[mc "Error creating tag:"] $err"
 	return
     }
 
@@ -6203,9 +6203,9 @@ proc writecommit {} {
     set wrcomtop $top
     catch {destroy $top}
     toplevel $top
-    label $top.title -text "Write commit to file"
+    label $top.title -text [mc "Write commit to file"]
     grid $top.title - -pady 10
-    label $top.id -text "ID:"
+    label $top.id -text [mc "ID:"]
     entry $top.sha1 -width 40 -relief flat
     $top.sha1 insert 0 $rowmenuid
     $top.sha1 conf -state readonly
@@ -6214,16 +6214,16 @@ proc writecommit {} {
     $top.head insert 0 [lindex $commitinfo($rowmenuid) 0]
     $top.head conf -state readonly
     grid x $top.head -sticky w
-    label $top.clab -text "Command:"
+    label $top.clab -text [mc "Command:"]
     entry $top.cmd -width 60 -textvariable wrcomcmd
     grid $top.clab $top.cmd -sticky w -pady 10
-    label $top.flab -text "Output file:"
+    label $top.flab -text [mc "Output file:"]
     entry $top.fname -width 60
     $top.fname insert 0 [file normalize "commit-[string range $rowmenuid 0 
6]"]
     grid $top.flab $top.fname -sticky w
     frame $top.buts
-    button $top.buts.gen -text "Write" -command wrcomgo
-    button $top.buts.can -text "Cancel" -command wrcomcan
+    button $top.buts.gen -text [mc "Write"] -command wrcomgo
+    button $top.buts.can -text [mc "Cancel"] -command wrcomcan
     grid $top.buts.gen $top.buts.can
     grid columnconfigure $top.buts 0 -weight 1 -uniform a
     grid columnconfigure $top.buts 1 -weight 1 -uniform a
@@ -6238,7 +6238,7 @@ proc wrcomgo {} {
     set cmd "echo $id | [$wrcomtop.cmd get]"
     set fname [$wrcomtop.fname get]
     if {[catch {exec sh -c $cmd >$fname &} err]} {
-	error_popup "Error writing commit: $err"
+	error_popup "[mc "Error writing commit:"] $err"
     }
     catch {destroy $wrcomtop}
     unset wrcomtop
@@ -6257,19 +6257,19 @@ proc mkbranch {} {
     set top .makebranch
     catch {destroy $top}
     toplevel $top
-    label $top.title -text "Create new branch"
+    label $top.title -text [mc "Create new branch"]
     grid $top.title - -pady 10
-    label $top.id -text "ID:"
+    label $top.id -text [mc "ID:"]
     entry $top.sha1 -width 40 -relief flat
     $top.sha1 insert 0 $rowmenuid
     $top.sha1 conf -state readonly
     grid $top.id $top.sha1 -sticky w
-    label $top.nlab -text "Name:"
+    label $top.nlab -text [mc "Name:"]
     entry $top.name -width 40
     grid $top.nlab $top.name -sticky w
     frame $top.buts
-    button $top.buts.go -text "Create" -command [list mkbrgo $top]
-    button $top.buts.can -text "Cancel" -command "catch {destroy $top}"
+    button $top.buts.go -text [mc "Create"] -command [list mkbrgo $top]
+    button $top.buts.can -text [mc "Cancel"] -command "catch {destroy $top}"
     grid $top.buts.go $top.buts.can
     grid columnconfigure $top.buts 0 -weight 1 -uniform a
     grid columnconfigure $top.buts 1 -weight 1 -uniform a
@@ -6283,7 +6283,7 @@ proc mkbrgo {top} {
     set name [$top.name get]
     set id [$top.sha1 get]
     if {$name eq {}} {
-	error_popup "Please specify a name for the new branch"
+	error_popup [mc "Please specify a name for the new branch"]
 	return
     }
     catch {destroy $top}
@@ -6312,11 +6312,12 @@ proc cherrypick {} {
     set oldhead [exec git rev-parse HEAD]
     set dheads [descheads $rowmenuid]
     if {$dheads ne {} && [lsearch -exact $dheads $oldhead] >= 0} {
-	set ok [confirm_popup "Commit [string range $rowmenuid 0 7] is already\
-			included in branch $mainhead -- really re-apply it?"]
+	set ok [confirm_popup [mc "Commit %s is already\
+		included in branch %s -- really re-apply it?" \
+				   [string range $rowmenuid 0 7] $mainhead]]
 	if {!$ok} return
     }
-    nowbusy cherrypick "Cherry-picking"
+    nowbusy cherrypick [mc "Cherry-picking"]
     update
     # Unfortunately git-cherry-pick writes stuff to stderr even when
     # no error occurs, and exec takes that as an indication of error...
@@ -6328,7 +6329,7 @@ proc cherrypick {} {
     set newhead [exec git rev-parse HEAD]
     if {$newhead eq $oldhead} {
 	notbusy cherrypick
-	error_popup "No changes committed"
+	error_popup [mc "No changes committed"]
 	return
     }
     addnewchild $newhead $oldhead
@@ -6351,28 +6352,28 @@ proc resethead {} {
     set w ".confirmreset"
     toplevel $w
     wm transient $w .
-    wm title $w "Confirm reset"
+    wm title $w [mc "Confirm reset"]
     message $w.m -text \
-	"Reset branch $mainhead to [string range $rowmenuid 0 7]?" \
+	[mc "Reset branch %s to %s?" $mainhead [string range $rowmenuid 0 7]] \
 	-justify center -aspect 1000
     pack $w.m -side top -fill x -padx 20 -pady 20
     frame $w.f -relief sunken -border 2
-    message $w.f.rt -text "Reset type:" -aspect 1000
+    message $w.f.rt -text [mc "Reset type:"] -aspect 1000
     grid $w.f.rt -sticky w
     set resettype mixed
     radiobutton $w.f.soft -value soft -variable resettype -justify left \
-	-text "Soft: Leave working tree and index untouched"
+	-text [mc "Soft: Leave working tree and index untouched"]
     grid $w.f.soft -sticky w
     radiobutton $w.f.mixed -value mixed -variable resettype -justify left \
-	-text "Mixed: Leave working tree untouched, reset index"
+	-text [mc "Mixed: Leave working tree untouched, reset index"]
     grid $w.f.mixed -sticky w
     radiobutton $w.f.hard -value hard -variable resettype -justify left \
-	-text "Hard: Reset working tree and index\n(discard ALL local changes)"
+	-text [mc "Hard: Reset working tree and index\n(discard ALL local changes)"]
     grid $w.f.hard -sticky w
     pack $w.f -side top -fill x
-    button $w.ok -text OK -command "set confirm_ok 1; destroy $w"
+    button $w.ok -text [mc OK] -command "set confirm_ok 1; destroy $w"
     pack $w.ok -side left -fill x -padx 20 -pady 20
-    button $w.cancel -text Cancel -command "destroy $w"
+    button $w.cancel -text [mc Cancel] -command "destroy $w"
     pack $w.cancel -side right -fill x -padx 20 -pady 20
     bind $w <Visibility> "grab $w; focus $w"
     tkwait window $w
@@ -6383,7 +6384,7 @@ proc resethead {} {
     } else {
 	dohidelocalchanges
 	filerun $fd [list readresetstat $fd]
-	nowbusy reset "Resetting"
+	nowbusy reset [mc "Resetting"]
     }
 }
 
@@ -6440,7 +6441,7 @@ proc cobranch {} {
 
     # check the tree is clean first??
     set oldmainhead $mainhead
-    nowbusy checkout "Checking out"
+    nowbusy checkout [mc "Checking out"]
     update
     dohidelocalchanges
     if {[catch {
@@ -6470,14 +6471,14 @@ proc rmbranch {} {
     set id $headmenuid
     # this check shouldn't be needed any more...
     if {$head eq $mainhead} {
-	error_popup "Cannot delete the currently checked-out branch"
+	error_popup [mc "Cannot delete the currently checked-out branch"]
 	return
     }
     set dheads [descheads $id]
     if {[llength $dheads] == 1 && $idheads($dheads) eq $head} {
 	# the stuff on this branch isn't on any other branch
-	if {![confirm_popup "The commits on branch $head aren't on any other\
-			branch.\nReally delete branch $head?"]} return
+	if {![confirm_popup [mc "The commits on branch %s aren't on any other\
+			branch.\nReally delete branch %s?" $head $head]]} return
     }
     nowbusy rmbranch
     update
@@ -6507,7 +6508,7 @@ proc showrefs {} {
 	return
     }
     toplevel $top
-    wm title $top "Tags and heads: [file tail [pwd]]"
+    wm title $top [mc "Tags and heads: %s" [file tail [pwd]]]
     text $top.list -background $bgcolor -foreground $fgcolor \
 	-selectbackground $selectbgcolor -font mainfont \
 	-xscrollcommand "$top.xsb set" -yscrollcommand "$top.ysb set" \
@@ -6521,14 +6522,14 @@ proc showrefs {} {
     grid $top.list $top.ysb -sticky nsew
     grid $top.xsb x -sticky ew
     frame $top.f
-    label $top.f.l -text "Filter: " -font uifont
+    label $top.f.l -text "[mc "Filter"]: " -font uifont
     entry $top.f.e -width 20 -textvariable reflistfilter -font uifont
     set reflistfilter "*"
     trace add variable reflistfilter write reflistfilter_change
     pack $top.f.e -side right -fill x -expand 1
     pack $top.f.l -side left
     grid $top.f - -sticky ew -pady 2
-    button $top.close -command [list destroy $top] -text "Close" \
+    button $top.close -command [list destroy $top] -text [mc "Close"] \
 	-font uifont
     grid $top.close -
     grid columnconfigure $top 0 -weight 1
@@ -6816,9 +6817,9 @@ proc getallclines {fd} {
 	    dropcache $err
 	    return
 	}
-	error_popup "Error reading commit topology information;\
+	error_popup "[mc "Error reading commit topology information;\
 		branch and preceding/following tag information\
-		will be incomplete.\n($err)"
+	        will be incomplete."]\n($err)"
 	set cacheok 0
     }
     if {[incr allcommits -1] == 0} {
@@ -7800,7 +7801,7 @@ proc showtag {tag isnew} {
     if {[info exists tagcontents($tag)]} {
 	set text $tagcontents($tag)
     } else {
-	set text "Tag: $tag\nId:  $tagids($tag)"
+	set text "[mc "Tag"]: $tag\n[mc "Id"]:  $tagids($tag)"
     }
     appendwithlinks $text {}
     $ctext conf -state disabled
@@ -7840,7 +7841,7 @@ proc choosefont {font which} {
 	font create sample
 	eval font config sample [font actual $font]
 	toplevel $top
-	wm title $top "Gitk font chooser"
+	wm title $top [mc "Gitk font chooser"]
 	label $top.l -textvariable fontparam(which) -font uifont
 	pack $top.l -side top
 	set fontlist [lsort [font families]]
@@ -7857,10 +7858,10 @@ proc choosefont {font which} {
 	    -textvariable fontparam(size) \
 	    -validatecommand {string is integer -strict %s}
 	checkbutton $top.g.bold -padx 5 \
-	    -font {{Times New Roman} 12 bold} -text "B" -indicatoron 0 \
+	    -font {{Times New Roman} 12 bold} -text [mc "B"] -indicatoron 0 \
 	    -variable fontparam(weight) -onvalue bold -offvalue normal
 	checkbutton $top.g.ital -padx 5 \
-	    -font {{Times New Roman} 12 italic} -text "I" -indicatoron 0  \
+	    -font {{Times New Roman} 12 italic} -text [mc "I"] -indicatoron 0  \
 	    -variable fontparam(slant) -onvalue italic -offvalue roman
 	pack $top.g.size $top.g.bold $top.g.ital -side left
 	pack $top.g -side top
@@ -7871,9 +7872,9 @@ proc choosefont {font which} {
 	bind $top.c <Configure> [list centertext $top.c]
 	pack $top.c -side top -fill x
 	frame $top.buts
-	button $top.buts.ok -text "OK" -command fontok -default active \
+	button $top.buts.ok -text [mc "OK"] -command fontok -default active \
 	    -font uifont
-	button $top.buts.can -text "Cancel" -command fontcan -default normal \
+	button $top.buts.can -text [mc "Cancel"] -command fontcan -default normal \
 	    -font uifont
 	grid $top.buts.ok $top.buts.can
 	grid columnconfigure $top.buts 0 -weight 1 -uniform a
@@ -7955,85 +7956,85 @@ proc doprefs {} {
 	set oldprefs($v) [set $v]
     }
     toplevel $top
-    wm title $top "Gitk preferences"
-    label $top.ldisp -text "Commit list display options"
+    wm title $top [mc "Gitk preferences"]
+    label $top.ldisp -text [mc "Commit list display options"]
     $top.ldisp configure -font uifont
     grid $top.ldisp - -sticky w -pady 10
     label $top.spacer -text " "
-    label $top.maxwidthl -text "Maximum graph width (lines)" \
+    label $top.maxwidthl -text [mc "Maximum graph width (lines)"] \
 	-font optionfont
     spinbox $top.maxwidth -from 0 -to 100 -width 4 -textvariable maxwidth
     grid $top.spacer $top.maxwidthl $top.maxwidth -sticky w
-    label $top.maxpctl -text "Maximum graph width (% of pane)" \
+    label $top.maxpctl -text [mc "Maximum graph width (% of pane)"] \
 	-font optionfont
     spinbox $top.maxpct -from 1 -to 100 -width 4 -textvariable maxgraphpct
     grid x $top.maxpctl $top.maxpct -sticky w
     frame $top.showlocal
-    label $top.showlocal.l -text "Show local changes" -font optionfont
+    label $top.showlocal.l -text [mc "Show local changes"] -font optionfont
     checkbutton $top.showlocal.b -variable showlocalchanges
     pack $top.showlocal.b $top.showlocal.l -side left
     grid x $top.showlocal -sticky w
 
-    label $top.ddisp -text "Diff display options"
+    label $top.ddisp -text [mc "Diff display options"]
     $top.ddisp configure -font uifont
     grid $top.ddisp - -sticky w -pady 10
-    label $top.tabstopl -text "Tab spacing" -font optionfont
+    label $top.tabstopl -text [mc "Tab spacing"] -font optionfont
     spinbox $top.tabstop -from 1 -to 20 -width 4 -textvariable tabstop
     grid x $top.tabstopl $top.tabstop -sticky w
     frame $top.ntag
-    label $top.ntag.l -text "Display nearby tags" -font optionfont
+    label $top.ntag.l -text [mc "Display nearby tags"] -font optionfont
     checkbutton $top.ntag.b -variable showneartags
     pack $top.ntag.b $top.ntag.l -side left
     grid x $top.ntag -sticky w
     frame $top.ldiff
-    label $top.ldiff.l -text "Limit diffs to listed paths" -font optionfont
+    label $top.ldiff.l -text [mc "Limit diffs to listed paths"] -font 
optionfont
     checkbutton $top.ldiff.b -variable limitdiffs
     pack $top.ldiff.b $top.ldiff.l -side left
     grid x $top.ldiff -sticky w
 
-    label $top.cdisp -text "Colors: press to choose"
+    label $top.cdisp -text [mc "Colors: press to choose"]
     $top.cdisp configure -font uifont
     grid $top.cdisp - -sticky w -pady 10
     label $top.bg -padx 40 -relief sunk -background $bgcolor
-    button $top.bgbut -text "Background" -font optionfont \
+    button $top.bgbut -text [mc "Background"] -font optionfont \
 	-command [list choosecolor bgcolor 0 $top.bg background setbg]
     grid x $top.bgbut $top.bg -sticky w
     label $top.fg -padx 40 -relief sunk -background $fgcolor
-    button $top.fgbut -text "Foreground" -font optionfont \
+    button $top.fgbut -text [mc "Foreground"] -font optionfont \
 	-command [list choosecolor fgcolor 0 $top.fg foreground setfg]
     grid x $top.fgbut $top.fg -sticky w
     label $top.diffold -padx 40 -relief sunk -background [lindex $diffcolors 
0]
-    button $top.diffoldbut -text "Diff: old lines" -font optionfont \
+    button $top.diffoldbut -text [mc "Diff: old lines"] -font optionfont \
 	-command [list choosecolor diffcolors 0 $top.diffold "diff old lines" \
 		      [list $ctext tag conf d0 -foreground]]
     grid x $top.diffoldbut $top.diffold -sticky w
     label $top.diffnew -padx 40 -relief sunk -background [lindex $diffcolors 
1]
-    button $top.diffnewbut -text "Diff: new lines" -font optionfont \
+    button $top.diffnewbut -text [mc "Diff: new lines"] -font optionfont \
 	-command [list choosecolor diffcolors 1 $top.diffnew "diff new lines" \
 		      [list $ctext tag conf d1 -foreground]]
     grid x $top.diffnewbut $top.diffnew -sticky w
     label $top.hunksep -padx 40 -relief sunk -background [lindex $diffcolors 
2]
-    button $top.hunksepbut -text "Diff: hunk header" -font optionfont \
+    button $top.hunksepbut -text [mc "Diff: hunk header"] -font optionfont \
 	-command [list choosecolor diffcolors 2 $top.hunksep \
 		      "diff hunk header" \
 		      [list $ctext tag conf hunksep -foreground]]
     grid x $top.hunksepbut $top.hunksep -sticky w
     label $top.selbgsep -padx 40 -relief sunk -background $selectbgcolor
-    button $top.selbgbut -text "Select bg" -font optionfont \
+    button $top.selbgbut -text [mc "Select bg"] -font optionfont \
 	-command [list choosecolor selectbgcolor 0 $top.selbgsep background 
setselbg]
     grid x $top.selbgbut $top.selbgsep -sticky w
 
-    label $top.cfont -text "Fonts: press to choose"
+    label $top.cfont -text [mc "Fonts: press to choose"]
     $top.cfont configure -font uifont
     grid $top.cfont - -sticky w -pady 10
-    mkfontdisp mainfont $top "Main font"
-    mkfontdisp textfont $top "Diff display font"
-    mkfontdisp uifont $top "User interface font"
+    mkfontdisp mainfont $top [mc "Main font"]
+    mkfontdisp textfont $top [mc "Diff display font"]
+    mkfontdisp uifont $top [mc "User interface font"]
 
     frame $top.buts
-    button $top.buts.ok -text "OK" -command prefsok -default active
+    button $top.buts.ok -text [mc "OK"] -command prefsok -default active
     $top.buts.ok configure -font uifont
-    button $top.buts.can -text "Cancel" -command prefscan -default normal
+    button $top.buts.can -text [mc "Cancel"] -command prefscan -default 
normal
     $top.buts.can configure -font uifont
     grid $top.buts.ok $top.buts.can
     grid columnconfigure $top.buts 0 -weight 1 -uniform a
@@ -8046,7 +8047,7 @@ proc choosecolor {v vi w x cmd} {
     global $v
 
     set c [tk_chooseColor -initialcolor [lindex [set $v] $vi] \
-	       -title "Gitk: choose color for $x"]
+	       -title [mc "Gitk: choose color for %s" $x]]
     if {$c eq {}} return
     $w conf -background $c
     lset $v $vi $c
@@ -8427,8 +8428,8 @@ proc tcl_encoding {enc} {
 
 # First check that Tcl/Tk is recent enough
 if {[catch {package require Tk 8.4} err]} {
-    show_error {} . "Sorry, gitk cannot run with this version of Tcl/Tk.\n\
-		     Gitk requires at least Tcl/Tk 8.4."
+    show_error {} . [mc "Sorry, gitk cannot run with this version of Tcl/Tk.
\n\
+		     Gitk requires at least Tcl/Tk 8.4."]
     exit 1
 }
 
@@ -8512,11 +8513,11 @@ eval font create uifont [fontflags uifont]
 
 # check that we can find a .git directory somewhere...
 if {[catch {set gitdir [gitdir]}]} {
-    show_error {} . "Cannot find a git repository here."
+    show_error {} . [mc "Cannot find a git repository here."]
     exit 1
 }
 if {![file isdirectory $gitdir]} {
-    show_error {} . "Cannot find the git directory \"$gitdir\"."
+    show_error {} . [mc "Cannot find the git directory \"%s\"." $gitdir]
     exit 1
 }
 
@@ -8555,8 +8556,8 @@ if {$i >= [llength $argv] && $revtreeargs ne {}} {
 	# with git log and git rev-list, check revtreeargs for filenames.
 	foreach arg $revtreeargs {
 	    if {[file exists $arg]} {
-		show_error {} . "Ambiguous argument '$arg': both revision\
-				 and filename"
+		show_error {} . [mc "Ambiguous argument '%s': both revision\
+				 and filename" $arg]
 		exit 1
 	    }
 	}
@@ -8567,7 +8568,7 @@ if {$i >= [llength $argv] && $revtreeargs ne {}} {
 	if {$i > 0} {
 	    set err [string range $err [expr {$i + 6}] end]
 	}
-	show_error {} . "Bad arguments to gitk:\n$err"
+	show_error {} . "[mc "Bad arguments to gitk:"]\n$err"
 	exit 1
     }
 }
@@ -8579,7 +8580,7 @@ if {$mergeonly} {
     if {[catch {
 	set fd [open "| git ls-files -u" r]
     } err]} {
-	show_error {} . "Couldn't get list of unmerged files: $err"
+	show_error {} . "[mc "Couldn't get list of unmerged files:"] $err"
 	exit 1
     }
     while {[gets $fd line] >= 0} {
@@ -8595,11 +8596,11 @@ if {$mergeonly} {
     catch {close $fd}
     if {$mlist eq {}} {
 	if {$nr_unmerged == 0} {
-	    show_error {} . "No files selected: --merge specified but\
-			     no files are unmerged."
+	    show_error {} . [mc "No files selected: --merge specified but\
+			     no files are unmerged."]
 	} else {
-	    show_error {} . "No files selected: --merge specified but\
-			     no unmerged files are within file limit."
+	    show_error {} . [mc "No files selected: --merge specified but\
+			     no unmerged files are within file limit."]
 	}
 	exit 1
     }
@@ -8657,13 +8658,13 @@ if {$cmdline_files ne {} || $revtreeargs ne {}} {
     set curview 1
     set selectedview 1
     set nextviewnum 2
-    set viewname(1) "Command line"
+    set viewname(1) [mc "Command line"]
     set viewfiles(1) $cmdline_files
     set viewargs(1) $revtreeargs
     set viewperm(1) 0
     addviewmenu 1
-    .bar.view entryconf Edit* -state normal
-    .bar.view entryconf Delete* -state normal
+    .bar.view entryconf [mc "Edit view..."] -state normal
+    .bar.view entryconf [mc "Delete view"] -state normal
 }
 
 if {[info exists permviews]} {
-- 
1.5.3.4.206.g58ba4

^ permalink raw reply related

* [PATCH 2/9] gitk i18n implementation: Import msgcat for message string translation; load translation catalogs.
From: Christian Stimming @ 2007-11-07 17:40 UTC (permalink / raw)
  To: Paul Mackerras; +Cc: Junio C Hamano, git
In-Reply-To: <200711071839.08570.stimming@tuhh.de>

By setting the environment variable GITK_MSGSDIR, one can manually
set the directory where the .msg files are located. This is quite handy 
during development with GITK_MSGSDIR=po.
---
 gitk |   19 +++++++++++++++++++
 1 files changed, 19 insertions(+), 0 deletions(-)

diff --git a/gitk b/gitk
index 1da0b0a..629acfb 100755
--- a/gitk
+++ b/gitk
@@ -8476,6 +8476,25 @@ set diffcolors {red "#00a000" blue}
 set diffcontext 3
 set selectbgcolor gray85
 
+## For msgcat loading, first locate the installation location.
+if { [info exists ::env(GITK_MSGSDIR)] } {
+    ## Msgsdir was manually set in the environment.
+    set gitk_msgsdir $::env(GITK_MSGSDIR)
+} else {
+    ## Let's guess the prefix from argv0.
+    set gitk_prefix [file dirname [file dirname [file normalize $argv0]]]
+    set gitk_libdir [file join $gitk_prefix share gitk lib]
+    set gitk_msgsdir [file join $gitk_libdir msgs]
+    unset gitk_prefix
+}
+
+## Internationalization (i18n) through msgcat and gettext. See
+## http://www.gnu.org/software/gettext/manual/html_node/Tcl.html
+package require msgcat
+namespace import ::msgcat::mc
+## And eventually load the actual message catalog
+::msgcat::mcload $gitk_msgsdir
+
 catch {source ~/.gitk}
 
 font create optionfont -family sans-serif -size -12
-- 
1.5.3.4.206.g58ba4

^ permalink raw reply related

* [PATCH 1/9] gitk i18n implementation: Add Makefile with rules for po file creation and installation.
From: Christian Stimming @ 2007-11-07 17:39 UTC (permalink / raw)
  To: Paul Mackerras; +Cc: Junio C Hamano, git

[-- Attachment #1: Type: text/plain, Size: 2185 bytes --]

The compiled .msg files will be installed into $(sharedir)/gitk/lib/msgs
according to Junio's mailing list proposal on 2007-07-28.
---
These patches are against master of gitk.git at git.kernel.org.

Just in case any of the mailers might mess up whitespaces, I've also
attached all 9 patches in the attached tarball.

 Makefile |   45 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 45 insertions(+), 0 deletions(-)
 create mode 100644 Makefile

diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..38154b6
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,45 @@
+# Set the installation directories; this section is needed only in
+# gitk.git but probably not in git.git.
+ifndef gitexecdir
+	gitexecdir := $(shell git --exec-path)
+endif
+ifndef sharedir
+	sharedir := $(dir $(gitexecdir))share
+endif
+
+# From here on, these are needed in git.git/gitk/Makefile.
+gitk_libdir   ?= $(sharedir)/gitk/lib
+msgsdir    ?= $(gitk_libdir)/msgs
+msgsdir_SQ  = $(subst ','\'',$(msgsdir))
+
+## Beginning of po-file creation rules
+XGETTEXT   ?= xgettext
+MSGFMT     ?= msgfmt
+PO_TEMPLATE = po/gitk.pot
+ALL_POFILES = $(wildcard po/*.po)
+ALL_MSGFILES = $(subst .po,.msg,$(ALL_POFILES))
+
+all:: $(ALL_MSGFILES)
+
+$(PO_TEMPLATE): gitk
+	$(XGETTEXT) -kmc -LTcl -o $@ gitk
+update-po:: $(PO_TEMPLATE)
+	$(foreach p, $(ALL_POFILES), echo Updating $p ; msgmerge -U $p $(PO_TEMPLATE) ; )
+$(ALL_MSGFILES): %.msg : %.po
+	@echo Generating catalog $@
+	$(MSGFMT) --statistics --tcl $< -l $(basename $(notdir $<)) -d $(dir $@)
+
+clean::
+	rm -f $(ALL_PROGRAMS) po/*.msg
+## End of po-file creation rules
+
+# Install rules for po-files
+install: all
+	$(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)$(foreach p,$(ALL_MSGFILES), $(REMOVE_F0)'$(DESTDIR_SQ)$(msgsdir_SQ)'/$(notdir $p) $(REMOVE_F1) &&) true
+	$(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)
-- 
1.5.3.4.206.g58ba4


[-- Attachment #2: gitk-i18n-patches.tar.gz --]
[-- Type: application/x-tgz, Size: 19643 bytes --]

^ permalink raw reply related

* Re: [PATCH] Documentation: enhanced "git for CVS users" doc about shared repositories
From: J. Bruce Fields @ 2007-11-07 16:47 UTC (permalink / raw)
  To: Steffen Prohaska; +Cc: Francesco Pretto, Junio C Hamano, git
In-Reply-To: <277490E5-2B9A-4BA7-9DD7-C1CEE698B348@zib.de>

On Wed, Nov 07, 2007 at 09:07:58AM +0100, Steffen Prohaska wrote:
> On Nov 7, 2007, at 1:46 AM, Francesco Pretto wrote:
>
>> Junio C Hamano ha scritto:
>>>
>>> Honestly speaking, I am not too thrilled about making the
>>> cvs-migration document much longer than what it currently is.
>>>
>
> Maybe the description of setting up a shared repository should
> go to the user-manual and cvs-migration should refer to the
> user-manual, instead of the other way round. I don't like the
> idea that the user-manual is referring to a CVS specific guide.
> The user manual should be as self-contained as possible.

I'd be interested in patches that did that.  If somebody wants to work
on that, they might want to start with

	git://linux-nfs.org/~bfields/git.git docwork-foreign-scms

which has the skeleton of an "interoperating with foreign scms" chapter.

The thing that's kept me from working on this in the past is that it's a
bit of a step backwards for someone that *just* wants to get to the
cvs-migration stuff, since now it may appear you have to plow through
the rest of the manual to get to it.

We could address that with clearer dependency information ("before
reading this chapter, read chapters 1 and 3..."), and/or by providing
some more links (e.g. repopulate the howto directory with links to some
chapters that address popular questions).

--b.

^ permalink raw reply

* Re: stgit: cleaning up after using git branch delete commands
From: Jon Smirl @ 2007-11-07 16:11 UTC (permalink / raw)
  To: Catalin Marinas; +Cc: Git Mailing List
In-Reply-To: <tnxwssuyug1.fsf@pc1117.cambridge.arm.com>

On 11/7/07, Catalin Marinas <catalin.marinas@arm.com> wrote:
> "Jon Smirl" <jonsmirl@gmail.com> wrote:
> > I've used git commands to delete several branches that had stgit
> > active on it.  Doing that has left a bunch of clutter in the .git
> > directory. Is there a stgit command to remove all the clutter from
> > branches that no longer exist? I'd like to use the branch names again
> > but the clutter is interfering.
>
> You can create the branch back with GIT and run "stg branch --delete
> --force", though I don't guarantee it will work (BTW, I only recently
> relaxed the branch deletion rules in StGIT so that it doesn't complain
> of missing files and completes the operation, so you should use the
> latest HEAD).

how about a 'stg gc' command that gets rid of all the inaccessible clutter?


>
> --
> Catalin
>


-- 
Jon Smirl
jonsmirl@gmail.com

^ permalink raw reply

* Re: [PATCH 0/5] some shell portability fixes
From: Nguyen Thai Ngoc Duy @ 2007-11-07 16:05 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Ralf Wildenhues, git
In-Reply-To: <fcaeb9bf0711070758w5832ab83ic16e8fb4edb80972@mail.gmail.com>

On 11/7/07, Nguyen Thai Ngoc Duy <pclouds@gmail.com> wrote:
> On 11/7/07, Junio C Hamano <gitster@pobox.com> wrote:
> > [2/5] Gaah, AIX sed X-<.  I am not opposed to this patch but
> >       would want to get Yays from people with non GNU sed.  Is
> >       busybox sed good enough to grok our scripts these days?
> >       Please ask help and collect Acks at least from folks on
> >       Solaris, MacOS, FBSD, and OBSD.
>
> I haven't extensively used all the scripts. There seems to be no
> sed-related failure from git testsuite results in my git-box branch.
> So I would say for now it's good enough.

Argh, should have made it clear, busybox sed is good enough.

-- 
Duy

^ permalink raw reply

* Re: [PATCH 0/5] some shell portability fixes
From: Nguyen Thai Ngoc Duy @ 2007-11-07 15:58 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Ralf Wildenhues, git
In-Reply-To: <7v8x5bgl04.fsf@gitster.siamese.dyndns.org>

On 11/7/07, Junio C Hamano <gitster@pobox.com> wrote:
> [2/5] Gaah, AIX sed X-<.  I am not opposed to this patch but
>       would want to get Yays from people with non GNU sed.  Is
>       busybox sed good enough to grok our scripts these days?
>       Please ask help and collect Acks at least from folks on
>       Solaris, MacOS, FBSD, and OBSD.

I haven't extensively used all the scripts. There seems to be no
sed-related failure from git testsuite results in my git-box branch.
So I would say for now it's good enough.
-- 
Duy

^ permalink raw reply

* Re: git push refspec problem
From: Johannes Schindelin @ 2007-11-07 15:39 UTC (permalink / raw)
  To: Johannes Gilger; +Cc: James, git
In-Reply-To: <4731D852.2080500@hackvalue.de>

Hi,

On Wed, 7 Nov 2007, Johannes Gilger wrote:

> Johannes Schindelin wrote:
> 
> > On Wed, 7 Nov 2007, James wrote:
> > 
> >>        fetch = +refs/heads/*:refs/remotes/origin/*
> > 
> > This is a refspec.
> > 
> >>        push = ssh://james@my.server.com/home/james/scm/git/project.git/
> > 
> > This is a URL.  It does not specify any refs.  But "push =" expects a 
> > URL.
> 
> I think Johannes meant to say "But 'push =' expects a refspec." (the 
> manpage even says so).

Of course.  Thanks.

Ciao,
Dscho

^ permalink raw reply

* Re: git push refspec problem
From: Pierre Habouzit @ 2007-11-07 15:38 UTC (permalink / raw)
  To: Johannes Gilger; +Cc: James, Johannes Schindelin, git
In-Reply-To: <4731D918.6040106@hackvalue.de>

[-- Attachment #1: Type: text/plain, Size: 751 bytes --]

On Wed, Nov 07, 2007 at 03:26:16PM +0000, Johannes Gilger wrote:
> James wrote:
> > There has to be *some* way of pulling through git and pushing through
> > ssh with a simple "git push".  :-P  I'm doing it manually, after all.  I
> > could have sworn I've read how to do its somewhere but have since
> > forgotten.
> 
> Would two remotes do the trick? One remote only has a fetch entry
> while the other one has a push entry.

  Yes you can do that, but that means you have to spell out the remote
name either for fetching or pushing which somehow sucks :)


-- 
·O·  Pierre Habouzit
··O                                                madcoder@debian.org
OOO                                                http://www.madism.org

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply

* Re: [PATCH 0/5] some shell portability fixes
From: Johannes Schindelin @ 2007-11-07 15:37 UTC (permalink / raw)
  To: Mike Ralphson; +Cc: Ralf Wildenhues, Mike Hommey, Junio C Hamano, git
In-Reply-To: <e2b179460711070730w4ca95989y14872665ddc8bfca@mail.gmail.com>

Hi,

On Wed, 7 Nov 2007, Mike Ralphson wrote:

> On Nov 7, 2007 2:47 PM, Johannes Schindelin <Johannes.Schindelin@gmx.de> wrote:
>
> > I am not sure if the GNU tools are installed in the same place on all 
> > AIX boxen...
> 
> Well let's say the patch would arrive earlier if it was based on the
> shipped Makefile rather than the unholy abomination that is
> autoconf... If the GNU tools have been installed via the IBM AIX
> Toolbox for Linux Applications[1] then they'll be installed in
> /opt/freeware/bin and /usr/linux/bin will be a set of symlinks to
> them.

I guess Makefile is the better place, then.  You are the expert on AIX.

Ciao,
Dscho

^ permalink raw reply

* Re: git push refspec problem
From: James @ 2007-11-07 15:30 UTC (permalink / raw)
  To: Johannes Gilger; +Cc: Johannes Schindelin, git
In-Reply-To: <4731D852.2080500@hackvalue.de>


On Nov 7, 2007, at 10:22 AM, Johannes Gilger wrote:

> Johannes Schindelin wrote:
>> Hi,
>>
>> On Wed, 7 Nov 2007, James wrote:
>>
>>>       fetch = +refs/heads/*:refs/remotes/origin/*
>>
>> This is a refspec.
>>
>>>       push = ssh://james@my.server.com/home/james/scm/git/project.git/
>>
>> This is a URL.  It does not specify any refs.  But "push =" expects  
>> a URL.
>
> I think Johannes meant to say "But 'push =' expects a refspec." (the
> manpage even says so).
>
> About your problem: If you want to pull from a git:// repository and
> push to another with ssh:// (or in general when having two different
> repositories for pushing and fetching) in my novice understanding
> you would need two remotes. In your case, can't you just use your
> ssh-url for fetching as well?
>
> Regards,
> Jojo


I guess I could use my ssh url for pulling, as well.  I simply figured  
it would be easier to add an ssh URL for push (like I was doing  
manually) and be done with it.  But it doesn't seem there's a super  
simple solution (i.e., my syntax was wrong in the config file) to  
using git for pull and ssh for push.

.james


> -- 
> Johannes Gilger <heipei@hackvalue.de>
> http://hackvalue.de/heipei/
> GPG-Key: 0x42F6DE81
> GPG-Fingerprint: BB49 F967 775E BB52 3A81  882C 58EE B178 42F6 DE81

^ permalink raw reply

* Re: [PATCH 0/5] some shell portability fixes
From: Mike Ralphson @ 2007-11-07 15:30 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: Ralf Wildenhues, Mike Hommey, Junio C Hamano, git
In-Reply-To: <Pine.LNX.4.64.0711071446190.4362@racer.site>

On Nov 7, 2007 2:47 PM, Johannes Schindelin <Johannes.Schindelin@gmx.de> wrote:
> > Equally GNU sed is available as a drop-in rpm for AIX. I wonder if it
> > would be worth adding Makefile support for a PATH prefix for the git
> > scripts, so they could prepend (in this case) something like
> > /opt/freeware/bin or /usr/linux/bin ?
> >
> > In our AIX environment many GNU tools are installed but I can't
> > guarantee they come first in the paths of the git users.
> >
> > I'm willing to work up a patch if there's any interest.
>
> Would that be a task for configure?  Because I am not sure if the GNU
> tools are installed in the same place on all AIX boxen...

Well let's say the patch would arrive earlier if it was based on the
shipped Makefile rather than the unholy abomination that is
autoconf... If the GNU tools have been installed via the IBM AIX
Toolbox for Linux Applications[1] then they'll be installed in
/opt/freeware/bin and /usr/linux/bin will be a set of symlinks to
them.

That said, there may be 32/64bit differences and of course anyone
could have rolled their own sed, awk, diff, patch, grep, sort etc in
/usr/local/bin or anywhere else, and I'd guess this might be useful
for Solaris / HPUX users etc.

I was thinking along the lines of the existing $SHELL_PATH, i.e. a
build-time manually-set Makefile/environment variable. I'd also like
to be able to override gitexecdir in the same way without having my
builds marked dirty.

Cheers, Mike

[1] http://www-03.ibm.com/systems/p/os/aix/linux/download.html

^ permalink raw reply

* Re: git push refspec problem
From: Johannes Gilger @ 2007-11-07 15:26 UTC (permalink / raw)
  To: James; +Cc: Pierre Habouzit, Johannes Schindelin, git
In-Reply-To: <EA230407-45F1-4F7E-8415-A43ECF940856@nc.rr.com>

James wrote:
> There has to be *some* way of pulling through git and pushing through
> ssh with a simple "git push".  :-P  I'm doing it manually, after all.  I
> could have sworn I've read how to do its somewhere but have since
> forgotten.

Would two remotes do the trick? One remote only has a fetch entry
while the other one has a push entry.

Regards,
Jojo

-- 
Johannes Gilger <heipei@hackvalue.de>
http://hackvalue.de/heipei/
GPG-Key: 0x42F6DE81
GPG-Fingerprint: BB49 F967 775E BB52 3A81  882C 58EE B178 42F6 DE81

^ permalink raw reply

* Re: git push refspec problem
From: James @ 2007-11-07 15:23 UTC (permalink / raw)
  To: Pierre Habouzit; +Cc: Johannes Schindelin, git
In-Reply-To: <20071107152003.GL18057@artemis.corp>

On Nov 7, 2007, at 10:20 AM, Pierre Habouzit wrote:

> On Wed, Nov 07, 2007 at 03:11:46PM +0000, Johannes Schindelin wrote:
>> Hi,
>>
>> On Wed, 7 Nov 2007, James wrote:
>>
>>>       fetch = +refs/heads/*:refs/remotes/origin/*
>>
>> This is a refspec.
>>
>>>       push = ssh://james@my.server.com/home/james/scm/git/project.git/
>>
>> This is a URL.  It does not specify any refs.  But "push =" expects  
>> a URL.
>>
>> You probably want to setup a different remote if you want to push  
>> to a
>> different URL than you are fetching from.
>
>  Oh, there is no way to pull through git:// and push to ssh://
> perfectly knowint it's the same physical repository so that the fetch
> doesn't have the ssh-handhshake-overhead ?


There has to be *some* way of pulling through git and pushing through  
ssh with a simple "git push".  :-P  I'm doing it manually, after all.   
I could have sworn I've read how to do its somewhere but have since  
forgotten.


> -- 
> ·O·  Pierre Habouzit
> ··O                                                madcoder@debian.org
> OOO                                                http://www.madism.org

^ permalink raw reply

* Re: git push refspec problem
From: Johannes Gilger @ 2007-11-07 15:22 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: James, git
In-Reply-To: <Pine.LNX.4.64.0711071510480.4362@racer.site>

Johannes Schindelin wrote:
> Hi,
> 
> On Wed, 7 Nov 2007, James wrote:
> 
>>        fetch = +refs/heads/*:refs/remotes/origin/*
> 
> This is a refspec.
> 
>>        push = ssh://james@my.server.com/home/james/scm/git/project.git/
> 
> This is a URL.  It does not specify any refs.  But "push =" expects a URL.

I think Johannes meant to say "But 'push =' expects a refspec." (the
manpage even says so).

About your problem: If you want to pull from a git:// repository and
push to another with ssh:// (or in general when having two different
repositories for pushing and fetching) in my novice understanding
you would need two remotes. In your case, can't you just use your
ssh-url for fetching as well?

Regards,
Jojo

-- 
Johannes Gilger <heipei@hackvalue.de>
http://hackvalue.de/heipei/
GPG-Key: 0x42F6DE81
GPG-Fingerprint: BB49 F967 775E BB52 3A81  882C 58EE B178 42F6 DE81

^ permalink raw reply

* Re: [PATCH] status&commit: Teach them to show commits of modified submodules.
From: Yin Ping @ 2007-11-07 15:20 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git
In-Reply-To: <7vwsswjeom.fsf@gitster.siamese.dyndns.org>

On 11/6/07, Junio C Hamano <gitster@pobox.com> wrote:
> "Yin Ping" <pkufranky@gmail.com> writes:
>
> > However, in some cases these messages are helpful. And a third kind of
> > cases is that people care about only part of all submodules.
> >
> > So, maybe some an switch can be used to turn this on or off (default
> > off)?
>
> I personally think that is overengineering.  Isn't having/not
> having the submodule directory cloned a good enough indicator
> of which submodules are interested in by the user?
>
Good suggestion. I'll give my new patch later.

-- 
franky

^ permalink raw reply

* Re: git push refspec problem
From: Pierre Habouzit @ 2007-11-07 15:20 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: James, git
In-Reply-To: <Pine.LNX.4.64.0711071510480.4362@racer.site>

[-- Attachment #1: Type: text/plain, Size: 853 bytes --]

On Wed, Nov 07, 2007 at 03:11:46PM +0000, Johannes Schindelin wrote:
> Hi,
> 
> On Wed, 7 Nov 2007, James wrote:
> 
> >        fetch = +refs/heads/*:refs/remotes/origin/*
> 
> This is a refspec.
> 
> >        push = ssh://james@my.server.com/home/james/scm/git/project.git/
> 
> This is a URL.  It does not specify any refs.  But "push =" expects a URL.
> 
> You probably want to setup a different remote if you want to push to a 
> different URL than you are fetching from.

  Oh, there is no way to pull through git:// and push to ssh://
perfectly knowint it's the same physical repository so that the fetch
doesn't have the ssh-handhshake-overhead ?


-- 
·O·  Pierre Habouzit
··O                                                madcoder@debian.org
OOO                                                http://www.madism.org

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply

* Re: [bug in next ?] git-fetch/git-push issue
From: Pierre Habouzit @ 2007-11-07 15:11 UTC (permalink / raw)
  To: Nicolas Pitre, Daniel Barkalow, Jeff King, Git ML
In-Reply-To: <20071105175654.GD6205@artemis.corp>

[-- Attachment #1: Type: text/plain, Size: 872 bytes --]


oh and while we're at it, someone reminded me on IRC that when you:

  git push origin :somebranch

it does not removes origin/somebranch from your branches.  Now that git
push updates our knowledge of the remote branch, I believe that it
should also try to perform the equivalent of a:

  git branch -r -d origin/somebranch

And to be fair, I'd also say that git fetch <some-remote> should
complain about remote heads that match <some-remote> refspec that have
no corresponding reference _on_ the remote so that the user knows that
the branches have been removed.

I wanted to write a patch about that long time ago, but my plate is
already full with the diff option things.
-- 
·O·  Pierre Habouzit
··O                                                madcoder@debian.org
OOO                                                http://www.madism.org

[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]

^ permalink raw reply

* Re: git push refspec problem
From: Johannes Schindelin @ 2007-11-07 15:11 UTC (permalink / raw)
  To: James; +Cc: git
In-Reply-To: <7B37E361-9606-447C-B853-001182688AFA@nc.rr.com>

Hi,

On Wed, 7 Nov 2007, James wrote:

>        fetch = +refs/heads/*:refs/remotes/origin/*

This is a refspec.

>        push = ssh://james@my.server.com/home/james/scm/git/project.git/

This is a URL.  It does not specify any refs.  But "push =" expects a URL.

You probably want to setup a different remote if you want to push to a 
different URL than you are fetching from.

Hth,
Dscho

^ permalink raw reply

* Re: [PATCH] Make git-clean a builtin
From: Johannes Schindelin @ 2007-11-07 15:04 UTC (permalink / raw)
  To: Shawn Bohrer; +Cc: gitster, git
In-Reply-To: <20071107145434.GB6768@mediacenter.austin.rr.com>

Hi,

On Wed, 7 Nov 2007, Shawn Bohrer wrote:

> On Wed, Nov 07, 2007 at 11:10:45AM +0000, Johannes Schindelin wrote:
> > 
> > you still have quite a number of instances where you wrap just one line 
> > into curly brackets:
> > 
> > 	if (bla) {
> > 		[just one line]
> > 	}
> 
> Crap.  OK I count one instance unless you count:
> 
> 	if (foo) {
> 		one_line();
> 	} else if (bar) {
> 		one_line();
> 		two_lines();
> 	} else {
> 		something_else();
> 	}

I do count them.  Personally, I find it highly distracting and ugly.  
Besides, we have the convention of putting the "}" not into the same line 
as "else".  (See keyword "uncuddling" in the list archives.)

While it may be true that some parts of the code follow these rules less 
strictly, it does not mean that we should introduce more of that kind.

BTW there are plenty of examples in the existing code which illustrate our 
implicit coding conventions.

> Now I suppose I can get rid of the curly braces here as well but I 
> personally find that strange and ugly.  So is there an official 
> guideline on if else statements?

Not yet ;-)  I can add it to the tentative v3 of Documentation/CodingStyle 
or CodingConventions or however the list would like to name it.

Ciao,
Dscho

^ permalink raw reply

* git push refspec problem
From: James @ 2007-11-07 15:01 UTC (permalink / raw)
  To: git

Hi,

I'm trying to set up my git configuration file in one of my projects  
so that I can do a simple "git push" to update my project on the git  
server.

Currently, I run the following command to push my updates (and it  
works just fine):

git push james@my.server.com:~/scm/git/project.git/

In my .git/config file, I've added a line for push, as follows:

[remote "origin"]
         url = git://my.server.com/project.git
         fetch = +refs/heads/*:refs/remotes/origin/*
         push = ssh://james@my.server.com/home/james/scm/git/ 
project.git/

When I run a "git push", it comes back with this error:

fatal: remote part of refspec is not a valid name in ssh://james@my.server.com/home/james/scm/git/project.git/

I've looked at this git push documentation:

http://www.kernel.org/pub/software/scm/git/docs/git-push.html

and it seems like my refspec is indeed correct.  (or so I thought ;))   
Any ideas on what I'm doing wrong?

Thanks!
.james

^ permalink raw reply

* [PATCH v2] Add Documentation/CodingStyle
From: Johannes Schindelin @ 2007-11-07 14:59 UTC (permalink / raw)
  To: Andreas Ericsson; +Cc: Junio C Hamano, Ralf Wildenhues, git
In-Reply-To: <47317CD7.5040506@op5.se>


Even if our code is quite a good documentation for our coding style,
some people seem to prefer a document describing it.

The part about the shell scripts is clearly just copied from one of
Junio's helpful mails, and some parts were added from comments by
Junio and Andreas Ericsson.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---

	On Wed, 7 Nov 2007, Andreas Ericsson wrote:

	> Perhaps with this addendum?
	> 
	> - Think very, very hard before introducing a new dependency into git. This
	>  means you should stay away from scripting languages not already used in
	>  the git core command set unless your command is clearly separate from it,
	>  such as an importer to convert random-scm-X repositories to git.

	I edited it minimally.

 Documentation/CodingStyle |  103 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 103 insertions(+), 0 deletions(-)
 create mode 100644 Documentation/CodingStyle

diff --git a/Documentation/CodingStyle b/Documentation/CodingStyle
new file mode 100644
index 0000000..38a3d9f
--- /dev/null
+++ b/Documentation/CodingStyle
@@ -0,0 +1,103 @@
+As a popular project, we also have some guidelines to keep to the
+code.  For git in general, two rough rules are:
+
+ - Most importantly, we never say "It's in POSIX; we'll happily
+   screw your system that does not conform."  We live in the
+   real world.
+
+ - However, we often say "Let's stay away from that construct,
+   it's not even in POSIX".
+
+ - In spite of the above two rules, we sometimes say "Although
+   this is not in POSIX, it (is so convenient | makes the code
+   much more readable | has other good characteristics) and
+   practically all the platforms we care about support it, so
+   let's use it".  Again, we live in the real world, and it is
+   sometimes a judgement call, decided based more on real world
+   constraints people face than what the paper standard says.
+
+
+As for more concrete guidelines, just imitate the existing code
+(this is a good guideline, no matter which project you are contributing
+to...).  But if you must have some list of rules, here they are.
+
+For shell scripts specifically (not exhaustive):
+
+ - We prefer $( ... ) for command substitution; unlike ``, it
+   properly nests.  It should have been the way Bourne spelled
+   it from day one, but unfortunately isn't.
+
+ - We use ${parameter-word} and its [-=?+] siblings, and their
+   colon'ed "unset or null" form.
+
+ - We use ${parameter#word} and its [#%] siblings, and their
+   doubled "longest matching" form.
+
+ - We use Arithmetic Expansion $(( ... )).
+
+ - No "Substring Expansion" ${parameter:offset:length}.
+
+ - No shell arrays.
+
+ - No strlen ${#parameter}.
+
+ - No regexp ${parameter/pattern/string}.
+
+ - We do not use Process Substitution <(list) or >(list).
+
+ - We prefer "test" over "[ ... ]".
+
+ - We do not write noiseword "function" in front of shell
+   functions.
+
+For C programs:
+
+ - Use tabs to indent, and interpret tabs as taking up to 8 spaces
+
+ - Try to keep to 80 characters per line
+
+ - When declaring pointers, the star sides with the variable name, i.e.
+   "char *string", not "char* string" or "char * string".  This makes
+   it easier to understand "char *string, c;"
+
+ - Do not use curly brackets unnecessarily.  I.e.
+
+	if (bla) {
+		x = 1;
+	}
+
+   is frowned upon.  A gray area is when the statement extends over a
+   few lines, and/or you have a lengthy comment atop of it.
+
+ - Try to make your code understandable.  You may put comments in, but
+   comments invariably tend to stale out when the code they were
+   describing changes.  Often splitting a function into two makes the
+   intention of the code much clearer.
+
+   Double negation is often harder to understand than no negation at
+   all.
+
+   Some clever tricks, like using the !! operator with arithmetic
+   constructs, can be extremely confusing to others.  Avoid them,
+   unless there is a compelling reason to use them.
+
+ - Use the API.  No, really.  We have a strbuf (variable length string),
+   several arrays with the ALLOC_GROW() macro, a path_list for sorted
+   string lists, a hash map (mapping struct objects) named
+   "struct decorate", amongst other things.
+
+ - When you come up with an API, document it.
+
+ - #include system headers in git-compat-util.h.  Some headers on some
+   systems show subtle breakages when you change the order, so it is
+   best to keep them in one place.
+
+ - if you are planning a new command, consider writing it in shell or
+   perl first, so that changes in semantics can be easily changed and
+   discussed.  Many git commands started out like that, and a few are
+   still scripts.
+
+ - Avoid introducing a new dependency into git. This means you usually
+   should stay away from scripting languages not already used in the git
+   core command set (unless your command is clearly separate from it,
+   such as an importer to convert random-scm-X repositories to git).
-- 
1.5.3.5.1597.g7191

^ permalink raw reply related

* Re: stgit: cleaning up after using git branch delete commands
From: Catalin Marinas @ 2007-11-07 14:57 UTC (permalink / raw)
  To: Jon Smirl; +Cc: Git Mailing List
In-Reply-To: <9e4733910711070606t2c558ac9ob4c729d5baca8fb9@mail.gmail.com>

"Jon Smirl" <jonsmirl@gmail.com> wrote:
> I've used git commands to delete several branches that had stgit
> active on it.  Doing that has left a bunch of clutter in the .git
> directory. Is there a stgit command to remove all the clutter from
> branches that no longer exist? I'd like to use the branch names again
> but the clutter is interfering.

You can create the branch back with GIT and run "stg branch --delete
--force", though I don't guarantee it will work (BTW, I only recently
relaxed the branch deletion rules in StGIT so that it doesn't complain
of missing files and completes the operation, so you should use the
latest HEAD).

-- 
Catalin

^ permalink raw reply

* Re: [PATCH] Add Documentation/CodingStyle
From: Johannes Schindelin @ 2007-11-07 14:54 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: Ralf Wildenhues, git
In-Reply-To: <7v640ega5q.fsf@gitster.siamese.dyndns.org>

Hi,

On Tue, 6 Nov 2007, Junio C Hamano wrote:

> Johannes Schindelin <Johannes.Schindelin@gmx.de> writes:
> 
> > diff --git a/Documentation/CodingStyle b/Documentation/CodingStyle
> > new file mode 100644
> > index 0000000..622b80b
> > --- /dev/null
> > +++ b/Documentation/CodingStyle
> > @@ -0,0 +1,87 @@
> > +As a popular project, we also have some guidelines to keep to the
> > +code.  For git in general, two rough rules are:
> > +
> > + - Most importantly, we never say "It's in POSIX; we'll happily
> > +   screw your system that does not conform."  We live in the
> > +   real world.
> > +
> > + - However, we often say "Let's stay away from that construct,
> > +   it's not even in POSIX".
> > +
> 
> I am not sure if we want to have CodingStyle document, but the
> above are not CodingStyle issues.

Would you like to call it CodingConventions?

> If we are to write this down, I'd like to have the more
> important third rule, which is:
> 
>  - In spite of the above two rules, we sometimes say "Although
>    this is not in POSIX, it (is so convenient | makes the code
>    much more readable | has other good characteristics) and
>    practically all the platforms we care about support it, so
>    let's use it".  Again, we live in the real world, and it is
>    sometimes a judgement call, decided based more on real world
>    constraints people face than what the paper standard says.

Okay, will add.

> > +For C programs:
> > +
> > + - Use tabs to increment, and interpret tabs as taking up to 8 spaces
> 
> What's the character for decrement?  DEL? ;-)

Hehe.  As you undoubtedly guessed, I meant "indent"...

> > +   Double negation is often harder to understand than no negation at
> > +   all.
> > +
> > +   Some clever tricks, like using the !! operator with arithmetic
> > +   constructs, can be extremely confusing to others.  Avoid them,
> > +   unless there is a compelling reason to use them.
> 
> I actually think (!!var) idiom is already established in our
> codebase.

Yep, but when there are easier variants, AFAICT they were preferred.

> > + - Use the API.  No, really.  We have a strbuf (variable length string),
> > +   several arrays with the ALLOC_GROW() macro, a path_list for sorted
> > +   string lists, a hash map (mapping struct objects) named
> > +   "struct decorate", amongst other things.
> 
>  - When you come up with an API, document it.

Okay.

> > + - if you are planning a new command, consider writing it in shell or
> > +   perl first, so that changes in semantics can be easily changed and
> > +   discussed.  Many git commands started out like that, and a few are
> > +   still scripts.
> 
> No Python allowed?

Well, maybe we should allow that again.  Although I hoped we are over that 
now, as it would complicate the msysGit efforts tremendously.

Ciao,
Dscho

^ permalink raw reply


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox