Git development
 help / color / mirror / Atom feed
* Re: [PATCH] send-email: apply --suppress-from to S-o-b and cc-cmd
From: Junio C Hamano @ 2007-11-07 20:43 UTC (permalink / raw)
  To: Uwe Kleine-König; +Cc: git, Uwe Kleine-König, Ryan Anderson
In-Reply-To: <1194420852-15822-1-git-send-email-ukleinek@informatik.uni-freiburg.de>

Uwe Kleine-König  <ukleinek@informatik.uni-freiburg.de> writes:

> From: Uwe Kleine-König <Uwe.Kleine-Koenig@digi.com>
>
> Signed-off-by: Uwe Kleine-König <Uwe.Kleine-Koenig@digi.com>
> Cc: Ryan Anderson <ryan@michonline.com>
> ---
> Hello,
>
> I don't see the sense in adding the sender to Cc: from Signed-off-by
> lines but not from From:.  If someone is convinced it makes sense, I'm
> willing to send a new patch that uses a different option.

I _think_ --suppress-from just means "I know what I'll be
sending out, so do not bother my mailbox with a copy of this
message", so what the patch tries to do makes perfect sense to
me.

> @@ -730,6 +729,7 @@ foreach my $t (@files) {
>  			if (/^(Signed-off-by|Cc): (.*)$/i && $signed_off_cc) {
>  				my $c = $2;
>  				chomp $c;
> +				next if ($c eq $sender and $suppress_from);
>  				push @cc, $c;
>  				printf("(sob) Adding cc: %s from line '%s'\n",
>  					$c, $_) unless $quiet;
> @@ -745,6 +745,7 @@ foreach my $t (@files) {
>  			my $c = $_;
>  			$c =~ s/^\s*//g;
>  			$c =~ s/\n$//g;
> +			next if ($c eq $sender and $suppress_from);
>  			push @cc, $c;
>  			printf("(cc-cmd) Adding cc: %s from: '%s'\n",
>  				$c, $cc_cmd) unless $quiet;

By the way, I noticed that in the header part we pick CC: and
From: address, which are rfc2047 quoted, and unquote it to
compare with the sender.  If they are different, we push the
address, still rfc2047 quoted, to @cc, like this:

	} elsif (/^(Cc|From):\s+(.*)$/) {
		if (unquote_rfc2047($2) eq $sender) {
			next if ($suppress_from);
		}
		elsif ($1 eq 'From') {
			$author = unquote_rfc2047($2);
		}
		printf("(mbox) Adding cc: %s from line '%s'\n",
			$2, $_) unless $quiet;
		push @cc, $2;
	}

However, in the body part, when we see S-o-b: and CC: address,
which are _not_ rfc2047 quoted, do not unquote to compare with
$sender and we push it direct to @cc (the original text in the
first hunk of your patch).  We do the same for output from
$cc_cmd if specified (the second hunk).

This means that @cc list would be a mixed bag.  Some are rfc2047
quoted, and some are not.  This inconsistency of course is taken
care of by the call to sanitize_address over @cc at the very
beginning of send_message(), but it somehow feels dirty.

^ permalink raw reply

* Re: [PATCH] Add missing inside_work_tree setting in setup_git_directory_gently
From: Junio C Hamano @ 2007-11-07 20:42 UTC (permalink / raw)
  To: Nguyen Thai Ngoc Duy; +Cc: Johannes Schindelin, git
In-Reply-To: <20071104070307.GA26071@laptop>

Nguyen Thai Ngoc Duy <pclouds@gmail.com> writes:

> On Sat, Nov 03, 2007 at 09:33:40PM -0700, Junio C Hamano wrote:
>> 
>> Please add automated test script for this, thanks.
>
> Thank you for reminding.  I tried to put a test in
> t1501-worktree.sh and found out core.worktree can override
> inside_work_tree previously set by setup_git_directory_gently(),
> activating the worktree code in setup_git_directory() again.
>
> This made me think setup_git_directory_gently() should use
> get_git_work_tree() instead. But then git_work_tree_cfg may not be
> initialized when get_git_work_tree() is called (starting from
> setup_git_directory(), git_work_tree_cfg is initialized in
> check_repository_format_version(), which is called _after_
> setup_git_directory_gently()).
>
> The interaction between these variables and functions is really beyond
> my knowledge. Johannes, can you have a look at this? In theory the
> following test should pass:
>
> diff --git a/t/t1501-worktree.sh b/t/t1501-worktree.sh
> index 7ee3820..bdb7720 100755
> --- a/t/t1501-worktree.sh
> +++ b/t/t1501-worktree.sh
> @@ -103,6 +103,11 @@ test_expect_success 'repo finds its work tree from work tree, too' '
>  	 test sub/dir/tracked = "$(git ls-files)")
>  '
>  
> +test_expect_success 'Try a command from subdir in worktree' '
> +	(cd repo.git/work/sub &&
> +	GIT_DIR=../.. GIT_WORK_TREE=.. git blame dir/tracked)
> +'
> +
>  test_expect_success '_gently() groks relative GIT_DIR & GIT_WORK_TREE' '
>  	cd repo.git/work/sub/dir &&
>  	GIT_DIR=../../.. GIT_WORK_TREE=../.. GIT_PAGER= \

I am wondering what happened to this thread...

^ permalink raw reply

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

"Nguyen Thai Ngoc Duy" <pclouds@gmail.com> writes:

> 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.

Thanks.  And you can also happy grok Ralf's rewritten construct,
right?

That is, existing

        $ sed -e 's/foo/\n/' file

will be rewritten by the patch [2/5] to

        $ sed -e 's/foo/\
        /' file

^ permalink raw reply

* Re: [PATCH] Make git-clean a builtin
From: Junio C Hamano @ 2007-11-07 20:42 UTC (permalink / raw)
  To: Shawn Bohrer; +Cc: git, johannes.schindelin
In-Reply-To: <11944127311587-git-send-email-shawn.bohrer@gmail.com>

Shawn Bohrer <shawn.bohrer@gmail.com> writes:

> This replaces git-clean.sh with builtin-clean.c, and moves
> git-clean.sh to the examples.
>
> This also introduces a change in behavior where the -d parameter is
> required to remove an entire directory of untracked files even when
> the directory is passed as a path.

The updated behaviour may be better, but this description at the
first read makes one wonder if it is describing a regression as
if it is a feature.

> ... For example ...
> ...
> if 'dir' only contains untracked files.  This is consistent with the
> old behavior when two or more paths were specified.

I think what you fixed are two inconsistencies in the original
implementation.  If you spelled out the existing inconsistency
and described what your implementation does differently, the
proposal would start looking like a real improvement, like this:

    1. When dir has only untracked files, these two behave differently:

        $ git clean -n dir
        $ git clean -n dir/

    the former says "Would not remove dir/", while the latter would
    say "Would remove dir/untracked" for all paths under it.

    With -d, the former would stop refusing, but the difference in
    reporting is still there.  The latter lists all paths under the
    directory.

    2. When there are more parameters, the latter behave differently:

        $ git clean -n dir/ foo

    refuses to remove dir/.  This is inconsistent.

    My reimplementation changes the behaviour by always
    requiring the -d option with or without the trailing slash.

Having said that, I do not particularly agree with the way the
new implementation resolves the existing inconsistencies.  

Wouldn't it be better to remove "dir" when the user explicitly
told you to clean "dir", with or without the trailing slash?
That's what the user asked you to do, isn't it?

^ permalink raw reply

* Re: git push refspec problem
From: Daniel Barkalow @ 2007-11-07 20:40 UTC (permalink / raw)
  To: James; +Cc: Johannes Gilger, Johannes Schindelin, git
In-Reply-To: <607586B5-7BA0-4018-9FB1-691C5E78D550@nc.rr.com>

On Wed, 7 Nov 2007, James wrote:

> 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.

We *should* be able to make the rules: fetch tries URLs until one works, 
and then ignores later ones; push uses, in turn, all URLs that support 
pushing.

Then you could just list both URLs, with the "git:" one first, and it 
would do what you want (plus, if the git server on your remote machine 
were down, it would fall back to ssh automatically for you).

Actually, I think this would be a relatively easy project now, if you want 
to attempt it, since fetch and push and both in C now and the config file 
parser in remote.h reports all URLs in the config file's order. You'd just 
need to make it silently skip URLs in push that don't support pushing, and 
only give an error if none remain. (And add fallback support to fetch, for 
completeness; it's currently only using the first, IIRC).

	-Daniel
*This .sig left intentionally blank*

^ permalink raw reply

* Re: [PATCH] git-fetch: avoid local fetching from alternate (again)
From: Junio C Hamano @ 2007-11-07 20:32 UTC (permalink / raw)
  To: Shawn O. Pearce; +Cc: git
In-Reply-To: <7vsl3iefoj.fsf@gitster.siamese.dyndns.org>

Junio C Hamano <gitster@pobox.com> writes:

> Well spotted.  It would be a good idea to commit the big comment
> from contrib/examples/git-fetch.sh to fetch_local_nocopy()
> function, which would have made us realize that the patch does
> not refrain from applying this optimization even when shallow
> is in effect.  But I think that is actually a good change.

I take this back.  This regresses badly.

Why?

Because the optimization is useless when we are trying to deepen
the shallow history.  When you are trying to deepen a shallow
history and the tips of remotes haven't moved since you fetched
from there the last time, you have everything near the tip, and
becuse your history is shallow, your ancestry chain is
cauterized to make it appear that the history is complete.  The
rev-list reachability test would not fail as we expect.

The breakage can be seen with t5500.

^ permalink raw reply

* Re: [PATCH] Add Documentation/CodingStyle
From: Johannes Schindelin @ 2007-11-07 20:13 UTC (permalink / raw)
  To: Jon Loeliger; +Cc: Junio C Hamano, Ralf Wildenhues, Git List
In-Reply-To: <1194464406.14978.9.camel@ld0161-tx32>

Hi,

On Wed, 7 Nov 2007, Jon Loeliger wrote:

> On Tue, 2007-11-06 at 17:17, Johannes Schindelin wrote:
> 
> > +
> > + - Do not use curly brackets unnecessarily.  I.e.
> > +
> > +	if (bla) {
> > +		x = 1;
> > +	}
> 
> In my opinion, I think this is a bad guideline.

In my opinion, this is a good guideline.

So now what? Let's have another pointless flamewar?

Ciao,
Dscho

^ permalink raw reply

* Re: [PATCH] git-revert is one of the most misunderstood command in git, help users out.
From: Jakub Narebski @ 2007-11-07 20:01 UTC (permalink / raw)
  To: git
In-Reply-To: <200711072032.48193.robin.rosenberg.lists@dewire.com>

Robin Rosenberg wrote:

> As for undo rm -rf, it's not part of git and outside the scope of git.

Unless Mnemosyne or some other automatic backup solution is based on git as
engine...

-- 
Jakub Narebski
Warsaw, Poland
ShadeHawk on #git

^ permalink raw reply

* Re: [PATCH] git-revert is one of the most misunderstood command in git, help users out.
From: Robin Rosenberg @ 2007-11-07 19:32 UTC (permalink / raw)
  To: Johannes Schindelin
  Cc: Mike Hommey, Junio C Hamano, Steven Grimm, Pierre Habouzit, git
In-Reply-To: <Pine.LNX.4.64.0711071103450.4362@racer.site>

onsdag 07 november 2007 skrev Johannes Schindelin:
> Hi,
> 
> On Wed, 7 Nov 2007, Mike Hommey wrote:
> 
> > On Tue, Nov 06, 2007 at 10:25:48PM +0000, Johannes Schindelin <Johannes.Schindelin@gmx.de> wrote:
> > 
> > > On Tue, 6 Nov 2007, Robin Rosenberg wrote:
> > > 
> > > > tisdag 06 november 2007 skrev Mike Hommey:
> > > > > Maybe the documentation could emphasise on how to undo things when 
> > > > > the user makes mistakes. Sometimes, saving your repo can be as 
> > > > > simple as git reset --hard HEAD@{1}. This is not, unfortunately, a 
> > > > > works-for-all-cases command.
> > > > 
> > > > Yea, git-undo(7). 
> > > 
> > > In related news, I know a few users who need an un-rm-rf.  Anyone?
> > 
> > The fact is you can do harm to your repo with things you wouldn't expect 
> > to break things, except maybe you gave bad arguments or so. It's quite 
> > easy to fuck up with git-rebase, or to merge the wrong commits, etc.
> 
> I don't see how these commands are dangerous.  Usually you just look into 
> the reflog, pick the one commit you started with, and reset --hard.

Indeed, but you must *know* that and you must know that you *can* do it.

As for undo rm -rf, it's not part of git and outside the scope of git.

-- robin

^ permalink raw reply

* Re: [PATCH] Make git-clean a builtin
From: Jon Loeliger @ 2007-11-07 19:46 UTC (permalink / raw)
  To: Bill Lear; +Cc: Johannes Schindelin, Shawn Bohrer, gitster, Git List
In-Reply-To: <18225.48553.44088.269677@lisa.zopyra.com>

On Wed, 2007-11-07 at 07:29, Bill Lear wrote:
> On Wednesday, November 7, 2007 at 11:10:45 (+0000) Johannes Schindelin writes:
> >Hi,
> >
> >you still have quite a number of instances where you wrap just one line 
> >into curly brackets:
> >
> >	if (bla) {
> >		[just one line]
> >	}
> 
> I've always found this a thoughtful practice.  It helps ensure nobody writes:
> 
>        if (bla)
>            just_one_line();
>            /* perhaps a comment, other stuff ... */
>            just_another_line();
> 
> which I've seen happen countless times.  It also is nice for others who
> come along and extend the branch from just one line to multiple ones,
> as the brackets are already in place.
> 
> Why do you find it objectionable?

I _totally_ agree with Bill.

jdl

^ permalink raw reply

* Re: [PATCH] Add Documentation/CodingStyle
From: Jon Loeliger @ 2007-11-07 19:40 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: Junio C Hamano, Ralf Wildenhues, Git List
In-Reply-To: <Pine.LNX.4.64.0711062317330.4362@racer.site>

On Tue, 2007-11-06 at 17:17, Johannes Schindelin wrote:

> +
> + - Do not use curly brackets unnecessarily.  I.e.
> +
> +	if (bla) {
> +		x = 1;
> +	}

In my opinion, I think this is a bad guideline.

> +   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.

Or if it is some macro, or any number of vague problem areas.

Again, in my opinion, one should always take the safer
defensive programming tactic and always use braces.
Having them really never produces errors, while omitting
them is often error prone.

Yes, I know that is not a popular opinion by example,
but I'm still allowed to state it. :-)
Feel free to ignore me as well. :-)

jdl

^ permalink raw reply

* git svn dcommit with a dirty index
From: Benoit Sigoure @ 2007-11-07 19:06 UTC (permalink / raw)
  To: git list; +Cc: Eric Wong

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

Hello list,
 From what I understand, when using dcommit, git-svn uses rebase to  
"sync" the history with what has just been committed.  If the index  
is in a dirty state, this will cause trouble.  I thought about using  
git-stash and then git stash apply --index but I'm afraid this could  
be confusing if dcommit actually brings more revision in that the  
ones it has just committed.  I'm not sure this is possible and even  
if it is, it might not be troublesome since if the commits are  
accepted in the SVN repo, they surely don't overlap with commits that  
have been sent in the mean time.  But it's risky, so I don't know  
what to do.  If we use the stash approach, we might want to tell the  
user that we bailed out because of a problem that needs to be fixed  
and that he can recover his changes with git stash apply --index.

Or we should simply check that the index isn't dirty beforehand and  
refuse to dcommit if it is.

Any suggestion?

PS OT: Eric, have you made any progress on the svn:externals<- 
 >submodules mapping?  I badly need this feature, but I don't want to  
start to work on it if you're currently working on it (or about to  
deal with it) to avoid unecessary effort duplication.

-- 
Benoit Sigoure aka Tsuna
EPITA Research and Development Laboratory



[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 186 bytes --]

^ permalink raw reply

* [PATCH] Fix mistakes in the documentation of git-add --interactive.
From: Benoit Sigoure @ 2007-11-07 18:20 UTC (permalink / raw)
  To: git; +Cc: gitster, Benoit Sigoure

This patch fixes a couple of language issues in the documentation
of the `patch' sub-command of git-add --interactive.

Signed-off-by: Benoit Sigoure <tsuna@lrde.epita.fr>
---
 Documentation/git-add.txt |    8 ++++----
 1 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/Documentation/git-add.txt b/Documentation/git-add.txt
index 963e1ab..f7c02ff 100644
--- a/Documentation/git-add.txt
+++ b/Documentation/git-add.txt
@@ -202,8 +202,8 @@ patch::
 
        y - add the change from that hunk to index
        n - do not add the change from that hunk to index
-       a - add the change from that hunk and all the rest to index
-       d - do not the change from that hunk nor any of the rest to index
+       a - add the change from that hunk and all the remaining ones
+       d - do not the add change from that hunk and skip the remaining ones
        j - do not decide on this hunk now, and view the next
            undecided hunk
        J - do not decide on this hunk now, and view the next hunk
@@ -211,8 +211,8 @@ patch::
            undecided hunk
        K - do not decide on this hunk now, and view the previous hunk
 +
-After deciding the fate for all hunks, if there is any hunk
-that was chosen, the index is updated with the selected hunks.
+After deciding the fate of each hunk, the index is updated with the selected
+ones.
 
 diff::
 
-- 
1.5.3.4.398.g859b

^ permalink raw reply related

* Re: [PATCH] Documentation: enhanced "git for CVS users" doc about shared repositories
From: J. Bruce Fields @ 2007-11-07 17:32 UTC (permalink / raw)
  To: Johannes Schindelin; +Cc: Francesco Pretto, Junio C Hamano, git
In-Reply-To: <Pine.LNX.4.64.0711070053320.4362@racer.site>

On Wed, Nov 07, 2007 at 12:55:49AM +0000, Johannes Schindelin wrote:
> Remember, those who read "git for CVS users" are _unwilling_ to spend the 
> time reading git documentation (at least for the most part).  If they 
> encounter something which is not useful to them, they will not just ignore 
> it, they will stop reading.

That might overstate the case a little, but I definitely agree that we
should get people to the information they need as quickly as possible,
and that adding more beginning-unix-administration will interfere with
that goal for the intended audience.

And it's not just here--there's probably lots of basic unix-commandline
stuff that we could include with the user-manual (how find/xargs pipes
work, etc...), and that would similarly help one possible audience at
the expense of bogging it down for another audience.

I think the way to help people without those prerequisites is by clearer
statements of prerequisites, and references to documentation elsewhere
where appropriate.

--b.

^ permalink raw reply

* [PATCH 9/9] gitk i18n: Recode gitk from latin1 to utf8 so that the (c) copyright character is valid utf8.
From: Christian Stimming @ 2007-11-07 17:47 UTC (permalink / raw)
  To: Paul Mackerras; +Cc: Junio C Hamano, git
In-Reply-To: <200711071846.14097.stimming@tuhh.de>

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

When using translations, the target language must be encoded in utf-8
because almost all target languages will contain non-ascii characters.
For that reason, the non-translated strings should be in utf-8 as well
so that there isn't any encoding mixup inside the program.
---
 gitk |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

diff --git a/gitk b/gitk
index b861f8d..684e614 100755
--- a/gitk
+++ b/gitk
@@ -1281,7 +1281,7 @@ proc about {} {
     message $w.m -text [mc "
 Gitk - a commit viewer for git
 
-Copyright © 2005-2006 Paul Mackerras
+Copyright © 2005-2006 Paul Mackerras
 
 Use and redistribute under the terms of the GNU General Public License"] \
 	    -justify center -aspect 400 -border 2 -bg white -relief groove
-- 
1.5.3.4.206.g58ba4

^ permalink raw reply related

* [PATCH 8/9] gitk i18n: More i18n markup: gdttype optionmenu.
From: Christian Stimming @ 2007-11-07 17:46 UTC (permalink / raw)
  To: Paul Mackerras; +Cc: Junio C Hamano, git
In-Reply-To: <200711071845.40236.stimming@tuhh.de>

---
 gitk |   24 ++++++++++++------------
 1 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/gitk b/gitk
index 3acb0be..b861f8d 100755
--- a/gitk
+++ b/gitk
@@ -769,11 +769,11 @@ proc makewindow {} {
     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:"
+    set gdttype [mc "containing:"]
     set gm [tk_optionMenu .tf.lbar.gdttype gdttype \
-		"containing:" \
-		"touching paths:" \
-		"adding/removing string:"]
+		[mc "containing:"] \
+		[mc "touching paths:"] \
+		[mc "adding/removing string:"]]
     trace add variable gdttype write gdttype_change
     $gm conf -font uifont
     .tf.lbar.gdttype conf -font uifont
@@ -1743,12 +1743,12 @@ proc flist_hl {only} {
     global flist_menu_file findstring gdttype
 
     set x [shellquote $flist_menu_file]
-    if {$only || $findstring eq {} || $gdttype ne "touching paths:"} {
+    if {$only || $findstring eq {} || $gdttype ne [mc "touching paths:"]} {
 	set findstring $x
     } else {
 	append findstring " " $x
     }
-    set gdttype "touching paths:"
+    set gdttype [mc "touching paths:"]
 }
 
 # Functions for adding and removing shell-type quoting
@@ -2313,7 +2313,7 @@ proc gdttype_change {name ix op} {
 
     stopfinding
     if {$findstring ne {}} {
-	if {$gdttype eq "containing:"} {
+	if {$gdttype eq [mc "containing:"]} {
 	    if {$highlight_files ne {}} {
 		set highlight_files {}
 		hfiles_change
@@ -2336,7 +2336,7 @@ proc find_change {name ix op} {
     global gdttype findstring highlight_files
 
     stopfinding
-    if {$gdttype eq "containing:"} {
+    if {$gdttype eq [mc "containing:"]} {
 	findcom_change
     } else {
 	if {$highlight_files ne $findstring} {
@@ -2360,7 +2360,7 @@ proc findcom_change args {
     catch {unset nhighlights}
     unbolden
     unmarkmatches
-    if {$gdttype ne "containing:" || $findstring eq {}} {
+    if {$gdttype ne [mc "containing:"] || $findstring eq {}} {
 	set findpattern {}
     } elseif {$findtype eq [mc "Regexp"]} {
 	set findpattern $findstring
@@ -2388,12 +2388,12 @@ proc makepatterns {l} {
 proc do_file_hl {serial} {
     global highlight_files filehighlight highlight_paths gdttype fhl_list
 
-    if {$gdttype eq "touching paths:"} {
+    if {$gdttype eq [mc "touching paths:"]} {
 	if {[catch {set paths [shellsplit $highlight_files]}]} return
 	set highlight_paths [makepatterns $paths]
 	highlight_filelist
 	set gdtargs [concat -- $paths]
-    } elseif {$gdttype eq "adding/removing string:"} {
+    } elseif {$gdttype eq [mc "adding/removing string:"]} {
 	set gdtargs [list "-S$highlight_files"]
     } else {
 	# must be "containing:", i.e. we're searching commit info
@@ -4325,7 +4325,7 @@ proc findmore {} {
     }
     set found 0
     set domore 1
-    if {$gdttype eq "containing:"} {
+    if {$gdttype eq [mc "containing:"]} {
 	for {} {$n > 0} {incr n -1; incr l $find_dirn} {
 	    set id [lindex $displayorder $l]
 	    # shouldn't happen unless git log doesn't give all the commits...
-- 
1.5.3.4.206.g58ba4

^ permalink raw reply related

* [PATCH 7/9] gitk i18n: More i18n markup: findloc optionmenu.
From: Christian Stimming @ 2007-11-07 17:45 UTC (permalink / raw)
  To: Paul Mackerras; +Cc: Junio C Hamano, git
In-Reply-To: <200711071845.06849.stimming@tuhh.de>

---
 gitk |   28 ++++++++++++++--------------
 1 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/gitk b/gitk
index 3e8d934..3acb0be 100755
--- a/gitk
+++ b/gitk
@@ -790,9 +790,9 @@ proc makewindow {} {
     trace add variable findtype write findcom_change
     .tf.lbar.findtype configure -font uifont
     .tf.lbar.findtype.menu configure -font uifont
-    set findloc "All fields"
-    tk_optionMenu .tf.lbar.findloc findloc "All fields" Headline \
-	Comments Author Committer
+    set findloc [mc "All fields"]
+    tk_optionMenu .tf.lbar.findloc findloc [mc "All fields"] [mc "Headline"] \
+	[mc "Comments"] [mc "Author"] [mc "Committer"]
     trace add variable findloc write find_change
     .tf.lbar.findloc configure -font uifont
     .tf.lbar.findloc.menu configure -font uifont
@@ -2488,11 +2488,11 @@ proc askfindhighlight {row id} {
     }
     set info $commitinfo($id)
     set isbold 0
-    set fldtypes {Headline Author Date Committer CDate Comments}
+    set fldtypes [list [mc Headline] [mc Author] [mc Date] [mc Committer] [mc CDate] [mc Comments]]
     foreach f $info ty $fldtypes {
-	if {($findloc eq "All fields" || $findloc eq $ty) &&
+	if {($findloc eq [mc "All fields"] || $findloc eq $ty) &&
 	    [doesmatch $f]} {
-	    if {$ty eq "Author"} {
+	    if {$ty eq [mc "Author"]} {
 		set isbold 2
 		break
 	    }
@@ -2520,14 +2520,14 @@ proc markrowmatches {row id} {
     set author [lindex $commitinfo($id) 1]
     $canv delete match$row
     $canv2 delete match$row
-    if {$findloc eq "All fields" || $findloc eq "Headline"} {
+    if {$findloc eq [mc "All fields"] || $findloc eq [mc "Headline"]} {
 	set m [findmatches $headline]
 	if {$m ne {}} {
 	    markmatches $canv $row $headline $linehtag($row) $m \
 		[$canv itemcget $linehtag($row) -font] $row
 	}
     }
-    if {$findloc eq "All fields" || $findloc eq "Author"} {
+    if {$findloc eq [mc "All fields"] || $findloc eq [mc "Author"]} {
 	set m [findmatches $author]
 	if {$m ne {}} {
 	    markmatches $canv2 $row $author $linentag($row) $m \
@@ -4261,8 +4261,8 @@ proc dofind {{dirn 1} {wrap 1}} {
 	set findstartline $selectedline
     }
     set findcurline $findstartline
-    nowbusy finding "Searching"
-    if {$gdttype ne "containing:" && ![info exists filehighlight]} {
+    nowbusy finding [mc "Searching"]
+    if {$gdttype ne [mc "containing:"] && ![info exists filehighlight]} {
 	after cancel do_file_hl $fh_serial
 	do_file_hl $fh_serial
     }
@@ -4292,7 +4292,7 @@ proc findmore {} {
     if {![info exists find_dirn]} {
 	return 0
     }
-    set fldtypes {Headline Author Date Committer CDate Comments}
+    set fldtypes [list [mc "Headline"] [mc "Author"] [mc "Date"] [mc "Committer"] [mc "CDate"] [mc "Comments"]]
     set l $findcurline
     set moretodo 0
     if {$find_dirn > 0} {
@@ -4336,7 +4336,7 @@ proc findmore {} {
 	    }
 	    set info $commitinfo($id)
 	    foreach f $info ty $fldtypes {
-		if {($findloc eq "All fields" || $findloc eq $ty) &&
+		if {($findloc eq [mc "All fields"] || $findloc eq $ty) &&
 		    [doesmatch $f]} {
 		    set found 1
 		    break
@@ -4392,7 +4392,7 @@ proc findselectline {l} {
     set markingmatches 1
     set findcurline $l
     selectline $l 1
-    if {$findloc == "All fields" || $findloc == "Comments"} {
+    if {$findloc == [mc "All fields"] || $findloc == [mc "Comments"]} {
 	# highlight the matches in the comments
 	set f [$ctext get 1.0 $commentend]
 	set matches [findmatches $f]
@@ -4780,7 +4780,7 @@ proc selectline {l isnew} {
     $ctext conf -state disabled
     set commentend [$ctext index "end - 1c"]
 
-    init_flist "Comments"
+    init_flist [mc "Comments"]
     if {$cmitmode eq "tree"} {
 	gettree $id
     } elseif {[llength $olds] <= 1} {
-- 
1.5.3.4.206.g58ba4

^ permalink raw reply related

* [PATCH 6/9] gitk i18n: More i18n markup: highlight_related and selectedhlview options menu.
From: Christian Stimming @ 2007-11-07 17:45 UTC (permalink / raw)
  To: Paul Mackerras; +Cc: Junio C Hamano, git
In-Reply-To: <200711071844.36091.stimming@tuhh.de>

---
 gitk |   26 +++++++++++++-------------
 1 files changed, 13 insertions(+), 13 deletions(-)

diff --git a/gitk b/gitk
index 777ee20..3e8d934 100755
--- a/gitk
+++ b/gitk
@@ -1998,7 +1998,7 @@ proc delview {} {
 
     if {$curview == 0} return
     if {[info exists hlview] && $hlview == $curview} {
-	set selectedhlview None
+	set selectedhlview [mc "None"]
 	unset hlview
     }
     allviewmenus $curview delete
@@ -2084,7 +2084,7 @@ proc showview {n} {
     clear_display
     if {[info exists hlview] && $hlview == $n} {
 	unset hlview
-	set selectedhlview None
+	set selectedhlview [mc "None"]
     }
     catch {unset commitinterest}
 
@@ -2540,7 +2540,7 @@ proc vrel_change {name ix op} {
     global highlight_related
 
     rhighlight_none
-    if {$highlight_related ne "None"} {
+    if {$highlight_related ne [mc "None"]} {
 	run drawvisible
     }
 }
@@ -2554,7 +2554,7 @@ proc rhighlight_sel {a} {
     set desc_todo [list $a]
     catch {unset ancestor}
     set anc_todo [list $a]
-    if {$highlight_related ne "None"} {
+    if {$highlight_related ne [mc "None"]} {
 	rhighlight_none
 	run drawvisible
     }
@@ -2637,20 +2637,20 @@ proc askrelhighlight {row id} {
 
     if {![info exists selectedline]} return
     set isbold 0
-    if {$highlight_related eq "Descendent" ||
-	$highlight_related eq "Not descendent"} {
+    if {$highlight_related eq [mc "Descendent"] ||
+	$highlight_related eq [mc "Not descendent"]} {
 	if {![info exists descendent($id)]} {
 	    is_descendent $id
 	}
-	if {$descendent($id) == ($highlight_related eq "Descendent")} {
+	if {$descendent($id) == ($highlight_related eq [mc "Descendent"])} {
 	    set isbold 1
 	}
-    } elseif {$highlight_related eq "Ancestor" ||
-	      $highlight_related eq "Not ancestor"} {
+    } elseif {$highlight_related eq [mc "Ancestor"] ||
+	      $highlight_related eq [mc "Not ancestor"]} {
 	if {![info exists ancestor($id)]} {
 	    is_ancestor $id
 	}
-	if {$ancestor($id) == ($highlight_related eq "Ancestor")} {
+	if {$ancestor($id) == ($highlight_related eq [mc "Ancestor"])} {
 	    set isbold 1
 	}
     }
@@ -3737,7 +3737,7 @@ proc drawcmitrow {row} {
     if {$findpattern ne {} && ![info exists nhighlights($row)]} {
 	askfindhighlight $row $id
     }
-    if {$highlight_related ne "None" && ![info exists rhighlights($row)]} {
+    if {$highlight_related ne [mc "None"] && ![info exists rhighlights($row)]} {
 	askrelhighlight $row $id
     }
     if {![info exists iddrawn($id)]} {
@@ -8632,8 +8632,8 @@ set firsttabstop 0
 set nextviewnum 1
 set curview 0
 set selectedview 0
-set selectedhlview None
-set highlight_related None
+set selectedhlview [mc "None"]
+set highlight_related [mc "None"]
 set highlight_files {}
 set viewfiles(0) {}
 set viewperm(0) 0
-- 
1.5.3.4.206.g58ba4

^ permalink raw reply related

* [PATCH 5/9] gitk i18n: More i18n markup: findtype options menu.
From: Christian Stimming @ 2007-11-07 17:44 UTC (permalink / raw)
  To: Paul Mackerras; +Cc: Junio C Hamano, git
In-Reply-To: <200711071844.03106.stimming@tuhh.de>

---
 gitk |   14 +++++++-------
 1 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/gitk b/gitk
index e291577..777ee20 100755
--- a/gitk
+++ b/gitk
@@ -784,9 +784,9 @@ proc makewindow {} {
     lappend entries $fstring
     entry $fstring -width 30 -font textfont -textvariable findstring
     trace add variable findstring write find_change
-    set findtype Exact
+    set findtype [mc "Exact"]
     set findtypemenu [tk_optionMenu .tf.lbar.findtype \
-		      findtype Exact IgnCase Regexp]
+		      findtype [mc "Exact"] [mc "IgnCase"] [mc "Regexp"]]
     trace add variable findtype write findcom_change
     .tf.lbar.findtype configure -font uifont
     .tf.lbar.findtype.menu configure -font uifont
@@ -2362,7 +2362,7 @@ proc findcom_change args {
     unmarkmatches
     if {$gdttype ne "containing:" || $findstring eq {}} {
 	set findpattern {}
-    } elseif {$findtype eq "Regexp"} {
+    } elseif {$findtype eq [mc "Regexp"]} {
 	set findpattern $findstring
     } else {
 	set e [string map {"*" "\\*" "?" "\\?" "\[" "\\\[" "\\" "\\\\"} \
@@ -2469,9 +2469,9 @@ proc readfhighlight {} {
 proc doesmatch {f} {
     global findtype findpattern
 
-    if {$findtype eq "Regexp"} {
+    if {$findtype eq [mc "Regexp"]} {
 	return [regexp $findpattern $f]
-    } elseif {$findtype eq "IgnCase"} {
+    } elseif {$findtype eq [mc "IgnCase"]} {
 	return [string match -nocase $findpattern $f]
     } else {
 	return [string match $findpattern $f]
@@ -4226,11 +4226,11 @@ proc notbusy {what} {
 
 proc findmatches {f} {
     global findtype findstring
-    if {$findtype == "Regexp"} {
+    if {$findtype == [mc "Regexp"]} {
 	set matches [regexp -indices -all -inline $findstring $f]
     } else {
 	set fs $findstring
-	if {$findtype == "IgnCase"} {
+	if {$findtype == [mc "IgnCase"]} {
 	    set f [string tolower $f]
 	    set fs [string tolower $fs]
 	}
-- 
1.5.3.4.206.g58ba4

^ permalink raw reply related

* [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


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