Git development
 help / color / mirror / Atom feed
* [PATCH] treat any file with NUL as binary
From: Dmitry Potapov @ 2008-01-15 14:28 UTC (permalink / raw)
  To: Junio C Hamano, git; +Cc: Steffen Prohaska, Dmitry Potapov

There are two heuristics in Git to detect whether a file is binary
or text. One in xdiff-interface.c relied on existing NUL byte at
the beginning. However, convert.c used a different heuristic, which
relied that the number of non-printable symbols is less than 1%.

Due to difference in approaches whether a file is binary or not,
it was possible that a file that diff treats as binary will not be
treated as text by CRLF conversation. This is very confusing for
a user who seeing that 'git diff' shows file as binary expects it
to be added as binary.

This patch makes is_binary to consider any file that contains at
least one NUL character as binary.
---

Junio,

I believe that the current behavior where 'git diff' shows me a file
as binary and then adds it as text with crlf conversation is a bug.

Though, it is not very likely to happen, it still possible cases where
a binary file contains large amount of text. For instance, a tar file
of text files can be such a file. Probably, word processor that store
text in binary format may also generate a file with more 99% printable
characters. So, such files will be considered as text by current convert
heuristic. Still such files are considered by diff due present of a NUL
character. This is very confusing for a user to see 'git diff' saying
that a file is binary and then having it converted as text. Because I
don't think that any real text file (especially one that requires CRLF
conversation) may contain NUL character, I believe this change should
improve binary heuristic and avoid user confusion.

So, please, consider it for inclusion as a bug fix.

 convert.c |    9 +++++++--
 1 files changed, 7 insertions(+), 2 deletions(-)

diff --git a/convert.c b/convert.c
index 5adef4f..a51da1f 100644
--- a/convert.c
+++ b/convert.c
@@ -17,8 +17,8 @@
 #define CRLF_INPUT	2
 
 struct text_stat {
-	/* CR, LF and CRLF counts */
-	unsigned cr, lf, crlf;
+	/* NUL, CR, LF and CRLF counts */
+	unsigned nul, cr, lf, crlf;
 
 	/* These are just approximations! */
 	unsigned printable, nonprintable;
@@ -51,6 +51,9 @@ static void gather_stats(const char *buf, unsigned long size, struct text_stat *
 			case '\b': case '\t': case '\033': case '\014':
 				stats->printable++;
 				break;
+			case 0:
+				stats->nul++;
+				/* fall through */
 			default:
 				stats->nonprintable++;
 			}
@@ -66,6 +69,8 @@ static void gather_stats(const char *buf, unsigned long size, struct text_stat *
 static int is_binary(unsigned long size, struct text_stat *stats)
 {
 
+	if (stats->nul)
+		return 1;
 	if ((stats->printable >> 7) < stats->nonprintable)
 		return 1;
 	/*
-- 
1.5.4.rc3.3.g0321b

^ permalink raw reply related

* [FEATURE REQUEST] git-svn format-patch
From: Chris Ortman @ 2008-01-15 13:59 UTC (permalink / raw)
  To: git

Something that would really benefit the folks who use git to manage a
subversion repository (such as myself) would be a special format-patch
command for git-svn that creates a tortoise svn compatible diff file.

Thanks.

^ permalink raw reply

* Re: [PATCH] gitk: make Ctrl "+" really increase the font size
From: Stephan Hennig @ 2008-01-15 13:50 UTC (permalink / raw)
  To: git
In-Reply-To: <alpine.DEB.1.00.0801141555100.23987@eeepc-johanness>

Johannes Schindelin schrieb:

>> > 	This is no bug in msysgit, but in gitk.
>> > 
>> > 	Paul, please apply.
>> 
>> The bug is still present in gitk that comes with Msysgit
> 
> If you are complaining about msysgit, please do not flood the git list 
> with your response.

You've pointed me to the git list, but since I actually made my
observations with Msysgit I kept that list copied.


> Besides, it is asking a little much after just 4 days for a patch to come 
> through no less than 4 different repositories: gitk -> git.git -> 
> mingw.git -> 4msysgit.git.

I didn't know that.  Since I couldn't find an entry in the list of
changes for Git 1.5.4 RC3 and both Git and Msysgit are labelled as RCs I
though instant feedback was the right thing.  Sorry for inconveniencing you.


> A patch that you could apply yourself easily, with the further benefit of 
> being able to added your "Tested-by:" line.
> 
> After all, I just worked for you, for free, and I expect something back.

Thanks!  Actually, I think reporting bugs already is giving something
(feedback) to the community.  Since an application has the chance to be
distributed with one less bug, user's acceptance is probably a little
bit higher.

Giving something to you - feel free to use one of the LaTeX or MetaPost
packages I've written, read the MetaPost manual where I'm a co-author or
ask LaTeX or MetaPost related questions on some LaTeX related newsgroup
or list.  I'd be happy to give some assistance.

As for Git, since I don't speak Perl and I'm not fluent in C I guess I
can't help much on that front.

Best regards,
Stephan Hennig

^ permalink raw reply

* Re: [PATCH] hg-to-git: improve popen calls
From: Johannes Schindelin @ 2008-01-15 13:11 UTC (permalink / raw)
  To: Mark Drago; +Cc: Junio C Hamano, git, brian.ewins, stelian
In-Reply-To: <af675f7f0801150503p26fba583tfb5827717b67705f@mail.gmail.com>

Hi,

On Tue, 15 Jan 2008, Mark Drago wrote:

> On Jan 15, 2008 5:17 AM, Junio C Hamano <gitster@pobox.com> wrote:
> > Mark Drago <markdrago@gmail.com> writes:
> >
> > > +    log_data = os.popen('hg log -r %d --template "{tags}\n{date|date}\n{author}\n"' % cset).readlines()
> >
> > I've already seen Stelian's Ack, but just for my sanity, let me
> > make sure one thing.  The above {date|date} is correct, not a
> > typo?
> 
> Yeah.  Everything after the pipe character is a filter and there is a
> template keyword and a filter that are both called 'date'.
> 
> mdrago@laptop:~/Code/trunk$ hg log -r 4 --template '{date}\n'
> 1197080765.018000
> mdrago@laptop:~/Code/trunk$ hg log -r 4 --template '{date|date}\n'
> Fri Dec 07 21:26:05 2007 -0500

Heh ;-)  And people call _git_ confusing...

Ciao,
Dscho

^ permalink raw reply

* Re: Git Gui: initial french translation: fr.po
From: Miklos Vajna @ 2008-01-15 13:09 UTC (permalink / raw)
  To: Christian Couder; +Cc: Shawn O. Pearce, Junio Hamano, git
In-Reply-To: <20080115062426.8fd03852.chriscool@tuxfamily.org>

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

On Tue, Jan 15, 2008 at 06:24:26AM +0100, Christian Couder <chriscool@tuxfamily.org> wrote:
> I just attached the file instead of sending the patch because I fear
> some encoding breakages.

if you have such a problem, you can push to the mob branch of
git-gui-i18n.git.

- VMiklos

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

^ permalink raw reply

* Re: [PATCH] hg-to-git: improve popen calls
From: Mark Drago @ 2008-01-15 13:03 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git, brian.ewins, stelian
In-Reply-To: <7vr6gjfl4z.fsf@gitster.siamese.dyndns.org>

On Jan 15, 2008 5:17 AM, Junio C Hamano <gitster@pobox.com> wrote:
> Mark Drago <markdrago@gmail.com> writes:
>
> > +    log_data = os.popen('hg log -r %d --template "{tags}\n{date|date}\n{author}\n"' % cset).readlines()
>
> I've already seen Stelian's Ack, but just for my sanity, let me
> make sure one thing.  The above {date|date} is correct, not a
> typo?

Yeah.  Everything after the pipe character is a filter and there is a
template keyword and a filter that are both called 'date'.

mdrago@laptop:~/Code/trunk$ hg log -r 4 --template '{date}\n'
1197080765.018000
mdrago@laptop:~/Code/trunk$ hg log -r 4 --template '{date|date}\n'
Fri Dec 07 21:26:05 2007 -0500

Mark.

^ permalink raw reply

* Re: [PATCH] gitk: Update German translation.
From: Christian Stimming @ 2008-01-15 12:49 UTC (permalink / raw)
  To: Paul Mackerras; +Cc: git
In-Reply-To: <18316.40706.103240.308564@cargo.ozlabs.ibm.com>

Am Dienstag, 15. Januar 2008 12:54 schrieb Paul Mackerras:
> Christian Stimming writes:
> > Now 100% complete (163 strings).
>
> I notice you didn't translate the text that is put in the key bindings
> help window.  Was that intentional?  

No, it wasn't intentional. In fact, the string (the whole text content) has 
been marked by [mc ...], but it doesn't show up in po/gitk.pot and hence not 
in po/foo.po. I don't know why this is the case...

> Would it perhaps be best to pass 
> each line of the message through [mc] separately?

Probably yes. I.e. both the key name and the explanation together should be 
one message, like so:
"
[mc "<Return>	Move to next find hit"]
[mc ...]
"

Are you up to preparing a patch? That would be nice. Thanks a lot.

Christian

^ permalink raw reply

* Re: git-commit fatal: Out of memory? mmap failed: Bad file descriptor
From: Junio C Hamano @ 2008-01-15 12:21 UTC (permalink / raw)
  To: Brandon Casey; +Cc: Git Mailing List, drafnel
In-Reply-To: <478C1D7A.6090103@nrlssc.navy.mil>

Brandon Casey <casey@nrlssc.navy.mil> writes:

> Brandon Casey wrote:
>> I got this message from git-commit:
>> 
>> $ git commit -a
>> <edit message, :wq>
>> fatal: Out of memory? mmap failed: Bad file descriptor
>> Create commit <my_prompt_string>

I think from your earlier reports we already know that the issue
is that somebody is closing a file descriptor we opened for a
packfile and makes the code to shuffle the window that is used
to access the packfile unhappy because it uses the fd to mmap.

> I ran git-bisect and the result is below. Doesn't look like
> much help though.

That change alone does look innocuous, but indeed is around the
place the code finds that the necessary fd is already closed.

> The other possibly useful info is that running
> 'git commit -a -C HEAD --amend' does not cause the error.

A huge difference between "-C HEAD" and a commit with an editor
is that the former bypasses the git-status code to fill the
commit message template.  In addition to that, the latter spawns
a new process.

It could be the editor codepath may be closing the fd when it
shouldn't, or some atexit() thing is triggering incorrectly.
IIRC the fd incorrectly closed was #6, so it is not likely that
process spawning code that may shuffle low fds is the culprit.

As Linus said already (and Alex suggested earlier in the nearby
thread), strace output might be a good place to help digging
this issue further, instead of us idly speculating.

What platform is this on?

Does it reliably reproduce for any commit in the repository, or
reliably reproduce for one particular commit, or sometimes
reprooduce for one particular commit?

^ permalink raw reply

* Re: [PATCH - v2] gitk: fix "Key bindings" message
From: Paul Mackerras @ 2008-01-15 11:57 UTC (permalink / raw)
  To: Michele Ballabio; +Cc: git
In-Reply-To: <200801091916.52680.barra_cuda@katamail.com>

Michele Ballabio writes:

> This patch tries to do so. Is this correct?

Pretty good...  I think that $M1T needs to be passed through [mc] as
well, and I would tend to use [list M1T $M1T] rather than "M1T $M1T",
but apart from that it's OK.  I am wondering whether the help text
needs to be busted up into individual lines for processing by [mc].

Paul.

^ permalink raw reply

* Re: [PATCH] gitk: Update German translation.
From: Paul Mackerras @ 2008-01-15 11:54 UTC (permalink / raw)
  To: Christian Stimming; +Cc: git
In-Reply-To: <200801092224.21680.stimming@tuhh.de>

Christian Stimming writes:

> Now 100% complete (163 strings).

I notice you didn't translate the text that is put in the key bindings
help window.  Was that intentional?  Would it perhaps be best to pass
each line of the message through [mc] separately?

Paul.

^ permalink raw reply

* Re: [PATCH] Squelch bogus progress output from git-rebase--interactive
From: Johannes Schindelin @ 2008-01-15 11:22 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git
In-Reply-To: <7v3aszivjk.fsf@gitster.siamese.dyndns.org>

Hi,

On Mon, 14 Jan 2008, Junio C Hamano wrote:

> The command repeats "Rebasing (1/1)" many times even when
> there is only one task remaining, because mark_action_done() is
> called to skip comment and empty lines in the TODO file.
> 
> This should fix it.

Yes, it should.

Thanks,
Dscho

^ permalink raw reply

* [PATCH 3/3] git-submodule: add test for the subcommand parser fix
From: Junio C Hamano @ 2008-01-15 11:20 UTC (permalink / raw)
  To: imyousuf; +Cc: git, Imran M Yousuf
In-Reply-To: <7vzlv7flb5.fsf@gitster.siamese.dyndns.org>

This modifies the existing t7400 test to use 'init' as the
pathname that a submodule is bound to.  Without the earlier
subcommand parser fix, this fails.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 t/t7400-submodule-basic.sh |   56 ++++++++++++++++++++++----------------------
 1 files changed, 28 insertions(+), 28 deletions(-)

diff --git a/t/t7400-submodule-basic.sh b/t/t7400-submodule-basic.sh
index 4fe3a41..2ef85a8 100755
--- a/t/t7400-submodule-basic.sh
+++ b/t/t7400-submodule-basic.sh
@@ -13,11 +13,11 @@ subcommands of git-submodule.
 
 #
 # Test setup:
-#  -create a repository in directory lib
+#  -create a repository in directory init
 #  -add a couple of files
-#  -add directory lib to 'superproject', this creates a DIRLINK entry
+#  -add directory init to 'superproject', this creates a DIRLINK entry
 #  -add a couple of regular files to enable testing of submodule filtering
-#  -mv lib subrepo
+#  -mv init subrepo
 #  -add an entry to .gitmodules for submodule 'example'
 #
 test_expect_success 'Prepare submodule testing' '
@@ -25,8 +25,8 @@ test_expect_success 'Prepare submodule testing' '
 	git-add t &&
 	git-commit -m "initial commit" &&
 	git branch initial HEAD &&
-	mkdir lib &&
-	cd lib &&
+	mkdir init &&
+	cd init &&
 	git init &&
 	echo a >a &&
 	git add a &&
@@ -41,10 +41,10 @@ test_expect_success 'Prepare submodule testing' '
 	cd .. &&
 	echo a >a &&
 	echo z >z &&
-	git add a lib z &&
+	git add a init z &&
 	git-commit -m "super commit 1" &&
-	mv lib .subrepo &&
-	GIT_CONFIG=.gitmodules git config submodule.example.url git://example.com/lib.git
+	mv init .subrepo &&
+	GIT_CONFIG=.gitmodules git config submodule.example.url git://example.com/init.git
 '
 
 test_expect_success 'status should fail for unmapped paths' '
@@ -52,7 +52,7 @@ test_expect_success 'status should fail for unmapped paths' '
 	then
 		echo "[OOPS] submodule status succeeded"
 		false
-	elif ! GIT_CONFIG=.gitmodules git config submodule.example.path lib
+	elif ! GIT_CONFIG=.gitmodules git config submodule.example.path init
 	then
 		echo "[OOPS] git config failed to update .gitmodules"
 		false
@@ -71,7 +71,7 @@ test_expect_success 'status should initially be "missing"' '
 test_expect_success 'init should register submodule url in .git/config' '
 	git-submodule init &&
 	url=$(git config submodule.example.url) &&
-	if test "$url" != "git://example.com/lib.git"
+	if test "$url" != "git://example.com/init.git"
 	then
 		echo "[OOPS] init succeeded but submodule url is wrong"
 		false
@@ -83,41 +83,41 @@ test_expect_success 'init should register submodule url in .git/config' '
 '
 
 test_expect_success 'update should fail when path is used by a file' '
-	echo "hello" >lib &&
+	echo "hello" >init &&
 	if git-submodule update
 	then
 		echo "[OOPS] update should have failed"
 		false
-	elif test "$(cat lib)" != "hello"
+	elif test "$(cat init)" != "hello"
 	then
-		echo "[OOPS] update failed but lib file was molested"
+		echo "[OOPS] update failed but init file was molested"
 		false
 	else
-		rm lib
+		rm init
 	fi
 '
 
 test_expect_success 'update should fail when path is used by a nonempty directory' '
-	mkdir lib &&
-	echo "hello" >lib/a &&
+	mkdir init &&
+	echo "hello" >init/a &&
 	if git-submodule update
 	then
 		echo "[OOPS] update should have failed"
 		false
-	elif test "$(cat lib/a)" != "hello"
+	elif test "$(cat init/a)" != "hello"
 	then
-		echo "[OOPS] update failed but lib/a was molested"
+		echo "[OOPS] update failed but init/a was molested"
 		false
 	else
-		rm lib/a
+		rm init/a
 	fi
 '
 
 test_expect_success 'update should work when path is an empty dir' '
-	rm -rf lib &&
-	mkdir lib &&
+	rm -rf init &&
+	mkdir init &&
 	git-submodule update &&
-	head=$(cd lib && git rev-parse HEAD) &&
+	head=$(cd init && git rev-parse HEAD) &&
 	if test -z "$head"
 	then
 		echo "[OOPS] Failed to obtain submodule head"
@@ -134,7 +134,7 @@ test_expect_success 'status should be "up-to-date" after update' '
 '
 
 test_expect_success 'status should be "modified" after submodule commit' '
-	cd lib &&
+	cd init &&
 	echo b >b &&
 	git add b &&
 	git-commit -m "submodule commit 2" &&
@@ -157,8 +157,8 @@ test_expect_success 'git diff should report the SHA1 of the new submodule commit
 '
 
 test_expect_success 'update should checkout rev1' '
-	git-submodule update &&
-	head=$(cd lib && git rev-parse HEAD) &&
+	git-submodule update init &&
+	head=$(cd init && git rev-parse HEAD) &&
 	if test -z "$head"
 	then
 		echo "[OOPS] submodule git rev-parse returned nothing"
@@ -182,13 +182,13 @@ test_expect_success 'checkout superproject with subproject already present' '
 test_expect_success 'apply submodule diff' '
 	git branch second &&
 	(
-		cd lib &&
+		cd init &&
 		echo s >s &&
 		git add s &&
 		git commit -m "change subproject"
 	) &&
-	git update-index --add lib &&
-	git-commit -m "change lib" &&
+	git update-index --add init &&
+	git-commit -m "change init" &&
 	git-format-patch -1 --stdout >P.diff &&
 	git checkout second &&
 	git apply --index P.diff &&
-- 
1.5.4.rc3.11.g4e67

^ permalink raw reply related

* [PATCH 2/3] git-submodule: fix subcommand parser
From: Junio C Hamano @ 2008-01-15 11:19 UTC (permalink / raw)
  To: imyousuf; +Cc: git, Imran M Yousuf
In-Reply-To: <7vzlv7flb5.fsf@gitster.siamese.dyndns.org>

The subcommand parser of "git submodule" made its subcommand
names reserved words.  As a consequence, a command like this:

    $ git submodule add init update

which is meant to add a submodule called 'init' at path 'update'
was misinterpreted as a request to invoke more than one mutually
incompatible subcommands and incorrectly rejected.

This patch fixes the issue by stopping the subcommand parsing at
the first subcommand word, to allow the sample command line
above to work as expected.

It also introduces the usual -- option disambiguator, so that a
submodule at path '-foo' can be updated with

    $ git submodule update -- -foo

without triggering an "unrecognized option -foo" error.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
---

 * And this is the second part to fix the real issue.

 git-submodule.sh |  157 ++++++++++++++++++++++++++++++++++++++++--------------
 1 files changed, 116 insertions(+), 41 deletions(-)

diff --git a/git-submodule.sh b/git-submodule.sh
index 3c104e3..a6aaf40 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -9,11 +9,8 @@ OPTIONS_SPEC=
 . git-sh-setup
 require_work_tree
 
-add=
+command=
 branch=
-init=
-update=
-status=
 quiet=
 cached=
 
@@ -123,6 +120,32 @@ module_clone()
 #
 cmd_add()
 {
+	# parse $args after "submodule ... add".
+	while test $# -ne 0
+	do
+		case "$1" in
+		-b | --branch)
+			case "$2" in '') usage ;; esac
+			branch=$2
+			shift
+			;;
+		-q|--quiet)
+			quiet=1
+			;;
+		--)
+			shift
+			break
+			;;
+		-*)
+			usage
+			;;
+		*)
+			break
+			;;
+		esac
+		shift
+	done
+
 	repo=$1
 	path=$2
 
@@ -176,6 +199,27 @@ cmd_add()
 #
 cmd_init()
 {
+	# parse $args after "submodule ... init".
+	while test $# -ne 0
+	do
+		case "$1" in
+		-q|--quiet)
+			quiet=1
+			;;
+		--)
+			shift
+			break
+			;;
+		-*)
+			usage
+			;;
+		*)
+			break
+			;;
+		esac
+		shift
+	done
+
 	git ls-files --stage -- "$@" | grep -e '^160000 ' |
 	while read mode sha1 stage path
 	do
@@ -209,6 +253,27 @@ cmd_init()
 #
 cmd_update()
 {
+	# parse $args after "submodule ... update".
+	while test $# -ne 0
+	do
+		case "$1" in
+		-q|--quiet)
+			quiet=1
+			;;
+		--)
+			shift
+			break
+			;;
+		-*)
+			usage
+			;;
+		*)
+			break
+			;;
+		esac
+		shift
+	done
+
 	git ls-files --stage -- "$@" | grep -e '^160000 ' |
 	while read mode sha1 stage path
 	do
@@ -268,6 +333,30 @@ set_name_rev () {
 #
 cmd_status()
 {
+	# parse $args after "submodule ... status".
+	while test $# -ne 0
+	do
+		case "$1" in
+		-q|--quiet)
+			quiet=1
+			;;
+		--cached)
+			cached=1
+			;;
+		--)
+			shift
+			break
+			;;
+		-*)
+			usage
+			;;
+		*)
+			break
+			;;
+		esac
+		shift
+	done
+
 	git ls-files --stage -- "$@" | grep -e '^160000 ' |
 	while read mode sha1 stage path
 	do
@@ -293,20 +382,17 @@ cmd_status()
 	done
 }
 
-while test $# != 0
+# This loop parses the command line arguments to find the
+# subcommand name to dispatch.  Parsing of the subcommand specific
+# options are primarily done by the subcommand implementations.
+# Subcommand specific options such as --branch and --cached are
+# parsed here as well, for backward compatibility.
+
+while test $# != 0 && test -z "$command"
 do
 	case "$1" in
-	add)
-		add=1
-		;;
-	init)
-		init=1
-		;;
-	update)
-		update=1
-		;;
-	status)
-		status=1
+	add | init | update | status)
+		command=$1
 		;;
 	-q|--quiet)
 		quiet=1
@@ -335,30 +421,19 @@ do
 	shift
 done
 
-case "$add,$branch" in
-1,*)
-	;;
-,)
-	;;
-,*)
+# No command word defaults to "status"
+test -n "$command" || command=status
+
+# "-b branch" is accepted only by "add"
+if test -n "$branch" && test "$command" != add
+then
 	usage
-	;;
-esac
-
-case "$add,$init,$update,$status,$cached" in
-1,,,,)
-	cmd_add "$@"
-	;;
-,1,,,)
-	cmd_init "$@"
-	;;
-,,1,,)
-	cmd_update "$@"
-	;;
-,,,*,*)
-	cmd_status "$@"
-	;;
-*)
+fi
+
+# "--cached" is accepted only by "status"
+if test -n "$cached" && test "$command" != status
+then
 	usage
-	;;
-esac
+fi
+
+"cmd_$command" "$@"
-- 
1.5.4.rc3.11.g4e67

^ permalink raw reply related

* [PATCH 1/3] git-submodule: rename shell functions for consistency
From: Junio C Hamano @ 2008-01-15 11:18 UTC (permalink / raw)
  To: imyousuf; +Cc: git, Imran M Yousuf
In-Reply-To: <7vzlv7flb5.fsf@gitster.siamese.dyndns.org>

This renames the shell functions used in git-submodule that
implement top-level subcommands.  The rule is that the
subcommand $foo is implemented by cmd_$foo function.

A noteworthy change is that modules_list() is now known as
cmd_status().  There is no "submodule list" command.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
---

 * We could probably do something like this.  This first part is
   about making the command dispatcher maintainable.

   Note that I haven't seriously tested this series.  This and
   the next one are primarily to illustrate what I think the fix
   you are trying should look like.

 git-submodule.sh |   20 ++++++++++----------
 1 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/git-submodule.sh b/git-submodule.sh
index ad9fe62..3c104e3 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -86,9 +86,9 @@ module_name()
 #
 # Clone a submodule
 #
-# Prior to calling, modules_update checks that a possibly existing
+# Prior to calling, cmd_update checks that a possibly existing
 # path is not a git repository.
-# Likewise, module_add checks that path does not exist at all,
+# Likewise, cmd_add checks that path does not exist at all,
 # since it is the location of a new submodule.
 #
 module_clone()
@@ -121,7 +121,7 @@ module_clone()
 #
 # optional branch is stored in global branch variable
 #
-module_add()
+cmd_add()
 {
 	repo=$1
 	path=$2
@@ -174,7 +174,7 @@ module_add()
 #
 # $@ = requested paths (default to all)
 #
-modules_init()
+cmd_init()
 {
 	git ls-files --stage -- "$@" | grep -e '^160000 ' |
 	while read mode sha1 stage path
@@ -207,7 +207,7 @@ modules_init()
 #
 # $@ = requested paths (default to all)
 #
-modules_update()
+cmd_update()
 {
 	git ls-files --stage -- "$@" | grep -e '^160000 ' |
 	while read mode sha1 stage path
@@ -266,7 +266,7 @@ set_name_rev () {
 #
 # $@ = requested paths (default to all)
 #
-modules_list()
+cmd_status()
 {
 	git ls-files --stage -- "$@" | grep -e '^160000 ' |
 	while read mode sha1 stage path
@@ -347,16 +347,16 @@ esac
 
 case "$add,$init,$update,$status,$cached" in
 1,,,,)
-	module_add "$@"
+	cmd_add "$@"
 	;;
 ,1,,,)
-	modules_init "$@"
+	cmd_init "$@"
 	;;
 ,,1,,)
-	modules_update "$@"
+	cmd_update "$@"
 	;;
 ,,,*,*)
-	modules_list "$@"
+	cmd_status "$@"
 	;;
 *)
 	usage
-- 
1.5.4.rc3.11.g4e67

^ permalink raw reply related

* Re: [PATCH] safecrlf: Add flag to convert_to_git() to disable safecrlf check
From: Dmitry Potapov @ 2008-01-15 10:26 UTC (permalink / raw)
  To: Steffen Prohaska; +Cc: gitster, torvalds, git
In-Reply-To: <12003528401309-git-send-email-prohaska@zib.de>

On Tue, Jan 15, 2008 at 12:20:40AM +0100, Steffen Prohaska wrote:
> 
> I looked briefly at the various places where convert_to_git() is
> called.  I think that only the one code path through index_fd()
> actually writes data to the repsitory.  Maybe someone else with
> a better understanding of git's internals should confirm this.

Your patch is certainly better than my quick hack for git-add,
and perhaps you are right that the check should be done only
when data are written, but it also means that there is no longer
any warning when you are running git diff with the work tree,
which would be useful, because it is what most users do before
adding anything.

However, my real concern is that it seems we have two different
heuristics for binary -- one that is used inside of convert.c
and the other one is buffer_is_binary() in xdiff-interface.c.

So, I am running 'git diff' for some test file, and it says:

diff --git a/foo b/foo
index e965047..c102bdc 100644
Binary files a/foo and b/foo differ

okay, now I want to add this *binary* file, so I run 'git add':

warning: Stripped CRLF from foo.

I imagine a user saying: "What the hell! Why did this stupid Git
strip CRLF from my _binary_ file?"

And the current version of Git, which does not print CRLF warning,
seems to be dangerous, because when 'git diff' told me that it is
a _binary_ file, I expect that Git will put it as *binary*. So,
from the user's point of view, it looks like a bug.

So, I suppose that at least we should make is_binary heuristic in
convert.c more strict than those that is used by diff. Namely, if
there is at least one NUL byte in the buffer, it should be treated
as binary.


Dmitry

^ permalink raw reply

* Re: [PATCH] hg-to-git: improve popen calls
From: Junio C Hamano @ 2008-01-15 10:17 UTC (permalink / raw)
  To: Mark Drago; +Cc: git, brian.ewins, stelian
In-Reply-To: <478C0837.7090804@gmail.com>

Mark Drago <markdrago@gmail.com> writes:

> +    log_data = os.popen('hg log -r %d --template "{tags}\n{date|date}\n{author}\n"' % cset).readlines()

I've already seen Stelian's Ack, but just for my sanity, let me
make sure one thing.  The above {date|date} is correct, not a
typo?

^ permalink raw reply

* Re: [PATCH] hg-to-git: improve popen calls
From: Junio C Hamano @ 2008-01-15 10:15 UTC (permalink / raw)
  To: Stelian Pop; +Cc: Mark Drago, git, brian.ewins
In-Reply-To: <1200390734.10025.28.camel@galileo>

Thanks both.  Will apply (but I am about to head to bed for the
night).

^ permalink raw reply

* Re: [PATCH] - git submodule subcommand parsing modified.
From: Junio C Hamano @ 2008-01-15 10:13 UTC (permalink / raw)
  To: imyousuf; +Cc: git, Imran M Yousuf
In-Reply-To: <1200280956-19920-1-git-send-email-imyousuf@gmail.com>

imyousuf@gmail.com writes:

> From: Imran M Yousuf <imyousuf@smartitengineering.com>
>
> - manual page of git-submodule and usage mentioned in git-subcommand.sh
> were not same, thus synchronized them. In doing so also had to change the
> way the subcommands were parsed.
>
> - Previous version did not allow commands such as
> 	git-submodule add init update
> as the command parser incorrectly made subcommand names reserve.
> Thus refusing them to be used as parameters to subcommands. As a result it
> was impossible to add a submodule whose (symbolic) name is "init" and that
> resides at path "update" was refused. For more details the following case
> can be considered -
>
> mkdir g; mkdir f; cd g/
> touch g.txt; echo "sample text for g.txt" >> ./g.txt; git-init;
> git-add g.txt; git-commit -a -m "First commit on g"
> cd ../f/; ln -s ../g/ init
> git-init; git-submodule add init update;
> git-commit -a -m "With module update"
> mkdir ../test; cd ../test
> git-clone ../f/; cd f
> git-submodule init update; git-submodule update update
> cd ../..; rm -rf ./f/ ./test/ ./g/

 - I'd drop everything after "For more details...".  If you feel
   that the part before "For more details" cannot be understood
   without that thick and solid sample script, perhaps that
   description needs to be rewritten to make it easier to
   understand (personally I do not see it as hard to understand,
   modulo grammatical errors).

> This patch fixes this issue and allows it as well.

 - "it" in this sentence can easily be mistaken as referring to
   "this issue".  I'd suggest dropping "and allows...".

> - Status currently is implemented to show list only but later
> implementation might change and list and status could coexists. Thus
> status module is introduced. The module is also used to parse its
> arguments

 - That is probably better in a separate patch, if the purpose
   of the patch is about straightening out the command parser to
   fix existing issues.  Generally it is a good idea to have
   fixes and enhancement as separate patches.

> - Subcommands will also parse their own commands; thus enabling command
> specific arguments to be passed after the command. For example,
> 	git-submodule -q add -b master module_a
> 	git-submodule -q status -c
> It is to be noted that -q or --quiet is specified before the subcommand
> since it is for the submodule command in general rather than the
> subcommand. It is mention worthy that backward compatibility exists and
> thus commands like git submodule --cached status will also work as expected

 - I have a mild distaste against commands that expect the users
   to intimately know what option is command wide and what
   option is subcommand specific.  IOW it is not very nice to
   accept "git submodule -q status" and reject "git submodule
   status -q".

> - Subcommands that currently do not take any arguments (init and update)
> has a case which is introduced just to ensure that no argument is
> deliberately sent as the first argument and also to serve the purpose of
> providing a future extension point for its arguments.

 - As far as I understand what they do, they both do take
   paths arguments to name specific modules, so the above
   sentence is bogus.  Maybe you meant rejecting non-existent
   options, and I'd agree with the intent if that is the case
   (but your implementation around -- is bogus).

> - Though ther was short and long version for quiet (-q or --quiet and
> branch (-b or --branch) but there was no short version for cached. Thus
> it is now introduced (-c or --cached).
>
> - Added 3 specific messages for usage error related to branch and cached
>
> - Simplified subcommand action invocation by simply invoking the action if
> all conditions are fulfilled. Excepting for parsing command line arguments
> case statements are avoided and instead more direct if statement is
> introduced.
> ---

 - Lacks sign-off.

 - The message felt very hard to read.  Perhaps it is just that
   these unindented sentences in bullet-list, together with the
   two displayed command line that are not separated from the
   rest of the text with a blank line, hurts the eyes.

 - Perhaps the patch tries to do too many things.  For example,
   introduction of -c does not have to belong here.  nor
   "status" which currently is the same as "list".  Maybe that
   is why the description needs to talk about too many things,
   which in turn could be the reason why I find the above
   message very hard to read.

> diff --git a/git-submodule.sh b/git-submodule.sh
> index ad9fe62..22e7e5f 100755
> --- a/git-submodule.sh
> +++ b/git-submodule.sh
> @@ -4,18 +4,23 @@
>  #
>  # Copyright (c) 2007 Lars Hjemli
>  
> -USAGE='[--quiet] [--cached] [add <repo> [-b branch]|status|init|update] [--] [<path>...]'
> +# Synopsis of this commands are as follows
> +# git-submodule [-q|--quiet] add [-b|--branch branch] <repository> [<path>]
> +# git-submodule [-q|--quiet] [status] [-c|--cached] [--] [<path>...]
> +# git-submodule [-q|--quiet] init [--] [<path>...]
> +# git-submodule [-q|--quiet] update [--] [<path>...]
> +USAGE='[-q|--quiet] [[[add [-b|--branch branch] <repo>]|[[[status [-c|--cached]]|init|update] [--]]]  [<path>...]]'
>  OPTIONS_SPEC=
>  . git-sh-setup
>  require_work_tree
>  
> +MODULES_LIST='modules_list'
> +

 - What's the purpose of this variable?  If you are planning to
   change the default command by changing the value of this
   variable, then the variable is not about MODULES_LIST, but
   about DEFAULT_COMMAND or something, and should be named as
   such.

>  add=
>  branch=
> -init=
> -update=
> -status=
>  quiet=
>  cached=
> +command=
>  
>  #
>  # print stuff on stdout unless -q was specified
> @@ -114,6 +119,17 @@ module_clone()
>  	die "Clone of '$url' into submodule path '$path' failed"
>  }
>  
> +# Parses the branch name and exits if not present
> +parse_branch_name()
> +{
> +	branch="$1"; 
> +	if test -z "$branch"
> +	then
> +		echo Branch name must me specified	
> +		usage
> +	fi

 - Shouldn't the message go to stderr?

 - If we use "usage", that already tells the user -b is followed
   by branch.  Is the extra message needed in the first place?
   If this patch is about "fixing", perhaps you should not be
   mixing this kind of unnecessary changes in it.

> +}
> +
>  #
>  # Add a new submodule to the working tree, .gitmodules and the index
>  #
> @@ -123,6 +139,16 @@ module_clone()
>  #
>  module_add()
>  {
> +	case "$1" in
> +		-b|--branch)
> +			shift
> +			parse_branch_name "$@" &&
> +			shift
> +			;;
> +		-*)
> +			usage
> +			;;
> +	esac

 - Style.  Please align case arms with "case/esac", like other
   scripts (and the original version of this script) do.  I.e.

	case "$1" in
        -b|--branch)
                ...
	esac

   This comment applies to other parts of the patch as well.

>  	repo=$1
>  	path=$2
>  
> @@ -176,6 +202,14 @@ module_add()
>  #
>  modules_init()
>  {
> +	# Added here to ensure that no argument is passed to be treated as
> +	# parameter to the sub command. This will be used to parse any 
> +	# to the subcommand
> +	case "$1" in
> +		-*)
> +			usage
> +			;;
> +	esac

 - If I understand correctly, "git submodule init" takes paths
   to submodules as arguments.  Are you disallowing paths that
   begin with '-', even though the body of the command (ls-files
   piped to while loop) is written in such a way that is
   perfectly capable of handling such a path?

>  	git ls-files --stage -- "$@" | grep -e '^160000 ' |
>  	while read mode sha1 stage path
>  	do
> @@ -209,6 +243,14 @@ modules_init()
>  #
>  modules_update()
>  {
> +	# Added here to ensure that no argument is passed to be treated as
> +	# parameter to the sub command. This will be used to parse any 
> +	# to the subcommand
> +	case "$1" in
> +		-*)
> +			usage
> +			;;
> +	esac

 - The same comment as modules_init() above applies here.

>  	git ls-files --stage -- "$@" | grep -e '^160000 ' |
>  	while read mode sha1 stage path
>  	do
> @@ -293,36 +335,69 @@ modules_list()
>  	done
>  }
>  
> +# Delgates to modules_list after parsing its arguments

 - That's "delegates", but typically when we write a sentence
   without the subject like this in the comment, we use the
   imperative mood, so "Delegate to modules_list after ..."
   would be more appropriate.

> +modules_status()
> +{
> +	case "$1" in
> +		-c|--cached)
> +			shift
> +			cached=1
> +			;;
> +		-*)
> +			usage
> +			;;
> +	esac
> +	"$MODULES_LIST" "$@"
> +}

 - The same comment as modules_init() above applies here.

> +# If there is '--' as the first argument simply ignores it and thus shifts
> +check_for_terminator()
> +{
> +	if test -n "$1" && test "$1" = "--"
> +	then
> +		shift
> +	fi
> +}

 - That 'test -n "$1" && test "$1" = "--"' feels stupid; if "$1"
   is equal to "--", it certainly will be -n (i.e. not empty).
   Perhaps 'test $# -ge 1 && test "$1" = "--"' or even just
   'test "$1" = "--"'.

 - I do not think the 'shift' does anything useful.  It does not
   shift the positional parameters of the caller of this shell
   function, and would be a noop from the caller's point of
   view.  It only shifts the positional parameters inside this
   function (study e.g. "2.9.5 Function Definition Command",
   http://www.opengroup.org/onlinepubs/000095399/utilities/xcu_chap02.html).

> +# Command synopsis clearly shows that all arguments after
> +# subcommand are arguments to the command itself. Thus
> +# there lies no command that has configuration argument
> +# after the mention of the subcommand. Thus once the
> +# subcommand is found and the separator ('--') is ignored
> +# rest can be safely sent the subcommand action

 - That's a valid justification but I think it is enough to say
   what it does (i.e. "Arguments after the subcommand name are
   given to the subcommand").  How you arrived to that design
   decision (i.e. your justification based on the synopsis) does
   not belong here.  It could however be part of the commit log
   message.

 - I do not agree with the (attempted) stripping of -- you talk
   about here (that is done in the loop below).

> +# It is to be noted that pre-subcommand arguments are parsed
> +# just to have backward compatibility.

 - Because we might want to deprecate and remove forms like "-b
   branch add" later, this is a good comment to have here.  It
   makes it clear that these oddballs are purely for backward
   compatibility.

>  while test $# != 0
>  do
>  	case "$1" in
>  	add)
>  		add=1
> +		command="module_$1"
> +		shift
> +		break
>  		;;
> -	init)
> -		init=1
> -		;;
> -	update)
> -		update=1
> -		;;
> -	status)
> -		status=1
> +	init|update|status)
> +		command="modules_$1"
> +		shift
> +		check_for_terminator "$1"
> +		break
>  		;;

 - Aside from my earlier comment that the code would become
   simpler if you consistently renamed the shell functions to
   module_$foo (or cmd_$foo) so that the dispatcher can follow a
   simple rule "subcommand $foo is handled by shell function
   cmd_$foo", which you seem to have ignored, and also aside
   from that your check_for_terminator does not do what you seem
   to have intended (see above), I think this handling of -- is
   wrong.  By stripping -- here, you are making the following
   two behave exactly the same:

   $ git submodule update -- $other_args
   $ git submodule update    $other_args

   The whole point of -- is so that you can tell the command
   that the argument at the beginning of $other_args that
   happens to begin with a dash is _not_ an option but is a
   literal path (or whatever).  Think of the case in which you
   had '-foo' and 'bar' in place of $other_args above.  The
   first one tells the command to update two modules ('-foo' and
   'bar'), the second one tells the command to update 'bar'
   module but the update operation needs to be done with -foo
   option (whatever that option means to 'update' command).

   By checking and shifting -- out, you are making it impossible
   for the implementation of the command (i.e. your
   "modules_update") to tell which case it is dealing with.

>  	-q|--quiet)
>  		quiet=1
>  		;;
>  	-b|--branch)
> -		case "$2" in
> -		'')
> -			usage
> -			;;
> -		esac
> -		branch="$2"; shift
> +		shift
> +		parse_branch_name "$@"
>  		;;
> -	--cached)
> +	-c|--cached)
>  		cached=1
>  		;;
>  	--)
> +		# It is shifted so that it is not passed
> +		# as an argument to the default subcommand
> +		shift
>  		break
>  		;;
>  	-*)
> @@ -335,30 +410,25 @@ do
>  	shift
>  done
>  
> -case "$add,$branch" in
> -1,*)
> -	;;
> -,)
> -	;;
> -,*)
> +# Throws usage error if branch is not used with add command
> +if test -n "$branch" &&
> +   test -z "$add"
> +then
> +	echo Branch can not be specified without add subcommand
>  	usage
> -	;;
> -esac
> -
> -case "$add,$init,$update,$status,$cached" in
> -1,,,,)
> -	module_add "$@"
> -	;;
> -,1,,,)
> -	modules_init "$@"
> -	;;
> -,,1,,)
> -	modules_update "$@"
> -	;;
> -,,,*,*)
> -	modules_list "$@"
> -	;;
> -*)
> +fi
> +
> +# If no command is specified then default command
> +# is - git submodule status
> +test -z "$command" && command="modules_status"
> +
> +# Throws usage if --cached is used by other than status, init or update
> +# that is used with add command
> +if test -n "$cached" &&
> +   test "$command" != "modules_status"
> +then
> +	echo Cached can only be used with the status subcommand
>  	usage
> -	;;
> -esac
> +fi
> +
> +"$command" "$@"
> -- 
> 1.5.3.7

^ permalink raw reply

* Re: [PATCH] hg-to-git: improve popen calls
From: Stelian Pop @ 2008-01-15  9:52 UTC (permalink / raw)
  To: Mark Drago; +Cc: gitster, git, brian.ewins
In-Reply-To: <478C0837.7090804@gmail.com>


Le lundi 14 janvier 2008 à 20:11 -0500, Mark Drago a écrit :
> This patch improves all of the popen calls in hg-to-git.py by specifying the
> template 'hg log' should use instead of calling 'hg log' and grepping for the
> desired data.
> 
> Signed-off-by: Mark Drago <markdrago@gmail.com>

Nice !

Acked-by: Stelian Pop <stelian@popies.net>

Thanks.

Stelian.

-- 
Stelian Pop <stelian@popies.net>

^ permalink raw reply

* Re: [PATCH] parse_commit_buffer: don't parse invalid commits
From: Johannes Sixt @ 2008-01-15  7:32 UTC (permalink / raw)
  To: Martin Koegler; +Cc: Junio C Hamano, git
In-Reply-To: <12003456313661-git-send-email-mkoegler@auto.tuwien.ac.at>

Martin Koegler schrieb:
> Signed-off-by: Martin Koegler <mkoegler@auto.tuwien.ac.at>

Quite a lot has been said about this change and you had a hard time
defending it. Why doesn't *anything* of that discussion end up in the
commit message? The absolute minimum that belongs there is your definition
of "invalid commit".

-- Hannes

^ permalink raw reply

* Re: Print Precedes/Follows in git log
From: Marco Costalba @ 2008-01-15  6:38 UTC (permalink / raw)
  To: Jan Engelhardt; +Cc: git
In-Reply-To: <Pine.LNX.4.64.0801150031480.2315@fbirervta.pbzchgretzou.qr>

On Jan 15, 2008 12:34 AM, Jan Engelhardt <jengelh@computergmbh.de> wrote:
>
> And it would be really nice if `git log` would also show the
> Precedes/Follows lines so one can identify much more easily in
> big logs like those of the Linux kernel what the next release to
> have a given patch is.
>
>

You need two complete revisions walk for this, one from the newest to
oldset to compute the 'precedes' and one from the oldest to newest to
compute the 'follows', so I would say it's more suitable used together
with --topo-order option of git log that already does a walk, at least
the slowdown is hidden in this case.

Anyhow being able to compute precedes/following info in timely fashion
and with low memory consumption is quite not trivial code, I have
implemented for qgit long time ago and I remember gave a kook at the
gitk code for reference also if at the end my implementation it's a
bit different (less memory used but slightly more complicated).

Just to give an idea of timing, on my new and awesome ;-) laptop
loading full Linux tree it takes 3316ms, then calculating
precedes/follows info (indexing the tree) it takes 233ms.

Perhaps the slowest part is to load refs info, you need this to know
what sha a tag/branch has and is a prerequisite to indexing, also if
refs are compacted it takes almost 1 second on my PC because there is
heavy disk activity in any case.

Marco

^ permalink raw reply

* Re: [PATCH] Teach remote machinery about remotes.default config variable
From: Junio C Hamano @ 2008-01-15  6:18 UTC (permalink / raw)
  To: Mark Levedahl; +Cc: Johannes Schindelin, git
In-Reply-To: <478C3CD3.6010504@gmail.com>

Mark Levedahl <mlevedahl@gmail.com> writes:

> Junio C Hamano wrote:
> ...
>> Perhaps git-submodule.sh::modules_update should use $url it
>> obtains from the configuration in the upper level when running
>> git-fetch in the submodule.
>>
> yes, I like this change, it works very nicely. but that last patch is
> only a partial solution...
>> If you view the problem this way, your earlier "git fetch while
>> the HEAD is detached always uses 'origin'" may turn out to be a
>> non-issue.
>>
>> Which again brings us back to Johannes's earlier point.  If the
>> issue is about submodule, maybe what needs to be fixes is in
>> git-submodule, and not the defaulting to 'origin' git-fetch and
>> friends do.
>>
> Nope, git submodule *still* requires origin (e.g., execute git
> submodule init or update on a detached head).

Now I am even more confused.

The approach I suggested in a few paragraphs above, to which you
just said "I like this change", is about making "git submodule
update" to use the url configured in the upper level repository
when it runs "git fetch".  I am looking at around l.238 of
git-submodule.sh.  In the current code, it runs "git-fetch"
without any parameter, which would allow it default to origin or
whatever, which may or may not be desirable depending on where
the 'origin' points at.  If you make that particular git-fetch
explicitly say where the fetch should be done from, wouldn't it
fix the issue for that codepath?  Why does it still require
origin?

^ permalink raw reply

* Re: Git Cygwin - unable to create any repository - help!
From: Alex Riesen @ 2008-01-15  5:48 UTC (permalink / raw)
  To: Paul Umbers; +Cc: git
In-Reply-To: <a5eb9c330801141421g13c627e5x77afb357e2a78463@mail.gmail.com>

Paul Umbers, Mon, Jan 14, 2008 23:21:28 +0100:
> The "mount" command tells me everything I have is mounted in binmode.

Now that's unusual, unless you had "Text Mode" selected in the installer

> Are you saying I need to make sure the repository directory is mounted
> in text-mode (for Windows compatibility)? I just reinstalled cygwin,
> selecting text-mode as the default.

No, text-mode is definitely wrong for almost anything. It just
corrupts data. Try activating binary mode.

^ permalink raw reply

* Re: git-commit fatal: Out of memory? mmap failed: Bad file descriptor
From: Linus Torvalds @ 2008-01-15  5:42 UTC (permalink / raw)
  To: Brandon Casey; +Cc: Git Mailing List, drafnel
In-Reply-To: <478C1D7A.6090103@nrlssc.navy.mil>



On Mon, 14 Jan 2008, Brandon Casey wrote:
> 
> To reiterate, I only have problems with the builtin-commit,
> i.e. 1.5.4.*, the 1.5.3.* series works correctly. Of course
> if this is a memory corruption issue, then it could just be
> that the pattern of memory accesses in 1.5.3 does not tweak
> the problem.

Can you do an strace of the failure case and put it up on some public 
place (it's likely going to be too big to send as email)?

			Linus

^ permalink raw reply

* Git Gui: initial french translation: fr.po
From: Christian Couder @ 2008-01-15  5:24 UTC (permalink / raw)
  To: Shawn O. Pearce, Junio Hamano; +Cc: git

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

Here are some of the choices made to translate Git Gui to french:

- commit         -> "commit" (noun) or "commiter" (verb)
- stage (index)  -> "pré-commit" (noun) or "pré-commiter" (verb)
- (re)scan       -> "(re)synchroniser"
- reset          -> "réinitialiser"
- checkout       -> "emprunt" (noun) or "emprunter" (verb)
- revision expression -> "expression de révison"

I am not completely happy with these, but it's a start...

Signed-off-by: Christian Couder <chriscool@tuxfamily.org>
---

I just attached the file instead of sending the patch because I fear
some encoding breakages.



[-- Attachment #2: fr.po --]
[-- Type: application/octet-stream, Size: 47936 bytes --]

# translation of fr.po to French
# Translation of git-gui to French.
# Copyright (C) 2008 Shawn Pearce, et al.
# This file is distributed under the same license as the git package.
#
# Christian Couder <chriscool@tuxfamily.org>, 2008.
msgid ""
msgstr ""
"Project-Id-Version: fr\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2007-11-24 10:36+0100\n"
"PO-Revision-Date: 2008-01-14 21:08+0100\n"
"Last-Translator: Christian Couder <chriscool@tuxfamily.org>\n"
"Language-Team: French\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.11.4\n"
"Plural-Forms:  nplurals=2; plural=(n > 1);\n"

#: git-gui.sh:41 git-gui.sh:604 git-gui.sh:618 git-gui.sh:631 git-gui.sh:714
#: git-gui.sh:733
msgid "git-gui: fatal error"
msgstr "git-gui: erreur fatale"

#: git-gui.sh:565
#, tcl-format
msgid "Invalid font specified in %s:"
msgstr "Invalide fonte spécifiée dans %s :"

#: git-gui.sh:590
msgid "Main Font"
msgstr "Fonte principale"

#: git-gui.sh:591
msgid "Diff/Console Font"
msgstr "Fonte diff/console"

#: git-gui.sh:605
msgid "Cannot find git in PATH."
msgstr "Impossible de trouver git dans PATH."

#: git-gui.sh:632
msgid "Cannot parse Git version string:"
msgstr "Impossible de parser la version de Git :"

#: git-gui.sh:650
#, tcl-format
msgid ""
"Git version cannot be determined.\n"
"\n"
"%s claims it is version '%s'.\n"
"\n"
"%s requires at least Git 1.5.0 or later.\n"
"\n"
"Assume '%s' is version 1.5.0?\n"
msgstr ""
"Impossible de déterminer la version de Git.\n"
"\n"
"%s affirme qu'il s'agit de la version '%s'.\n"
"\n"
"%s nécessite au moins Git 1.5.0.\n"
"\n"
"Peut'on considérer que '%s' est en version 1.5.0 ?\n"

#: git-gui.sh:888
msgid "Git directory not found:"
msgstr "Impossible de trouver le répertoire de Git :"

#: git-gui.sh:895
msgid "Cannot move to top of working directory:"
msgstr "Impossible d'aller à la racine du répertoire de travail :"

#: git-gui.sh:902
msgid "Cannot use funny .git directory:"
msgstr "Impossible d'utiliser un drôle de répertoire git :"

#: git-gui.sh:907
msgid "No working directory"
msgstr "Pas de répertoire de travail"

#: git-gui.sh:1054
msgid "Refreshing file status..."
msgstr "Rafraichissement du status des fichiers..."

#: git-gui.sh:1119
msgid "Scanning for modified files ..."
msgstr "Recherche de fichiers modifiés..."

#: git-gui.sh:1294 lib/browser.tcl:245
msgid "Ready."
msgstr "Prêt."

#: git-gui.sh:1560
msgid "Unmodified"
msgstr "Non modifié"

#: git-gui.sh:1562
msgid "Modified, not staged"
msgstr "Modifié, non pré-commité"

#: git-gui.sh:1563 git-gui.sh:1568
msgid "Staged for commit"
msgstr "Pré-commité"

#: git-gui.sh:1564 git-gui.sh:1569
msgid "Portions staged for commit"
msgstr "En partie pré-commité"

#: git-gui.sh:1565 git-gui.sh:1570
msgid "Staged for commit, missing"
msgstr "Pré-commité, manquant"

#: git-gui.sh:1567
msgid "Untracked, not staged"
msgstr "Non suivi, non pré-commité"

#: git-gui.sh:1572
msgid "Missing"
msgstr "Manquant"

#: git-gui.sh:1573
msgid "Staged for removal"
msgstr "Pré-commité pour suppression"

#: git-gui.sh:1574
msgid "Staged for removal, still present"
msgstr "Pré-commité pour suppression, toujours présent"

#: git-gui.sh:1576 git-gui.sh:1577 git-gui.sh:1578 git-gui.sh:1579
msgid "Requires merge resolution"
msgstr "Nécessite la résolution d'une fusion"

#: git-gui.sh:1614
msgid "Starting gitk... please wait..."
msgstr "Lancement de gitk... merci de patienter..."

#: git-gui.sh:1623
#, tcl-format
msgid ""
"Unable to start gitk:\n"
"\n"
"%s does not exist"
msgstr ""
"Impossible de lancer gitk :\n"
"\n"
"%s inexistant"

#: git-gui.sh:1823 lib/choose_repository.tcl:35
msgid "Repository"
msgstr "Référentiel"

#: git-gui.sh:1824
msgid "Edit"
msgstr "Editer"

#: git-gui.sh:1826 lib/choose_rev.tcl:560
msgid "Branch"
msgstr "Branche"

#: git-gui.sh:1829 lib/choose_rev.tcl:547
msgid "Commit@@noun"
msgstr "Commit"

#: git-gui.sh:1832 lib/merge.tcl:121 lib/merge.tcl:150 lib/merge.tcl:168
msgid "Merge"
msgstr "Fusionner"

#: git-gui.sh:1833 lib/choose_rev.tcl:556
msgid "Remote"
msgstr "Référentiel distant"

#: git-gui.sh:1842
msgid "Browse Current Branch's Files"
msgstr "Visionner fichiers dans branche courante"

#: git-gui.sh:1846
msgid "Browse Branch Files..."
msgstr "Visionner fichiers de branche"

#: git-gui.sh:1851
msgid "Visualize Current Branch's History"
msgstr "Visualiser historique branche courante"

#: git-gui.sh:1855
msgid "Visualize All Branch History"
msgstr "Visualiser historique toutes branches"

#: git-gui.sh:1862
#, tcl-format
msgid "Browse %s's Files"
msgstr "Visionner fichiers de %s"

#: git-gui.sh:1864
#, tcl-format
msgid "Visualize %s's History"
msgstr "Visualiser historique de %s"

#: git-gui.sh:1869 lib/database.tcl:27 lib/database.tcl:67
msgid "Database Statistics"
msgstr "Statistiques base de donnée"

#: git-gui.sh:1872 lib/database.tcl:34
msgid "Compress Database"
msgstr "Comprimer base de donnée"

#: git-gui.sh:1875
msgid "Verify Database"
msgstr "Vérifier base de donnée"

#: git-gui.sh:1882 git-gui.sh:1886 git-gui.sh:1890 lib/shortcut.tcl:7
#: lib/shortcut.tcl:39 lib/shortcut.tcl:71
msgid "Create Desktop Icon"
msgstr "Créer icône sur bureau"

#: git-gui.sh:1895 lib/choose_repository.tcl:176 lib/choose_repository.tcl:184
msgid "Quit"
msgstr "Quitter"

#: git-gui.sh:1902
msgid "Undo"
msgstr "Défaire"

#: git-gui.sh:1905
msgid "Redo"
msgstr "Refaire"

#: git-gui.sh:1909 git-gui.sh:2403
msgid "Cut"
msgstr "Couper"

#: git-gui.sh:1912 git-gui.sh:2406 git-gui.sh:2477 git-gui.sh:2549
#: lib/console.tcl:67
msgid "Copy"
msgstr "Copier"

#: git-gui.sh:1915 git-gui.sh:2409
msgid "Paste"
msgstr "Coller"

#: git-gui.sh:1918 git-gui.sh:2412 lib/branch_delete.tcl:26
#: lib/remote_branch_delete.tcl:38
msgid "Delete"
msgstr "Supprimer"

#: git-gui.sh:1922 git-gui.sh:2416 git-gui.sh:2553 lib/console.tcl:69
msgid "Select All"
msgstr "Tout sélectionner"

#: git-gui.sh:1931
msgid "Create..."
msgstr "Créer..."

#: git-gui.sh:1937
msgid "Checkout..."
msgstr "Emprunter... "

#: git-gui.sh:1943
msgid "Rename..."
msgstr "Renommer..."

#: git-gui.sh:1948 git-gui.sh:2048
msgid "Delete..."
msgstr "Supprimer..."

#: git-gui.sh:1953
msgid "Reset..."
msgstr "Réinitialiser..."

#: git-gui.sh:1965 git-gui.sh:2350
msgid "New Commit"
msgstr "Nouveau commit"

#: git-gui.sh:1973 git-gui.sh:2357
msgid "Amend Last Commit"
msgstr "Corriger dernier commit"

#: git-gui.sh:1982 git-gui.sh:2317 lib/remote_branch_delete.tcl:99
msgid "Rescan"
msgstr "Resynchroniser"

#: git-gui.sh:1988
msgid "Stage To Commit"
msgstr "Commiter un pré-commit"

#: git-gui.sh:1994
msgid "Stage Changed Files To Commit"
msgstr "Commiter fichiers modifiés dans pré-commit"

#: git-gui.sh:2000
msgid "Unstage From Commit"
msgstr "Commit vers pré-commit"

#: git-gui.sh:2005 lib/index.tcl:393
msgid "Revert Changes"
msgstr "Inverser modification"

#: git-gui.sh:2012 git-gui.sh:2329 git-gui.sh:2427
msgid "Sign Off"
msgstr "Se désinscrire"

#: git-gui.sh:2016 git-gui.sh:2333
msgid "Commit@@verb"
msgstr "Commiter"

#: git-gui.sh:2027
msgid "Local Merge..."
msgstr "Fusion locale..."

#: git-gui.sh:2032
msgid "Abort Merge..."
msgstr "Abandonner fusion..."

#: git-gui.sh:2044
msgid "Push..."
msgstr "Pousser..."

#: git-gui.sh:2055 lib/choose_repository.tcl:40
msgid "Apple"
msgstr "Pomme"

#: git-gui.sh:2058 git-gui.sh:2080 lib/about.tcl:13
#: lib/choose_repository.tcl:43 lib/choose_repository.tcl:49
#, tcl-format
msgid "About %s"
msgstr "A propos de %s"

#: git-gui.sh:2062
msgid "Preferences..."
msgstr "Préférences..."

#: git-gui.sh:2070 git-gui.sh:2595
msgid "Options..."
msgstr "Options..."

#: git-gui.sh:2076 lib/choose_repository.tcl:46
msgid "Help"
msgstr "Aide"

#: git-gui.sh:2117
msgid "Online Documentation"
msgstr "Documentation en ligne"

#: git-gui.sh:2201
#, tcl-format
msgid "fatal: cannot stat path %s: No such file or directory"
msgstr "fatale : pas d'infos sur le chemin %s : Fichier ou répertoire inexistant"

#: git-gui.sh:2234
msgid "Current Branch:"
msgstr "Branche courante :"

#: git-gui.sh:2255
msgid "Staged Changes (Will Commit)"
msgstr "Modifications pré-commitées"

#: git-gui.sh:2274
msgid "Unstaged Changes"
msgstr "Modifications non pré-commitées"

#: git-gui.sh:2323
msgid "Stage Changed"
msgstr "Pré-commit modifié"

#: git-gui.sh:2339 lib/transport.tcl:93 lib/transport.tcl:182
msgid "Push"
msgstr "Pousser"

#: git-gui.sh:2369
msgid "Initial Commit Message:"
msgstr "Message de commit initial :"

#: git-gui.sh:2370
msgid "Amended Commit Message:"
msgstr "Message de commit corrigé :"

#: git-gui.sh:2371
msgid "Amended Initial Commit Message:"
msgstr "Message de commit initial corrigé :"

#: git-gui.sh:2372
msgid "Amended Merge Commit Message:"
msgstr "Message de commit de fusion corrigé :"

#: git-gui.sh:2373
msgid "Merge Commit Message:"
msgstr "Message de commit de fusion :"

#: git-gui.sh:2374
msgid "Commit Message:"
msgstr "Message de commit :"

#: git-gui.sh:2419 git-gui.sh:2557 lib/console.tcl:71
msgid "Copy All"
msgstr "Copier tout"

#: git-gui.sh:2443 lib/blame.tcl:104
msgid "File:"
msgstr "Fichier :"

#: git-gui.sh:2545
msgid "Refresh"
msgstr "Rafraichir"

#: git-gui.sh:2566
msgid "Apply/Reverse Hunk"
msgstr "Appliquer/Inverser section"

#: git-gui.sh:2572
msgid "Decrease Font Size"
msgstr "Réduire fonte"

#: git-gui.sh:2576
msgid "Increase Font Size"
msgstr "Agrandir fonte"

#: git-gui.sh:2581
msgid "Show Less Context"
msgstr "Montrer moins de contexte"

#: git-gui.sh:2588
msgid "Show More Context"
msgstr "Montrer plus de contexte"

#: git-gui.sh:2602
msgid "Unstage Hunk From Commit"
msgstr "Enlever section pré-commitée"

#: git-gui.sh:2604
msgid "Stage Hunk For Commit"
msgstr "Pré-commiter section"

#: git-gui.sh:2623
msgid "Initializing..."
msgstr "Initialisation..."

#: git-gui.sh:2718
#, tcl-format
msgid ""
"Possible environment issues exist.\n"
"\n"
"The following environment variables are probably\n"
"going to be ignored by any Git subprocess run\n"
"by %s:\n"
"\n"
msgstr ""
"Des problèmes d'environnement sont possibles.\n"
"\n"
"Les variables d'environnement suivantes seront\n"
"probablement ignorées par tous les\n"
"sous-processus de Git lancés par %s\n"
"\n"

#: git-gui.sh:2748
msgid ""
"\n"
"This is due to a known issue with the\n"
"Tcl binary distributed by Cygwin."
msgstr ""
"\n"
"Ceci est du à un problème connu avec\n"
"le binaire Tcl distribué par Cygwin."

#: git-gui.sh:2753
#, tcl-format
msgid ""
"\n"
"\n"
"A good replacement for %s\n"
"is placing values for the user.name and\n"
"user.email settings into your personal\n"
"~/.gitconfig file.\n"
msgstr ""
"\n"
"\n"
"Un bon remplacement pour %s\n"
"est de mettre les valeurs pour 'user.name' (nom\n"
"de l'utilisateur) et 'user.email' (addresse email\n"
"de l'utilisateur) dans votre fichier '~/.gitconfig'."

#: lib/about.tcl:25
msgid "git-gui - a graphical user interface for Git."
msgstr "git-gui - une interface graphique utilisateur pour Git"

#: lib/blame.tcl:77
msgid "File Viewer"
msgstr "Visionneur de fichier"

#: lib/blame.tcl:81
msgid "Commit:"
msgstr "Commit :"

#: lib/blame.tcl:249
msgid "Copy Commit"
msgstr "Copier commit"

#: lib/blame.tcl:369
#, tcl-format
msgid "Reading %s..."
msgstr "Lecture de %s..."

#: lib/blame.tcl:473
msgid "Loading copy/move tracking annotations..."
msgstr "Chargement des annotations de suivi des copies/déplacements..."

#: lib/blame.tcl:493
msgid "lines annotated"
msgstr "lignes annotées"

#: lib/blame.tcl:674
msgid "Loading original location annotations..."
msgstr "Chargement des annotations d'emplacement original"

#: lib/blame.tcl:677
msgid "Annotation complete."
msgstr "Annotation terminée."

#: lib/blame.tcl:731
msgid "Loading annotation..."
msgstr "Chargement des annotations..."

#: lib/blame.tcl:787
msgid "Author:"
msgstr "Auteur :"

#: lib/blame.tcl:791
msgid "Committer:"
msgstr "Commiteur :"

#: lib/blame.tcl:796
msgid "Original File:"
msgstr "Fichier original :"

#: lib/blame.tcl:910
msgid "Originally By:"
msgstr "A l'origine par :"

#: lib/blame.tcl:916
msgid "In File:"
msgstr "Dans le fichier :"

#: lib/blame.tcl:921
msgid "Copied Or Moved Here By:"
msgstr "Copié ou déplacé ici par :"

#: lib/branch_checkout.tcl:14 lib/branch_checkout.tcl:19
msgid "Checkout Branch"
msgstr "Emprunter branche"

#: lib/branch_checkout.tcl:23
msgid "Checkout"
msgstr "Emprunter"

#: lib/branch_checkout.tcl:27 lib/branch_create.tcl:35
#: lib/branch_delete.tcl:32 lib/branch_rename.tcl:30 lib/browser.tcl:281
#: lib/checkout_op.tcl:522 lib/choose_font.tcl:43 lib/merge.tcl:172
#: lib/option.tcl:90 lib/remote_branch_delete.tcl:42 lib/transport.tcl:97
msgid "Cancel"
msgstr "Annuler"

#: lib/branch_checkout.tcl:32 lib/browser.tcl:286
msgid "Revision"
msgstr "Révision"

#: lib/branch_checkout.tcl:36 lib/branch_create.tcl:69 lib/option.tcl:202
msgid "Options"
msgstr "Options"

#: lib/branch_checkout.tcl:39 lib/branch_create.tcl:92
msgid "Fetch Tracking Branch"
msgstr "Branche suivant récupération"

#: lib/branch_checkout.tcl:44
msgid "Detach From Local Branch"
msgstr "Détacher de branche locale"

#: lib/branch_create.tcl:22
msgid "Create Branch"
msgstr "Créer branche"

#: lib/branch_create.tcl:27
msgid "Create New Branch"
msgstr "Créer nouvelle branche"

#: lib/branch_create.tcl:31 lib/choose_repository.tcl:375
msgid "Create"
msgstr "Créer"

#: lib/branch_create.tcl:40
msgid "Branch Name"
msgstr "Nom de branche"

#: lib/branch_create.tcl:43
msgid "Name:"
msgstr "Nom :"

#: lib/branch_create.tcl:58
msgid "Match Tracking Branch Name"
msgstr "Trouver nom de branche de suivi"

#: lib/branch_create.tcl:66
msgid "Starting Revision"
msgstr "Début de révision"

#: lib/branch_create.tcl:72
msgid "Update Existing Branch:"
msgstr "Mettre à jour branche existante :"

#: lib/branch_create.tcl:75
msgid "No"
msgstr "Non"

#: lib/branch_create.tcl:80
msgid "Fast Forward Only"
msgstr "Avance rapide seulement"

#: lib/branch_create.tcl:85 lib/checkout_op.tcl:514
msgid "Reset"
msgstr "Réinitialiser"

#: lib/branch_create.tcl:97
msgid "Checkout After Creation"
msgstr "Emprunt après création"

#: lib/branch_create.tcl:131
msgid "Please select a tracking branch."
msgstr "Merci de choisir une branche de suivi"

#: lib/branch_create.tcl:140
#, tcl-format
msgid "Tracking branch %s is not a branch in the remote repository."
msgstr "La branche de suivi %s n'est pas une branche dans le référentiel distant."

#: lib/branch_create.tcl:153 lib/branch_rename.tcl:86
msgid "Please supply a branch name."
msgstr "Merci de fournir un nom de branche."

#: lib/branch_create.tcl:164 lib/branch_rename.tcl:106
#, tcl-format
msgid "'%s' is not an acceptable branch name."
msgstr "'%s' n'est pas un nom de branche acceptable."

#: lib/branch_delete.tcl:15
msgid "Delete Branch"
msgstr "Supprimer branche"

#: lib/branch_delete.tcl:20
msgid "Delete Local Branch"
msgstr "Supprimer branche locale"

#: lib/branch_delete.tcl:37
msgid "Local Branches"
msgstr "Branches locales"

#: lib/branch_delete.tcl:52
msgid "Delete Only If Merged Into"
msgstr "Supprimer ssi fusion dedans"

#: lib/branch_delete.tcl:54
msgid "Always (Do not perform merge test.)"
msgstr "Toujours (Ne pas faire de test de fusion.)"

#: lib/branch_delete.tcl:103
#, tcl-format
msgid "The following branches are not completely merged into %s:"
msgstr "Les branches suivantes ne sont pas complètement fusionnées dans %s :"

#: lib/branch_delete.tcl:115
msgid ""
"Recovering deleted branches is difficult. \n"
"\n"
" Delete the selected branches?"
msgstr ""
"Récupérer des branches supprimées est difficile.\n"
"\n"
"Supprimer les branches sélectionnées ?"

#: lib/branch_delete.tcl:141
#, tcl-format
msgid ""
"Failed to delete branches:\n"
"%s"
msgstr ""
"La suppression des branches suivantes a échouée :\n"
"%s"

#: lib/branch_rename.tcl:14 lib/branch_rename.tcl:22
msgid "Rename Branch"
msgstr "Renommer branche"

#: lib/branch_rename.tcl:26
msgid "Rename"
msgstr "Renommer"

#: lib/branch_rename.tcl:36
msgid "Branch:"
msgstr "Branche :"

#: lib/branch_rename.tcl:39
msgid "New Name:"
msgstr "Nouveau nom :"

#: lib/branch_rename.tcl:75
msgid "Please select a branch to rename."
msgstr "Merci de sélectionner une branche à renommer."

#: lib/branch_rename.tcl:96 lib/checkout_op.tcl:179
#, tcl-format
msgid "Branch '%s' already exists."
msgstr "La branche '%s' existe déjà."

#: lib/branch_rename.tcl:117
#, tcl-format
msgid "Failed to rename '%s'."
msgstr "Le renommage de '%s' a échoué."

#: lib/browser.tcl:17
msgid "Starting..."
msgstr "Lancement..."

#: lib/browser.tcl:26
msgid "File Browser"
msgstr "Visionneur de fichier"

#: lib/browser.tcl:125 lib/browser.tcl:142
#, tcl-format
msgid "Loading %s..."
msgstr "Chargement de %s..."

#: lib/browser.tcl:186
msgid "[Up To Parent]"
msgstr "[Jusqu'au parent]"

#: lib/browser.tcl:266 lib/browser.tcl:272
msgid "Browse Branch Files"
msgstr "Visionner fichiers de branches"

#: lib/browser.tcl:277 lib/choose_repository.tcl:391
#: lib/choose_repository.tcl:482 lib/choose_repository.tcl:492
#: lib/choose_repository.tcl:989
msgid "Browse"
msgstr "Visionner"

#: lib/checkout_op.tcl:79
#, tcl-format
msgid "Fetching %s from %s"
msgstr "Récupération de %s à partir de %s"

#: lib/checkout_op.tcl:127
#, tcl-format
msgid "fatal: Cannot resolve %s"
msgstr "Erreur fatale : Impossible de résoudre %s"

#: lib/checkout_op.tcl:140 lib/console.tcl:79 lib/database.tcl:31
msgid "Close"
msgstr "Fermer"

#: lib/checkout_op.tcl:169
#, tcl-format
msgid "Branch '%s' does not exist."
msgstr "La branche '%s' n'existe pas."

#: lib/checkout_op.tcl:206
#, tcl-format
msgid ""
"Branch '%s' already exists.\n"
"\n"
"It cannot fast-forward to %s.\n"
"A merge is required."
msgstr ""
"La branche '%s' existe déjà.\n"
"\n"
"Impossible d'avancer rapidement à %s.\n"
"Une fusion est nécessaire."

#: lib/checkout_op.tcl:220
#, tcl-format
msgid "Merge strategy '%s' not supported."
msgstr "La stratégie de fusion '%s' n'est pas supportée."

#: lib/checkout_op.tcl:239
#, tcl-format
msgid "Failed to update '%s'."
msgstr "La mise à jour de '%s' a échouée."

#: lib/checkout_op.tcl:251
msgid "Staging area (index) is already locked."
msgstr "L'espace de pré-commit ('index' ou 'staging') est déjà vérouillé."

#: lib/checkout_op.tcl:266
msgid ""
"Last scanned state does not match repository state.\n"
"\n"
"Another Git program has modified this repository since the last scan.  A "
"rescan must be performed before the current branch can be changed.\n"
"\n"
"The rescan will be automatically started now.\n"
msgstr ""
"L'état lors de la dernière synchronisation ne correspond plus à l'état du référentiel.\n"
"\n"
"Un autre programme Git a modifié ce référentiel depuis la dernière synchronisation. Une resynchronisation doit être effectuée avant de pouvoir modifier la branche courante.\n"
"\n"
"Cela va être fait tout de suite automatiquement.\n"

#: lib/checkout_op.tcl:322
#, tcl-format
msgid "Updating working directory to '%s'..."
msgstr "Mise à jour du répertoire courant avec '%s'..."

#: lib/checkout_op.tcl:353
#, tcl-format
msgid "Aborted checkout of '%s' (file level merging is required)."
msgstr "Emprunt de '%s' abandonné. (Il est nécessaire de fusionner des fichiers.)"

#: lib/checkout_op.tcl:354
msgid "File level merge required."
msgstr "Il est nécessaire de fusionner des fichiers."

#: lib/checkout_op.tcl:358
#, tcl-format
msgid "Staying on branch '%s'."
msgstr "Le répertoire de travail reste sur la branche '%s'."

#: lib/checkout_op.tcl:429
msgid ""
"You are no longer on a local branch.\n"
"\n"
"If you wanted to be on a branch, create one now starting from 'This Detached "
"Checkout'."
msgstr ""
"Vous n'êtes plus ur une branche locale.\n"
"\n"
"Si vous vouliez être sur une branche, créez en une maintenant en partant de 'Cet emprunt détaché'."

#: lib/checkout_op.tcl:446
#, tcl-format
msgid "Checked out '%s'."
msgstr "'%s' emprunté."

#: lib/checkout_op.tcl:478
#, tcl-format
msgid "Resetting '%s' to '%s' will lose the following commits:"
msgstr "Réinitialiser '%s' à '%s' va faire perdre les commits suivants :"

#: lib/checkout_op.tcl:500
msgid "Recovering lost commits may not be easy."
msgstr "Récupérer les commits perdus ne sera peut être pas facile."

#: lib/checkout_op.tcl:505
#, tcl-format
msgid "Reset '%s'?"
msgstr "Réinitialiser '%s' ?"

#: lib/checkout_op.tcl:510 lib/merge.tcl:164
msgid "Visualize"
msgstr "Visualiser"

#: lib/checkout_op.tcl:578
#, tcl-format
msgid ""
"Failed to set current branch.\n"
"\n"
"This working directory is only partially switched.  We successfully updated "
"your files, but failed to update an internal Git file.\n"
"\n"
"This should not have occurred.  %s will now close and give up."
msgstr ""
"Le changement de la branche courante a échoué.\n"
"\n"
"Le répertoire courant n'est que partiellement modifié. Les fichiers ont été mis à jour avec succès, mais la mise à jour d'un fichier interne à Git a échouée.\n"
"\n"
"Cela n'aurait pas du se produire. %s va abandonner et se terminer."

#: lib/choose_font.tcl:39
msgid "Select"
msgstr "Sélectionner"

#: lib/choose_font.tcl:53
msgid "Font Family"
msgstr "Famille de fonte"

#: lib/choose_font.tcl:73
msgid "Font Size"
msgstr "Taille de fonte"

#: lib/choose_font.tcl:90
msgid "Font Example"
msgstr "Exemple de fonte"

#: lib/choose_font.tcl:101
msgid ""
"This is example text.\n"
"If you like this text, it can be your font."
msgstr ""
"C'est un texte d'exemple.\n"
"Si vous aimez ce texte, vous pouvez choisir cette fonte."

#: lib/choose_repository.tcl:27
msgid "Git Gui"
msgstr "Git Gui"

#: lib/choose_repository.tcl:80 lib/choose_repository.tcl:380
msgid "Create New Repository"
msgstr "Créer nouveau référentiel"

#: lib/choose_repository.tcl:86
msgid "New..."
msgstr "Nouveau..."

#: lib/choose_repository.tcl:93 lib/choose_repository.tcl:468
msgid "Clone Existing Repository"
msgstr "Cloner référentiel existant"

#: lib/choose_repository.tcl:99
msgid "Clone..."
msgstr "Cloner..."

#: lib/choose_repository.tcl:106 lib/choose_repository.tcl:978
msgid "Open Existing Repository"
msgstr "Ouvrir référentiel existant"

#: lib/choose_repository.tcl:112
msgid "Open..."
msgstr "Ouvrir..."

#: lib/choose_repository.tcl:125
msgid "Recent Repositories"
msgstr "Référentiels récents"

#: lib/choose_repository.tcl:131
msgid "Open Recent Repository:"
msgstr "Ouvrir référentiel récent :"

#: lib/choose_repository.tcl:294
#, tcl-format
msgid "Location %s already exists."
msgstr "L'emplacement %s existe déjà."

#: lib/choose_repository.tcl:300 lib/choose_repository.tcl:307
#: lib/choose_repository.tcl:314
#, tcl-format
msgid "Failed to create repository %s:"
msgstr "La création du référentiel %s a échouée :"

#: lib/choose_repository.tcl:385 lib/choose_repository.tcl:486
msgid "Directory:"
msgstr "Répertoire :"

#: lib/choose_repository.tcl:415 lib/choose_repository.tcl:544
#: lib/choose_repository.tcl:1013
msgid "Git Repository"
msgstr "Référentiel Git"

#: lib/choose_repository.tcl:430 lib/choose_repository.tcl:437
#, tcl-format
msgid "Directory %s already exists."
msgstr "Le répertoire %s existe déjà."

#: lib/choose_repository.tcl:442
#, tcl-format
msgid "File %s already exists."
msgstr "Le fichier %s existe déjà."

#: lib/choose_repository.tcl:463
msgid "Clone"
msgstr "Cloner"

#: lib/choose_repository.tcl:476
msgid "URL:"
msgstr "URL :"

#: lib/choose_repository.tcl:496
msgid "Clone Type:"
msgstr "Type de clonage :"

#: lib/choose_repository.tcl:502
msgid "Standard (Fast, Semi-Redundant, Hardlinks)"
msgstr "Standard (rapide, semi-redondant, liens durs)"

#: lib/choose_repository.tcl:508
msgid "Full Copy (Slower, Redundant Backup)"
msgstr "Copy complète (plus lent, sauvegarde redondante)"

#: lib/choose_repository.tcl:514
msgid "Shared (Fastest, Not Recommended, No Backup)"
msgstr "Partagé (le plus rapide, non recommandé, pas de sauvegarde)"

#: lib/choose_repository.tcl:550 lib/choose_repository.tcl:597
#: lib/choose_repository.tcl:738 lib/choose_repository.tcl:808
#: lib/choose_repository.tcl:1019 lib/choose_repository.tcl:1027
#, tcl-format
msgid "Not a Git repository: %s"
msgstr "'%s' n'est pas un référentiel Git."

#: lib/choose_repository.tcl:586
msgid "Standard only available for local repository."
msgstr "Standard n'est disponible que pour un référentiel local."

#: lib/choose_repository.tcl:590
msgid "Shared only available for local repository."
msgstr "Partagé n'est disponible que pour un référentiel local."

#: lib/choose_repository.tcl:617
msgid "Failed to configure origin"
msgstr "La configuration de l'origine a échouée."

#: lib/choose_repository.tcl:629
msgid "Counting objects"
msgstr "Comptage des objets"

#: lib/choose_repository.tcl:630
msgid "buckets"
msgstr "paniers"

#: lib/choose_repository.tcl:654
#, tcl-format
msgid "Unable to copy objects/info/alternates: %s"
msgstr "Impossible de copier 'objects/info/alternates' : %s"

#: lib/choose_repository.tcl:690
#, tcl-format
msgid "Nothing to clone from %s."
msgstr "Il n'y a rien à cloner depuis %s."

#: lib/choose_repository.tcl:692 lib/choose_repository.tcl:906
#: lib/choose_repository.tcl:918
msgid "The 'master' branch has not been initialized."
msgstr "Cette branche 'master' n'a pas été initialisée."

#: lib/choose_repository.tcl:705
msgid "Hardlinks are unavailable.  Falling back to copying."
msgstr "Les liens durs ne sont pas disponibles. On se résoud à copier."

#: lib/choose_repository.tcl:717
#, tcl-format
msgid "Cloning from %s"
msgstr "Clonage depuis %s"

#: lib/choose_repository.tcl:748
msgid "Copying objects"
msgstr "Copie des objets"

#: lib/choose_repository.tcl:749
msgid "KiB"
msgstr "KiB"

#: lib/choose_repository.tcl:773
#, tcl-format
msgid "Unable to copy object: %s"
msgstr "Impossible de copier l'objet : %s"

#: lib/choose_repository.tcl:783
msgid "Linking objects"
msgstr "Liaison des objets"

#: lib/choose_repository.tcl:784
msgid "objects"
msgstr "objets"

#: lib/choose_repository.tcl:792
#, tcl-format
msgid "Unable to hardlink object: %s"
msgstr "Impossible créer un lien dur pour l'objet : %s"

#: lib/choose_repository.tcl:847
msgid "Cannot fetch branches and objects.  See console output for details."
msgstr "Impossible de récupérer les branches et objets. Voir la sortie console pour plus de détails."

#: lib/choose_repository.tcl:858
msgid "Cannot fetch tags.  See console output for details."
msgstr "Impossible de récupérer les marques. Voir la sortie console pour plus de détails."

#: lib/choose_repository.tcl:882
msgid "Cannot determine HEAD.  See console output for details."
msgstr "Impossible de déterminer HEAD. Voir la sortie console pour plus de détails."

#: lib/choose_repository.tcl:891
#, tcl-format
msgid "Unable to cleanup %s"
msgstr "Impossible de nettoyer %s"

#: lib/choose_repository.tcl:897
msgid "Clone failed."
msgstr "Le clonage a échoué."

#: lib/choose_repository.tcl:904
msgid "No default branch obtained."
msgstr "Aucune branche par défaut n'a été obtenue."

#: lib/choose_repository.tcl:915
#, tcl-format
msgid "Cannot resolve %s as a commit."
msgstr "Impossible de résoudre %s comme commit."

#: lib/choose_repository.tcl:927
msgid "Creating working directory"
msgstr "Création du répertoire de travail"

#: lib/choose_repository.tcl:928 lib/index.tcl:65 lib/index.tcl:127
#: lib/index.tcl:193
msgid "files"
msgstr "fichiers"

#: lib/choose_repository.tcl:957
msgid "Initial file checkout failed."
msgstr "L'emprunt initial de fichier a échoué."

#: lib/choose_repository.tcl:973
msgid "Open"
msgstr "Ouvrir"

#: lib/choose_repository.tcl:983
msgid "Repository:"
msgstr "Référentiel :"

#: lib/choose_repository.tcl:1033
#, tcl-format
msgid "Failed to open repository %s:"
msgstr "Impossible d'ouvrir le référentiel %s :"

#: lib/choose_rev.tcl:53
msgid "This Detached Checkout"
msgstr "Cet emprunt détaché"

#: lib/choose_rev.tcl:60
msgid "Revision Expression:"
msgstr "Expression de révision :"

#: lib/choose_rev.tcl:74
msgid "Local Branch"
msgstr "Branche locale"

#: lib/choose_rev.tcl:79
msgid "Tracking Branch"
msgstr "Suivi de branche"

#: lib/choose_rev.tcl:84 lib/choose_rev.tcl:537
msgid "Tag"
msgstr "Marque"

#: lib/choose_rev.tcl:317
#, tcl-format
msgid "Invalid revision: %s"
msgstr "Révision invalide : %s"

#: lib/choose_rev.tcl:338
msgid "No revision selected."
msgstr "Pas de révision selectionnée."

#: lib/choose_rev.tcl:346
msgid "Revision expression is empty."
msgstr "L'expression de révision est vide."

#: lib/choose_rev.tcl:530
msgid "Updated"
msgstr "Misa à jour"

#: lib/choose_rev.tcl:558
msgid "URL"
msgstr "URL"

#: lib/commit.tcl:9
msgid ""
"There is nothing to amend.\n"
"\n"
"You are about to create the initial commit.  There is no commit before this "
"to amend.\n"
msgstr ""
"Il n'y a rien à corriger.\n"
"\n"
"Vous allez créer le commit initial. Il n'y a pas de commit avant celui-ci à corriger.\n"

#: lib/commit.tcl:18
msgid ""
"Cannot amend while merging.\n"
"\n"
"You are currently in the middle of a merge that has not been fully "
"completed.  You cannot amend the prior commit unless you first abort the "
"current merge activity.\n"
msgstr ""
"Impossible de corriger pendant une fusion.\n"
"\n"
"Vous êtes actuellement au milieu d'une fusion qui n'a pas été completement terminée. Vous ne pouvez pas corriger le commit précédant sauf si vous abandonnez la fusion courante.\n"

#: lib/commit.tcl:49
msgid "Error loading commit data for amend:"
msgstr "Erreur lors du chargement des données de commit pour correction :"

#: lib/commit.tcl:76
msgid "Unable to obtain your identity:"
msgstr "Impossible d'obtenir votre identité :"

#: lib/commit.tcl:81
msgid "Invalid GIT_COMMITTER_IDENT:"
msgstr "GIT_COMMITTER_IDENT invalide :"

#: lib/commit.tcl:133
msgid ""
"Last scanned state does not match repository state.\n"
"\n"
"Another Git program has modified this repository since the last scan.  A "
"rescan must be performed before another commit can be created.\n"
"\n"
"The rescan will be automatically started now.\n"
msgstr ""
"L'état lors de la dernière synchronisation ne correspond plus à l'état du référentiel.\n"
"\n"
"Un autre programme Git a modifié ce référentiel depuis la dernière synchronisation. Une resynshronisation doit être effectuée avant de pouvoir créer un nouveau commit.\n"
"\n"
"Cela va être fait tout de suite automatiquement.\n"

#: lib/commit.tcl:154
#, tcl-format
msgid ""
"Unmerged files cannot be committed.\n"
"\n"
"File %s has merge conflicts.  You must resolve them and stage the file "
"before committing.\n"
msgstr ""
"Des fichiers non fusionnés ne peuvent être commités.\n"
"\n"
"Le fichier %s a des conflicts de fusion. Vous devez les résoudre et pré-commiter le fichier avant de pouvoir commiter.\n"

#: lib/commit.tcl:162
#, tcl-format
msgid ""
"Unknown file state %s detected.\n"
"\n"
"File %s cannot be committed by this program.\n"
msgstr ""
"Un état de fichier inconnu %s a été détecté.\n"
"\n"
"Le fichier %s ne peut pas être commité par ce programme.\n"

#: lib/commit.tcl:170
msgid ""
"No changes to commit.\n"
"\n"
"You must stage at least 1 file before you can commit.\n"
msgstr ""
"Pas de modification à commiter.\n"
"\n"
"Vous devez pré-commiter au moins 1 fichier avant de pouvoir commiter.\n"

#: lib/commit.tcl:183
msgid ""
"Please supply a commit message.\n"
"\n"
"A good commit message has the following format:\n"
"\n"
"- First line: Describe in one sentence what you did.\n"
"- Second line: Blank\n"
"- Remaining lines: Describe why this change is good.\n"
msgstr ""
"Merci de fournir un message de commit.\n"
"\n"
"Un bon message de commit a le format suivant :\n"
"\n"
"- Première ligne : décrire en une phrase ce que vous avez fait.\n"
"- Deuxième ligne : rien.\n"
"- Lignes suivantes : Décrire pourquoi ces modifications sont bonnes.\n"

#: lib/commit.tcl:257
msgid "write-tree failed:"
msgstr "write-tree a échoué :"

#: lib/commit.tcl:275
#, tcl-format
msgid "Commit %s appears to be corrupt"
msgstr "Le commit %s semble être corrompu"

#: lib/commit.tcl:279
msgid ""
"No changes to commit.\n"
"\n"
"No files were modified by this commit and it was not a merge commit.\n"
"\n"
"A rescan will be automatically started now.\n"
msgstr ""
"Pas de modification à commiter.\n"
"\n"
"Aucun fichier n'a été modifié par ce commit et il ne s'agit pas d'un commit de fusion.\n"
"\n"
"Une resynchronisation va être lancée tout de suite automatiquement.\n"

#: lib/commit.tcl:286
msgid "No changes to commit."
msgstr "Pas de modifications à commiter."

#: lib/commit.tcl:303
#, tcl-format
msgid "warning: Tcl does not support encoding '%s'."
msgstr "attention : Tcl ne supporte pas l'encodage '%s'."

#: lib/commit.tcl:317
msgid "commit-tree failed:"
msgstr "commit-tree a échoué :"

#: lib/commit.tcl:339
msgid "update-ref failed:"
msgstr "update-ref a échoué"

#: lib/commit.tcl:430
#, tcl-format
msgid "Created commit %s: %s"
msgstr "Commit créé %s : %s"

#: lib/console.tcl:57
msgid "Working... please wait..."
msgstr "Travail en cours... merci de patienter..."

#: lib/console.tcl:183
msgid "Success"
msgstr "Succès"

#: lib/console.tcl:196
msgid "Error: Command Failed"
msgstr "Erreur : échec de la commande"

#: lib/database.tcl:43
msgid "Number of loose objects"
msgstr "Nombre d'objets en fichier particulier"

#: lib/database.tcl:44
msgid "Disk space used by loose objects"
msgstr "Espace disque utilisé par les fichiers particuliers"

#: lib/database.tcl:45
msgid "Number of packed objects"
msgstr "Nombre d'objets empaquetés"

#: lib/database.tcl:46
msgid "Number of packs"
msgstr "Nombre de paquets d'objets"

#: lib/database.tcl:47
msgid "Disk space used by packed objects"
msgstr "Espace disque utilisé par les objets empaquetés"

#: lib/database.tcl:48
msgid "Packed objects waiting for pruning"
msgstr "Objets empaquetés attendant d'être supprimés"

#: lib/database.tcl:49
msgid "Garbage files"
msgstr "Fichiers poubelle"

#: lib/database.tcl:72ets
msgid "Compressing the object database"
msgstr "Compression de la base des objets"

#: lib/database.tcl:83
msgid "Verifying the object database with fsck-objects"
msgstr "Vérification de la base des objets avec fsck-objects"

#: lib/database.tcl:108
#, tcl-format
msgid ""
"This repository currently has approximately %i loose objects.\n"
"\n"
"To maintain optimal performance it is strongly recommended that you compress "
"the database when more than %i loose objects exist.\n"
"\n"
"Compress the database now?"
msgstr ""
"Ce référentiel comprend actuellement environ %i objets ayant leur fichier particulier.\n"
"\n"
"Pour conserver une performance optimale, il est fortement recommandé de comprimer la base quand plus de %i objets ayant leur fichier particulier existent.\n"
"\n"
"Comprimer la base maintenant ?"

#: lib/date.tcl:25
#, tcl-format
msgid "Invalid date from Git: %s"
msgstr "Date invalide de Git : %s"

#: lib/diff.tcl:42
#, tcl-format
msgid ""
"No differences detected.\n"
"\n"
"%s has no changes.\n"
"\n"
"The modification date of this file was updated by another application, but "
"the content within the file was not changed.\n"
"\n"
"A rescan will be automatically started to find other files which may have "
"the same state."
msgstr ""
"Aucune différence détectée.\n"
"\n"
"%s ne comporte aucune modification.\n"
"\n"
"La date de modification de ce fichier a été mise à jour par une autre application, mais le contenu du fichier n'a pas changé.\n"
"\n"
"Une resynchronisation va être lancée automatiquement pour trouver d'autres fichiers qui pourraient se trouver dans le même état."

#: lib/diff.tcl:81
#, tcl-format
msgid "Loading diff of %s..."
msgstr "Chargement des différences de %s..."

#: lib/diff.tcl:114 lib/diff.tcl:184
#, tcl-format
msgid "Unable to display %s"
msgstr "Impossible d'afficher %s"

#: lib/diff.tcl:115
msgid "Error loading file:"
msgstr "Erreur lors du chargement du fichier :"

#: lib/diff.tcl:122
msgid "Git Repository (subproject)"
msgstr "Référentiel Git (sous projet)"

#: lib/diff.tcl:134
msgid "* Binary file (not showing content)."
msgstr "* Fichier binaire (pas d'apperçu du contenu)."

#: lib/diff.tcl:185
msgid "Error loading diff:"
msgstr "Erreur lors du chargement des différences :"

#: lib/diff.tcl:302
msgid "Failed to unstage selected hunk."
msgstr "La suppression dans le pré-commit de la section sélectionnée a échouée."

#: lib/diff.tcl:309
msgid "Failed to stage selected hunk."
msgstr "Le pré-commit de la section sélectionnée a échoué."

#: lib/error.tcl:12 lib/error.tcl:102
msgid "error"
msgstr "erreur"

#: lib/error.tcl:28
msgid "warning"
msgstr "attention"

#: lib/error.tcl:81
msgid "You must correct the above errors before committing."
msgstr "Vous devez corriger les erreurs suivantes avant de pouvoir commiter."

#: lib/index.tcl:6
msgid "Unable to unlock the index."
msgstr "Impossible de dévérouiller le pré-commit."

#: lib/index.tcl:15
msgid "Index Error"
msgstr "Erreur de pré-commit"

#: lib/index.tcl:21
msgid ""
"Updating the Git index failed.  A rescan will be automatically started to "
"resynchronize git-gui."
msgstr "Le pré-commit a échoué. Une resynchronisation va être lancée automatiquement."

#: lib/index.tcl:27
msgid "Continue"
msgstr "Continuer"

#: lib/index.tcl:31
msgid "Unlock Index"
msgstr "Dévérouiller le pré-commit"

#: lib/index.tcl:282
#, tcl-format
msgid "Unstaging %s from commit"
msgstr "Supprimer %s du commit"

#: lib/index.tcl:326
#, tcl-format
msgid "Adding %s"
msgstr "Ajouter %s"

#: lib/index.tcl:381
#, tcl-format
msgid "Revert changes in file %s?"
msgstr "Inverser les modifications dans le fichier %s ? "

#: lib/index.tcl:383
#, tcl-format
msgid "Revert changes in these %i files?"
msgstr "Inverser les modifications dans ces %i fichiers ?"

#: lib/index.tcl:389
msgid "Any unstaged changes will be permanently lost by the revert."
msgstr "Toutes les modifications non pré-commitées seront définitivement perdues lors de l'inversion."

#: lib/index.tcl:392
msgid "Do Nothing"
msgstr "Ne rien faire"

#: lib/merge.tcl:13
msgid ""
"Cannot merge while amending.\n"
"\n"
"You must finish amending this commit before starting any type of merge.\n"
msgstr ""
"Impossible de fucionner pendant une correction.\n"
"\n"
"Vous devez finir de corriger ce commit avant de lancer une quelconque fusion.\n"

#: lib/merge.tcl:27
msgid ""
"Last scanned state does not match repository state.\n"
"\n"
"Another Git program has modified this repository since the last scan.  A "
"rescan must be performed before a merge can be performed.\n"
"\n"
"The rescan will be automatically started now.\n"
msgstr ""
"L'état lors de la dernière synchronisation ne correspond plus à l'état du référentiel.\n"
"\n"
"Un autre programme Git a modifié ce référentiel depuis la dernière synchronisation. Une resynchronisation doit être effectuée avant de pouvoir fusionner de nouveau.\n"
"\n"
"Cela va être fait tout de suite automatiquement\n"

#: lib/merge.tcl:44
#, tcl-format
msgid ""
"You are in the middle of a conflicted merge.\n"
"\n"
"File %s has merge conflicts.\n"
"\n"
"You must resolve them, stage the file, and commit to complete the current "
"merge.  Only then can you begin another merge.\n"
msgstr ""
"Vous êtes au milieu d'une fusion conflictuelle.\n"
"\n"
"Le fichier %s a des conflicts de fusion.\n"
"\n"
"Vous devez les résoudre, puis pré-commiter le fichier, et enfin commiter pour terminer la fusion courante. Seulementà ce moment là, il sera possible d'effectuer une nouvelle fusion.\n"

#: lib/merge.tcl:54
#, tcl-format
msgid ""
"You are in the middle of a change.\n"
"\n"
"File %s is modified.\n"
"\n"
"You should complete the current commit before starting a merge.  Doing so "
"will help you abort a failed merge, should the need arise.\n"
msgstr ""
"Vous êtes au milieu d'une modification.\n"
"\n"
"Le fichier %s est modifié.\n"
"\n"
"Vous devriez terminer le commit courant avant de lancer une fusion. En faisait comme cela, vous éviterez de devoir éventuellement abandonner une fusion ayant échouée.\n"

#: lib/merge.tcl:106
#, tcl-format
msgid "%s of %s"
msgstr "%s de %s"

#: lib/merge.tcl:119
#, tcl-format
msgid "Merging %s and %s"
msgstr "Fusion de %s et %s"

#: lib/merge.tcl:131
msgid "Merge completed successfully."
msgstr "La fusion s'est faite avec succès."

#: lib/merge.tcl:133
msgid "Merge failed.  Conflict resolution is required."
msgstr "La fusion a echouée. Il est nécessaire de résoudre les conflicts."

#: lib/merge.tcl:158
#, tcl-format
msgid "Merge Into %s"
msgstr "Fusion dans %s"

#: lib/merge.tcl:177
msgid "Revision To Merge"
msgstr "Révision à fusionner"

#: lib/merge.tcl:212
msgid ""
"Cannot abort while amending.\n"
"\n"
"You must finish amending this commit.\n"
msgstr ""
"Impossible d'abandonner en cours de correction.\n"
"\n"
"Vous devez finir de corriger ce commit.\n"

#: lib/merge.tcl:222
msgid ""
"Abort merge?\n"
"\n"
"Aborting the current merge will cause *ALL* uncommitted changes to be lost.\n"
"\n"
"Continue with aborting the current merge?"
msgstr ""
"Abandonner la fusion ?\n"
"\n"
"Abandonner la fusion courante entrainera la perte de TOUTES les modifications non commitées.\n"
"\n"
"Abandonner quand même la fusion courante ?"

#: lib/merge.tcl:228
msgid ""
"Reset changes?\n"
"\n"
"Resetting the changes will cause *ALL* uncommitted changes to be lost.\n"
"\n"
"Continue with resetting the current changes?"
msgstr ""
"Réinitialiser les modifications ?\n"
"\n"
"Réinitialiser les modifications va faire perdre TOUTES les modifications non commitées.\n"
"\n"
"Réinitialiser quand même les modifications courantes ?"

#: lib/merge.tcl:239
msgid "Aborting"
msgstr "Abandon"

#: lib/merge.tcl:266
msgid "Abort failed."
msgstr "L'abandon a échoué."

#: lib/merge.tcl:268
msgid "Abort completed.  Ready."
msgstr "Abandon teminé. Prêt."

#: lib/option.tcl:82
msgid "Restore Defaults"
msgstr "Remettre les valeurs par défaut"

#: lib/option.tcl:86
msgid "Save"
msgstr "Sauvegarder"

#: lib/option.tcl:96
#, tcl-format
msgid "%s Repository"
msgstr "Référentiel de %s"

#: lib/option.tcl:97
msgid "Global (All Repositories)"
msgstr "Globales (tous les référentiels)"

#: lib/option.tcl:103
msgid "User Name"
msgstr "Nom d'utilisateur"

#: lib/option.tcl:104
msgid "Email Address"
msgstr "Adresse email"

#: lib/option.tcl:106
msgid "Summarize Merge Commits"
msgstr "Résumer les commits de fusion"

#: lib/option.tcl:107
msgid "Merge Verbosity"
msgstr "Fusion bavarde"

#: lib/option.tcl:108
msgid "Show Diffstat After Merge"
msgstr "Montrer statistiques de diff après fusion"

#: lib/option.tcl:110
msgid "Trust File Modification Timestamps"
msgstr "Faire confiance aux dates de modification de fichiers "

#: lib/option.tcl:111
msgid "Prune Tracking Branches During Fetch"
msgstr "Nettoyer les branches de suivi pendant la récupération"

#: lib/option.tcl:112
msgid "Match Tracking Branches"
msgstr "Faire correspondre les branches de suivi"

#: lib/option.tcl:113
msgid "Number of Diff Context Lines"
msgstr "Nombre de lignes de contexte dans les diffs"

#: lib/option.tcl:114
msgid "New Branch Name Template"
msgstr "Nouveau modèle de nom de branche"

#: lib/option.tcl:176
msgid "Change Font"
msgstr "Modifier les fontes"

#: lib/option.tcl:180
#, tcl-format
msgid "Choose %s"
msgstr "Choisir %s"

#: lib/option.tcl:186
msgid "pt."
msgstr "pt."

#: lib/option.tcl:200
msgid "Preferences"
msgstr "Préférences"

#: lib/option.tcl:235
msgid "Failed to completely save options:"
msgstr "La sauvegarde complète des options a échouée :"

#: lib/remote_branch_delete.tcl:29 lib/remote_branch_delete.tcl:34
msgid "Delete Remote Branch"
msgstr "Supprimer branche distante"

#: lib/remote_branch_delete.tcl:47
msgid "From Repository"
msgstr "Référentiel"

#: lib/remote_branch_delete.tcl:50 lib/transport.tcl:123
msgid "Remote:"
msgstr "Branche distante :"

#: lib/remote_branch_delete.tcl:66 lib/transport.tcl:138
msgid "Arbitrary URL:"
msgstr "URL arbitraire :"

#: lib/remote_branch_delete.tcl:84
msgid "Branches"
msgstr "Branches"

#: lib/remote_branch_delete.tcl:109
msgid "Delete Only If"
msgstr "Supprimer seulement si"

#: lib/remote_branch_delete.tcl:111
msgid "Merged Into:"
msgstr "Fusionné dans :"

#: lib/remote_branch_delete.tcl:119
msgid "Always (Do not perform merge checks)"
msgstr "Toujours (ne pas vérifier les fusions)"

#: lib/remote_branch_delete.tcl:152
msgid "A branch is required for 'Merged Into'."
msgstr "Une branche est nécessaire pour 'Fusionné dans'."

#: lib/remote_branch_delete.tcl:184
#, tcl-format
msgid ""
"The following branches are not completely merged into %s:\n"
"\n"
" - %s"
msgstr ""
"Les branches suivantes ne sont pas complètement fusionnées dans %s :\n"
"\n"
" - %s"

#: lib/remote_branch_delete.tcl:189
#, tcl-format
msgid ""
"One or more of the merge tests failed because you have not fetched the "
"necessary commits.  Try fetching from %s first."
msgstr "Une ou plusieurs des tests de fusion ont échoués parce que vous n'avez pas récupéré les commits nécessaires. Essayez de récupéré à partir de %s d'abord."

#: lib/remote_branch_delete.tcl:207
msgid "Please select one or more branches to delete."
msgstr "Merci de sélectionner une ou plusieurs branches à supprimer."

#: lib/remote_branch_delete.tcl:216
msgid ""
"Recovering deleted branches is difficult.\n"
"\n"
"Delete the selected branches?"
msgstr ""
"Récupérer des branches supprimées est difficile.\n"
"\n"
"Souhaitez vous supprimer les branches sélectionnées ?"

#: lib/remote_branch_delete.tcl:226
#, tcl-format
msgid "Deleting branches from %s"
msgstr "Supprimer les branches de %s"

#: lib/remote_branch_delete.tcl:286
msgid "No repository selected."
msgstr "Aucun référentiel n'est sélectionné."

#: lib/remote_branch_delete.tcl:291
#, tcl-format
msgid "Scanning %s..."
msgstr "Synchronisation de %s..."

#: lib/remote.tcl:165
msgid "Prune from"
msgstr "Nettoyer de"

#: lib/remote.tcl:170
msgid "Fetch from"
msgstr "Récupérer de"

#: lib/remote.tcl:213
msgid "Push to"
msgstr "Pousser vers"

#: lib/shortcut.tcl:20 lib/shortcut.tcl:61
msgid "Cannot write shortcut:"
msgstr "Impossible d'écrire le raccourcis :"

#: lib/shortcut.tcl:136
msgid "Cannot write icon:"
msgstr "Impossible d'écrire l'icône :"

#: lib/status_bar.tcl:83
#, tcl-format
msgid "%s ... %*i of %*i %s (%3i%%)"
msgstr "%s ... %*i de %*i %s (%3i%%)"

#: lib/transport.tcl:6
#, tcl-format
msgid "fetch %s"
msgstr "récupérer %s"

#: lib/transport.tcl:7
#, tcl-format
msgid "Fetching new changes from %s"
msgstr "Récupération des dernières modifications de %s"

#: lib/transport.tcl:18
#, tcl-format
msgid "remote prune %s"
msgstr "nettoyer à distance %s"

#: lib/transport.tcl:19
#, tcl-format
msgid "Pruning tracking branches deleted from %s"
msgstr "Nettoyer les branches de suivi supprimées de %s"

#: lib/transport.tcl:25 lib/transport.tcl:71
#, tcl-format
msgid "push %s"
msgstr "pousser %s"

#: lib/transport.tcl:26
#, tcl-format
msgid "Pushing changes to %s"
msgstr "Les modifications sont poussées vers %s"

#: lib/transport.tcl:72
#, tcl-format
msgid "Pushing %s %s to %s"
msgstr "Pousse %s %s vers %s"

#: lib/transport.tcl:89
msgid "Push Branches"
msgstr "Pousser branches"

#: lib/transport.tcl:103
msgid "Source Branches"
msgstr "Branches source"

#: lib/transport.tcl:120
msgid "Destination Repository"
msgstr "Référentiel de destination"

#: lib/transport.tcl:158
msgid "Transfer Options"
msgstr "Transférer options"

#: lib/transport.tcl:160
msgid "Force overwrite existing branch (may discard changes)"
msgstr "Forcer l'écrasement d'une branche existante (peut supprimer des modifications)"

#: lib/transport.tcl:164
msgid "Use thin pack (for slow network connections)"
msgstr "Utiliser des petits paquets (pour les connexions lentes)"

#: lib/transport.tcl:168
msgid "Include tags"
msgstr "Inclure les marques"


^ 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