diff options
48 files changed, 2060 insertions, 1483 deletions
diff --git a/.travis.yml b/.travis.yml index 477c3d2efb..37a1e1fb6d 100644 --- a/.travis.yml +++ b/.travis.yml @@ -78,7 +78,7 @@ before_install: FORMULA=$1 SHA=$(brew fetch --force $FORMULA 2>&1 | grep ^SHA256: | cut -d ' ' -f 2) sed -E -i.bak "s/sha256 \"[0-9a-f]{64}\"/sha256 \"$SHA\"/g" \ - /usr/local/Library/Taps/homebrew/homebrew-binary/$FORMULA.rb + "$(brew --repository homebrew/homebrew-binary)/$FORMULA.rb" } brew update --quiet brew tap homebrew/binary --quiet diff --git a/Documentation/RelNotes/2.10.1.txt b/Documentation/RelNotes/2.10.1.txt index 75c07e199e..70462f7f7e 100644 --- a/Documentation/RelNotes/2.10.1.txt +++ b/Documentation/RelNotes/2.10.1.txt @@ -30,4 +30,102 @@ Fixes since v2.10 * Update a few tests that used to use GIT_CURL_VERBOSE to use the newer GIT_TRACE_CURL. + * Update Japanese translation for "git-gui". + + * "git fetch http::/site/path" did not die correctly and segfaulted + instead. + + * "git commit-tree" stopped reading commit.gpgsign configuration + variable that was meant for Porcelain "git commit" in Git 2.9; we + forgot to update "git gui" to look at the configuration to match + this change. + + * "git log --cherry-pick" used to include merge commits as candidates + to be matched up with other commits, resulting a lot of wasted time. + The patch-id generation logic has been updated to ignore merges to + avoid the wastage. + + * The http transport (with curl-multi option, which is the default + these days) failed to remove curl-easy handle from a curlm session, + which led to unnecessary API failures. + + * "git diff -W" output needs to extend the context backward to + include the header line of the current function and also forward to + include the body of the entire current function up to the header + line of the next one. This process may have to merge to adjacent + hunks, but the code forgot to do so in some cases. + + * Performance tests done via "t/perf" did not use the same set of + build configuration if the user relied on autoconf generated + configuration. + + * "git format-patch --base=..." feature that was recently added + showed the base commit information after "-- " e-mail signature + line, which turned out to be inconvenient. The base information + has been moved above the signature line. + + * Even when "git pull --rebase=preserve" (and the underlying "git + rebase --preserve") can complete without creating any new commit + (i.e. fast-forwards), it still insisted on having a usable ident + information (read: user.email is set correctly), which was less + than nice. As the underlying commands used inside "git rebase" + would fail with a more meaningful error message and advice text + when the bogus ident matters, this extra check was removed. + + * "git gc --aggressive" used to limit the delta-chain length to 250, + which is way too deep for gaining additional space savings and is + detrimental for runtime performance. The limit has been reduced to + 50. + + * Documentation for individual configuration variables to control use + of color (like `color.grep`) said that their default value is + 'false', instead of saying their default is taken from `color.ui`. + When we updated the default value for color.ui from 'false' to + 'auto' quite a while ago, all of them broke. This has been + corrected. + + * A shell script example in check-ref-format documentation has been + fixed. + + * "git checkout <word>" does not follow the usual disambiguation + rules when the <word> can be both a rev and a path, to allow + checking out a branch 'foo' in a project that happens to have a + file 'foo' in the working tree without having to disambiguate. + This was poorly documented and the check was incorrect when the + command was run from a subdirectory. + + * Some codepaths in "git diff" used regexec(3) on a buffer that was + mmap(2)ed, which may not have a terminating NUL, leading to a read + beyond the end of the mapped region. This was fixed by introducing + a regexec_buf() helper that takes a <ptr,len> pair with REG_STARTEND + extension. + + * The procedure to build Git on Mac OS X for Travis CI hardcoded the + internal directory structure we assumed HomeBrew uses, which was a + no-no. The procedure has been updated to ask HomeBrew things we + need to know to fix this. + + * When "git rebase -i" is given a broken instruction, it told the + user to fix it with "--edit-todo", but didn't say what the step + after that was (i.e. "--continue"). + + * "git add --chmod=+x" added recently lacked documentation, which has + been corrected. + + * "git add --chmod=+x <pathspec>" added recently only toggled the + executable bit for paths that are either new or modified. This has + been corrected to flip the executable bit for all paths that match + the given pathspec. + + * "git pack-objects --include-tag" was taught that when we know that + we are sending an object C, we want a tag B that directly points at + C but also a tag A that points at the tag B. We used to miss the + intermediate tag B in some cases. + + * Documentation around tools to import from CVS was fairly outdated. + + * In the codepath that comes up with the hostname to be used in an + e-mail when the user didn't tell us, we looked at ai_canonname + field in struct addrinfo without making sure it is not NULL first. + Also contains minor documentation updates and code clean-ups. diff --git a/Documentation/config.txt b/Documentation/config.txt index 0bcb6790d6..a077c64ef0 100644 --- a/Documentation/config.txt +++ b/Documentation/config.txt @@ -953,7 +953,8 @@ color.branch:: A boolean to enable/disable color in the output of linkgit:git-branch[1]. May be set to `always`, `false` (or `never`) or `auto` (or `true`), in which case colors are used - only when the output is to a terminal. Defaults to false. + only when the output is to a terminal. If unset, then the + value of `color.ui` is used (`auto` by default). color.branch.<slot>:: Use customized color for branch coloration. `<slot>` is one of @@ -968,7 +969,8 @@ color.diff:: linkgit:git-log[1], and linkgit:git-show[1] will use color for all patches. If it is set to `true` or `auto`, those commands will only use color when output is to the terminal. - Defaults to false. + If unset, then the value of `color.ui` is used (`auto` by + default). + This does not affect linkgit:git-format-patch[1] or the 'git-diff-{asterisk}' plumbing commands. Can be overridden on the @@ -991,7 +993,8 @@ color.decorate.<slot>:: color.grep:: When set to `always`, always highlight matches. When `false` (or `never`), never. When set to `true` or `auto`, use color only - when the output is written to the terminal. Defaults to `false`. + when the output is written to the terminal. If unset, then the + value of `color.ui` is used (`auto` by default). color.grep.<slot>:: Use customized color for grep colorization. `<slot>` specifies which @@ -1024,7 +1027,8 @@ color.interactive:: and displays (such as those used by "git-add --interactive" and "git-clean --interactive"). When false (or `never`), never. When set to `true` or `auto`, use colors only when the output is - to the terminal. Defaults to false. + to the terminal. If unset, then the value of `color.ui` is + used (`auto` by default). color.interactive.<slot>:: Use customized color for 'git add --interactive' and 'git clean @@ -1040,13 +1044,15 @@ color.showBranch:: A boolean to enable/disable color in the output of linkgit:git-show-branch[1]. May be set to `always`, `false` (or `never`) or `auto` (or `true`), in which case colors are used - only when the output is to a terminal. Defaults to false. + only when the output is to a terminal. If unset, then the + value of `color.ui` is used (`auto` by default). color.status:: A boolean to enable/disable color in the output of linkgit:git-status[1]. May be set to `always`, `false` (or `never`) or `auto` (or `true`), in which case colors are used - only when the output is to a terminal. Defaults to false. + only when the output is to a terminal. If unset, then the + value of `color.ui` is used (`auto` by default). color.status.<slot>:: Use customized color for status colorization. `<slot>` is @@ -1366,7 +1372,7 @@ fsck.skipList:: gc.aggressiveDepth:: The depth parameter used in the delta compression algorithm used by 'git gc --aggressive'. This defaults - to 250. + to 50. gc.aggressiveWindow:: The window size parameter used in the delta compression diff --git a/Documentation/git-add.txt b/Documentation/git-add.txt index 6a96a669c2..7ed63dce0b 100644 --- a/Documentation/git-add.txt +++ b/Documentation/git-add.txt @@ -11,7 +11,7 @@ SYNOPSIS 'git add' [--verbose | -v] [--dry-run | -n] [--force | -f] [--interactive | -i] [--patch | -p] [--edit | -e] [--[no-]all | --[no-]ignore-removal | [--update | -u]] [--intent-to-add | -N] [--refresh] [--ignore-errors] [--ignore-missing] - [--] [<pathspec>...] + [--chmod=(+|-)x] [--] [<pathspec>...] DESCRIPTION ----------- @@ -165,6 +165,11 @@ for "git add --no-all <pathspec>...", i.e. ignored removed files. be ignored, no matter if they are already present in the work tree or not. +--chmod=(+|-)x:: + Override the executable bit of the added files. The executable + bit is only changed in the index, the files on disk are left + unchanged. + \--:: This option can be used to separate command-line options from the list of files, (useful when filenames might be mistaken diff --git a/Documentation/git-check-ref-format.txt b/Documentation/git-check-ref-format.txt index 91a3622ee4..8611a99120 100644 --- a/Documentation/git-check-ref-format.txt +++ b/Documentation/git-check-ref-format.txt @@ -118,8 +118,8 @@ $ git check-ref-format --branch @{-1} * Determine the reference name to use for a new branch: + ------------ -$ ref=$(git check-ref-format --normalize "refs/heads/$newbranch") || -die "we do not like '$newbranch' as a branch name." +$ ref=$(git check-ref-format --normalize "refs/heads/$newbranch")|| +{ echo "we do not like '$newbranch' as a branch name." >&2 ; exit 1 ; } ------------ GIT diff --git a/Documentation/git-checkout.txt b/Documentation/git-checkout.txt index 7a2201b051..8e2c0662dd 100644 --- a/Documentation/git-checkout.txt +++ b/Documentation/git-checkout.txt @@ -419,6 +419,18 @@ $ git reflog -2 HEAD # or $ git log -g -2 HEAD ------------ +ARGUMENT DISAMBIGUATION +----------------------- + +When there is only one argument given and it is not `--` (e.g. "git +checkout abc"), and when the argument is both a valid `<tree-ish>` +(e.g. a branch "abc" exists) and a valid `<pathspec>` (e.g. a file +or a directory whose name is "abc" exists), Git would usually ask +you to disambiguate. Because checking out a branch is so common an +operation, however, "git checkout abc" takes "abc" as a `<tree-ish>` +in such a situation. Use `git checkout -- <pathspec>` if you want +to checkout these paths out of the index. + EXAMPLES -------- diff --git a/Documentation/git-cvsimport.txt b/Documentation/git-cvsimport.txt index 41207a24b0..de1ebed67d 100644 --- a/Documentation/git-cvsimport.txt +++ b/Documentation/git-cvsimport.txt @@ -22,7 +22,7 @@ DESCRIPTION deprecated; it does not work with cvsps version 3 and later. If you are performing a one-shot import of a CVS repository consider using http://cvs2svn.tigris.org/cvs2git.html[cvs2git] or -https://github.com/BartMassey/parsecvs[parsecvs]. +http://www.catb.org/esr/cvs-fast-export/[cvs-fast-export]. Imports a CVS repository into Git. It will either create a new repository, or incrementally import into an existing one. diff --git a/Documentation/git.txt b/Documentation/git.txt index 7913fc2513..b8bec711f4 100644 --- a/Documentation/git.txt +++ b/Documentation/git.txt @@ -43,9 +43,10 @@ unreleased) version of Git, that is available from the 'master' branch of the `git.git` repository. Documentation for older releases are available here: -* link:v2.10.0/git.html[documentation for release 2.10] +* link:v2.10.1/git.html[documentation for release 2.10.1] * release notes for + link:RelNotes/2.10.1.txt[2.10.1], link:RelNotes/2.10.0.txt[2.10]. * link:v2.9.3/git.html[documentation for release 2.9.3] diff --git a/Documentation/gitcvs-migration.txt b/Documentation/gitcvs-migration.txt index b06e852a85..4c6143c511 100644 --- a/Documentation/gitcvs-migration.txt +++ b/Documentation/gitcvs-migration.txt @@ -116,8 +116,12 @@ they create are writable and searchable by other group members. Importing a CVS archive ----------------------- +NOTE: These instructions use the `git-cvsimport` script which ships with +git, but other importers may provide better results. See the note in +linkgit:git-cvsimport[1] for other options. + First, install version 2.1 or higher of cvsps from -http://www.cobite.com/cvsps/[http://www.cobite.com/cvsps/] and make +https://github.com/andreyvit/cvsps[https://github.com/andreyvit/cvsps] and make sure it is in your path. Then cd to a checked out CVS working directory of the project you are interested in and run linkgit:git-cvsimport[1]: diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN index 6754ab076e..7d5c4771b4 100755 --- a/GIT-VERSION-GEN +++ b/GIT-VERSION-GEN @@ -1,7 +1,7 @@ #!/bin/sh GVF=GIT-VERSION-FILE -DEF_VER=v2.10.0 +DEF_VER=v2.10.1 LF=' ' @@ -301,7 +301,8 @@ all:: # crashes due to allocation and free working on different 'heaps'. # It's defined automatically if USE_NED_ALLOCATOR is set. # -# Define NO_REGEX if you have no or inferior regex support in your C library. +# Define NO_REGEX if your C library lacks regex support with REG_STARTEND +# feature. # # Define HAVE_DEV_TTY if your system can open /dev/tty to interact with the # user. diff --git a/builtin/add.c b/builtin/add.c index b1dddb4ac6..e8fb80b36e 100644 --- a/builtin/add.c +++ b/builtin/add.c @@ -26,10 +26,25 @@ static int patch_interactive, add_interactive, edit_interactive; static int take_worktree_changes; struct update_callback_data { - int flags, force_mode; + int flags; int add_errors; }; +static void chmod_pathspec(struct pathspec *pathspec, int force_mode) +{ + int i; + + for (i = 0; i < active_nr; i++) { + struct cache_entry *ce = active_cache[i]; + + if (pathspec && !ce_path_match(ce, pathspec, NULL)) + continue; + + if (chmod_cache_entry(ce, force_mode) < 0) + fprintf(stderr, "cannot chmod '%s'", ce->name); + } +} + static int fix_unmerged_status(struct diff_filepair *p, struct update_callback_data *data) { @@ -65,8 +80,7 @@ static void update_callback(struct diff_queue_struct *q, die(_("unexpected diff status %c"), p->status); case DIFF_STATUS_MODIFIED: case DIFF_STATUS_TYPE_CHANGED: - if (add_file_to_index(&the_index, path, - data->flags, data->force_mode)) { + if (add_file_to_index(&the_index, path, data->flags)) { if (!(data->flags & ADD_CACHE_IGNORE_ERRORS)) die(_("updating files failed")); data->add_errors++; @@ -84,15 +98,14 @@ static void update_callback(struct diff_queue_struct *q, } } -int add_files_to_cache(const char *prefix, const struct pathspec *pathspec, - int flags, int force_mode) +int add_files_to_cache(const char *prefix, + const struct pathspec *pathspec, int flags) { struct update_callback_data data; struct rev_info rev; memset(&data, 0, sizeof(data)); data.flags = flags; - data.force_mode = force_mode; init_revisions(&rev, prefix); setup_revisions(0, NULL, &rev, NULL); @@ -281,7 +294,7 @@ static int add_config(const char *var, const char *value, void *cb) return git_default_config(var, value, cb); } -static int add_files(struct dir_struct *dir, int flags, int force_mode) +static int add_files(struct dir_struct *dir, int flags) { int i, exit_status = 0; @@ -294,8 +307,7 @@ static int add_files(struct dir_struct *dir, int flags, int force_mode) } for (i = 0; i < dir->nr; i++) - if (add_file_to_index(&the_index, dir->entries[i]->name, - flags, force_mode)) { + if (add_file_to_index(&the_index, dir->entries[i]->name, flags)) { if (!ignore_add_errors) die(_("adding files failed")); exit_status = 1; @@ -308,7 +320,7 @@ int cmd_add(int argc, const char **argv, const char *prefix) int exit_status = 0; struct pathspec pathspec; struct dir_struct dir; - int flags, force_mode; + int flags; int add_new_files; int require_pathspec; char *seen = NULL; @@ -342,13 +354,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 (!chmod_arg) - force_mode = 0; - else if (!strcmp(chmod_arg, "-x")) - force_mode = 0666; - else if (!strcmp(chmod_arg, "+x")) - force_mode = 0777; - else + if (chmod_arg && ((chmod_arg[0] != '-' && chmod_arg[0] != '+') || + chmod_arg[1] != 'x' || chmod_arg[2])) die(_("--chmod param '%s' must be either -x or +x"), chmod_arg); add_new_files = !take_worktree_changes && !refresh_only; @@ -441,11 +448,13 @@ int cmd_add(int argc, const char **argv, const char *prefix) plug_bulk_checkin(); - exit_status |= add_files_to_cache(prefix, &pathspec, flags, force_mode); + exit_status |= add_files_to_cache(prefix, &pathspec, flags); if (add_new_files) - exit_status |= add_files(&dir, flags, force_mode); + exit_status |= add_files(&dir, flags); + if (chmod_arg && pathspec.nr) + chmod_pathspec(&pathspec, chmod_arg[0]); unplug_bulk_checkin(); finish: diff --git a/builtin/checkout.c b/builtin/checkout.c index 8672d0724f..32cf317ec2 100644 --- a/builtin/checkout.c +++ b/builtin/checkout.c @@ -154,8 +154,8 @@ static int check_stages(unsigned stages, const struct cache_entry *ce, int pos) return 0; } -static int checkout_stage(int stage, struct cache_entry *ce, int pos, - struct checkout *state) +static int checkout_stage(int stage, const struct cache_entry *ce, int pos, + const struct checkout *state) { while (pos < active_nr && !strcmp(active_cache[pos]->name, ce->name)) { @@ -169,7 +169,7 @@ static int checkout_stage(int stage, struct cache_entry *ce, int pos, return error(_("path '%s' does not have their version"), ce->name); } -static int checkout_merged(int pos, struct checkout *state) +static int checkout_merged(int pos, const struct checkout *state) { struct cache_entry *ce = active_cache[pos]; const char *path = ce->name; @@ -548,7 +548,7 @@ static int merge_working_tree(const struct checkout_opts *opts, * entries in the index. */ - add_files_to_cache(NULL, NULL, 0, 0); + add_files_to_cache(NULL, NULL, 0); /* * NEEDSWORK: carrying over local changes * when branches have different end-of-line @@ -985,7 +985,7 @@ static int parse_branchname_arg(int argc, const char **argv, int recover_with_dwim = dwim_new_local_branch_ok; if (!has_dash_dash && - (check_filename(NULL, arg) || !no_wildcard(arg))) + (check_filename(opts->prefix, arg) || !no_wildcard(arg))) recover_with_dwim = 0; /* * Accept "git checkout foo" and "git checkout foo --" @@ -1038,7 +1038,7 @@ static int parse_branchname_arg(int argc, const char **argv, if (!*source_tree) /* case (1): want a tree */ die(_("reference is not a tree: %s"), arg); - if (!has_dash_dash) {/* case (3).(d) -> (1) */ + if (!has_dash_dash) { /* case (3).(d) -> (1) */ /* * Do not complain the most common case * git checkout branch @@ -1046,7 +1046,7 @@ static int parse_branchname_arg(int argc, const char **argv, * it would be extremely annoying. */ if (argc) - verify_non_filename(NULL, arg); + verify_non_filename(opts->prefix, arg); } else { argcount++; argv++; diff --git a/builtin/commit.c b/builtin/commit.c index 77e3dc8494..7a1ade0d27 100644 --- a/builtin/commit.c +++ b/builtin/commit.c @@ -387,7 +387,7 @@ static const char *prepare_index(int argc, const char **argv, const char *prefix */ if (all || (also && pathspec.nr)) { hold_locked_index(&index_lock, 1); - add_files_to_cache(also ? prefix : NULL, &pathspec, 0, 0); + add_files_to_cache(also ? prefix : NULL, &pathspec, 0); refresh_cache_or_die(refresh_flags); update_main_cache_tree(WRITE_TREE_SILENT); if (write_locked_index(&the_index, &index_lock, CLOSE_LOCK)) diff --git a/builtin/gc.c b/builtin/gc.c index 332bcf7e7a..069950d0b4 100644 --- a/builtin/gc.c +++ b/builtin/gc.c @@ -28,7 +28,7 @@ static const char * const builtin_gc_usage[] = { static int pack_refs = 1; static int prune_reflogs = 1; -static int aggressive_depth = 250; +static int aggressive_depth = 50; static int aggressive_window = 250; static int gc_auto_threshold = 6700; static int gc_auto_pack_limit = 50; diff --git a/builtin/log.c b/builtin/log.c index 92dc34dcb0..cd9c4a46d1 100644 --- a/builtin/log.c +++ b/builtin/log.c @@ -1042,7 +1042,6 @@ static void make_cover_letter(struct rev_info *rev, int use_stdout, diff_flush(&opts); fprintf(rev->diffopt.file, "\n"); - print_signature(rev->diffopt.file); } static const char *clean_message_id(const char *msg_id) @@ -1361,7 +1360,7 @@ static void print_bases(struct base_tree_info *bases, FILE *file) return; /* Show the base commit */ - fprintf(file, "base-commit: %s\n", oid_to_hex(&bases->base_commit)); + fprintf(file, "\nbase-commit: %s\n", oid_to_hex(&bases->base_commit)); /* Show the prerequisite patches */ for (i = bases->nr_patch_id - 1; i >= 0; i--) @@ -1720,6 +1719,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) make_cover_letter(&rev, use_stdout, origin, nr, list, branch_name, quiet); print_bases(&bases, rev.diffopt.file); + print_signature(rev.diffopt.file); total++; start_number--; } @@ -1779,13 +1779,13 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix) if (!use_stdout) rev.shown_one = 0; if (shown) { + print_bases(&bases, rev.diffopt.file); if (rev.mime_boundary) fprintf(rev.diffopt.file, "\n--%s%s--\n\n\n", mime_boundary_leader, rev.mime_boundary); else print_signature(rev.diffopt.file); - print_bases(&bases, rev.diffopt.file); } if (!use_stdout) fclose(rev.diffopt.file); diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c index 4a63398960..0954375be9 100644 --- a/builtin/pack-objects.c +++ b/builtin/pack-objects.c @@ -2123,6 +2123,35 @@ static void ll_find_deltas(struct object_entry **list, unsigned list_size, #define ll_find_deltas(l, s, w, d, p) find_deltas(l, &s, w, d, p) #endif +static void add_tag_chain(const struct object_id *oid) +{ + struct tag *tag; + + /* + * We catch duplicates already in add_object_entry(), but we'd + * prefer to do this extra check to avoid having to parse the + * tag at all if we already know that it's being packed (e.g., if + * it was included via bitmaps, we would not have parsed it + * previously). + */ + if (packlist_find(&to_pack, oid->hash, NULL)) + return; + + tag = lookup_tag(oid->hash); + while (1) { + if (!tag || parse_tag(tag) || !tag->tagged) + die("unable to pack objects reachable from tag %s", + oid_to_hex(oid)); + + add_object_entry(tag->object.oid.hash, OBJ_TAG, NULL, 0); + + if (tag->tagged->type != OBJ_TAG) + return; + + tag = (struct tag *)tag->tagged; + } +} + static int add_ref_tag(const char *path, const struct object_id *oid, int flag, void *cb_data) { struct object_id peeled; @@ -2130,7 +2159,7 @@ static int add_ref_tag(const char *path, const struct object_id *oid, int flag, if (starts_with(path, "refs/tags/") && /* is a tag? */ !peel_ref(path, peeled.hash) && /* peelable? */ packlist_find(&to_pack, peeled.hash, NULL)) /* object packed? */ - add_object_entry(oid->hash, OBJ_TAG, NULL, 0); + add_tag_chain(oid); return 0; } diff --git a/builtin/update-index.c b/builtin/update-index.c index ba04b197d8..9e9e04059c 100644 --- a/builtin/update-index.c +++ b/builtin/update-index.c @@ -419,30 +419,18 @@ static int add_cacheinfo(unsigned int mode, const unsigned char *sha1, return 0; } -static void chmod_path(int flip, const char *path) +static void chmod_path(char flip, const char *path) { int pos; struct cache_entry *ce; - unsigned int mode; pos = cache_name_pos(path, strlen(path)); if (pos < 0) goto fail; ce = active_cache[pos]; - mode = ce->ce_mode; - if (!S_ISREG(mode)) - goto fail; - switch (flip) { - case '+': - ce->ce_mode |= 0111; break; - case '-': - ce->ce_mode &= ~0111; break; - default: + if (chmod_cache_entry(ce, flip) < 0) goto fail; - } - cache_tree_invalidate_path(&the_index, path); - ce->ce_flags |= CE_UPDATE_IN_BASE; - active_cache_changed |= CE_ENTRY_CHANGED; + report("chmod %cx '%s'", flip, path); return; fail: @@ -367,8 +367,9 @@ extern void free_name_hash(struct index_state *istate); #define rename_cache_entry_at(pos, new_name) rename_index_entry_at(&the_index, (pos), (new_name)) #define remove_cache_entry_at(pos) remove_index_entry_at(&the_index, (pos)) #define remove_file_from_cache(path) remove_file_from_index(&the_index, (path)) -#define add_to_cache(path, st, flags) add_to_index(&the_index, (path), (st), (flags), 0) -#define add_file_to_cache(path, flags) add_file_to_index(&the_index, (path), (flags), 0) +#define add_to_cache(path, st, flags) add_to_index(&the_index, (path), (st), (flags)) +#define add_file_to_cache(path, flags) add_file_to_index(&the_index, (path), (flags)) +#define chmod_cache_entry(ce, flip) chmod_index_entry(&the_index, (ce), (flip)) #define refresh_cache(flags) refresh_index(&the_index, (flags), NULL, NULL, NULL) #define ce_match_stat(ce, st, options) ie_match_stat(&the_index, (ce), (st), (options)) #define ce_modified(ce, st, options) ie_modified(&the_index, (ce), (st), (options)) @@ -581,9 +582,10 @@ extern int remove_file_from_index(struct index_state *, const char *path); #define ADD_CACHE_IGNORE_ERRORS 4 #define ADD_CACHE_IGNORE_REMOVAL 8 #define ADD_CACHE_INTENT 16 -extern int add_to_index(struct index_state *, const char *path, struct stat *, int flags, int force_mode); -extern int add_file_to_index(struct index_state *, const char *path, int flags, int force_mode); +extern int add_to_index(struct index_state *, const char *path, struct stat *, int flags); +extern int add_file_to_index(struct index_state *, const char *path, int flags); extern struct cache_entry *make_cache_entry(unsigned int mode, const unsigned char *sha1, const char *path, int stage, unsigned int refresh_options); +extern int chmod_index_entry(struct index_state *, struct cache_entry *ce, char flip); extern int ce_same_name(const struct cache_entry *a, const struct cache_entry *b); extern void set_object_name_for_intent_to_add_entry(struct cache_entry *ce); extern int index_name_is_other(const struct index_state *, const char *, int); @@ -1828,7 +1830,7 @@ void packet_trace_identity(const char *prog); * return 0 if success, 1 - if addition of a file failed and * ADD_FILES_IGNORE_ERRORS was specified in flags */ -int add_files_to_cache(const char *prefix, const struct pathspec *pathspec, int flags, int force_mode); +int add_files_to_cache(const char *prefix, const struct pathspec *pathspec, int flags); /* diff.c */ extern int diff_auto_refresh_index; @@ -949,7 +949,8 @@ static int find_word_boundaries(mmfile_t *buffer, regex_t *word_regex, { if (word_regex && *begin < buffer->size) { regmatch_t match[1]; - if (!regexec(word_regex, buffer->ptr + *begin, 1, match, 0)) { + if (!regexec_buf(word_regex, buffer->ptr + *begin, + buffer->size - *begin, 1, match, 0)) { char *p = memchr(buffer->ptr + *begin + match[0].rm_so, '\n', match[0].rm_eo - match[0].rm_so); *end = p ? p - buffer->ptr : match[0].rm_eo + *begin; diff --git a/diffcore-pickaxe.c b/diffcore-pickaxe.c index 55067cab6c..9795ca1c15 100644 --- a/diffcore-pickaxe.c +++ b/diffcore-pickaxe.c @@ -23,7 +23,6 @@ static void diffgrep_consume(void *priv, char *line, unsigned long len) { struct diffgrep_cb *data = priv; regmatch_t regmatch; - int hold; if (line[0] != '+' && line[0] != '-') return; @@ -33,11 +32,8 @@ static void diffgrep_consume(void *priv, char *line, unsigned long len) * caller early. */ return; - /* Yuck -- line ought to be "const char *"! */ - hold = line[len]; - line[len] = '\0'; - data->hit = !regexec(data->regexp, line + 1, 1, ®match, 0); - line[len] = hold; + data->hit = !regexec_buf(data->regexp, line + 1, len - 1, 1, + ®match, 0); } static int diff_grep(mmfile_t *one, mmfile_t *two, @@ -50,9 +46,11 @@ static int diff_grep(mmfile_t *one, mmfile_t *two, xdemitconf_t xecfg; if (!one) - return !regexec(regexp, two->ptr, 1, ®match, 0); + return !regexec_buf(regexp, two->ptr, two->size, + 1, ®match, 0); if (!two) - return !regexec(regexp, one->ptr, 1, ®match, 0); + return !regexec_buf(regexp, one->ptr, one->size, + 1, ®match, 0); /* * We have both sides; need to run textual diff and see if @@ -83,8 +81,8 @@ static unsigned int contains(mmfile_t *mf, regex_t *regexp, kwset_t kws) regmatch_t regmatch; int flags = 0; - assert(data[sz] == '\0'); - while (*data && !regexec(regexp, data, 1, ®match, flags)) { + while (*data && + !regexec_buf(regexp, data, sz, 1, ®match, flags)) { flags |= REG_NOTBOL; data += regmatch.rm_eo; if (*data && regmatch.rm_so == regmatch.rm_eo) diff --git a/git-compat-util.h b/git-compat-util.h index 68615b1a6a..2c949983dc 100644 --- a/git-compat-util.h +++ b/git-compat-util.h @@ -974,6 +974,19 @@ void git_qsort(void *base, size_t nmemb, size_t size, #define qsort git_qsort #endif +#ifndef REG_STARTEND +#error "Git requires REG_STARTEND support. Compile with NO_REGEX=NeedsStartEnd" +#endif + +static inline int regexec_buf(const regex_t *preg, const char *buf, size_t size, + size_t nmatch, regmatch_t pmatch[], int eflags) +{ + assert(nmatch > 0 && pmatch); + pmatch[0].rm_so = 0; + pmatch[0].rm_eo = size; + return regexec(preg, buf, nmatch, pmatch, eflags | REG_STARTEND); +} + #ifndef DIR_HAS_BSD_GROUP_SEMANTICS # define FORCE_DIR_SET_GID S_ISGID #else diff --git a/git-gui/lib/commit.tcl b/git-gui/lib/commit.tcl index 864b687057..01d2cc280b 100644 --- a/git-gui/lib/commit.tcl +++ b/git-gui/lib/commit.tcl @@ -369,6 +369,9 @@ A rescan will be automatically started now. # -- Create the commit. # set cmd [list commit-tree $tree_id] + if {[is_config_true commit.gpgsign]} { + lappend cmd -S + } foreach p [concat $PARENT $MERGE_HEAD] { lappend cmd -p $p } diff --git a/git-gui/po/ja.po b/git-gui/po/ja.po index 9aff249d5f..208651c1af 100644 --- a/git-gui/po/ja.po +++ b/git-gui/po/ja.po @@ -1,47 +1,50 @@ # Translation of git-gui to Japanese # Copyright (C) 2007 Shawn Pearce # This file is distributed under the same license as the git-gui package. +# # ăăăă ăŞăŞă <nanako3@bluebottle.com>, 2007. +# Satoshi Yasushima <s.yasushima@gmail.com>, 2016. # msgid "" msgstr "" "Project-Id-Version: git-gui\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2010-01-26 15:47-0800\n" -"PO-Revision-Date: 2010-02-02 19:03+0900\n" -"Last-Translator: ăăăă ăŞăŞă <nanako3@lavabit.com>\n" +"POT-Creation-Date: 2016-05-27 17:52+0900\n" +"PO-Revision-Date: 2016-06-22 12:50+0900\n" +"Last-Translator: Satoshi Yasushima <s.yasushima@gmail.com>\n" "Language-Team: Japanese\n" +"Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: git-gui.sh:41 git-gui.sh:793 git-gui.sh:807 git-gui.sh:820 git-gui.sh:903 -#: git-gui.sh:922 -msgid "git-gui: fatal error" -msgstr "git-gui: č´ĺ˝çăŞă¨ăŠăź" - -#: git-gui.sh:743 +#: git-gui.sh:861 #, tcl-format msgid "Invalid font specified in %s:" msgstr "%s ăŤçĄĺšăŞăăŠăłăăćĺŽăăăŚăăžă:" -#: git-gui.sh:779 +#: git-gui.sh:915 msgid "Main Font" msgstr "丝ăăŠăłă" -#: git-gui.sh:780 +#: git-gui.sh:916 msgid "Diff/Console Font" msgstr "diff/ăłăłă˝ăźăŤăťăăŠăłă" -#: git-gui.sh:794 +#: git-gui.sh:931 git-gui.sh:945 git-gui.sh:958 git-gui.sh:1048 git-gui.sh:1067 +#: git-gui.sh:3125 +msgid "git-gui: fatal error" +msgstr "git-gui: č´ĺ˝çăŞă¨ăŠăź" + +#: git-gui.sh:932 msgid "Cannot find git in PATH." msgstr "PATH ä¸ăŤ git ăčŚă¤ăăăžăă" -#: git-gui.sh:821 +#: git-gui.sh:959 msgid "Cannot parse Git version string:" msgstr "Git ăăźă¸ă§ăłĺăçč§Łă§ăăžăă:" -#: git-gui.sh:839 +#: git-gui.sh:984 #, tcl-format msgid "" "Git version cannot be determined.\n" @@ -60,475 +63,502 @@ msgstr "" "\n" "'%s' ăŻăăźă¸ă§ăł 1.5.0 ă¨ćăŁăŚčŻăă§ăăďź\n" -#: git-gui.sh:1128 +#: git-gui.sh:1281 msgid "Git directory not found:" msgstr "Git ăăŁăŹăŻăăŞăčŚă¤ăăăžăă:" -#: git-gui.sh:1146 +#: git-gui.sh:1315 msgid "Cannot move to top of working directory:" msgstr "ä˝ćĽăăŁăŹăŻăăŞăŽćä¸ä˝ăŤç§ťĺă§ăăžăă" -#: git-gui.sh:1154 +#: git-gui.sh:1323 msgid "Cannot use bare repository:" msgstr "裸ăŽăŞăă¸ăăŞăŻä˝żăăžăă:" -#: git-gui.sh:1162 +#: git-gui.sh:1331 msgid "No working directory" msgstr "ä˝ćĽăăŁăŹăŻăăŞăăăăžăă" -#: git-gui.sh:1334 lib/checkout_op.tcl:306 +#: git-gui.sh:1503 lib/checkout_op.tcl:306 msgid "Refreshing file status..." msgstr "ăăĄă¤ăŤçść
ăć´ć°ăăŚăăžăâŚ" -#: git-gui.sh:1390 +#: git-gui.sh:1563 msgid "Scanning for modified files ..." msgstr "ĺ¤ć´ăăăăăĄă¤ăŤăăšăăŁăłăăŚăăžăâŚ" -#: git-gui.sh:1454 +#: git-gui.sh:1639 msgid "Calling prepare-commit-msg hook..." msgstr "prepare-commit-msg ăăăŻăĺŽčĄä¸ăťăťăť" -#: git-gui.sh:1471 +#: git-gui.sh:1656 msgid "Commit declined by prepare-commit-msg hook." msgstr "prepare-commit-msg ăăăŻăăłăăăăćĺŚăăžăă" -#: git-gui.sh:1629 lib/browser.tcl:246 +#: git-gui.sh:1814 lib/browser.tcl:252 msgid "Ready." msgstr "ćşĺĺŽäş" -#: git-gui.sh:1787 +#: git-gui.sh:1978 #, tcl-format -msgid "Displaying only %s of %s files." -msgstr "ĺ
¨ä˝ă§%sĺăŽĺ
ăŽ%săăĄă¤ăŤă ă襨示ăăŚăăžă" +msgid "" +"Display limit (gui.maxfilesdisplayed = %s) reached, not showing all %s files." +msgstr "" +"襨示ĺŻč˝ăŞéç (gui.maxfilesdisplayed = %s) ăŤéăăăăĺ
¨ä˝ă§%sĺăŽăăĄă¤ăŤ" +"ă襨示ă§ăăžăă" -#: git-gui.sh:1913 +#: git-gui.sh:2101 msgid "Unmodified" msgstr "ĺ¤ć´çĄă" -#: git-gui.sh:1915 +#: git-gui.sh:2103 msgid "Modified, not staged" msgstr "ĺ¤ć´ăăăăłăăăćŞäşĺŽ" -#: git-gui.sh:1916 git-gui.sh:1924 +#: git-gui.sh:2104 git-gui.sh:2116 msgid "Staged for commit" msgstr "ăłăăăäşĺŽć¸" -#: git-gui.sh:1917 git-gui.sh:1925 +#: git-gui.sh:2105 git-gui.sh:2117 msgid "Portions staged for commit" msgstr "é¨ĺçăŤăłăăăäşĺŽć¸" -#: git-gui.sh:1918 git-gui.sh:1926 +#: git-gui.sh:2106 git-gui.sh:2118 msgid "Staged for commit, missing" msgstr "ăłăăăäşĺŽć¸ăăăĄă¤ăŤçĄă" -#: git-gui.sh:1920 +#: git-gui.sh:2108 msgid "File type changed, not staged" msgstr "ăăĄă¤ăŤĺĺ¤ć´ăăłăăăćŞäşĺŽ" -#: git-gui.sh:1921 +#: git-gui.sh:2109 git-gui.sh:2110 +msgid "File type changed, old type staged for commit" +msgstr "ăăĄă¤ăŤĺĺ¤ć´ăć§ĺăłăăăäşĺŽć¸" + +#: git-gui.sh:2111 msgid "File type changed, staged" msgstr "ăăĄă¤ăŤĺĺ¤ć´ăăłăăăäşĺŽć¸" -#: git-gui.sh:1923 +#: git-gui.sh:2112 +msgid "File type change staged, modification not staged" +msgstr "ăăĄă¤ăŤĺĺ¤ć´ăłăăăäşĺŽć¸ăĺ¤ć´ăłăăăćŞäşĺŽ" + +#: git-gui.sh:2113 +msgid "File type change staged, file missing" +msgstr "ăăĄă¤ăŤĺĺ¤ć´ăłăăăäşĺŽć¸ăăăĄă¤ăŤçĄă" + +#: git-gui.sh:2115 msgid "Untracked, not staged" msgstr "玥çĺ¤ăăłăăăćŞäşĺŽ" -#: git-gui.sh:1928 +#: git-gui.sh:2120 msgid "Missing" msgstr "ăăĄă¤ăŤçĄă" -#: git-gui.sh:1929 +#: git-gui.sh:2121 msgid "Staged for removal" msgstr "ĺé¤äşĺŽć¸" -#: git-gui.sh:1930 +#: git-gui.sh:2122 msgid "Staged for removal, still present" msgstr "ĺé¤äşĺŽć¸ăăăĄă¤ăŤćŞĺé¤" -#: git-gui.sh:1932 git-gui.sh:1933 git-gui.sh:1934 git-gui.sh:1935 -#: git-gui.sh:1936 git-gui.sh:1937 +#: git-gui.sh:2124 git-gui.sh:2125 git-gui.sh:2126 git-gui.sh:2127 +#: git-gui.sh:2128 git-gui.sh:2129 msgid "Requires merge resolution" msgstr "čŚăăźă¸č§Łćąş" -#: git-gui.sh:1972 +#: git-gui.sh:2164 msgid "Starting gitk... please wait..." msgstr "gitk ă辡ĺä¸âŚăĺž
ăĄä¸ăăâŚ" -#: git-gui.sh:1984 +#: git-gui.sh:2176 msgid "Couldn't find gitk in PATH" msgstr "PATH ä¸ăŤ gitk ăčŚă¤ăăăžăă" -#: git-gui.sh:2043 +#: git-gui.sh:2235 msgid "Couldn't find git gui in PATH" msgstr "PATH ä¸ăŤ git gui ăčŚă¤ăăăžăă" -#: git-gui.sh:2455 lib/choose_repository.tcl:36 +#: git-gui.sh:2654 lib/choose_repository.tcl:41 msgid "Repository" msgstr "ăŞăă¸ăăŞ" -#: git-gui.sh:2456 +#: git-gui.sh:2655 msgid "Edit" msgstr "硨é" -#: git-gui.sh:2458 lib/choose_rev.tcl:561 +#: git-gui.sh:2657 lib/choose_rev.tcl:567 msgid "Branch" msgstr "ăăŠăłă" -#: git-gui.sh:2461 lib/choose_rev.tcl:548 +#: git-gui.sh:2660 lib/choose_rev.tcl:554 msgid "Commit@@noun" msgstr "ăłăăă" -#: git-gui.sh:2464 lib/merge.tcl:121 lib/merge.tcl:150 lib/merge.tcl:168 +#: git-gui.sh:2663 lib/merge.tcl:123 lib/merge.tcl:152 lib/merge.tcl:170 msgid "Merge" msgstr "ăăźă¸" -#: git-gui.sh:2465 lib/choose_rev.tcl:557 +#: git-gui.sh:2664 lib/choose_rev.tcl:563 msgid "Remote" msgstr "ăŞă˘ăźă" -#: git-gui.sh:2468 +#: git-gui.sh:2667 msgid "Tools" msgstr "ăăźăŤ" -#: git-gui.sh:2477 +#: git-gui.sh:2676 msgid "Explore Working Copy" msgstr "ăŻăźăăłă°ăłăăźăăăŠăŚăş" -#: git-gui.sh:2483 +#: git-gui.sh:2682 +msgid "Git Bash" +msgstr "" + +#: git-gui.sh:2692 msgid "Browse Current Branch's Files" msgstr "çžĺ¨ăŽăăŠăłăăŽăăĄă¤ăŤăčŚă" -#: git-gui.sh:2487 +#: git-gui.sh:2696 msgid "Browse Branch Files..." msgstr "ăăŠăłăăŽăăĄă¤ăŤăčŚăâŚ" -#: git-gui.sh:2492 +#: git-gui.sh:2701 msgid "Visualize Current Branch's History" msgstr "çžĺ¨ăŽăăŠăłăăŽĺąĽć´ăčŚă" -#: git-gui.sh:2496 +#: git-gui.sh:2705 msgid "Visualize All Branch History" msgstr "ĺ
¨ăŚăŽăăŠăłăăŽĺąĽć´ăčŚă" -#: git-gui.sh:2503 +#: git-gui.sh:2712 #, tcl-format msgid "Browse %s's Files" msgstr "ăăŠăłă %s ăŽăăĄă¤ăŤăčŚă" -#: git-gui.sh:2505 +#: git-gui.sh:2714 #, tcl-format msgid "Visualize %s's History" msgstr "ăăŠăłă %s ăŽĺąĽć´ăčŚă" -#: git-gui.sh:2510 lib/database.tcl:27 lib/database.tcl:67 +#: git-gui.sh:2719 lib/database.tcl:40 lib/database.tcl:66 msgid "Database Statistics" msgstr "ăăźăżăăźăšçľąč¨" -#: git-gui.sh:2513 lib/database.tcl:34 +#: git-gui.sh:2722 lib/database.tcl:33 msgid "Compress Database" msgstr "ăăźăżăăźăšĺ§ç¸Ž" -#: git-gui.sh:2516 +#: git-gui.sh:2725 msgid "Verify Database" msgstr "ăăźăżăăźăšć¤č¨ź" -#: git-gui.sh:2523 git-gui.sh:2527 git-gui.sh:2531 lib/shortcut.tcl:8 +#: git-gui.sh:2732 git-gui.sh:2736 git-gui.sh:2740 lib/shortcut.tcl:8 #: lib/shortcut.tcl:40 lib/shortcut.tcl:72 msgid "Create Desktop Icon" msgstr "ăăšăŻăăăăťă˘ă¤ăłăłăä˝ă" -#: git-gui.sh:2539 lib/choose_repository.tcl:183 lib/choose_repository.tcl:191 +#: git-gui.sh:2748 lib/choose_repository.tcl:193 lib/choose_repository.tcl:201 msgid "Quit" msgstr "çľäş" -#: git-gui.sh:2547 +#: git-gui.sh:2756 msgid "Undo" msgstr "ĺ
ăŤćťă" -#: git-gui.sh:2550 +#: git-gui.sh:2759 msgid "Redo" msgstr "ăăç´ă" -#: git-gui.sh:2554 git-gui.sh:3109 +#: git-gui.sh:2763 git-gui.sh:3368 msgid "Cut" msgstr "ĺăĺă" -#: git-gui.sh:2557 git-gui.sh:3112 git-gui.sh:3186 git-gui.sh:3259 +#: git-gui.sh:2766 git-gui.sh:3371 git-gui.sh:3445 git-gui.sh:3530 #: lib/console.tcl:69 msgid "Copy" msgstr "ăłăăź" -#: git-gui.sh:2560 git-gui.sh:3115 +#: git-gui.sh:2769 git-gui.sh:3374 msgid "Paste" msgstr "貟ăäťă" -#: git-gui.sh:2563 git-gui.sh:3118 lib/branch_delete.tcl:26 -#: lib/remote_branch_delete.tcl:38 +#: git-gui.sh:2772 git-gui.sh:3377 lib/remote_branch_delete.tcl:39 +#: lib/branch_delete.tcl:28 msgid "Delete" msgstr "ĺé¤" -#: git-gui.sh:2567 git-gui.sh:3122 git-gui.sh:3263 lib/console.tcl:71 +#: git-gui.sh:2776 git-gui.sh:3381 git-gui.sh:3534 lib/console.tcl:71 msgid "Select All" msgstr "ĺ
¨ăŚé¸ć" -#: git-gui.sh:2576 +#: git-gui.sh:2785 msgid "Create..." msgstr "ä˝ćâŚ" -#: git-gui.sh:2582 +#: git-gui.sh:2791 msgid "Checkout..." msgstr "ăă§ăăŻă˘ăŚă" -#: git-gui.sh:2588 +#: git-gui.sh:2797 msgid "Rename..." msgstr "ĺĺĺ¤ć´âŚ" -#: git-gui.sh:2593 +#: git-gui.sh:2802 msgid "Delete..." msgstr "ĺé¤âŚ" -#: git-gui.sh:2598 +#: git-gui.sh:2807 msgid "Reset..." msgstr "ăŞăťăăâŚ" -#: git-gui.sh:2608 +#: git-gui.sh:2817 msgid "Done" msgstr "ĺŽäş" -#: git-gui.sh:2610 +#: git-gui.sh:2819 msgid "Commit@@verb" msgstr "ăłăăă" -#: git-gui.sh:2619 git-gui.sh:3050 +#: git-gui.sh:2828 git-gui.sh:3309 msgid "New Commit" msgstr "ć°čŚăłăăă" -#: git-gui.sh:2627 git-gui.sh:3057 +#: git-gui.sh:2836 git-gui.sh:3316 msgid "Amend Last Commit" msgstr "ćć°ăłăăăăč¨ćŁ" -#: git-gui.sh:2637 git-gui.sh:3011 lib/remote_branch_delete.tcl:99 +#: git-gui.sh:2846 git-gui.sh:3270 lib/remote_branch_delete.tcl:101 msgid "Rescan" msgstr "ĺăšăăŁăł" -#: git-gui.sh:2643 +#: git-gui.sh:2852 msgid "Stage To Commit" msgstr "ăłăăăäşĺŽăă" -#: git-gui.sh:2649 +#: git-gui.sh:2858 msgid "Stage Changed Files To Commit" msgstr "ĺ¤ć´ăăăăăĄă¤ăŤăăłăăăäşĺŽ" -#: git-gui.sh:2655 +#: git-gui.sh:2864 msgid "Unstage From Commit" msgstr "ăłăăăăăéăă" -#: git-gui.sh:2661 lib/index.tcl:412 +#: git-gui.sh:2870 lib/index.tcl:442 msgid "Revert Changes" msgstr "ĺ¤ć´ăĺ
ăŤćťă" -#: git-gui.sh:2669 git-gui.sh:3310 git-gui.sh:3341 +#: git-gui.sh:2878 git-gui.sh:3581 git-gui.sh:3612 msgid "Show Less Context" msgstr "ćčăĺ°ăŞă" -#: git-gui.sh:2673 git-gui.sh:3314 git-gui.sh:3345 +#: git-gui.sh:2882 git-gui.sh:3585 git-gui.sh:3616 msgid "Show More Context" msgstr "ćčăĺ¤ă" -#: git-gui.sh:2680 git-gui.sh:3024 git-gui.sh:3133 +#: git-gui.sh:2889 git-gui.sh:3283 git-gui.sh:3392 msgid "Sign Off" msgstr "署ĺ" -#: git-gui.sh:2696 +#: git-gui.sh:2905 msgid "Local Merge..." msgstr "ăăźăŤăŤăťăăźă¸âŚ" -#: git-gui.sh:2701 +#: git-gui.sh:2910 msgid "Abort Merge..." msgstr "ăăźă¸ä¸ć˘âŚ" -#: git-gui.sh:2713 git-gui.sh:2741 +#: git-gui.sh:2922 git-gui.sh:2950 msgid "Add..." msgstr "čż˝ĺ " -#: git-gui.sh:2717 +#: git-gui.sh:2926 msgid "Push..." msgstr "ăăăˇăĽâŚ" -#: git-gui.sh:2721 +#: git-gui.sh:2930 msgid "Delete Branch..." msgstr "ăăŠăłăĺé¤..." -#: git-gui.sh:2731 git-gui.sh:3292 +#: git-gui.sh:2940 git-gui.sh:3563 msgid "Options..." msgstr "ăŞăăˇă§ăłâŚ" -#: git-gui.sh:2742 +#: git-gui.sh:2951 msgid "Remove..." msgstr "ĺé¤..." -#: git-gui.sh:2751 lib/choose_repository.tcl:50 +#: git-gui.sh:2960 lib/choose_repository.tcl:55 msgid "Help" msgstr "ăăŤă" -#: git-gui.sh:2755 git-gui.sh:2759 lib/about.tcl:14 -#: lib/choose_repository.tcl:44 lib/choose_repository.tcl:53 +#: git-gui.sh:2964 git-gui.sh:2968 lib/about.tcl:14 +#: lib/choose_repository.tcl:49 lib/choose_repository.tcl:58 #, tcl-format msgid "About %s" msgstr "%s ăŤă¤ăăŚ" -#: git-gui.sh:2783 +#: git-gui.sh:2992 msgid "Online Documentation" msgstr "ăŞăłăŠă¤ăłăťăăăĽăĄăłă" -#: git-gui.sh:2786 lib/choose_repository.tcl:47 lib/choose_repository.tcl:56 +#: git-gui.sh:2995 lib/choose_repository.tcl:52 lib/choose_repository.tcl:61 msgid "Show SSH Key" msgstr "SSH ăăźă襨示" -#: git-gui.sh:2893 +#: git-gui.sh:3014 git-gui.sh:3146 +msgid "Usage" +msgstr "使ăćš" + +#: git-gui.sh:3095 lib/blame.tcl:573 +msgid "Error" +msgstr "ă¨ăŠăź" + +#: git-gui.sh:3126 #, tcl-format msgid "fatal: cannot stat path %s: No such file or directory" msgstr "" "č´ĺ˝ç: ăăš %s ă stat ă§ăăžăăăăăŽăăăŞăăĄă¤ăŤăăăŁăŹăŻăăŞăŻăăăž" "ăă" -#: git-gui.sh:2926 +#: git-gui.sh:3159 msgid "Current Branch:" msgstr "çžĺ¨ăŽăăŠăłă" -#: git-gui.sh:2947 +#: git-gui.sh:3185 msgid "Staged Changes (Will Commit)" msgstr "ăšăăźă¸ăłă°ăăăďźăłăăăäşĺŽć¸ăŽďźĺ¤ć´" -#: git-gui.sh:2967 +#: git-gui.sh:3205 msgid "Unstaged Changes" msgstr "ăłăăăäşĺŽăŤĺ
ĽăŁăŚăăŞăĺ¤ć´" -#: git-gui.sh:3017 +#: git-gui.sh:3276 msgid "Stage Changed" msgstr "ĺ¤ć´ăăłăăăäşĺŽăŤĺ
Ľăă" -#: git-gui.sh:3036 lib/transport.tcl:104 lib/transport.tcl:193 +#: git-gui.sh:3295 lib/transport.tcl:137 lib/transport.tcl:229 msgid "Push" msgstr "ăăăˇăĽ" -#: git-gui.sh:3071 +#: git-gui.sh:3330 msgid "Initial Commit Message:" msgstr "ćĺăŽăłăăăăĄăăťăźă¸:" -#: git-gui.sh:3072 +#: git-gui.sh:3331 msgid "Amended Commit Message:" msgstr "č¨ćŁăăăłăăăăĄăăťăźă¸:" -#: git-gui.sh:3073 +#: git-gui.sh:3332 msgid "Amended Initial Commit Message:" msgstr "č¨ćŁăăćĺăŽăłăăăăĄăăťăźă¸:" -#: git-gui.sh:3074 +#: git-gui.sh:3333 msgid "Amended Merge Commit Message:" msgstr "č¨ćŁăăăăźă¸ăłăăăăĄăăťăźă¸:" -#: git-gui.sh:3075 +#: git-gui.sh:3334 msgid "Merge Commit Message:" msgstr "ăăźă¸ăłăăăăĄăăťăźă¸:" -#: git-gui.sh:3076 +#: git-gui.sh:3335 msgid "Commit Message:" msgstr "ăłăăăăĄăăťăźă¸:" -#: git-gui.sh:3125 git-gui.sh:3267 lib/console.tcl:73 +#: git-gui.sh:3384 git-gui.sh:3538 lib/console.tcl:73 msgid "Copy All" msgstr "ĺ
¨ăŚăłăăź" -#: git-gui.sh:3149 lib/blame.tcl:104 +#: git-gui.sh:3408 lib/blame.tcl:105 msgid "File:" msgstr "ăăĄă¤ăŤ:" -#: git-gui.sh:3255 +#: git-gui.sh:3526 msgid "Refresh" msgstr "ĺčŞăżčžźăż" -#: git-gui.sh:3276 +#: git-gui.sh:3547 msgid "Decrease Font Size" msgstr "ăăŠăłăăĺ°ăă" -#: git-gui.sh:3280 +#: git-gui.sh:3551 msgid "Increase Font Size" msgstr "ăăŠăłăă大ăă" -#: git-gui.sh:3288 lib/blame.tcl:281 +#: git-gui.sh:3559 lib/blame.tcl:294 msgid "Encoding" msgstr "ă¨ăłăłăźăăŁăłă°" -#: git-gui.sh:3299 +#: git-gui.sh:3570 msgid "Apply/Reverse Hunk" msgstr "ăăăăéŠç¨/ĺăćśă" -#: git-gui.sh:3304 +#: git-gui.sh:3575 msgid "Apply/Reverse Line" msgstr "ăăăčĄăéŠç¨/ĺăćśă" -#: git-gui.sh:3323 +#: git-gui.sh:3594 msgid "Run Merge Tool" msgstr "ăăźă¸ăăźăŤă辡ĺ" -#: git-gui.sh:3328 +#: git-gui.sh:3599 msgid "Use Remote Version" msgstr "ăŞă˘ăźăăŽćšăćĄç¨" -#: git-gui.sh:3332 +#: git-gui.sh:3603 msgid "Use Local Version" msgstr "ăăźăŤăŤăŽćšăćĄç¨" -#: git-gui.sh:3336 +#: git-gui.sh:3607 msgid "Revert To Base" msgstr "ăăźăšçăćĄç¨" -#: git-gui.sh:3354 +#: git-gui.sh:3625 msgid "Visualize These Changes In The Submodule" msgstr "ăľăă˘ă¸ăĽăźăŤĺ
ăŽăăăăŽĺ¤ć´ăčŚă" -#: git-gui.sh:3358 +#: git-gui.sh:3629 msgid "Visualize Current Branch History In The Submodule" msgstr "ăľăă˘ă¸ăĽăźăŤĺ
ă§çžĺ¨ăŽăăŠăłăăŽĺąĽć´ăčŚă" -#: git-gui.sh:3362 +#: git-gui.sh:3633 msgid "Visualize All Branch History In The Submodule" msgstr "ăľăă˘ă¸ăĽăźăŤĺ
ă§ĺ
¨ăŚăŽăăŠăłăăŽĺąĽć´ăčŚă" -#: git-gui.sh:3367 +#: git-gui.sh:3638 msgid "Start git gui In The Submodule" msgstr "ăľăă˘ă¸ăĽăźăŤĺ
ă§git guiă辡ĺăă" -#: git-gui.sh:3389 +#: git-gui.sh:3673 msgid "Unstage Hunk From Commit" msgstr "ăăăăăłăăăäşĺŽăăĺ¤ă" -#: git-gui.sh:3391 +#: git-gui.sh:3675 msgid "Unstage Lines From Commit" msgstr "ăłăăăäşĺŽăăčĄăĺ¤ă" -#: git-gui.sh:3393 +#: git-gui.sh:3677 msgid "Unstage Line From Commit" msgstr "ăłăăăäşĺŽăăčĄăĺ¤ă" -#: git-gui.sh:3396 +#: git-gui.sh:3680 msgid "Stage Hunk For Commit" msgstr "ăăăăăłăăăäşĺŽăŤĺ ăă" -#: git-gui.sh:3398 +#: git-gui.sh:3682 msgid "Stage Lines For Commit" msgstr "ăăăčĄăăłăăăäşĺŽăŤĺ ăă" -#: git-gui.sh:3400 +#: git-gui.sh:3684 msgid "Stage Line For Commit" msgstr "ăăăčĄăăłăăăäşĺŽăŤĺ ăă" -#: git-gui.sh:3424 +#: git-gui.sh:3709 msgid "Initializing..." msgstr "ĺćĺăăŚăăžăâŚ" -#: git-gui.sh:3541 +#: git-gui.sh:3852 #, tcl-format msgid "" "Possible environment issues exist.\n" @@ -543,7 +573,7 @@ msgstr "" "䝼ä¸ăŽç°ĺ˘ĺ¤ć°ăŻ %s ă辡ĺăă Git ăľăăăăťăšăŤăăŁăŚçĄčŚăăăă§ăăă:\n" "\n" -#: git-gui.sh:3570 +#: git-gui.sh:3881 msgid "" "\n" "This is due to a known issue with the\n" @@ -553,7 +583,7 @@ msgstr "" "ăă㯠Cygwin ă§é
ĺ¸ăăăŚăă Tcl ăă¤ăăŞăŤ\n" "é˘ăăŚăŽć˘çĽăŽĺéĄăŤăăăžă" -#: git-gui.sh:3575 +#: git-gui.sh:3886 #, tcl-format msgid "" "\n" @@ -568,249 +598,294 @@ msgstr "" "ĺäşşç㪠~/.gitconfig ăăĄă¤ăŤĺ
ă§ user.name 㨠user.email ăŽĺ¤ăč¨ĺŽ\n" "ăăăŽăă%s ăŽčŻă䝣ç¨ă¨ăŞăăžă\n" -#: lib/about.tcl:26 -msgid "git-gui - a graphical user interface for Git." -msgstr "Git ăŽă°ăŠăăŁăŤăŤUI git-gui" - -#: lib/blame.tcl:72 -msgid "File Viewer" -msgstr "ăăĄă¤ăŤăăĽăźăŻ" - -#: lib/blame.tcl:78 -msgid "Commit:" -msgstr "ăłăăă:" - -#: lib/blame.tcl:271 -msgid "Copy Commit" -msgstr "ăłăăăăăłăăź" - -#: lib/blame.tcl:275 -msgid "Find Text..." -msgstr "ăăăšăăć¤ç´˘" - -#: lib/blame.tcl:284 -msgid "Do Full Copy Detection" -msgstr "ăłăăźć¤çĽ" - -#: lib/blame.tcl:288 -msgid "Show History Context" -msgstr "ćčăčŚăă" +#: lib/merge.tcl:13 +msgid "" +"Cannot merge while amending.\n" +"\n" +"You must finish amending this commit before starting any type of merge.\n" +msgstr "" +"č¨ćŁä¸ăŤăŻăăźă¸ă§ăăžăăă\n" +"\n" +"č¨ćŁĺŚçăĺŽäşăăăžă§ăŻć°ăăŤăăźă¸ăéĺ§ă§ăăžăăă\n" -#: lib/blame.tcl:291 -msgid "Blame Parent Commit" -msgstr "茪ăłăăăă訝é" +#: lib/merge.tcl:27 +msgid "" +"Last scanned state does not match repository state.\n" +"\n" +"Another Git program has modified this repository since the last scan. A " +"rescan must be performed before a merge can be performed.\n" +"\n" +"The rescan will be automatically started now.\n" +msgstr "" +"ćĺžăŤăšăăŁăłăăçść
ăŻăŞăă¸ăăŞăŽçść
ă¨ĺč´ăăžăăă\n" +"\n" +"ćĺžăŤăšăăŁăłăăŚäťĽĺžăĺĽăŽ Git ăăă°ăŠă ăăŞăă¸ăăŞăĺ¤ć´ăăŚăăžăăăăź" +"ă¸ăéĺ§ăăĺăŤăĺăšăăŁăłăĺż
čŚă§ăă\n" +"\n" +"čŞĺçăŤĺăšăăŁăłăéĺ§ăăžăă\n" -#: lib/blame.tcl:450 +#: lib/merge.tcl:45 #, tcl-format -msgid "Reading %s..." -msgstr "%s ăčŞăă§ăăžăâŚ" - -#: lib/blame.tcl:557 -msgid "Loading copy/move tracking annotations..." -msgstr "ăłăăźăťç§ťĺ追补ăăźăżăčŞăă§ăăžăâŚ" - -#: lib/blame.tcl:577 -msgid "lines annotated" -msgstr "čĄă注éăăžăă" +msgid "" +"You are in the middle of a conflicted merge.\n" +"\n" +"File %s has merge conflicts.\n" +"\n" +"You must resolve them, stage the file, and commit to complete the current " +"merge. Only then can you begin another merge.\n" +msgstr "" +"čĄçŞăŽăăŁăăăźă¸ăŽéä¸ă§ăă\n" +"\n" +"ăăĄă¤ăŤ %s ăŤăŻăăźă¸ä¸ăŽčĄçŞăćŽăŁăŚăăžăă\n" +"\n" +"ăăŽăăĄă¤ăŤăŽčĄçŞăč§ŁćąşăăăłăăăäşĺŽăŤĺ ăăŚăăłăăăăăăă¨ă§ăăźă¸ă" +"ĺŽäşăăžăăăăăăŁăŚĺ§ăăŚăć°ăăŞăăźă¸ăéĺ§ă§ăăăăăŤăŞăăžăă\n" -#: lib/blame.tcl:769 -msgid "Loading original location annotations..." -msgstr "ĺ
ä˝ç˝ŽčĄăŽćł¨éăăźăżăčŞăă§ăăžăâŚ" +#: lib/merge.tcl:55 +#, tcl-format +msgid "" +"You are in the middle of a change.\n" +"\n" +"File %s is modified.\n" +"\n" +"You should complete the current commit before starting a merge. Doing so " +"will help you abort a failed merge, should the need arise.\n" +msgstr "" +"ĺ¤ć´ăŽéä¸ă§ăă\n" +"\n" +"ăăĄă¤ăŤ %s ăŻĺ¤ć´ä¸ă§ăă\n" +"\n" +"çžĺ¨ăŽăłăăăăĺŽäşăăŚăăăăźă¸ăéĺ§ăăŚä¸ăăăăăăăćšăăăźă¸ăŤĺ¤ąć" +"ăăă¨ăăŽĺ垊ă漽ă§ăă\n" -#: lib/blame.tcl:772 -msgid "Annotation complete." -msgstr "注éĺŽäşăăžăă" +#: lib/merge.tcl:108 +#, tcl-format +msgid "%s of %s" +msgstr "%s ㎠%s ăăŠăłă" -#: lib/blame.tcl:802 -msgid "Busy" -msgstr "ĺŽčĄä¸" +#: lib/merge.tcl:122 +#, tcl-format +msgid "Merging %s and %s..." +msgstr "%s 㨠%s ăăăźă¸ä¸ăťăťăť" -#: lib/blame.tcl:803 -msgid "Annotation process is already running." -msgstr "ăă§ăŤ blame ăăăťăšăĺŽčĄä¸ă§ăă" +#: lib/merge.tcl:133 +msgid "Merge completed successfully." +msgstr "ăăźă¸ăĺŽäşăăžăă" -#: lib/blame.tcl:842 -msgid "Running thorough copy detection..." -msgstr "ăłăăźć¤çĽăĺŽčĄä¸âŚ" +#: lib/merge.tcl:135 +msgid "Merge failed. Conflict resolution is required." +msgstr "ăăźă¸ă夹ćăăžăăăčĄçŞăŽč§Łćąşăĺż
čŚă§ăă" -#: lib/blame.tcl:910 -msgid "Loading annotation..." -msgstr "注éăčŞăżčžźăă§ăăžăâŚ" +#: lib/merge.tcl:160 +#, tcl-format +msgid "Merge Into %s" +msgstr "%s ăŤăăźă¸" -#: lib/blame.tcl:963 -msgid "Author:" -msgstr "ä˝č
:" +#: lib/merge.tcl:166 lib/checkout_op.tcl:567 lib/tools_dlg.tcl:336 +msgid "Visualize" +msgstr "ĺŻčŚĺ" -#: lib/blame.tcl:967 -msgid "Committer:" -msgstr "ăłăăăč
:" +#: lib/merge.tcl:174 lib/remote_branch_delete.tcl:43 lib/branch_delete.tcl:34 +#: lib/checkout_op.tcl:579 lib/branch_rename.tcl:32 lib/tools_dlg.tcl:41 +#: lib/tools_dlg.tcl:202 lib/tools_dlg.tcl:345 lib/option.tcl:127 +#: lib/transport.tcl:141 lib/choose_font.tcl:45 lib/branch_checkout.tcl:30 +#: lib/browser.tcl:292 lib/remote_add.tcl:34 lib/branch_create.tcl:37 +msgid "Cancel" +msgstr "ä¸ć˘" -#: lib/blame.tcl:972 -msgid "Original File:" -msgstr "ĺ
ăăĄă¤ăŤ" +#: lib/merge.tcl:179 +msgid "Revision To Merge" +msgstr "ăăźă¸ăăăŞăă¸ă§ăł" -#: lib/blame.tcl:1020 -msgid "Cannot find HEAD commit:" -msgstr "HEAD ăłăăăăčŚă¤ăăăžăă" +#: lib/merge.tcl:214 +msgid "" +"Cannot abort while amending.\n" +"\n" +"You must finish amending this commit.\n" +msgstr "" +"č¨ćŁä¸ăŤăŻä¸ć˘ă§ăăžăăă\n" +"\n" +"ăžăäťăŽăłăăăč¨ćŁăĺŽäşăăăŚä¸ăăă\n" -#: lib/blame.tcl:1075 -msgid "Cannot find parent commit:" -msgstr "茪ăłăăăăčŚă¤ăăăžăă:" +#: lib/merge.tcl:224 +msgid "" +"Abort merge?\n" +"\n" +"Aborting the current merge will cause *ALL* uncommitted changes to be lost.\n" +"\n" +"Continue with aborting the current merge?" +msgstr "" +"ăăźă¸ăä¸ćăăžăăďź\n" +"\n" +"çžĺ¨ăŽăăźă¸ăä¸ćăăă¨ăăłăăăăăŚăăŞăĺ
¨ăŚăŽĺ¤ć´ă夹ăăăžăă\n" +"\n" +"ăăźă¸ăä¸ćăăŚăăăăă§ăăďź" -#: lib/blame.tcl:1090 -msgid "Unable to display parent" -msgstr "茪ă襨示ă§ăăžăă" +#: lib/merge.tcl:230 +msgid "" +"Reset changes?\n" +"\n" +"Resetting the changes will cause *ALL* uncommitted changes to be lost.\n" +"\n" +"Continue with resetting the current changes?" +msgstr "" +"ĺ¤ć´çšăăŞăťăăăăžăăďź\n" +"\n" +"ĺ¤ć´çšăăŞăťăăăăă¨ăăłăăăăăŚăăŞăĺ
¨ăŚăŽĺ¤ć´ă夹ăăăžăă\n" +"\n" +"ăŞăťăăăăŚăăăăă§ăăďź" -#: lib/blame.tcl:1091 lib/diff.tcl:320 -msgid "Error loading diff:" -msgstr "diff ăčŞăéăŽă¨ăŠăźă§ă:" +#: lib/merge.tcl:241 +msgid "Aborting" +msgstr "ä¸ćăăŚăăžă" -#: lib/blame.tcl:1231 -msgid "Originally By:" -msgstr "ĺä˝č
:" +#: lib/merge.tcl:241 +msgid "files reset" +msgstr "ăŞăťăăăăăăĄă¤ăŤ" -#: lib/blame.tcl:1237 -msgid "In File:" -msgstr "ăăĄă¤ăŤ:" +#: lib/merge.tcl:269 +msgid "Abort failed." +msgstr "ä¸ćăŤĺ¤ąćăăžăăă" -#: lib/blame.tcl:1242 -msgid "Copied Or Moved Here By:" -msgstr "č¤ĺăťç§ťĺč
:" +#: lib/merge.tcl:271 +msgid "Abort completed. Ready." +msgstr "ä¸ćĺŽäşă" -#: lib/branch_checkout.tcl:14 lib/branch_checkout.tcl:19 -msgid "Checkout Branch" -msgstr "ăăŠăłăăăă§ăăŻă˘ăŚă" +#: lib/error.tcl:20 lib/error.tcl:116 +msgid "error" +msgstr "ă¨ăŠăź" -#: lib/branch_checkout.tcl:23 -msgid "Checkout" -msgstr "ăă§ăăŻă˘ăŚă" +#: lib/error.tcl:36 +msgid "warning" +msgstr "čŚĺ" -#: lib/branch_checkout.tcl:27 lib/branch_create.tcl:35 -#: lib/branch_delete.tcl:32 lib/branch_rename.tcl:30 lib/browser.tcl:282 -#: lib/checkout_op.tcl:579 lib/choose_font.tcl:43 lib/merge.tcl:172 -#: lib/option.tcl:125 lib/remote_add.tcl:32 lib/remote_branch_delete.tcl:42 -#: lib/tools_dlg.tcl:40 lib/tools_dlg.tcl:204 lib/tools_dlg.tcl:352 -#: lib/transport.tcl:108 -msgid "Cancel" -msgstr "ä¸ć˘" +#: lib/error.tcl:96 +msgid "You must correct the above errors before committing." +msgstr "ăłăăăăăĺăŤă䝼ä¸ăŽă¨ăŠăźă俎ćŁăăŚä¸ăă" -#: lib/branch_checkout.tcl:32 lib/browser.tcl:287 lib/tools_dlg.tcl:328 -msgid "Revision" -msgstr "ăŞăă¸ă§ăł" +#: lib/date.tcl:25 +#, tcl-format +msgid "Invalid date from Git: %s" +msgstr "Git ăăĺşăçĄĺšăŞćĽäť: %s" -#: lib/branch_checkout.tcl:36 lib/branch_create.tcl:69 lib/option.tcl:280 -msgid "Options" -msgstr "ăŞăăˇă§ăł" +#: lib/encoding.tcl:443 +msgid "Default" +msgstr "ăăăŠăźăŤă" -#: lib/branch_checkout.tcl:39 lib/branch_create.tcl:92 -msgid "Fetch Tracking Branch" -msgstr "ăăŠăăăłă°ăťăăŠăłăăăă§ăă" +#: lib/encoding.tcl:448 +#, tcl-format +msgid "System (%s)" +msgstr "ăˇăšăă (%s)" -#: lib/branch_checkout.tcl:44 -msgid "Detach From Local Branch" -msgstr "ăăźăŤăŤăťăăŠăłăăăĺé¤" +#: lib/encoding.tcl:459 lib/encoding.tcl:465 +msgid "Other" +msgstr "ăăŽäť" -#: lib/branch_create.tcl:22 -msgid "Create Branch" -msgstr "ăăŠăłăăä˝ć" +#: lib/remote_branch_delete.tcl:29 lib/remote_branch_delete.tcl:34 +msgid "Delete Branch Remotely" +msgstr "ăŞă˘ăźăăăŠăłăĺé¤" -#: lib/branch_create.tcl:27 -msgid "Create New Branch" -msgstr "ăăŠăłăăć°čŚä˝ć" +#: lib/remote_branch_delete.tcl:48 +msgid "From Repository" +msgstr "ĺ
ăŽăŞăă¸ăăŞ" -#: lib/branch_create.tcl:31 lib/choose_repository.tcl:381 -msgid "Create" -msgstr "ä˝ć" +#: lib/remote_branch_delete.tcl:51 lib/transport.tcl:165 +msgid "Remote:" +msgstr "ăŞă˘ăźă:" -#: lib/branch_create.tcl:40 -msgid "Branch Name" -msgstr "ăăŠăłăĺ" +#: lib/remote_branch_delete.tcl:72 lib/transport.tcl:187 +msgid "Arbitrary Location:" +msgstr "äťťćăŽä˝ç˝Ž:" -#: lib/branch_create.tcl:43 lib/remote_add.tcl:39 lib/tools_dlg.tcl:50 -msgid "Name:" -msgstr "ĺĺ:" +#: lib/remote_branch_delete.tcl:88 +msgid "Branches" +msgstr "ăăŠăłă" -#: lib/branch_create.tcl:58 -msgid "Match Tracking Branch Name" -msgstr "ăăŠăăăłă°ăťăăŠăłăĺăĺăăă" +#: lib/remote_branch_delete.tcl:110 +msgid "Delete Only If" +msgstr "ćĄäťśäťă§ĺé¤" -#: lib/branch_create.tcl:66 -msgid "Starting Revision" -msgstr "ĺćăŞăă¸ă§ăł" +#: lib/remote_branch_delete.tcl:112 +msgid "Merged Into:" +msgstr "ăăźă¸ĺ
:" -#: lib/branch_create.tcl:72 -msgid "Update Existing Branch:" -msgstr "ć˘ĺăŽăăŠăłăăć´ć°:" +#: lib/remote_branch_delete.tcl:120 lib/branch_delete.tcl:53 +msgid "Always (Do not perform merge checks)" +msgstr "çĄćĄäťśďźăăźă¸ć¤ćťăăăŞăďź" -#: lib/branch_create.tcl:75 -msgid "No" -msgstr "ăăă" +#: lib/remote_branch_delete.tcl:153 +msgid "A branch is required for 'Merged Into'." +msgstr "'ăăźă¸ĺ
' ăŤăŻăăŠăłăăĺż
čŚă§ăă" -#: lib/branch_create.tcl:80 -msgid "Fast Forward Only" -msgstr "ćŠéăăŽăż" +#: lib/remote_branch_delete.tcl:185 +#, tcl-format +msgid "" +"The following branches are not completely merged into %s:\n" +"\n" +" - %s" +msgstr "" +"䝼ä¸ăŽăăŠăłă㯠%s ăŤĺŽĺ
¨ăŤăăźă¸ăăăŚăăžăă:\n" +"\n" +" - %s" -#: lib/branch_create.tcl:85 lib/checkout_op.tcl:571 -msgid "Reset" -msgstr "ăŞăťăă" +#: lib/remote_branch_delete.tcl:190 +#, tcl-format +msgid "" +"One or more of the merge tests failed because you have not fetched the " +"necessary commits. Try fetching from %s first." +msgstr "" +"ĺż
čŚăŞăłăăăăä¸čśłăăŚăăăăăŤăăăźă¸ć¤ćťă夹ćăăžăăăăžă %s ăă" +"ăă§ăăăăŚä¸ăăă" -#: lib/branch_create.tcl:97 -msgid "Checkout After Creation" -msgstr "ä˝ćăăŚăăăă§ăăŻă˘ăŚă" +#: lib/remote_branch_delete.tcl:208 +msgid "Please select one or more branches to delete." +msgstr "ĺé¤ăăăăŠăłăăé¸ćăăŚä¸ăăă" -#: lib/branch_create.tcl:131 -msgid "Please select a tracking branch." -msgstr "ăăŠăăăłă°ăťăăŠăłăăé¸ćăăŚä¸ăăă" +#: lib/remote_branch_delete.tcl:218 lib/branch_delete.tcl:115 +msgid "" +"Recovering deleted branches is difficult.\n" +"\n" +"Delete the selected branches?" +msgstr "" +"ĺé¤ăăăăŠăłăăĺ垊ăăăŽăŻĺ°éŁă§ăă\n" +"\n" +"é¸ćăăăăŠăłăăĺé¤ăăŚčŻăă§ăăďź" -#: lib/branch_create.tcl:140 +#: lib/remote_branch_delete.tcl:227 #, tcl-format -msgid "Tracking branch %s is not a branch in the remote repository." -msgstr "ăăŠăăăłă°ăťăăŠăłă %s ăŻé éăŞăă¸ăăŞăŽăăŠăłăă§ăŻăăăžăăă" +msgid "Deleting branches from %s" +msgstr "%s ăăăăŠăłăăĺé¤ăăŚăăžăă" -#: lib/branch_create.tcl:153 lib/branch_rename.tcl:86 -msgid "Please supply a branch name." -msgstr "ăăŠăłăĺăćĺŽăăŚä¸ăăă" +#: lib/remote_branch_delete.tcl:300 +msgid "No repository selected." +msgstr "ăŞăă¸ăăŞăé¸ćăăăŚăăžăăă" -#: lib/branch_create.tcl:164 lib/branch_rename.tcl:106 +#: lib/remote_branch_delete.tcl:305 #, tcl-format -msgid "'%s' is not an acceptable branch name." -msgstr "'%s' ăŻăăŠăłăĺăŤä˝żăăžăăă" +msgid "Scanning %s..." +msgstr "%s ăăšăăŁăłăăŚăăžăâŚ" -#: lib/branch_delete.tcl:15 +#: lib/branch_delete.tcl:16 msgid "Delete Branch" msgstr "ăăŠăłăĺé¤" -#: lib/branch_delete.tcl:20 +#: lib/branch_delete.tcl:21 msgid "Delete Local Branch" msgstr "ăăźăŤăŤăťăăŠăłăăĺé¤" -#: lib/branch_delete.tcl:37 +#: lib/branch_delete.tcl:39 msgid "Local Branches" msgstr "ăăźăŤăŤăťăăŠăłă" -#: lib/branch_delete.tcl:52 +#: lib/branch_delete.tcl:51 msgid "Delete Only If Merged Into" msgstr "ăăźă¸ć¸ăżăŽćăŽăżĺé¤" -#: lib/branch_delete.tcl:54 lib/remote_branch_delete.tcl:119 -msgid "Always (Do not perform merge checks)" -msgstr "çĄćĄäťśďźăăźă¸ć¤ćťăăăŞăďź" - #: lib/branch_delete.tcl:103 #, tcl-format msgid "The following branches are not completely merged into %s:" msgstr "䝼ä¸ăŽăăŠăłă㯠%s ăŤĺŽĺ
¨ăŤăăźă¸ăăăŚăăžăă:" -#: lib/branch_delete.tcl:115 lib/remote_branch_delete.tcl:217 -msgid "" -"Recovering deleted branches is difficult.\n" -"\n" -"Delete the selected branches?" -msgstr "" -"ĺé¤ăăăăŠăłăăĺ垊ăăăŽăŻĺ°éŁă§ăă\n" -"\n" -"é¸ćăăăăŠăłăăĺé¤ăăŚčŻăă§ăăďź" - #: lib/branch_delete.tcl:141 #, tcl-format msgid "" @@ -820,62 +895,63 @@ msgstr "" "䝼ä¸ăŽăăŠăłăăĺé¤ă§ăăžăă:\n" "%s" -#: lib/branch_rename.tcl:14 lib/branch_rename.tcl:22 -msgid "Rename Branch" -msgstr "ăăŠăłăăŽĺĺĺ¤ć´" +#: lib/choose_rev.tcl:52 +msgid "This Detached Checkout" +msgstr "ĺé˘ăăăăă§ăăŻă˘ăŚă" -#: lib/branch_rename.tcl:26 -msgid "Rename" -msgstr "ĺĺĺ¤ć´" +#: lib/choose_rev.tcl:60 +msgid "Revision Expression:" +msgstr "ăŞăă¸ă§ăłĺź:" -#: lib/branch_rename.tcl:36 -msgid "Branch:" -msgstr "ăăŠăłă:" +#: lib/choose_rev.tcl:72 +msgid "Local Branch" +msgstr "ăăźăŤăŤăťăăŠăłă" -#: lib/branch_rename.tcl:39 -msgid "New Name:" -msgstr "ć°ăăĺĺ:" +#: lib/choose_rev.tcl:77 +msgid "Tracking Branch" +msgstr "ăăŠăăăłă°ăťăăŠăłă" -#: lib/branch_rename.tcl:75 -msgid "Please select a branch to rename." -msgstr "ĺĺăĺ¤ć´ăăăăŠăłăăé¸ăă§ä¸ăăă" +#: lib/choose_rev.tcl:82 lib/choose_rev.tcl:544 +msgid "Tag" +msgstr "ăżă°" -#: lib/branch_rename.tcl:96 lib/checkout_op.tcl:202 +#: lib/choose_rev.tcl:321 #, tcl-format -msgid "Branch '%s' already exists." -msgstr "'%s'ă¨ăăăăŠăłăăŻć˘ăŤĺĺ¨ăăžăă" +msgid "Invalid revision: %s" +msgstr "çĄĺšăŞăŞăă¸ă§ăł: %s" -#: lib/branch_rename.tcl:117 -#, tcl-format -msgid "Failed to rename '%s'." -msgstr "'%s'ăŽĺĺĺ¤ć´ăŤĺ¤ąćăăžăăă" +#: lib/choose_rev.tcl:342 +msgid "No revision selected." +msgstr "ăŞăă¸ă§ăłăćŞé¸ćă§ăă" -#: lib/browser.tcl:17 -msgid "Starting..." -msgstr "辡ĺä¸âŚ" +#: lib/choose_rev.tcl:350 +msgid "Revision expression is empty." +msgstr "ăŞăă¸ă§ăłĺźă犺ă§ăă" -#: lib/browser.tcl:26 -msgid "File Browser" -msgstr "ăăĄă¤ăŤăťăăŠăŚăś" +#: lib/choose_rev.tcl:537 +msgid "Updated" +msgstr "ć´ć°ăăžăă" -#: lib/browser.tcl:126 lib/browser.tcl:143 -#, tcl-format -msgid "Loading %s..." -msgstr "%s ăăăźăä¸âŚ" +#: lib/choose_rev.tcl:565 +msgid "URL" +msgstr "URL" -#: lib/browser.tcl:187 -msgid "[Up To Parent]" -msgstr "[ä¸ä˝ăăŠăŤăă¸]" +#: lib/console.tcl:59 +msgid "Working... please wait..." +msgstr "ĺŽčĄä¸âŚăĺž
ăĄä¸ăăâŚ" -#: lib/browser.tcl:267 lib/browser.tcl:273 -msgid "Browse Branch Files" -msgstr "çžĺ¨ăŽăăŠăłăăŽăăĄă¤ăŤăčŚă" +#: lib/console.tcl:81 lib/checkout_op.tcl:146 lib/database.tcl:30 +#: lib/sshkey.tcl:55 +msgid "Close" +msgstr "éăă" -#: lib/browser.tcl:278 lib/choose_repository.tcl:398 -#: lib/choose_repository.tcl:486 lib/choose_repository.tcl:497 -#: lib/choose_repository.tcl:1028 -msgid "Browse" -msgstr "ăăŠăŚăş" +#: lib/console.tcl:186 +msgid "Success" +msgstr "ćĺ" + +#: lib/console.tcl:200 +msgid "Error: Command Failed" +msgstr "ă¨ăŠăź: ăłăăłăă夹ćăăžăă" #: lib/checkout_op.tcl:85 #, tcl-format @@ -887,11 +963,6 @@ msgstr "%s ăă %s ăăă§ăăăăŚăăžă" msgid "fatal: Cannot resolve %s" msgstr "č´ĺ˝çă¨ăŠăź: %s ăč§Łćąşă§ăăžăă" -#: lib/checkout_op.tcl:146 lib/console.tcl:81 lib/database.tcl:31 -#: lib/sshkey.tcl:53 -msgid "Close" -msgstr "éăă" - #: lib/checkout_op.tcl:175 #, tcl-format msgid "Branch '%s' does not exist." @@ -902,6 +973,11 @@ msgstr "ăăŠăłă'%s'ăŻĺĺ¨ăăžăăă" msgid "Failed to configure simplified git-pull for '%s'." msgstr "'%s' ăŤç°Ąć git-pull ăč¨ĺŽă§ăăžăăă§ăă" +#: lib/checkout_op.tcl:202 lib/branch_rename.tcl:102 +#, tcl-format +msgid "Branch '%s' already exists." +msgstr "'%s'ă¨ăăăăŠăłăăŻć˘ăŤĺĺ¨ăăžăă" + #: lib/checkout_op.tcl:229 #, tcl-format msgid "" @@ -999,9 +1075,9 @@ msgstr "夹ăŞăăăăłăăăăĺ垊ăăăŽăŻç°Ąĺă§ăŻăăăžă msgid "Reset '%s'?" msgstr "'%s' ăăŞăťăăăăžăăďź" -#: lib/checkout_op.tcl:567 lib/merge.tcl:164 lib/tools_dlg.tcl:343 -msgid "Visualize" -msgstr "ĺŻčŚĺ" +#: lib/checkout_op.tcl:571 lib/branch_create.tcl:85 +msgid "Reset" +msgstr "ăŞăťăă" #: lib/checkout_op.tcl:635 #, tcl-format @@ -1019,509 +1095,838 @@ msgstr "" "ăžăăăă Git ăŽĺ
é¨ăăźăżăć´ć°ă§ăăžăăă§ăăă\n" "辡ăăăŻăăŽăŞăă¨ăŠăźă§ăăăăăă㌠%s ăçľäşăăžăă" -#: lib/choose_font.tcl:39 -msgid "Select" -msgstr "é¸ć" +#: lib/blame.tcl:73 +msgid "File Viewer" +msgstr "ăăĄă¤ăŤăăĽăźăŻ" -#: lib/choose_font.tcl:53 -msgid "Font Family" -msgstr "ăăŠăłăăťăăĄăăŞăź" +#: lib/blame.tcl:79 +msgid "Commit:" +msgstr "ăłăăă:" -#: lib/choose_font.tcl:74 -msgid "Font Size" -msgstr "ăăŠăłăăŽĺ¤§ăă" +#: lib/blame.tcl:280 +msgid "Copy Commit" +msgstr "ăłăăăăăłăăź" -#: lib/choose_font.tcl:91 -msgid "Font Example" -msgstr "ăăŠăłăăťăľăłăăŤ" +#: lib/blame.tcl:284 +msgid "Find Text..." +msgstr "ăăăšăăć¤ç´˘" -#: lib/choose_font.tcl:103 -msgid "" -"This is example text.\n" -"If you like this text, it can be your font." -msgstr "" -"ăăăŻăľăłăăŤćă§ăă\n" -"ăăŽăăŠăłăăć°ăŤĺ
Ľăă°ă使ăăŤăŞăăžăă" +#: lib/blame.tcl:288 +msgid "Goto Line..." +msgstr "ćĺŽčĄăŤç§ťĺâŚ" + +#: lib/blame.tcl:297 +msgid "Do Full Copy Detection" +msgstr "ăłăăźć¤çĽ" + +#: lib/blame.tcl:301 +msgid "Show History Context" +msgstr "ćčăčŚăă" + +#: lib/blame.tcl:304 +msgid "Blame Parent Commit" +msgstr "茪ăłăăăă注é" + +#: lib/blame.tcl:466 +#, tcl-format +msgid "Reading %s..." +msgstr "%s ăčŞăă§ăăžăâŚ" + +#: lib/blame.tcl:594 +msgid "Loading copy/move tracking annotations..." +msgstr "ăłăăźăťç§ťĺ追补ăăźăżăčŞăă§ăăžăâŚ" + +#: lib/blame.tcl:614 +msgid "lines annotated" +msgstr "čĄă注éăăžăă" + +#: lib/blame.tcl:806 +msgid "Loading original location annotations..." +msgstr "ĺ
ä˝ç˝ŽčĄăŽćł¨éăăźăżăčŞăă§ăăžăâŚ" + +#: lib/blame.tcl:809 +msgid "Annotation complete." +msgstr "注éĺŽäşăăžăă" + +#: lib/blame.tcl:839 +msgid "Busy" +msgstr "ĺŽčĄä¸" + +#: lib/blame.tcl:840 +msgid "Annotation process is already running." +msgstr "ăă§ăŤ blame ăăăťăšăĺŽčĄä¸ă§ăă" + +#: lib/blame.tcl:879 +msgid "Running thorough copy detection..." +msgstr "ăłăăźć¤çĽăĺŽčĄä¸âŚ" + +#: lib/blame.tcl:947 +msgid "Loading annotation..." +msgstr "注éăčŞăżčžźăă§ăăžăâŚ" -#: lib/choose_repository.tcl:28 +#: lib/blame.tcl:1000 +msgid "Author:" +msgstr "ä˝č
:" + +#: lib/blame.tcl:1004 +msgid "Committer:" +msgstr "ăłăăăč
:" + +#: lib/blame.tcl:1009 +msgid "Original File:" +msgstr "ĺ
ăăĄă¤ăŤ" + +#: lib/blame.tcl:1057 +msgid "Cannot find HEAD commit:" +msgstr "HEAD ăłăăăăčŚă¤ăăăžăă" + +#: lib/blame.tcl:1112 +msgid "Cannot find parent commit:" +msgstr "茪ăłăăăăčŚă¤ăăăžăă:" + +#: lib/blame.tcl:1127 +msgid "Unable to display parent" +msgstr "茪ă襨示ă§ăăžăă" + +#: lib/blame.tcl:1128 lib/diff.tcl:356 +msgid "Error loading diff:" +msgstr "diff ăčŞăéăŽă¨ăŠăźă§ă:" + +#: lib/blame.tcl:1269 +msgid "Originally By:" +msgstr "ĺä˝č
:" + +#: lib/blame.tcl:1275 +msgid "In File:" +msgstr "ăăĄă¤ăŤ:" + +#: lib/blame.tcl:1280 +msgid "Copied Or Moved Here By:" +msgstr "č¤ĺăťç§ťĺč
:" + +#: lib/about.tcl:26 +msgid "git-gui - a graphical user interface for Git." +msgstr "Git ăŽă°ăŠăăŁăŤăŤUI git-gui" + +#: lib/choose_repository.tcl:33 msgid "Git Gui" msgstr "Git GUI" -#: lib/choose_repository.tcl:87 lib/choose_repository.tcl:386 +#: lib/choose_repository.tcl:92 lib/choose_repository.tcl:412 msgid "Create New Repository" msgstr "ć°ăăăŞăă¸ăăŞăä˝ă" -#: lib/choose_repository.tcl:93 +#: lib/choose_repository.tcl:98 msgid "New..." msgstr "ć°čŚâŚ" -#: lib/choose_repository.tcl:100 lib/choose_repository.tcl:471 +#: lib/choose_repository.tcl:105 lib/choose_repository.tcl:496 msgid "Clone Existing Repository" msgstr "ć˘ĺăŞăă¸ăăŞăč¤čŁ˝ăă" -#: lib/choose_repository.tcl:106 +#: lib/choose_repository.tcl:116 msgid "Clone..." msgstr "č¤čŁ˝âŚ" -#: lib/choose_repository.tcl:113 lib/choose_repository.tcl:1016 +#: lib/choose_repository.tcl:123 lib/choose_repository.tcl:1064 msgid "Open Existing Repository" msgstr "ć˘ĺăŞăă¸ăăŞăéă" -#: lib/choose_repository.tcl:119 +#: lib/choose_repository.tcl:129 msgid "Open..." msgstr "éăâŚ" -#: lib/choose_repository.tcl:132 +#: lib/choose_repository.tcl:142 msgid "Recent Repositories" msgstr "ćčżä˝żăŁăăŞăă¸ăăŞ" -#: lib/choose_repository.tcl:138 +#: lib/choose_repository.tcl:148 msgid "Open Recent Repository:" msgstr "ćčżä˝żăŁăăŞăă¸ăăŞăéă" -#: lib/choose_repository.tcl:306 lib/choose_repository.tcl:313 -#: lib/choose_repository.tcl:320 +#: lib/choose_repository.tcl:316 lib/choose_repository.tcl:323 +#: lib/choose_repository.tcl:330 #, tcl-format msgid "Failed to create repository %s:" msgstr "ăŞăă¸ă㪠%s ăä˝čŁ˝ă§ăăžăă:" -#: lib/choose_repository.tcl:391 +#: lib/choose_repository.tcl:407 lib/branch_create.tcl:33 +msgid "Create" +msgstr "ä˝ć" + +#: lib/choose_repository.tcl:417 msgid "Directory:" msgstr "ăăŁăŹăŻăăŞ:" -#: lib/choose_repository.tcl:423 lib/choose_repository.tcl:550 -#: lib/choose_repository.tcl:1052 +#: lib/choose_repository.tcl:422 lib/choose_repository.tcl:509 +#: lib/choose_repository.tcl:518 lib/choose_repository.tcl:1074 +#: lib/browser.tcl:288 +msgid "Browse" +msgstr "ăăŠăŚăş" + +#: lib/choose_repository.tcl:447 lib/choose_repository.tcl:573 +#: lib/choose_repository.tcl:1098 msgid "Git Repository" msgstr "GIT ăŞăă¸ăăŞ" -#: lib/choose_repository.tcl:448 +#: lib/choose_repository.tcl:472 #, tcl-format msgid "Directory %s already exists." msgstr "ăăŁăŹăŻă㪠'%s' ăŻć˘ăŤĺĺ¨ăăžăă" -#: lib/choose_repository.tcl:452 +#: lib/choose_repository.tcl:476 #, tcl-format msgid "File %s already exists." msgstr "ăăĄă¤ăŤ '%s' ăŻć˘ăŤĺĺ¨ăăžăă" -#: lib/choose_repository.tcl:466 +#: lib/choose_repository.tcl:491 msgid "Clone" msgstr "č¤čŁ˝" -#: lib/choose_repository.tcl:479 +#: lib/choose_repository.tcl:504 msgid "Source Location:" msgstr "ă˝ăźăšăŽä˝ç˝Ž" -#: lib/choose_repository.tcl:490 +#: lib/choose_repository.tcl:513 msgid "Target Directory:" msgstr "ĺ
ăăŁăŹăŻăăŞ:" -#: lib/choose_repository.tcl:502 +#: lib/choose_repository.tcl:523 msgid "Clone Type:" msgstr "č¤čŁ˝ćšĺź:" -#: lib/choose_repository.tcl:508 +#: lib/choose_repository.tcl:528 msgid "Standard (Fast, Semi-Redundant, Hardlinks)" msgstr "ć¨ćş(éŤéăťä¸ĺéˇĺşŚăťăăźăăŞăłăŻ)" -#: lib/choose_repository.tcl:514 +#: lib/choose_repository.tcl:533 msgid "Full Copy (Slower, Redundant Backup)" msgstr "ĺ
¨č¤ĺ(ä˝éăťĺéˇăăăŻă˘ăă)" -#: lib/choose_repository.tcl:520 +#: lib/choose_repository.tcl:538 msgid "Shared (Fastest, Not Recommended, No Backup)" msgstr "ĺ
ąć(ćéŤéăťéć¨ĺĽ¨ăťăăăŻă˘ăăçĄă)" -#: lib/choose_repository.tcl:556 lib/choose_repository.tcl:603 -#: lib/choose_repository.tcl:749 lib/choose_repository.tcl:819 -#: lib/choose_repository.tcl:1058 lib/choose_repository.tcl:1066 +#: lib/choose_repository.tcl:545 +msgid "Recursively clone submodules too" +msgstr "ăľăă˘ă¸ăĽăźăŤăĺ帰çăŤč¤čŁ˝ăă" + +#: lib/choose_repository.tcl:579 lib/choose_repository.tcl:626 +#: lib/choose_repository.tcl:772 lib/choose_repository.tcl:842 +#: lib/choose_repository.tcl:1104 lib/choose_repository.tcl:1112 #, tcl-format msgid "Not a Git repository: %s" msgstr "Git ăŞăă¸ăăŞă§ăŻăăăžăă: %s" -#: lib/choose_repository.tcl:592 +#: lib/choose_repository.tcl:615 msgid "Standard only available for local repository." msgstr "ć¨ćşćšĺźăŻĺä¸č¨çŽćŠä¸ăŽăŞăă¸ăăŞăŤăŽăżä˝żăăžăă" -#: lib/choose_repository.tcl:596 +#: lib/choose_repository.tcl:619 msgid "Shared only available for local repository." msgstr "ĺ
ąććšĺźăŻĺä¸č¨çŽćŠä¸ăŽăŞăă¸ăăŞăŤăŽăżä˝żăăžăă" -#: lib/choose_repository.tcl:617 +#: lib/choose_repository.tcl:640 #, tcl-format msgid "Location %s already exists." msgstr "'%s' ăŻć˘ăŤĺĺ¨ăăžăă" -#: lib/choose_repository.tcl:628 +#: lib/choose_repository.tcl:651 msgid "Failed to configure origin" msgstr "origin ăč¨ĺŽă§ăăžăăă§ăă" -#: lib/choose_repository.tcl:640 +#: lib/choose_repository.tcl:663 msgid "Counting objects" msgstr "ăŞăă¸ă§ăŻăăć°ăăŚăăžă" -#: lib/choose_repository.tcl:641 +#: lib/choose_repository.tcl:664 msgid "buckets" msgstr "ăăąă" -#: lib/choose_repository.tcl:665 +#: lib/choose_repository.tcl:688 #, tcl-format msgid "Unable to copy objects/info/alternates: %s" msgstr "objects/info/alternates ăč¤ĺă§ăăžăă: %s" -#: lib/choose_repository.tcl:701 +#: lib/choose_repository.tcl:724 #, tcl-format msgid "Nothing to clone from %s." msgstr "%s ăăč¤čŁ˝ăăĺ
厚ăŻăăăžăă" -#: lib/choose_repository.tcl:703 lib/choose_repository.tcl:917 -#: lib/choose_repository.tcl:929 +#: lib/choose_repository.tcl:726 lib/choose_repository.tcl:940 +#: lib/choose_repository.tcl:952 msgid "The 'master' branch has not been initialized." msgstr "'master' ăăŠăłăăĺćĺăăăŚăăžăă" -#: lib/choose_repository.tcl:716 +#: lib/choose_repository.tcl:739 msgid "Hardlinks are unavailable. Falling back to copying." msgstr "ăăźăăŞăłăŻăä˝ăăŞăăŽă§ăăłăăźăăžă" -#: lib/choose_repository.tcl:728 +#: lib/choose_repository.tcl:751 #, tcl-format msgid "Cloning from %s" msgstr "%s ăăč¤čŁ˝ăăŚăăžă" -#: lib/choose_repository.tcl:759 +#: lib/choose_repository.tcl:782 msgid "Copying objects" msgstr "ăŞăă¸ă§ăŻăăč¤ĺăăŚăăžă" -#: lib/choose_repository.tcl:760 +#: lib/choose_repository.tcl:783 msgid "KiB" msgstr "KiB" -#: lib/choose_repository.tcl:784 +#: lib/choose_repository.tcl:807 #, tcl-format msgid "Unable to copy object: %s" msgstr "ăŞăă¸ă§ăŻăăč¤ĺă§ăăžăă: %s" -#: lib/choose_repository.tcl:794 +#: lib/choose_repository.tcl:817 msgid "Linking objects" msgstr "ăŞăă¸ă§ăŻăăéŁçľăăŚăăžă" -#: lib/choose_repository.tcl:795 +#: lib/choose_repository.tcl:818 msgid "objects" msgstr "ăŞăă¸ă§ăŻă" -#: lib/choose_repository.tcl:803 +#: lib/choose_repository.tcl:826 #, tcl-format msgid "Unable to hardlink object: %s" msgstr "ăŞăă¸ă§ăŻăăăăźăăŞăłăŻă§ăăžăă: %s" -#: lib/choose_repository.tcl:858 +#: lib/choose_repository.tcl:881 msgid "Cannot fetch branches and objects. See console output for details." msgstr "ăăŠăłăăăŞăă¸ă§ăŻăăĺĺžă§ăăžăăăăłăłă˝ăźăŤĺşĺăčŚăŚä¸ăă" -#: lib/choose_repository.tcl:869 +#: lib/choose_repository.tcl:892 msgid "Cannot fetch tags. See console output for details." msgstr "ăżă°ăĺĺžă§ăăžăăăăłăłă˝ăźăŤĺşĺăčŚăŚä¸ăă" -#: lib/choose_repository.tcl:893 +#: lib/choose_repository.tcl:916 msgid "Cannot determine HEAD. See console output for details." msgstr "HEAD ă確ĺŽă§ăăžăăăăłăłă˝ăźăŤĺşĺăčŚăŚä¸ăă" -#: lib/choose_repository.tcl:902 +#: lib/choose_repository.tcl:925 #, tcl-format msgid "Unable to cleanup %s" msgstr "%s ăćé¤ă§ăăžăă" -#: lib/choose_repository.tcl:908 +#: lib/choose_repository.tcl:931 msgid "Clone failed." msgstr "č¤ĺăŤĺ¤ąćăăžăăă" -#: lib/choose_repository.tcl:915 +#: lib/choose_repository.tcl:938 msgid "No default branch obtained." msgstr "ăăăŠăźăŤăăťăăŠăłăăĺĺžăăăžăăă§ăă" -#: lib/choose_repository.tcl:926 +#: lib/choose_repository.tcl:949 #, tcl-format msgid "Cannot resolve %s as a commit." msgstr "%s ăăłăăăă¨ăăŚč§Łéă§ăăžăă" -#: lib/choose_repository.tcl:938 +#: lib/choose_repository.tcl:961 msgid "Creating working directory" msgstr "ä˝ćĽăăŁăŹăŻăăŞăä˝ćăăŚăăžă" -#: lib/choose_repository.tcl:939 lib/index.tcl:67 lib/index.tcl:130 -#: lib/index.tcl:198 +#: lib/choose_repository.tcl:962 lib/index.tcl:70 lib/index.tcl:136 +#: lib/index.tcl:207 msgid "files" msgstr "ăăĄă¤ăŤ" -#: lib/choose_repository.tcl:968 +#: lib/choose_repository.tcl:981 +msgid "Cannot clone submodules." +msgstr "ăľăă˘ă¸ăĽăźăŤăč¤čŁ˝ă§ăăžăăă" + +#: lib/choose_repository.tcl:990 +msgid "Cloning submodules" +msgstr "ăľăă˘ă¸ăĽăźăŤăč¤čŁ˝ăăŚăăžă" + +#: lib/choose_repository.tcl:1015 msgid "Initial file checkout failed." msgstr "ĺćăă§ăăŻă˘ăŚăăŤĺ¤ąćăăžăă" -#: lib/choose_repository.tcl:1011 +#: lib/choose_repository.tcl:1059 msgid "Open" msgstr "éă" -#: lib/choose_repository.tcl:1021 +#: lib/choose_repository.tcl:1069 msgid "Repository:" msgstr "ăŞăă¸ăăŞ:" -#: lib/choose_repository.tcl:1072 +#: lib/choose_repository.tcl:1118 #, tcl-format msgid "Failed to open repository %s:" msgstr "ăŞăă¸ă㪠%s ăéăăžăă:" -#: lib/choose_rev.tcl:53 -msgid "This Detached Checkout" -msgstr "ĺé˘ăăăăă§ăăŻă˘ăŚă" +#: lib/branch_rename.tcl:15 lib/branch_rename.tcl:23 +msgid "Rename Branch" +msgstr "ăăŠăłăăŽĺĺĺ¤ć´" -#: lib/choose_rev.tcl:60 -msgid "Revision Expression:" -msgstr "ăŞăă¸ă§ăłĺź:" +#: lib/branch_rename.tcl:28 +msgid "Rename" +msgstr "ĺĺĺ¤ć´" -#: lib/choose_rev.tcl:74 -msgid "Local Branch" -msgstr "ăăźăŤăŤăťăăŠăłă" +#: lib/branch_rename.tcl:38 +msgid "Branch:" +msgstr "ăăŠăłă:" -#: lib/choose_rev.tcl:79 -msgid "Tracking Branch" -msgstr "ăăŠăăăłă°ăťăăŠăłă" +#: lib/branch_rename.tcl:46 +msgid "New Name:" +msgstr "ć°ăăĺĺ:" -#: lib/choose_rev.tcl:84 lib/choose_rev.tcl:538 -msgid "Tag" -msgstr "ăżă°" +#: lib/branch_rename.tcl:81 +msgid "Please select a branch to rename." +msgstr "ĺĺăĺ¤ć´ăăăăŠăłăăé¸ăă§ä¸ăăă" + +#: lib/branch_rename.tcl:92 lib/branch_create.tcl:154 +msgid "Please supply a branch name." +msgstr "ăăŠăłăĺăćĺŽăăŚä¸ăăă" -#: lib/choose_rev.tcl:317 +#: lib/branch_rename.tcl:112 lib/branch_create.tcl:165 #, tcl-format -msgid "Invalid revision: %s" -msgstr "çĄĺšăŞăŞăă¸ă§ăł: %s" +msgid "'%s' is not an acceptable branch name." +msgstr "'%s' ăŻăăŠăłăĺăŤä˝żăăžăăă" -#: lib/choose_rev.tcl:338 -msgid "No revision selected." -msgstr "ăŞăă¸ă§ăłăćŞé¸ćă§ăă" +#: lib/branch_rename.tcl:123 +#, tcl-format +msgid "Failed to rename '%s'." +msgstr "'%s'ăŽĺĺĺ¤ć´ăŤĺ¤ąćăăžăăă" -#: lib/choose_rev.tcl:346 -msgid "Revision expression is empty." -msgstr "ăŞăă¸ă§ăłĺźă犺ă§ăă" +#: lib/shortcut.tcl:21 lib/shortcut.tcl:62 +msgid "Cannot write shortcut:" +msgstr "ăˇă§ăźăăŤăăăć¸ăăžăă:" -#: lib/choose_rev.tcl:531 -msgid "Updated" -msgstr "ć´ć°ăăžăă" +#: lib/shortcut.tcl:137 +msgid "Cannot write icon:" +msgstr "ă˘ă¤ăłăłăć¸ăăžăă:" -#: lib/choose_rev.tcl:559 -msgid "URL" -msgstr "URL" +#: lib/search.tcl:48 +msgid "Find:" +msgstr "ć¤ç´˘:" -#: lib/commit.tcl:9 -msgid "" -"There is nothing to amend.\n" -"\n" -"You are about to create the initial commit. There is no commit before this " -"to amend.\n" -msgstr "" -"č¨ćŁăăăłăăăăăăăăăăăžăăă\n" -"\n" -"ăăăăä˝ăăŽăŻćĺăŽăłăăăă§ăăăăŽĺăŤăŻăžă č¨ćŁăăăăăŞăłăăăăŻă" -"ăăžăăă\n" +#: lib/search.tcl:50 +msgid "Next" +msgstr "揥" -#: lib/commit.tcl:18 +#: lib/search.tcl:51 +msgid "Prev" +msgstr "ĺ" + +#: lib/search.tcl:52 +msgid "RegExp" +msgstr "ćŁčŚčĄ¨çž" + +#: lib/search.tcl:54 +msgid "Case" +msgstr "大ćĺĺ°ćĺăĺşĺĽ" + +#: lib/status_bar.tcl:87 +#, tcl-format +msgid "%s ... %*i of %*i %s (%3i%%)" +msgstr "%1$s ... %4$*i %6$s ä¸ăŽ %2$*i (%7$3i%%)" + +#: lib/tools_dlg.tcl:22 +msgid "Add Tool" +msgstr "ăăźăŤăŽčż˝ĺ " + +#: lib/tools_dlg.tcl:28 +msgid "Add New Tool Command" +msgstr "ć°čŚăăźăŤăłăăłăăŽčż˝ĺ " + +#: lib/tools_dlg.tcl:34 +msgid "Add globally" +msgstr "ĺ
¨ä˝ăŤčż˝ĺ " + +#: lib/tools_dlg.tcl:37 lib/remote_add.tcl:30 +msgid "Add" +msgstr "čż˝ĺ " + +#: lib/tools_dlg.tcl:46 +msgid "Tool Details" +msgstr "ăăźăŤăŽčŠłç´°" + +#: lib/tools_dlg.tcl:49 +msgid "Use '/' separators to create a submenu tree:" +msgstr "'/' ă§ăľăăĄăăĽăźăĺşĺăăžă:" + +#: lib/tools_dlg.tcl:51 lib/remote_add.tcl:41 lib/branch_create.tcl:44 +msgid "Name:" +msgstr "ĺĺ:" + +#: lib/tools_dlg.tcl:60 +msgid "Command:" +msgstr "ăłăăłă:" + +#: lib/tools_dlg.tcl:71 +msgid "Show a dialog before running" +msgstr "辡ĺăăĺăŤăă¤ă˘ăă°ă襨示" + +#: lib/tools_dlg.tcl:77 +msgid "Ask the user to select a revision (sets $REVISION)" +msgstr "ăŚăźăśăŤăłăăăăä¸ă¤é¸ă°ăă ($REVISION ăŤăťăăăăžă)" + +#: lib/tools_dlg.tcl:82 +msgid "Ask the user for additional arguments (sets $ARGS)" +msgstr "ăŚăźăśăŤäťăŽĺźć°ăčż˝ĺ ăăă ($ARGS ăŤăťăăăăžă)" + +#: lib/tools_dlg.tcl:89 +msgid "Don't show the command output window" +msgstr "ăłăăłăăăăŽĺşĺăŚăŁăłăăŚăčŚăăŞă" + +#: lib/tools_dlg.tcl:94 +msgid "Run only if a diff is selected ($FILENAME not empty)" +msgstr "ăăăăé¸ă°ăăŚăăă¨ăă ăĺăă($FILENAME ă犺ă§ăŞă)" + +#: lib/tools_dlg.tcl:118 +msgid "Please supply a name for the tool." +msgstr "ăăźăŤĺăćĺŽăăŚä¸ăăă" + +#: lib/tools_dlg.tcl:126 +#, tcl-format +msgid "Tool '%s' already exists." +msgstr "ăăźăŤ '%s' ăŻć˘ăŤĺĺ¨ăăžăă" + +#: lib/tools_dlg.tcl:148 +#, tcl-format msgid "" -"Cannot amend while merging.\n" -"\n" -"You are currently in the middle of a merge that has not been fully " -"completed. You cannot amend the prior commit unless you first abort the " -"current merge activity.\n" +"Could not add tool:\n" +"%s" msgstr "" -"ăăźă¸ä¸ăŤăłăăăăŽč¨ćŁăŻă§ăăžăăă\n" -"\n" -"çžĺ¨ăŻăžă ăăźă¸ăŽéä¸ă§ăăĺ
ăŤăăŽăăźă¸ăä¸ć˘ăăŞăă¨ăĺăŽăłăăăăŽč¨ćŁ" -"ăŻă§ăăžăă\n" +"ăăźăŤăčż˝ĺ ă§ăăžăă:\n" +"%s" -#: lib/commit.tcl:48 -msgid "Error loading commit data for amend:" -msgstr "č¨ćŁăăăłăăăăŽăăźăżăčŞăăžăă:" +#: lib/tools_dlg.tcl:187 +msgid "Remove Tool" +msgstr "ăăźăŤăŽĺé¤" -#: lib/commit.tcl:75 -msgid "Unable to obtain your identity:" -msgstr "ăŚăźăśăŽćŁä˝ă確čŞă§ăăžăă:" +#: lib/tools_dlg.tcl:193 +msgid "Remove Tool Commands" +msgstr "ăăźăŤăłăăłăăŽĺé¤" -#: lib/commit.tcl:80 -msgid "Invalid GIT_COMMITTER_IDENT:" -msgstr "GIT_COMMITTER_IDENT ăçĄĺšă§ă:" +#: lib/tools_dlg.tcl:198 +msgid "Remove" +msgstr "ĺé¤" -#: lib/commit.tcl:129 +#: lib/tools_dlg.tcl:231 +msgid "(Blue denotes repository-local tools)" +msgstr "(éč˛ăŻăăźăŤăŤăŹăă¸ăăŞăŽăăźăŤă§ă)" + +#: lib/tools_dlg.tcl:292 #, tcl-format -msgid "warning: Tcl does not support encoding '%s'." -msgstr "čŚĺ: Tcl ăŻă¨ăłăłăźăăŁăłă° '%s' ăăľăăźăăăŚăăžăă" +msgid "Run Command: %s" +msgstr "ăłăăłăă辡ĺ: %s" -#: lib/commit.tcl:149 +#: lib/tools_dlg.tcl:306 +msgid "Arguments" +msgstr "ĺźć°" + +#: lib/tools_dlg.tcl:321 lib/branch_checkout.tcl:35 lib/browser.tcl:297 +msgid "Revision" +msgstr "ăŞăă¸ă§ăł" + +#: lib/tools_dlg.tcl:341 +msgid "OK" +msgstr "OK" + +#: lib/tools.tcl:75 +#, tcl-format +msgid "Running %s requires a selected file." +msgstr "ăăĄă¤ăŤăé¸ćăăŚăă %s ă辡ĺăăŚăă ăăă" + +#: lib/tools.tcl:91 +#, tcl-format +msgid "Are you sure you want to run %1$s on file \"%2$s\"?" +msgstr "ćŹĺ˝ăŤăăĄă¤ăŤ \"%2$s\"ă§ %1$s ă辡ĺăăžăă?" + +#: lib/tools.tcl:95 +#, tcl-format +msgid "Are you sure you want to run %s?" +msgstr "ćŹĺ˝ăŤ %s ă辡ĺăăžăă?" + +#: lib/tools.tcl:116 +#, tcl-format +msgid "Tool: %s" +msgstr "ăăźăŤ: %s" + +#: lib/tools.tcl:117 +#, tcl-format +msgid "Running: %s" +msgstr "ĺŽčĄä¸: %s" + +#: lib/tools.tcl:155 +#, tcl-format +msgid "Tool completed successfully: %s" +msgstr "ăăźăŤăĺŽäşăăžăă: %s" + +#: lib/tools.tcl:157 +#, tcl-format +msgid "Tool failed: %s" +msgstr "ăăźăŤă夹ćăăžăă: %s" + +#: lib/mergetool.tcl:8 +msgid "Force resolution to the base version?" +msgstr "ĺ
ąéăŽçă使ăăžăă?" + +#: lib/mergetool.tcl:9 +msgid "Force resolution to this branch?" +msgstr "čŞĺăŽĺ´ăŽçă使ăăžăă?" + +#: lib/mergetool.tcl:10 +msgid "Force resolution to the other branch?" +msgstr "ç¸ćĺśăŽçă使ăăžăă?" + +#: lib/mergetool.tcl:14 +#, tcl-format msgid "" -"Last scanned state does not match repository state.\n" +"Note that the diff shows only conflicting changes.\n" "\n" -"Another Git program has modified this repository since the last scan. A " -"rescan must be performed before another commit can be created.\n" +"%s will be overwritten.\n" "\n" -"The rescan will be automatically started now.\n" +"This operation can be undone only by restarting the merge." msgstr "" -"ćĺžăŤăšăăŁăłăăçść
ăŻăŞăă¸ăăŞăŽçść
ă¨ĺč´ăăžăăă\n" +"獜ĺăăĺ¤ć´çšă ăă襨示ăăăŚăăăă¨ăŤćł¨ćăăŚăă ăăă\n" "\n" -"ćĺžăŤăšăăŁăłăăŚäťĽĺžăĺĽăŽ Git ăăă°ăŠă ăăŞăă¸ăăŞăĺ¤ć´ăăŚăăžăăć°ă" -"ăăłăăăăăĺăŤăĺăšăăŁăłăĺż
čŚă§ăă\n" +"%s ăŻä¸ć¸ăăăăžăă\n" "\n" -"čŞĺçăŤĺăšăăŁăłăéĺ§ăăžăă\n" +"ăăç´ăăŤăŻăăźă¸ĺ
¨ä˝ăăăç´ăăŚăă ăăă" -#: lib/commit.tcl:172 +#: lib/mergetool.tcl:45 #, tcl-format -msgid "" -"Unmerged files cannot be committed.\n" -"\n" -"File %s has merge conflicts. You must resolve them and stage the file " -"before committing.\n" +msgid "File %s seems to have unresolved conflicts, still stage?" msgstr "" -"ăăźă¸ăăŚăăŞăăăĄă¤ăŤăŻăłăăăă§ăăžăăă\n" -"\n" -"ăăĄă¤ăŤ %s ăŤăŻăăźă¸čĄçŞăćŽăŁăŚăăžăăăžăč§ŁćąşăăŚăłăăăäşĺŽăŤĺ ăăĺż
" -"čŚăăăăžăă\n" +"ăăĄă¤ăŤ %s ăŤăŻč§ŁćąşăăŚăăŞă獜ĺé¨ĺăăžă ăăăăă§ăăăăăă§ăă?" + +#: lib/mergetool.tcl:60 +#, tcl-format +msgid "Adding resolution for %s" +msgstr "%s ă¸ăŽč§Łćąşăăšăăźă¸ăăžă" + +#: lib/mergetool.tcl:141 +msgid "Cannot resolve deletion or link conflicts using a tool" +msgstr "ăăźăŤă§ăŻĺé¤ăăŞăłăŻçŤśĺăŻćąăăžăă" -#: lib/commit.tcl:180 +#: lib/mergetool.tcl:146 +msgid "Conflict file does not exist" +msgstr "獜ĺăăĄă¤ăŤăŻĺĺ¨ăăžăăă" + +#: lib/mergetool.tcl:246 #, tcl-format -msgid "" -"Unknown file state %s detected.\n" -"\n" -"File %s cannot be committed by this program.\n" -msgstr "" -"ä¸ćăŞăăĄă¤ăŤçść
%s ă§ăă\n" -"\n" -"ăăĄă¤ăŤ %s ăŻćŹăăă°ăŠă ă§ăŻăłăăăă§ăăžăăă\n" +msgid "Not a GUI merge tool: '%s'" +msgstr "GUI ăăźă¸ăăźăŤă§ăŻăăăžăă: %s" -#: lib/commit.tcl:188 +#: lib/mergetool.tcl:275 +#, tcl-format +msgid "Unsupported merge tool '%s'" +msgstr "ăăźă¸ăăźăŤ '%s' ăŻăľăăźăăăŚăăžăă" + +#: lib/mergetool.tcl:310 +msgid "Merge tool is already running, terminate it?" +msgstr "ăăźă¸ăăźăŤăŻăă§ăŤčľˇĺăăŚăăžăăçľäşăăžăă?" + +#: lib/mergetool.tcl:330 +#, tcl-format msgid "" -"No changes to commit.\n" -"\n" -"You must stage at least 1 file before you can commit.\n" +"Error retrieving versions:\n" +"%s" msgstr "" -"ăłăăăăăĺ¤ć´ăăăăžăăă\n" -"\n" -"ćä˝ä¸ă¤ăŽĺ¤ć´ăăłăăăäşĺŽăŤĺ ăăŚăăăłăăăăăŚä¸ăăă\n" +"çăŽĺăĺşăćăŤă¨ăŠăźăĺşăžăă:\n" +"%s" -#: lib/commit.tcl:203 +#: lib/mergetool.tcl:350 +#, tcl-format msgid "" -"Please supply a commit message.\n" -"\n" -"A good commit message has the following format:\n" +"Could not start the merge tool:\n" "\n" -"- First line: Describe in one sentence what you did.\n" -"- Second line: Blank\n" -"- Remaining lines: Describe why this change is good.\n" +"%s" msgstr "" -"ăłăăăăťăĄăăťăźă¸ăĺ
ĽĺăăŚä¸ăăă\n" -"\n" -"ćŁăăăłăăăăťăĄăăťăźă¸ăŻ:\n" +"ăăźă¸ăăźăŤă辡ĺă§ăăžăă:\n" "\n" -"- 珏ďźčĄ: ä˝ăăăăăăďźčĄă§čŚç´ă\n" -"- 珏ďźčĄ: 犺ç˝\n" -"- ćŽăăŽčĄ: ăŞăăăăŽĺ¤ć´ăčŻăĺ¤ć´ăăăŽčŞŹćă\n" - -#: lib/commit.tcl:234 -msgid "Calling pre-commit hook..." -msgstr "ăłăăăĺăăăŻăĺŽčĄä¸ăťăťăť" +"%s" -#: lib/commit.tcl:249 -msgid "Commit declined by pre-commit hook." -msgstr "ăłăăăĺăăăŻăăłăăăăćĺŚăăžăă" +#: lib/mergetool.tcl:354 +msgid "Running merge tool..." +msgstr "ăăźă¸ăăźăŤăĺŽčĄăăŚăăžă..." -#: lib/commit.tcl:272 -msgid "Calling commit-msg hook..." -msgstr "ăłăăăăťăĄăăťăźă¸ăťăăăŻăĺŽčĄä¸ăťăťăť" +#: lib/mergetool.tcl:382 lib/mergetool.tcl:390 +msgid "Merge tool failed." +msgstr "ăăźă¸ăăźăŤă夹ćăăžăăă" -#: lib/commit.tcl:287 -msgid "Commit declined by commit-msg hook." -msgstr "ăłăăăăťăĄăăťăźă¸ăťăăăŻăăłăăăăćĺŚăăžăă" +#: lib/option.tcl:11 +#, tcl-format +msgid "Invalid global encoding '%s'" +msgstr "ĺ
¨ä˝ă¨ăłăłăźăăŁăłă°ăŤ çĄĺšăŞ %s ăćĺŽăăăŚăăžă" -#: lib/commit.tcl:300 -msgid "Committing changes..." -msgstr "ĺ¤ć´çšăăłăăăä¸ăťăťăť" +#: lib/option.tcl:19 +#, tcl-format +msgid "Invalid repo encoding '%s'" +msgstr "ăŞăă¸ăăŞă¨ăłăłăźăăŁăłă°ăŤ çĄĺšăŞ %s ăćĺŽăăăŚăăžă" -#: lib/commit.tcl:316 -msgid "write-tree failed:" -msgstr "write-tree ă夹ćăăžăă:" +#: lib/option.tcl:119 +msgid "Restore Defaults" +msgstr "ć˘ĺŽĺ¤ăŤćťă" -#: lib/commit.tcl:317 lib/commit.tcl:361 lib/commit.tcl:382 -msgid "Commit failed." -msgstr "ăłăăăăŤĺ¤ąćăăžăăă" +#: lib/option.tcl:123 +msgid "Save" +msgstr "äżĺ" -#: lib/commit.tcl:334 +#: lib/option.tcl:133 #, tcl-format -msgid "Commit %s appears to be corrupt" -msgstr "ăłăăă %s ăŻĺŁăăŚăăžă" +msgid "%s Repository" +msgstr "%s ăŞăă¸ăăŞ" -#: lib/commit.tcl:339 -msgid "" -"No changes to commit.\n" -"\n" -"No files were modified by this commit and it was not a merge commit.\n" -"\n" -"A rescan will be automatically started now.\n" -msgstr "" -"ăłăăăăăĺ¤ć´ăăăăžăăă\n" -"\n" -"ăăźă¸ă§ăŞăăăžăăä¸ă¤ăĺ¤ć´çšăăăăžăăă\n" -"\n" -"čŞĺçăŤĺăšăăŁăłăéĺ§ăăžăă\n" +#: lib/option.tcl:134 +msgid "Global (All Repositories)" +msgstr "大ĺďźĺ
¨ăŚăŽăŞăă¸ăăŞďź" -#: lib/commit.tcl:346 -msgid "No changes to commit." -msgstr "ăłăăăăăĺ¤ć´ăăăăžăăă" +#: lib/option.tcl:140 +msgid "User Name" +msgstr "ăŚăźăśĺ" -#: lib/commit.tcl:360 -msgid "commit-tree failed:" -msgstr "commit-tree ă夹ćăăžăă:" +#: lib/option.tcl:141 +msgid "Email Address" +msgstr "éťĺăĄăźăŤă˘ăăŹăš" -#: lib/commit.tcl:381 -msgid "update-ref failed:" -msgstr "update-ref ă夹ćăăžăă:" +#: lib/option.tcl:143 +msgid "Summarize Merge Commits" +msgstr "ăăźă¸ăłăăăăŽčŚç´" + +#: lib/option.tcl:144 +msgid "Merge Verbosity" +msgstr "ăăźă¸ăŽĺéˇĺşŚ" + +#: lib/option.tcl:145 +msgid "Show Diffstat After Merge" +msgstr "ăăźă¸ĺžăŤ diffstat ă襨示" + +#: lib/option.tcl:146 +msgid "Use Merge Tool" +msgstr "ăăźă¸ăăźăŤă使ç¨" + +#: lib/option.tcl:148 +msgid "Trust File Modification Timestamps" +msgstr "ăăĄă¤ăŤĺ¤ć´ćĺťăäżĄé źăă" + +#: lib/option.tcl:149 +msgid "Prune Tracking Branches During Fetch" +msgstr "ăă§ăăä¸ăŤăăŠăăăłă°ăăŠăłăăĺă" -#: lib/commit.tcl:469 +#: lib/option.tcl:150 +msgid "Match Tracking Branches" +msgstr "ăăŠăăăłă°ăăŠăłăăĺăăă" + +#: lib/option.tcl:151 +msgid "Use Textconv For Diffs and Blames" +msgstr "diff ă¨ćł¨é㍠textconv ă使ă" + +#: lib/option.tcl:152 +msgid "Blame Copy Only On Changed Files" +msgstr "ĺ¤ć´ăăăăăĄă¤ăŤăŽăżăłăăźć¤çĽăčĄăŞă" + +#: lib/option.tcl:153 +msgid "Maximum Length of Recent Repositories List" +msgstr "ćčżä˝żăŁăăŞăă¸ăăŞä¸čڧăŽä¸é" + +#: lib/option.tcl:154 +msgid "Minimum Letters To Blame Copy On" +msgstr "ăłăăźăć¤çĽăăćĺ°ćĺć°" + +#: lib/option.tcl:155 +msgid "Blame History Context Radius (days)" +msgstr "注éăă幼ć´ĺĺžďźćĽć°ďź" + +#: lib/option.tcl:156 +msgid "Number of Diff Context Lines" +msgstr "diff ăŽćččĄć°" + +#: lib/option.tcl:157 +msgid "Additional Diff Parameters" +msgstr "diff ăŽčż˝ĺ ĺźć°" + +#: lib/option.tcl:158 +msgid "Commit Message Text Width" +msgstr "ăłăăăăĄăăťăźă¸ăŽăăăšăĺš
" + +#: lib/option.tcl:159 +msgid "New Branch Name Template" +msgstr "ć°ăăăăŠăłăĺăŽăăłăăŹăźă" + +#: lib/option.tcl:160 +msgid "Default File Contents Encoding" +msgstr "ăăĄă¤ăŤĺ
厚ăŽăăăŠăźăŤăă¨ăłăłăźăăŁăłă°" + +#: lib/option.tcl:161 +msgid "Warn before committing to a detached head" +msgstr "ĺé˘ HEAD ăŽăłăăăĺăŤčŚĺăă" + +#: lib/option.tcl:162 +msgid "Staging of untracked files" +msgstr "玥çĺ¤ăŽăăĄă¤ăŤăăłăăăäşĺŽăă" + +#: lib/option.tcl:163 +msgid "Show untracked files" +msgstr "玥çĺ¤ăŽăăĄă¤ăŤă襨示ăă" + +#: lib/option.tcl:164 +msgid "Tab spacing" +msgstr "ăżăĺš
" + +#: lib/option.tcl:210 +msgid "Change" +msgstr "ĺ¤ć´" + +#: lib/option.tcl:254 +msgid "Spelling Dictionary:" +msgstr "ăšăăŤăă§ăăŻčžć¸" + +#: lib/option.tcl:284 +msgid "Change Font" +msgstr "ăăŠăłăăĺ¤ć´" + +#: lib/option.tcl:288 #, tcl-format -msgid "Created commit %s: %s" -msgstr "ăłăăă %s ăä˝ćăăžăă: %s" +msgid "Choose %s" +msgstr "%s ăé¸ć" -#: lib/console.tcl:59 -msgid "Working... please wait..." -msgstr "ĺŽčĄä¸âŚăĺž
ăĄä¸ăăâŚ" +#: lib/option.tcl:294 +msgid "pt." +msgstr "ăă¤ăłă" -#: lib/console.tcl:186 -msgid "Success" -msgstr "ćĺ" +#: lib/option.tcl:308 +msgid "Preferences" +msgstr "č¨ĺŽ" -#: lib/console.tcl:200 -msgid "Error: Command Failed" -msgstr "ă¨ăŠăź: ăłăăłăă夹ćăăžăă" +#: lib/option.tcl:310 lib/branch_checkout.tcl:39 lib/branch_create.tcl:69 +msgid "Options" +msgstr "ăŞăăˇă§ăł" -#: lib/database.tcl:43 +#: lib/option.tcl:345 +msgid "Failed to completely save options:" +msgstr "ĺŽĺ
¨ăŤăŞăăˇă§ăłăäżĺă§ăăžăă:" + +#: lib/database.tcl:42 msgid "Number of loose objects" msgstr "ă°ăă°ăăŞăŞăă¸ă§ăŻăăŽć°" -#: lib/database.tcl:44 +#: lib/database.tcl:43 msgid "Disk space used by loose objects" msgstr "ă°ăă°ăăŞăŞăă¸ă§ăŻăăŽä˝żç¨ăăăăŁăšăŻé" -#: lib/database.tcl:45 +#: lib/database.tcl:44 msgid "Number of packed objects" msgstr "ăăăŻăăăăŞăă¸ă§ăŻăăŽć°" -#: lib/database.tcl:46 +#: lib/database.tcl:45 msgid "Number of packs" msgstr "ăăăŻăŽć°" -#: lib/database.tcl:47 +#: lib/database.tcl:46 msgid "Disk space used by packed objects" msgstr "ăăăŻăăăăŞăă¸ă§ăŻăăŽä˝żç¨ăăăăŁăšăŻé" -#: lib/database.tcl:48 +#: lib/database.tcl:47 msgid "Packed objects waiting for pruning" msgstr "ăăăŻăŤĺĺ¨ăăăŽă§ć¨ăŚăŚčŻăăŞăă¸ă§ăŻăăŽć°" -#: lib/database.tcl:49 +#: lib/database.tcl:48 msgid "Garbage files" msgstr "ă´ăăăĄă¤ăŤ" @@ -1549,12 +1954,132 @@ msgstr "" "\n" "ăăźăżăăźăšăĺ§ç¸Žăăžăăďź" -#: lib/date.tcl:25 +#: lib/transport.tcl:6 lib/remote_add.tcl:132 #, tcl-format -msgid "Invalid date from Git: %s" -msgstr "Git ăăĺşăçĄĺšăŞćĽäť: %s" +msgid "fetch %s" +msgstr "%s ăĺĺž" -#: lib/diff.tcl:64 +#: lib/transport.tcl:7 +#, tcl-format +msgid "Fetching new changes from %s" +msgstr "%s ăăć°ăăĺ¤ć´ăăă§ăăăăŚăăžă" + +#: lib/transport.tcl:18 +#, tcl-format +msgid "remote prune %s" +msgstr "ăŞă˘ăźăĺčžź %s" + +#: lib/transport.tcl:19 +#, tcl-format +msgid "Pruning tracking branches deleted from %s" +msgstr "%s ăăĺé¤ăăăăăŠăăăłă°ăťăăŠăłăăĺăŁăŚăăžă" + +#: lib/transport.tcl:25 +msgid "fetch all remotes" +msgstr "ăăšăŚăŽăŞă˘ăźăăĺĺž" + +#: lib/transport.tcl:26 +msgid "Fetching new changes from all remotes" +msgstr "ăăšăŚăŽăŞă˘ăźăăăć°ăăĺ¤ć´ăăă§ăăăăŚăăžă" + +#: lib/transport.tcl:40 +msgid "remote prune all remotes" +msgstr "ăŞă˘ăźăĺčžź ăăšăŚăŽăŞă˘ăźă" + +#: lib/transport.tcl:41 +msgid "Pruning tracking branches deleted from all remotes" +msgstr "ăăšăŚăŽăŞă˘ăźăăăĺé¤ăăăăăŠăăăłă°ăťăăŠăłăăĺăŁăŚăăžă" + +#: lib/transport.tcl:54 lib/transport.tcl:92 lib/transport.tcl:110 +#: lib/remote_add.tcl:162 +#, tcl-format +msgid "push %s" +msgstr "%s ăăăăˇăĽ" + +#: lib/transport.tcl:55 +#, tcl-format +msgid "Pushing changes to %s" +msgstr "%s ă¸ĺ¤ć´ăăăăˇăĽăăŚăăžă" + +#: lib/transport.tcl:93 +#, tcl-format +msgid "Mirroring to %s" +msgstr "%s ă¸ăăŠăźăăŚăăžă" + +#: lib/transport.tcl:111 +#, tcl-format +msgid "Pushing %s %s to %s" +msgstr "%3$s 㸠%1$s %2$s ăăăăˇăĽăăŚăăžă" + +#: lib/transport.tcl:132 +msgid "Push Branches" +msgstr "ăăŠăłăăăăăˇăĽ" + +#: lib/transport.tcl:147 +msgid "Source Branches" +msgstr "ĺ
ăŽăăŠăłă" + +#: lib/transport.tcl:162 +msgid "Destination Repository" +msgstr "éăĺ
ăŞăă¸ăăŞ" + +#: lib/transport.tcl:205 +msgid "Transfer Options" +msgstr "é俥ăŞăăˇă§ăł" + +#: lib/transport.tcl:207 +msgid "Force overwrite existing branch (may discard changes)" +msgstr "ć˘ĺăăŠăłăăä¸ć¸ă(ĺ¤ć´ăç ´ćŁăăĺŻč˝ć§ăăăăžă)" + +#: lib/transport.tcl:211 +msgid "Use thin pack (for slow network connections)" +msgstr "Thin Pack ă使ăďźé
ăăăăăŻăźăŻćĽçśďź" + +#: lib/transport.tcl:215 +msgid "Include tags" +msgstr "ăżă°ăĺŤăă" + +#: lib/choose_font.tcl:41 +msgid "Select" +msgstr "é¸ć" + +#: lib/choose_font.tcl:55 +msgid "Font Family" +msgstr "ăăŠăłăăťăăĄăăŞăź" + +#: lib/choose_font.tcl:76 +msgid "Font Size" +msgstr "ăăŠăłăăŽĺ¤§ăă" + +#: lib/choose_font.tcl:93 +msgid "Font Example" +msgstr "ăăŠăłăăťăľăłăăŤ" + +#: lib/choose_font.tcl:105 +msgid "" +"This is example text.\n" +"If you like this text, it can be your font." +msgstr "" +"ăăăŻăľăłăăŤćă§ăă\n" +"ăăŽăăŠăłăăć°ăŤĺ
Ľăă°ă使ăăŤăŞăăžăă" + +#: lib/remote.tcl:200 +msgid "Push to" +msgstr "ăăăˇăĽĺ
" + +#: lib/remote.tcl:218 +msgid "Remove Remote" +msgstr "ăŞă˘ăźăăĺé¤" + +#: lib/remote.tcl:223 +msgid "Prune from" +msgstr "ăăĺčžźăâŚ" + +#: lib/remote.tcl:228 +msgid "Fetch from" +msgstr "ĺĺžĺ
" + +#: lib/diff.tcl:77 #, tcl-format msgid "" "No differences detected.\n" @@ -1576,12 +2101,12 @@ msgstr "" "\n" "ĺć§ăŞçść
ăŽăăĄă¤ăŤăć˘ăăăăŤăčŞĺçăŤĺăšăăŁăłăéĺ§ăăžăă" -#: lib/diff.tcl:104 +#: lib/diff.tcl:117 #, tcl-format msgid "Loading diff of %s..." msgstr "%s ăŽĺ¤ć´çšăăăźăä¸âŚ" -#: lib/diff.tcl:125 +#: lib/diff.tcl:140 msgid "" "LOCAL: deleted\n" "REMOTE:\n" @@ -1589,7 +2114,7 @@ msgstr "" "LOCAL: ĺé¤\n" "Remote:\n" -#: lib/diff.tcl:130 +#: lib/diff.tcl:145 msgid "" "REMOTE: deleted\n" "LOCAL:\n" @@ -1597,32 +2122,32 @@ msgstr "" "REMOTE: ĺé¤\n" "LOCAL:\n" -#: lib/diff.tcl:137 +#: lib/diff.tcl:152 msgid "LOCAL:\n" msgstr "LOCAL:\n" -#: lib/diff.tcl:140 +#: lib/diff.tcl:155 msgid "REMOTE:\n" msgstr "REMOTE\n" -#: lib/diff.tcl:202 lib/diff.tcl:319 +#: lib/diff.tcl:217 lib/diff.tcl:355 #, tcl-format msgid "Unable to display %s" msgstr "%s ă襨示ă§ăăžăă" -#: lib/diff.tcl:203 +#: lib/diff.tcl:218 msgid "Error loading file:" msgstr "ăăĄă¤ăŤăčŞăéăŽă¨ăŠăźă§ă:" -#: lib/diff.tcl:210 +#: lib/diff.tcl:225 msgid "Git Repository (subproject)" msgstr "Git ăŞăă¸ăăŞ(ăľăăăă¸ă§ăŻă)" -#: lib/diff.tcl:222 +#: lib/diff.tcl:237 msgid "* Binary file (not showing content)." msgstr "* ăă¤ăăŞăăĄă¤ăŤ(ĺ
厚ăŻčĄ¨ç¤şăăžăă)" -#: lib/diff.tcl:227 +#: lib/diff.tcl:242 #, tcl-format msgid "" "* Untracked file is %d bytes.\n" @@ -1631,7 +2156,7 @@ msgstr "" "* 玥çĺ¤ăŽăăĄă¤ăŤăŽĺ¤§ăă㯠%d ăă¤ăă§ăă\n" "* ćĺ㎠%d ăă¤ăă ă襨示ăăŚăăžăă\n" -#: lib/diff.tcl:233 +#: lib/diff.tcl:248 #, tcl-format msgid "" "\n" @@ -1643,56 +2168,47 @@ msgstr "" "* %s ăŻçŽĄçĺ¤ăŽăăĄă¤ăŤăăăă§ĺăăă¨ăăžăăă\n" "* ĺ
¨ä˝ăčŚăăŤăŻĺ¤é¨ă¨ăăŁăżă使ăŁăŚăă ăăă\n" -#: lib/diff.tcl:482 +#: lib/diff.tcl:578 msgid "Failed to unstage selected hunk." msgstr "é¸ćăăăăăăăăłăăăäşĺŽăăĺ¤ăăžăăă" -#: lib/diff.tcl:489 +#: lib/diff.tcl:585 msgid "Failed to stage selected hunk." msgstr "é¸ćăăăăăăăăłăăăäşĺŽăŤĺ ăăăăžăăă" -#: lib/diff.tcl:568 +#: lib/diff.tcl:664 msgid "Failed to unstage selected line." msgstr "é¸ćăăăăăăčĄăăłăăăäşĺŽăăĺ¤ăăžăăă" -#: lib/diff.tcl:576 +#: lib/diff.tcl:672 msgid "Failed to stage selected line." msgstr "é¸ćăăăăăăčĄăăłăăăäşĺŽăŤĺ ăăăăžăăă" -#: lib/encoding.tcl:443 -msgid "Default" -msgstr "ăăăŠăźăŤă" - -#: lib/encoding.tcl:448 -#, tcl-format -msgid "System (%s)" -msgstr "ăˇăšăă (%s)" - -#: lib/encoding.tcl:459 lib/encoding.tcl:465 -msgid "Other" -msgstr "ăăŽäť" +#: lib/branch_checkout.tcl:16 lib/branch_checkout.tcl:21 +msgid "Checkout Branch" +msgstr "ăăŠăłăăăă§ăăŻă˘ăŚă" -#: lib/error.tcl:20 lib/error.tcl:114 -msgid "error" -msgstr "ă¨ăŠăź" +#: lib/branch_checkout.tcl:26 +msgid "Checkout" +msgstr "ăă§ăăŻă˘ăŚă" -#: lib/error.tcl:36 -msgid "warning" -msgstr "čŚĺ" +#: lib/branch_checkout.tcl:42 lib/branch_create.tcl:92 +msgid "Fetch Tracking Branch" +msgstr "ăăŠăăăłă°ăťăăŠăłăăăă§ăă" -#: lib/error.tcl:94 -msgid "You must correct the above errors before committing." -msgstr "ăłăăăăăĺăŤă䝼ä¸ăŽă¨ăŠăźă俎ćŁăăŚä¸ăă" +#: lib/branch_checkout.tcl:47 +msgid "Detach From Local Branch" +msgstr "ăăźăŤăŤăťăăŠăłăăăĺé¤" #: lib/index.tcl:6 msgid "Unable to unlock the index." msgstr "ă¤ăłăăăŻăšăăăăŻă§ăăžăă" -#: lib/index.tcl:15 +#: lib/index.tcl:17 msgid "Index Error" msgstr "ç´˘ĺźă¨ăŠăź" -#: lib/index.tcl:17 +#: lib/index.tcl:19 msgid "" "Updating the Git index failed. A rescan will be automatically started to " "resynchronize git-gui." @@ -1700,433 +2216,330 @@ msgstr "" "GIT ă¤ăłăăăŻăšăŽć´ć°ă夹ćăăžăăăgit-gui ă¨ĺćăă¨ăăăăŤĺăšăăŁăłă" "ăžăă" -#: lib/index.tcl:28 +#: lib/index.tcl:30 msgid "Continue" msgstr "çśčĄ" -#: lib/index.tcl:31 +#: lib/index.tcl:33 msgid "Unlock Index" msgstr "ă¤ăłăăăŻăšăŽăăăŻč§Łé¤" -#: lib/index.tcl:289 +#: lib/index.tcl:298 #, tcl-format msgid "Unstaging %s from commit" msgstr "ăłăăăăă '%s' ăéăă" -#: lib/index.tcl:328 +#: lib/index.tcl:337 msgid "Ready to commit." msgstr "ăłăăăćşĺĺŽäş" -#: lib/index.tcl:341 +#: lib/index.tcl:350 #, tcl-format msgid "Adding %s" msgstr "ăłăăă㍠%s ăĺ ăăŚăăžă" -#: lib/index.tcl:398 +#: lib/index.tcl:380 +#, tcl-format +msgid "Stage %d untracked files?" +msgstr "玥çĺ¤ăŽ %d ăăĄă¤ăŤăăłăăăäşĺŽă¨ăăžăăďź" + +#: lib/index.tcl:428 #, tcl-format msgid "Revert changes in file %s?" msgstr "ăăĄă¤ăŤ %s ăŤăăĺ¤ć´ăĺ
ăŤćťăăžăăďź" -#: lib/index.tcl:400 +#: lib/index.tcl:430 #, tcl-format msgid "Revert changes in these %i files?" msgstr "ăăă %i ĺăŽăăĄă¤ăŤăŤăăĺ¤ć´ăĺ
ăŤćťăăžăăďź" -#: lib/index.tcl:408 +#: lib/index.tcl:438 msgid "Any unstaged changes will be permanently lost by the revert." msgstr "ĺ¤ć´ăĺ
ăŤćťăă¨ăłăăăäşĺŽăăŚăăŞăĺ¤ć´ăŻĺ
¨ăŚĺ¤ąăăăžăă" -#: lib/index.tcl:411 +#: lib/index.tcl:441 msgid "Do Nothing" msgstr "ä˝ăăăŞă" -#: lib/index.tcl:429 +#: lib/index.tcl:459 msgid "Reverting selected files" msgstr "é¸ćăăăăăĄă¤ăŤăŤăăĺ¤ć´ăĺ
ăŤćťăăžă" -#: lib/index.tcl:433 +#: lib/index.tcl:463 #, tcl-format msgid "Reverting %s" msgstr "%s ăŤăăĺ¤ć´ăĺ
ăŤćťăăžă" -#: lib/merge.tcl:13 +#: lib/sshkey.tcl:31 +msgid "No keys found." +msgstr "ăăźăăăăžăăă" + +#: lib/sshkey.tcl:34 +#, tcl-format +msgid "Found a public key in: %s" +msgstr "ĺ
Źééľăăăăžăă: %s" + +#: lib/sshkey.tcl:40 +msgid "Generate Key" +msgstr "éľăçć" + +#: lib/sshkey.tcl:58 +msgid "Copy To Clipboard" +msgstr "ăŻăŞăăăăźăăŤăłăăź" + +#: lib/sshkey.tcl:72 +msgid "Your OpenSSH Public Key" +msgstr "ăăŞă㎠OpenSSH ĺ
Źééľ" + +#: lib/sshkey.tcl:80 +msgid "Generating..." +msgstr "çćä¸..." + +#: lib/sshkey.tcl:86 +#, tcl-format msgid "" -"Cannot merge while amending.\n" +"Could not start ssh-keygen:\n" "\n" -"You must finish amending this commit before starting any type of merge.\n" +"%s" msgstr "" -"č¨ćŁä¸ăŤăŻăăźă¸ă§ăăžăăă\n" +"ssh-keygen ă辡ĺă§ăăžăă:\n" "\n" -"č¨ćŁĺŚçăĺŽäşăăăžă§ăŻć°ăăŤăăźă¸ăéĺ§ă§ăăžăăă\n" +"%s" -#: lib/merge.tcl:27 +#: lib/sshkey.tcl:113 +msgid "Generation failed." +msgstr "çćăŤĺ¤ąćăăžăăă" + +#: lib/sshkey.tcl:120 +msgid "Generation succeeded, but no keys found." +msgstr "çćăŤăŻćĺăăžăăăăéľăčŚă¤ăăăžăăă" + +#: lib/sshkey.tcl:123 +#, tcl-format +msgid "Your key is in: %s" +msgstr "ăăŞăăŽéľăŻ %s ăŤăăăžă" + +#: lib/commit.tcl:9 msgid "" -"Last scanned state does not match repository state.\n" -"\n" -"Another Git program has modified this repository since the last scan. A " -"rescan must be performed before a merge can be performed.\n" +"There is nothing to amend.\n" "\n" -"The rescan will be automatically started now.\n" +"You are about to create the initial commit. There is no commit before this " +"to amend.\n" msgstr "" -"ćĺžăŤăšăăŁăłăăçść
ăŻăŞăă¸ăăŞăŽçść
ă¨ĺč´ăăžăăă\n" -"\n" -"ćĺžăŤăšăăŁăłăăŚäťĽĺžăĺĽăŽ Git ăăă°ăŠă ăăŞăă¸ăăŞăĺ¤ć´ăăŚăăžăăăăź" -"ă¸ăéĺ§ăăĺăŤăĺăšăăŁăłăĺż
čŚă§ăă\n" +"č¨ćŁăăăłăăăăăăăăăăăžăăă\n" "\n" -"čŞĺçăŤĺăšăăŁăłăéĺ§ăăžăă\n" +"ăăăăä˝ăăŽăŻćĺăŽăłăăăă§ăăăăŽĺăŤăŻăžă č¨ćŁăăăăăŞăłăăăăŻă" +"ăăžăăă\n" -#: lib/merge.tcl:45 -#, tcl-format +#: lib/commit.tcl:18 msgid "" -"You are in the middle of a conflicted merge.\n" -"\n" -"File %s has merge conflicts.\n" +"Cannot amend while merging.\n" "\n" -"You must resolve them, stage the file, and commit to complete the current " -"merge. Only then can you begin another merge.\n" +"You are currently in the middle of a merge that has not been fully " +"completed. You cannot amend the prior commit unless you first abort the " +"current merge activity.\n" msgstr "" -"čĄçŞăŽăăŁăăăźă¸ăŽéä¸ă§ăă\n" -"\n" -"ăăĄă¤ăŤ %s ăŤăŻăăźă¸ä¸ăŽčĄçŞăćŽăŁăŚăăžăă\n" +"ăăźă¸ä¸ăŤăłăăăăŽč¨ćŁăŻă§ăăžăăă\n" "\n" -"ăăŽăăĄă¤ăŤăŽčĄçŞăč§ŁćąşăăăłăăăäşĺŽăŤĺ ăăŚăăłăăăăăăă¨ă§ăăźă¸ă" -"ĺŽäşăăžăăăăăăŁăŚĺ§ăăŚăć°ăăŞăăźă¸ăéĺ§ă§ăăăăăŤăŞăăžăă\n" +"çžĺ¨ăŻăžă ăăźă¸ăŽéä¸ă§ăăĺ
ăŤăăŽăăźă¸ăä¸ć˘ăăŞăă¨ăĺăŽăłăăăăŽč¨ćŁ" +"ăŻă§ăăžăă\n" -#: lib/merge.tcl:55 +#: lib/commit.tcl:48 +msgid "Error loading commit data for amend:" +msgstr "č¨ćŁăăăłăăăăŽăăźăżăčŞăăžăă:" + +#: lib/commit.tcl:75 +msgid "Unable to obtain your identity:" +msgstr "ăŚăźăśăŽćŁä˝ă確čŞă§ăăžăă:" + +#: lib/commit.tcl:80 +msgid "Invalid GIT_COMMITTER_IDENT:" +msgstr "GIT_COMMITTER_IDENT ăçĄĺšă§ă:" + +#: lib/commit.tcl:129 #, tcl-format +msgid "warning: Tcl does not support encoding '%s'." +msgstr "čŚĺ: Tcl ăŻă¨ăłăłăźăăŁăłă° '%s' ăăľăăźăăăŚăăžăă" + +#: lib/commit.tcl:149 msgid "" -"You are in the middle of a change.\n" +"Last scanned state does not match repository state.\n" "\n" -"File %s is modified.\n" +"Another Git program has modified this repository since the last scan. A " +"rescan must be performed before another commit can be created.\n" "\n" -"You should complete the current commit before starting a merge. Doing so " -"will help you abort a failed merge, should the need arise.\n" +"The rescan will be automatically started now.\n" msgstr "" -"ĺ¤ć´ăŽéä¸ă§ăă\n" +"ćĺžăŤăšăăŁăłăăçść
ăŻăŞăă¸ăăŞăŽçść
ă¨ĺč´ăăžăăă\n" "\n" -"ăăĄă¤ăŤ %s ăŻĺ¤ć´ä¸ă§ăă\n" +"ćĺžăŤăšăăŁăłăăŚäťĽĺžăĺĽăŽ Git ăăă°ăŠă ăăŞăă¸ăăŞăĺ¤ć´ăăŚăăžăăć°ă" +"ăăłăăăăăĺăŤăĺăšăăŁăłăĺż
čŚă§ăă\n" "\n" -"çžĺ¨ăŽăłăăăăĺŽäşăăŚăăăăźă¸ăéĺ§ăăŚä¸ăăăăăăăćšăăăźă¸ăŤĺ¤ąć" -"ăăă¨ăăŽĺ垊ă漽ă§ăă\n" - -#: lib/merge.tcl:107 -#, tcl-format -msgid "%s of %s" -msgstr "%s ㎠%s ăăŠăłă" +"čŞĺçăŤĺăšăăŁăłăéĺ§ăăžăă\n" -#: lib/merge.tcl:120 +#: lib/commit.tcl:173 #, tcl-format -msgid "Merging %s and %s..." -msgstr "%s 㨠%s ăăăźă¸ä¸ăťăťăť" - -#: lib/merge.tcl:131 -msgid "Merge completed successfully." -msgstr "ăăźă¸ăĺŽäşăăžăă" - -#: lib/merge.tcl:133 -msgid "Merge failed. Conflict resolution is required." -msgstr "ăăźă¸ă夹ćăăžăăăčĄçŞăŽč§Łćąşăĺż
čŚă§ăă" +msgid "" +"Unmerged files cannot be committed.\n" +"\n" +"File %s has merge conflicts. You must resolve them and stage the file " +"before committing.\n" +msgstr "" +"ăăźă¸ăăŚăăŞăăăĄă¤ăŤăŻăłăăăă§ăăžăăă\n" +"\n" +"ăăĄă¤ăŤ %s ăŤăŻăăźă¸čĄçŞăćŽăŁăŚăăžăăăžăč§ŁćąşăăŚăłăăăäşĺŽăŤĺ ăăĺż
" +"čŚăăăăžăă\n" -#: lib/merge.tcl:158 +#: lib/commit.tcl:181 #, tcl-format -msgid "Merge Into %s" -msgstr "%s ăŤăăźă¸" - -#: lib/merge.tcl:177 -msgid "Revision To Merge" -msgstr "ăăźă¸ăăăŞăă¸ă§ăł" - -#: lib/merge.tcl:212 msgid "" -"Cannot abort while amending.\n" +"Unknown file state %s detected.\n" "\n" -"You must finish amending this commit.\n" +"File %s cannot be committed by this program.\n" msgstr "" -"č¨ćŁä¸ăŤăŻä¸ć˘ă§ăăžăăă\n" +"ä¸ćăŞăăĄă¤ăŤçść
%s ă§ăă\n" "\n" -"ăžăäťăŽăłăăăč¨ćŁăĺŽäşăăăŚä¸ăăă\n" +"ăăĄă¤ăŤ %s ăŻćŹăăă°ăŠă ă§ăŻăłăăăă§ăăžăăă\n" -#: lib/merge.tcl:222 +#: lib/commit.tcl:189 msgid "" -"Abort merge?\n" -"\n" -"Aborting the current merge will cause *ALL* uncommitted changes to be lost.\n" +"No changes to commit.\n" "\n" -"Continue with aborting the current merge?" +"You must stage at least 1 file before you can commit.\n" msgstr "" -"ăăźă¸ăä¸ćăăžăăďź\n" -"\n" -"çžĺ¨ăŽăăźă¸ăä¸ćăăă¨ăăłăăăăăŚăăŞăĺ
¨ăŚăŽĺ¤ć´ă夹ăăăžăă\n" +"ăłăăăăăĺ¤ć´ăăăăžăăă\n" "\n" -"ăăźă¸ăä¸ćăăŚăăăăă§ăăďź" +"ćä˝ä¸ă¤ăŽĺ¤ć´ăăłăăăäşĺŽăŤĺ ăăŚăăăłăăăăăŚä¸ăăă\n" -#: lib/merge.tcl:228 +#: lib/commit.tcl:204 msgid "" -"Reset changes?\n" +"Please supply a commit message.\n" "\n" -"Resetting the changes will cause *ALL* uncommitted changes to be lost.\n" +"A good commit message has the following format:\n" "\n" -"Continue with resetting the current changes?" +"- First line: Describe in one sentence what you did.\n" +"- Second line: Blank\n" +"- Remaining lines: Describe why this change is good.\n" msgstr "" -"ĺ¤ć´çšăăŞăťăăăăžăăďź\n" +"ăłăăăăťăĄăăťăźă¸ăĺ
ĽĺăăŚä¸ăăă\n" "\n" -"ĺ¤ć´çšăăŞăťăăăăă¨ăăłăăăăăŚăăŞăĺ
¨ăŚăŽĺ¤ć´ă夹ăăăžăă\n" +"ćŁăăăłăăăăťăĄăăťăźă¸ăŻ:\n" "\n" -"ăŞăťăăăăŚăăăăă§ăăďź" - -#: lib/merge.tcl:239 -msgid "Aborting" -msgstr "ä¸ćăăŚăăžă" - -#: lib/merge.tcl:239 -msgid "files reset" -msgstr "ăŞăťăăăăăăĄă¤ăŤ" - -#: lib/merge.tcl:267 -msgid "Abort failed." -msgstr "ä¸ćăŤĺ¤ąćăăžăăă" - -#: lib/merge.tcl:269 -msgid "Abort completed. Ready." -msgstr "ä¸ćĺŽäşă" - -#: lib/mergetool.tcl:8 -msgid "Force resolution to the base version?" -msgstr "ĺ
ąéăŽçă使ăăžăă?" +"- 珏ďźčĄ: ä˝ăăăăăăďźčĄă§čŚç´ă\n" +"- 珏ďźčĄ: 犺ç˝\n" +"- ćŽăăŽčĄ: ăŞăăăăŽĺ¤ć´ăčŻăĺ¤ć´ăăăŽčŞŹćă\n" -#: lib/mergetool.tcl:9 -msgid "Force resolution to this branch?" -msgstr "čŞĺăŽĺ´ăŽçă使ăăžăă?" +#: lib/commit.tcl:235 +msgid "Calling pre-commit hook..." +msgstr "ăłăăăĺăăăŻăĺŽčĄä¸ăťăťăť" -#: lib/mergetool.tcl:10 -msgid "Force resolution to the other branch?" -msgstr "ç¸ćĺśăŽçă使ăăžăă?" +#: lib/commit.tcl:250 +msgid "Commit declined by pre-commit hook." +msgstr "ăłăăăĺăăăŻăăłăăăăćĺŚăăžăă" -#: lib/mergetool.tcl:14 -#, tcl-format +#: lib/commit.tcl:269 msgid "" -"Note that the diff shows only conflicting changes.\n" -"\n" -"%s will be overwritten.\n" -"\n" -"This operation can be undone only by restarting the merge." +"You are about to commit on a detached head. This is a potentially dangerous " +"thing to do because if you switch to another branch you will lose your " +"changes and it can be difficult to retrieve them later from the reflog. You " +"should probably cancel this commit and create a new branch to continue.\n" +" \n" +" Do you really want to proceed with your Commit?" msgstr "" -"獜ĺăăĺ¤ć´çšă ăă襨示ăăăŚăăăă¨ăŤćł¨ćăăŚăă ăăă\n" +"ĺé˘ HEAD ă§ăŽĺ¤ć´ăăłăăăăăăă¨ăăŚăăžăă" +"ăăăŻć˝ĺ¨çăŤĺąéşăŞčĄçşă§ăççąăŻĺĽăŽăăŠăłăă¸ăŽĺăćżăă§" +"ĺ¤ć´ăćśĺ¤ąăăreflog ăăăŽäşĺžĺžŠć§ăĺ°éŁă¨ăŞăăăă§ăă" +"ăăăăăăŽăłăăăăŻăăŁăłăťăŤăć°ăăä˝ćăăăăŠăłăă§" +"čĄăăšăă§ăă\n" "\n" -"%s ăŻä¸ć¸ăăăăžăă\n" -"\n" -"ăăç´ăăŤăŻăăźă¸ĺ
¨ä˝ăăăç´ăăŚăă ăăă" +" ćŹĺ˝ăŤăłăăăăçśčĄăăžăăďź" -#: lib/mergetool.tcl:45 -#, tcl-format -msgid "File %s seems to have unresolved conflicts, still stage?" -msgstr "" -"ăăĄă¤ăŤ %s ăŤăŻč§ŁćąşăăŚăăŞă獜ĺé¨ĺăăžă ăăăăă§ăăăăăă§ăă?" - -#: lib/mergetool.tcl:60 -#, tcl-format -msgid "Adding resolution for %s" -msgstr "%s ă¸ăŽč§Łćąşăăšăăźă¸ăăžă" - -#: lib/mergetool.tcl:141 -msgid "Cannot resolve deletion or link conflicts using a tool" -msgstr "ăăźăŤă§ăŻĺé¤ăăŞăłăŻçŤśĺăŻćąăăžăă" +#: lib/commit.tcl:290 +msgid "Calling commit-msg hook..." +msgstr "ăłăăăăťăĄăăťăźă¸ăťăăăŻăĺŽčĄä¸ăťăťăť" -#: lib/mergetool.tcl:146 -msgid "Conflict file does not exist" -msgstr "獜ĺăăĄă¤ăŤăŻĺĺ¨ăăžăăă" +#: lib/commit.tcl:305 +msgid "Commit declined by commit-msg hook." +msgstr "ăłăăăăťăĄăăťăźă¸ăťăăăŻăăłăăăăćĺŚăăžăă" -#: lib/mergetool.tcl:264 -#, tcl-format -msgid "Not a GUI merge tool: '%s'" -msgstr "GUI ăăźă¸ăăźăŤă§ăŻăăăžăă: %s" +#: lib/commit.tcl:318 +msgid "Committing changes..." +msgstr "ĺ¤ć´çšăăłăăăä¸ăťăťăť" -#: lib/mergetool.tcl:268 -#, tcl-format -msgid "Unsupported merge tool '%s'" -msgstr "ăăźă¸ăăźăŤ '%s' ăŻăľăăźăăăŚăăžăă" +#: lib/commit.tcl:334 +msgid "write-tree failed:" +msgstr "write-tree ă夹ćăăžăă:" -#: lib/mergetool.tcl:303 -msgid "Merge tool is already running, terminate it?" -msgstr "ăăźă¸ăăźăŤăŻăă§ăŤčľˇĺăăŚăăžăăçľäşăăžăă?" +#: lib/commit.tcl:335 lib/commit.tcl:379 lib/commit.tcl:400 +msgid "Commit failed." +msgstr "ăłăăăăŤĺ¤ąćăăžăăă" -#: lib/mergetool.tcl:323 +#: lib/commit.tcl:352 #, tcl-format -msgid "" -"Error retrieving versions:\n" -"%s" -msgstr "" -"çăŽĺăĺşăćăŤă¨ăŠăźăĺşăžăă:\n" -"%s" +msgid "Commit %s appears to be corrupt" +msgstr "ăłăăă %s ăŻĺŁăăŚăăžă" -#: lib/mergetool.tcl:343 -#, tcl-format +#: lib/commit.tcl:357 msgid "" -"Could not start the merge tool:\n" +"No changes to commit.\n" "\n" -"%s" +"No files were modified by this commit and it was not a merge commit.\n" +"\n" +"A rescan will be automatically started now.\n" msgstr "" -"ăăźă¸ăăźăŤă辡ĺă§ăăžăă:\n" +"ăłăăăăăĺ¤ć´ăăăăžăăă\n" "\n" -"%s" - -#: lib/mergetool.tcl:347 -msgid "Running merge tool..." -msgstr "ăăźă¸ăăźăŤăĺŽčĄăăŚăăžă..." - -#: lib/mergetool.tcl:375 lib/mergetool.tcl:383 -msgid "Merge tool failed." -msgstr "ăăźă¸ăăźăŤă夹ćăăžăăă" - -#: lib/option.tcl:11 -#, tcl-format -msgid "Invalid global encoding '%s'" -msgstr "ĺ
¨ä˝ă¨ăłăłăźăăŁăłă°ăŤ çĄĺšăŞ %s ăćĺŽăăăŚăăžă" +"ăăźă¸ă§ăŞăăăžăăä¸ă¤ăĺ¤ć´çšăăăăžăăă\n" +"\n" +"čŞĺçăŤĺăšăăŁăłăéĺ§ăăžăă\n" -#: lib/option.tcl:19 -#, tcl-format -msgid "Invalid repo encoding '%s'" -msgstr "ăŞăă¸ăăŞă¨ăłăłăźăăŁăłă°ăŤ çĄĺšăŞ %s ăćĺŽăăăŚăăžă" +#: lib/commit.tcl:364 +msgid "No changes to commit." +msgstr "ăłăăăăăĺ¤ć´ăăăăžăăă" -#: lib/option.tcl:117 -msgid "Restore Defaults" -msgstr "ć˘ĺŽĺ¤ăŤćťă" +#: lib/commit.tcl:378 +msgid "commit-tree failed:" +msgstr "commit-tree ă夹ćăăžăă:" -#: lib/option.tcl:121 -msgid "Save" -msgstr "äżĺ" +#: lib/commit.tcl:399 +msgid "update-ref failed:" +msgstr "update-ref ă夹ćăăžăă:" -#: lib/option.tcl:131 +#: lib/commit.tcl:492 #, tcl-format -msgid "%s Repository" -msgstr "%s ăŞăă¸ăăŞ" - -#: lib/option.tcl:132 -msgid "Global (All Repositories)" -msgstr "大ĺďźĺ
¨ăŚăŽăŞăă¸ăăŞďź" - -#: lib/option.tcl:138 -msgid "User Name" -msgstr "ăŚăźăśĺ" - -#: lib/option.tcl:139 -msgid "Email Address" -msgstr "éťĺăĄăźăŤă˘ăăŹăš" - -#: lib/option.tcl:141 -msgid "Summarize Merge Commits" -msgstr "ăăźă¸ăłăăăăŽčŚç´" - -#: lib/option.tcl:142 -msgid "Merge Verbosity" -msgstr "ăăźă¸ăŽĺéˇĺşŚ" - -#: lib/option.tcl:143 -msgid "Show Diffstat After Merge" -msgstr "ăăźă¸ĺžăŤ diffstat ă襨示" - -#: lib/option.tcl:144 -msgid "Use Merge Tool" -msgstr "ăăźă¸ăăźăŤă使ç¨" - -#: lib/option.tcl:146 -msgid "Trust File Modification Timestamps" -msgstr "ăăĄă¤ăŤĺ¤ć´ćĺťăäżĄé źăă" - -#: lib/option.tcl:147 -msgid "Prune Tracking Branches During Fetch" -msgstr "ăă§ăăä¸ăŤăăŠăăăłă°ăăŠăłăăĺă" - -#: lib/option.tcl:148 -msgid "Match Tracking Branches" -msgstr "ăăŠăăăłă°ăăŠăłăăĺăăă" - -#: lib/option.tcl:149 -msgid "Blame Copy Only On Changed Files" -msgstr "ĺ¤ć´ăăăăăĄă¤ăŤăŽăżăłăăźć¤çĽăčĄăŞă" - -#: lib/option.tcl:150 -msgid "Minimum Letters To Blame Copy On" -msgstr "ăłăăźăć¤çĽăăćĺ°ćĺć°" - -#: lib/option.tcl:151 -msgid "Blame History Context Radius (days)" -msgstr "訝éăă幼ć´ĺĺžďźćĽć°ďź" - -#: lib/option.tcl:152 -msgid "Number of Diff Context Lines" -msgstr "diff ăŽćččĄć°" - -#: lib/option.tcl:153 -msgid "Commit Message Text Width" -msgstr "ăłăăăăĄăăťăźă¸ăŽăăăšăĺš
" - -#: lib/option.tcl:154 -msgid "New Branch Name Template" -msgstr "ć°ăăăăŠăłăĺăŽăăłăăŹăźă" - -#: lib/option.tcl:155 -msgid "Default File Contents Encoding" -msgstr "ăăĄă¤ăŤĺ
厚ăŽăăăŠăźăŤăă¨ăłăłăźăăŁăłă°" - -#: lib/option.tcl:203 -msgid "Change" -msgstr "ĺ¤ć´" +msgid "Created commit %s: %s" +msgstr "ăłăăă %s ăä˝ćăăžăă: %s" -#: lib/option.tcl:230 -msgid "Spelling Dictionary:" -msgstr "ăšăăŤăă§ăăŻčžć¸" +#: lib/browser.tcl:17 +msgid "Starting..." +msgstr "辡ĺä¸âŚ" -#: lib/option.tcl:254 -msgid "Change Font" -msgstr "ăăŠăłăăĺ¤ć´" +#: lib/browser.tcl:27 +msgid "File Browser" +msgstr "ăăĄă¤ăŤăťăăŠăŚăś" -#: lib/option.tcl:258 +#: lib/browser.tcl:132 lib/browser.tcl:149 #, tcl-format -msgid "Choose %s" -msgstr "%s ăé¸ć" - -#: lib/option.tcl:264 -msgid "pt." -msgstr "ăă¤ăłă" - -#: lib/option.tcl:278 -msgid "Preferences" -msgstr "č¨ĺŽ" - -#: lib/option.tcl:314 -msgid "Failed to completely save options:" -msgstr "ĺŽĺ
¨ăŤăŞăăˇă§ăłăäżĺă§ăăžăă:" - -#: lib/remote.tcl:163 -msgid "Remove Remote" -msgstr "ăŞă˘ăźăăĺé¤" - -#: lib/remote.tcl:168 -msgid "Prune from" -msgstr "ăăĺčžźăâŚ" +msgid "Loading %s..." +msgstr "%s ăăăźăä¸âŚ" -#: lib/remote.tcl:173 -msgid "Fetch from" -msgstr "ĺĺžĺ
" +#: lib/browser.tcl:193 +msgid "[Up To Parent]" +msgstr "[ä¸ä˝ăăŠăŤăă¸]" -#: lib/remote.tcl:215 -msgid "Push to" -msgstr "ăăăˇăĽĺ
" +#: lib/browser.tcl:275 lib/browser.tcl:282 +msgid "Browse Branch Files" +msgstr "çžĺ¨ăŽăăŠăłăăŽăăĄă¤ăŤăčŚă" -#: lib/remote_add.tcl:19 +#: lib/remote_add.tcl:20 msgid "Add Remote" msgstr "ăŞă˘ăźăăčż˝ĺ " -#: lib/remote_add.tcl:24 +#: lib/remote_add.tcl:25 msgid "Add New Remote" msgstr "ăŞă˘ăźăăć°čŚăŤčż˝ĺ " -#: lib/remote_add.tcl:28 lib/tools_dlg.tcl:36 -msgid "Add" -msgstr "čż˝ĺ " - -#: lib/remote_add.tcl:37 +#: lib/remote_add.tcl:39 msgid "Remote Details" msgstr "ăŞă˘ăźăăŽčŠłç´°" @@ -2134,155 +2547,104 @@ msgstr "ăŞă˘ăźăăŽčŠłç´°" msgid "Location:" msgstr "ĺ ´ć:" -#: lib/remote_add.tcl:62 +#: lib/remote_add.tcl:60 msgid "Further Action" msgstr "ăăŽäťăŽĺä˝" -#: lib/remote_add.tcl:65 +#: lib/remote_add.tcl:63 msgid "Fetch Immediately" msgstr "ĺłĺş§ăŤĺĺž" -#: lib/remote_add.tcl:71 +#: lib/remote_add.tcl:69 msgid "Initialize Remote Repository and Push" msgstr "ăŞă˘ăźăăŹăă¸ăăŞăĺćĺăăŚăăăˇăĽ" -#: lib/remote_add.tcl:77 +#: lib/remote_add.tcl:75 msgid "Do Nothing Else Now" msgstr "ä˝ăăăŞă" -#: lib/remote_add.tcl:101 +#: lib/remote_add.tcl:100 msgid "Please supply a remote name." msgstr "ăŞă˘ăźăĺăćĺŽăăŚä¸ăăă" -#: lib/remote_add.tcl:114 +#: lib/remote_add.tcl:113 #, tcl-format msgid "'%s' is not an acceptable remote name." msgstr "'%s' ăŻăŞă˘ăźăĺăŤä˝żăăžăăă" -#: lib/remote_add.tcl:125 +#: lib/remote_add.tcl:124 #, tcl-format msgid "Failed to add remote '%s' of location '%s'." msgstr "ĺ ´ć '%2$s' ăŽăŞă˘ăźă '%1$s'ăŽĺĺĺ¤ć´ăŤĺ¤ąćăăžăăă" -#: lib/remote_add.tcl:133 lib/transport.tcl:6 -#, tcl-format -msgid "fetch %s" -msgstr "%s ăĺĺž" - -#: lib/remote_add.tcl:134 +#: lib/remote_add.tcl:133 #, tcl-format msgid "Fetching the %s" msgstr "%s ăăăă§ăăăăŚăăžă" -#: lib/remote_add.tcl:157 +#: lib/remote_add.tcl:156 #, tcl-format msgid "Do not know how to initialize repository at location '%s'." msgstr "ăŞăă¸ă㪠'%s' ăĺćĺă§ăăžăăă" -#: lib/remote_add.tcl:163 lib/transport.tcl:25 lib/transport.tcl:63 -#: lib/transport.tcl:81 -#, tcl-format -msgid "push %s" -msgstr "%s ăăăăˇăĽ" - -#: lib/remote_add.tcl:164 +#: lib/remote_add.tcl:163 #, tcl-format msgid "Setting up the %s (at %s)" msgstr "%2$s ăŤăă %1$s ăăťăăă˘ăăăăžă" -#: lib/remote_branch_delete.tcl:29 lib/remote_branch_delete.tcl:34 -msgid "Delete Branch Remotely" -msgstr "é éă§ăăŠăłăĺé¤" - -#: lib/remote_branch_delete.tcl:47 -msgid "From Repository" -msgstr "ĺ
ăŽăŞăă¸ăăŞ" +#: lib/line.tcl:17 +msgid "Goto Line:" +msgstr "čĄçŞĺˇ" -#: lib/remote_branch_delete.tcl:50 lib/transport.tcl:134 -msgid "Remote:" -msgstr "ăŞă˘ăźă:" +#: lib/line.tcl:23 +msgid "Go" +msgstr "ç§ťĺ" -#: lib/remote_branch_delete.tcl:66 lib/transport.tcl:149 -msgid "Arbitrary Location:" -msgstr "äťťćăŽä˝ç˝Ž:" +#: lib/branch_create.tcl:23 +msgid "Create Branch" +msgstr "ăăŠăłăăä˝ć" -#: lib/remote_branch_delete.tcl:84 -msgid "Branches" -msgstr "ăăŠăłă" +#: lib/branch_create.tcl:28 +msgid "Create New Branch" +msgstr "ăăŠăłăăć°čŚä˝ć" -#: lib/remote_branch_delete.tcl:109 -msgid "Delete Only If" -msgstr "ćĄäťśäťă§ĺé¤" +#: lib/branch_create.tcl:42 +msgid "Branch Name" +msgstr "ăăŠăłăĺ" -#: lib/remote_branch_delete.tcl:111 -msgid "Merged Into:" -msgstr "ăăźă¸ĺ
:" +#: lib/branch_create.tcl:57 +msgid "Match Tracking Branch Name" +msgstr "ăăŠăăăłă°ăťăăŠăłăĺăĺăăă" -#: lib/remote_branch_delete.tcl:152 -msgid "A branch is required for 'Merged Into'." -msgstr "'ăăźă¸ĺ
' ăŤăŻăăŠăłăăĺż
čŚă§ăă" +#: lib/branch_create.tcl:66 +msgid "Starting Revision" +msgstr "ĺćăŞăă¸ă§ăł" -#: lib/remote_branch_delete.tcl:184 -#, tcl-format -msgid "" -"The following branches are not completely merged into %s:\n" -"\n" -" - %s" -msgstr "" -"䝼ä¸ăŽăăŠăłă㯠%s ăŤĺŽĺ
¨ăŤăăźă¸ăăăŚăăžăă:\n" -"\n" -" - %s" +#: lib/branch_create.tcl:72 +msgid "Update Existing Branch:" +msgstr "ć˘ĺăŽăăŠăłăăć´ć°:" -#: lib/remote_branch_delete.tcl:189 -#, tcl-format -msgid "" -"One or more of the merge tests failed because you have not fetched the " -"necessary commits. Try fetching from %s first." -msgstr "" -"ĺż
čŚăŞăłăăăăä¸čśłăăŚăăăăăŤăăăźă¸ć¤ćťă夹ćăăžăăăăžă %s ăă" -"ăă§ăăăăŚä¸ăăă" +#: lib/branch_create.tcl:75 +msgid "No" +msgstr "ăăă" -#: lib/remote_branch_delete.tcl:207 -msgid "Please select one or more branches to delete." -msgstr "ĺé¤ăăăăŠăłăăé¸ćăăŚä¸ăăă" +#: lib/branch_create.tcl:80 +msgid "Fast Forward Only" +msgstr "ćŠéăăŽăż" -#: lib/remote_branch_delete.tcl:226 -#, tcl-format -msgid "Deleting branches from %s" -msgstr "%s ăăăăŠăłăăĺé¤ăăŚăăžăă" +#: lib/branch_create.tcl:97 +msgid "Checkout After Creation" +msgstr "ä˝ćăăŚăăăă§ăăŻă˘ăŚă" -#: lib/remote_branch_delete.tcl:292 -msgid "No repository selected." -msgstr "ăŞăă¸ăăŞăé¸ćăăăŚăăžăăă" +#: lib/branch_create.tcl:132 +msgid "Please select a tracking branch." +msgstr "ăăŠăăăłă°ăťăăŠăłăăé¸ćăăŚä¸ăăă" -#: lib/remote_branch_delete.tcl:297 +#: lib/branch_create.tcl:141 #, tcl-format -msgid "Scanning %s..." -msgstr "%s ăăšăăŁăłăăŚăăžăâŚ" - -#: lib/search.tcl:21 -msgid "Find:" -msgstr "ć¤ç´˘:" - -#: lib/search.tcl:23 -msgid "Next" -msgstr "揥" - -#: lib/search.tcl:24 -msgid "Prev" -msgstr "ĺ" - -#: lib/search.tcl:25 -msgid "Case-Sensitive" -msgstr "大ćĺĺ°ćĺăĺşĺĽ" - -#: lib/shortcut.tcl:21 lib/shortcut.tcl:62 -msgid "Cannot write shortcut:" -msgstr "ăˇă§ăźăăŤăăăć¸ăăžăă:" - -#: lib/shortcut.tcl:137 -msgid "Cannot write icon:" -msgstr "ă˘ă¤ăłăłăć¸ăăžăă:" +msgid "Tracking branch %s is not a branch in the remote repository." +msgstr "" +"ăăŠăăăłă°ăťăăŠăłă %s ăŻăŞă˘ăźăăŞăă¸ăăŞăŽăăŠăłăă§ăŻăăăžăăă" #: lib/spellcheck.tcl:57 msgid "Unsupported spell checker" @@ -2320,236 +2682,3 @@ msgstr "ăšăăŤăă§ăăŤăźăäşćłĺ¤ăŽ EOF ăčżăăžăă" #: lib/spellcheck.tcl:392 msgid "Spell Checker Failed" msgstr "ăšăăŤăă§ăăŻĺ¤ąć" - -#: lib/sshkey.tcl:31 -msgid "No keys found." -msgstr "ăăźăăăăžăăă" - -#: lib/sshkey.tcl:34 -#, tcl-format -msgid "Found a public key in: %s" -msgstr "ĺ
Źééľăăăăžăă: %s" - -#: lib/sshkey.tcl:40 -msgid "Generate Key" -msgstr "éľăçć" - -#: lib/sshkey.tcl:56 -msgid "Copy To Clipboard" -msgstr "ăŻăŞăăăăźăăŤăłăăź" - -#: lib/sshkey.tcl:70 -msgid "Your OpenSSH Public Key" -msgstr "ăăŞă㎠OpenSSH ĺ
Źééľ" - -#: lib/sshkey.tcl:78 -msgid "Generating..." -msgstr "çćä¸..." - -#: lib/sshkey.tcl:84 -#, tcl-format -msgid "" -"Could not start ssh-keygen:\n" -"\n" -"%s" -msgstr "" -"ssh-keygen ă辡ĺă§ăăžăă:\n" -"\n" -"%s" - -#: lib/sshkey.tcl:111 -msgid "Generation failed." -msgstr "çćăŤĺ¤ąćăăžăăă" - -#: lib/sshkey.tcl:118 -msgid "Generation succeeded, but no keys found." -msgstr "çćăŤăŻćĺăăžăăăăéľăčŚă¤ăăăžăăă" - -#: lib/sshkey.tcl:121 -#, tcl-format -msgid "Your key is in: %s" -msgstr "ăăŞăăŽéľăŻ %s ăŤăăăžă" - -#: lib/status_bar.tcl:83 -#, tcl-format -msgid "%s ... %*i of %*i %s (%3i%%)" -msgstr "%1$s ... %4$*i %6$s ä¸ăŽ %2$*i (%7$3i%%)" - -#: lib/tools.tcl:75 -#, tcl-format -msgid "Running %s requires a selected file." -msgstr "ăăĄă¤ăŤăé¸ćăăŚăă %s ă辡ĺăăŚăă ăăă" - -#: lib/tools.tcl:90 -#, tcl-format -msgid "Are you sure you want to run %s?" -msgstr "ćŹĺ˝ăŤ %s ă辡ĺăăžăă?" - -#: lib/tools.tcl:110 -#, tcl-format -msgid "Tool: %s" -msgstr "ăăźăŤ: %s" - -#: lib/tools.tcl:111 -#, tcl-format -msgid "Running: %s" -msgstr "ĺŽčĄä¸: %s" - -#: lib/tools.tcl:149 -#, tcl-format -msgid "Tool completed successfully: %s" -msgstr "ăăźăŤăĺŽäşăăžăă: %s" - -#: lib/tools.tcl:151 -#, tcl-format -msgid "Tool failed: %s" -msgstr "ăăźăŤă夹ćăăžăă: %s" - -#: lib/tools_dlg.tcl:22 -msgid "Add Tool" -msgstr "ăăźăŤăŽčż˝ĺ " - -#: lib/tools_dlg.tcl:28 -msgid "Add New Tool Command" -msgstr "ć°čŚăăźăŤăłăăłăăŽčż˝ĺ " - -#: lib/tools_dlg.tcl:33 -msgid "Add globally" -msgstr "ĺ
¨ä˝ăŤčż˝ĺ " - -#: lib/tools_dlg.tcl:45 -msgid "Tool Details" -msgstr "ăăźăŤăŽčŠłç´°" - -#: lib/tools_dlg.tcl:48 -msgid "Use '/' separators to create a submenu tree:" -msgstr "'/' ă§ăľăăĄăăĽăźăĺşĺăăžă:" - -#: lib/tools_dlg.tcl:61 -msgid "Command:" -msgstr "ăłăăłă:" - -#: lib/tools_dlg.tcl:74 -msgid "Show a dialog before running" -msgstr "辡ĺăăĺăŤăă¤ă˘ăă°ă襨示" - -#: lib/tools_dlg.tcl:80 -msgid "Ask the user to select a revision (sets $REVISION)" -msgstr "ăŚăźăśăŤăłăăăăä¸ă¤é¸ă°ăă ($REVISION ăŤăťăăăăžă)" - -#: lib/tools_dlg.tcl:85 -msgid "Ask the user for additional arguments (sets $ARGS)" -msgstr "ăŚăźăśăŤäťăŽĺźć°ăčż˝ĺ ăăă ($ARGS ăŤăťăăăăžă)" - -#: lib/tools_dlg.tcl:92 -msgid "Don't show the command output window" -msgstr "ăłăăłăăăăŽĺşĺăŚăŁăłăăŚăčŚăăŞă" - -#: lib/tools_dlg.tcl:97 -msgid "Run only if a diff is selected ($FILENAME not empty)" -msgstr "ăăăăé¸ă°ăăŚăăă¨ăă ăĺăă($FILENAME ă犺ă§ăŞă)" - -#: lib/tools_dlg.tcl:121 -msgid "Please supply a name for the tool." -msgstr "ăăźăŤĺăćĺŽăăŚä¸ăăă" - -#: lib/tools_dlg.tcl:129 -#, tcl-format -msgid "Tool '%s' already exists." -msgstr "ăăźăŤ '%s' ăŻć˘ăŤĺĺ¨ăăžăă" - -#: lib/tools_dlg.tcl:151 -#, tcl-format -msgid "" -"Could not add tool:\n" -"%s" -msgstr "" -"ăăźăŤăčż˝ĺ ă§ăăžăă:\n" -"%s" - -#: lib/tools_dlg.tcl:190 -msgid "Remove Tool" -msgstr "ăăźăŤăŽĺé¤" - -#: lib/tools_dlg.tcl:196 -msgid "Remove Tool Commands" -msgstr "ăăźăŤăłăăłăăŽĺé¤" - -#: lib/tools_dlg.tcl:200 -msgid "Remove" -msgstr "ĺé¤" - -#: lib/tools_dlg.tcl:236 -msgid "(Blue denotes repository-local tools)" -msgstr "(éč˛ăŻăăźăŤăŤăŹăă¸ăăŞăŽăăźăŤă§ă)" - -#: lib/tools_dlg.tcl:297 -#, tcl-format -msgid "Run Command: %s" -msgstr "ăłăăłăă辡ĺ: %s" - -#: lib/tools_dlg.tcl:311 -msgid "Arguments" -msgstr "ĺźć°" - -#: lib/tools_dlg.tcl:348 -msgid "OK" -msgstr "OK" - -#: lib/transport.tcl:7 -#, tcl-format -msgid "Fetching new changes from %s" -msgstr "%s ăăć°ăăĺ¤ć´ăăă§ăăăăŚăăžă" - -#: lib/transport.tcl:18 -#, tcl-format -msgid "remote prune %s" -msgstr "é éĺčžź %s" - -#: lib/transport.tcl:19 -#, tcl-format -msgid "Pruning tracking branches deleted from %s" -msgstr "%s ăăĺé¤ăăăăăŠăăăłă°ăťăăŠăłăăĺăŁăŚăăžă" - -#: lib/transport.tcl:26 -#, tcl-format -msgid "Pushing changes to %s" -msgstr "%s ă¸ĺ¤ć´ăăăăˇăĽăăŚăăžă" - -#: lib/transport.tcl:64 -#, tcl-format -msgid "Mirroring to %s" -msgstr "%s ă¸ăăŠăźăăŚăăžă" - -#: lib/transport.tcl:82 -#, tcl-format -msgid "Pushing %s %s to %s" -msgstr "%3$s 㸠%1$s %2$s ăăăăˇăĽăăŚăăžă" - -#: lib/transport.tcl:100 -msgid "Push Branches" -msgstr "ăăŠăłăăăăăˇăĽ" - -#: lib/transport.tcl:114 -msgid "Source Branches" -msgstr "ĺ
ăŽăăŠăłă" - -#: lib/transport.tcl:131 -msgid "Destination Repository" -msgstr "éăĺ
ăŞăă¸ăăŞ" - -#: lib/transport.tcl:169 -msgid "Transfer Options" -msgstr "é俥ăŞăăˇă§ăł" - -#: lib/transport.tcl:171 -msgid "Force overwrite existing branch (may discard changes)" -msgstr "ć˘ĺăăŠăłăăä¸ć¸ă(ĺ¤ć´ăç ´ćŁăăĺŻč˝ć§ăăăăžă)" - -#: lib/transport.tcl:175 -msgid "Use thin pack (for slow network connections)" -msgstr "Thin Pack ă使ăďźé
ăăăăăŻăźăŻćĽçśďź" - -#: lib/transport.tcl:179 -msgid "Include tags" -msgstr "ăżă°ăĺŤăă" diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh index 6fd6d4e5f6..ca994c5c54 100644 --- a/git-rebase--interactive.sh +++ b/git-rebase--interactive.sh @@ -1041,7 +1041,7 @@ The possible behaviours are: ignore, warn, error.")" # placed before the commit of the next action checkout_onto - warn "$(gettext "You can fix this with 'git rebase --edit-todo'.")" + warn "$(gettext "You can fix this with 'git rebase --edit-todo' and then run 'git rebase --continue'.")" die "$(gettext "Or you can abort the rebase with 'git rebase --abort'.")" fi } @@ -1141,9 +1141,6 @@ To continue rebase after editing, run: ;; esac -git var GIT_COMMITTER_IDENT >/dev/null || - die "$(gettext "You need to set your committer info first")" - comment_for_reflog start if test ! -z "$switch_to" @@ -898,17 +898,6 @@ static int fixmatch(struct grep_pat *p, char *line, char *eol, } } -static int regmatch(const regex_t *preg, char *line, char *eol, - regmatch_t *match, int eflags) -{ -#ifdef REG_STARTEND - match->rm_so = 0; - match->rm_eo = eol - line; - eflags |= REG_STARTEND; -#endif - return regexec(preg, line, 1, match, eflags); -} - static int patmatch(struct grep_pat *p, char *line, char *eol, regmatch_t *match, int eflags) { @@ -919,7 +908,8 @@ static int patmatch(struct grep_pat *p, char *line, char *eol, else if (p->pcre_regexp) hit = !pcrematch(p, line, eol, match, eflags); else - hit = !regmatch(&p->regexp, line, eol, match, eflags); + hit = !regexec_buf(&p->regexp, line, eol - line, 1, match, + eflags); return hit; } @@ -201,6 +201,13 @@ static void finish_active_slot(struct active_request_slot *slot) slot->callback_func(slot->callback_data); } +static void xmulti_remove_handle(struct active_request_slot *slot) +{ +#ifdef USE_CURL_MULTI + curl_multi_remove_handle(curlm, slot->curl); +#endif +} + #ifdef USE_CURL_MULTI static void process_curl_messages(void) { @@ -216,7 +223,7 @@ static void process_curl_messages(void) slot->curl != curl_message->easy_handle) slot = slot->next; if (slot != NULL) { - curl_multi_remove_handle(curlm, slot->curl); + xmulti_remove_handle(slot); slot->curl_result = curl_result; finish_active_slot(slot); } else { @@ -723,7 +730,7 @@ static CURL *get_curl_handle(void) * precedence here, as in CURL. */ if (!curl_http_proxy) { - if (!strcmp(http_auth.protocol, "https")) { + if (http_auth.protocol && !strcmp(http_auth.protocol, "https")) { var_override(&curl_http_proxy, getenv("HTTPS_PROXY")); var_override(&curl_http_proxy, getenv("https_proxy")); } else { @@ -881,9 +888,7 @@ void http_cleanup(void) while (slot != NULL) { struct active_request_slot *next = slot->next; if (slot->curl != NULL) { -#ifdef USE_CURL_MULTI - curl_multi_remove_handle(curlm, slot->curl); -#endif + xmulti_remove_handle(slot); curl_easy_cleanup(slot->curl); } free(slot); @@ -1022,6 +1027,8 @@ int start_active_slot(struct active_request_slot *slot) if (curlm_result != CURLM_OK && curlm_result != CURLM_CALL_MULTI_PERFORM) { + warning("curl_multi_add_handle failed: %s", + curl_multi_strerror(curlm_result)); active_requests--; slot->in_use = 0; return 0; @@ -1161,13 +1168,13 @@ void run_active_slot(struct active_request_slot *slot) static void release_active_slot(struct active_request_slot *slot) { closedown_active_slot(slot); - if (slot->curl && curl_session_count > min_curl_sessions) { -#ifdef USE_CURL_MULTI - curl_multi_remove_handle(curlm, slot->curl); -#endif - curl_easy_cleanup(slot->curl); - slot->curl = NULL; - curl_session_count--; + if (slot->curl) { + xmulti_remove_handle(slot); + if (curl_session_count > min_curl_sessions) { + curl_easy_cleanup(slot->curl); + slot->curl = NULL; + curl_session_count--; + } } #ifdef USE_CURL_MULTI fill_active_slots(); @@ -101,7 +101,7 @@ static int canonical_name(const char *host, struct strbuf *out) memset (&hints, '\0', sizeof (hints)); hints.ai_flags = AI_CANONNAME; if (!getaddrinfo(host, NULL, &hints, &ai)) { - if (ai && strchr(ai->ai_canonname, '.')) { + if (ai && ai->ai_canonname && strchr(ai->ai_canonname, '.')) { strbuf_addstr(out, ai->ai_canonname); status = 0; } diff --git a/patch-ids.c b/patch-ids.c index 082412aca6..ce285c2e0c 100644 --- a/patch-ids.c +++ b/patch-ids.c @@ -4,9 +4,18 @@ #include "sha1-lookup.h" #include "patch-ids.h" +static int patch_id_defined(struct commit *commit) +{ + /* must be 0 or 1 parents */ + return !commit->parents || !commit->parents->next; +} + int commit_patch_id(struct commit *commit, struct diff_options *options, unsigned char *sha1, int diff_header_only) { + if (!patch_id_defined(commit)) + return -1; + if (commit->parents) diff_tree_sha1(commit->parents->item->object.oid.hash, commit->object.oid.hash, "", options); @@ -45,6 +54,7 @@ int init_patch_ids(struct patch_ids *ids) { memset(ids, 0, sizeof(*ids)); diff_setup(&ids->diffopts); + ids->diffopts.detect_rename = 0; DIFF_OPT_SET(&ids->diffopts, RECURSIVE); diff_setup_done(&ids->diffopts); hashmap_init(&ids->patches, (hashmap_cmp_fn)patch_id_cmp, 256); @@ -76,6 +86,9 @@ struct patch_id *has_commit_patch_id(struct commit *commit, { struct patch_id patch; + if (!patch_id_defined(commit)) + return NULL; + memset(&patch, 0, sizeof(patch)); if (init_patch_id_entry(&patch, commit, ids)) return NULL; @@ -88,6 +101,9 @@ struct patch_id *add_commit_patch_id(struct commit *commit, { struct patch_id *key = xcalloc(1, sizeof(*key)); + if (!patch_id_defined(commit)) + return NULL; + if (init_patch_id_entry(key, commit, ids)) { free(key); return NULL; diff --git a/pathspec.h b/pathspec.h index 4a80f6fc96..59809e4793 100644 --- a/pathspec.h +++ b/pathspec.h @@ -96,7 +96,5 @@ static inline int ps_strcmp(const struct pathspec_item *item, extern char *find_pathspecs_matching_against_index(const struct pathspec *pathspec); extern void add_pathspec_matches_against_index(const struct pathspec *pathspec, char *seen); -extern const char *check_path_for_gitlink(const char *path); -extern void die_if_path_beyond_symlink(const char *path, const char *prefix); #endif /* PATHSPEC_H */ diff --git a/read-cache.c b/read-cache.c index 491e52d120..248432af43 100644 --- a/read-cache.c +++ b/read-cache.c @@ -627,7 +627,7 @@ void set_object_name_for_intent_to_add_entry(struct cache_entry *ce) hashcpy(ce->sha1, sha1); } -int add_to_index(struct index_state *istate, const char *path, struct stat *st, int flags, int force_mode) +int add_to_index(struct index_state *istate, const char *path, struct stat *st, int flags) { int size, namelen, was_same; mode_t st_mode = st->st_mode; @@ -656,11 +656,10 @@ int add_to_index(struct index_state *istate, const char *path, struct stat *st, else ce->ce_flags |= CE_INTENT_TO_ADD; - if (S_ISREG(st_mode) && force_mode) - ce->ce_mode = create_ce_mode(force_mode); - else if (trust_executable_bit && has_symlinks) + + if (trust_executable_bit && has_symlinks) { ce->ce_mode = create_ce_mode(st_mode); - else { + } else { /* If there is an existing entry, pick the mode bits and type * from it, otherwise assume unexecutable regular file. */ @@ -719,13 +718,12 @@ int add_to_index(struct index_state *istate, const char *path, struct stat *st, return 0; } -int add_file_to_index(struct index_state *istate, const char *path, - int flags, int force_mode) +int add_file_to_index(struct index_state *istate, const char *path, int flags) { struct stat st; if (lstat(path, &st)) die_errno("unable to stat '%s'", path); - return add_to_index(istate, path, &st, flags, force_mode); + return add_to_index(istate, path, &st, flags); } struct cache_entry *make_cache_entry(unsigned int mode, @@ -756,6 +754,35 @@ struct cache_entry *make_cache_entry(unsigned int mode, return ret; } +/* + * Chmod an index entry with either +x or -x. + * + * Returns -1 if the chmod for the particular cache entry failed (if it's + * not a regular file), -2 if an invalid flip argument is passed in, 0 + * otherwise. + */ +int chmod_index_entry(struct index_state *istate, struct cache_entry *ce, + char flip) +{ + if (!S_ISREG(ce->ce_mode)) + return -1; + switch (flip) { + case '+': + ce->ce_mode |= 0111; + break; + case '-': + ce->ce_mode &= ~0111; + break; + default: + return -2; + } + cache_tree_invalidate_path(istate, ce->name); + ce->ce_flags |= CE_UPDATE_IN_BASE; + istate->cache_changed |= CE_ENTRY_CHANGED; + + return 0; +} + int ce_same_name(const struct cache_entry *a, const struct cache_entry *b) { int len = ce_namelen(a); @@ -187,7 +187,7 @@ void strbuf_insert(struct strbuf *sb, size_t pos, const void *data, size_t len) void strbuf_remove(struct strbuf *sb, size_t pos, size_t len) { - strbuf_splice(sb, pos, len, NULL, 0); + strbuf_splice(sb, pos, len, "", 0); } void strbuf_add(struct strbuf *sb, const void *data, size_t len) diff --git a/t/perf/run b/t/perf/run index cfd70129bb..e8adedadfd 100755 --- a/t/perf/run +++ b/t/perf/run @@ -30,7 +30,13 @@ unpack_git_rev () { } build_git_rev () { rev=$1 - cp ../../config.mak build/$rev/config.mak + for config in config.mak config.mak.autogen config.status + do + if test -e "../../$config" + then + cp "../../$config" "build/$rev/" + fi + done (cd build/$rev && make $GIT_PERF_MAKE_OPTS) || die "failed to build revision '$mydir'" } diff --git a/t/t2010-checkout-ambiguous.sh b/t/t2010-checkout-ambiguous.sh index e76e84afbb..2e47fe01cf 100755 --- a/t/t2010-checkout-ambiguous.sh +++ b/t/t2010-checkout-ambiguous.sh @@ -41,6 +41,15 @@ test_expect_success 'check ambiguity' ' test_must_fail git checkout world all ' +test_expect_success 'check ambiguity in subdir' ' + mkdir sub && + # not ambiguous because sub/world does not exist + git -C sub checkout world ../all && + echo hello >sub/world && + # ambiguous because sub/world does exist + test_must_fail git -C sub checkout world ../all +' + test_expect_success 'disambiguate checking out from a tree-ish' ' echo bye > world && git checkout world -- world && diff --git a/t/t2024-checkout-dwim.sh b/t/t2024-checkout-dwim.sh index 468a000e4b..3e5ac81bd2 100755 --- a/t/t2024-checkout-dwim.sh +++ b/t/t2024-checkout-dwim.sh @@ -174,6 +174,18 @@ test_expect_success 'checkout of branch with a file having the same name fails' test_branch master ' +test_expect_success 'checkout of branch with a file in subdir having the same name fails' ' + git checkout -B master && + test_might_fail git branch -D spam && + + >spam && + mkdir sub && + mv spam sub/spam && + test_must_fail git -C sub checkout spam && + test_must_fail git rev-parse --verify refs/heads/spam && + test_branch master +' + test_expect_success 'checkout <branch> -- succeeds, even if a file with the same name exists' ' git checkout -B master && test_might_fail git branch -D spam && diff --git a/t/t2107-update-index-basic.sh b/t/t2107-update-index-basic.sh index dfe02f4818..32ac6e09bd 100755 --- a/t/t2107-update-index-basic.sh +++ b/t/t2107-update-index-basic.sh @@ -80,4 +80,17 @@ test_expect_success '.lock files cleaned up' ' ) ' +test_expect_success '--chmod=+x and chmod=-x in the same argument list' ' + >A && + >B && + git add A B && + git update-index --chmod=+x A --chmod=-x B && + cat >expect <<-\EOF && + 100755 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 A + 100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0 B + EOF + git ls-files --stage A B >actual && + test_cmp expect actual +' + test_done diff --git a/t/t3404-rebase-interactive.sh b/t/t3404-rebase-interactive.sh index 597e94e294..e38e296388 100755 --- a/t/t3404-rebase-interactive.sh +++ b/t/t3404-rebase-interactive.sh @@ -1195,7 +1195,7 @@ To avoid this message, use "drop" to explicitly remove a commit. Use 'git config rebase.missingCommitsCheck' to change the level of warnings. The possible behaviours are: ignore, warn, error. -You can fix this with 'git rebase --edit-todo'. +You can fix this with 'git rebase --edit-todo' and then run 'git rebase --continue'. Or you can abort the rebase with 'git rebase --abort'. EOF @@ -1219,7 +1219,7 @@ cat >expect <<EOF Warning: the command isn't recognized in the following line: - badcmd $(git rev-list --oneline -1 master~1) -You can fix this with 'git rebase --edit-todo'. +You can fix this with 'git rebase --edit-todo' and then run 'git rebase --continue'. Or you can abort the rebase with 'git rebase --abort'. EOF @@ -1254,7 +1254,7 @@ cat >expect <<EOF Warning: the SHA-1 is missing or isn't a commit in the following line: - edit XXXXXXX False commit -You can fix this with 'git rebase --edit-todo'. +You can fix this with 'git rebase --edit-todo' and then run 'git rebase --continue'. Or you can abort the rebase with 'git rebase --abort'. EOF diff --git a/t/t3700-add.sh b/t/t3700-add.sh index 2978cb9d64..924a266126 100755 --- a/t/t3700-add.sh +++ b/t/t3700-add.sh @@ -349,4 +349,52 @@ test_expect_success POSIXPERM,SYMLINKS 'git add --chmod=+x with symlinks' ' test_mode_in_index 100755 foo2 ' +test_expect_success 'git add --chmod=[+-]x changes index with already added file' ' + echo foo >foo3 && + git add foo3 && + git add --chmod=+x foo3 && + test_mode_in_index 100755 foo3 && + echo foo >xfoo3 && + chmod 755 xfoo3 && + git add xfoo3 && + git add --chmod=-x xfoo3 && + test_mode_in_index 100644 xfoo3 +' + +test_expect_success POSIXPERM 'git add --chmod=[+-]x does not change the working tree' ' + echo foo >foo4 && + git add foo4 && + git add --chmod=+x foo4 && + ! test -x foo4 +' + +test_expect_success 'no file status change if no pathspec is given' ' + >foo5 && + >foo6 && + git add foo5 foo6 && + git add --chmod=+x && + test_mode_in_index 100644 foo5 && + test_mode_in_index 100644 foo6 +' + +test_expect_success 'no file status change if no pathspec is given in subdir' ' + mkdir -p sub && + ( + cd sub && + >sub-foo1 && + >sub-foo2 && + git add . && + git add --chmod=+x && + test_mode_in_index 100644 sub-foo1 && + test_mode_in_index 100644 sub-foo2 + ) +' + +test_expect_success 'all statuses changed in folder if . is given' ' + git add --chmod=+x . && + test $(git ls-files --stage | grep ^100644 | wc -l) -eq 0 && + git add --chmod=-x . && + test $(git ls-files --stage | grep ^100755 | wc -l) -eq 0 +' + test_done diff --git a/t/t4014-format-patch.sh b/t/t4014-format-patch.sh index b0579dd452..8d90a6e500 100755 --- a/t/t4014-format-patch.sh +++ b/t/t4014-format-patch.sh @@ -754,9 +754,22 @@ test_expect_success 'format-patch --ignore-if-in-upstream HEAD' ' git format-patch --ignore-if-in-upstream HEAD ' +git_version="$(git --version | sed "s/.* //")" + +signature() { + printf "%s\n%s\n\n" "-- " "${1:-$git_version}" +} + +test_expect_success 'format-patch default signature' ' + git format-patch --stdout -1 | tail -n 3 >output && + signature >expect && + test_cmp expect output +' + test_expect_success 'format-patch --signature' ' - git format-patch --stdout --signature="my sig" -1 >output && - grep "my sig" output + git format-patch --stdout --signature="my sig" -1 | tail -n 3 >output && + signature "my sig" >expect && + test_cmp expect output ' test_expect_success 'format-patch with format.signature config' ' @@ -1502,12 +1515,12 @@ test_expect_success 'format-patch -o overrides format.outputDirectory' ' test_expect_success 'format-patch --base' ' git checkout side && - git format-patch --stdout --base=HEAD~3 -1 >patch && - grep "^base-commit:" patch >actual && - grep "^prerequisite-patch-id:" patch >>actual && - echo "base-commit: $(git rev-parse HEAD~3)" >expected && + git format-patch --stdout --base=HEAD~3 -1 | tail -n 7 >actual && + echo >expected && + echo "base-commit: $(git rev-parse HEAD~3)" >>expected && echo "prerequisite-patch-id: $(git show --patch HEAD~2 | git patch-id --stable | awk "{print \$1}")" >>expected && echo "prerequisite-patch-id: $(git show --patch HEAD~1 | git patch-id --stable | awk "{print \$1}")" >>expected && + signature >> expected && test_cmp expected actual ' @@ -1605,6 +1618,14 @@ test_expect_success 'format-patch --base overrides format.useAutoBase' ' test_cmp expected actual ' +test_expect_success 'format-patch --base with --attach' ' + git format-patch --attach=mimemime --stdout --base=HEAD~ -1 >patch && + sed -n -e "/^base-commit:/s/.*/1/p" -e "/^---*mimemime--$/s/.*/2/p" \ + patch >actual && + test_write_lines 1 2 >expect && + test_cmp expect actual +' + test_expect_success 'format-patch --pretty=mboxrd' ' sp=" " && cat >msg <<-INPUT_END && diff --git a/t/t4051-diff-function-context.sh b/t/t4051-diff-function-context.sh index b79b87790b..6154acb456 100755 --- a/t/t4051-diff-function-context.sh +++ b/t/t4051-diff-function-context.sh @@ -67,6 +67,15 @@ test_expect_success 'setup' ' commit_and_tag long_common_tail file.c && git checkout initial && + cat "$dir/hello.c" "$dir/dummy.c" >file.c && + commit_and_tag hello_dummy file.c && + + # overlap function context of 1st change and -u context of 2nd change + grep -v "delete me from hello" <"$dir/hello.c" >file.c && + sed 2p <"$dir/dummy.c" >>file.c && + commit_and_tag changed_hello_dummy file.c && + + git checkout initial && grep -v "delete me from hello" <file.c >file.c.new && mv file.c.new file.c && cat "$dir/appended1.c" >>file.c && @@ -179,4 +188,20 @@ test_expect_success ' context does not include other functions' ' test $(grep -c "^[ +-].*Begin" changed_hello_appended.diff) -le 2 ' +check_diff changed_hello_dummy 'changed two consecutive functions' + +test_expect_success ' context includes begin' ' + grep "^ .*Begin of hello" changed_hello_dummy.diff && + grep "^ .*Begin of dummy" changed_hello_dummy.diff +' + +test_expect_success ' context includes end' ' + grep "^ .*End of hello" changed_hello_dummy.diff && + grep "^ .*End of dummy" changed_hello_dummy.diff +' + +test_expect_success ' overlapping hunks are merged' ' + test $(grep -c "^@@" changed_hello_dummy.diff) -eq 1 +' + test_done diff --git a/t/t4062-diff-pickaxe.sh b/t/t4062-diff-pickaxe.sh new file mode 100755 index 0000000000..f0bf50bda7 --- /dev/null +++ b/t/t4062-diff-pickaxe.sh @@ -0,0 +1,22 @@ +#!/bin/sh +# +# Copyright (c) 2016 Johannes Schindelin +# + +test_description='Pickaxe options' + +. ./test-lib.sh + +test_expect_success setup ' + test_commit initial && + printf "%04096d" 0 >4096-zeroes.txt && + git add 4096-zeroes.txt && + test_tick && + git commit -m "A 4k file" +' +test_expect_success '-G matches' ' + git diff --name-only -G "^0{4096}$" HEAD^ >out && + test 4096-zeroes.txt = "$(cat out)" +' + +test_done diff --git a/t/t5305-include-tag.sh b/t/t5305-include-tag.sh index f314ad5079..a5eca210b8 100755 --- a/t/t5305-include-tag.sh +++ b/t/t5305-include-tag.sh @@ -25,58 +25,94 @@ test_expect_success setup ' } >obj-list ' -rm -rf clone.git test_expect_success 'pack without --include-tag' ' - packname_1=$(git pack-objects \ + packname=$(git pack-objects \ --window=0 \ - test-1 <obj-list) + test-no-include <obj-list) ' test_expect_success 'unpack objects' ' - ( - GIT_DIR=clone.git && - export GIT_DIR && - git init && - git unpack-objects -n <test-1-${packname_1}.pack && - git unpack-objects <test-1-${packname_1}.pack - ) + rm -rf clone.git && + git init clone.git && + git -C clone.git unpack-objects <test-no-include-${packname}.pack ' test_expect_success 'check unpacked result (have commit, no tag)' ' git rev-list --objects $commit >list.expect && - ( - test_must_fail env GIT_DIR=clone.git git cat-file -e $tag && - git rev-list --objects $commit - ) >list.actual && + test_must_fail git -C clone.git cat-file -e $tag && + git -C clone.git rev-list --objects $commit >list.actual && test_cmp list.expect list.actual ' -rm -rf clone.git test_expect_success 'pack with --include-tag' ' - packname_1=$(git pack-objects \ + packname=$(git pack-objects \ --window=0 \ --include-tag \ - test-2 <obj-list) + test-include <obj-list) ' test_expect_success 'unpack objects' ' - ( - GIT_DIR=clone.git && - export GIT_DIR && - git init && - git unpack-objects -n <test-2-${packname_1}.pack && - git unpack-objects <test-2-${packname_1}.pack - ) + rm -rf clone.git && + git init clone.git && + git -C clone.git unpack-objects <test-include-${packname}.pack ' test_expect_success 'check unpacked result (have commit, have tag)' ' git rev-list --objects mytag >list.expect && - ( - GIT_DIR=clone.git && - export GIT_DIR && - git rev-list --objects $tag - ) >list.actual && + git -C clone.git rev-list --objects $tag >list.actual && test_cmp list.expect list.actual ' +# A tag of a tag, where the "inner" tag is not otherwise +# reachable, and a full peel points to a commit reachable from HEAD. +test_expect_success 'create hidden inner tag' ' + test_commit commit && + git tag -m inner inner HEAD && + git tag -m outer outer inner && + git tag -d inner +' + +test_expect_success 'pack explicit outer tag' ' + packname=$( + { + echo HEAD && + echo outer + } | + git pack-objects --revs test-hidden-explicit + ) +' + +test_expect_success 'unpack objects' ' + rm -rf clone.git && + git init clone.git && + git -C clone.git unpack-objects <test-hidden-explicit-${packname}.pack +' + +test_expect_success 'check unpacked result (have all objects)' ' + git -C clone.git rev-list --objects $(git rev-parse outer HEAD) +' + +test_expect_success 'pack implied outer tag' ' + packname=$( + echo HEAD | + git pack-objects --revs --include-tag test-hidden-implied + ) +' + +test_expect_success 'unpack objects' ' + rm -rf clone.git && + git init clone.git && + git -C clone.git unpack-objects <test-hidden-implied-${packname}.pack +' + +test_expect_success 'check unpacked result (have all objects)' ' + git -C clone.git rev-list --objects $(git rev-parse outer HEAD) +' + +test_expect_success 'single-branch clone can transfer tag' ' + rm -rf clone.git && + git clone --no-local --single-branch -b master . clone.git && + git -C clone.git fsck +' + test_done diff --git a/t/t5550-http-fetch-dumb.sh b/t/t5550-http-fetch-dumb.sh index dc9b87d6b4..7641417b4a 100755 --- a/t/t5550-http-fetch-dumb.sh +++ b/t/t5550-http-fetch-dumb.sh @@ -299,5 +299,13 @@ test_expect_success 'git client does not send an empty Accept-Language' ' ! grep "^=> Send header: Accept-Language:" stderr ' +test_expect_success 'remote-http complains cleanly about malformed urls' ' + # do not actually issue "list" or other commands, as we do not + # want to rely on what curl would actually do with such a broken + # URL. This is just about making sure we do not segfault during + # initialization. + test_must_fail git remote-http http::/example.com/repo.git +' + stop_httpd test_done diff --git a/t/t7517-per-repo-email.sh b/t/t7517-per-repo-email.sh index 337e6e30c3..2a22fa7588 100755 --- a/t/t7517-per-repo-email.sh +++ b/t/t7517-per-repo-email.sh @@ -36,4 +36,51 @@ test_expect_success 'succeeds cloning if global email is not set' ' git clone . clone ' +test_expect_success 'set up rebase scenarios' ' + # temporarily enable an actual ident for this setup + test_config user.email foo@example.com && + test_commit new && + git branch side-without-commit HEAD^ && + git checkout -b side-with-commit HEAD^ && + test_commit side +' + +test_expect_success 'fast-forward rebase does not care about ident' ' + git checkout -B tmp side-without-commit && + git rebase master +' + +test_expect_success 'non-fast-forward rebase refuses to write commits' ' + test_when_finished "git rebase --abort || true" && + git checkout -B tmp side-with-commit && + test_must_fail git rebase master +' + +test_expect_success 'fast-forward rebase does not care about ident (interactive)' ' + git checkout -B tmp side-without-commit && + git rebase -i master +' + +test_expect_success 'non-fast-forward rebase refuses to write commits (interactive)' ' + test_when_finished "git rebase --abort || true" && + git checkout -B tmp side-with-commit && + test_must_fail git rebase -i master +' + +test_expect_success 'noop interactive rebase does not care about ident' ' + git checkout -B tmp side-with-commit && + git rebase -i HEAD^ +' + +test_expect_success 'fast-forward rebase does not care about ident (preserve)' ' + git checkout -B tmp side-without-commit && + git rebase -p master +' + +test_expect_success 'non-fast-forward rebase refuses to write commits (preserve)' ' + test_when_finished "git rebase --abort || true" && + git checkout -B tmp side-with-commit && + test_must_fail git rebase -p master +' + test_done diff --git a/unpack-trees.c b/unpack-trees.c index c87a90a08d..2a963f9a7f 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -218,8 +218,8 @@ static void unlink_entry(const struct cache_entry *ce) schedule_dir_for_removal(ce->name, ce_namelen(ce)); } -static struct checkout state; -static int check_updates(struct unpack_trees_options *o) +static int check_updates(struct unpack_trees_options *o, + const struct checkout *state) { unsigned cnt = 0, total = 0; struct progress *progress = NULL; @@ -264,7 +264,7 @@ static int check_updates(struct unpack_trees_options *o) display_progress(progress, ++cnt); ce->ce_flags &= ~CE_UPDATE; if (o->update && !o->dry_run) { - errs |= checkout_entry(ce, &state, NULL); + errs |= checkout_entry(ce, state, NULL); } } } @@ -1094,6 +1094,7 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options int i, ret; static struct cache_entry *dfc; struct exclude_list el; + struct checkout state; if (len > MAX_UNPACK_TREES) die("unpack_trees takes at most %d trees", MAX_UNPACK_TREES); @@ -1239,7 +1240,7 @@ int unpack_trees(unsigned len, struct tree_desc *t, struct unpack_trees_options } o->src_index = NULL; - ret = check_updates(o) ? (-2) : 0; + ret = check_updates(o, &state) ? (-2) : 0; if (o->dst_index) { if (!ret) { if (!o->result.cache_tree) diff --git a/vcs-svn/fast_export.c b/vcs-svn/fast_export.c index bd0f2c2b86..97cba39cdf 100644 --- a/vcs-svn/fast_export.c +++ b/vcs-svn/fast_export.c @@ -73,7 +73,7 @@ void fast_export_begin_note(uint32_t revision, const char *author, static int firstnote = 1; size_t loglen = strlen(log); printf("commit %s\n", note_ref); - printf("committer %s <%s@%s> %ld +0000\n", author, author, "local", timestamp); + printf("committer %s <%s@%s> %lu +0000\n", author, author, "local", timestamp); printf("data %"PRIuMAX"\n", (uintmax_t)loglen); fwrite(log, loglen, 1, stdout); if (firstnote) { @@ -107,7 +107,7 @@ void fast_export_begin_commit(uint32_t revision, const char *author, } printf("commit %s\n", local_ref); printf("mark :%"PRIu32"\n", revision); - printf("committer %s <%s@%s> %ld +0000\n", + printf("committer %s <%s@%s> %lu +0000\n", *author ? author : "nobody", *author ? author : "nobody", *uuid ? uuid : "local", timestamp); diff --git a/xdiff-interface.c b/xdiff-interface.c index f34ea762e4..50702a215d 100644 --- a/xdiff-interface.c +++ b/xdiff-interface.c @@ -214,11 +214,10 @@ struct ff_regs { static long ff_regexp(const char *line, long len, char *buffer, long buffer_size, void *priv) { - char *line_buffer; struct ff_regs *regs = priv; regmatch_t pmatch[2]; int i; - int result = -1; + int result; /* Exclude terminating newline (and cr) from matching */ if (len > 0 && line[len-1] == '\n') { @@ -228,18 +227,16 @@ static long ff_regexp(const char *line, long len, len--; } - line_buffer = xstrndup(line, len); /* make NUL terminated */ - for (i = 0; i < regs->nr; i++) { struct ff_reg *reg = regs->array + i; - if (!regexec(®->re, line_buffer, 2, pmatch, 0)) { + if (!regexec_buf(®->re, line, len, 2, pmatch, 0)) { if (reg->negate) - goto fail; + return -1; break; } } if (regs->nr <= i) - goto fail; + return -1; i = pmatch[1].rm_so >= 0 ? 1 : 0; line += pmatch[i].rm_so; result = pmatch[i].rm_eo - pmatch[i].rm_so; @@ -248,8 +245,6 @@ static long ff_regexp(const char *line, long len, while (result > 0 && (isspace(line[result - 1]))) result--; memcpy(buffer, line, result); - fail: - free(line_buffer); return result; } diff --git a/xdiff/xemit.c b/xdiff/xemit.c index b52b4b9c1e..7389ce4102 100644 --- a/xdiff/xemit.c +++ b/xdiff/xemit.c @@ -239,7 +239,7 @@ int xdl_emit_diff(xdfenv_t *xe, xdchange_t *xscr, xdemitcb_t *ecb, if (xche->next) { long l = XDL_MIN(xche->next->i1, xe->xdf1.nrec - 1); - if (l <= e1 || + if (l - xecfg->ctxlen <= e1 || get_func_line(xe, xecfg, NULL, l, e1) < 0) { xche = xche->next; goto post_context_calculation; |
