diff options
54 files changed, 794 insertions, 751 deletions
diff --git a/Documentation/RelNotes/2.7.0.txt b/Documentation/RelNotes/2.7.0.txt index 516d9f33c..239fe9f6b 100644 --- a/Documentation/RelNotes/2.7.0.txt +++ b/Documentation/RelNotes/2.7.0.txt @@ -55,6 +55,9 @@ UI, Workflows & Features * "git worktree" learned a "list" subcommand. + * "git clone --dissociate" learned that it can be used even when + "--reference" was not used at the same time. + Performance, Internal Implementation, Development Support etc. @@ -179,8 +182,11 @@ notes for details). * "git rebase -i" had a minor regression recently, which stopped considering a line that begins with an indented '#' in its insn - sheet not a comment, which is now fixed. - (merge 1db168e gr/rebase-i-drop-warn later to maint). + sheet not a comment. Further, the code was still too picky on + Windows where CRLF left by the editor is turned into a trailing CR + on the line read via the "read" built-in command of bash. Both of + these issues are now fixed. + (merge 39743cf gr/rebase-i-drop-warn later to maint). * After "git checkout --detach", "git status" reported a fairly useless "HEAD detached at HEAD", instead of saying at which exact @@ -278,6 +284,26 @@ notes for details). borrowing cache entries and restructuring the API somewhat. (merge 41284eb dt/name-hash-dir-entry-fix later to maint). + * "git merge-file" tried to signal how many conflicts it found, which + obviously would not work well when there are too many of them. + (merge e34f802 jk/merge-file-exit-code later to maint). + + * The error message from "git blame --contents --reverse" incorrectly + talked about "--contents --children". + (merge 9526197 mk/blame-error-message later to maint). + + * "git imap-send" did not compile well with older version of cURL library. + (merge 71d9257 js/imap-send-curl-compilation-fix later to maint). + + * Merging a branch that removes a path and another that changes the + mode bits on the same path should have conflicted at the path, but + it didn't and silently favoured the removal. + (merge 72fac66 jk/delete-modechange-conflict later to maint). + + * "git --literal-pathspecs add -u/-A" without any command line + argument misbehaved ever since Git 2.0. + (merge 29abb33 jc/add-u-A-default-to-top later to maint). + * Code clean-up, minor fixes etc. (merge 15ed07d jc/rerere later to maint). (merge e7a7401 pt/pull-builtin later to maint). @@ -292,3 +318,6 @@ notes for details). (merge 3b19dba jc/em-dash-in-doc later to maint). (merge f3f38c7 jc/everyday-markup later to maint). (merge 77d5f71 xf/user-manual-markup later to maint). + (merge b2af482 xf/user-manual-ff later to maint). + (merge e510ab8 rs/pop-commit later to maint). + (merge fdcdb77 js/misc-fixes later to maint). diff --git a/Documentation/git-clone.txt b/Documentation/git-clone.txt index f1f2a3f7e..6bf000dac 100644 --- a/Documentation/git-clone.txt +++ b/Documentation/git-clone.txt @@ -104,8 +104,13 @@ objects from the source repository into a pack in the cloned repository. --dissociate:: Borrow the objects from reference repositories specified with the `--reference` options only to reduce network - transfer and stop borrowing from them after a clone is made - by making necessary local copies of borrowed objects. + transfer, and stop borrowing from them after a clone is made + by making necessary local copies of borrowed objects. This + option can also be used when cloning locally from a + repository that already borrows objects from another + repository--the new repository will borrow objects from the + same repository, and this option can be used to stop the + borrowing. --quiet:: -q:: diff --git a/Documentation/git-merge-file.txt b/Documentation/git-merge-file.txt index d2fc12ec7..f85603261 100644 --- a/Documentation/git-merge-file.txt +++ b/Documentation/git-merge-file.txt @@ -41,7 +41,8 @@ lines from `<other-file>`, or lines from both respectively. The length of the conflict markers can be given with the `--marker-size` option. The exit value of this program is negative on error, and the number of -conflicts otherwise. If the merge was clean, the exit value is 0. +conflicts otherwise (truncated to 127 if there are more than that many +conflicts). If the merge was clean, the exit value is 0. 'git merge-file' is designed to be a minimal clone of RCS 'merge'; that is, it implements all of RCS 'merge''s functionality which is needed by diff --git a/Documentation/user-manual.txt b/Documentation/user-manual.txt index 764a270c8..1c790ac74 100644 --- a/Documentation/user-manual.txt +++ b/Documentation/user-manual.txt @@ -1431,11 +1431,11 @@ differently. Normally, a merge results in a merge commit, with two parents, one pointing at each of the two lines of development that were merged. -However, if the current branch is a descendant of the other--so every -commit present in the one is already contained in the other--then Git -just performs a "fast-forward"; the head of the current branch is moved -forward to point at the head of the merged-in branch, without any new -commits being created. +However, if the current branch is an ancestor of the other--so every commit +present in the current branch is already contained in the other branch--then Git +just performs a "fast-forward"; the head of the current branch is moved forward +to point at the head of the merged-in branch, without any new commits being +created. [[fixing-mistakes]] Fixing mistakes diff --git a/builtin/add.c b/builtin/add.c index b2a5c57f0..145f06ef9 100644 --- a/builtin/add.c +++ b/builtin/add.c @@ -336,14 +336,8 @@ int cmd_add(int argc, const char **argv, const char *prefix) if (!show_only && ignore_missing) die(_("Option --ignore-missing can only be used together with --dry-run")); - if ((0 < addremove_explicit || take_worktree_changes) && !argc) { - static const char *whole[2] = { ":/", NULL }; - argc = 1; - argv = whole; - } - add_new_files = !take_worktree_changes && !refresh_only; - require_pathspec = !take_worktree_changes; + require_pathspec = !(take_worktree_changes || (0 < addremove_explicit)); hold_locked_index(&lock_file, 1); diff --git a/builtin/blame.c b/builtin/blame.c index 6fc7bff9a..3b80e8fd7 100644 --- a/builtin/blame.c +++ b/builtin/blame.c @@ -2691,7 +2691,7 @@ parse_done: sb.commits.compare = compare_commits_by_commit_date; } else if (contents_from) - die("--contents and --children do not blend well."); + die("--contents and --reverse do not blend well."); else if (revs.first_parent_only) die("combining --first-parent and --reverse is not supported"); else { diff --git a/builtin/clone.c b/builtin/clone.c index 9eaecd9a7..caae43e7a 100644 --- a/builtin/clone.c +++ b/builtin/clone.c @@ -801,11 +801,15 @@ static void write_refspec_config(const char *src_ref_prefix, static void dissociate_from_references(void) { static const char* argv[] = { "repack", "-a", "-d", NULL }; + char *alternates = git_pathdup("objects/info/alternates"); - if (run_command_v_opt(argv, RUN_GIT_CMD|RUN_COMMAND_NO_STDIN)) - die(_("cannot repack to clean up")); - if (unlink(git_path("objects/info/alternates")) && errno != ENOENT) - die_errno(_("cannot unlink temporary alternates file")); + if (!access(alternates, F_OK)) { + if (run_command_v_opt(argv, RUN_GIT_CMD|RUN_COMMAND_NO_STDIN)) + die(_("cannot repack to clean up")); + if (unlink(alternates) && errno != ENOENT) + die_errno(_("cannot unlink temporary alternates file")); + } + free(alternates); } int cmd_clone(int argc, const char **argv, const char *prefix) @@ -954,10 +958,6 @@ int cmd_clone(int argc, const char **argv, const char *prefix) if (option_reference.nr) setup_reference(); - else if (option_dissociate) { - warning(_("--dissociate given, but there is no --reference")); - option_dissociate = 0; - } fetch_pattern = value.buf; refspec = parse_fetch_refspec(1, &fetch_pattern); diff --git a/builtin/fmt-merge-msg.c b/builtin/fmt-merge-msg.c index 4ba7f282a..846004b83 100644 --- a/builtin/fmt-merge-msg.c +++ b/builtin/fmt-merge-msg.c @@ -537,7 +537,7 @@ static void fmt_merge_msg_sigs(struct strbuf *out) static void find_merge_parents(struct merge_parents *result, struct strbuf *in, unsigned char *head) { - struct commit_list *parents, *next; + struct commit_list *parents; struct commit *head_commit; int pos = 0, i, j; @@ -576,13 +576,10 @@ static void find_merge_parents(struct merge_parents *result, parents = reduce_heads(parents); while (parents) { + struct commit *cmit = pop_commit(&parents); for (i = 0; i < result->nr; i++) - if (!hashcmp(result->item[i].commit, - parents->item->object.sha1)) + if (!hashcmp(result->item[i].commit, cmit->object.sha1)) result->item[i].used = 1; - next = parents->next; - free(parents); - parents = next; } for (i = j = 0; i < result->nr; i++) { diff --git a/builtin/gc.c b/builtin/gc.c index b677923ff..df3e45444 100644 --- a/builtin/gc.c +++ b/builtin/gc.c @@ -240,7 +240,7 @@ static const char *lock_repo_for_gc(int force, pid_t* ret_pid) * running. */ time(NULL) - st.st_mtime <= 12 * 3600 && - fscanf(fp, "%"PRIuMAX" %127c", &pid, locking_host) == 2 && + fscanf(fp, "%"SCNuMAX" %127c", &pid, locking_host) == 2 && /* be gentle to concurrent "gc" on remote hosts */ (strcmp(locking_host, my_host) || !kill(pid, 0) || errno == EPERM); if (fp != NULL) diff --git a/builtin/merge-file.c b/builtin/merge-file.c index 50d0bc873..55447053f 100644 --- a/builtin/merge-file.c +++ b/builtin/merge-file.c @@ -104,5 +104,8 @@ int cmd_merge_file(int argc, const char **argv, const char *prefix) free(result.ptr); } + if (ret > 127) + ret = 127; + return ret; } diff --git a/builtin/merge.c b/builtin/merge.c index 977ffff28..bbf3110f8 100644 --- a/builtin/merge.c +++ b/builtin/merge.c @@ -1019,7 +1019,7 @@ static struct commit_list *reduce_parents(struct commit *head_commit, int *head_subsumed, struct commit_list *remoteheads) { - struct commit_list *parents, *next, **remotes = &remoteheads; + struct commit_list *parents, **remotes; /* * Is the current HEAD reachable from another commit being @@ -1033,16 +1033,14 @@ static struct commit_list *reduce_parents(struct commit *head_commit, /* Find what parents to record by checking independent ones. */ parents = reduce_heads(remoteheads); - for (remoteheads = NULL, remotes = &remoteheads; - parents; - parents = next) { - struct commit *commit = parents->item; - next = parents->next; + remoteheads = NULL; + remotes = &remoteheads; + while (parents) { + struct commit *commit = pop_commit(&parents); if (commit == head_commit) *head_subsumed = 0; else remotes = &commit_list_insert(commit, remotes)->next; - free(parents); } return remoteheads; } diff --git a/builtin/reflog.c b/builtin/reflog.c index f96ca2a27..cf1145e63 100644 --- a/builtin/reflog.c +++ b/builtin/reflog.c @@ -218,7 +218,6 @@ static int keep_entry(struct commit **it, unsigned char *sha1) */ static void mark_reachable(struct expire_reflog_policy_cb *cb) { - struct commit *commit; struct commit_list *pending; unsigned long expire_limit = cb->mark_limit; struct commit_list *leftover = NULL; @@ -228,11 +227,8 @@ static void mark_reachable(struct expire_reflog_policy_cb *cb) pending = cb->mark_list; while (pending) { - struct commit_list *entry = pending; struct commit_list *parent; - pending = entry->next; - commit = entry->item; - free(entry); + struct commit *commit = pop_commit(&pending); if (commit->object.flags & REACHABLE) continue; if (parse_commit(commit)) diff --git a/builtin/rev-parse.c b/builtin/rev-parse.c index 02d747dcb..e92a782f7 100644 --- a/builtin/rev-parse.c +++ b/builtin/rev-parse.c @@ -281,11 +281,8 @@ static int try_difference(const char *arg) b = lookup_commit_reference(end); exclude = get_merge_bases(a, b); while (exclude) { - struct commit_list *n = exclude->next; - show_rev(REVERSED, - exclude->item->object.sha1,NULL); - free(exclude); - exclude = n; + struct commit *commit = pop_commit(&exclude); + show_rev(REVERSED, commit->object.sha1, NULL); } } *dotdot = '.'; diff --git a/builtin/show-branch.c b/builtin/show-branch.c index 092b59b0b..ac5141df8 100644 --- a/builtin/show-branch.c +++ b/builtin/show-branch.c @@ -53,17 +53,6 @@ static struct commit *interesting(struct commit_list *list) return NULL; } -static struct commit *pop_one_commit(struct commit_list **list_p) -{ - struct commit *commit; - struct commit_list *list; - list = *list_p; - commit = list->item; - *list_p = list->next; - free(list); - return commit; -} - struct commit_name { const char *head_name; /* which head's ancestor? */ int generation; /* how many parents away from head_name */ @@ -213,7 +202,7 @@ static void join_revs(struct commit_list **list_p, while (*list_p) { struct commit_list *parents; int still_interesting = !!interesting(*list_p); - struct commit *commit = pop_one_commit(list_p); + struct commit *commit = pop_commit(list_p); int flags = commit->object.flags & all_mask; if (!still_interesting && extra <= 0) @@ -504,7 +493,7 @@ static int show_merge_base(struct commit_list *seen, int num_rev) int exit_status = 1; while (seen) { - struct commit *commit = pop_one_commit(&seen); + struct commit *commit = pop_commit(&seen); int flags = commit->object.flags & all_mask; if (!(flags & UNINTERESTING) && ((flags & all_revs) == all_revs)) { @@ -929,7 +918,7 @@ int cmd_show_branch(int ac, const char **av, const char *prefix) all_revs = all_mask & ~((1u << REV_SHIFT) - 1); while (seen) { - struct commit *commit = pop_one_commit(&seen); + struct commit *commit = pop_commit(&seen); int this_flag = commit->object.flags; int is_merge_point = ((this_flag & all_revs) == all_revs); @@ -455,11 +455,8 @@ struct commit_list *copy_commit_list(struct commit_list *list) void free_commit_list(struct commit_list *list) { - while (list) { - struct commit_list *temp = list; - list = temp->next; - free(temp); - } + while (list) + pop_commit(&list); } struct commit_list * commit_list_insert_by_date(struct commit *item, struct commit_list **list) @@ -505,12 +502,8 @@ void commit_list_sort_by_date(struct commit_list **list) struct commit *pop_most_recent_commit(struct commit_list **list, unsigned int mark) { - struct commit *ret = (*list)->item; + struct commit *ret = pop_commit(list); struct commit_list *parents = ret->parents; - struct commit_list *old = *list; - - *list = (*list)->next; - free(old); while (parents) { struct commit *commit = parents->item; @@ -861,11 +854,9 @@ static struct commit_list *merge_bases_many(struct commit *one, int n, struct co list = paint_down_to_common(one, n, twos); while (list) { - struct commit_list *next = list->next; - if (!(list->item->object.flags & STALE)) - commit_list_insert_by_date(list->item, &result); - free(list); - list = next; + struct commit *commit = pop_commit(&list); + if (!(commit->object.flags & STALE)) + commit_list_insert_by_date(commit, &result); } return result; } @@ -1546,13 +1537,9 @@ int commit_tree_extended(const char *msg, size_t msg_len, * if everything else stays the same. */ while (parents) { - struct commit_list *next = parents->next; - struct commit *parent = parents->item; - + struct commit *parent = pop_commit(&parents); strbuf_addf(&buffer, "parent %s\n", sha1_to_hex(parent->object.sha1)); - free(parents); - parents = next; } /* Person/date information */ diff --git a/compat/regex/regcomp.c b/compat/regex/regcomp.c index 06f308870..fba598639 100644 --- a/compat/regex/regcomp.c +++ b/compat/regex/regcomp.c @@ -18,6 +18,8 @@ Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#include <stdint.h> + static reg_errcode_t re_compile_internal (regex_t *preg, const char * pattern, size_t length, reg_syntax_t syntax); static void re_compile_fastmap_iter (regex_t *bufp, @@ -2577,7 +2579,7 @@ parse_dup_op (bin_tree_t *elem, re_string_t *regexp, re_dfa_t *dfa, old_tree = NULL; if (elem->token.type == SUBEXP) - postorder (elem, mark_opt_subexp, (void *) (long) elem->token.opr.idx); + postorder (elem, mark_opt_subexp, (void *) (intptr_t) elem->token.opr.idx); tree = create_tree (dfa, elem, NULL, (end == -1 ? OP_DUP_ASTERISK : OP_ALT)); if (BE (tree == NULL, 0)) @@ -3806,7 +3808,7 @@ create_token_tree (re_dfa_t *dfa, bin_tree_t *left, bin_tree_t *right, static reg_errcode_t mark_opt_subexp (void *extra, bin_tree_t *node) { - int idx = (int) (long) extra; + int idx = (int) (intptr_t) extra; if (node->token.type == SUBEXP && node->token.opr.idx == idx) node->token.opt_subexp = 1; diff --git a/git-compat-util.h b/git-compat-util.h index 88964f788..8e3986791 100644 --- a/git-compat-util.h +++ b/git-compat-util.h @@ -296,6 +296,10 @@ extern char *gitbasename(char *); #define PRIuMAX "llu" #endif +#ifndef SCNuMAX +#define SCNuMAX PRIuMAX +#endif + #ifndef PRIu32 #define PRIu32 "u" #endif @@ -568,7 +572,7 @@ extern int git_lstat(const char *, struct stat *); #endif #define DEFAULT_PACKED_GIT_LIMIT \ - ((1024L * 1024L) * (sizeof(void*) >= 8 ? 8192 : 256)) + ((1024L * 1024L) * (size_t)(sizeof(void*) >= 8 ? 8192 : 256)) #ifdef NO_PREAD #define pread git_pread diff --git a/git-difftool.perl b/git-difftool.perl index 7df7c8a9a..488d14b15 100755 --- a/git-difftool.perl +++ b/git-difftool.perl @@ -70,9 +70,7 @@ sub use_wt_file my ($repo, $workdir, $file, $sha1) = @_; my $null_sha1 = '0' x 40; - if (! -e "$workdir/$file") { - # If the file doesn't exist in the working tree, we cannot - # use it. + if (-l "$workdir/$file" || ! -e _) { return (0, $null_sha1); } diff --git a/git-merge-one-file.sh b/git-merge-one-file.sh index 07dfeb8df..cdc02af51 100755 --- a/git-merge-one-file.sh +++ b/git-merge-one-file.sh @@ -38,6 +38,14 @@ case "${1:-.}${2:-.}${3:-.}" in # Deleted in both or deleted in one and unchanged in the other # "$1.." | "$1.$1" | "$1$1.") + if { test -z "$6" && test "$5" != "$7"; } || + { test -z "$7" && test "$5" != "$6"; } + then + echo "ERROR: File $4 deleted on one branch but had its" >&2 + echo "ERROR: permissions changed on the other." >&2 + exit 1 + fi + if test -n "$2" then echo "Removing $4" diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh index d65c06eff..30edb1792 100644 --- a/git-rebase--interactive.sh +++ b/git-rebase--interactive.sh @@ -77,6 +77,10 @@ amend="$state_dir"/amend rewritten_list="$state_dir"/rewritten-list rewritten_pending="$state_dir"/rewritten-pending +# Work around Git for Windows' Bash whose "read" does not strip CRLF +# and leaves CR at the end instead. +cr=$(printf "\015") + strategy_args= if test -n "$do_merge" then @@ -518,6 +522,10 @@ do_next () { "$comment_char"*|''|noop|drop|d) mark_action_done ;; + "$cr") + # Work around CR left by "read" (e.g. with Git for Windows' Bash). + mark_action_done + ;; pick|p) comment_for_reflog pick @@ -896,6 +904,10 @@ check_bad_cmd_and_sha () { "$comment_char"*|''|noop|x|exec) # Doesn't expect a SHA-1 ;; + "$cr") + # Work around CR left by "read" (e.g. with Git for + # Windows' Bash). + ;; pick|p|drop|d|reword|r|edit|e|squash|s|fixup|f) if ! check_commit_sha "${rest%%[ ]*}" "$lineno" "$1" then diff --git a/gitk-git/gitk b/gitk-git/gitk index 2028b554f..fcc606eab 100755 --- a/gitk-git/gitk +++ b/gitk-git/gitk @@ -12452,8 +12452,8 @@ if {$cmdline_files ne {} || $revtreeargs ne {} || $revtreeargscmd ne {}} { set viewchanged(1) 0 set vdatemode(1) 0 addviewmenu 1 - .bar.view entryconf [mca "Edit view..."] -state normal - .bar.view entryconf [mca "Delete view"] -state normal + .bar.view entryconf [mca "&Edit view..."] -state normal + .bar.view entryconf [mca "&Delete view"] -state normal } if {[info exists permviews]} { diff --git a/gitk-git/po/bg.po b/gitk-git/po/bg.po index 61073ebf6..909a56463 100644 --- a/gitk-git/po/bg.po +++ b/gitk-git/po/bg.po @@ -89,71 +89,71 @@ msgid "Cancel" msgstr "Отказ" #: gitk:2069 -msgid "Update" +msgid "&Update" msgstr "Обновяване" #: gitk:2070 -msgid "Reload" +msgid "&Reload" msgstr "Презареждане" #: gitk:2071 -msgid "Reread references" +msgid "Reread re&ferences" msgstr "Наново прочитане на настройките" #: gitk:2072 -msgid "List references" +msgid "&List references" msgstr "Изброяване на указателите" #: gitk:2074 -msgid "Start git gui" +msgid "Start git &gui" msgstr "Стартиране на „git gui“" #: gitk:2076 -msgid "Quit" +msgid "&Quit" msgstr "Спиране на програмата" #: gitk:2068 -msgid "File" +msgid "&File" msgstr "Файл" #: gitk:2080 -msgid "Preferences" +msgid "&Preferences" msgstr "Настройки" #: gitk:2079 -msgid "Edit" +msgid "&Edit" msgstr "Редактиране" #: gitk:2084 -msgid "New view..." +msgid "&New view..." msgstr "Нов изглед…" #: gitk:2085 -msgid "Edit view..." +msgid "&Edit view..." msgstr "Редактиране на изгледа…" #: gitk:2086 -msgid "Delete view" +msgid "&Delete view" msgstr "Изтриване на изгледа" #: gitk:2088 gitk:4043 -msgid "All files" +msgid "&All files" msgstr "Всички файлове" #: gitk:2083 gitk:4067 -msgid "View" +msgid "&View" msgstr "Изглед" #: gitk:2093 gitk:2103 gitk:3012 -msgid "About gitk" +msgid "&About gitk" msgstr "Относно gitk" #: gitk:2094 gitk:2108 -msgid "Key bindings" +msgid "&Key bindings" msgstr "Клавишни комбинации" #: gitk:2092 gitk:2107 -msgid "Help" +msgid "&Help" msgstr "Помощ" #: gitk:2185 gitk:8652 diff --git a/gitk-git/po/ca.po b/gitk-git/po/ca.po index 976037a64..5ad066f7c 100644 --- a/gitk-git/po/ca.po +++ b/gitk-git/po/ca.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: gitk\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-17 14:32+1000\n" -"PO-Revision-Date: 2015-02-01 22:49-0700\n" +"PO-Revision-Date: 2015-10-05 22:23-0600\n" "Last-Translator: Alex Henrie <alexhenrie24@gmail.com>\n" "Language-Team: Catalan\n" "Language: ca\n" @@ -17,7 +17,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 1.7.3\n" +"X-Generator: Poedit 1.8.5\n" #: gitk:140 msgid "Couldn't get list of unmerged files:" @@ -91,71 +91,71 @@ msgid "Cancel" msgstr "Cancel·la" #: gitk:2069 -msgid "Update" +msgid "&Update" msgstr "Actualitza" #: gitk:2070 -msgid "Reload" +msgid "&Reload" msgstr "Recarrega" #: gitk:2071 -msgid "Reread references" +msgid "Reread re&ferences" msgstr "Rellegeix les referències" #: gitk:2072 -msgid "List references" +msgid "&List references" msgstr "Llista les referències" #: gitk:2074 -msgid "Start git gui" +msgid "Start git &gui" msgstr "Inicia el git gui" #: gitk:2076 -msgid "Quit" +msgid "&Quit" msgstr "Surt" #: gitk:2068 -msgid "File" +msgid "&File" msgstr "Fitxer" #: gitk:2080 -msgid "Preferences" +msgid "&Preferences" msgstr "Preferències" #: gitk:2079 -msgid "Edit" +msgid "&Edit" msgstr "Edita" #: gitk:2084 -msgid "New view..." +msgid "&New view..." msgstr "Vista nova..." #: gitk:2085 -msgid "Edit view..." +msgid "&Edit view..." msgstr "Edita la vista..." #: gitk:2086 -msgid "Delete view" -msgstr "Suprimeix vista" +msgid "&Delete view" +msgstr "Suprimeix la vista" #: gitk:2088 gitk:4043 -msgid "All files" +msgid "&All files" msgstr "Tots els fitxers" #: gitk:2083 gitk:4067 -msgid "View" +msgid "&View" msgstr "Vista" #: gitk:2093 gitk:2103 gitk:3012 -msgid "About gitk" +msgid "&About gitk" msgstr "Quant al gitk" #: gitk:2094 gitk:2108 -msgid "Key bindings" +msgid "&Key bindings" msgstr "Associacions de tecles" #: gitk:2092 gitk:2107 -msgid "Help" +msgid "&Help" msgstr "Ajuda" #: gitk:2185 gitk:8652 @@ -330,7 +330,7 @@ msgstr "Elimina aquesta branca" #: gitk:2649 msgid "Copy branch name" -msgstr "" +msgstr "Copia el nom de branca" #: gitk:2656 msgid "Highlight this too" @@ -350,7 +350,7 @@ msgstr "Culpabilitat de la comissió mare" #: gitk:2660 msgid "Copy path" -msgstr "" +msgstr "Copia el camí" #: gitk:2667 msgid "Show origin of this line" @@ -408,11 +408,11 @@ msgstr "<Fi>\t\tVés a l'última comissió" #: gitk:3052 msgid "<Up>, p, k\tMove up one commit" -msgstr "<Amunt>, p, k\tMou-te una comissió amunt" +msgstr "<Amunt>, p, k\tMou-te cap amunt per una comissió" #: gitk:3053 msgid "<Down>, n, j\tMove down one commit" -msgstr "<Avall>, n, j\tMou-te una comissió avall" +msgstr "<Avall>, n, j\tMou-te cap avall per una comissió" #: gitk:3054 msgid "<Left>, z, h\tGo back in history list" @@ -430,11 +430,11 @@ msgstr "" #: gitk:3057 msgid "<PageUp>\tMove up one page in commit list" -msgstr "<RePàg>\tBaixa una pàgina en la llista de comissions" +msgstr "<RePàg>\tMou-te cap amunt per una pàgina en la llista de comissions" #: gitk:3058 msgid "<PageDown>\tMove down one page in commit list" -msgstr "<AvPàg>\tBaixa per una pàgina en la llista de comissions" +msgstr "<AvPàg>\tMou-te cap avall per una pàgina en la llista de comissions" #: gitk:3059 #, tcl-format @@ -449,50 +449,50 @@ msgstr "<%s-Fi>\tDesplaça't a la part inferior de la llista de comissions" #: gitk:3061 #, tcl-format msgid "<%s-Up>\tScroll commit list up one line" -msgstr "<%s-Amunt>\tDesplaça la llista de comissions una línia cap amunt" +msgstr "<%s-Amunt>\tDesplaça la llista de comissions cap amunt per una línia" #: gitk:3062 #, tcl-format msgid "<%s-Down>\tScroll commit list down one line" -msgstr "<%s-Avall>\tDesplaça la llista de comissions una línia cap avall" +msgstr "<%s-Avall>\tDesplaça la llista de comissions cap avall per una línia" #: gitk:3063 #, tcl-format msgid "<%s-PageUp>\tScroll commit list up one page" -msgstr "<%s-RePàg>\tDesplaça la llista de comissions amunt per una pàgina" +msgstr "<%s-RePàg>\tDesplaça la llista de comissions cap amunt per una pàgina" #: gitk:3064 #, tcl-format msgid "<%s-PageDown>\tScroll commit list down one page" -msgstr "<%s-AvPàg>\tDesplaça la llista de comissions una pàgina cap avall" +msgstr "<%s-AvPàg>\tDesplaça la llista de comissions cap avall per una pàgina" #: gitk:3065 msgid "<Shift-Up>\tFind backwards (upwards, later commits)" -msgstr "<Maj-Amunt>\tCerca cap enrere (amunt, les comissions més noves)" +msgstr "<Maj-Amunt>\tCerca cap enrere (cap amunt, les comissions més noves)" #: gitk:3066 msgid "<Shift-Down>\tFind forwards (downwards, earlier commits)" -msgstr "<Maj-Avall>\tCerca cap endavant (avall, les comissions més velles)" +msgstr "<Maj-Avall>\tCerca cap endavant (cap avall, les comissions més velles)" #: gitk:3067 msgid "<Delete>, b\tScroll diff view up one page" -msgstr "<Supr>, b\tDesplaça la vista de diferència una pàgina cap amunt" +msgstr "<Supr>, b\tDesplaça la vista de diferència cap amunt per una pàgina" #: gitk:3068 msgid "<Backspace>\tScroll diff view up one page" -msgstr "<Retrocés>\tDesplaça la vista de diferència una pàgina cap amunt" +msgstr "<Retrocés>\tDesplaça la vista de diferència cap amunt per una pàgina" #: gitk:3069 msgid "<Space>\t\tScroll diff view down one page" -msgstr "<Espai>\t\tDesplaça la vista de diferència una pàgina cap avall" +msgstr "<Espai>\t\tDesplaça la vista de diferència cap avall per una pàgina" #: gitk:3070 msgid "u\t\tScroll diff view up 18 lines" -msgstr "u\t\tDesplaça la vista de diferència 18 línies cap amunt" +msgstr "u\t\tDesplaça la vista de diferència cap amunt per 18 línies" #: gitk:3071 msgid "d\t\tScroll diff view down 18 lines" -msgstr "d\t\tDesplaça la vista de diferència 18 línies cap avall " +msgstr "d\t\tDesplaça la vista de diferència cap avall per 18 línies" #: gitk:3072 #, tcl-format @@ -509,9 +509,8 @@ msgid "<Return>\tMove to next find hit" msgstr "<Retorn>\tMou-te a la propera coincidència de la cerca" #: gitk:3075 -#, fuzzy msgid "g\t\tGo to commit" -msgstr "<Fi>\t\tVés a l'última comissió" +msgstr "g\t\tVés a l'última comissió" #: gitk:3076 msgid "/\t\tFocus the search box" @@ -668,9 +667,8 @@ msgid "Matches all Commit Info criteria" msgstr "Coincideix amb tots els criteris d'informació de comissió" #: gitk:4086 -#, fuzzy msgid "Matches no Commit Info criteria" -msgstr "Coincideix amb tots els criteris d'informació de comissió" +msgstr "No coincideix amb cap criteri d'informació de comissió" #: gitk:4087 msgid "Changes to Files:" @@ -1310,7 +1308,7 @@ msgstr "fons de la línia marcada" #: gitk:11450 msgid "Select bg" -msgstr "fons de la selecció" +msgstr "Fons de la selecció" #: gitk:11459 msgid "Fonts: press to choose" @@ -1354,6 +1352,8 @@ msgid "" "Sorry, gitk cannot run with this version of Tcl/Tk.\n" " Gitk requires at least Tcl/Tk 8.4." msgstr "" +"Perdó, el gitk no pot executar-se amb aquesta versió de Tcl/Tk.\n" +" El Gitk requereix com a mínim el Tcl/Tk 8.4." #: gitk:12269 msgid "Cannot find a git repository here." @@ -1367,6 +1367,3 @@ msgstr "Paràmetre ambigu '%s': és tant revisió com nom de fitxer" #: gitk:12328 msgid "Bad arguments to gitk:" msgstr "Paràmetres dolents al gitk:" - -#~ msgid "mc" -#~ msgstr "mc" diff --git a/gitk-git/po/de.po b/gitk-git/po/de.po index 1a3264b2b..d9ba4052e 100644 --- a/gitk-git/po/de.po +++ b/gitk-git/po/de.po @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: git-gui\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-17 14:32+1000\n" -"PO-Revision-Date: 2010-01-27 20:27+0100\n" +"PO-Revision-Date: 2015-10-20 14:20+0200\n" "Last-Translator: Christian Stimming <stimming@tuhh.de>\n" "Language-Team: German\n" "Language: \n" @@ -89,72 +89,72 @@ msgid "Cancel" msgstr "Abbrechen" #: gitk:2069 -msgid "Update" -msgstr "Aktualisieren" +msgid "&Update" +msgstr "&Aktualisieren" #: gitk:2070 -msgid "Reload" -msgstr "Neu laden" +msgid "&Reload" +msgstr "&Neu laden" #: gitk:2071 -msgid "Reread references" -msgstr "Zweige neu laden" +msgid "Reread re&ferences" +msgstr "&Zweige neu laden" #: gitk:2072 -msgid "List references" -msgstr "Zweige/Markierungen auflisten" +msgid "&List references" +msgstr "Zweige/Markierungen auf&listen" #: gitk:2074 -msgid "Start git gui" -msgstr "»git gui« starten" +msgid "Start git &gui" +msgstr "»git &gui« starten" #: gitk:2076 -msgid "Quit" -msgstr "Beenden" +msgid "&Quit" +msgstr "&Beenden" #: gitk:2068 -msgid "File" -msgstr "Datei" +msgid "&File" +msgstr "&Datei" #: gitk:2080 -msgid "Preferences" -msgstr "Einstellungen" +msgid "&Preferences" +msgstr "&Einstellungen" #: gitk:2079 -msgid "Edit" -msgstr "Bearbeiten" +msgid "&Edit" +msgstr "&Bearbeiten" #: gitk:2084 -msgid "New view..." -msgstr "Neue Ansicht ..." +msgid "&New view..." +msgstr "&Neue Ansicht ..." #: gitk:2085 -msgid "Edit view..." -msgstr "Ansicht bearbeiten ..." +msgid "&Edit view..." +msgstr "Ansicht &bearbeiten ..." #: gitk:2086 -msgid "Delete view" -msgstr "Ansicht entfernen" +msgid "&Delete view" +msgstr "Ansicht &entfernen" #: gitk:2088 gitk:4043 -msgid "All files" -msgstr "Alle Dateien" +msgid "&All files" +msgstr "&Alle Dateien" #: gitk:2083 gitk:4067 -msgid "View" -msgstr "Ansicht" +msgid "&View" +msgstr "&Ansicht" #: gitk:2093 gitk:2103 gitk:3012 -msgid "About gitk" -msgstr "Über gitk" +msgid "&About gitk" +msgstr "Über &gitk" #: gitk:2094 gitk:2108 -msgid "Key bindings" -msgstr "Tastenkürzel" +msgid "&Key bindings" +msgstr "&Tastenkürzel" #: gitk:2092 gitk:2107 -msgid "Help" -msgstr "Hilfe" +msgid "&Help" +msgstr "&Hilfe" #: gitk:2185 gitk:8652 msgid "SHA1 ID:" diff --git a/gitk-git/po/es.po b/gitk-git/po/es.po index 6402a411a..ddcb0a5f6 100644 --- a/gitk-git/po/es.po +++ b/gitk-git/po/es.po @@ -91,71 +91,71 @@ msgid "Cancel" msgstr "Cancelar" #: gitk:2069 -msgid "Update" +msgid "&Update" msgstr "Actualizar" #: gitk:2070 -msgid "Reload" +msgid "&Reload" msgstr "" #: gitk:2071 -msgid "Reread references" +msgid "Reread re&ferences" msgstr "Releer referencias" #: gitk:2072 -msgid "List references" +msgid "&List references" msgstr "Lista de referencias" #: gitk:2074 -msgid "Start git gui" +msgid "Start git &gui" msgstr "" #: gitk:2076 -msgid "Quit" +msgid "&Quit" msgstr "Salir" #: gitk:2068 -msgid "File" +msgid "&File" msgstr "Archivo" #: gitk:2080 -msgid "Preferences" +msgid "&Preferences" msgstr "Preferencias" #: gitk:2079 -msgid "Edit" +msgid "&Edit" msgstr "Editar" #: gitk:2084 -msgid "New view..." +msgid "&New view..." msgstr "Nueva vista..." #: gitk:2085 -msgid "Edit view..." +msgid "&Edit view..." msgstr "Modificar vista..." #: gitk:2086 -msgid "Delete view" +msgid "&Delete view" msgstr "Eliminar vista" #: gitk:2088 gitk:4043 -msgid "All files" +msgid "&All files" msgstr "Todos los archivos" #: gitk:2083 gitk:4067 -msgid "View" +msgid "&View" msgstr "Vista" #: gitk:2093 gitk:2103 gitk:3012 -msgid "About gitk" +msgid "&About gitk" msgstr "Acerca de gitk" #: gitk:2094 gitk:2108 -msgid "Key bindings" +msgid "&Key bindings" msgstr "Combinaciones de teclas" #: gitk:2092 gitk:2107 -msgid "Help" +msgid "&Help" msgstr "Ayuda" #: gitk:2185 gitk:8652 diff --git a/gitk-git/po/fr.po b/gitk-git/po/fr.po index 6b1f05c6b..80f72fb45 100644 --- a/gitk-git/po/fr.po +++ b/gitk-git/po/fr.po @@ -93,71 +93,71 @@ msgid "Cancel" msgstr "Annuler" #: gitk:2069 -msgid "Update" +msgid "&Update" msgstr "Mise à jour" #: gitk:2070 -msgid "Reload" +msgid "&Reload" msgstr "Recharger" #: gitk:2071 -msgid "Reread references" +msgid "Reread re&ferences" msgstr "Relire les références" #: gitk:2072 -msgid "List references" +msgid "&List references" msgstr "Lister les références" #: gitk:2074 -msgid "Start git gui" +msgid "Start git &gui" msgstr "Démarrer git gui" #: gitk:2076 -msgid "Quit" +msgid "&Quit" msgstr "Quitter" #: gitk:2068 -msgid "File" +msgid "&File" msgstr "Fichier" #: gitk:2080 -msgid "Preferences" +msgid "&Preferences" msgstr "Préférences" #: gitk:2079 -msgid "Edit" +msgid "&Edit" msgstr "Éditer" #: gitk:2084 -msgid "New view..." +msgid "&New view..." msgstr "Nouvelle vue..." #: gitk:2085 -msgid "Edit view..." +msgid "&Edit view..." msgstr "Éditer la vue..." #: gitk:2086 -msgid "Delete view" +msgid "&Delete view" msgstr "Supprimer la vue" #: gitk:2088 gitk:4043 -msgid "All files" +msgid "&All files" msgstr "Tous les fichiers" #: gitk:2083 gitk:4067 -msgid "View" +msgid "&View" msgstr "Vue" #: gitk:2093 gitk:2103 gitk:3012 -msgid "About gitk" +msgid "&About gitk" msgstr "À propos de gitk" #: gitk:2094 gitk:2108 -msgid "Key bindings" +msgid "&Key bindings" msgstr "Raccourcis clavier" #: gitk:2092 gitk:2107 -msgid "Help" +msgid "&Help" msgstr "Aide" #: gitk:2185 gitk:8652 diff --git a/gitk-git/po/hu.po b/gitk-git/po/hu.po index 00023f1ca..66fd75ba5 100644 --- a/gitk-git/po/hu.po +++ b/gitk-git/po/hu.po @@ -88,71 +88,71 @@ msgid "Cancel" msgstr "Visszavonás" #: gitk:2069 -msgid "Update" +msgid "&Update" msgstr "Frissités" #: gitk:2070 -msgid "Reload" +msgid "&Reload" msgstr "Újratöltés" #: gitk:2071 -msgid "Reread references" +msgid "Reread re&ferences" msgstr "Referenciák újraolvasása" #: gitk:2072 -msgid "List references" +msgid "&List references" msgstr "Referenciák listázása" #: gitk:2074 -msgid "Start git gui" +msgid "Start git &gui" msgstr "Git gui indítása" #: gitk:2076 -msgid "Quit" +msgid "&Quit" msgstr "Kilépés" #: gitk:2068 -msgid "File" +msgid "&File" msgstr "Fájl" #: gitk:2080 -msgid "Preferences" +msgid "&Preferences" msgstr "Beállítások" #: gitk:2079 -msgid "Edit" +msgid "&Edit" msgstr "Szerkesztés" #: gitk:2084 -msgid "New view..." +msgid "&New view..." msgstr "Új nézet ..." #: gitk:2085 -msgid "Edit view..." +msgid "&Edit view..." msgstr "Nézet szerkesztése ..." #: gitk:2086 -msgid "Delete view" +msgid "&Delete view" msgstr "Nézet törlése" #: gitk:2088 gitk:4043 -msgid "All files" +msgid "&All files" msgstr "Minden fájl" #: gitk:2083 gitk:4067 -msgid "View" +msgid "&View" msgstr "Nézet" #: gitk:2093 gitk:2103 gitk:3012 -msgid "About gitk" +msgid "&About gitk" msgstr "Gitk névjegy" #: gitk:2094 gitk:2108 -msgid "Key bindings" +msgid "&Key bindings" msgstr "Billentyűkombináció" #: gitk:2092 gitk:2107 -msgid "Help" +msgid "&Help" msgstr "Segítség" #: gitk:2185 gitk:8652 diff --git a/gitk-git/po/it.po b/gitk-git/po/it.po index b8212b170..b5f002db7 100644 --- a/gitk-git/po/it.po +++ b/gitk-git/po/it.po @@ -89,71 +89,71 @@ msgid "Cancel" msgstr "Annulla" #: gitk:2069 -msgid "Update" +msgid "&Update" msgstr "Aggiorna" #: gitk:2070 -msgid "Reload" +msgid "&Reload" msgstr "Ricarica" #: gitk:2071 -msgid "Reread references" +msgid "Reread re&ferences" msgstr "Rileggi riferimenti" #: gitk:2072 -msgid "List references" +msgid "&List references" msgstr "Elenca riferimenti" #: gitk:2074 -msgid "Start git gui" +msgid "Start git &gui" msgstr "Avvia git gui" #: gitk:2076 -msgid "Quit" +msgid "&Quit" msgstr "Esci" #: gitk:2068 -msgid "File" -msgstr "File" +msgid "&File" +msgstr "&File" #: gitk:2080 -msgid "Preferences" +msgid "&Preferences" msgstr "Preferenze" #: gitk:2079 -msgid "Edit" +msgid "&Edit" msgstr "Modifica" #: gitk:2084 -msgid "New view..." +msgid "&New view..." msgstr "Nuova vista..." #: gitk:2085 -msgid "Edit view..." +msgid "&Edit view..." msgstr "Modifica vista..." #: gitk:2086 -msgid "Delete view" +msgid "&Delete view" msgstr "Elimina vista" #: gitk:2088 gitk:4043 -msgid "All files" +msgid "&All files" msgstr "Tutti i file" #: gitk:2083 gitk:4067 -msgid "View" +msgid "&View" msgstr "Vista" #: gitk:2093 gitk:2103 gitk:3012 -msgid "About gitk" +msgid "&About gitk" msgstr "Informazioni su gitk" #: gitk:2094 gitk:2108 -msgid "Key bindings" +msgid "&Key bindings" msgstr "Scorciatoie da tastiera" #: gitk:2092 gitk:2107 -msgid "Help" +msgid "&Help" msgstr "Aiuto" #: gitk:2185 gitk:8652 diff --git a/gitk-git/po/ja.po b/gitk-git/po/ja.po index 8bbc67f6b..59e42a89f 100644 --- a/gitk-git/po/ja.po +++ b/gitk-git/po/ja.po @@ -90,72 +90,72 @@ msgid "Cancel" msgstr "キャンセル" #: gitk:2069 -msgid "Update" -msgstr "更新" +msgid "&Update" +msgstr "更新(&U)" #: gitk:2070 -msgid "Reload" -msgstr "リロード" +msgid "&Reload" +msgstr "リロード(&R)" #: gitk:2071 -msgid "Reread references" -msgstr "リファレンスを再読み込み" +msgid "Reread re&ferences" +msgstr "リファレンスを再読み込み(&F)" #: gitk:2072 -msgid "List references" -msgstr "リファレンスリストを表示" +msgid "&List references" +msgstr "リファレンスリストを表示(&L)" #: gitk:2074 -msgid "Start git gui" -msgstr "git gui の開始" +msgid "Start git &gui" +msgstr "git gui の開始(&G)" #: gitk:2076 -msgid "Quit" -msgstr "終了" +msgid "&Quit" +msgstr "終了(&Q)" #: gitk:2068 -msgid "File" -msgstr "ファイル" +msgid "&File" +msgstr "ファイル(&F)" #: gitk:2080 -msgid "Preferences" -msgstr "設定" +msgid "&Preferences" +msgstr "設定(&P)" #: gitk:2079 -msgid "Edit" -msgstr "編集" +msgid "&Edit" +msgstr "編集(&E)" #: gitk:2084 -msgid "New view..." -msgstr "新規ビュー..." +msgid "&New view..." +msgstr "新規ビュー...(&N)" #: gitk:2085 -msgid "Edit view..." -msgstr "ビュー編集..." +msgid "&Edit view..." +msgstr "ビュー編集...(&E)" #: gitk:2086 -msgid "Delete view" -msgstr "ビュー削除" +msgid "&Delete view" +msgstr "ビュー削除(&D)" #: gitk:2088 gitk:4043 -msgid "All files" -msgstr "全てのファイル" +msgid "&All files" +msgstr "全てのファイル(&A)" #: gitk:2083 gitk:4067 -msgid "View" -msgstr "ビュー" +msgid "&View" +msgstr "ビュー(&V)" #: gitk:2093 gitk:2103 gitk:3012 -msgid "About gitk" -msgstr "gitk について" +msgid "&About gitk" +msgstr "gitk について(&A)" #: gitk:2094 gitk:2108 -msgid "Key bindings" -msgstr "キーバインディング" +msgid "&Key bindings" +msgstr "キーバインディング(&K)" #: gitk:2092 gitk:2107 -msgid "Help" -msgstr "ヘルプ" +msgid "&Help" +msgstr "ヘルプ(&H)" #: gitk:2185 gitk:8652 msgid "SHA1 ID:" diff --git a/gitk-git/po/pt_br.po b/gitk-git/po/pt_br.po index 07e5d63b6..3f78f1b74 100644 --- a/gitk-git/po/pt_br.po +++ b/gitk-git/po/pt_br.po @@ -90,71 +90,71 @@ msgid "Cancel" msgstr "Cancelar" #: gitk:2069 -msgid "Update" +msgid "&Update" msgstr "Atualizar" #: gitk:2070 -msgid "Reload" +msgid "&Reload" msgstr "Recarregar" #: gitk:2071 -msgid "Reread references" +msgid "Reread re&ferences" msgstr "Ler as referências novamente" #: gitk:2072 -msgid "List references" +msgid "&List references" msgstr "Listar referências" #: gitk:2074 -msgid "Start git gui" +msgid "Start git &gui" msgstr "Iniciar Git GUI" #: gitk:2076 -msgid "Quit" +msgid "&Quit" msgstr "Sair" #: gitk:2068 -msgid "File" +msgid "&File" msgstr "Arquivo" #: gitk:2080 -msgid "Preferences" +msgid "&Preferences" msgstr "Preferências" #: gitk:2079 -msgid "Edit" +msgid "&Edit" msgstr "Editar" #: gitk:2084 -msgid "New view..." +msgid "&New view..." msgstr "Nova vista..." #: gitk:2085 -msgid "Edit view..." +msgid "&Edit view..." msgstr "Editar vista..." #: gitk:2086 -msgid "Delete view" +msgid "&Delete view" msgstr "Apagar vista" #: gitk:2088 gitk:4043 -msgid "All files" +msgid "&All files" msgstr "Todos os arquivos" #: gitk:2083 gitk:4067 -msgid "View" +msgid "&View" msgstr "Exibir" #: gitk:2093 gitk:2103 gitk:3012 -msgid "About gitk" +msgid "&About gitk" msgstr "Sobre o gitk" #: gitk:2094 gitk:2108 -msgid "Key bindings" +msgid "&Key bindings" msgstr "Atalhos de teclado" #: gitk:2092 gitk:2107 -msgid "Help" +msgid "&Help" msgstr "Ajuda" #: gitk:2185 gitk:8652 diff --git a/gitk-git/po/ru.po b/gitk-git/po/ru.po index f1bac879e..17ed026aa 100644 --- a/gitk-git/po/ru.po +++ b/gitk-git/po/ru.po @@ -1,18 +1,24 @@ -# # Translation of gitk to Russian. # +# Translators: +# 0xAX <kuleshovmail@gmail.com>, 2014 +# Alex Riesen <raa.lkml@gmail.com>, 2015 +# Dimitriy Ryazantcev <DJm00n@mail.ru>, 2015 +# Dmitry Potapov <dpotapov@gmail.com>, 2009 +# Skip <bsvskip@rambler.ru>, 2011 msgid "" msgstr "" -"Project-Id-Version: gitk\n" +"Project-Id-Version: Git Russian Localization Project\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-17 14:32+1000\n" -"PO-Revision-Date: 2009-04-24 16:00+0200\n" -"Last-Translator: Alex Riesen <raa.lkml@gmail.com>\n" -"Language-Team: Russian\n" -"Language: \n" +"PO-Revision-Date: 2015-10-12 10:14+0000\n" +"Last-Translator: Dimitriy Ryazantcev <DJm00n@mail.ru>\n" +"Language-Team: Russian (http://www.transifex.com/djm00n/git-po-ru/language/ru/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Language: ru\n" +"Plural-Forms: nplurals=4; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<12 || n%100>14) ? 1 : n%10==0 || (n%10>=5 && n%10<=9) || (n%100>=11 && n%100<=14)? 2 : 3);\n" #: gitk:140 msgid "Couldn't get list of unmerged files:" @@ -20,15 +26,15 @@ msgstr "Невозможно получить список файлов неза #: gitk:212 gitk:2381 msgid "Color words" -msgstr "" +msgstr "Цветные слова" #: gitk:217 gitk:2381 gitk:8220 gitk:8253 msgid "Markup words" -msgstr "" +msgstr "Помеченые слова" #: gitk:324 msgid "Error parsing revisions:" -msgstr "Ошибка в идентификаторе версии:" +msgstr "Ошибка при разборе редакции:" #: gitk:380 msgid "Error executing --argscmd command:" @@ -36,17 +42,13 @@ msgstr "Ошибка выполнения команды заданной --args #: gitk:393 msgid "No files selected: --merge specified but no files are unmerged." -msgstr "" -"Файлы не выбраны: указан --merge, но не было найдено ни одного файла где эта " -"операция должна быть завершена." +msgstr "Файлы не выбраны: указан --merge, но не было найдено ни одного файла где эта операция должна быть завершена." #: gitk:396 msgid "" "No files selected: --merge specified but no unmerged files are within file " "limit." -msgstr "" -"Файлы не выбраны: указан --merge, но в рамках указанного ограничения на " -"имена файлов нет ни одного где эта операция должна быть завершена." +msgstr "Файлы не выбраны: указан --merge, но в рамках указанного ограничения на имена файлов нет ни одного где эта операция должна быть завершена." #: gitk:418 gitk:566 msgid "Error executing git log:" @@ -58,7 +60,7 @@ msgstr "Чтение" #: gitk:496 gitk:4525 msgid "Reading commits..." -msgstr "Чтение версий..." +msgstr "Чтение коммитов..." #: gitk:499 gitk:1637 gitk:4528 msgid "No commits selected" @@ -74,7 +76,7 @@ msgstr "Ошибка обработки вывода команды git log:" #: gitk:1740 msgid "No commit information available" -msgstr "Нет информации о состоянии" +msgstr "Нет информации о коммите" #: gitk:1903 gitk:1932 gitk:4315 gitk:9669 gitk:11241 gitk:11521 msgid "OK" @@ -86,71 +88,71 @@ msgid "Cancel" msgstr "Отмена" #: gitk:2069 -msgid "Update" +msgid "&Update" msgstr "Обновить" #: gitk:2070 -msgid "Reload" +msgid "&Reload" msgstr "Перечитать" #: gitk:2071 -msgid "Reread references" +msgid "Reread re&ferences" msgstr "Обновить список ссылок" #: gitk:2072 -msgid "List references" +msgid "&List references" msgstr "Список ссылок" #: gitk:2074 -msgid "Start git gui" +msgid "Start git &gui" msgstr "Запустить git gui" #: gitk:2076 -msgid "Quit" +msgid "&Quit" msgstr "Завершить" #: gitk:2068 -msgid "File" +msgid "&File" msgstr "Файл" #: gitk:2080 -msgid "Preferences" +msgid "&Preferences" msgstr "Настройки" #: gitk:2079 -msgid "Edit" +msgid "&Edit" msgstr "Редактировать" #: gitk:2084 -msgid "New view..." +msgid "&New view..." msgstr "Новое представление..." #: gitk:2085 -msgid "Edit view..." +msgid "&Edit view..." msgstr "Редактировать представление..." #: gitk:2086 -msgid "Delete view" +msgid "&Delete view" msgstr "Удалить представление" #: gitk:2088 gitk:4043 -msgid "All files" +msgid "&All files" msgstr "Все файлы" #: gitk:2083 gitk:4067 -msgid "View" +msgid "&View" msgstr "Представление" #: gitk:2093 gitk:2103 gitk:3012 -msgid "About gitk" +msgid "&About gitk" msgstr "О gitk" #: gitk:2094 gitk:2108 -msgid "Key bindings" +msgid "&Key bindings" msgstr "Назначения клавиатуры" #: gitk:2092 gitk:2107 -msgid "Help" +msgid "&Help" msgstr "Подсказка" #: gitk:2185 gitk:8652 @@ -167,7 +169,7 @@ msgstr "Поиск" #: gitk:2295 msgid "commit" -msgstr "состояние" +msgstr "коммит" #: gitk:2299 gitk:2301 gitk:4687 gitk:4710 gitk:4734 gitk:6755 gitk:6827 #: gitk:6912 @@ -184,7 +186,7 @@ msgstr "добавив/удалив строку:" #: gitk:2304 gitk:4779 msgid "changing lines matching:" -msgstr "" +msgstr "изменяя совпадающие строки:" #: gitk:2313 gitk:2315 gitk:4766 msgid "Exact" @@ -217,7 +219,7 @@ msgstr "Автор" #: gitk:2319 gitk:4871 gitk:6786 gitk:7326 msgid "Committer" -msgstr "Сохранивший состояние" +msgstr "Коммитер" #: gitk:2350 msgid "Search" @@ -245,7 +247,7 @@ msgstr "Игнорировать пробелы" #: gitk:2378 gitk:2380 gitk:7959 gitk:8206 msgid "Line diff" -msgstr "" +msgstr "Изменения строк" #: gitk:2445 msgid "Patch" @@ -257,11 +259,11 @@ msgstr "Файлы" #: gitk:2617 gitk:2637 msgid "Diff this -> selected" -msgstr "Сравнить это состояние с выделенным" +msgstr "Сравнить этот коммит с выделенным" #: gitk:2618 gitk:2638 msgid "Diff selected -> this" -msgstr "Сравнить выделенное с этим состоянием" +msgstr "Сравнить выделенный с этим коммитом" #: gitk:2619 gitk:2639 msgid "Make patch" @@ -273,63 +275,59 @@ msgstr "Создать метку" #: gitk:2621 gitk:9371 msgid "Write commit to file" -msgstr "Сохранить изменения в файл" +msgstr "Сохранить коммит в файл" #: gitk:2622 gitk:9428 msgid "Create new branch" -msgstr "Создать ветвь" +msgstr "Создать ветку" #: gitk:2623 msgid "Cherry-pick this commit" -msgstr "Скопировать это состояние" +msgstr "Отбор лучшего для этого коммита" #: gitk:2624 msgid "Reset HEAD branch to here" -msgstr "Установить HEAD на это состояние" +msgstr "Установить HEAD на этот коммит" #: gitk:2625 -#, fuzzy msgid "Mark this commit" -msgstr "Скопировать это состояние" +msgstr "Пометить этот коммит" #: gitk:2626 msgid "Return to mark" -msgstr "" +msgstr "Вернуться на пометку" #: gitk:2627 msgid "Find descendant of this and mark" -msgstr "" +msgstr "Найти и пометить потомка этого коммита" #: gitk:2628 msgid "Compare with marked commit" -msgstr "" +msgstr "Сравнить с помеченным коммитом" #: gitk:2629 gitk:2640 -#, fuzzy msgid "Diff this -> marked commit" -msgstr "Сравнить это состояние с выделенным" +msgstr "Сравнить выделенное с помеченным коммитом" #: gitk:2630 gitk:2641 -#, fuzzy msgid "Diff marked commit -> this" -msgstr "Сравнить выделенное с этим состоянием" +msgstr "Сравнить помеченный с этим коммитом" #: gitk:2631 -#, fuzzy msgid "Revert this commit" -msgstr "Скопировать это состояние" +msgstr "Возврат этого коммита" #: gitk:2647 msgid "Check out this branch" -msgstr "Перейти на эту ветвь" +msgstr "Перейти на эту ветку" #: gitk:2648 msgid "Remove this branch" -msgstr "Удалить эту ветвь" +msgstr "Удалить эту ветку" #: gitk:2649 msgid "Copy branch name" -msgstr "" +msgstr "Копировать имя ветки" #: gitk:2656 msgid "Highlight this too" @@ -345,11 +343,11 @@ msgstr "Программа сравнения" #: gitk:2659 msgid "Blame parent commit" -msgstr "Аннотировать родительское состояние" +msgstr "Авторы изменений родительского коммита" #: gitk:2660 msgid "Copy path" -msgstr "" +msgstr "Копировать путь" #: gitk:2667 msgid "Show origin of this line" @@ -360,21 +358,14 @@ msgid "Run git gui blame on this line" msgstr "Запустить git gui blame для этой строки" #: gitk:3014 -#, fuzzy msgid "" "\n" "Gitk - a commit viewer for git\n" "\n" -"Copyright © 2005-2014 Paul Mackerras\n" +"Copyright 2005-2014 Paul Mackerras\n" "\n" "Use and redistribute under the terms of the GNU General Public License" -msgstr "" -"\n" -"Gitk - программа просмотра истории репозиториев Git\n" -"\n" -"Copyright \\u00a9 2005-2010 Paul Mackerras\n" -"\n" -"Использование и распространение согласно условиям GNU General Public License" +msgstr "\nGitk - программа просмотра истории репозиториев git\n\n© 2005-2014 Paul Mackerras\n\nИспользование и распространение согласно условиям GNU General Public License" #: gitk:3022 gitk:3089 gitk:9857 msgid "Close" @@ -394,87 +385,84 @@ msgid "<%s-Q>\t\tQuit" msgstr "<%s-Q>\t\tЗавершить" #: gitk:3049 -#, fuzzy, tcl-format +#, tcl-format msgid "<%s-W>\t\tClose window" -msgstr "<%s-F>\t\tПоиск" +msgstr "<%s-W>\t\tЗакрыть окно" #: gitk:3050 msgid "<Home>\t\tMove to first commit" -msgstr "<Home>\t\tПерейти к первому состоянию" +msgstr "<Home>\t\tПерейти к первому коммиту" #: gitk:3051 msgid "<End>\t\tMove to last commit" -msgstr "<End>\t\tПерейти к последнему состоянию" +msgstr "<End>\t\tПерейти к последнему коммиту" #: gitk:3052 -#, fuzzy msgid "<Up>, p, k\tMove up one commit" -msgstr "<Up>, p, i\tПерейти к следующему состоянию" +msgstr "<Up>, p, k\tПерейти на один коммит вверх" #: gitk:3053 -#, fuzzy msgid "<Down>, n, j\tMove down one commit" -msgstr "<Down>, n, k\tПерейти к предыдущему состоянию" +msgstr "<Down>, n, j\tПерейти на один коммит вниз" #: gitk:3054 -#, fuzzy msgid "<Left>, z, h\tGo back in history list" -msgstr "<Left>, z, j\tПоказать ранее посещённое состояние" +msgstr "<Left>, z, h\tПоказать ранее посещённое состояние" #: gitk:3055 msgid "<Right>, x, l\tGo forward in history list" -msgstr "<Right>, x, l\tПоказать следующее посещённое состояние" +msgstr "<Right>, x, l\tПоказать следующий посещённый коммит" #: gitk:3056 #, tcl-format msgid "<%s-n>\tGo to n-th parent of current commit in history list" -msgstr "" +msgstr "<%s-n>\tПерейти на n родителя от текущего коммита" #: gitk:3057 msgid "<PageUp>\tMove up one page in commit list" -msgstr "<PageUp>\tПерейти на страницу выше в списке состояний" +msgstr "<PageUp>\tПерейти на страницу выше в списке коммитов" #: gitk:3058 msgid "<PageDown>\tMove down one page in commit list" -msgstr "<PageDown>\tПерейти на страницу ниже в списке состояний" +msgstr "<PageDown>\tПерейти на страницу ниже в списке коммитов" #: gitk:3059 #, tcl-format msgid "<%s-Home>\tScroll to top of commit list" -msgstr "<%s-Home>\tПоказать начало списка состояний" +msgstr "<%s-Home>\tПерейти на начало списка коммитов" #: gitk:3060 #, tcl-format msgid "<%s-End>\tScroll to bottom of commit list" -msgstr "<%s-End>\tПоказать конец списка состояний" +msgstr "<%s-End>\tПерейти на конец списка коммитов" #: gitk:3061 #, tcl-format msgid "<%s-Up>\tScroll commit list up one line" -msgstr "<%s-Up>\tПровернуть список состояний вверх" +msgstr "<%s-Up>\tПровернуть список коммитов вверх" #: gitk:3062 #, tcl-format msgid "<%s-Down>\tScroll commit list down one line" -msgstr "<%s-Down>\tПровернуть список состояний вниз" +msgstr "<%s-Down>\tПровернуть список коммитов вниз" #: gitk:3063 #, tcl-format msgid "<%s-PageUp>\tScroll commit list up one page" -msgstr "<%s-PageUp>\tПровернуть список состояний на страницу вверх" +msgstr "<%s-PageUp>\tПровернуть список коммитов на страницу вверх" #: gitk:3064 #, tcl-format msgid "<%s-PageDown>\tScroll commit list down one page" -msgstr "<%s-PageDown>\tПровернуть список состояний на страницу вниз" +msgstr "<%s-PageDown>\tПровернуть список коммитов на страницу вниз" #: gitk:3065 msgid "<Shift-Up>\tFind backwards (upwards, later commits)" -msgstr "<Shift-Up>\tПоиск в обратном порядке (вверх, среди новых состояний)" +msgstr "<Shift-Up>\tПоиск в обратном порядке (вверх, среди новых коммитов)" #: gitk:3066 msgid "<Shift-Down>\tFind forwards (downwards, earlier commits)" -msgstr "<Shift-Down>\tПоиск (вниз, среди старых состояний)" +msgstr "<Shift-Down>\tПоиск (вниз, среди старых коммитов)" #: gitk:3067 msgid "<Delete>, b\tScroll diff view up one page" @@ -504,16 +492,15 @@ msgstr "<%s-F>\t\tПоиск" #: gitk:3073 #, tcl-format msgid "<%s-G>\t\tMove to next find hit" -msgstr "<%s-G>\t\tПерейти к следующему найденному состоянию" +msgstr "<%s-G>\t\tПерейти к следующему найденному коммиту" #: gitk:3074 msgid "<Return>\tMove to next find hit" -msgstr "<Return>\tПерейти к следующему найденному состоянию" +msgstr "<Return>\tПерейти к следующему найденному коммиту" #: gitk:3075 -#, fuzzy msgid "g\t\tGo to commit" -msgstr "<End>\t\tПерейти к последнему состоянию" +msgstr "g\t\tПерейти на коммит" #: gitk:3076 msgid "/\t\tFocus the search box" @@ -521,7 +508,7 @@ msgstr "/\t\tПерейти к полю поиска" #: gitk:3077 msgid "?\t\tMove to previous find hit" -msgstr "?\t\tПерейти к предыдущему найденному состоянию" +msgstr "?\t\tПерейти к предыдущему найденному коммиту" #: gitk:3078 msgid "f\t\tScroll diff view to next file" @@ -569,7 +556,7 @@ msgstr "Ошибка создания временного каталога %s:" #: gitk:3572 #, tcl-format msgid "Error getting \"%s\" from %s:" -msgstr "Ошибка получения \"%s\" из %s:" +msgstr "Ошибка получения «%s» из %s:" #: gitk:3635 msgid "command failed:" @@ -577,7 +564,7 @@ msgstr "ошибка выполнения команды:" #: gitk:3784 msgid "No such commit" -msgstr "Состояние не найдено" +msgstr "Коммит не найден" #: gitk:3798 msgid "git gui blame: command failed:" @@ -610,8 +597,7 @@ msgstr "Ошибка выполнения git blame: %s" #: gitk:3925 #, tcl-format msgid "That line comes from commit %s, which is not in this view" -msgstr "" -"Эта строка принадлежит состоянию %s, которое не показано в этом представлении" +msgstr "Эта строка принадлежит коммиту %s, который не показан в этом представлении" #: gitk:3939 msgid "External diff viewer failed:" @@ -627,103 +613,97 @@ msgstr "Запомнить представление" #: gitk:4075 msgid "References (space separated list):" -msgstr "" +msgstr "Ссылки (разделённые пробелом):" #: gitk:4076 msgid "Branches & tags:" -msgstr "" +msgstr "Ветки и метки" #: gitk:4077 -#, fuzzy msgid "All refs" -msgstr "Все файлы" +msgstr "Все ссылки" #: gitk:4078 msgid "All (local) branches" -msgstr "" +msgstr "Все (локальные) ветки" #: gitk:4079 msgid "All tags" -msgstr "" +msgstr "Все метки" #: gitk:4080 msgid "All remote-tracking branches" -msgstr "" +msgstr "Все внешние отслеживаемые ветки" #: gitk:4081 msgid "Commit Info (regular expressions):" -msgstr "" +msgstr "Информация о коммите (регулярные выражения):" #: gitk:4082 -#, fuzzy msgid "Author:" -msgstr "Автор" +msgstr "Автор:" #: gitk:4083 -#, fuzzy msgid "Committer:" -msgstr "Сохранивший состояние" +msgstr "Коммитер:" #: gitk:4084 msgid "Commit Message:" -msgstr "" +msgstr "Сообщение коммита:" #: gitk:4085 msgid "Matches all Commit Info criteria" -msgstr "" +msgstr "Совпадает со всеми условиями информации о коммите" #: gitk:4086 msgid "Matches no Commit Info criteria" -msgstr "" +msgstr "Не совпадает с условиями информации о коммите" #: gitk:4087 msgid "Changes to Files:" -msgstr "" +msgstr "Изменения файлов:" #: gitk:4088 msgid "Fixed String" -msgstr "" +msgstr "Обычная строка" #: gitk:4089 msgid "Regular Expression" -msgstr "" +msgstr "Регулярное выражение:" #: gitk:4090 -#, fuzzy msgid "Search string:" -msgstr "Поиск" +msgstr "Строка для поиска:" #: gitk:4091 msgid "" "Commit Dates (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March 17, 2009 " "15:27:38\"):" -msgstr "" +msgstr "Даты коммита («2 недели назад», «2009-03-17 15:27:38», «17 марта 2009 15:27:38»):" #: gitk:4092 -#, fuzzy msgid "Since:" msgstr "С даты:" #: gitk:4093 -#, fuzzy msgid "Until:" msgstr "По дату:" #: gitk:4094 msgid "Limit and/or skip a number of revisions (positive integer):" -msgstr "" +msgstr "Ограничить и/или пропустить количество редакций (положительное число):" #: gitk:4095 msgid "Number to show:" -msgstr "" +msgstr "Показать количество:" #: gitk:4096 msgid "Number to skip:" -msgstr "" +msgstr "Пропустить количество:" #: gitk:4097 msgid "Miscellaneous options:" -msgstr "" +msgstr "Различные опции:" #: gitk:4098 msgid "Strictly sort by date" @@ -731,7 +711,7 @@ msgstr "Строгая сортировка по дате" #: gitk:4099 msgid "Mark branch sides" -msgstr "Отметить стороны ветвей" +msgstr "Отметить стороны веток" #: gitk:4100 msgid "Limit to first parent" @@ -739,12 +719,11 @@ msgstr "Ограничить первым предком" #: gitk:4101 msgid "Simple history" -msgstr "" +msgstr "Упрощенная история" #: gitk:4102 -#, fuzzy msgid "Additional arguments to git log:" -msgstr "Включить состояния (аргументы для git-log):" +msgstr "Дополнительные аргументы для git log:" #: gitk:4103 msgid "Enter files and directories to include, one per line:" @@ -752,21 +731,19 @@ msgstr "Файлы и каталоги для ограничения истор #: gitk:4104 msgid "Command to generate more commits to include:" -msgstr "Дополнительная команда для списка состояний:" +msgstr "Дополнительная команда для списка коммитов:" #: gitk:4228 msgid "Gitk: edit view" -msgstr "" +msgstr "Gitk: изменить представление" #: gitk:4236 -#, fuzzy msgid "-- criteria for selecting revisions" -msgstr "Ошибка в идентификаторе версии:" +msgstr "— критерий поиска редакций" #: gitk:4241 -#, fuzzy msgid "View Name" -msgstr "Представление" +msgstr "Имя представления" #: gitk:4316 msgid "Apply (F5)" @@ -774,7 +751,7 @@ msgstr "Применить (F5)" #: gitk:4354 msgid "Error in commit selection arguments:" -msgstr "Ошибка в параметрах выбора состояний:" +msgstr "Ошибка в параметрах выбора коммитов:" #: gitk:4409 gitk:4462 gitk:4924 gitk:4938 gitk:6208 gitk:12373 gitk:12374 msgid "None" @@ -798,23 +775,23 @@ msgstr "Не предок" #: gitk:5324 msgid "Local changes checked in to index but not committed" -msgstr "Изменения зарегистрированные в индексе, но не сохранённые" +msgstr "Проиндексированные изменения" #: gitk:5360 msgid "Local uncommitted changes, not checked in to index" -msgstr "Изменения в рабочем каталоге, не зарегистрированные в индексе" +msgstr "Непроиндексированные изменения" #: gitk:7134 msgid "and many more" -msgstr "" +msgstr "и многое другое" #: gitk:7137 msgid "many" -msgstr "" +msgstr "много" #: gitk:7328 msgid "Tags:" -msgstr "Таги:" +msgstr "Метки:" #: gitk:7345 gitk:7351 gitk:8825 msgid "Parent" @@ -826,7 +803,7 @@ msgstr "Потомок" #: gitk:7365 msgid "Branch" -msgstr "Ветвь" +msgstr "Ветка" #: gitk:7368 msgid "Follows" @@ -851,9 +828,9 @@ msgid "Short SHA1 id %s is ambiguous" msgstr "Сокращённый SHA1 идентификатор %s неоднозначен" #: gitk:8678 -#, fuzzy, tcl-format +#, tcl-format msgid "Revision %s is not known" -msgstr "SHA1 идентификатор %s не найден" +msgstr "Редакция %s не найдена" #: gitk:8688 #, tcl-format @@ -863,7 +840,7 @@ msgstr "SHA1 идентификатор %s не найден" #: gitk:8690 #, tcl-format msgid "Revision %s is not in the current view" -msgstr "" +msgstr "Редакция %s не найдена в текущем представлении" #: gitk:8832 gitk:8847 msgid "Date" @@ -876,62 +853,60 @@ msgstr "Потомки" #: gitk:8898 #, tcl-format msgid "Reset %s branch to here" -msgstr "Установить ветвь %s на это состояние" +msgstr "Сбросить ветку %s на этот коммит" #: gitk:8900 msgid "Detached head: can't reset" -msgstr "Состояние не принадлежит ни одной ветви, переход невозможен" +msgstr "Коммит не принадлежит ни одной ветке, сбросить невозможно" #: gitk:9005 gitk:9011 msgid "Skipping merge commit " -msgstr "" +msgstr "Пропускаю коммит-слияние" #: gitk:9020 gitk:9025 -#, fuzzy msgid "Error getting patch ID for " -msgstr "Ошибка создания патча:" +msgstr "Не удалось получить идентификатор патча для " #: gitk:9021 gitk:9026 msgid " - stopping\n" -msgstr "" +msgstr " — останов\n" #: gitk:9031 gitk:9034 gitk:9042 gitk:9056 gitk:9065 -#, fuzzy msgid "Commit " -msgstr "состояние" +msgstr "Коммит" #: gitk:9035 msgid "" " is the same patch as\n" " " -msgstr "" +msgstr " такой же патч, как и\n " #: gitk:9043 msgid "" " differs from\n" " " -msgstr "" +msgstr " отличается от\n " #: gitk:9045 msgid "" "Diff of commits:\n" "\n" -msgstr "" +msgstr "Различия коммитов:\n\n" #: gitk:9057 gitk:9066 #, tcl-format msgid " has %s children - stopping\n" -msgstr "" +msgstr " является %s потомком — останов\n" #: gitk:9085 -#, fuzzy, tcl-format +#, tcl-format msgid "Error writing commit to file: %s" -msgstr "Ошибка сохранения состояния:" +msgstr "Произошла ошибка при записи коммита в файл: %s" #: gitk:9091 -#, fuzzy, tcl-format +#, tcl-format msgid "Error diffing commits: %s" -msgstr "Ошибка сохранения состояния:" +msgstr "Произошла ошибка при выводе различий коммитов: %s" #: gitk:9137 msgid "Top" @@ -983,12 +958,11 @@ msgstr "Имя метки:" #: gitk:9268 msgid "Tag message is optional" -msgstr "" +msgstr "Описание метки указывать не обязательно" #: gitk:9270 -#, fuzzy msgid "Tag message:" -msgstr "Имя метки:" +msgstr "Описание метки:" #: gitk:9274 gitk:9439 msgid "Create" @@ -1001,7 +975,7 @@ msgstr "Не задано имя метки" #: gitk:9296 #, tcl-format msgid "Tag \"%s\" already exists" -msgstr "Метка \"%s\" уже существует" +msgstr "Метка «%s» уже существует" #: gitk:9306 msgid "Error creating tag:" @@ -1017,7 +991,7 @@ msgstr "Запись" #: gitk:9408 msgid "Error writing commit:" -msgstr "Ошибка сохранения состояния:" +msgstr "Произошла ошибка при записи коммита:" #: gitk:9435 msgid "Name:" @@ -1025,17 +999,17 @@ msgstr "Имя:" #: gitk:9458 msgid "Please specify a name for the new branch" -msgstr "Укажите имя для новой ветви" +msgstr "Укажите имя для новой ветки" #: gitk:9463 #, tcl-format msgid "Branch '%s' already exists. Overwrite?" -msgstr "Ветвь '%s' уже существует. Переписать?" +msgstr "Ветка «%s» уже существует. Переписать?" #: gitk:9530 #, tcl-format msgid "Commit %s is already included in branch %s -- really re-apply it?" -msgstr "Состояние %s уже принадлежит ветви %s. Продолжить операцию?" +msgstr "Коммит %s уже включён в ветку %s. Продолжить операцию?" #: gitk:9535 msgid "Cherry-picking" @@ -1046,49 +1020,39 @@ msgstr "Копирование изменений" msgid "" "Cherry-pick failed because of local changes to file '%s'.\n" "Please commit, reset or stash your changes and try again." -msgstr "" -"Копирование невозможно из-за изменений в файле '%s'.\n" -"Сохраните или отмените изменения и повторите операцию." +msgstr "Отбор лучшего невозможен из-за изменений в файле «%s».\nЗакомитьте, сбросьте или спрячьте изменения и повторите операцию." #: gitk:9550 msgid "" "Cherry-pick failed because of merge conflict.\n" "Do you wish to run git citool to resolve it?" -msgstr "" -"Копирование изменений невозможно из-за незавершённой операции слияния.\n" -"Запустить git citool для завершения этой операции?" +msgstr "Копирование изменений невозможно из-за незавершённой операции слияния.\nЗапустить git citool для завершения этой операции?" #: gitk:9566 gitk:9624 msgid "No changes committed" -msgstr "Изменения не сохранены" +msgstr "Изменения не закоммичены" #: gitk:9593 -#, fuzzy, tcl-format +#, tcl-format msgid "Commit %s is not included in branch %s -- really revert it?" -msgstr "Состояние %s уже принадлежит ветви %s. Продолжить операцию?" +msgstr "Коммит %s не включён в ветку %s. Продолжить операцию?" #: gitk:9598 -#, fuzzy msgid "Reverting" -msgstr "Установка" +msgstr "Возврат изменений" #: gitk:9606 -#, fuzzy, tcl-format +#, tcl-format msgid "" "Revert failed because of local changes to the following files:%s Please " "commit, reset or stash your changes and try again." -msgstr "" -"Копирование невозможно из-за изменений в файле '%s'.\n" -"Сохраните или отмените изменения и повторите операцию." +msgstr "Возврат изменений коммита не удался из-за локальных изменений в указанных файлах: %s\nЗакомитьте, сбросьте или спрячьте изменения и повторите операцию." #: gitk:9610 -#, fuzzy msgid "" "Revert failed because of merge conflict.\n" " Do you wish to run git citool to resolve it?" -msgstr "" -"Копирование изменений невозможно из-за незавершённой операции слияния.\n" -"Запустить git citool для завершения этой операции?" +msgstr "Возврат изменений невозможен из-за незавершённой операции слияния.\nЗапустить git citool для завершения этой операции?" #: gitk:9653 msgid "Confirm reset" @@ -1097,7 +1061,7 @@ msgstr "Подтвердите операцию перехода" #: gitk:9655 #, tcl-format msgid "Reset branch %s to %s?" -msgstr "Установить ветвь %s на состояние %s?" +msgstr "Сбросить ветку %s на коммит %s?" #: gitk:9657 msgid "Reset type:" @@ -1115,13 +1079,11 @@ msgstr "Смешанный: оставить рабочий каталог не msgid "" "Hard: Reset working tree and index\n" "(discard ALL local changes)" -msgstr "" -"Жесткий: переписать индекс и рабочий каталог\n" -"(все изменения в рабочем каталоге будут потеряны)" +msgstr "Жесткий: переписать индекс и рабочий каталог\n(все изменения в рабочем каталоге будут потеряны)" #: gitk:9683 msgid "Resetting" -msgstr "Установка" +msgstr "Сброс" #: gitk:9743 msgid "Checking out" @@ -1129,21 +1091,19 @@ msgstr "Переход" #: gitk:9796 msgid "Cannot delete the currently checked-out branch" -msgstr "Активная ветвь не может быть удалена" +msgstr "Активная ветка не может быть удалена" #: gitk:9802 #, tcl-format msgid "" "The commits on branch %s aren't on any other branch.\n" "Really delete branch %s?" -msgstr "" -"Состояния ветви %s больше не принадлежат никакой другой ветви.\n" -"Действительно удалить ветвь %s?" +msgstr "Коммиты из ветки %s не принадлежат больше никакой другой ветке.\nДействительно удалить ветку %s?" #: gitk:9833 #, tcl-format msgid "Tags and heads: %s" -msgstr "Метки и ветви: %s" +msgstr "Метки и ветки: %s" #: gitk:9850 msgid "Filter" @@ -1153,9 +1113,7 @@ msgstr "Фильтровать" msgid "" "Error reading commit topology information; branch and preceding/following " "tag information will be incomplete." -msgstr "" -"Ошибка чтения истории проекта; информация о ветвях и состояниях вокруг меток " -"(до/после) может быть неполной." +msgstr "Ошибка чтения истории проекта; информация о ветках и коммитах вокруг меток (до/после) может быть неполной." #: gitk:11123 msgid "Tag" @@ -1179,7 +1137,7 @@ msgstr "К" #: gitk:11348 msgid "Commit list display options" -msgstr "Параметры показа списка состояний" +msgstr "Параметры показа списка коммитов" #: gitk:11351 msgid "Maximum graph width (lines)" @@ -1195,13 +1153,12 @@ msgid "Show local changes" msgstr "Показывать изменения в рабочем каталоге" #: gitk:11361 -#, fuzzy msgid "Auto-select SHA1 (length)" -msgstr "Выделить SHA1" +msgstr "Автоматически выделить SHA1 (длинна)" #: gitk:11365 msgid "Hide remote refs" -msgstr "" +msgstr "Скрыть внешние ссылки" #: gitk:11369 msgid "Diff display options" @@ -1212,13 +1169,12 @@ msgid "Tab spacing" msgstr "Ширина табуляции" #: gitk:11374 -#, fuzzy msgid "Display nearby tags/heads" -msgstr "Показывать близкие метки" +msgstr "Показывать близкие метки/ветки" #: gitk:11377 msgid "Maximum # tags/heads to show" -msgstr "" +msgstr "Показывать максимальное количество меток/веток" #: gitk:11380 msgid "Limit diffs to listed paths" @@ -1237,21 +1193,20 @@ msgid "Choose..." msgstr "Выберите..." #: gitk:11395 -#, fuzzy msgid "General options" -msgstr "Создать патч" +msgstr "Общие опции" #: gitk:11398 msgid "Use themed widgets" -msgstr "" +msgstr "Использовать стили виджетов" #: gitk:11400 msgid "(change requires restart)" -msgstr "" +msgstr "(изменение потребует перезапуск)" #: gitk:11402 msgid "(currently unavailable)" -msgstr "" +msgstr "(недоступно в данный момент)" #: gitk:11413 msgid "Colors: press to choose" @@ -1259,12 +1214,11 @@ msgstr "Цвета: нажмите для выбора" #: gitk:11416 msgid "Interface" -msgstr "" +msgstr "Интерфейс" #: gitk:11417 -#, fuzzy msgid "interface" -msgstr "Шрифт интерфейса" +msgstr "интерфейс" #: gitk:11420 msgid "Background" @@ -1339,17 +1293,16 @@ msgid "Gitk preferences" msgstr "Настройки Gitk" #: gitk:11494 -#, fuzzy msgid "General" -msgstr "Создать" +msgstr "Общие" #: gitk:11495 msgid "Colors" -msgstr "" +msgstr "Цвета" #: gitk:11496 msgid "Fonts" -msgstr "" +msgstr "Шрифты" #: gitk:11546 #, tcl-format @@ -1360,9 +1313,7 @@ msgstr "Gitk: выберите цвет для %s" msgid "" "Sorry, gitk cannot run with this version of Tcl/Tk.\n" " Gitk requires at least Tcl/Tk 8.4." -msgstr "" -"К сожалению gitk не может работать с этой версий Tcl/Tk.\n" -"Требуется как минимум Tcl/Tk 8.4." +msgstr "К сожалению gitk не может работать с этой версий Tcl/Tk.\nТребуется как минимум Tcl/Tk 8.4." #: gitk:12269 msgid "Cannot find a git repository here." @@ -1371,38 +1322,8 @@ msgstr "Git-репозитарий не найден в текущем ката #: gitk:12316 #, tcl-format msgid "Ambiguous argument '%s': both revision and filename" -msgstr "Неоднозначный аргумент '%s': существует как версия и имя файла" +msgstr "Неоднозначный аргумент «%s»: существует как редакция и как имя файла" #: gitk:12328 msgid "Bad arguments to gitk:" msgstr "Неправильные аргументы для gitk:" - -#~ msgid "SHA1 ID: " -#~ msgstr "SHA1:" - -#~ msgid "next" -#~ msgstr "След." - -#~ msgid "prev" -#~ msgstr "Пред." - -#~ msgid "Use all refs" -#~ msgstr "Использовать все ветви" - -#~ msgid "Max count:" -#~ msgstr "Макс. количество:" - -#~ msgid "Skip:" -#~ msgstr "Пропустить:" - -#~ msgid "Name" -#~ msgstr "Имя" - -#~ msgid "CDate" -#~ msgstr "Дата ввода" - -#~ msgid "Tag/Head %s is not known" -#~ msgstr "Метка или ветвь %s не найдена" - -#~ msgid "Cannot find the git directory \"%s\"." -#~ msgstr "Git-репозитарий \"%s\" не найден." diff --git a/gitk-git/po/sv.po b/gitk-git/po/sv.po index 0bd46d788..75317f439 100644 --- a/gitk-git/po/sv.po +++ b/gitk-git/po/sv.po @@ -92,71 +92,71 @@ msgid "Cancel" msgstr "Avbryt" #: gitk:2069 -msgid "Update" +msgid "&Update" msgstr "Uppdatera" #: gitk:2070 -msgid "Reload" +msgid "&Reload" msgstr "Ladda om" #: gitk:2071 -msgid "Reread references" +msgid "Reread re&ferences" msgstr "Läs om referenser" #: gitk:2072 -msgid "List references" +msgid "&List references" msgstr "Visa referenser" #: gitk:2074 -msgid "Start git gui" +msgid "Start git &gui" msgstr "Starta git gui" #: gitk:2076 -msgid "Quit" +msgid "&Quit" msgstr "Avsluta" #: gitk:2068 -msgid "File" +msgid "&File" msgstr "Arkiv" #: gitk:2080 -msgid "Preferences" +msgid "&Preferences" msgstr "Inställningar" #: gitk:2079 -msgid "Edit" +msgid "&Edit" msgstr "Redigera" #: gitk:2084 -msgid "New view..." +msgid "&New view..." msgstr "Ny vy..." #: gitk:2085 -msgid "Edit view..." +msgid "&Edit view..." msgstr "Ändra vy..." #: gitk:2086 -msgid "Delete view" +msgid "&Delete view" msgstr "Ta bort vy" #: gitk:2088 gitk:4043 -msgid "All files" +msgid "&All files" msgstr "Alla filer" #: gitk:2083 gitk:4067 -msgid "View" +msgid "&View" msgstr "Visa" #: gitk:2093 gitk:2103 gitk:3012 -msgid "About gitk" +msgid "&About gitk" msgstr "Om gitk" #: gitk:2094 gitk:2108 -msgid "Key bindings" +msgid "&Key bindings" msgstr "Tangentbordsbindningar" #: gitk:2092 gitk:2107 -msgid "Help" +msgid "&Help" msgstr "Hjälp" #: gitk:2185 gitk:8652 diff --git a/gitk-git/po/vi.po b/gitk-git/po/vi.po index 7133c422b..896681236 100644 --- a/gitk-git/po/vi.po +++ b/gitk-git/po/vi.po @@ -1,14 +1,14 @@ # Vietnamese translations for gitk package. # Bản dịch tiếng Việt cho gói gitk. # This file is distributed under the same license as the gitk package. -# Trần Ngọc Quân <vnwildman@gmail.com>, 2013. +# Trần Ngọc Quân <vnwildman@gmail.com>, 2013, 2015. # msgid "" msgstr "" "Project-Id-Version: gitk @@GIT_VERSION@@\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2015-05-17 14:32+1000\n" -"PO-Revision-Date: 2013-12-14 14:40+0700\n" +"PO-Revision-Date: 2015-09-15 07:33+0700\n" "Last-Translator: Trần Ngọc Quân <vnwildman@gmail.com>\n" "Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n" "Language: vi\n" @@ -16,6 +16,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Gtranslator 2.91.7\n" #: gitk:140 msgid "Couldn't get list of unmerged files:" @@ -60,7 +61,7 @@ msgstr "Đang đọc" #: gitk:496 gitk:4525 msgid "Reading commits..." -msgstr "Đang đọc các lần chuyển giao..." +msgstr "Đang đọc các lần chuyển giao…" #: gitk:499 gitk:1637 gitk:4528 msgid "No commits selected" @@ -88,71 +89,71 @@ msgid "Cancel" msgstr "Thôi" #: gitk:2069 -msgid "Update" +msgid "&Update" msgstr "Cập nhật" #: gitk:2070 -msgid "Reload" +msgid "&Reload" msgstr "Tải lại" #: gitk:2071 -msgid "Reread references" +msgid "Reread re&ferences" msgstr "Đọc lại tham chiếu" #: gitk:2072 -msgid "List references" +msgid "&List references" msgstr "Liệt kê các tham chiếu" #: gitk:2074 -msgid "Start git gui" +msgid "Start git &gui" msgstr "Khởi chạy git gui" #: gitk:2076 -msgid "Quit" +msgid "&Quit" msgstr "Thoát" #: gitk:2068 -msgid "File" +msgid "&File" msgstr "Chính" #: gitk:2080 -msgid "Preferences" -msgstr "Cá nhân hóa" +msgid "&Preferences" +msgstr "Tùy thích" #: gitk:2079 -msgid "Edit" +msgid "&Edit" msgstr "Chỉnh sửa" #: gitk:2084 -msgid "New view..." -msgstr "Thêm trình bày mới..." +msgid "&New view..." +msgstr "Thêm trình bày mới…" #: gitk:2085 -msgid "Edit view..." -msgstr "Sửa cách trình bày..." +msgid "&Edit view..." +msgstr "Sửa cách trình bày…" #: gitk:2086 -msgid "Delete view" +msgid "&Delete view" msgstr "Xóa cách trình bày" #: gitk:2088 gitk:4043 -msgid "All files" +msgid "&All files" msgstr "Mọi tập tin" #: gitk:2083 gitk:4067 -msgid "View" +msgid "&View" msgstr "Trình bày" #: gitk:2093 gitk:2103 gitk:3012 -msgid "About gitk" +msgid "&About gitk" msgstr "Giới thiệu về gitk" #: gitk:2094 gitk:2108 -msgid "Key bindings" +msgid "&Key bindings" msgstr "Tổ hợp phím" #: gitk:2092 gitk:2107 -msgid "Help" +msgid "&Help" msgstr "Trợ giúp" #: gitk:2185 gitk:8652 @@ -319,7 +320,7 @@ msgstr "Hoàn lại lần chuyển giao này" #: gitk:2647 msgid "Check out this branch" -msgstr "Checkout nhánh này" +msgstr "Lấy ra nhánh này" #: gitk:2648 msgid "Remove this branch" @@ -327,7 +328,7 @@ msgstr "Gỡ bỏ nhánh này" #: gitk:2649 msgid "Copy branch name" -msgstr "" +msgstr "Chép tên nhánh" #: gitk:2656 msgid "Highlight this too" @@ -347,7 +348,7 @@ msgstr "Xem công trạng lần chuyển giao cha mẹ" #: gitk:2660 msgid "Copy path" -msgstr "" +msgstr "Chép đường dẫn" #: gitk:2667 msgid "Show origin of this line" @@ -358,7 +359,6 @@ msgid "Run git gui blame on this line" msgstr "Chạy lệnh git gui blame cho dòng này" #: gitk:3014 -#, fuzzy msgid "" "\n" "Gitk - a commit viewer for git\n" @@ -368,9 +368,9 @@ msgid "" "Use and redistribute under the terms of the GNU General Public License" msgstr "" "\n" -"Gitk - phần mềm xem các lần chuyển giao dành cho git\n" +"Gitk - ứng dụng để xem các lần chuyển giao dành cho git\n" "\n" -"Bản quyền © 2005-2011 Paul Mackerras\n" +"Bản quyền © 2005-2014 Paul Mackerras\n" "\n" "Dùng và phân phối lại phần mềm này theo các điều khoản của Giấy Phép Công GNU" @@ -424,6 +424,7 @@ msgstr "<Right>, x, l\tDi chuyển tiếp trong danh sách lịch sử" #, tcl-format msgid "<%s-n>\tGo to n-th parent of current commit in history list" msgstr "" +"<%s-n>\tĐến cha thứ n của lần chuyển giao hiện tại trong danh sách lịch sử" #: gitk:3057 msgid "<PageUp>\tMove up one page in commit list" @@ -507,9 +508,8 @@ msgid "<Return>\tMove to next find hit" msgstr "<Return>\t\tDi chuyển đến chỗ gặp kế tiếp" #: gitk:3075 -#, fuzzy msgid "g\t\tGo to commit" -msgstr "<End>\t\tChuyển đến lần chuyển giao cuối" +msgstr "g\t\tChuyển đến lần chuyển giao" #: gitk:3076 msgid "/\t\tFocus the search box" @@ -666,9 +666,8 @@ msgid "Matches all Commit Info criteria" msgstr "Khớp mọi điều kiện Thông tin Chuyển giao" #: gitk:4086 -#, fuzzy msgid "Matches no Commit Info criteria" -msgstr "Khớp mọi điều kiện Thông tin Chuyển giao" +msgstr "Khớp không điều kiện Thông tin Chuyển giao" #: gitk:4087 msgid "Changes to Files:" @@ -716,7 +715,7 @@ msgstr "Số lượng sẽ bỏ qua:" #: gitk:4097 msgid "Miscellaneous options:" -msgstr "Tuỳ chọn hỗn hợp:" +msgstr "Tùy chọn hỗn hợp:" #: gitk:4098 msgid "Strictly sort by date" @@ -971,7 +970,7 @@ msgstr "Gặp lỗi khi tạo miếng vá:" #: gitk:9256 gitk:9373 gitk:9430 msgid "ID:" -msgstr "ID:" +msgstr "Mã số:" #: gitk:9265 msgid "Tag name:" @@ -1186,7 +1185,7 @@ msgstr "Độ rộng biểu đồ tối đa (dòng)" #: gitk:11355 #, no-tcl-format msgid "Maximum graph width (% of pane)" -msgstr "Độ rộng biểu đồ tối đa (% của bảng)" +msgstr "Độ rộng đồ thị tối đa (% của bảng)" #: gitk:11358 msgid "Show local changes" @@ -1194,7 +1193,7 @@ msgstr "Hiển thị các thay đổi nội bộ" #: gitk:11361 msgid "Auto-select SHA1 (length)" -msgstr "Tự chọn SHA1 (độ dài)" +msgstr "Tự chọn (độ dài) SHA1" #: gitk:11365 msgid "Hide remote refs" @@ -1230,7 +1229,7 @@ msgstr "Công cụ so sánh từ bên ngoài" #: gitk:11390 msgid "Choose..." -msgstr "Chọn..." +msgstr "Chọn…" #: gitk:11395 msgid "General options" @@ -1354,6 +1353,8 @@ msgid "" "Sorry, gitk cannot run with this version of Tcl/Tk.\n" " Gitk requires at least Tcl/Tk 8.4." msgstr "" +"Rất tiếc, gitk không thể chạy Tcl/Tk phiên bản này.\n" +" Gitk cần ít nhất là Tcl/Tk 8.4." #: gitk:12269 msgid "Cannot find a git repository here." @@ -1366,7 +1367,7 @@ msgstr "Đối số “%s” chưa rõ ràng: vừa là điểm xét duyệt v #: gitk:12328 msgid "Bad arguments to gitk:" -msgstr "Đối số không hợp lệ cho gitk:" +msgstr "Đối số cho gitk không hợp lệ:" #~ msgid "mc" #~ msgstr "mc" diff --git a/imap-send.c b/imap-send.c index e9faaeaf2..4d3b7737a 100644 --- a/imap-send.c +++ b/imap-send.c @@ -1421,11 +1421,15 @@ static CURL *setup_curl(struct imap_server_conf *srvc) curl_easy_setopt(curl, CURLOPT_PORT, server.port); if (server.auth_method) { +#if LIBCURL_VERSION_NUM < 0x072200 + warning("No LOGIN_OPTIONS support in this cURL version"); +#else struct strbuf auth = STRBUF_INIT; strbuf_addstr(&auth, "AUTH="); strbuf_addstr(&auth, server.auth_method); curl_easy_setopt(curl, CURLOPT_LOGIN_OPTIONS, auth.buf); strbuf_release(&auth); +#endif } if (!server.use_ssl) diff --git a/mailinfo.c b/mailinfo.c index e157ca6eb..f289941f7 100644 --- a/mailinfo.c +++ b/mailinfo.c @@ -1009,7 +1009,7 @@ void setup_mailinfo(struct mailinfo *mi) mi->header_stage = 1; mi->use_inbody_headers = 1; mi->content_top = mi->content; - git_config(git_mailinfo_config, &mi); + git_config(git_mailinfo_config, mi); } void clear_mailinfo(struct mailinfo *mi) diff --git a/merge-recursive.c b/merge-recursive.c index a5e74d85f..21e680a78 100644 --- a/merge-recursive.c +++ b/merge-recursive.c @@ -1530,13 +1530,17 @@ static int read_sha1_strbuf(const unsigned char *sha1, struct strbuf *dst) } static int blob_unchanged(const unsigned char *o_sha, + unsigned o_mode, const unsigned char *a_sha, + unsigned a_mode, int renormalize, const char *path) { struct strbuf o = STRBUF_INIT; struct strbuf a = STRBUF_INIT; int ret = 0; /* assume changed for safety */ + if (a_mode != o_mode) + return 0; if (sha_eq(o_sha, a_sha)) return 1; if (!renormalize) @@ -1722,8 +1726,8 @@ static int process_entry(struct merge_options *o, } else if (o_sha && (!a_sha || !b_sha)) { /* Case A: Deleted in one */ if ((!a_sha && !b_sha) || - (!b_sha && blob_unchanged(o_sha, a_sha, normalize, path)) || - (!a_sha && blob_unchanged(o_sha, b_sha, normalize, path))) { + (!b_sha && blob_unchanged(o_sha, o_mode, a_sha, a_mode, normalize, path)) || + (!a_sha && blob_unchanged(o_sha, o_mode, b_sha, b_mode, normalize, path))) { /* Deleted in both or deleted in one and * unchanged in the other */ if (a_sha) diff --git a/pack-revindex.c b/pack-revindex.c index 5c8376e97..e542ea770 100644 --- a/pack-revindex.c +++ b/pack-revindex.c @@ -21,7 +21,7 @@ static int pack_revindex_hashsz; static int pack_revindex_ix(struct packed_git *p) { - unsigned long ui = (unsigned long)p; + unsigned long ui = (unsigned long)(intptr_t)p; int i; ui = ui ^ (ui >> 16); /* defeat structure alignment */ diff --git a/ref-filter.c b/ref-filter.c index 1194f10ed..e205dd2f6 100644 --- a/ref-filter.c +++ b/ref-filter.c @@ -1457,7 +1457,7 @@ static int cmp_ref_sorting(struct ref_sorting *s, struct ref_array_item *a, stru if (va->ul < vb->ul) cmp = -1; else if (va->ul == vb->ul) - cmp = 0; + cmp = strcmp(a->refname, b->refname); else cmp = 1; } @@ -1939,10 +1939,8 @@ int resolve_remote_symref(struct ref *ref, struct ref *list) static void unmark_and_free(struct commit_list *list, unsigned int mark) { while (list) { - struct commit_list *temp = list; - temp->item->object.flags &= ~mark; - list = temp->next; - free(temp); + struct commit *commit = pop_commit(&list); + commit->object.flags &= ~mark; } } diff --git a/revision.c b/revision.c index 22364636d..0fbb6841b 100644 --- a/revision.c +++ b/revision.c @@ -153,10 +153,7 @@ void mark_parents_uninteresting(struct commit *commit) commit_list_insert(l->item, &parents); while (parents) { - struct commit *commit = parents->item; - l = parents; - parents = parents->next; - free(l); + struct commit *commit = pop_commit(&parents); while (commit) { /* @@ -1102,14 +1099,10 @@ static int limit_list(struct rev_info *revs) } while (list) { - struct commit_list *entry = list; - struct commit *commit = list->item; + struct commit *commit = pop_commit(&list); struct object *obj = &commit->object; show_early_output_fn_t show; - list = list->next; - free(entry); - if (commit == interesting_cache) interesting_cache = NULL; @@ -2733,10 +2726,7 @@ static void simplify_merges(struct rev_info *revs) yet_to_do = NULL; tail = &yet_to_do; while (list) { - commit = list->item; - next = list->next; - free(list); - list = next; + commit = pop_commit(&list); tail = simplify_one(revs, commit, tail); } } @@ -2748,10 +2738,7 @@ static void simplify_merges(struct rev_info *revs) while (list) { struct merge_simplify_state *st; - commit = list->item; - next = list->next; - free(list); - list = next; + commit = pop_commit(&list); st = locate_simplify_state(revs, commit); if (st->simplified == commit) tail = &commit_list_insert(commit, tail)->next; @@ -3125,11 +3112,7 @@ static struct commit *get_revision_1(struct rev_info *revs) return NULL; do { - struct commit_list *entry = revs->commits; - struct commit *commit = entry->item; - - revs->commits = entry->next; - free(entry); + struct commit *commit = pop_commit(&revs->commits); if (revs->reflog_info) { save_parents(revs, commit); diff --git a/sha1_file.c b/sha1_file.c index 50896ff1e..c5b31de9a 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -2126,7 +2126,7 @@ static unsigned long pack_entry_hash(struct packed_git *p, off_t base_offset) { unsigned long hash; - hash = (unsigned long)p + (unsigned long)base_offset; + hash = (unsigned long)(intptr_t)p + (unsigned long)base_offset; hash += (hash >> 8) + (hash >> 16); return hash % MAX_DELTA_CACHE; } @@ -400,13 +400,9 @@ static void paint_down(struct paint_info *info, const unsigned char *sha1, commit_list_insert(c, &head); while (head) { struct commit_list *p; - struct commit *c = head->item; + struct commit *c = pop_commit(&head); uint32_t **refs = ref_bitmap_at(&info->ref_bitmap, c); - p = head; - head = head->next; - free(p); - /* XXX check "UNINTERESTING" from pack bitmaps if available */ if (c->object.flags & (SEEN | UNINTERESTING)) continue; diff --git a/submodule.c b/submodule.c index 5879cfb15..88af54c63 100644 --- a/submodule.c +++ b/submodule.c @@ -130,6 +130,7 @@ static int add_submodule_odb(const char *path) goto done; } /* avoid adding it twice */ + prepare_alt_odb(); for (alt_odb = alt_odb_list; alt_odb; alt_odb = alt_odb->next) if (alt_odb->name - alt_odb->base == objects_directory.len && !strncmp(alt_odb->base, objects_directory.buf, @@ -148,7 +149,6 @@ static int add_submodule_odb(const char *path) /* add possible alternates from the submodule */ read_info_alternates(objects_directory.buf, 0); - prepare_alt_odb(); done: strbuf_release(&objects_directory); return ret; diff --git a/t/t2200-add-update.sh b/t/t2200-add-update.sh index e16b15d3e..314c73c5a 100755 --- a/t/t2200-add-update.sh +++ b/t/t2200-add-update.sh @@ -84,6 +84,8 @@ test_expect_success 'non-qualified update in subdir updates from the root' ' ( cd dir1 && echo even more >>sub2 && + git --literal-pathspecs add -u && + echo even more >>sub2 && git add -u ) && : >expect && diff --git a/t/t2202-add-addremove.sh b/t/t2202-add-addremove.sh index fc8b59e7f..6a5a3166b 100755 --- a/t/t2202-add-addremove.sh +++ b/t/t2202-add-addremove.sh @@ -14,6 +14,7 @@ test_expect_success setup ' echo expect echo ignored ) >.gitignore && + git --literal-pathspecs add --all && >will-remove && git add --all && test_tick && diff --git a/t/t3030-merge-recursive.sh b/t/t3030-merge-recursive.sh index 82e18548c..622418763 100755 --- a/t/t3030-merge-recursive.sh +++ b/t/t3030-merge-recursive.sh @@ -629,5 +629,35 @@ test_expect_failure 'merge-recursive rename vs. rename/symlink' ' test_cmp expected actual ' +test_expect_success 'merging with triple rename across D/F conflict' ' + git reset --hard HEAD && + git checkout -b main && + git rm -rf . && + + echo "just a file" >sub1 && + mkdir -p sub2 && + echo content1 >sub2/file1 && + echo content2 >sub2/file2 && + echo content3 >sub2/file3 && + mkdir simple && + echo base >simple/bar && + git add -A && + test_tick && + git commit -m base && + + git checkout -b other && + echo more >>simple/bar && + test_tick && + git commit -a -m changesimplefile && + + git checkout main && + git rm sub1 && + git mv sub2 sub1 && + test_tick && + git commit -m changefiletodir && + + test_tick && + git merge other +' test_done diff --git a/t/t3203-branch-output.sh b/t/t3203-branch-output.sh index 9454423ca..d3913f908 100755 --- a/t/t3203-branch-output.sh +++ b/t/t3203-branch-output.sh @@ -158,8 +158,8 @@ EOF test_expect_success 'git branch `--sort` option' ' cat >expect <<-\EOF && - branch-two * (HEAD detached from fromtag) + branch-two branch-one master EOF diff --git a/t/t3404-rebase-interactive.sh b/t/t3404-rebase-interactive.sh index 3de0b1dcf..98eb49ac2 100755 --- a/t/t3404-rebase-interactive.sh +++ b/t/t3404-rebase-interactive.sh @@ -1261,4 +1261,16 @@ test_expect_success 'static check of bad SHA-1' ' test E = $(git cat-file commit HEAD | sed -ne \$p) ' +test_expect_success 'editor saves as CR/LF' ' + git checkout -b with-crlf && + write_script add-crs.sh <<-\EOF && + sed -e "s/\$/Q/" <"$1" | tr Q "\\015" >"$1".new && + mv -f "$1".new "$1" + EOF + ( + test_set_editor "$(pwd)/add-crs.sh" && + git rebase -i HEAD^ + ) +' + test_done diff --git a/t/t5700-clone-reference.sh b/t/t5700-clone-reference.sh index 2250ef4fe..dfa1bf79c 100755 --- a/t/t5700-clone-reference.sh +++ b/t/t5700-clone-reference.sh @@ -210,4 +210,15 @@ test_expect_success 'clone, dissociate from partial reference and repack' ' test_line_count = 1 packs.txt ' +test_expect_success 'clone, dissociate from alternates' ' + rm -fr A B C && + test_create_repo A && + commit_in A file1 && + git clone --reference=A A B && + test_line_count = 1 B/.git/objects/info/alternates && + git clone --local --dissociate B C && + ! test -f C/.git/objects/info/alternates && + ( cd C && git fsck ) +' + test_done diff --git a/t/t6031-merge-filemode.sh b/t/t6031-merge-filemode.sh new file mode 100755 index 000000000..7d06461f1 --- /dev/null +++ b/t/t6031-merge-filemode.sh @@ -0,0 +1,100 @@ +#!/bin/sh + +test_description='merge: handle file mode' +. ./test-lib.sh + +test_expect_success 'set up mode change in one branch' ' + : >file1 && + git add file1 && + git commit -m initial && + git checkout -b a1 master && + : >dummy && + git add dummy && + git commit -m a && + git checkout -b b1 master && + test_chmod +x file1 && + git add file1 && + git commit -m b1 +' + +do_one_mode () { + strategy=$1 + us=$2 + them=$3 + test_expect_success "resolve single mode change ($strategy, $us)" ' + git checkout -f $us && + git merge -s $strategy $them && + git ls-files -s file1 | grep ^100755 + ' + + test_expect_success FILEMODE "verify executable bit on file ($strategy, $us)" ' + test -x file1 + ' +} + +do_one_mode recursive a1 b1 +do_one_mode recursive b1 a1 +do_one_mode resolve a1 b1 +do_one_mode resolve b1 a1 + +test_expect_success 'set up mode change in both branches' ' + git reset --hard HEAD && + git checkout -b a2 master && + : >file2 && + H=$(git hash-object file2) && + test_chmod +x file2 && + git commit -m a2 && + git checkout -b b2 master && + : >file2 && + git add file2 && + git commit -m b2 && + { + echo "100755 $H 2 file2" + echo "100644 $H 3 file2" + } >expect +' + +do_both_modes () { + strategy=$1 + test_expect_success "detect conflict on double mode change ($strategy)" ' + git reset --hard && + git checkout -f a2 && + test_must_fail git merge -s $strategy b2 && + git ls-files -u >actual && + test_cmp actual expect && + git ls-files -s file2 | grep ^100755 + ' + + test_expect_success FILEMODE "verify executable bit on file ($strategy)" ' + test -x file2 + ' +} + +# both sides are equivalent, so no need to run both ways +do_both_modes recursive +do_both_modes resolve + +test_expect_success 'set up delete/modechange scenario' ' + git reset --hard && + git checkout -b deletion master && + git rm file1 && + git commit -m deletion +' + +do_delete_modechange () { + strategy=$1 + us=$2 + them=$3 + test_expect_success "detect delete/modechange conflict ($strategy, $us)" ' + git reset --hard && + git checkout $us && + test_must_fail git merge -s $strategy $them + ' +} + +do_delete_modechange recursive b1 deletion +do_delete_modechange recursive deletion b1 +do_delete_modechange resolve b1 deletion +do_delete_modechange resolve deletion b1 + +test_done diff --git a/t/t6031-merge-recursive.sh b/t/t6031-merge-recursive.sh deleted file mode 100755 index 6464a16a1..000000000 --- a/t/t6031-merge-recursive.sh +++ /dev/null @@ -1,87 +0,0 @@ -#!/bin/sh - -test_description='merge-recursive: handle file mode' -. ./test-lib.sh - -test_expect_success 'mode change in one branch: keep changed version' ' - : >file1 && - git add file1 && - git commit -m initial && - git checkout -b a1 master && - : >dummy && - git add dummy && - git commit -m a && - git checkout -b b1 master && - test_chmod +x file1 && - git add file1 && - git commit -m b1 && - git checkout a1 && - git merge-recursive master -- a1 b1 && - git ls-files -s file1 | grep ^100755 -' - -test_expect_success FILEMODE 'verify executable bit on file' ' - test -x file1 -' - -test_expect_success 'mode change in both branches: expect conflict' ' - git reset --hard HEAD && - git checkout -b a2 master && - : >file2 && - H=$(git hash-object file2) && - test_chmod +x file2 && - git commit -m a2 && - git checkout -b b2 master && - : >file2 && - git add file2 && - git commit -m b2 && - git checkout a2 && - ( - git merge-recursive master -- a2 b2 - test $? = 1 - ) && - git ls-files -u >actual && - ( - echo "100755 $H 2 file2" - echo "100644 $H 3 file2" - ) >expect && - test_cmp actual expect && - git ls-files -s file2 | grep ^100755 -' - -test_expect_success FILEMODE 'verify executable bit on file' ' - test -x file2 -' - -test_expect_success 'merging with triple rename across D/F conflict' ' - git reset --hard HEAD && - git checkout -b main && - git rm -rf . && - - echo "just a file" >sub1 && - mkdir -p sub2 && - echo content1 >sub2/file1 && - echo content2 >sub2/file2 && - echo content3 >sub2/file3 && - mkdir simple && - echo base >simple/bar && - git add -A && - test_tick && - git commit -m base && - - git checkout -b other && - echo more >>simple/bar && - test_tick && - git commit -a -m changesimplefile && - - git checkout main && - git rm sub1 && - git mv sub2 sub1 && - test_tick && - git commit -m changefiletodir && - - test_tick && - git merge other -' - -test_done diff --git a/t/t7600-merge.sh b/t/t7600-merge.sh index 75c50eea1..302e23826 100755 --- a/t/t7600-merge.sh +++ b/t/t7600-merge.sh @@ -692,4 +692,37 @@ test_expect_success GPG 'merge --no-edit tag should skip editor' ' test_cmp actual expect ' +test_expect_success 'set up mod-256 conflict scenario' ' + # 256 near-identical stanzas... + for i in $(test_seq 1 256); do + for j in 1 2 3 4 5; do + echo $i-$j + done + done >file && + git add file && + git commit -m base && + + # one side changes the first line of each to "master" + sed s/-1/-master/ <file >tmp && + mv tmp file && + git commit -am master && + + # and the other to "side"; merging the two will + # yield 256 separate conflicts + git checkout -b side HEAD^ && + sed s/-1/-side/ <file >tmp && + mv tmp file && + git commit -am side +' + +test_expect_success 'merge detects mod-256 conflicts (recursive)' ' + git reset --hard && + test_must_fail git merge -s recursive master +' + +test_expect_success 'merge detects mod-256 conflicts (resolve)' ' + git reset --hard && + test_must_fail git merge -s resolve master +' + test_done diff --git a/t/t7800-difftool.sh b/t/t7800-difftool.sh index 48c6e2bc8..ec8bc8c76 100755 --- a/t/t7800-difftool.sh +++ b/t/t7800-difftool.sh @@ -504,4 +504,23 @@ test_expect_success PERL 'difftool properly honors gitlink and core.worktree' ' ) ' +test_expect_success PERL,SYMLINKS 'difftool --dir-diff symlinked directories' ' + git init dirlinks && + ( + cd dirlinks && + git config diff.tool checktrees && + git config difftool.checktrees.cmd "echo good" && + mkdir foo && + : >foo/bar && + git add foo/bar && + test_commit symlink-one && + ln -s foo link && + git add link && + test_commit symlink-two && + echo good >expect && + git difftool --tool=checktrees --dir-diff HEAD~ >actual && + test_cmp expect actual + ) +' + test_done diff --git a/upload-pack.c b/upload-pack.c index 89e832b64..d0bc3ca07 100644 --- a/upload-pack.c +++ b/upload-pack.c @@ -316,10 +316,8 @@ static int reachable(struct commit *want) commit_list_insert_by_date(want, &work); while (work) { - struct commit_list *list = work->next; - struct commit *commit = work->item; - free(work); - work = list; + struct commit_list *list; + struct commit *commit = pop_commit(&work); if (commit->object.flags & THEY_HAVE) { want->object.flags |= COMMON_KNOWN; |