diff options
-rw-r--r-- | Documentation/RelNotes-1.6.0.2.txt | 23 | ||||
-rw-r--r-- | Documentation/git-annotate.txt | 5 | ||||
-rw-r--r-- | builtin-blame.c | 9 | ||||
-rw-r--r-- | builtin-checkout.c | 29 | ||||
-rw-r--r-- | builtin-pack-objects.c | 34 | ||||
-rw-r--r-- | combine-diff.c | 16 | ||||
-rw-r--r-- | csum-file.c | 6 | ||||
-rw-r--r-- | diff.c | 9 | ||||
-rw-r--r-- | fast-import.c | 3 | ||||
-rwxr-xr-x | git-gui/git-gui.sh | 2 | ||||
-rw-r--r-- | git-gui/lib/diff.tcl | 20 | ||||
-rw-r--r-- | git-gui/lib/option.tcl | 2 | ||||
-rw-r--r-- | git-gui/po/fr.po | 784 | ||||
-rw-r--r-- | git-gui/po/po2msg.sh | 4 | ||||
-rwxr-xr-x | git-stash.sh | 3 | ||||
-rw-r--r-- | index-pack.c | 44 | ||||
-rw-r--r-- | pack-write.c | 78 | ||||
-rw-r--r-- | pack.h | 2 | ||||
-rwxr-xr-x | t/t4019-diff-wserror.sh | 12 | ||||
-rwxr-xr-x | t/t7201-co.sh | 22 | ||||
-rwxr-xr-x | t/t9400-git-cvsserver-server.sh | 13 |
21 files changed, 673 insertions, 447 deletions
diff --git a/Documentation/RelNotes-1.6.0.2.txt b/Documentation/RelNotes-1.6.0.2.txt index 686e60713b..6c5446bc07 100644 --- a/Documentation/RelNotes-1.6.0.2.txt +++ b/Documentation/RelNotes-1.6.0.2.txt @@ -18,19 +18,32 @@ Fixes since v1.6.0.1 with GIT_WORK_TREE environment settings. - * "git apply --unidiff-zero" incorrectly applied a -U0 patch that inserts a new line before the second line. +* "git blame -c" did not exactly work like "git annotate" when range + boundaries are involved. + * "git clone $there $here/" with extra trailing slashes after explicit local directory name $here did not work as expected. * "git diff --dirstat -M" did not add changes in subdirectories up correctly for renamed paths. +* "git diff --cumulative" did not imply "--dirstat". + * "git for-each-ref refs/heads/" did not work as expected. -* "git log --grep=pattern -i" did not ignore case. +* "git gui" allowed users to feed patch without any context to be applied. + +* "git gui" botched parsing "diff" output when a line that begins with two + dashes and a space gets removed or a line that begins with two pluses + and a space gets added. + +* "git gui" translation updates and i18n fixes. + +* "git log -i --grep=pattern" did not ignore case; neither "git log -E + --grep=pattern" triggered extended regexp. * "git log --pretty="%ad" --date=short" did not use short format when showing the timestamp. @@ -38,6 +51,9 @@ Fixes since v1.6.0.1 * Build procedure for "git shell" that used stub versions of some functions and globals was not understood by linkers on some platforms. +* "git stash" was fooled by a stat-dirty but otherwise unmodified paths + and refused to work until the user refreshed the index. + * "git verify-pack -v" did not work correctly when given more than one packfile. @@ -45,6 +61,7 @@ Also contains many documentation updates. -- exec >/var/tmp/1 -O=v1.6.0.1-49-g6a42cfe +O=v1.6.0.1-61-g1eff26c echo O=$(git describe maint) git shortlog --no-merges $O..maint + diff --git a/Documentation/git-annotate.txt b/Documentation/git-annotate.txt index 8b6b56a544..0aba022ba6 100644 --- a/Documentation/git-annotate.txt +++ b/Documentation/git-annotate.txt @@ -14,6 +14,11 @@ DESCRIPTION Annotates each line in the given file with information from the commit which introduced the line. Optionally annotate from a given revision. +The only difference between this command and linkgit:git-blame[1] is that +they use slightly different output formats, and this command exists only +for backward compatibility to support existing scripts, and provide more +familiar command name for people coming from other SCM systems. + OPTIONS ------- include::blame-options.txt[] diff --git a/builtin-blame.c b/builtin-blame.c index d2fc68c68a..9bc901c292 100644 --- a/builtin-blame.c +++ b/builtin-blame.c @@ -38,7 +38,6 @@ static int show_root; static int reverse; static int blank_boundary; static int incremental; -static int cmd_is_annotate; static int xdl_opts = XDF_NEED_MINIMAL; static struct string_list mailmap; @@ -1686,7 +1685,7 @@ static void emit_other(struct scoreboard *sb, struct blame_entry *ent, int opt) if (suspect->commit->object.flags & UNINTERESTING) { if (blank_boundary) memset(hex, ' ', length); - else if (!cmd_is_annotate) { + else if (!(opt & OUTPUT_ANNOTATE_COMPAT)) { length--; putchar('^'); } @@ -2317,8 +2316,7 @@ int cmd_blame(int argc, const char **argv, const char *prefix) }; struct parse_opt_ctx_t ctx; - - cmd_is_annotate = !strcmp(argv[0], "annotate"); + int cmd_is_annotate = !strcmp(argv[0], "annotate"); git_config(git_blame_config, NULL); init_revisions(&revs, NULL); @@ -2346,6 +2344,9 @@ int cmd_blame(int argc, const char **argv, const char *prefix) parse_done: argc = parse_options_end(&ctx); + if (cmd_is_annotate) + output_option |= OUTPUT_ANNOTATE_COMPAT; + if (DIFF_OPT_TST(&revs.diffopt, FIND_COPIES_HARDER)) opt |= (PICKAXE_BLAME_COPY | PICKAXE_BLAME_MOVE | PICKAXE_BLAME_COPY_HARDER); diff --git a/builtin-checkout.c b/builtin-checkout.c index f6f8f086de..8e77767b49 100644 --- a/builtin-checkout.c +++ b/builtin-checkout.c @@ -76,6 +76,15 @@ static int read_tree_some(struct tree *tree, const char **pathspec) return 0; } +static int skip_same_name(struct cache_entry *ce, int pos) +{ + while (++pos < active_nr && + !strcmp(active_cache[pos]->name, ce->name)) + ; /* skip */ + return pos; +} + + static int checkout_paths(struct tree *source_tree, const char **pathspec) { int pos; @@ -107,6 +116,20 @@ static int checkout_paths(struct tree *source_tree, const char **pathspec) if (report_path_error(ps_matched, pathspec, 0)) return 1; + /* Any unmerged paths? */ + for (pos = 0; pos < active_nr; pos++) { + struct cache_entry *ce = active_cache[pos]; + if (pathspec_match(pathspec, NULL, ce->name, 0)) { + if (!ce_stage(ce)) + continue; + errs = 1; + error("path '%s' is unmerged", ce->name); + pos = skip_same_name(ce, pos) - 1; + } + } + if (errs) + return 1; + /* Now we are committed to check them out */ memset(&state, 0, sizeof(state)); state.force = 1; @@ -114,7 +137,11 @@ static int checkout_paths(struct tree *source_tree, const char **pathspec) for (pos = 0; pos < active_nr; pos++) { struct cache_entry *ce = active_cache[pos]; if (pathspec_match(pathspec, NULL, ce->name, 0)) { - errs |= checkout_entry(ce, &state, NULL); + if (!ce_stage(ce)) { + errs |= checkout_entry(ce, &state, NULL); + continue; + } + pos = skip_same_name(ce, pos) - 1; } } diff --git a/builtin-pack-objects.c b/builtin-pack-objects.c index ef3befe57b..ba2cf00f5e 100644 --- a/builtin-pack-objects.c +++ b/builtin-pack-objects.c @@ -410,25 +410,22 @@ static unsigned long write_object(struct sha1file *f, return hdrlen + datalen; } -static off_t write_one(struct sha1file *f, +static int write_one(struct sha1file *f, struct object_entry *e, - off_t offset) + off_t *offset) { unsigned long size; /* offset is non zero if object is written already. */ if (e->idx.offset || e->preferred_base) - return offset; + return 1; /* if we are deltified, write out base object first. */ - if (e->delta) { - offset = write_one(f, e->delta, offset); - if (!offset) - return 0; - } + if (e->delta && !write_one(f, e->delta, offset)) + return 0; - e->idx.offset = offset; - size = write_object(f, e, offset); + e->idx.offset = *offset; + size = write_object(f, e, *offset); if (!size) { e->idx.offset = 0; return 0; @@ -436,9 +433,10 @@ static off_t write_one(struct sha1file *f, written_list[nr_written++] = &e->idx; /* make sure off_t is sufficiently large not to wrap */ - if (offset > offset + size) + if (*offset > *offset + size) die("pack too large for current definition of off_t"); - return offset + size; + *offset += size; + return 1; } /* forward declaration for write_pack_file */ @@ -448,7 +446,7 @@ static void write_pack_file(void) { uint32_t i = 0, j; struct sha1file *f; - off_t offset, offset_one, last_obj_offset = 0; + off_t offset; struct pack_header hdr; uint32_t nr_remaining = nr_result; time_t last_mtime = 0; @@ -480,11 +478,8 @@ static void write_pack_file(void) offset = sizeof(hdr); nr_written = 0; for (; i < nr_objects; i++) { - last_obj_offset = offset; - offset_one = write_one(f, objects + i, offset); - if (!offset_one) + if (!write_one(f, objects + i, &offset)) break; - offset = offset_one; display_progress(progress_state, written); } @@ -497,8 +492,9 @@ static void write_pack_file(void) } else if (nr_written == nr_remaining) { sha1close(f, sha1, CSUM_FSYNC); } else { - int fd = sha1close(f, NULL, 0); - fixup_pack_header_footer(fd, sha1, pack_tmp_name, nr_written); + int fd = sha1close(f, sha1, 0); + fixup_pack_header_footer(fd, sha1, pack_tmp_name, + nr_written, sha1, offset); close(fd); } diff --git a/combine-diff.c b/combine-diff.c index 4dfc330867..aa9d79ea0b 100644 --- a/combine-diff.c +++ b/combine-diff.c @@ -500,6 +500,18 @@ static int hunk_comment_line(const char *bol) return (isalpha(ch) || ch == '_' || ch == '$'); } +static void show_line_to_eol(const char *line, int len, const char *reset) +{ + int saw_cr_at_eol = 0; + if (len < 0) + len = strlen(line); + saw_cr_at_eol = (len && line[len-1] == '\r'); + + printf("%.*s%s%s\n", len - saw_cr_at_eol, line, + reset, + saw_cr_at_eol ? "\r" : ""); +} + static void dump_sline(struct sline *sline, unsigned long cnt, int num_parent, int use_color) { @@ -593,7 +605,7 @@ static void dump_sline(struct sline *sline, unsigned long cnt, int num_parent, else putchar(' '); } - printf("%s%s\n", ll->line, c_reset); + show_line_to_eol(ll->line, -1, c_reset); ll = ll->next; } if (cnt < lno) @@ -617,7 +629,7 @@ static void dump_sline(struct sline *sline, unsigned long cnt, int num_parent, putchar(' '); p_mask <<= 1; } - printf("%.*s%s\n", sl->len, sl->bol, c_reset); + show_line_to_eol(sl->bol, sl->len, c_reset); } } } diff --git a/csum-file.c b/csum-file.c index ace64f165e..28389541a3 100644 --- a/csum-file.c +++ b/csum-file.c @@ -42,11 +42,11 @@ int sha1close(struct sha1file *f, unsigned char *result, unsigned int flags) sha1flush(f, offset); f->offset = 0; } + SHA1_Final(f->buffer, &f->ctx); + if (result) + hashcpy(result, f->buffer); if (flags & (CSUM_CLOSE | CSUM_FSYNC)) { /* write checksum and close fd */ - SHA1_Final(f->buffer, &f->ctx); - if (result) - hashcpy(result, f->buffer); sha1flush(f, 20); if (flags & CSUM_FSYNC) fsync_or_die(f->fd, f->name); @@ -511,13 +511,20 @@ const char *diff_get_color(int diff_use_color, enum color_diff ix) static void emit_line(FILE *file, const char *set, const char *reset, const char *line, int len) { - int has_trailing_newline = (len > 0 && line[len-1] == '\n'); + int has_trailing_newline, has_trailing_carriage_return; + + has_trailing_newline = (len > 0 && line[len-1] == '\n'); if (has_trailing_newline) len--; + has_trailing_carriage_return = (len > 0 && line[len-1] == '\r'); + if (has_trailing_carriage_return) + len--; fputs(set, file); fwrite(line, len, 1, file); fputs(reset, file); + if (has_trailing_carriage_return) + fputc('\r', file); if (has_trailing_newline) fputc('\n', file); } diff --git a/fast-import.c b/fast-import.c index 7089e6f9e6..d85b3a561f 100644 --- a/fast-import.c +++ b/fast-import.c @@ -951,7 +951,8 @@ static void end_packfile(void) close_pack_windows(pack_data); fixup_pack_header_footer(pack_data->pack_fd, pack_data->sha1, - pack_data->pack_name, object_count); + pack_data->pack_name, object_count, + NULL, 0); close(pack_data->pack_fd); idx_name = keep_pack(create_index()); diff --git a/git-gui/git-gui.sh b/git-gui/git-gui.sh index ad65aaad5a..86402d49f7 100755 --- a/git-gui/git-gui.sh +++ b/git-gui/git-gui.sh @@ -1932,7 +1932,7 @@ proc show_more_context {} { proc show_less_context {} { global repo_config - if {$repo_config(gui.diffcontext) >= 1} { + if {$repo_config(gui.diffcontext) > 1} { incr repo_config(gui.diffcontext) -1 reshow_diff } diff --git a/git-gui/lib/diff.tcl b/git-gui/lib/diff.tcl index 52b79e4a1f..1970b601e1 100644 --- a/git-gui/lib/diff.tcl +++ b/git-gui/lib/diff.tcl @@ -175,7 +175,7 @@ proc show_diff {path w {lno {}} {scroll_pos {}}} { lappend cmd -p lappend cmd --no-color - if {$repo_config(gui.diffcontext) >= 0} { + if {$repo_config(gui.diffcontext) >= 1} { lappend cmd "-U$repo_config(gui.diffcontext)" } if {$w eq $ui_index} { @@ -192,6 +192,7 @@ proc show_diff {path w {lno {}} {scroll_pos {}}} { return } + set ::current_diff_inheader 1 fconfigure $fd \ -blocking 0 \ -encoding binary \ @@ -207,18 +208,21 @@ proc read_diff {fd scroll_pos} { while {[gets $fd line] >= 0} { # -- Cleanup uninteresting diff header lines. # - if { [string match {diff --git *} $line] - || [string match {diff --cc *} $line] - || [string match {diff --combined *} $line] - || [string match {--- *} $line] - || [string match {+++ *} $line]} { - append current_diff_header $line "\n" - continue + if {$::current_diff_inheader} { + if { [string match {diff --git *} $line] + || [string match {diff --cc *} $line] + || [string match {diff --combined *} $line] + || [string match {--- *} $line] + || [string match {+++ *} $line]} { + append current_diff_header $line "\n" + continue + } } if {[string match {index *} $line]} continue if {$line eq {deleted file mode 120000}} { set line "deleted symlink" } + set ::current_diff_inheader 0 # -- Automatically detect if this is a 3 way diff. # diff --git a/git-gui/lib/option.tcl b/git-gui/lib/option.tcl index ffb3f00ff0..5e1346e601 100644 --- a/git-gui/lib/option.tcl +++ b/git-gui/lib/option.tcl @@ -125,7 +125,7 @@ proc do_options {} { {b gui.matchtrackingbranch {mc "Match Tracking Branches"}} {b gui.fastcopyblame {mc "Blame Copy Only On Changed Files"}} {i-20..200 gui.copyblamethreshold {mc "Minimum Letters To Blame Copy On"}} - {i-0..99 gui.diffcontext {mc "Number of Diff Context Lines"}} + {i-1..99 gui.diffcontext {mc "Number of Diff Context Lines"}} {i-0..99 gui.commitmsgwidth {mc "Commit Message Text Width"}} {t gui.newbranchtemplate {mc "New Branch Name Template"}} } { diff --git a/git-gui/po/fr.po b/git-gui/po/fr.po index 89b6d51ea0..26b866f551 100644 --- a/git-gui/po/fr.po +++ b/git-gui/po/fr.po @@ -1,50 +1,51 @@ -# translation of fr.po to French +# translation of fr.po to Français # 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. +# Alexandre Bourget <alexandre.bourget@savoirfairelinux.com>, 2008. msgid "" msgstr "" "Project-Id-Version: fr\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2008-03-14 07:18+0100\n" -"PO-Revision-Date: 2008-04-04 22:05+0200\n" -"Last-Translator: Christian Couder <chriscool@tuxfamily.org>\n" -"Language-Team: French\n" +"POT-Creation-Date: 2008-08-02 14:45-0700\n" +"PO-Revision-Date: 2008-08-11 17:12-0400\n" +"Last-Translator: Alexandre Bourget <alexandre.bourget@savoirfairelinux.com>\n" +"Language-Team: Français <fr@li.org>\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:634 git-gui.sh:648 git-gui.sh:661 git-gui.sh:744 -#: git-gui.sh:763 +#: git-gui.sh:41 git-gui.sh:688 git-gui.sh:702 git-gui.sh:715 git-gui.sh:798 +#: git-gui.sh:817 msgid "git-gui: fatal error" msgstr "git-gui: erreur fatale" -#: git-gui.sh:593 +#: git-gui.sh:644 #, tcl-format msgid "Invalid font specified in %s:" -msgstr "Invalide fonte spécifiée dans %s :" +msgstr "Police invalide spécifiée dans %s :" -#: git-gui.sh:620 +#: git-gui.sh:674 msgid "Main Font" -msgstr "Fonte principale" +msgstr "Police principale" -#: git-gui.sh:621 +#: git-gui.sh:675 msgid "Diff/Console Font" -msgstr "Fonte diff/console" +msgstr "Police diff/console" -#: git-gui.sh:635 +#: git-gui.sh:689 msgid "Cannot find git in PATH." msgstr "Impossible de trouver git dans PATH." -#: git-gui.sh:662 +#: git-gui.sh:716 msgid "Cannot parse Git version string:" msgstr "Impossible de parser la version de Git :" -#: git-gui.sh:680 +#: git-gui.sh:734 #, tcl-format msgid "" "Git version cannot be determined.\n" @@ -63,378 +64,381 @@ msgstr "" "\n" "Peut'on considérer que '%s' est en version 1.5.0 ?\n" -#: git-gui.sh:918 +#: git-gui.sh:972 msgid "Git directory not found:" -msgstr "Impossible de trouver le répertoire de Git :" +msgstr "Impossible de trouver le répertoire git :" -#: git-gui.sh:925 +#: git-gui.sh:979 msgid "Cannot move to top of working directory:" msgstr "Impossible d'aller à la racine du répertoire de travail :" -#: git-gui.sh:932 +#: git-gui.sh:986 msgid "Cannot use funny .git directory:" -msgstr "Impossible d'utiliser un drôle de répertoire git :" +msgstr "Impossible d'utiliser le répertoire .git:" -#: git-gui.sh:937 +#: git-gui.sh:991 msgid "No working directory" -msgstr "Pas de répertoire de travail" +msgstr "Aucun répertoire de travail" -#: git-gui.sh:1084 lib/checkout_op.tcl:283 +#: git-gui.sh:1138 lib/checkout_op.tcl:305 msgid "Refreshing file status..." msgstr "Rafraichissement du status des fichiers..." -#: git-gui.sh:1149 +#: git-gui.sh:1194 msgid "Scanning for modified files ..." msgstr "Recherche de fichiers modifiés..." -#: git-gui.sh:1324 lib/browser.tcl:246 +#: git-gui.sh:1369 lib/browser.tcl:246 msgid "Ready." msgstr "Prêt." -#: git-gui.sh:1590 +#: git-gui.sh:1635 msgid "Unmodified" msgstr "Non modifié" -#: git-gui.sh:1592 +#: git-gui.sh:1637 msgid "Modified, not staged" -msgstr "Modifié, non pré-commité" +msgstr "Modifié, pas indexé" -#: git-gui.sh:1593 git-gui.sh:1598 +#: git-gui.sh:1638 git-gui.sh:1643 msgid "Staged for commit" -msgstr "Pré-commité" +msgstr "Indexé" -#: git-gui.sh:1594 git-gui.sh:1599 +#: git-gui.sh:1639 git-gui.sh:1644 msgid "Portions staged for commit" -msgstr "En partie pré-commité" +msgstr "Portions indexées" -#: git-gui.sh:1595 git-gui.sh:1600 +#: git-gui.sh:1640 git-gui.sh:1645 msgid "Staged for commit, missing" -msgstr "Pré-commité, manquant" +msgstr "Indexés, manquant" -#: git-gui.sh:1597 +#: git-gui.sh:1642 msgid "Untracked, not staged" -msgstr "Non suivi, non pré-commité" +msgstr "Non versionné, non indexé" -#: git-gui.sh:1602 +#: git-gui.sh:1647 msgid "Missing" msgstr "Manquant" -#: git-gui.sh:1603 +#: git-gui.sh:1648 msgid "Staged for removal" -msgstr "Pré-commité pour suppression" +msgstr "Indexé pour suppression" -#: git-gui.sh:1604 +#: git-gui.sh:1649 msgid "Staged for removal, still present" -msgstr "Pré-commité pour suppression, toujours présent" +msgstr "Indexé pour suppression, toujours présent" -#: git-gui.sh:1606 git-gui.sh:1607 git-gui.sh:1608 git-gui.sh:1609 +#: git-gui.sh:1651 git-gui.sh:1652 git-gui.sh:1653 git-gui.sh:1654 msgid "Requires merge resolution" msgstr "Nécessite la résolution d'une fusion" -#: git-gui.sh:1644 +#: git-gui.sh:1689 msgid "Starting gitk... please wait..." -msgstr "Lancement de gitk... merci de patienter..." +msgstr "Lancement de gitk... un instant..." -#: git-gui.sh:1653 -#, 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:1698 +msgid "Couldn't find gitk in PATH" +msgstr "Impossible de trouver gitk dans PATH." -#: git-gui.sh:1860 lib/choose_repository.tcl:36 +#: git-gui.sh:1948 lib/choose_repository.tcl:36 msgid "Repository" -msgstr "Référentiel" +msgstr "Dépôt" -#: git-gui.sh:1861 +#: git-gui.sh:1949 msgid "Edit" -msgstr "Editer" +msgstr "Edition" -#: git-gui.sh:1863 lib/choose_rev.tcl:561 +#: git-gui.sh:1951 lib/choose_rev.tcl:561 msgid "Branch" msgstr "Branche" -#: git-gui.sh:1866 lib/choose_rev.tcl:548 +#: git-gui.sh:1954 lib/choose_rev.tcl:548 msgid "Commit@@noun" msgstr "Commit" -#: git-gui.sh:1869 lib/merge.tcl:120 lib/merge.tcl:149 lib/merge.tcl:167 +#: git-gui.sh:1957 lib/merge.tcl:120 lib/merge.tcl:149 lib/merge.tcl:167 msgid "Merge" msgstr "Fusionner" -#: git-gui.sh:1870 lib/choose_rev.tcl:557 +#: git-gui.sh:1958 lib/choose_rev.tcl:557 msgid "Remote" -msgstr "Référentiel distant" +msgstr "Dépôt distant" -#: git-gui.sh:1879 +#: git-gui.sh:1967 msgid "Browse Current Branch's Files" -msgstr "Visionner fichiers dans branche courante" +msgstr "Naviguer dans la branche courante" -#: git-gui.sh:1883 +#: git-gui.sh:1971 msgid "Browse Branch Files..." -msgstr "Visionner fichiers de branche" +msgstr "Naviguer dans la branche..." -#: git-gui.sh:1888 +#: git-gui.sh:1976 msgid "Visualize Current Branch's History" msgstr "Visualiser historique branche courante" -#: git-gui.sh:1892 +#: git-gui.sh:1980 msgid "Visualize All Branch History" -msgstr "Visualiser historique toutes branches" +msgstr "Voir l'historique de toutes les branches" -#: git-gui.sh:1899 +#: git-gui.sh:1987 #, tcl-format msgid "Browse %s's Files" -msgstr "Visionner fichiers de %s" +msgstr "Naviguer l'arborescence de %s" -#: git-gui.sh:1901 +#: git-gui.sh:1989 #, tcl-format msgid "Visualize %s's History" -msgstr "Visualiser historique de %s" +msgstr "Voir l'historique de la branche: %s" -#: git-gui.sh:1906 lib/database.tcl:27 lib/database.tcl:67 +#: git-gui.sh:1994 lib/database.tcl:27 lib/database.tcl:67 msgid "Database Statistics" -msgstr "Statistiques base de donnée" +msgstr "Statistiques du dépôt" -#: git-gui.sh:1909 lib/database.tcl:34 +#: git-gui.sh:1997 lib/database.tcl:34 msgid "Compress Database" -msgstr "Comprimer base de donnée" +msgstr "Comprimer le dépôt" -#: git-gui.sh:1912 +#: git-gui.sh:2000 msgid "Verify Database" -msgstr "Vérifier base de donnée" +msgstr "Vérifier le dépôt" -#: git-gui.sh:1919 git-gui.sh:1923 git-gui.sh:1927 lib/shortcut.tcl:7 +#: git-gui.sh:2007 git-gui.sh:2011 git-gui.sh:2015 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:1932 lib/choose_repository.tcl:177 lib/choose_repository.tcl:185 +#: git-gui.sh:2023 lib/choose_repository.tcl:177 lib/choose_repository.tcl:185 msgid "Quit" msgstr "Quitter" -#: git-gui.sh:1939 +#: git-gui.sh:2031 msgid "Undo" msgstr "Défaire" -#: git-gui.sh:1942 +#: git-gui.sh:2034 msgid "Redo" msgstr "Refaire" -#: git-gui.sh:1946 git-gui.sh:2443 +#: git-gui.sh:2038 git-gui.sh:2545 msgid "Cut" msgstr "Couper" -#: git-gui.sh:1949 git-gui.sh:2446 git-gui.sh:2520 git-gui.sh:2614 +#: git-gui.sh:2041 git-gui.sh:2548 git-gui.sh:2622 git-gui.sh:2715 #: lib/console.tcl:69 msgid "Copy" msgstr "Copier" -#: git-gui.sh:1952 git-gui.sh:2449 +#: git-gui.sh:2044 git-gui.sh:2551 msgid "Paste" msgstr "Coller" -#: git-gui.sh:1955 git-gui.sh:2452 lib/branch_delete.tcl:26 +#: git-gui.sh:2047 git-gui.sh:2554 lib/branch_delete.tcl:26 #: lib/remote_branch_delete.tcl:38 msgid "Delete" msgstr "Supprimer" -#: git-gui.sh:1959 git-gui.sh:2456 git-gui.sh:2618 lib/console.tcl:71 +#: git-gui.sh:2051 git-gui.sh:2558 git-gui.sh:2719 lib/console.tcl:71 msgid "Select All" msgstr "Tout sélectionner" -#: git-gui.sh:1968 +#: git-gui.sh:2060 msgid "Create..." msgstr "Créer..." -#: git-gui.sh:1974 +#: git-gui.sh:2066 msgid "Checkout..." -msgstr "Emprunter... " +msgstr "Charger (checkout)..." -#: git-gui.sh:1980 +#: git-gui.sh:2072 msgid "Rename..." msgstr "Renommer..." -#: git-gui.sh:1985 git-gui.sh:2085 +#: git-gui.sh:2077 git-gui.sh:2187 msgid "Delete..." msgstr "Supprimer..." -#: git-gui.sh:1990 +#: git-gui.sh:2082 msgid "Reset..." msgstr "Réinitialiser..." -#: git-gui.sh:2002 git-gui.sh:2389 +#: git-gui.sh:2094 git-gui.sh:2491 msgid "New Commit" msgstr "Nouveau commit" -#: git-gui.sh:2010 git-gui.sh:2396 +#: git-gui.sh:2102 git-gui.sh:2498 msgid "Amend Last Commit" msgstr "Corriger dernier commit" -#: git-gui.sh:2019 git-gui.sh:2356 lib/remote_branch_delete.tcl:99 +#: git-gui.sh:2111 git-gui.sh:2458 lib/remote_branch_delete.tcl:99 msgid "Rescan" -msgstr "Resynchroniser" +msgstr "Recharger modifs." -#: git-gui.sh:2025 +#: git-gui.sh:2117 msgid "Stage To Commit" -msgstr "Commiter un pré-commit" +msgstr "Indexer" -#: git-gui.sh:2031 +#: git-gui.sh:2123 msgid "Stage Changed Files To Commit" -msgstr "Commiter fichiers modifiés dans pré-commit" +msgstr "Indexer toutes modifications" -#: git-gui.sh:2037 +#: git-gui.sh:2129 msgid "Unstage From Commit" -msgstr "Commit vers pré-commit" +msgstr "Désindexer" -#: git-gui.sh:2042 lib/index.tcl:395 +#: git-gui.sh:2134 lib/index.tcl:395 msgid "Revert Changes" -msgstr "Inverser modification" +msgstr "Annuler les modifications (revert)" -#: git-gui.sh:2049 git-gui.sh:2368 git-gui.sh:2467 +#: git-gui.sh:2141 git-gui.sh:2702 +msgid "Show Less Context" +msgstr "Montrer moins de contexte" + +#: git-gui.sh:2145 git-gui.sh:2706 +msgid "Show More Context" +msgstr "Montrer plus de contexte" + +#: git-gui.sh:2151 git-gui.sh:2470 git-gui.sh:2569 msgid "Sign Off" -msgstr "Se désinscrire" +msgstr "Signer" -#: git-gui.sh:2053 git-gui.sh:2372 +#: git-gui.sh:2155 git-gui.sh:2474 msgid "Commit@@verb" msgstr "Commiter" -#: git-gui.sh:2064 +#: git-gui.sh:2166 msgid "Local Merge..." msgstr "Fusion locale..." -#: git-gui.sh:2069 +#: git-gui.sh:2171 msgid "Abort Merge..." msgstr "Abandonner fusion..." -#: git-gui.sh:2081 +#: git-gui.sh:2183 msgid "Push..." msgstr "Pousser..." -#: git-gui.sh:2092 lib/choose_repository.tcl:41 -msgid "Apple" -msgstr "Pomme" - -#: git-gui.sh:2095 git-gui.sh:2117 lib/about.tcl:14 +#: git-gui.sh:2197 git-gui.sh:2219 lib/about.tcl:14 #: lib/choose_repository.tcl:44 lib/choose_repository.tcl:50 #, tcl-format msgid "About %s" -msgstr "A propos de %s" +msgstr "À propos de %s" -#: git-gui.sh:2099 +#: git-gui.sh:2201 msgid "Preferences..." msgstr "Préférences..." -#: git-gui.sh:2107 git-gui.sh:2639 +#: git-gui.sh:2209 git-gui.sh:2740 msgid "Options..." msgstr "Options..." -#: git-gui.sh:2113 lib/choose_repository.tcl:47 +#: git-gui.sh:2215 lib/choose_repository.tcl:47 msgid "Help" msgstr "Aide" -#: git-gui.sh:2154 +#: git-gui.sh:2256 msgid "Online Documentation" msgstr "Documentation en ligne" -#: git-gui.sh:2238 +#: git-gui.sh:2340 #, tcl-format msgid "fatal: cannot stat path %s: No such file or directory" -msgstr "erreur fatale : pas d'infos sur le chemin %s : Fichier ou répertoire inexistant" +msgstr "" +"erreur fatale : pas d'infos sur le chemin %s : Fichier ou répertoire " +"inexistant" -#: git-gui.sh:2271 +#: git-gui.sh:2373 msgid "Current Branch:" msgstr "Branche courante :" -#: git-gui.sh:2292 +#: git-gui.sh:2394 msgid "Staged Changes (Will Commit)" -msgstr "Modifications pré-commitées" +msgstr "Modifs. indexées (pour commit)" -#: git-gui.sh:2312 +#: git-gui.sh:2414 msgid "Unstaged Changes" -msgstr "Modifications non pré-commitées" +msgstr "Modifs. non indexées" -#: git-gui.sh:2362 +#: git-gui.sh:2464 msgid "Stage Changed" -msgstr "Pré-commit modifié" +msgstr "Indexer modifs." -#: git-gui.sh:2378 lib/transport.tcl:93 lib/transport.tcl:182 +#: git-gui.sh:2480 lib/transport.tcl:93 lib/transport.tcl:182 msgid "Push" msgstr "Pousser" -#: git-gui.sh:2408 +#: git-gui.sh:2510 msgid "Initial Commit Message:" msgstr "Message de commit initial :" -#: git-gui.sh:2409 +#: git-gui.sh:2511 msgid "Amended Commit Message:" msgstr "Message de commit corrigé :" -#: git-gui.sh:2410 +#: git-gui.sh:2512 msgid "Amended Initial Commit Message:" msgstr "Message de commit initial corrigé :" -#: git-gui.sh:2411 +#: git-gui.sh:2513 msgid "Amended Merge Commit Message:" msgstr "Message de commit de fusion corrigé :" -#: git-gui.sh:2412 +#: git-gui.sh:2514 msgid "Merge Commit Message:" msgstr "Message de commit de fusion :" -#: git-gui.sh:2413 +#: git-gui.sh:2515 msgid "Commit Message:" msgstr "Message de commit :" -#: git-gui.sh:2459 git-gui.sh:2622 lib/console.tcl:73 +#: git-gui.sh:2561 git-gui.sh:2723 lib/console.tcl:73 msgid "Copy All" msgstr "Copier tout" -#: git-gui.sh:2483 lib/blame.tcl:107 +#: git-gui.sh:2585 lib/blame.tcl:100 msgid "File:" msgstr "Fichier :" -#: git-gui.sh:2589 +#: git-gui.sh:2691 msgid "Apply/Reverse Hunk" msgstr "Appliquer/Inverser section" -#: git-gui.sh:2595 -msgid "Show Less Context" -msgstr "Montrer moins de contexte" - -#: git-gui.sh:2602 -msgid "Show More Context" -msgstr "Montrer plus de contexte" +#: git-gui.sh:2696 +msgid "Apply/Reverse Line" +msgstr "Appliquer/Inverser la ligne" -#: git-gui.sh:2610 +#: git-gui.sh:2711 msgid "Refresh" msgstr "Rafraichir" -#: git-gui.sh:2631 +#: git-gui.sh:2732 msgid "Decrease Font Size" -msgstr "Réduire fonte" +msgstr "Diminuer la police" -#: git-gui.sh:2635 +#: git-gui.sh:2736 msgid "Increase Font Size" -msgstr "Agrandir fonte" +msgstr "Agrandir la police" -#: git-gui.sh:2646 +#: git-gui.sh:2747 msgid "Unstage Hunk From Commit" -msgstr "Enlever section pré-commitée" +msgstr "Désindexer la section" + +#: git-gui.sh:2748 +msgid "Unstage Line From Commit" +msgstr "Désindexer la ligne" -#: git-gui.sh:2648 +#: git-gui.sh:2750 msgid "Stage Hunk For Commit" -msgstr "Pré-commiter section" +msgstr "Indexer la section" -#: git-gui.sh:2667 +#: git-gui.sh:2751 +msgid "Stage Line For Commit" +msgstr "Indexer la ligne" + +#: git-gui.sh:2771 msgid "Initializing..." msgstr "Initialisation..." -#: git-gui.sh:2762 +#: git-gui.sh:2876 #, tcl-format msgid "" "Possible environment issues exist.\n" @@ -451,7 +455,7 @@ msgstr "" "sous-processus de Git lancés par %s\n" "\n" -#: git-gui.sh:2792 +#: git-gui.sh:2906 msgid "" "\n" "This is due to a known issue with the\n" @@ -461,7 +465,7 @@ msgstr "" "Ceci est du à un problème connu avec\n" "le binaire Tcl distribué par Cygwin." -#: git-gui.sh:2797 +#: git-gui.sh:2911 #, tcl-format msgid "" "\n" @@ -482,78 +486,94 @@ msgstr "" msgid "git-gui - a graphical user interface for Git." msgstr "git-gui - une interface graphique utilisateur pour Git" -#: lib/blame.tcl:77 +#: lib/blame.tcl:70 msgid "File Viewer" msgstr "Visionneur de fichier" -#: lib/blame.tcl:81 +#: lib/blame.tcl:74 msgid "Commit:" msgstr "Commit :" -#: lib/blame.tcl:264 +#: lib/blame.tcl:257 msgid "Copy Commit" msgstr "Copier commit" -#: lib/blame.tcl:384 +#: lib/blame.tcl:260 +msgid "Do Full Copy Detection" +msgstr "Lancer la détection approfondie des copies" + +#: lib/blame.tcl:388 #, tcl-format msgid "Reading %s..." msgstr "Lecture de %s..." -#: lib/blame.tcl:488 +#: lib/blame.tcl:492 msgid "Loading copy/move tracking annotations..." msgstr "Chargement des annotations de suivi des copies/déplacements..." -#: lib/blame.tcl:508 +#: lib/blame.tcl:512 msgid "lines annotated" msgstr "lignes annotées" -#: lib/blame.tcl:689 +#: lib/blame.tcl:704 msgid "Loading original location annotations..." msgstr "Chargement des annotations d'emplacement original" -#: lib/blame.tcl:692 +#: lib/blame.tcl:707 msgid "Annotation complete." msgstr "Annotation terminée." -#: lib/blame.tcl:746 +#: lib/blame.tcl:737 +msgid "Busy" +msgstr "Occupé" + +#: lib/blame.tcl:738 +msgid "Annotation process is already running." +msgstr "Annotation en cours d'exécution." + +#: lib/blame.tcl:777 +msgid "Running thorough copy detection..." +msgstr "Recherche de copie approfondie en cours..." + +#: lib/blame.tcl:827 msgid "Loading annotation..." msgstr "Chargement des annotations..." -#: lib/blame.tcl:802 +#: lib/blame.tcl:883 msgid "Author:" msgstr "Auteur :" -#: lib/blame.tcl:806 +#: lib/blame.tcl:887 msgid "Committer:" msgstr "Commiteur :" -#: lib/blame.tcl:811 +#: lib/blame.tcl:892 msgid "Original File:" msgstr "Fichier original :" -#: lib/blame.tcl:925 +#: lib/blame.tcl:1006 msgid "Originally By:" msgstr "A l'origine par :" -#: lib/blame.tcl:931 +#: lib/blame.tcl:1012 msgid "In File:" msgstr "Dans le fichier :" -#: lib/blame.tcl:936 +#: lib/blame.tcl:1017 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" +msgstr "Charger la branche (checkout)" #: lib/branch_checkout.tcl:23 msgid "Checkout" -msgstr "Emprunter" +msgstr "Charger (checkout)" #: lib/branch_checkout.tcl:27 lib/branch_create.tcl:35 #: lib/branch_delete.tcl:32 lib/branch_rename.tcl:30 lib/browser.tcl:282 -#: lib/checkout_op.tcl:522 lib/choose_font.tcl:43 lib/merge.tcl:171 +#: lib/checkout_op.tcl:544 lib/choose_font.tcl:43 lib/merge.tcl:171 #: lib/option.tcl:103 lib/remote_branch_delete.tcl:42 lib/transport.tcl:97 msgid "Cancel" msgstr "Annuler" @@ -562,17 +582,17 @@ msgstr "Annuler" msgid "Revision" msgstr "Révision" -#: lib/branch_checkout.tcl:36 lib/branch_create.tcl:69 lib/option.tcl:242 +#: lib/branch_checkout.tcl:36 lib/branch_create.tcl:69 lib/option.tcl:244 msgid "Options" msgstr "Options" #: lib/branch_checkout.tcl:39 lib/branch_create.tcl:92 msgid "Fetch Tracking Branch" -msgstr "Branche suivant récupération" +msgstr "Récupérer la branche de suivi" #: lib/branch_checkout.tcl:44 msgid "Detach From Local Branch" -msgstr "Détacher de branche locale" +msgstr "Détacher de la branche locale" #: lib/branch_create.tcl:22 msgid "Create Branch" @@ -600,7 +620,7 @@ msgstr "Trouver nom de branche de suivi" #: lib/branch_create.tcl:66 msgid "Starting Revision" -msgstr "Début de révision" +msgstr "Révision initiale" #: lib/branch_create.tcl:72 msgid "Update Existing Branch:" @@ -612,28 +632,28 @@ msgstr "Non" #: lib/branch_create.tcl:80 msgid "Fast Forward Only" -msgstr "Avance rapide seulement" +msgstr "Mise-à-jour rectiligne seulement (fast-forward)" -#: lib/branch_create.tcl:85 lib/checkout_op.tcl:514 +#: lib/branch_create.tcl:85 lib/checkout_op.tcl:536 msgid "Reset" msgstr "Réinitialiser" #: lib/branch_create.tcl:97 msgid "Checkout After Creation" -msgstr "Emprunt après création" +msgstr "Charger (checkout) après création" #: lib/branch_create.tcl:131 msgid "Please select a tracking branch." -msgstr "Merci de choisir une branche de suivi" +msgstr "Choisissez 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." +msgstr "La branche de suivi %s n'est pas une branche dans le dépôt 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." +msgstr "Fournissez un nom de branche." #: lib/branch_create.tcl:164 lib/branch_rename.tcl:106 #, tcl-format @@ -654,7 +674,7 @@ msgstr "Branches locales" #: lib/branch_delete.tcl:52 msgid "Delete Only If Merged Into" -msgstr "Supprimer ssi fusion dedans" +msgstr "Supprimer seulement si fusionnée dans:" #: lib/branch_delete.tcl:54 msgid "Always (Do not perform merge test.)" @@ -704,7 +724,7 @@ msgstr "Nouveau nom :" 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 +#: lib/branch_rename.tcl:96 lib/checkout_op.tcl:201 #, tcl-format msgid "Branch '%s' already exists." msgstr "La branche '%s' existe déjà." @@ -712,7 +732,7 @@ 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é." +msgstr "Échec pour renommer '%s'." #: lib/browser.tcl:17 msgid "Starting..." @@ -733,34 +753,39 @@ msgstr "[Jusqu'au parent]" #: lib/browser.tcl:267 lib/browser.tcl:273 msgid "Browse Branch Files" -msgstr "Visionner fichiers de branches" +msgstr "Naviguer dans les fichiers de le branche" #: lib/browser.tcl:278 lib/choose_repository.tcl:387 -#: lib/choose_repository.tcl:474 lib/choose_repository.tcl:484 -#: lib/choose_repository.tcl:987 +#: lib/choose_repository.tcl:472 lib/choose_repository.tcl:482 +#: lib/choose_repository.tcl:985 msgid "Browse" -msgstr "Visionner" +msgstr "Naviguer" -#: lib/checkout_op.tcl:79 +#: lib/checkout_op.tcl:84 #, tcl-format msgid "Fetching %s from %s" msgstr "Récupération de %s à partir de %s" -#: lib/checkout_op.tcl:127 +#: lib/checkout_op.tcl:132 #, tcl-format msgid "fatal: Cannot resolve %s" msgstr "erreur fatale : Impossible de résoudre %s" -#: lib/checkout_op.tcl:140 lib/console.tcl:81 lib/database.tcl:31 +#: lib/checkout_op.tcl:145 lib/console.tcl:81 lib/database.tcl:31 msgid "Close" msgstr "Fermer" -#: lib/checkout_op.tcl:169 +#: lib/checkout_op.tcl:174 #, tcl-format msgid "Branch '%s' does not exist." msgstr "La branche '%s' n'existe pas." -#: lib/checkout_op.tcl:206 +#: lib/checkout_op.tcl:193 +#, tcl-format +msgid "Failed to configure simplified git-pull for '%s'." +msgstr "Échec de la configuration simplifiée de git-pull pour '%s'." + +#: lib/checkout_op.tcl:228 #, tcl-format msgid "" "Branch '%s' already exists.\n" @@ -770,24 +795,24 @@ msgid "" msgstr "" "La branche '%s' existe déjà.\n" "\n" -"Impossible d'avancer rapidement à %s.\n" +"Impossible de faire une avance rapide (fast forward) vers %s.\n" "Une fusion est nécessaire." -#: lib/checkout_op.tcl:220 +#: lib/checkout_op.tcl:242 #, 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 +#: lib/checkout_op.tcl:261 #, tcl-format msgid "Failed to update '%s'." msgstr "La mise à jour de '%s' a échouée." -#: lib/checkout_op.tcl:251 +#: lib/checkout_op.tcl:273 msgid "Staging area (index) is already locked." -msgstr "L'espace de pré-commit ('index' ou 'staging') est déjà vérouillé." +msgstr "L'index (staging area) est déjà vérouillé" -#: lib/checkout_op.tcl:266 +#: lib/checkout_op.tcl:288 msgid "" "Last scanned state does not match repository state.\n" "\n" @@ -796,36 +821,39 @@ msgid "" "\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" +"L'état lors de la dernière synchronisation ne correspond plus à l'état du " +"dépôt\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" +"Un autre programme Git a modifié ce dépôt 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 +#: lib/checkout_op.tcl:344 #, tcl-format msgid "Updating working directory to '%s'..." msgstr "Mise à jour du répertoire courant avec '%s'..." -#: lib/checkout_op.tcl:323 +#: lib/checkout_op.tcl:345 msgid "files checked out" -msgstr "fichiers empruntés" +msgstr "fichiers chargés" -#: lib/checkout_op.tcl:353 +#: lib/checkout_op.tcl:375 #, 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.)" +msgstr "Chargement de '%s' abandonné (il est nécessaire de fusionner des fichiers)." -#: lib/checkout_op.tcl:354 +#: lib/checkout_op.tcl:376 msgid "File level merge required." msgstr "Il est nécessaire de fusionner des fichiers." -#: lib/checkout_op.tcl:358 +#: lib/checkout_op.tcl:380 #, tcl-format msgid "Staying on branch '%s'." msgstr "Le répertoire de travail reste sur la branche '%s'." -#: lib/checkout_op.tcl:429 +#: lib/checkout_op.tcl:451 msgid "" "You are no longer on a local branch.\n" "\n" @@ -837,30 +865,30 @@ msgstr "" "Si vous vouliez être sur une branche, créez en une maintenant en partant de " "'Cet emprunt détaché'." -#: lib/checkout_op.tcl:446 lib/checkout_op.tcl:450 +#: lib/checkout_op.tcl:468 lib/checkout_op.tcl:472 #, tcl-format msgid "Checked out '%s'." -msgstr "'%s' emprunté." +msgstr "'%s' chargé." -#: lib/checkout_op.tcl:478 +#: lib/checkout_op.tcl:500 #, 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 +#: lib/checkout_op.tcl:522 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 +#: lib/checkout_op.tcl:527 #, tcl-format msgid "Reset '%s'?" msgstr "Réinitialiser '%s' ?" -#: lib/checkout_op.tcl:510 lib/merge.tcl:163 +#: lib/checkout_op.tcl:532 lib/merge.tcl:163 msgid "Visualize" msgstr "Visualiser" -#: lib/checkout_op.tcl:578 +#: lib/checkout_op.tcl:600 #, tcl-format msgid "" "Failed to set current branch.\n" @@ -884,15 +912,15 @@ msgstr "Sélectionner" #: lib/choose_font.tcl:53 msgid "Font Family" -msgstr "Famille de fonte" +msgstr "Familles de polices" #: lib/choose_font.tcl:74 msgid "Font Size" -msgstr "Taille de fonte" +msgstr "Taille de police" #: lib/choose_font.tcl:91 msgid "Font Example" -msgstr "Exemple de fonte" +msgstr "Exemple de police" #: lib/choose_font.tcl:103 msgid "" @@ -900,7 +928,7 @@ msgid "" "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." +"Si vous aimez ce texte, vous pouvez choisir cette police" #: lib/choose_repository.tcl:28 msgid "Git Gui" @@ -908,23 +936,23 @@ msgstr "Git Gui" #: lib/choose_repository.tcl:81 lib/choose_repository.tcl:376 msgid "Create New Repository" -msgstr "Créer nouveau référentiel" +msgstr "Créer nouveau dépôt" #: lib/choose_repository.tcl:87 msgid "New..." msgstr "Nouveau..." -#: lib/choose_repository.tcl:94 lib/choose_repository.tcl:460 +#: lib/choose_repository.tcl:94 lib/choose_repository.tcl:458 msgid "Clone Existing Repository" -msgstr "Cloner référentiel existant" +msgstr "Cloner dépôt existant" #: lib/choose_repository.tcl:100 msgid "Clone..." msgstr "Cloner..." -#: lib/choose_repository.tcl:107 lib/choose_repository.tcl:976 +#: lib/choose_repository.tcl:107 lib/choose_repository.tcl:974 msgid "Open Existing Repository" -msgstr "Ouvrir référentiel existant" +msgstr "Ouvrir dépôt existant" #: lib/choose_repository.tcl:113 msgid "Open..." @@ -932,202 +960,202 @@ msgstr "Ouvrir..." #: lib/choose_repository.tcl:126 msgid "Recent Repositories" -msgstr "Référentiels récents" +msgstr "Dépôt récemment utilisés" #: lib/choose_repository.tcl:132 msgid "Open Recent Repository:" -msgstr "Ouvrir référentiel récent :" +msgstr "Ouvrir dépôt récent :" #: lib/choose_repository.tcl:296 lib/choose_repository.tcl:303 #: lib/choose_repository.tcl:310 #, tcl-format msgid "Failed to create repository %s:" -msgstr "La création du référentiel %s a échouée :" +msgstr "La création du dépôt %s a échouée :" -#: lib/choose_repository.tcl:381 lib/choose_repository.tcl:478 +#: lib/choose_repository.tcl:381 lib/choose_repository.tcl:476 msgid "Directory:" msgstr "Répertoire :" -#: lib/choose_repository.tcl:412 lib/choose_repository.tcl:537 -#: lib/choose_repository.tcl:1011 +#: lib/choose_repository.tcl:410 lib/choose_repository.tcl:535 +#: lib/choose_repository.tcl:1007 msgid "Git Repository" -msgstr "Référentiel Git" +msgstr "Dépôt Git" -#: lib/choose_repository.tcl:437 +#: lib/choose_repository.tcl:435 #, tcl-format msgid "Directory %s already exists." msgstr "Le répertoire %s existe déjà." -#: lib/choose_repository.tcl:441 +#: lib/choose_repository.tcl:439 #, tcl-format msgid "File %s already exists." msgstr "Le fichier %s existe déjà." -#: lib/choose_repository.tcl:455 +#: lib/choose_repository.tcl:453 msgid "Clone" msgstr "Cloner" -#: lib/choose_repository.tcl:468 +#: lib/choose_repository.tcl:466 msgid "URL:" msgstr "URL :" -#: lib/choose_repository.tcl:489 +#: lib/choose_repository.tcl:487 msgid "Clone Type:" msgstr "Type de clonage :" -#: lib/choose_repository.tcl:495 +#: lib/choose_repository.tcl:493 msgid "Standard (Fast, Semi-Redundant, Hardlinks)" msgstr "Standard (rapide, semi-redondant, liens durs)" -#: lib/choose_repository.tcl:501 +#: lib/choose_repository.tcl:499 msgid "Full Copy (Slower, Redundant Backup)" msgstr "Copy complète (plus lent, sauvegarde redondante)" -#: lib/choose_repository.tcl:507 +#: lib/choose_repository.tcl:505 msgid "Shared (Fastest, Not Recommended, No Backup)" msgstr "Partagé (le plus rapide, non recommandé, pas de sauvegarde)" -#: lib/choose_repository.tcl:543 lib/choose_repository.tcl:590 -#: lib/choose_repository.tcl:736 lib/choose_repository.tcl:806 -#: lib/choose_repository.tcl:1017 lib/choose_repository.tcl:1025 +#: lib/choose_repository.tcl:541 lib/choose_repository.tcl:588 +#: lib/choose_repository.tcl:734 lib/choose_repository.tcl:804 +#: lib/choose_repository.tcl:1013 lib/choose_repository.tcl:1021 #, tcl-format msgid "Not a Git repository: %s" -msgstr "'%s' n'est pas un référentiel Git." +msgstr "'%s' n'est pas un dépôt Git." -#: lib/choose_repository.tcl:579 +#: lib/choose_repository.tcl:577 msgid "Standard only available for local repository." -msgstr "Standard n'est disponible que pour un référentiel local." +msgstr "Standard n'est disponible que pour un dépôt local." -#: lib/choose_repository.tcl:583 +#: lib/choose_repository.tcl:581 msgid "Shared only available for local repository." -msgstr "Partagé n'est disponible que pour un référentiel local." +msgstr "Partagé n'est disponible que pour un dépôt local." -#: lib/choose_repository.tcl:604 +#: lib/choose_repository.tcl:602 #, tcl-format msgid "Location %s already exists." msgstr "L'emplacement %s existe déjà." -#: lib/choose_repository.tcl:615 +#: lib/choose_repository.tcl:613 msgid "Failed to configure origin" msgstr "La configuration de l'origine a échouée." -#: lib/choose_repository.tcl:627 +#: lib/choose_repository.tcl:625 msgid "Counting objects" -msgstr "Comptage des objets" +msgstr "Décompte des objets" -#: lib/choose_repository.tcl:628 +#: lib/choose_repository.tcl:626 msgid "buckets" msgstr "paniers" -#: lib/choose_repository.tcl:652 +#: lib/choose_repository.tcl:650 #, tcl-format msgid "Unable to copy objects/info/alternates: %s" msgstr "Impossible de copier 'objects/info/alternates' : %s" -#: lib/choose_repository.tcl:688 +#: lib/choose_repository.tcl:686 #, tcl-format msgid "Nothing to clone from %s." msgstr "Il n'y a rien à cloner depuis %s." -#: lib/choose_repository.tcl:690 lib/choose_repository.tcl:904 -#: lib/choose_repository.tcl:916 +#: lib/choose_repository.tcl:688 lib/choose_repository.tcl:902 +#: lib/choose_repository.tcl:914 msgid "The 'master' branch has not been initialized." -msgstr "Cette branche 'master' n'a pas été initialisée." +msgstr "La branche 'master' n'a pas été initialisée." -#: lib/choose_repository.tcl:703 +#: lib/choose_repository.tcl:701 msgid "Hardlinks are unavailable. Falling back to copying." -msgstr "Les liens durs ne sont pas disponibles. On se résoud à copier." +msgstr "Les liens durs ne sont pas supportés. Une copie sera effectuée à la place." -#: lib/choose_repository.tcl:715 +#: lib/choose_repository.tcl:713 #, tcl-format msgid "Cloning from %s" msgstr "Clonage depuis %s" -#: lib/choose_repository.tcl:746 +#: lib/choose_repository.tcl:744 msgid "Copying objects" msgstr "Copie des objets" -#: lib/choose_repository.tcl:747 +#: lib/choose_repository.tcl:745 msgid "KiB" msgstr "KiB" -#: lib/choose_repository.tcl:771 +#: lib/choose_repository.tcl:769 #, tcl-format msgid "Unable to copy object: %s" msgstr "Impossible de copier l'objet : %s" -#: lib/choose_repository.tcl:781 +#: lib/choose_repository.tcl:779 msgid "Linking objects" msgstr "Liaison des objets" -#: lib/choose_repository.tcl:782 +#: lib/choose_repository.tcl:780 msgid "objects" msgstr "objets" -#: lib/choose_repository.tcl:790 +#: lib/choose_repository.tcl:788 #, tcl-format msgid "Unable to hardlink object: %s" msgstr "Impossible créer un lien dur pour l'objet : %s" -#: lib/choose_repository.tcl:845 +#: lib/choose_repository.tcl:843 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:856 +#: lib/choose_repository.tcl:854 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." +"Impossible de récupérer les marques (tags). Voir la sortie console pour plus " +"de détails." -#: lib/choose_repository.tcl:880 +#: lib/choose_repository.tcl:878 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:889 +#: lib/choose_repository.tcl:887 #, tcl-format msgid "Unable to cleanup %s" msgstr "Impossible de nettoyer %s" -#: lib/choose_repository.tcl:895 +#: lib/choose_repository.tcl:893 msgid "Clone failed." msgstr "Le clonage a échoué." -#: lib/choose_repository.tcl:902 +#: lib/choose_repository.tcl:900 msgid "No default branch obtained." msgstr "Aucune branche par défaut n'a été obtenue." -#: lib/choose_repository.tcl:913 +#: lib/choose_repository.tcl:911 #, tcl-format msgid "Cannot resolve %s as a commit." msgstr "Impossible de résoudre %s comme commit." -#: lib/choose_repository.tcl:925 +#: lib/choose_repository.tcl:923 msgid "Creating working directory" msgstr "Création du répertoire de travail" -#: lib/choose_repository.tcl:926 lib/index.tcl:65 lib/index.tcl:127 +#: lib/choose_repository.tcl:924 lib/index.tcl:65 lib/index.tcl:127 #: lib/index.tcl:193 msgid "files" msgstr "fichiers" -#: lib/choose_repository.tcl:955 +#: lib/choose_repository.tcl:953 msgid "Initial file checkout failed." -msgstr "L'emprunt initial de fichier a échoué." +msgstr "Chargement initial du fichier échoué." -#: lib/choose_repository.tcl:971 +#: lib/choose_repository.tcl:969 msgid "Open" msgstr "Ouvrir" -#: lib/choose_repository.tcl:981 +#: lib/choose_repository.tcl:979 msgid "Repository:" -msgstr "Référentiel :" +msgstr "Dépôt :" -#: lib/choose_repository.tcl:1031 +#: lib/choose_repository.tcl:1027 #, tcl-format msgid "Failed to open repository %s:" -msgstr "Impossible d'ouvrir le référentiel %s :" +msgstr "Impossible d'ouvrir le dépôt %s :" #: lib/choose_rev.tcl:53 msgid "This Detached Checkout" @@ -1143,11 +1171,11 @@ msgstr "Branche locale" #: lib/choose_rev.tcl:79 msgid "Tracking Branch" -msgstr "Suivi de branche" +msgstr "Branche de suivi" #: lib/choose_rev.tcl:84 lib/choose_rev.tcl:538 msgid "Tag" -msgstr "Marque" +msgstr "Marque (tag)" #: lib/choose_rev.tcl:317 #, tcl-format @@ -1164,7 +1192,7 @@ msgstr "L'expression de révision est vide." #: lib/choose_rev.tcl:531 msgid "Updated" -msgstr "Misa à jour" +msgstr "Mise-à-jour:" #: lib/choose_rev.tcl:559 msgid "URL" @@ -1218,9 +1246,9 @@ msgid "" "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" +"dépôt.\n" "\n" -"Un autre programme Git a modifié ce référentiel depuis la dernière " +"Un autre programme Git a modifié ce dépôt depuis la dernière " "synchronisation. Une resynshronisation doit être effectuée avant de pouvoir " "créer un nouveau commit.\n" "\n" @@ -1258,7 +1286,7 @@ msgid "" msgstr "" "Pas de modification à commiter.\n" "\n" -"Vous devez pré-commiter au moins 1 fichier avant de pouvoir commiter.\n" +"Vous devez indexer au moins 1 fichier avant de pouvoir commiter.\n" #: lib/commit.tcl:183 msgid "" @@ -1285,19 +1313,19 @@ msgstr "attention : Tcl ne supporte pas l'encodage '%s'." #: lib/commit.tcl:221 msgid "Calling pre-commit hook..." -msgstr "Appel du programme externe d'avant commit..." +msgstr "Lancement de l'action d'avant-commit..." #: lib/commit.tcl:236 msgid "Commit declined by pre-commit hook." -msgstr "Commit refusé par le programme externe d'avant commit." +msgstr "Commit refusé par l'action d'avant-commit." #: lib/commit.tcl:259 msgid "Calling commit-msg hook..." -msgstr "Appel du programme externe de message de commit..." +msgstr "Lancement de l'action \"message de commit\"..." #: lib/commit.tcl:274 msgid "Commit declined by commit-msg hook." -msgstr "Commit refusé par le programme externe de message de commit." +msgstr "Commit refusé par l'action \"message de commit\"." #: lib/commit.tcl:287 msgid "Committing changes..." @@ -1406,7 +1434,7 @@ msgid "" "\n" "Compress the database now?" msgstr "" -"Ce référentiel comprend actuellement environ %i objets ayant leur fichier " +"Ce dépôt comprend actuellement environ %i objets ayant leur fichier " "particulier.\n" "\n" "Pour conserver une performance optimale, il est fortement recommandé de " @@ -1420,7 +1448,7 @@ msgstr "" msgid "Invalid date from Git: %s" msgstr "Date invalide de Git : %s" -#: lib/diff.tcl:42 +#: lib/diff.tcl:44 #, tcl-format msgid "" "No differences detected.\n" @@ -1443,39 +1471,47 @@ msgstr "" "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 +#: lib/diff.tcl:83 #, tcl-format msgid "Loading diff of %s..." msgstr "Chargement des différences de %s..." -#: lib/diff.tcl:114 lib/diff.tcl:184 +#: lib/diff.tcl:116 lib/diff.tcl:190 #, tcl-format msgid "Unable to display %s" msgstr "Impossible d'afficher %s" -#: lib/diff.tcl:115 +#: lib/diff.tcl:117 msgid "Error loading file:" msgstr "Erreur lors du chargement du fichier :" -#: lib/diff.tcl:122 +#: lib/diff.tcl:124 msgid "Git Repository (subproject)" -msgstr "Référentiel Git (sous projet)" +msgstr "Dépôt Git (sous projet)" -#: lib/diff.tcl:134 +#: lib/diff.tcl:136 msgid "* Binary file (not showing content)." msgstr "* Fichier binaire (pas d'apperçu du contenu)." -#: lib/diff.tcl:185 +#: lib/diff.tcl:191 msgid "Error loading diff:" msgstr "Erreur lors du chargement des différences :" -#: lib/diff.tcl:303 +#: lib/diff.tcl:313 msgid "Failed to unstage selected hunk." -msgstr "La suppression dans le pré-commit de la section sélectionnée a échouée." +msgstr "Échec lors de la désindexation de la section sélectionnée." -#: lib/diff.tcl:310 +#: lib/diff.tcl:320 msgid "Failed to stage selected hunk." -msgstr "Le pré-commit de la section sélectionnée a échoué." +msgstr "Échec lors de l'indexation de la section." + +#: lib/diff.tcl:386 +msgid "Failed to unstage selected line." +msgstr "Échec lors de la désindexation de la ligne sélectionnée." + +#: lib/diff.tcl:394 +msgid "Failed to stage selected line." +msgstr "Échec lors de l'indexation de la ligne." #: lib/error.tcl:20 lib/error.tcl:114 msgid "error" @@ -1491,17 +1527,19 @@ 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." +msgstr "Impossible de dévérouiller l'index." #: lib/index.tcl:15 msgid "Index Error" -msgstr "Erreur de pré-commit" +msgstr "Erreur de l'index" #: 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." +msgstr "" +"Échec de la mise à jour de l'index. Une resynchronisation va être lancée " +"automatiquement." #: lib/index.tcl:27 msgid "Continue" @@ -1509,12 +1547,12 @@ msgstr "Continuer" #: lib/index.tcl:31 msgid "Unlock Index" -msgstr "Dévérouiller le pré-commit" +msgstr "Déverouiller l'index" #: lib/index.tcl:282 #, tcl-format msgid "Unstaging %s from commit" -msgstr "Supprimer %s du commit" +msgstr "Désindexation de: %s" #: lib/index.tcl:313 msgid "Ready to commit." @@ -1523,23 +1561,23 @@ msgstr "Prêt à être commité." #: lib/index.tcl:326 #, tcl-format msgid "Adding %s" -msgstr "Ajouter %s" +msgstr "Ajout de %s" #: lib/index.tcl:381 #, tcl-format msgid "Revert changes in file %s?" -msgstr "Inverser les modifications dans le fichier %s ? " +msgstr "Annuler 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 ?" +msgstr "Annuler les modifications dans ces %i fichiers ?" #: lib/index.tcl:391 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." +"Toutes les modifications non-indexées seront définitivement perdues par " +"l'annulation." #: lib/index.tcl:394 msgid "Do Nothing" @@ -1551,7 +1589,7 @@ msgid "" "\n" "You must finish amending this commit before starting any type of merge.\n" msgstr "" -"Impossible de fucionner pendant une correction.\n" +"Impossible de fusionner pendant une correction.\n" "\n" "Vous devez finir de corriger ce commit avant de lancer une quelconque " "fusion.\n" @@ -1566,9 +1604,9 @@ msgid "" "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" +"dépôt.\n" "\n" -"Un autre programme Git a modifié ce référentiel depuis la dernière " +"Un autre programme Git a modifié ce dépôt depuis la dernière " "synchronisation. Une resynchronisation doit être effectuée avant de pouvoir " "fusionner de nouveau.\n" "\n" @@ -1588,8 +1626,8 @@ msgstr "" "\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 " +"Vous devez les résoudre, puis indexer le fichier, et enfin commiter pour " +"terminer la fusion courante. Seulement à ce moment là sera-t-il possible " "d'effectuer une nouvelle fusion.\n" #: lib/merge.tcl:54 @@ -1685,11 +1723,11 @@ msgstr "Abandon" msgid "files reset" msgstr "fichiers réinitialisés" -#: lib/merge.tcl:265 +#: lib/merge.tcl:266 msgid "Abort failed." msgstr "L'abandon a échoué." -#: lib/merge.tcl:267 +#: lib/merge.tcl:268 msgid "Abort completed. Ready." msgstr "Abandon teminé. Prêt." @@ -1704,11 +1742,11 @@ msgstr "Sauvegarder" #: lib/option.tcl:109 #, tcl-format msgid "%s Repository" -msgstr "Référentiel de %s" +msgstr "Dépôt: %s" #: lib/option.tcl:110 msgid "Global (All Repositories)" -msgstr "Globales (tous les référentiels)" +msgstr "Globales (tous les dépôts)" #: lib/option.tcl:116 msgid "User Name" @@ -1736,56 +1774,76 @@ msgstr "Faire confiance aux dates de modification de fichiers " #: lib/option.tcl:124 msgid "Prune Tracking Branches During Fetch" -msgstr "Nettoyer les branches de suivi pendant la récupération" +msgstr "Purger les branches de suivi pendant la récupération" #: lib/option.tcl:125 msgid "Match Tracking Branches" msgstr "Faire correspondre les branches de suivi" #: lib/option.tcl:126 +msgid "Blame Copy Only On Changed Files" +msgstr "Annoter les copies seulement sur fichiers modifiés" + +#: lib/option.tcl:127 +msgid "Minimum Letters To Blame Copy On" +msgstr "Minimum de caratères pour annoter une copie" + +#: lib/option.tcl:128 msgid "Number of Diff Context Lines" msgstr "Nombre de lignes de contexte dans les diffs" -#: lib/option.tcl:127 +#: lib/option.tcl:129 msgid "Commit Message Text Width" msgstr "Largeur du texte de message de commit" -#: lib/option.tcl:128 +#: lib/option.tcl:130 msgid "New Branch Name Template" msgstr "Nouveau modèle de nom de branche" -#: lib/option.tcl:192 +#: lib/option.tcl:194 msgid "Spelling Dictionary:" msgstr "Dictionnaire d'orthographe :" -#: lib/option.tcl:216 +#: lib/option.tcl:218 msgid "Change Font" -msgstr "Modifier les fontes" +msgstr "Modifier les polices" -#: lib/option.tcl:220 +#: lib/option.tcl:222 #, tcl-format msgid "Choose %s" msgstr "Choisir %s" -#: lib/option.tcl:226 +#: lib/option.tcl:228 msgid "pt." msgstr "pt." -#: lib/option.tcl:240 +#: lib/option.tcl:242 msgid "Preferences" msgstr "Préférences" -#: lib/option.tcl:275 +#: lib/option.tcl:277 msgid "Failed to completely save options:" msgstr "La sauvegarde complète des options a échouée :" +#: lib/remote.tcl:165 +msgid "Prune from" +msgstr "Purger de" + +#: lib/remote.tcl:170 +msgid "Fetch from" +msgstr "Récupérer de" + +#: lib/remote.tcl:213 +msgid "Push to" +msgstr "Pousser vers" + #: 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" +msgstr "Dépôt source" #: lib/remote_branch_delete.tcl:50 lib/transport.tcl:123 msgid "Remote:" @@ -1856,25 +1914,13 @@ 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é." +msgstr "Aucun dépôt 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 :" @@ -1908,15 +1954,15 @@ msgstr "La vérification d'orthographe a échouée silentieusement au démarrage msgid "Unrecognized spell checker" msgstr "Vérificateur d'orthographe non reconnu" -#: lib/spellcheck.tcl:180 +#: lib/spellcheck.tcl:186 msgid "No Suggestions" msgstr "Aucune suggestion" -#: lib/spellcheck.tcl:381 +#: lib/spellcheck.tcl:387 msgid "Unexpected EOF from spell checker" -msgstr "Fin de fichier innatendue envoyée par le vérificateur d'orthographe" +msgstr "EOF inattendue envoyée par le vérificateur d'orthographe" -#: lib/spellcheck.tcl:385 +#: lib/spellcheck.tcl:391 msgid "Spell Checker Failed" msgstr "Le vérificateur d'orthographe a échoué" @@ -1938,7 +1984,7 @@ msgstr "Récupération des dernières modifications de %s" #: lib/transport.tcl:18 #, tcl-format msgid "remote prune %s" -msgstr "nettoyer à distance %s" +msgstr "purger à distance %s" #: lib/transport.tcl:19 #, tcl-format @@ -1970,11 +2016,11 @@ msgstr "Branches source" #: lib/transport.tcl:120 msgid "Destination Repository" -msgstr "Référentiel de destination" +msgstr "Dépôt de destination" #: lib/transport.tcl:158 msgid "Transfer Options" -msgstr "Transférer options" +msgstr "Options de transfert" #: lib/transport.tcl:160 msgid "Force overwrite existing branch (may discard changes)" @@ -1988,5 +2034,5 @@ msgstr "Utiliser des petits paquets (pour les connexions lentes)" #: lib/transport.tcl:168 msgid "Include tags" -msgstr "Inclure les marques" +msgstr "Inclure les marques (tags)" diff --git a/git-gui/po/po2msg.sh b/git-gui/po/po2msg.sh index b7c4bf3fdf..1e9f992528 100644 --- a/git-gui/po/po2msg.sh +++ b/git-gui/po/po2msg.sh @@ -11,8 +11,8 @@ proc u2a {s} { foreach i [split $s ""] { scan $i %c c if {$c<128} { - # escape '[', '\' and ']' - if {$c == 0x5b || $c == 0x5d} { + # escape '[', '\', '$' and ']' + if {$c == 0x5b || $c == 0x5d || $c == 0x24} { append res "\\" } append res $i diff --git a/git-stash.sh b/git-stash.sh index e15c12abc3..d799c76378 100755 --- a/git-stash.sh +++ b/git-stash.sh @@ -39,6 +39,7 @@ clear_stash () { create_stash () { stash_msg="$1" + git update-index -q --refresh if no_changes then exit 0 @@ -101,6 +102,7 @@ save_stash () { stash_msg="$*" + git update-index -q --refresh if no_changes then echo 'No local changes to save' @@ -150,6 +152,7 @@ show_stash () { } apply_stash () { + git update-index -q --refresh && git diff-files --quiet --ignore-submodules || die 'Cannot restore on top of a dirty state' diff --git a/index-pack.c b/index-pack.c index 728af7da9c..a6e91fe3ba 100644 --- a/index-pack.c +++ b/index-pack.c @@ -654,7 +654,7 @@ static void parse_pack_objects(unsigned char *sha1) } } -static int write_compressed(int fd, void *in, unsigned int size, uint32_t *obj_crc) +static int write_compressed(struct sha1file *f, void *in, unsigned int size) { z_stream stream; unsigned long maxsize; @@ -674,13 +674,12 @@ static int write_compressed(int fd, void *in, unsigned int size, uint32_t *obj_c deflateEnd(&stream); size = stream.total_out; - write_or_die(fd, out, size); - *obj_crc = crc32(*obj_crc, out, size); + sha1write(f, out, size); free(out); return size; } -static struct object_entry *append_obj_to_pack( +static struct object_entry *append_obj_to_pack(struct sha1file *f, const unsigned char *sha1, void *buf, unsigned long size, enum object_type type) { @@ -696,15 +695,15 @@ static struct object_entry *append_obj_to_pack( s >>= 7; } header[n++] = c; - write_or_die(output_fd, header, n); - obj[0].idx.crc32 = crc32(0, Z_NULL, 0); - obj[0].idx.crc32 = crc32(obj[0].idx.crc32, header, n); + crc32_begin(f); + sha1write(f, header, n); obj[0].size = size; obj[0].hdr_size = n; obj[0].type = type; obj[0].real_type = type; obj[1].idx.offset = obj[0].idx.offset + n; - obj[1].idx.offset += write_compressed(output_fd, buf, size, &obj[0].idx.crc32); + obj[1].idx.offset += write_compressed(f, buf, size); + obj[0].idx.crc32 = crc32_end(f); hashcpy(obj->idx.sha1, sha1); return obj; } @@ -716,7 +715,7 @@ static int delta_pos_compare(const void *_a, const void *_b) return a->obj_no - b->obj_no; } -static void fix_unresolved_deltas(int nr_unresolved) +static void fix_unresolved_deltas(struct sha1file *f, int nr_unresolved) { struct delta_entry **sorted_by_pos; int i, n = 0; @@ -754,8 +753,8 @@ static void fix_unresolved_deltas(int nr_unresolved) if (check_sha1_signature(d->base.sha1, base_obj.data, base_obj.size, typename(type))) die("local object %s is corrupt", sha1_to_hex(d->base.sha1)); - base_obj.obj = append_obj_to_pack(d->base.sha1, base_obj.data, - base_obj.size, type); + base_obj.obj = append_obj_to_pack(f, d->base.sha1, + base_obj.data, base_obj.size, type); link_base_data(NULL, &base_obj); find_delta_children(&d->base, &first, &last); @@ -875,7 +874,7 @@ int main(int argc, char **argv) const char *keep_name = NULL, *keep_msg = NULL; char *index_name_buf = NULL, *keep_name_buf = NULL; struct pack_idx_entry **idx_objects; - unsigned char sha1[20]; + unsigned char pack_sha1[20]; int nongit = 0; setup_git_directory_gently(&nongit); @@ -962,13 +961,15 @@ int main(int argc, char **argv) parse_pack_header(); objects = xmalloc((nr_objects + 1) * sizeof(struct object_entry)); deltas = xmalloc(nr_objects * sizeof(struct delta_entry)); - parse_pack_objects(sha1); + parse_pack_objects(pack_sha1); if (nr_deltas == nr_resolved_deltas) { stop_progress(&progress); /* Flush remaining pack final 20-byte SHA1. */ flush(); } else { if (fix_thin_pack) { + struct sha1file *f; + unsigned char read_sha1[20], tail_sha1[20]; char msg[48]; int nr_unresolved = nr_deltas - nr_resolved_deltas; int nr_objects_initial = nr_objects; @@ -977,12 +978,19 @@ int main(int argc, char **argv) objects = xrealloc(objects, (nr_objects + nr_unresolved + 1) * sizeof(*objects)); - fix_unresolved_deltas(nr_unresolved); + f = sha1fd(output_fd, curr_pack); + fix_unresolved_deltas(f, nr_unresolved); sprintf(msg, "completed with %d local objects", nr_objects - nr_objects_initial); stop_progress_msg(&progress, msg); - fixup_pack_header_footer(output_fd, sha1, - curr_pack, nr_objects); + sha1close(f, tail_sha1, 0); + hashcpy(read_sha1, pack_sha1); + fixup_pack_header_footer(output_fd, pack_sha1, + curr_pack, nr_objects, + read_sha1, consumed_bytes-20); + if (hashcmp(read_sha1, tail_sha1) != 0) + die("Unexpected tail checksum for %s " + "(disk corruption?)", curr_pack); } if (nr_deltas != nr_resolved_deltas) die("pack has %d unresolved deltas", @@ -995,13 +1003,13 @@ int main(int argc, char **argv) idx_objects = xmalloc((nr_objects) * sizeof(struct pack_idx_entry *)); for (i = 0; i < nr_objects; i++) idx_objects[i] = &objects[i].idx; - curr_index = write_idx_file(index_name, idx_objects, nr_objects, sha1); + curr_index = write_idx_file(index_name, idx_objects, nr_objects, pack_sha1); free(idx_objects); final(pack_name, curr_pack, index_name, curr_index, keep_name, keep_msg, - sha1); + pack_sha1); free(objects); free(index_name_buf); free(keep_name_buf); diff --git a/pack-write.c b/pack-write.c index ddcfd37af2..939ed56362 100644 --- a/pack-write.c +++ b/pack-write.c @@ -144,41 +144,93 @@ char *write_idx_file(char *index_name, struct pack_idx_entry **objects, return index_name; } +/* + * Update pack header with object_count and compute new SHA1 for pack data + * associated to pack_fd, and write that SHA1 at the end. That new SHA1 + * is also returned in new_pack_sha1. + * + * If partial_pack_sha1 is non null, then the SHA1 of the existing pack + * (without the header update) is computed and validated against the + * one provided in partial_pack_sha1. The validation is performed at + * partial_pack_offset bytes in the pack file. The SHA1 of the remaining + * data (i.e. from partial_pack_offset to the end) is then computed and + * returned in partial_pack_sha1. + * + * Note that new_pack_sha1 is updated last, so both new_pack_sha1 and + * partial_pack_sha1 can refer to the same buffer if the caller is not + * interested in the resulting SHA1 of pack data above partial_pack_offset. + */ void fixup_pack_header_footer(int pack_fd, - unsigned char *pack_file_sha1, + unsigned char *new_pack_sha1, const char *pack_name, - uint32_t object_count) + uint32_t object_count, + unsigned char *partial_pack_sha1, + off_t partial_pack_offset) { - static const int buf_sz = 128 * 1024; - SHA_CTX c; + int aligned_sz, buf_sz = 8 * 1024; + SHA_CTX old_sha1_ctx, new_sha1_ctx; struct pack_header hdr; char *buf; + SHA1_Init(&old_sha1_ctx); + SHA1_Init(&new_sha1_ctx); + if (lseek(pack_fd, 0, SEEK_SET) != 0) - die("Failed seeking to start: %s", strerror(errno)); + die("Failed seeking to start of %s: %s", pack_name, strerror(errno)); if (read_in_full(pack_fd, &hdr, sizeof(hdr)) != sizeof(hdr)) die("Unable to reread header of %s: %s", pack_name, strerror(errno)); if (lseek(pack_fd, 0, SEEK_SET) != 0) - die("Failed seeking to start: %s", strerror(errno)); + die("Failed seeking to start of %s: %s", pack_name, strerror(errno)); + SHA1_Update(&old_sha1_ctx, &hdr, sizeof(hdr)); hdr.hdr_entries = htonl(object_count); + SHA1_Update(&new_sha1_ctx, &hdr, sizeof(hdr)); write_or_die(pack_fd, &hdr, sizeof(hdr)); - - SHA1_Init(&c); - SHA1_Update(&c, &hdr, sizeof(hdr)); + partial_pack_offset -= sizeof(hdr); buf = xmalloc(buf_sz); + aligned_sz = buf_sz - sizeof(hdr); for (;;) { - ssize_t n = xread(pack_fd, buf, buf_sz); + ssize_t m, n; + m = (partial_pack_sha1 && partial_pack_offset < aligned_sz) ? + partial_pack_offset : aligned_sz; + n = xread(pack_fd, buf, m); if (!n) break; if (n < 0) die("Failed to checksum %s: %s", pack_name, strerror(errno)); - SHA1_Update(&c, buf, n); + SHA1_Update(&new_sha1_ctx, buf, n); + + aligned_sz -= n; + if (!aligned_sz) + aligned_sz = buf_sz; + + if (!partial_pack_sha1) + continue; + + SHA1_Update(&old_sha1_ctx, buf, n); + partial_pack_offset -= n; + if (partial_pack_offset == 0) { + unsigned char sha1[20]; + SHA1_Final(sha1, &old_sha1_ctx); + if (hashcmp(sha1, partial_pack_sha1) != 0) + die("Unexpected checksum for %s " + "(disk corruption?)", pack_name); + /* + * Now let's compute the SHA1 of the remainder of the + * pack, which also means making partial_pack_offset + * big enough not to matter anymore. + */ + SHA1_Init(&old_sha1_ctx); + partial_pack_offset = ~partial_pack_offset; + partial_pack_offset -= MSB(partial_pack_offset, 1); + } } free(buf); - SHA1_Final(pack_file_sha1, &c); - write_or_die(pack_fd, pack_file_sha1, 20); + if (partial_pack_sha1) + SHA1_Final(partial_pack_sha1, &old_sha1_ctx); + SHA1_Final(new_pack_sha1, &new_sha1_ctx); + write_or_die(pack_fd, new_pack_sha1, 20); fsync_or_die(pack_fd, pack_name); } @@ -58,7 +58,7 @@ struct pack_idx_entry { extern char *write_idx_file(char *index_name, struct pack_idx_entry **objects, int nr_objects, unsigned char *sha1); extern int check_pack_crc(struct packed_git *p, struct pack_window **w_curs, off_t offset, off_t len, unsigned int nr); extern int verify_pack(struct packed_git *); -extern void fixup_pack_header_footer(int, unsigned char *, const char *, uint32_t); +extern void fixup_pack_header_footer(int, unsigned char *, const char *, uint32_t, unsigned char *, off_t); extern char *index_pack_lockfile(int fd); #define PH_ERROR_EOF (-1) diff --git a/t/t4019-diff-wserror.sh b/t/t4019-diff-wserror.sh index 7eae1f4500..84a1fe3115 100755 --- a/t/t4019-diff-wserror.sh +++ b/t/t4019-diff-wserror.sh @@ -178,4 +178,16 @@ test_expect_success 'trailing empty lines (2)' ' ' +test_expect_success 'do not color trailing cr in context' ' + git config --unset core.whitespace + rm -f .gitattributes && + echo AAAQ | tr Q "\015" >G && + git add G && + echo BBBQ | tr Q "\015" >>G + git diff --color G | tr "\015" Q >output && + grep "BBB.*${blue_grep}Q" output && + grep "AAA.*\[mQ" output + +' + test_done diff --git a/t/t7201-co.sh b/t/t7201-co.sh index 2e2b3bf53d..fbec70d3c6 100755 --- a/t/t7201-co.sh +++ b/t/t7201-co.sh @@ -337,4 +337,26 @@ test_expect_success \ test refs/heads/delete-me = "$(git symbolic-ref HEAD)" && test_must_fail git checkout --track -b track' +test_expect_success 'checkout an unmerged path should fail' ' + rm -f .git/index && + O=$(echo original | git hash-object -w --stdin) && + A=$(echo ourside | git hash-object -w --stdin) && + B=$(echo theirside | git hash-object -w --stdin) && + ( + echo "100644 $A 0 fild" && + echo "100644 $O 1 file" && + echo "100644 $A 2 file" && + echo "100644 $B 3 file" && + echo "100644 $A 0 filf" + ) | git update-index --index-info && + echo "none of the above" >sample && + cat sample >fild && + cat sample >file && + cat sample >filf && + test_must_fail git checkout fild file filf && + test_cmp sample fild && + test_cmp sample filf && + test_cmp sample file +' + test_done diff --git a/t/t9400-git-cvsserver-server.sh b/t/t9400-git-cvsserver-server.sh index 4b91f8d4c4..c1850d2923 100755 --- a/t/t9400-git-cvsserver-server.sh +++ b/t/t9400-git-cvsserver-server.sh @@ -488,4 +488,17 @@ test_expect_success 'cvs co -c (shows module database)' ' ! grep -v "^master[ ]\+master$" < out ' +#------------ +# CVS ANNOTATE +#------------ + +cd "$WORKDIR" +test_expect_success 'cvs annotate' ' + cd cvswork && + GIT_CONFIG="$git_config" cvs annotate merge >../out && + sed -e "s/ .*//" ../out >../actual && + for i in 3 1 1 1 1 1 1 1 2 4; do echo 1.$i; done >../expect && + test_cmp ../expect ../actual +' + test_done |