author | Junio C Hamano <gitster@pobox.com> | |
Tue, 26 May 2009 02:02:11 +0000 (19:02 -0700) | ||
committer | Junio C Hamano <gitster@pobox.com> | |
Tue, 26 May 2009 02:02:11 +0000 (19:02 -0700) |
* np/push-delta:
allow OFS_DELTA objects during a push
allow OFS_DELTA objects during a push
109 files changed:
index a9f1a6b8b53c141917d6ba015a49908c956d1044..0ce6316d75356500faf7e830eca54f9618064701 100644 (file)
Fixes since v1.6.1.3
--------------------
+* .gitignore learned to handle backslash as a quoting mechanism for
+ comment introduction character "#".
+ This fix was first merged to 1.6.2.1.
+
* "git fast-export" produced wrong output with some parents missing from
commits, when the history is clock-skewed.
* "git fast-import" sometimes failed to read back objects it just wrote
out and aborted, because it failed to flush stale cached data.
+* "git-ls-tree" and "git-diff-tree" used a pathspec correctly when
+ deciding to descend into a subdirectory but they did not match the
+ individual paths correctly. This caused pathspecs "abc/d ab" to match
+ "abc/0" ("abc/d" made them decide to descend into the directory "abc/",
+ and then "ab" incorrectly matched "abc/0" when it shouldn't).
+ This fix was first merged to 1.6.2.3.
+
+* import-zips script (in contrib) did not compute the common directory
+ prefix correctly.
+ This fix was first merged to 1.6.2.2.
+
+* "git init" segfaulted when given an overlong template location via
+ the --template= option.
+ This fix was first merged to 1.6.2.4.
+
* "git repack" did not error out when necessary object was missing in the
repository.
+* git-repack (invoked from git-gc) did not work as nicely as it should in
+ a repository that borrows objects from neighbours via alternates
+ mechanism especially when some packs are marked with the ".keep" flag
+ to prevent them from being repacked.
+ This fix was first merged to 1.6.2.3.
+
Also includes minor documentation fixes and updates.
--
diff --git a/Documentation/RelNotes-1.6.2.5.txt b/Documentation/RelNotes-1.6.2.5.txt
--- /dev/null
@@ -0,0 +1,21 @@
+GIT v1.6.2.5 Release Notes
+==========================
+
+Fixes since v1.6.2.4
+--------------------
+
+* "git apply" mishandled if you fed a git generated patch that renames
+ file A to B and file B to A at the same time.
+
+* "git diff -c -p" (and "diff --cc") did not expect to see submodule
+ differences and instead refused to work.
+
+* "git grep -e '('" segfaulted, instead of diagnosing a mismatched
+ parentheses error.
+
+* "git fetch" generated packs with offset-delta encoding when both ends of
+ the connection are capable of producing one; this cannot be read by
+ ancient git and the user should be able to disable this by setting
+ repack.usedeltabaseoffset configuration to false.
+
+
diff --git a/Documentation/RelNotes-1.6.3.1.txt b/Documentation/RelNotes-1.6.3.1.txt
--- /dev/null
@@ -0,0 +1,10 @@
+GIT v1.6.3.1 Release Notes
+==========================
+
+Fixes since v1.6.3
+------------------
+
+* "git checkout -b new-branch" with a staged change in the index
+ incorrectly primed the in-index cache-tree, resulting a wrong tree
+ object to be written out of the index. This is a grave regression
+ since the last 1.6.2.X maintenance release.
index 7270ef893b0719bd9e4f187ae1aaf323b815af39..418c685cf8328a0dc128847a98c334b727a8d6f9 100644 (file)
* various git-svn updates.
+* git-gui updates, including an update to Russian translation, and a
+ fix to an infinite loop when showing an empty diff.
+
+* gitk updates, including an update to Russian translation and improved Windows
+ support.
+
(performance)
* many uses of lstat(2) in the codepath for "git checkout" have been
* git-gc spent excessive amount of time to decide if an object appears
in a locally existing pack (if needed, backport by merging 69e020a).
-
----
-exec >/var/tmp/1
-O=v1.6.3-rc2
-echo O=$(git describe master)
-git shortlog --no-merges $O..master ^maint
index 1e71dd536b1881b61a007af09f1dedea37fe984e..6d92cbee6475e29660d91a97683bf5843aacab38 100644 (file)
--- a/Documentation/git-am.txt
+++ b/Documentation/git-am.txt
-s::
--signoff::
- Add `Signed-off-by:` line to the commit message, using
+ Add a `Signed-off-by:` line to the commit message, using
the committer identity of yourself.
-k::
message as the commit author date, and uses the time of
commit creation as the committer date. This allows the
user to lie about the committer date by using the same
- timestamp as the author date.
+ value as the author date.
--ignore-date::
By default the command records the date from the e-mail
message as the commit author date, and uses the time of
commit creation as the committer date. This allows the
- user to lie about author timestamp by using the same
- timestamp as the committer date.
+ user to lie about the author date by using the same
+ value as the committer date.
--skip::
Skip the current patch. This is only meaningful when
----------
The commit author name is taken from the "From: " line of the
-message, and commit author time is taken from the "Date: " line
+message, and commit author date is taken from the "Date: " line
of the message. The "Subject: " line is used as the title of
the commit, after stripping common prefix "[PATCH <anything>]".
-It is supposed to describe what the commit is about concisely as
-a one line text.
+The "Subject: " line is supposed to concisely describe what the
+commit is about in one line of text.
-The body of the message (the rest of the message after the blank line
-that terminates the RFC2822 headers) can begin with "Subject: " and
-"From: " lines that are different from those of the mail header,
-to override the values of these fields.
+"From: " and "Subject: " lines starting the body (the rest of the
+message after the blank line terminating the RFC2822 headers)
+override the respective commit author name and title values taken
+from the headers.
The commit message is formed by the title taken from the
"Subject: ", a blank line and the body of the message up to
-where the patch begins. Excess whitespace characters at the end of the
-lines are automatically stripped.
+where the patch begins. Excess whitespace at the end of each
+line is automatically stripped.
The patch is expected to be inline, directly following the
message. Any line that is of the form:
is taken as the beginning of a patch, and the commit log message
is terminated before the first occurrence of such a line.
-When initially invoking it, you give it the names of the mailboxes
+When initially invoking `git am`, you give it the names of the mailboxes
to process. Upon seeing the first patch that does not apply, it
aborts in the middle. You can recover from this in one of two ways:
index b191276d7a44511bfce60febe6f5cb9a025ec9a3..58c8d65772af4ef20ad573af9dd28691f5357437 100644 (file)
SYNOPSIS
--------
[verse]
-'git cat-file' [-t | -s | -e | -p | <type>] <object>
-'git cat-file' [--batch | --batch-check] < <list-of-objects>
+'git cat-file' (-t | -s | -e | -p | <type>) <object>
+'git cat-file' (--batch | --batch-check) < <list-of-objects>
DESCRIPTION
-----------
index 43b2de7db3b5f21ab9b3eb03e0c167892ae37f3f..be894af39ff6559affbf0617e4c5d8fe68c33fe8 100644 (file)
DESCRIPTION
-----------
-This allows cleaning the working tree by removing files that are not
-under version control.
+Cleans the working tree by recursively removing files that are not
+under version control, starting from the current directory.
Normally, only files unknown to git are removed, but if the '-x'
option is specified, ignored files are also removed. This can, for
index 4072f40d7ae5417c51d1cddcf587b674aa1dc0e5..b14de6c407b8bd0bc001c608ca4f26fc619abf3e 100644 (file)
part of the source repository is used if no directory is
explicitly given ("repo" for "/path/to/repo.git" and "foo"
for "host.xz:foo/.git"). Cloning into an existing directory
- is not allowed.
+ is only allowed if the directory is empty.
:git-clone: 1
include::urls.txt[]
index 7131ee3c66951de5981a82e304f4619de88064c5..f68b198205d3a4d808ce58e6b0ac03e70bb160a4 100644 (file)
--add::
Adds a new line to the option without altering any existing
- values. This is the same as providing '^$' as the value_regex.
+ values. This is the same as providing '^$' as the value_regex
+ in `--replace-all`.
--get::
Get the value for a given key (optionally filtered by a regex
When the color setting for `name` is undefined, the command uses
`color.ui` as fallback.
---get-color name default::
+--get-color name [default]::
Find the color configured for `name` (e.g. `color.diff.new`) and
output it as the ANSI color escape sequence to the standard
index f68e5c5c1abd15350e679eebf976f0ac8516123b..c3fdccb4c2f66b8b3a3c6b60b21feac881b06cb4 100644 (file)
-------------
<mode> SP <type> SP <object> TAB <file>
-When the `-z` option is not used, TAB, LF, and backslash characters
+Unless the `-z` option is used, TAB, LF, and backslash characters
in pathnames are represented as `\t`, `\n`, and `\\`, respectively.
+This output format is compatible with what '--index-info --stdin' of
+'git update-index' expects.
When the `-l` option is used, format changes to
diff --git a/Documentation/git.txt b/Documentation/git.txt
index 470fdc5ecd5609dc4f05c54b8aea53f6de292e4a..9d8f236fe84cd02550b8cf08e835b2926e6c45f0 100644 (file)
--- a/Documentation/git.txt
+++ b/Documentation/git.txt
branch of the `git.git` repository.
Documentation for older releases are available here:
-* link:v1.6.2.3/git.html[documentation for release 1.6.2.3]
+* link:v1.6.3/git.html[documentation for release 1.6.3]
* release notes for
+ link:RelNotes-1.6.2.5.txt[1.6.2.5],
+ link:RelNotes-1.6.2.4.txt[1.6.2.4],
link:RelNotes-1.6.2.3.txt[1.6.2.3],
link:RelNotes-1.6.2.2.txt[1.6.2.2],
link:RelNotes-1.6.2.1.txt[1.6.2.1],
index 637b53f898829af98153d60953434fa30e3df179..adadf8e4bf309a2fd2ec8efbeff09b410ca7b041 100644 (file)
--squash::
Produce the working tree and index state as if a real
- merge happened, but do not actually make a commit or
+ merge happened (except for the merge information),
+ but do not actually make a commit or
move the `HEAD`, nor record `$GIT_DIR/MERGE_HEAD` to
cause the next `git commit` command to create a merge
commit. This allows you to create a single commit on
diff --git a/Documentation/technical/api-parse-options.txt b/Documentation/technical/api-parse-options.txt
index e66ca9f70c705841c864196a3a651e04d8156e01..e30c602f476da2da632d2cd04396d168c80ab233 100644 (file)
The callback mechanism is as follows:
-* Inside `funct`, the only interesting member of the structure
+* Inside `func`, the only interesting member of the structure
given by `opt` is the void pointer `opt->value`.
`\*opt->value` will be the value that is saved into `var`, if you
use `OPT_CALLBACK()`.
diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN
index 97fc1e0519936111beb295cbb345aa206cdd8893..d292e3a2d38a935a0f06b708d9d0b4a36d58ba66 100755 (executable)
--- a/GIT-VERSION-GEN
+++ b/GIT-VERSION-GEN
#!/bin/sh
GVF=GIT-VERSION-FILE
-DEF_VER=v1.6.2.GIT
+DEF_VER=v1.6.3.1
LF='
'
diff --git a/Makefile b/Makefile
index 6e216436c36f4dcbe1121d02a291e9f568ca6071..26d180cc5422c968f5bde4ae4a300347b3f33e02 100644 (file)
--- a/Makefile
+++ b/Makefile
ifeq ($(uname_S),OpenBSD)
NO_STRCASESTR = YesPlease
NO_MEMMEM = YesPlease
+ USE_ST_TIMESPEC = YesPlease
NEEDS_LIBICONV = YesPlease
BASIC_CFLAGS += -I/usr/local/include
BASIC_LDFLAGS += -L/usr/local/lib
diff --git a/RelNotes b/RelNotes
index dd8bc4bb4ab75e1148cb9b7aaf8ff7384ebb19ec..0f6a588f1da39cb249a6e2ae841022245f949a40 120000 (symlink)
--- a/RelNotes
+++ b/RelNotes
-Documentation/RelNotes-1.6.3.txt
\ No newline at end of file
+Documentation/RelNotes-1.6.3.1.txt
\ No newline at end of file
index ccb1108c94436035d0da8b1d6f08f859b68294a3..e687fe54c1ce2a435e8f0d7806db231c06f998eb 100644 (file)
--- a/alias.c
+++ b/alias.c
int src, dst, count = 0, size = 16;
char quoted = 0;
- *argv = xmalloc(sizeof(char*) * size);
+ *argv = xmalloc(sizeof(char *) * size);
/* split alias_string */
(*argv)[count++] = cmdline;
; /* skip */
if (count >= size) {
size += 16;
- *argv = xrealloc(*argv, sizeof(char*) * size);
+ *argv = xrealloc(*argv, sizeof(char *) * size);
}
(*argv)[count++] = cmdline + dst;
} else if (!quoted && (c == '\'' || c == '"')) {
index 216c23a6f854c614d38c743cd7687a37f304161b..6ef6753d180afad29bc335854150c824b9de8a18 100644 (file)
--- a/alloc.c
+++ b/alloc.c
#define SZ_FMT "%zu"
#endif
-static void report(const char* name, unsigned int count, size_t size)
+static void report(const char *name, unsigned int count, size_t size)
{
fprintf(stderr, "%10s: %8u (" SZ_FMT " kB)\n", name, count, size);
}
diff --git a/archive-tar.c b/archive-tar.c
index ba890ebdecd8672aeb32757605c8a2976fa21161..cee06ce3cbc1819008337633ed0753638c423ac5 100644 (file)
--- a/archive-tar.c
+++ b/archive-tar.c
sprintf(header.mode, "%07o", mode & 07777);
sprintf(header.size, "%011lo", S_ISREG(mode) ? size : 0);
- sprintf(header.mtime, "%011lo", args->time);
+ sprintf(header.mtime, "%011lo", (unsigned long) args->time);
sprintf(header.uid, "%07o", 0);
sprintf(header.gid, "%07o", 0);
index f1ca4f58599c14c98473f3638a3d0d6eed2aafaa..98eb636f13d314c20e18e646c074e2511b3c891c 100644 (file)
--- a/attr.c
+++ b/attr.c
if (is_macro)
res->u.attr = git_attr(name, namelen);
else {
- res->u.pattern = (char*)&(res->state[num_attr]);
+ res->u.pattern = (char *)&(res->state[num_attr]);
memcpy(res->u.pattern, name, namelen);
res->u.pattern[namelen] = 0;
}
setto == ATTR__UNKNOWN)
;
else
- free((char*) setto);
+ free((char *) setto);
}
free(a);
}
diff --git a/builtin-add.c b/builtin-add.c
index cb67d2c17e4017e8deede61b30c0eb7c8c60ac1e..ad889aac5bd174bf96a87b78eeb243aea89a1626 100644 (file)
--- a/builtin-add.c
+++ b/builtin-add.c
fill_pathspec_matches(pathspec, seen, specs);
for (i = 0; i < specs; i++) {
- if (!seen[i] && !file_exists(pathspec[i]))
+ if (!seen[i] && pathspec[i][0] && !file_exists(pathspec[i]))
die("pathspec '%s' did not match any files",
pathspec[i]);
}
diff --git a/builtin-apply.c b/builtin-apply.c
index 7b404ef6601e5b7820e9b1b6812225639e3ea4b1..8a3771e87e1ef2ac7a1ee70133b8206f0f18cbb5 100644 (file)
--- a/builtin-apply.c
+++ b/builtin-apply.c
if (rmdir(patch->old_name))
warning("unable to remove submodule %s",
patch->old_name);
- } else if (!unlink(patch->old_name) && rmdir_empty) {
+ } else if (!unlink_or_warn(patch->old_name) && rmdir_empty) {
remove_path(patch->old_name);
}
}
@@ -2891,7 +2891,7 @@ static void create_one_file(char *path, unsigned mode, const char *buf, unsigned
if (!try_create_file(newpath, mode, buf, size)) {
if (!rename(newpath, path))
return;
- unlink(newpath);
+ unlink_or_warn(newpath);
break;
}
if (errno != EEXIST)
diff --git a/builtin-blame.c b/builtin-blame.c
index 83141fc84e22ad4852f255fa1ad453cc125a3255..cf74a926149668b7e67544aecd46a0e05d4f59d9 100644 (file)
--- a/builtin-blame.c
+++ b/builtin-blame.c
* Prepare mmfile that contains only the lines in ent.
*/
cp = nth_line(sb, ent->lno);
- file_o.ptr = (char*) cp;
+ file_o.ptr = (char *) cp;
cnt = ent->num_lines;
while (cnt && cp < sb->final_buf + sb->final_buf_size) {
while (len--) {
if (bol) {
sb->lineno = xrealloc(sb->lineno,
- sizeof(int* ) * (num + 1));
+ sizeof(int *) * (num + 1));
sb->lineno[num] = buf - sb->final_buf;
bol = 0;
}
}
}
sb->lineno = xrealloc(sb->lineno,
- sizeof(int* ) * (num + incomplete + 1));
+ sizeof(int *) * (num + incomplete + 1));
sb->lineno[num + incomplete] = buf - sb->final_buf;
sb->num_lines = num + incomplete;
return sb->num_lines;
return spec;
/* it could be a regexp of form /.../ */
- for (term = (char*) spec + 1; *term && *term != '/'; term++) {
+ for (term = (char *) spec + 1; *term && *term != '/'; term++) {
if (*term == '\\')
term++;
}
diff --git a/builtin-cat-file.c b/builtin-cat-file.c
index 8fad19daedef8a38674ee35cd543983bad610857..43ffe7ffae90322d757e110d8693a936209236f0 100644 (file)
--- a/builtin-cat-file.c
+++ b/builtin-cat-file.c
}
static const char * const cat_file_usage[] = {
- "git cat-file [-t|-s|-e|-p|<type>] <sha1>",
- "git cat-file [--batch|--batch-check] < <list_of_sha1s>",
+ "git cat-file (-t|-s|-e|-p|<type>) <object>",
+ "git cat-file (--batch|--batch-check) < <list_of_objects>",
NULL
};
index 0d534bc023a1a3367bdf19f6450ce17e627959f0..afe35e246c5ab2b262683308def787c6abce2a83 100644 (file)
--- a/builtin-checkout-index.c
+++ b/builtin-checkout-index.c
static void checkout_all(const char *prefix, int prefix_length)
{
int i, errs = 0;
- struct cache_entry* last_ce = NULL;
+ struct cache_entry *last_ce = NULL;
for (i = 0; i < active_nr ; i++) {
struct cache_entry *ce = active_cache[i];
p = prefix_path(prefix, prefix_length, arg);
checkout_file(p, prefix_length);
if (p < arg || p > arg + strlen(arg))
- free((char*)p);
+ free((char *)p);
}
if (read_from_stdin) {
diff --git a/builtin-checkout.c b/builtin-checkout.c
index 15f0c32c7a7ed62afe31e3bafb2d7306ba4a3402..f2d7ef01b0bbe667ae8042f7a806a634fa0aa46b 100644 (file)
--- a/builtin-checkout.c
+++ b/builtin-checkout.c
int ret;
struct lock_file *lock_file = xcalloc(1, sizeof(struct lock_file));
int newfd = hold_locked_index(lock_file, 1);
- int reprime_cache_tree = 0;
if (read_cache() < 0)
return error("corrupt index file");
- cache_tree_free(&active_cache_tree);
if (opts->force) {
ret = reset_tree(new->commit->tree, opts, 1);
if (ret)
return ret;
- reprime_cache_tree = 1;
} else {
struct tree_desc trees[2];
struct tree *tree;
init_tree_desc(&trees[1], tree->buffer, tree->size);
ret = unpack_trees(2, trees, &topts);
- if (ret != -1) {
- reprime_cache_tree = 1;
- } else {
+ if (ret == -1) {
/*
* Unpack couldn't do a trivial merge; either
* give up or do a real merge, depending on
}
}
- if (reprime_cache_tree)
- prime_cache_tree(&active_cache_tree, new->commit->tree);
if (write_cache(newfd, active_cache, active_nr) ||
commit_locked_index(lock_file))
die("unable to write new index file");
@@ -548,14 +541,6 @@ static int switch_branches(struct checkout_opts *opts, struct branch_info *new)
parse_commit(new->commit);
}
- /*
- * If we were on a detached HEAD, but we are now moving to
- * a new commit, we want to mention the old commit once more
- * to remind the user that it might be lost.
- */
- if (!opts->quiet && !old.path && old.commit && new->commit != old.commit)
- describe_detached_head("Previous HEAD position was", old.commit);
-
if (!old.commit && !opts->force) {
if (!opts->quiet) {
warning("You appear to be on a branch yet to be born.");
@@ -568,6 +553,14 @@ static int switch_branches(struct checkout_opts *opts, struct branch_info *new)
if (ret)
return ret;
+ /*
+ * If we were on a detached HEAD, but have now moved to
+ * a new commit, we want to mention the old commit once more
+ * to remind the user that it might be lost.
+ */
+ if (!opts->quiet && !old.path && old.commit && new->commit != old.commit)
+ describe_detached_head("Previous HEAD position was", old.commit);
+
update_refs_for_switch(opts, &old, new);
ret = post_checkout_hook(old.commit, new->commit, 1);
diff --git a/builtin-clone.c b/builtin-clone.c
index 880373f279dd073ea7f0ae8564daca1cc687e529..ba286e0160c494244810334e3a0b43a59756e84a 100644 (file)
--- a/builtin-clone.c
+++ b/builtin-clone.c
}
if (unlink(dest->buf) && errno != ENOENT)
- die("failed to unlink %s", dest->buf);
+ die("failed to unlink %s: %s",
+ dest->buf, strerror(errno));
if (!option_no_hardlinks) {
if (!link(src->buf, dest->buf))
continue;
diff --git a/builtin-describe.c b/builtin-describe.c
index 3a007ed1cafcab82f466d355b63e416b06eb8864..63c6a19da5b38bc7c00c624c080ba0afbb10ff8a 100644 (file)
--- a/builtin-describe.c
+++ b/builtin-describe.c
die("--long is incompatible with --abbrev=0");
if (contains) {
- const char **args = xmalloc((7 + argc) * sizeof(char*));
+ const char **args = xmalloc((7 + argc) * sizeof(char *));
int i = 0;
args[i++] = "name-rev";
args[i++] = "--name-only";
args[i++] = s;
}
}
- memcpy(args + i, argv, argc * sizeof(char*));
+ memcpy(args + i, argv, argc * sizeof(char *));
args[i + argc] = NULL;
return cmd_name_rev(i + argc, args, prefix);
}
diff --git a/builtin-fetch-pack.c b/builtin-fetch-pack.c
index 5d134be47c85019dd66aed742eb845f6245cbf4d..6202462216f3b8c3cbe924d4cc002616e69d75ab 100644 (file)
--- a/builtin-fetch-pack.c
+++ b/builtin-fetch-pack.c
static int transfer_unpack_limit = -1;
static int fetch_unpack_limit = -1;
static int unpack_limit = 100;
+static int prefer_ofs_delta = 1;
static struct fetch_pack_args args = {
/* .uploadpack = */ "git-upload-pack",
};
Get the next rev to send, ignoring the common.
*/
-static const unsigned char* get_rev(void)
+static const unsigned char *get_rev(void)
{
struct commit *commit = NULL;
(args.use_thin_pack ? " thin-pack" : ""),
(args.no_progress ? " no-progress" : ""),
(args.include_tag ? " include-tag" : ""),
- " ofs-delta");
+ (prefer_ofs_delta ? " ofs-delta" : ""));
else
packet_write(fd[1], "want %s\n", sha1_to_hex(remote));
fetching++;
fprintf(stderr, "Server supports side-band\n");
use_sideband = 1;
}
+ if (server_supports("ofs-delta")) {
+ if (args.verbose)
+ fprintf(stderr, "Server supports ofs-delta\n");
+ } else
+ prefer_ofs_delta = 0;
if (everything_local(&ref, nr_match, match)) {
packet_flush(fd[1]);
goto all_done;
return 0;
}
+ if (strcmp(var, "repack.usedeltabaseoffset") == 0) {
+ prefer_ofs_delta = git_config_bool(var, value);
+ return 0;
+ }
+
return git_default_config(var, value, cb);
}
fd = hold_lock_file_for_update(&lock, shallow,
LOCK_DIE_ON_ERROR);
if (!write_shallow_commits(fd, 0)) {
- unlink(shallow);
+ unlink_or_warn(shallow);
rollback_lock_file(&lock);
} else {
commit_lock_file(&lock);
diff --git a/builtin-fetch.c b/builtin-fetch.c
index 3c998ea740adf474ee980fc763bd7156b9ce81af..1f7a3f1ce66434a84ff96ef352245862fe088a70 100644 (file)
--- a/builtin-fetch.c
+++ b/builtin-fetch.c
return ref_map;
}
+#define STORE_REF_ERROR_OTHER 1
+#define STORE_REF_ERROR_DF_CONFLICT 2
+
static int s_update_ref(const char *action,
struct ref *ref,
int check_old)
lock = lock_any_ref_for_update(ref->name,
check_old ? ref->old_sha1 : NULL, 0);
if (!lock)
- return 2;
+ return errno == ENOTDIR ? STORE_REF_ERROR_DF_CONFLICT :
+ STORE_REF_ERROR_OTHER;
if (write_ref_sha1(lock, ref->new_sha1, msg) < 0)
- return 2;
+ return errno == ENOTDIR ? STORE_REF_ERROR_DF_CONFLICT :
+ STORE_REF_ERROR_OTHER;
return 0;
}
}
}
fclose(fp);
- if (rc & 2)
+ if (rc & STORE_REF_ERROR_DF_CONFLICT)
error("some local refs could not be updated; try running\n"
" 'git remote prune %s' to remove any old, conflicting "
"branches", remote_name);
diff --git a/builtin-for-each-ref.c b/builtin-for-each-ref.c
index 91e8f95fd20215cae72e206a691370c71dbc575e..d091e04af9549b70a1e15a4b845383056e71932e 100644 (file)
--- a/builtin-for-each-ref.c
+++ b/builtin-for-each-ref.c
static const char *copy_email(const char *buf)
{
const char *email = strchr(buf, '<');
- const char *eoemail = strchr(email, '>');
- if (!email || !eoemail)
+ const char *eoemail;
+ if (!email)
+ return "";
+ eoemail = strchr(email, '>');
+ if (!eoemail)
return "";
return xmemdupz(email, eoemail + 1 - email);
}
diff --git a/builtin-help.c b/builtin-help.c
index e7fbe9af633d23fa55b14751190e6dd5d9e5d762..67dda3e6e63c9130a6f1e1c94cb35e519d765a95 100644 (file)
--- a/builtin-help.c
+++ b/builtin-help.c
return 0;
}
-static void exec_woman_emacs(const char* path, const char *page)
+static void exec_woman_emacs(const char *path, const char *page)
{
if (!check_emacsclient_version()) {
/* This works only with emacsclient version >= 22. */
}
}
-static void exec_man_konqueror(const char* path, const char *page)
+static void exec_man_konqueror(const char *path, const char *page)
{
const char *display = getenv("DISPLAY");
if (display && *display) {
}
}
-static void exec_man_man(const char* path, const char *page)
+static void exec_man_man(const char *path, const char *page)
{
if (!path)
path = "man";
diff --git a/builtin-prune-packed.c b/builtin-prune-packed.c
index 4942892e9f83abc7beed6570d508cfe76da126a0..00590b1c3c2cceda7a75537c8680a96cd2ef84d4 100644 (file)
--- a/builtin-prune-packed.c
+++ b/builtin-prune-packed.c
memcpy(pathname + len, de->d_name, 38);
if (opts & DRY_RUN)
printf("rm -f %s\n", pathname);
- else if (unlink(pathname) < 0)
- error("unable to unlink %s", pathname);
+ else
+ unlink_or_warn(pathname);
display_progress(progress, i + 1);
}
pathname[len] = 0;
diff --git a/builtin-prune.c b/builtin-prune.c
index 545e9c1f9458ed936e2a99a208f75b70f368294c..145ba83651e9c8560e20d6ab449ce64783bc65f5 100644 (file)
--- a/builtin-prune.c
+++ b/builtin-prune.c
}
printf("Removing stale temporary file %s\n", fullpath);
if (!show_only)
- unlink(fullpath);
+ unlink_or_warn(fullpath);
return 0;
}
(type > 0) ? typename(type) : "unknown");
}
if (!show_only)
- unlink(fullpath);
+ unlink_or_warn(fullpath);
return 0;
}
diff --git a/builtin-receive-pack.c b/builtin-receive-pack.c
index 4b9d9218d1ea5e270e1f0cab3eab72125cab9790..0b08da9b595432efa231eb59d88ecd2b422eb56a 100644 (file)
--- a/builtin-receive-pack.c
+++ b/builtin-receive-pack.c
unpack_status = unpack();
execute_commands(unpack_status);
if (pack_lockfile)
- unlink(pack_lockfile);
+ unlink_or_warn(pack_lockfile);
if (report_status)
report(unpack_status);
run_receive_hook(post_receive_hook);
diff --git a/builtin-remote.c b/builtin-remote.c
index 2ed752cbf1803c243145ecc73d6abbf758a2203a..71abf68404f5b260ba96208717d89e50e778dd36 100644 (file)
--- a/builtin-remote.c
+++ b/builtin-remote.c
path = git_path("remotes/%s", remote->name);
else if (remote->origin == REMOTE_BRANCHES)
path = git_path("branches/%s", remote->name);
- if (path && unlink(path))
- warning("failed to remove '%s'", path);
+ if (path)
+ unlink_or_warn(path);
return 0;
}
diff --git a/builtin-rerere.c b/builtin-rerere.c
index 020af7377bb9aa1bced7489d40169e3cb2ff7682..adfb7b5f48597c19c23235b74cf1a0c779985dc6 100644 (file)
--- a/builtin-rerere.c
+++ b/builtin-rerere.c
if (!has_rerere_resolution(name))
unlink_rr_item(name);
}
- unlink(git_path("rr-cache/MERGE_RR"));
+ unlink_or_warn(git_path("rr-cache/MERGE_RR"));
} else if (!strcmp(argv[1], "gc"))
garbage_collect(&merge_rr);
else if (!strcmp(argv[1], "status"))
diff --git a/builtin-show-branch.c b/builtin-show-branch.c
index 828e6f86de22f8def68a49b702a27521c248a012..c3afabbe914d699a8e0c80bdb5063ca51506167e 100644 (file)
--- a/builtin-show-branch.c
+++ b/builtin-show-branch.c
if (*ep == ',')
*base = ep + 1;
else if (*ep)
- die("unrecognized reflog param '%s'", arg + 9);
+ die("unrecognized reflog param '%s'", arg);
else
*base = NULL;
if (*cnt <= 0)
diff --git a/builtin-tag.c b/builtin-tag.c
index 01e73747d02f384c5e31b846340a4b586c84aab3..e54443009420d98dc281285e997b32f2a263b996 100644 (file)
--- a/builtin-tag.c
+++ b/builtin-tag.c
exit(128);
}
if (path) {
- unlink(path);
+ unlink_or_warn(path);
free(path);
}
}
diff --git a/builtin-update-index.c b/builtin-update-index.c
index 1fde893cfa9f6318ae1e9958b2f61159b01c7c6a..92beaaf4b3ca5520a9af27bde7f15dda46d80197 100644 (file)
--- a/builtin-update-index.c
+++ b/builtin-update-index.c
report("add '%s'", path);
free_return:
if (p < path || p > path + strlen(path))
- free((char*)p);
+ free((char *)p);
}
static void read_index_info(int line_termination)
const char *p = prefix_path(prefix, prefix_length, arg);
err |= unresolve_one(p);
if (p < arg || p > arg + strlen(arg))
- free((char*)p);
+ free((char *)p);
}
return err;
}
if (set_executable_bit)
chmod_path(set_executable_bit, p);
if (p < path || p > path + strlen(path))
- free((char*)p);
+ free((char *)p);
}
if (read_from_stdin) {
struct strbuf buf = STRBUF_INIT, nbuf = STRBUF_INIT;
diff --git a/builtin-verify-tag.c b/builtin-verify-tag.c
index 729a1593e61d87ad4596f07e7faedac81de64e81..7f7fda42f9b7ab272ff2b3fa4ad1984a79f11ce0 100644 (file)
--- a/builtin-verify-tag.c
+++ b/builtin-verify-tag.c
close(gpg.in);
ret = finish_command(&gpg);
- unlink(path);
+ unlink_or_warn(path);
return ret;
}
index d0d48b4c88b8f359be7c271dbe7ef8f816999960..b8503ad91c3b13ccaf87a6f596d13918f7ae114b 100644 (file)
--- a/cache.h
+++ b/cache.h
extern void pack_report(void);
extern int open_pack_index(struct packed_git *);
-extern unsigned char* use_pack(struct packed_git *, struct pack_window **, off_t, unsigned int *);
+extern unsigned char *use_pack(struct packed_git *, struct pack_window **, off_t, unsigned int *);
extern void close_pack_windows(struct packed_git *);
extern void unuse_pack(struct pack_window **);
extern void free_pack_by_name(const char *);
diff --git a/combine-diff.c b/combine-diff.c
index d210656861dcd6568e1228f39dff042ab374a584..60d03676bbd0dba7be79c7098d7cae553962ca98 100644 (file)
--- a/combine-diff.c
+++ b/combine-diff.c
path = q->queue[i]->two->path;
len = strlen(path);
p = xmalloc(combine_diff_path_size(num_parent, len));
- p->path = (char*) &(p->parent[num_parent]);
+ p->path = (char *) &(p->parent[num_parent]);
memcpy(p->path, path, len);
p->path[len] = 0;
p->len = len;
for (parents = commit->parents, num_parent = 0;
parents;
parents = parents->next, num_parent++)
- hashcpy((unsigned char*)(parent + num_parent),
+ hashcpy((unsigned char *)(parent + num_parent),
parents->item->object.sha1);
diff_tree_combined(sha1, parent, num_parent, dense, rev);
}
diff --git a/compat/mingw.c b/compat/mingw.c
index 2a047019e819740b0208bcaa9c18999c68d1c89c..cdeda1d9859fd545950e0c39ee7de3c9dc09bb07 100644 (file)
--- a/compat/mingw.c
+++ b/compat/mingw.c
if (!n)
return NULL;
- path = xmalloc((n+1)*sizeof(char*));
+ path = xmalloc((n+1)*sizeof(char *));
p = envpath;
i = 0;
do {
diff --git a/config.c b/config.c
index f76a78311e50310c02ebb30e3fc8b211ee41e562..1682273c12ab042d73fa32caf30d18fb13ef85e3 100644 (file)
--- a/config.c
+++ b/config.c
static struct {
int baselen;
- char* key;
+ char *key;
int do_not_match;
- regex_t* value_regex;
+ regex_t *value_regex;
int multi_replace;
size_t offset[MAX_MATCHES];
enum { START, SECTION_SEEN, SECTION_END_SEEN, KEY_SEEN } state;
int seen;
} store;
-static int matches(const char* key, const char* value)
+static int matches(const char *key, const char *value)
{
return !strcmp(key, store.key) &&
(store.value_regex == NULL ||
!regexec(store.value_regex, value, 0, NULL, 0)));
}
-static int store_aux(const char* key, const char* value, void *cb)
+static int store_aux(const char *key, const char *value, void *cb)
{
const char *ep;
size_t section_len;
return 4;
}
-static int store_write_section(int fd, const char* key)
+static int store_write_section(int fd, const char *key)
{
const char *dot;
int i, success;
return success;
}
-static int store_write_pair(int fd, const char* key, const char* value)
+static int store_write_pair(int fd, const char *key, const char *value)
{
int i, success;
int length = strlen(key + store.baselen + 1);
return success;
}
-static ssize_t find_beginning_of_line(const char* contents, size_t size,
- size_t offset_, int* found_bracket)
+static ssize_t find_beginning_of_line(const char *contents, size_t size,
+ size_t offset_, int *found_bracket)
{
size_t equal_offset = size, bracket_offset = size;
ssize_t offset;
return offset;
}
-int git_config_set(const char* key, const char* value)
+int git_config_set(const char *key, const char *value)
{
return git_config_set_multivar(key, value, NULL, 0);
}
* - the config file is removed and the lock file rename()d to it.
*
*/
-int git_config_set_multivar(const char* key, const char* value,
- const char* value_regex, int multi_replace)
+int git_config_set_multivar(const char *key, const char *value,
+ const char *value_regex, int multi_replace)
{
int i, dot;
int fd = -1, in_fd;
int ret;
- char* config_filename;
+ char *config_filename;
struct lock_file *lock = NULL;
- const char* last_dot = strrchr(key, '.');
+ const char *last_dot = strrchr(key, '.');
if (config_exclusive_filename)
config_filename = xstrdup(config_exclusive_filename);
goto out_free;
}
- store.key = (char*)key;
+ store.key = (char *)key;
if (!store_write_section(fd, key) ||
!store_write_pair(fd, key, value))
goto write_err_out;
} else {
struct stat st;
- char* contents;
+ char *contents;
size_t contents_sz, copy_begin, copy_end;
int i, new_line = 0;
index 1a90cb87f58b9595c3399793c26791557c9704f9..f44152c4331bb6a2de764e6dcc98c1ac39e517e5 100755 (executable)
elif [ -d "$g/rebase-merge" ]; then
r="|REBASE-m"
b="$(cat "$g/rebase-merge/head-name")"
- elif [ -f "$g/MERGE_HEAD" ]; then
- r="|MERGING"
- b="$(git symbolic-ref HEAD 2>/dev/null)"
else
+ if [ -f "$g/MERGE_HEAD" ]; then
+ r="|MERGING"
+ fi
if [ -f "$g/BISECT_LOG" ]; then
r="|BISECTING"
fi
- if ! b="$(git symbolic-ref HEAD 2>/dev/null)"; then
- if ! b="$(git describe --exact-match HEAD 2>/dev/null)"; then
- if [ -r "$g/HEAD" ]; then
- b="$(cut -c1-7 "$g/HEAD")..."
- fi
- fi
- fi
+
+ b="$(git symbolic-ref HEAD 2>/dev/null)" || {
+
+ b="$(
+ case "${GIT_PS1_DESCRIBE_STYLE-}" in
+ (contains)
+ git describe --contains HEAD ;;
+ (branch)
+ git describe --contains --all HEAD ;;
+ (describe)
+ git describe HEAD ;;
+ (* | default)
+ git describe --exact-match HEAD ;;
+ esac 2>/dev/null)" ||
+
+ b="$(cut -c1-7 "$g/HEAD" 2>/dev/null)..." ||
+ b="unknown"
+ b="($b)"
+ }
fi
local w
local c
if [ "true" = "$(git rev-parse --is-inside-git-dir 2>/dev/null)" ]; then
- if [ "true" = "$(git config --bool core.bare 2>/dev/null)" ]; then
+ if [ "true" = "$(git rev-parse --is-bare-repository 2>/dev/null)" ]; then
c="BARE:"
else
b="GIT_DIR!"
"
__git_log_pretty_formats="oneline short medium full fuller email raw format:"
+__git_log_date_formats="relative iso8601 rfc2822 short local default raw"
_git_log ()
{
return
;;
--date=*)
- __gitcomp "
- relative iso8601 rfc2822 short local default
- " "" "${cur##--date=}"
+ __gitcomp "$__git_log_date_formats" "" "${cur##--date=}"
return
;;
--*)
__gitcomp "$(__git_refs)"
}
+__git_send_email_confirm_options="always never auto cc compose"
+__git_send_email_suppresscc_options="author self cc ccbody sob cccmd body all"
+
_git_send_email ()
{
local cur="${COMP_WORDS[COMP_CWORD]}"
case "$cur" in
+ --confirm=*)
+ __gitcomp "
+ $__git_send_email_confirm_options
+ " "" "${cur##--confirm=}"
+ return
+ ;;
+ --suppress-cc=*)
+ __gitcomp "
+ $__git_send_email_suppresscc_options
+ " "" "${cur##--suppress-cc=}"
+
+ return
+ ;;
+ --smtp-encryption=*)
+ __gitcomp "ssl tls" "" "${cur##--smtp-encryption=}"
+ return
+ ;;
--*)
__gitcomp "--annotate --bcc --cc --cc-cmd --chain-reply-to
- --compose --dry-run --envelope-sender --from --identity
+ --compose --confirm= --dry-run --envelope-sender
+ --from --identity
--in-reply-to --no-chain-reply-to --no-signed-off-by-cc
--no-suppress-from --no-thread --quiet
--signed-off-by-cc --smtp-pass --smtp-server
- --smtp-server-port --smtp-ssl --smtp-user --subject
- --suppress-cc --suppress-from --thread --to
+ --smtp-server-port --smtp-encryption= --smtp-user
+ --subject --suppress-cc= --suppress-from --thread --to
--validate --no-validate"
return
;;
"
return
;;
+ help.format)
+ __gitcomp "man info web html"
+ return
+ ;;
+ log.date)
+ __gitcomp "$__git_log_date_formats"
+ return
+ ;;
+ sendemail.aliasesfiletype)
+ __gitcomp "mutt mailrc pine elm gnus"
+ return
+ ;;
+ sendemail.confirm)
+ __gitcomp "$__git_send_email_confirm_options"
+ return
+ ;;
+ sendemail.suppresscc)
+ __gitcomp "$__git_send_email_suppresscc_options"
+ return
+ ;;
*.*)
COMPREPLY=()
return
__gitcomp "$(__git_heads)" "$pfx" "$cur" "."
return
;;
+ guitool.*.*)
+ local pfx="${cur%.*}."
+ cur="${cur##*.}"
+ __gitcomp "
+ argprompt cmd confirm needsfile noconsole norescan
+ prompt revprompt revunmerged title
+ " "$pfx" "$cur"
+ return
+ ;;
+ difftool.*.*)
+ local pfx="${cur%.*}."
+ cur="${cur##*.}"
+ __gitcomp "cmd path" "$pfx" "$cur"
+ return
+ ;;
+ man.*.*)
+ local pfx="${cur%.*}."
+ cur="${cur##*.}"
+ __gitcomp "cmd path" "$pfx" "$cur"
+ return
+ ;;
+ mergetool.*.*)
+ local pfx="${cur%.*}."
+ cur="${cur##*.}"
+ __gitcomp "cmd path trustExitCode" "$pfx" "$cur"
+ return
+ ;;
+ pager.*)
+ local pfx="${cur%.*}."
+ cur="${cur#*.}"
+ __gitcomp "$(__git_all_commands)" "$pfx" "$cur"
+ return
+ ;;
remote.*.*)
local pfx="${cur%.*}."
cur="${cur##*.}"
__gitcomp "$(__git_remotes)" "$pfx" "$cur" "."
return
;;
+ url.*.*)
+ local pfx="${cur%.*}."
+ cur="${cur##*.}"
+ __gitcomp "insteadof" "$pfx" "$cur"
+ return
+ ;;
esac
__gitcomp "
+ alias.
apply.whitespace
branch.autosetupmerge
branch.autosetuprebase
color.diff.old
color.diff.plain
color.diff.whitespace
+ color.grep
+ color.grep.external
+ color.grep.match
color.interactive
color.interactive.header
color.interactive.help
core.autocrlf
core.bare
core.compression
+ core.createObject
core.deltaBaseCacheLimit
core.editor
core.excludesfile
diff.renameLimit
diff.renameLimit.
diff.renames
+ diff.suppressBlankEmpty
+ diff.tool
+ diff.wordRegex
+ difftool.
+ difftool.prompt
fetch.unpackLimit
+ format.attach
+ format.cc
format.headers
format.numbered
format.pretty
+ format.signoff
+ format.subjectprefix
format.suffix
+ format.thread
gc.aggressiveWindow
gc.auto
gc.autopacklimit
gc.rerereresolved
gc.rerereunresolved
gitcvs.allbinary
+ gitcvs.commitmsgannotation
gitcvs.dbTableNamePrefix
gitcvs.dbdriver
gitcvs.dbname
gitcvs.enabled
gitcvs.logfile
gitcvs.usecrlfattr
+ guitool.
gui.blamehistoryctx
gui.commitmsgwidth
gui.copyblamethreshold
http.sslVerify
i18n.commitEncoding
i18n.logOutputEncoding
+ imap.folder
+ imap.host
+ imap.pass
+ imap.port
+ imap.preformattedHTML
+ imap.sslverify
+ imap.tunnel
+ imap.user
instaweb.browser
instaweb.httpd
instaweb.local
instaweb.modulepath
instaweb.port
+ interactive.singlekey
log.date
log.showroot
+ mailmap.file
+ man.
man.viewer
merge.conflictstyle
merge.log
merge.stat
merge.tool
merge.verbosity
+ mergetool.
mergetool.keepBackup
+ mergetool.prompt
pack.compression
pack.deltaCacheLimit
pack.deltaCacheSize
pack.threads
pack.window
pack.windowMemory
+ pager.
pull.octopus
pull.twohead
+ push.default
+ rebase.stat
receive.denyCurrentBranch
receive.denyDeletes
receive.denyNonFastForwards
repack.usedeltabaseoffset
rerere.autoupdate
rerere.enabled
+ sendemail.aliasesfile
+ sendemail.aliasesfiletype
+ sendemail.bcc
+ sendemail.cc
+ sendemail.cccmd
+ sendemail.chainreplyto
+ sendemail.confirm
+ sendemail.envelopesender
+ sendemail.multiedit
+ sendemail.signedoffbycc
+ sendemail.smtpencryption
+ sendemail.smtppass
+ sendemail.smtpserver
+ sendemail.smtpserverport
+ sendemail.smtpuser
+ sendemail.suppresscc
+ sendemail.suppressfrom
+ sendemail.thread
+ sendemail.to
+ sendemail.validate
showbranch.default
status.relativePaths
status.showUntrackedFiles
tar.umask
transfer.unpackLimit
+ url.
user.email
user.name
user.signingkey
return
;;
--*)
- __gitcomp "--pretty= --format=
+ __gitcomp "--pretty= --format= --abbrev-commit --oneline
$__git_diff_common_options
"
return
__gitcomp "
--all --remotes --topo-order --current --more=
--list --independent --merge-base --no-name
- --sha1-name --topics --reflog
+ --sha1-name --sparse --topics --reflog
"
return
;;
index 90e7900e6d7aff2fadf9ba04f8d982733493411c..f3b57bf1d21e8256bf084076e50cbc9ff84a1ee8 100644 (file)
struct entry *entry;
if (get_sha1_hex(buffer, sha1))
- die("expected sha1, got '%s'", (char*) buffer);
+ die("expected sha1, got '%s'", (char *) buffer);
entry = convert_entry(sha1);
memcpy(buffer, sha1_to_hex(entry->new_sha1), 40);
}
@@ -100,7 +100,7 @@ static int write_subdirectory(void *buffer, unsigned long size, const char *base
if (!slash) {
newlen += sprintf(new + newlen, "%o %s", mode, path);
new[newlen++] = '\0';
- hashcpy((unsigned char*)new + newlen, (unsigned char *) buffer + len - 20);
+ hashcpy((unsigned char *)new + newlen, (unsigned char *) buffer + len - 20);
newlen += 20;
used += len;
@@ -271,7 +271,7 @@ static void convert_commit(void *buffer, unsigned long size, unsigned char *resu
unsigned long orig_size = size;
if (memcmp(buffer, "tree ", 5))
- die("Bad commit '%s'", (char*) buffer);
+ die("Bad commit '%s'", (char *) buffer);
convert_ascii_sha1((char *) buffer + 5);
buffer = (char *) buffer + 46; /* "tree " + "hex sha1" + "\n" */
while (!memcmp(buffer, "parent ", 7)) {
index b90ec004f29c30c4b6a6ea5339599d7a8db0fb8c..7ee64c7d77dd4a5665f70d80ffba1bcdecb9a408 100644 (file)
--- a/ctype.c
+++ b/ctype.c
A = GIT_ALPHA,
D = GIT_DIGIT,
G = GIT_GLOB_SPECIAL, /* *, ?, [, \\ */
- R = GIT_REGEX_SPECIAL, /* $, (, ), +, ., ^, {, | * */
+ R = GIT_REGEX_SPECIAL, /* $, (, ), +, ., ^, {, | */
};
unsigned char sane_ctype[256] = {
index 1165d30adfa783f7cbaa871e38a1370f9f9c4996..409a17d46424083b62f21e7e278393cee7bfa080 100644 (file)
--- a/date.c
+++ b/date.c
int number = 0;
struct tm tm, now;
struct timeval tv;
+ time_t time_sec;
char buffer[50];
if (parse_date(date, buffer, sizeof(buffer)) > 0)
return strtoul(buffer, NULL, 10);
gettimeofday(&tv, NULL);
- localtime_r(&tv.tv_sec, &tm);
+ time_sec = tv.tv_sec;
+ localtime_r(&time_sec, &tm);
now = tm;
for (;;) {
unsigned char c = *date;
diff --git a/decorate.c b/decorate.c
index 82d9e221eabab53acc418d0db6327e480836a5ed..e6fd8a7441a7ac6753d93e7156b9f71fe248262d 100644 (file)
--- a/decorate.c
+++ b/decorate.c
static unsigned int hash_obj(const struct object *obj, unsigned int n)
{
- unsigned int hash = *(unsigned int *)obj->sha1;
+ unsigned int hash;
+
+ memcpy(&hash, obj->sha1, sizeof(unsigned int));
return hash % n;
}
diff --git a/diff-no-index.c b/diff-no-index.c
index 42c1dd8ad3b0633767bf577975a895722f882565..4ebc1dbd87d9b90ad2aaa5c7d4601761e2d1d724 100644 (file)
--- a/diff-no-index.c
+++ b/diff-no-index.c
if (prefix) {
int len = strlen(prefix);
- revs->diffopt.paths = xcalloc(2, sizeof(char*));
+ revs->diffopt.paths = xcalloc(2, sizeof(char *));
for (i = 0; i < 2; i++) {
const char *p = argv[argc - 2 + i];
/*
index 3ac71686ebef3d3f9c8b0b72adf612e9535031a5..d24bff1e465d5b5e486ab461bd0548387736f109 100644 (file)
--- a/diff.c
+++ b/diff.c
int i;
for (i = 0; i < ARRAY_SIZE(diff_temp); i++) {
if (diff_temp[i].name == diff_temp[i].tmp_path)
- unlink(diff_temp[i].name);
+ unlink_or_warn(diff_temp[i].name);
diff_temp[i].name = NULL;
}
}
file->print_name = pname;
}
-static void show_stats(struct diffstat_t* data, struct diff_options *options)
+static void show_stats(struct diffstat_t *data, struct diff_options *options)
{
int i, len, add, del, adds = 0, dels = 0;
int max_change = 0, max_len = 0;
@@ -1025,7 +1025,7 @@ static void show_shortstats(struct diffstat_t* data, struct diff_options *option
total_files, adds, dels);
}
-static void show_numstat(struct diffstat_t* data, struct diff_options *options)
+static void show_numstat(struct diffstat_t *data, struct diff_options *options)
{
int i;
index c91ebfb46f929f926e1925c2db830c5847f3223b..0e6b752cd5833bfb970619983b4efa880aaaf134 100644 (file)
--- a/dir.c
+++ b/dir.c
}
/*
- * Does 'match' matches the given name?
+ * Does 'match' match the given name?
* A match is found if
*
* (1) the 'match' string is leading directory of 'name', or
if (len && string[len - 1] == '/') {
char *s;
x = xmalloc(sizeof(*x) + len);
- s = (char*)(x+1);
+ s = (char *)(x+1);
memcpy(s, string, len - 1);
s[len - 1] = '\0';
string = s;
dir->basebuf[baselen] = '\0';
}
-/* Scan the list and let the last match determines the fate.
+/* Scan the list and let the last match determine the fate.
* Return 1 for exclude, 0 for include and -1 for undecided.
*/
static int excluded_1(const char *pathname,
*/
static int read_directory_recursive(struct dir_struct *dir, const char *path, const char *base, int baselen, int check_only, const struct path_simplify *simplify)
{
- DIR *fdir = opendir(path);
+ DIR *fdir = opendir(*path ? path : ".");
int contents = 0;
if (fdir) {
index 915514aa5c43d3fd39f077a79f63ac27b841d255..cc841edf9051460b3a382ea25c0097f245ec8884 100644 (file)
--- a/entry.c
+++ b/entry.c
*/
if (mkdir(buf, 0777)) {
if (errno == EEXIST && state->force &&
- !unlink(buf) && !mkdir(buf, 0777))
+ !unlink_or_warn(buf) && !mkdir(buf, 0777))
continue;
die("cannot create directory at %s", buf);
}
diff --git a/fast-import.c b/fast-import.c
index 8d959af3b2346a03f737c47d6dd000dfd917f69d..a2a24588a99957d5af759ca6d8858366430ab3a3 100644 (file)
--- a/fast-import.c
+++ b/fast-import.c
struct tree_entry
{
struct tree_content *tree;
- struct atom_str* name;
+ struct atom_str *name;
struct tree_entry_ms
{
uint16_t mode;
static struct object_entry_pool *blocks;
static struct object_entry *object_table[1 << 16];
static struct mark_set *marks;
-static const char* mark_file;
+static const char *mark_file;
/* Our last blob */
static struct last_object last_blob = { STRBUF_INIT, 0, 0, 0 };
static struct branch *new_branch(const char *name)
{
unsigned int hc = hc_str(name, strlen(name)) % branch_table_sz;
- struct branch* b = lookup_branch(name);
+ struct branch *b = lookup_branch(name);
if (b)
die("Invalid attempt to create duplicate branch: %s", name);
struct packed_git *p = all_packs[k];
snprintf(name, sizeof(name), "%s/pack/pack-%s.keep",
get_object_directory(), sha1_to_hex(p->sha1));
- unlink(name);
+ unlink_or_warn(name);
}
}
}
else {
close(old_p->pack_fd);
- unlink(old_p->pack_name);
+ unlink_or_warn(old_p->pack_name);
}
free(old_p);
git_SHA_CTX c;
z_stream s;
- hdrlen = sprintf((char*)hdr,"%s %lu", typename(type),
+ hdrlen = sprintf((char *)hdr,"%s %lu", typename(type),
(unsigned long)dat->len) + 1;
git_SHA1_Init(&c);
git_SHA1_Update(&c, hdr, hdrlen);
static void load_tree(struct tree_entry *root)
{
- unsigned char* sha1 = root->versions[1].sha1;
+ unsigned char *sha1 = root->versions[1].sha1;
struct object_entry *myoe;
struct tree_content *t;
unsigned long size;
e->versions[0].mode = e->versions[1].mode;
e->name = to_atom(c, strlen(c));
c += e->name->str_len + 1;
- hashcpy(e->versions[0].sha1, (unsigned char*)c);
- hashcpy(e->versions[1].sha1, (unsigned char*)c);
+ hashcpy(e->versions[0].sha1, (unsigned char *)c);
+ hashcpy(e->versions[1].sha1, (unsigned char *)c);
c += 20;
}
free(buf);
diff --git a/git-compat-util.h b/git-compat-util.h
index 1ac16bde5ab853098f857a64c6f0fea9f4c3437f..c7cf2d5d9cdbfd4ed20c8b8ea49a36af7c138a4e 100644 (file)
--- a/git-compat-util.h
+++ b/git-compat-util.h
#define fstat_is_reliable() 1
#endif
+/*
+ * Preserves errno, prints a message, but gives no warning for ENOENT.
+ * Always returns the return value of unlink(2).
+ */
+int unlink_or_warn(const char *path);
+
#endif
diff --git a/git-gui/Makefile b/git-gui/Makefile
index 3ad8a21b30128ce21b6b6c28094d9af5e5866faf..b3580e9e48b6ac5d1a7fbd010f032445702f140f 100644 (file)
--- a/git-gui/Makefile
+++ b/git-gui/Makefile
ifeq ($(uname_S),Darwin)
TKFRAMEWORK = /Library/Frameworks/Tk.framework/Resources/Wish.app
- ifeq ($(shell expr "$(uname_R)" : '9\.'),2)
- TKFRAMEWORK = /System/Library/Frameworks/Tk.framework/Resources/Wish\ Shell.app
+ ifeq ($(shell echo "$(uname_R)" | awk -F. '{if ($$1 >= 9) print "y"}')_$(shell test -d $(TKFRAMEWORK) || echo n),y_n)
+ TKFRAMEWORK = /System/Library/Frameworks/Tk.framework/Resources/Wish.app
+ ifeq ($(shell test -d $(TKFRAMEWORK) || echo n),n)
+ TKFRAMEWORK = /System/Library/Frameworks/Tk.framework/Resources/Wish\ Shell.app
+ endif
endif
TKEXECUTABLE = $(shell basename "$(TKFRAMEWORK)" .app)
endif
diff --git a/git-gui/git-gui.sh b/git-gui/git-gui.sh
index e018e076f8a1b927ac07f612cf097992643a5db7..14b92ba786554f4e714c89191e5584a825964ab2 100755 (executable)
--- a/git-gui/git-gui.sh
+++ b/git-gui/git-gui.sh
set _appname {Git Gui}
set _gitdir {}
set _gitexec {}
+set _githtmldir {}
set _reponame {}
set _iscygwin {}
set _search_path {}
return [eval [list file join $_gitexec] $args]
}
+proc githtmldir {args} {
+ global _githtmldir
+ if {$_githtmldir eq {}} {
+ if {[catch {set _githtmldir [git --html-path]}]} {
+ # Git not installed or option not yet supported
+ return {}
+ }
+ if {[is_Cygwin]} {
+ set _githtmldir [exec cygpath \
+ --windows \
+ --absolute \
+ $_githtmldir]
+ } else {
+ set _githtmldir [file normalize $_githtmldir]
+ }
+ }
+ if {$args eq {}} {
+ return $_githtmldir
+ }
+ return [eval [list file join $_githtmldir] $args]
+}
+
proc reponame {} {
return $::_reponame
}
font create font_diffitalic
foreach class {Button Checkbutton Entry Label
- Labelframe Listbox Menu Message
+ Labelframe Listbox Message
Radiobutton Spinbox Text} {
option add *$class.font font_ui
}
+if {![is_MacOSX]} {
+ option add *Menu.font font_ui
+}
unset class
if {[is_Windows] || [is_MacOSX]} {
set default_config(branch.autosetupmerge) true
set default_config(merge.tool) {}
-set default_config(merge.keepbackup) true
+set default_config(mergetool.keepbackup) true
set default_config(merge.diffstat) true
set default_config(merge.summary) false
set default_config(merge.verbosity) 2
set _real_git_version $_git_version
regsub -- {[\-\.]dirty$} $_git_version {} _git_version
regsub {\.[0-9]+\.g[0-9a-f]+$} $_git_version {} _git_version
-regsub {\.rc[0-9]+$} $_git_version {} _git_version
+regsub {\.[a-zA-Z]+\.?[0-9]+$} $_git_version {} _git_version
regsub {\.GIT$} $_git_version {} _git_version
-regsub {\.[a-zA-Z]+\.[0-9]+$} $_git_version {} _git_version
+regsub {\.[a-zA-Z]+\.?[0-9]+$} $_git_version {} _git_version
if {![regexp {^[1-9]+(\.[0-9]+)+$} $_git_version]} {
catch {wm withdraw .}
set is_3way_diff 0
set is_conflict_diff 0
set selected_commit_type new
+set diff_empty_count 0
set nullid "0000000000000000000000000000000000000000"
set nullid2 "0000000000000000000000000000000000000001"
# freedesktop.org-conforming system is our best shot
set explorer "xdg-open"
}
- eval exec $explorer [file dirname [gitdir]] &
+ eval exec $explorer [list [file nativename [file dirname [gitdir]]]] &
}
set is_quitting 0
# -- Menu Bar
#
menu .mbar -tearoff 0
+if {[is_MacOSX]} {
+ # -- Apple Menu (Mac OS X only)
+ #
+ .mbar add cascade -label Apple -menu .mbar.apple
+ menu .mbar.apple
+}
.mbar add cascade -label [mc Repository] -menu .mbar.repository
.mbar add cascade -label [mc Edit] -menu .mbar.edit
if {[is_enabled branch]} {
if {[is_enabled multicommit] || [is_enabled singlecommit]} {
.mbar add cascade -label [mc Tools] -menu .mbar.tools
}
-. configure -menu .mbar
# -- Repository Menu
#
}
if {[is_MacOSX]} {
- # -- Apple Menu (Mac OS X only)
- #
- .mbar add cascade -label Apple -menu .mbar.apple
- menu .mbar.apple
-
- .mbar.apple add command -label [mc "About %s" [appname]] \
- -command do_about
- .mbar.apple add separator
- .mbar.apple add command \
- -label [mc "Preferences..."] \
- -command do_options \
- -accelerator $M1T-,
- bind . <$M1B-,> do_options
+ proc ::tk::mac::ShowPreferences {} {do_options}
} else {
# -- Edit Menu
#
.mbar add cascade -label [mc Help] -menu .mbar.help
menu .mbar.help
-if {![is_MacOSX]} {
+if {[is_MacOSX]} {
+ .mbar.apple add command -label [mc "About %s" [appname]] \
+ -command do_about
+ .mbar.apple add separator
+} else {
.mbar.help add command -label [mc "About %s" [appname]] \
-command do_about
}
+. configure -menu .mbar
+set doc_path [githtmldir]
+if {$doc_path ne {}} {
+ set doc_path [file join $doc_path index.html]
-set doc_path [file dirname [gitexec]]
-set doc_path [file join $doc_path Documentation index.html]
-
-if {[is_Cygwin]} {
- set doc_path [exec cygpath --mixed $doc_path]
+ if {[is_Cygwin]} {
+ set doc_path [exec cygpath --mixed $doc_path]
+ }
}
if {[file isfile $doc_path]} {
-command {tk_textPaste $ui_comm}
$ctxm add command \
-label [mc Delete] \
- -command {$ui_comm delete sel.first sel.last}
+ -command {catch {$ui_comm delete sel.first sel.last}}
$ctxm add separator
$ctxm add command \
-label [mc "Select All"] \
index ef1930b4911591566be4561b8c17c24e1cfbfaad..20d5e42307c70a976e56f922f787610cde5bac9f 100644 (file)
$w.check \
[mc "Delete Only If Merged Into"] \
]
- $w_check none [mc "Always (Do not perform merge test.)"]
+ $w_check none [mc "Always (Do not perform merge checks)"]
pack $w.check -anchor nw -fill x -pady 5 -padx 5
foreach h [load_all_heads] {
}
if {$to_delete eq {}} return
if {$check_cmt eq {}} {
- set msg [mc "Recovering deleted branches is difficult. \n\n Delete the selected branches?"]
+ set msg [mc "Recovering deleted branches is difficult.\n\nDelete the selected branches?"]
if {[tk_messageBox \
-icon warning \
-type yesno \
index caca88831b7066c573917542d24a52e832dcff34..9e7412c446f715588b9cfe21654a3447e8680e12 100644 (file)
field new_expr ; # expression the user saw/thinks this is
field new_hash ; # commit SHA-1 we are switching to
field new_ref ; # ref we are updating/creating
+field old_hash ; # commit SHA-1 that was checked out when we started
field parent_w .; # window that started us
field merge_type none; # type of merge to apply to existing branch
# -- Our in memory state should match the repository.
#
- repository_state curType curHEAD curMERGE_HEAD
+ repository_state curType old_hash curMERGE_HEAD
if {[string match amend* $commit_type]
&& $curType eq {normal}
- && $curHEAD eq $HEAD} {
- } elseif {$commit_type ne $curType || $HEAD ne $curHEAD} {
+ && $old_hash eq $HEAD} {
+ } elseif {$commit_type ne $curType || $HEAD ne $old_hash} {
info_popup [mc "Last scanned state does not match repository state.
Another Git program has modified this repository since the last scan. A rescan must be performed before the current branch can be changed.
return
}
- if {$curHEAD eq $new_hash} {
+ if {$old_hash eq $new_hash} {
_after_readtree $this
} elseif {[is_config_true gui.trustmtime]} {
_readtree $this
If you wanted to be on a branch, create one now starting from 'This Detached Checkout'."]
}
+ # -- Run the post-checkout hook.
+ #
+ set fd_ph [githook_read post-checkout $old_hash $new_hash 1]
+ if {$fd_ph ne {}} {
+ global pch_error
+ set pch_error {}
+ fconfigure $fd_ph -blocking 0 -translation binary -eofchar {}
+ fileevent $fd_ph readable [cb _postcheckout_wait $fd_ph]
+ } else {
+ _update_repo_state $this
+ }
+}
+
+method _postcheckout_wait {fd_ph} {
+ global pch_error
+
+ append pch_error [read $fd_ph]
+ fconfigure $fd_ph -blocking 1
+ if {[eof $fd_ph]} {
+ if {[catch {close $fd_ph}]} {
+ hook_failed_popup post-checkout $pch_error 0
+ }
+ unset pch_error
+ _update_repo_state $this
+ return
+ }
+ fconfigure $fd_ph -blocking 0
+}
+
+method _update_repo_state {} {
# -- Update our repository state. If we were previously in
# amend mode we need to toss the current buffer and do a
# full rescan to update our file lists. If we weren't in
# amend mode our file lists are accurate and we can avoid
# the rescan.
#
+ global selected_commit_type commit_type HEAD MERGE_HEAD PARENT
+ global ui_comm
+
unlock_index
+ set name [_name $this]
set selected_commit_type new
if {[string match amend* $commit_type]} {
$ui_comm delete 0.0 end
index f9ff62a3b22fcc481c88dc35268d06d2fc4a5795..633cc572bbd076ff957c0b8194b6645e899e53ad 100644 (file)
grid $w_body.where.l $w_body.where.t $w_body.where.b -sticky ew
pack $w_body.where -fill x
+ grid columnconfigure $w_body.where 1 -weight 1
+
trace add variable @local_path write [cb _write_local_path]
bind $w_body.h <Destroy> [list trace remove variable @local_path write [cb _write_local_path]]
update
return
}
- set done 1
+ # -- Run the post-checkout hook.
+ #
+ set fd_ph [githook_read post-checkout [string repeat 0 40] \
+ [git rev-parse HEAD] 1]
+ if {$fd_ph ne {}} {
+ global pch_error
+ set pch_error {}
+ fconfigure $fd_ph -blocking 0 -translation binary -eofchar {}
+ fileevent $fd_ph readable [cb _postcheckout_wait $fd_ph]
+ } else {
+ set done 1
+ }
+}
+
+method _postcheckout_wait {fd_ph} {
+ global pch_error
+
+ append pch_error [read $fd_ph]
+ fconfigure $fd_ph -blocking 1
+ if {[eof $fd_ph]} {
+ if {[catch {close $fd_ph}]} {
+ hook_failed_popup post-checkout $pch_error 0
+ }
+ unset pch_error
+ set done 1
+ return
+ }
+ fconfigure $fd_ph -blocking 0
}
######################################################################
grid $w_body.where.l $w_body.where.t $w_body.where.b -sticky ew
pack $w_body.where -fill x
+ grid columnconfigure $w_body.where 1 -weight 1
+
trace add variable @local_path write [cb _write_local_path]
bind $w_body.h <Destroy> [list trace remove variable @local_path write [cb _write_local_path]]
update
diff --git a/git-gui/lib/commit.tcl b/git-gui/lib/commit.tcl
index 9cc84105952d02f0171be0e23f0a82373bae0545..7f459cd5647f690a5e48ed7c29fc0d75eef89d0c 100644 (file)
--- a/git-gui/lib/commit.tcl
+++ b/git-gui/lib/commit.tcl
rescan ui_ready
}
+proc setup_commit_encoding {msg_wt {quiet 0}} {
+ global repo_config
+
+ if {[catch {set enc $repo_config(i18n.commitencoding)}]} {
+ set enc utf-8
+ }
+ set use_enc [tcl_encoding $enc]
+ if {$use_enc ne {}} {
+ fconfigure $msg_wt -encoding $use_enc
+ } else {
+ if {!$quiet} {
+ error_popup [mc "warning: Tcl does not support encoding '%s'." $enc]
+ }
+ fconfigure $msg_wt -encoding utf-8
+ }
+}
+
proc commit_tree {} {
global HEAD commit_type file_states ui_comm repo_config
global pch_error
set msg_p [gitdir GITGUI_EDITMSG]
set msg_wt [open $msg_p w]
fconfigure $msg_wt -translation lf
- if {[catch {set enc $repo_config(i18n.commitencoding)}]} {
- set enc utf-8
- }
- set use_enc [tcl_encoding $enc]
- if {$use_enc ne {}} {
- fconfigure $msg_wt -encoding $use_enc
- } else {
- error_popup [mc "warning: Tcl does not support encoding '%s'." $enc]
- fconfigure $msg_wt -encoding utf-8
- }
+ setup_commit_encoding $msg_wt
puts $msg_wt $msg
close $msg_wt
append reflogm " ($commit_type)"
}
set msg_fd [open $msg_p r]
+ setup_commit_encoding $msg_fd 1
gets $msg_fd subject
close $msg_fd
append reflogm {: } $subject
#
set fd_ph [githook_read post-commit]
if {$fd_ph ne {}} {
- upvar #0 pch_error$cmt_id pc_err
- set pc_err {}
+ global pch_error
+ set pch_error {}
fconfigure $fd_ph -blocking 0 -translation binary -eofchar {}
fileevent $fd_ph readable \
[list commit_postcommit_wait $fd_ph $cmt_id]
}
proc commit_postcommit_wait {fd_ph cmt_id} {
- upvar #0 pch_error$cmt_id pch_error
+ global pch_error
append pch_error [read $fd_ph]
fconfigure $fd_ph -blocking 1
diff --git a/git-gui/lib/diff.tcl b/git-gui/lib/diff.tcl
index bbbf15c875f437f486f652d204bcebf1e5f1a8e4..925b3f56c1c23cc5e0c2b270b9f7e160013c9009 100644 (file)
--- a/git-gui/lib/diff.tcl
+++ b/git-gui/lib/diff.tcl
proc handle_empty_diff {} {
global current_diff_path file_states file_lists
+ global diff_empty_count
set path $current_diff_path
set s $file_states($path)
if {[lindex $s 0] ne {_M}} return
+ # Prevent infinite rescan loops
+ incr diff_empty_count
+ if {$diff_empty_count > 1} return
+
info_popup [mc "No differences detected.
%s has no changes.
global ui_diff diff_active
global is_3way_diff is_conflict_diff current_diff_header
global current_diff_queue
+ global diff_empty_count
$ui_diff conf -state normal
while {[gets $fd line] >= 0} {
if {[$ui_diff index end] eq {2.0}} {
handle_empty_diff
+ } else {
+ set diff_empty_count 0
}
+
set callback [lindex $cont_info 1]
if {$callback ne {}} {
eval $callback
index eb2b4b56a4db4c20727432c7a71d5192d580ce9e..3fe90e697002baaa1c5fa8df4c3d3eae199b062d 100644 (file)
set merge_stages(3) {}
set merge_stages_buf {}
- set merge_stages_fd [eval git_read ls-files -u -z -- $path]
+ set merge_stages_fd [eval git_read ls-files -u -z -- {$path}]
fconfigure $merge_stages_fd -blocking 0 -translation binary -encoding binary
fileevent $merge_stages_fd readable [list read_merge_stages $merge_stages_fd $cont]
delete_temp_files $mtool_tmpfiles
ui_status [mc "Merge tool failed."]
} else {
- if {[is_config_true merge.keepbackup]} {
+ if {[is_config_true mergetool.keepbackup]} {
file rename -force -- $backup "$mtool_target.orig"
}
index 89eb0f70f289e48e2b875e2cd49eb026a266ca0e..4e02fc0d393ff9fe8d2983fec99a03db7f36273a 100644 (file)
-type yesno \
-title [wm title $w] \
-parent $w \
- -message [mc "Recovering deleted branches is difficult.
-
-Delete the selected branches?"]] ne yes} {
+ -message [mc "Recovering deleted branches is difficult.\n\nDelete the selected branches?"]] ne yes} {
return
}
index 38c3151b05c732d919943e44629bfc0a8c9fb617..2f20eb39c0e25d68e4e6b46fe3b14a46b84ae83e 100644 (file)
--- a/git-gui/lib/shortcut.tcl
+++ b/git-gui/lib/shortcut.tcl
$argv0]
win32_create_lnk $fn [list \
$sh -c \
- "CHERE_INVOKING=1 source /etc/profile;[sq $me]" \
+ "CHERE_INVOKING=1 source /etc/profile;[sq $me] &" \
] \
[file dirname [file normalize [gitdir]]]
} err]} {
diff --git a/git-gui/lib/tools.tcl b/git-gui/lib/tools.tcl
index 6ae63b6c7c61cb8f773ba5b9367c948820a0873a..95e6e5553ea86482d0fe9be77b07e805e01e3393 100644 (file)
--- a/git-gui/lib/tools.tcl
+++ b/git-gui/lib/tools.tcl
}
if {$ok} {
- set msg [mc "Tool completed succesfully: %s" $fullname]
+ set msg [mc "Tool completed successfully: %s" $fullname]
} else {
set msg [mc "Tool failed: %s" $fullname]
}
diff --git a/git-gui/po/de.po b/git-gui/po/de.po
index a6f730b4eb38365b5156b715e9bb2fd8772c672c..51abb50bb627d05d702de2d794c47b874c9667ca 100644 (file)
--- a/git-gui/po/de.po
+++ b/git-gui/po/de.po
msgid "The following branches are not completely merged into %s:"
msgstr "Folgende Zweige sind noch nicht mit »%s« zusammengeführt:"
-#: lib/branch_delete.tcl:115
-msgid ""
-"Recovering deleted branches is difficult. \n"
-"\n"
-" Delete the selected branches?"
-msgstr ""
-"Gelöschte Zweige können nur mit größerem Aufwand wiederhergestellt werden.\n"
-"\n"
-"Gewählte Zweige jetzt löschen?"
-
#: lib/branch_delete.tcl:141
#, tcl-format
msgid ""
#: lib/tools.tcl:149
#, tcl-format
-msgid "Tool completed succesfully: %s"
+msgid "Tool completed successfully: %s"
msgstr "Werkzeug erfolgreich abgeschlossen: %s"
#: lib/tools.tcl:151
diff --git a/git-gui/po/fr.po b/git-gui/po/fr.po
index 45773ab3d89f84757cf1f7dc0a7d0626ce88f1ec..a944ace6ced4c68b55b7b25023d546521a8ecd68 100644 (file)
--- a/git-gui/po/fr.po
+++ b/git-gui/po/fr.po
"\n"
"%s nécessite au moins Git 1.5.0.\n"
"\n"
-"Peut'on considérer que '%s' est en version 1.5.0 ?\n"
+"Peut-on considérer que '%s' est en version 1.5.0 ?\n"
#: git-gui.sh:1062
msgid "Git directory not found:"
#: git-gui.sh:1247 lib/checkout_op.tcl:305
msgid "Refreshing file status..."
-msgstr "Rafraichissement du status des fichiers..."
+msgstr "Rafraîchissement du statut des fichiers..."
#: git-gui.sh:1303
msgid "Scanning for modified files ..."
#: git-gui.sh:2281
msgid "Edit"
-msgstr "Edition"
+msgstr "Édition"
#: git-gui.sh:2283 lib/choose_rev.tcl:561
msgid "Branch"
#: git-gui.sh:2316
msgid "Visualize Current Branch's History"
-msgstr "Visualiser historique branche courante"
+msgstr "Visualiser l'historique de la branche courante"
#: git-gui.sh:2320
msgid "Visualize All Branch History"
#: git-gui.sh:2327
#, tcl-format
msgid "Browse %s's Files"
-msgstr "Naviguer l'arborescence de %s"
+msgstr "Parcourir l'arborescence de %s"
#: git-gui.sh:2329
#, tcl-format
msgid "Visualize %s's History"
-msgstr "Voir l'historique de la branche: %s"
+msgstr "Voir l'historique de la branche : %s"
#: git-gui.sh:2334 lib/database.tcl:27 lib/database.tcl:67
msgid "Database Statistics"
#: git-gui.sh:2347 git-gui.sh:2351 git-gui.sh:2355 lib/shortcut.tcl:7
#: lib/shortcut.tcl:39 lib/shortcut.tcl:71
msgid "Create Desktop Icon"
-msgstr "Créer icône sur bureau"
+msgstr "Créer une icône sur le bureau"
#: git-gui.sh:2363 lib/choose_repository.tcl:183 lib/choose_repository.tcl:191
msgid "Quit"
#: git-gui.sh:2484 lib/index.tcl:410
msgid "Revert Changes"
-msgstr "Annuler les modifications (revert)"
+msgstr "Annuler les modifications"
#: git-gui.sh:2491 git-gui.sh:3069
msgid "Show Less Context"
#: git-gui.sh:2614 lib/choose_repository.tcl:47 lib/choose_repository.tcl:56
msgid "Show SSH Key"
-msgstr "Montrer clé SSH"
+msgstr "Montrer la clé SSH"
#: git-gui.sh:2707
#, tcl-format
#: git-gui.sh:3078
msgid "Refresh"
-msgstr "Rafraichir"
+msgstr "Rafraîchir"
#: git-gui.sh:3099
msgid "Decrease Font Size"
#: git-gui.sh:3111 lib/blame.tcl:281
msgid "Encoding"
-msgstr "Encodage"
+msgstr "Codage des caractères"
#: git-gui.sh:3122
msgid "Apply/Reverse Hunk"
#: git-gui.sh:3137
msgid "Run Merge Tool"
-msgstr "Lancer outil de merge"
+msgstr "Lancer l'outil de fusion"
#: git-gui.sh:3142
msgid "Use Remote Version"
"Tcl binary distributed by Cygwin."
msgstr ""
"\n"
-"Ceci est du à un problème connu avec\n"
+"Ceci est dû à un problème connu avec\n"
"le binaire Tcl distribué par Cygwin."
#: git-gui.sh:3336
#: lib/blame.tcl:1021
msgid "Cannot find HEAD commit:"
-msgstr "Impossible de trouver le commit HEAD:"
+msgstr "Impossible de trouver le commit HEAD :"
#: lib/blame.tcl:1076
msgid "Cannot find parent commit:"
-msgstr "Impossible de trouver le commit parent:"
+msgstr "Impossible de trouver le commit parent :"
#: lib/blame.tcl:1091
msgid "Unable to display parent"
#: lib/blame.tcl:1232
msgid "Originally By:"
-msgstr "A l'origine par :"
+msgstr "À l'origine par :"
#: lib/blame.tcl:1238
msgid "In File:"
#: lib/branch_create.tcl:22
msgid "Create Branch"
-msgstr "Créer branche"
+msgstr "Créer une branche"
#: lib/branch_create.tcl:27
msgid "Create New Branch"
-msgstr "Créer nouvelle branche"
+msgstr "Créer une nouvelle branche"
#: lib/branch_create.tcl:31 lib/choose_repository.tcl:377
msgid "Create"
#: lib/branch_create.tcl:72
msgid "Update Existing Branch:"
-msgstr "Mettre à jour branche existante :"
+msgstr "Mettre à jour une branche existante :"
#: lib/branch_create.tcl:75
msgid "No"
#: lib/branch_create.tcl:80
msgid "Fast Forward Only"
-msgstr "Mise-à-jour rectiligne seulement (fast-forward)"
+msgstr "Mise à jour rectiligne seulement (fast-forward)"
#: lib/branch_create.tcl:85 lib/checkout_op.tcl:536
msgid "Reset"
#: lib/branch_delete.tcl:52
msgid "Delete Only If Merged Into"
-msgstr "Supprimer seulement si fusionnée dans:"
+msgstr "Supprimer seulement si fusionnée dans :"
#: lib/branch_delete.tcl:54
msgid "Always (Do not perform merge test.)"
msgid "The following branches are not completely merged into %s:"
msgstr "Les branches suivantes ne sont pas complètement fusionnées dans %s :"
-#: lib/branch_delete.tcl:115
-msgid ""
-"Recovering deleted branches is difficult. \n"
-"\n"
-" Delete the selected branches?"
-msgstr ""
-"Récupérer des branches supprimées est difficile.\n"
-"\n"
-"Supprimer les branches sélectionnées ?"
-
#: lib/branch_delete.tcl:141
#, tcl-format
msgid ""
"Failed to delete branches:\n"
"%s"
msgstr ""
-"La suppression des branches suivantes a échouée :\n"
+"La suppression des branches suivantes a échoué :\n"
"%s"
#: lib/branch_rename.tcl:14 lib/branch_rename.tcl:22
#: lib/checkout_op.tcl:261
#, tcl-format
msgid "Failed to update '%s'."
-msgstr "La mise à jour de '%s' a échouée."
+msgstr "La mise à jour de '%s' a échoué."
#: lib/checkout_op.tcl:273
msgid "Staging area (index) is already locked."
-msgstr "L'index (staging area) est déjà vérouillé"
+msgstr "L'index (staging area) est déjà verrouillé."
#: lib/checkout_op.tcl:288
msgid ""
"The rescan will be automatically started now.\n"
msgstr ""
"L'état lors de la dernière synchronisation ne correspond plus à l'état du "
-"dépôt\n"
+"dépôt.\n"
"\n"
"Un autre programme Git a modifié ce dépôt depuis la dernière "
"synchronisation. Une resynchronisation doit être effectuée avant de pouvoir "
"If you wanted to be on a branch, create one now starting from 'This Detached "
"Checkout'."
msgstr ""
-"Vous n'êtes plus ur une branche locale.\n"
+"Vous n'êtes plus sur une branche locale.\n"
"\n"
-"Si vous vouliez être sur une branche, créez en une maintenant en partant de "
+"Si vous vouliez être sur une branche, créez-en une maintenant en partant de "
"'Cet emprunt détaché'."
#: lib/checkout_op.tcl:468 lib/checkout_op.tcl:472
"mis à jour avec succès, mais la mise à jour d'un fichier interne à Git a "
"échouée.\n"
"\n"
-"Cela n'aurait pas du se produire. %s va abandonner et se terminer."
+"Cela n'aurait pas dû se produire. %s va abandonner et se terminer."
#: lib/choose_font.tcl:39
msgid "Select"
"This is example text.\n"
"If you like this text, it can be your font."
msgstr ""
-"C'est un texte d'exemple.\n"
-"Si vous aimez ce texte, vous pouvez choisir cette police"
+"Ceci est un texte d'exemple.\n"
+"Si vous aimez ce texte, vous pouvez choisir cette police."
#: lib/choose_repository.tcl:28
msgid "Git Gui"
#: lib/choose_repository.tcl:100 lib/choose_repository.tcl:465
msgid "Clone Existing Repository"
-msgstr "Cloner dépôt existant"
+msgstr "Cloner un dépôt existant"
#: lib/choose_repository.tcl:106
msgid "Clone..."
#: lib/choose_repository.tcl:113 lib/choose_repository.tcl:983
msgid "Open Existing Repository"
-msgstr "Ouvrir dépôt existant"
+msgstr "Ouvrir un dépôt existant"
#: lib/choose_repository.tcl:119
msgid "Open..."
#: lib/choose_repository.tcl:132
msgid "Recent Repositories"
-msgstr "Dépôt récemment utilisés"
+msgstr "Dépôts récemment utilisés"
#: lib/choose_repository.tcl:138
msgid "Open Recent Repository:"
-msgstr "Ouvrir dépôt récent :"
+msgstr "Ouvrir un dépôt récent :"
#: lib/choose_repository.tcl:302 lib/choose_repository.tcl:309
#: lib/choose_repository.tcl:316
#, tcl-format
msgid "Failed to create repository %s:"
-msgstr "La création du dépôt %s a échouée :"
+msgstr "La création du dépôt %s a échoué :"
#: lib/choose_repository.tcl:387
msgid "Directory:"
#: lib/choose_repository.tcl:473
msgid "Source Location:"
-msgstr "Emplacement source:"
+msgstr "Emplacement source :"
#: lib/choose_repository.tcl:484
msgid "Target Directory:"
-msgstr "Répertoire cible:"
+msgstr "Répertoire cible :"
#: lib/choose_repository.tcl:496
msgid "Clone Type:"
#: lib/choose_repository.tcl:622
msgid "Failed to configure origin"
-msgstr "La configuration de l'origine a échouée."
+msgstr "La configuration de l'origine a échoué."
#: lib/choose_repository.tcl:634
msgid "Counting objects"
#: lib/choose_repository.tcl:962
msgid "Initial file checkout failed."
-msgstr "Chargement initial du fichier échoué."
+msgstr "Le chargement initial du fichier a échoué."
#: lib/choose_repository.tcl:978
msgid "Open"
#: lib/choose_rev.tcl:338
msgid "No revision selected."
-msgstr "Pas de révision selectionnée."
+msgstr "Pas de révision sélectionnée."
#: lib/choose_rev.tcl:346
msgid "Revision expression is empty."
#: lib/choose_rev.tcl:531
msgid "Updated"
-msgstr "Mise-à-jour:"
+msgstr "Mise à jour:"
#: lib/choose_rev.tcl:559
msgid "URL"
msgstr ""
"Impossible de corriger pendant une fusion.\n"
"\n"
-"Vous êtes actuellement au milieu d'une fusion qui n'a pas été completement "
-"terminée. Vous ne pouvez pas corriger le commit précédant sauf si vous "
+"Vous êtes actuellement au milieu d'une fusion qui n'a pas été complètement "
+"terminée. Vous ne pouvez pas corriger le commit précédent sauf si vous "
"abandonnez la fusion courante.\n"
#: lib/commit.tcl:49
#: lib/commit.tcl:211
#, tcl-format
msgid "warning: Tcl does not support encoding '%s'."
-msgstr "attention : Tcl ne supporte pas l'encodage '%s'."
+msgstr "attention : Tcl ne supporte pas le codage '%s'."
#: lib/commit.tcl:227
msgid "Calling pre-commit hook..."
#: lib/commit.tcl:373
msgid "update-ref failed:"
-msgstr "update-ref a échoué"
+msgstr "update-ref a échoué :"
#: lib/commit.tcl:461
#, tcl-format
msgid "Created commit %s: %s"
-msgstr "Commit créé %s : %s"
+msgstr "Commit %s créé : %s"
#: lib/console.tcl:59
msgid "Working... please wait..."
"LOCAL: deleted\n"
"REMOTE:\n"
msgstr ""
-"LOCAL: supprimé\n"
-"DISTANT:\n"
+"LOCAL : supprimé\n"
+"DISTANT :\n"
#: lib/diff.tcl:125
msgid ""
"REMOTE: deleted\n"
"LOCAL:\n"
msgstr ""
-"DISTANT: supprimé\n"
-"LOCAL:\n"
+"DISTANT : supprimé\n"
+"LOCAL :\n"
#: lib/diff.tcl:132
msgid "LOCAL:\n"
-msgstr "LOCAL:\n"
+msgstr "LOCAL :\n"
#: lib/diff.tcl:135
msgid "REMOTE:\n"
-msgstr "DISTANT:\n"
+msgstr "DISTANT :\n"
#: lib/diff.tcl:197 lib/diff.tcl:296
#, tcl-format
"* Showing only first %d bytes.\n"
msgstr ""
"* Le fichier non suivi fait %d octets.\n"
-"* On montre seulement les premiers %d octets.\n"
+"* Seuls les %d premiers octets sont montrés.\n"
#: lib/diff.tcl:228
#, tcl-format
msgstr ""
"\n"
"* Fichier suivi raccourcis ici de %s.\n"
-"* Pour voir le fichier entier, utiliser un éditeur externe.\n"
+"* Pour voir le fichier entier, utilisez un éditeur externe.\n"
#: lib/diff.tcl:436
msgid "Failed to unstage selected hunk."
#: lib/index.tcl:6
msgid "Unable to unlock the index."
-msgstr "Impossible de dévérouiller l'index."
+msgstr "Impossible de déverrouiller l'index."
#: lib/index.tcl:15
msgid "Index Error"
#: lib/index.tcl:31
msgid "Unlock Index"
-msgstr "Déverouiller l'index"
+msgstr "Déverrouiller l'index"
#: lib/index.tcl:287
#, tcl-format
msgid "Unstaging %s from commit"
-msgstr "Désindexation de: %s"
+msgstr "Désindexation de : %s"
#: lib/index.tcl:326
msgid "Ready to commit."
msgstr ""
"Vous êtes au milieu d'une modification.\n"
"\n"
-"Le fichier %s est modifié.\n"
+"Le fichier %s a été modifié.\n"
"\n"
"Vous devriez terminer le commit courant avant de lancer une fusion. En "
"faisait comme cela, vous éviterez de devoir éventuellement abandonner une "
-"fusion ayant échouée.\n"
+"fusion ayant échoué.\n"
#: lib/merge.tcl:107
#, tcl-format
#: lib/merge.tcl:133
msgid "Merge failed. Conflict resolution is required."
-msgstr "La fusion a echouée. Il est nécessaire de résoudre les conflicts."
+msgstr "La fusion a echoué. Il est nécessaire de résoudre les conflits."
#: lib/merge.tcl:158
#, tcl-format
"\n"
"This operation can be undone only by restarting the merge."
msgstr ""
-"Noter que le diff ne montre que les modifications en conflict.\n"
+"Noter que le diff ne montre que les modifications en conflit.\n"
"\n"
"%s sera écrasé.\n"
"\n"
-"Cette opération ne peut être défaite qu'en relançant la fusion."
+"Cette opération ne peut être inversée qu'en relançant la fusion."
#: lib/mergetool.tcl:45
#, tcl-format
msgid "File %s seems to have unresolved conflicts, still stage?"
-msgstr "Le fichier %s semble avoir des conflicts non résolus, indéxer quand même ?"
+msgstr "Le fichier %s semble avoir des conflits non résolus, indexer quand même ?"
#: lib/mergetool.tcl:60
#, tcl-format
#: lib/mergetool.tcl:141
msgid "Cannot resolve deletion or link conflicts using a tool"
-msgstr "Impossible de résoudre la suppression ou de relier des conflicts en utilisant un outil"
+msgstr "Impossible de résoudre la suppression ou de relier des conflits en utilisant un outil"
#: lib/mergetool.tcl:146
msgid "Conflict file does not exist"
-msgstr "Le fichier en conflict n'existe pas."
+msgstr "Le fichier en conflit n'existe pas."
#: lib/mergetool.tcl:264
#, tcl-format
"Error retrieving versions:\n"
"%s"
msgstr ""
-"Erreur lors de la récupération des versions:\n"
+"Erreur lors de la récupération des versions :\n"
"%s"
#: lib/mergetool.tcl:343
"\n"
"%s"
msgstr ""
-"Impossible de lancer l'outil de fusion:\n"
+"Impossible de lancer l'outil de fusion :\n"
"\n"
"%s"
#: lib/option.tcl:11
#, tcl-format
msgid "Invalid global encoding '%s'"
-msgstr "Encodage global invalide '%s'"
+msgstr "Codage global '%s' invalide"
#: lib/option.tcl:19
#, tcl-format
msgid "Invalid repo encoding '%s'"
-msgstr "Encodage de dépôt invalide '%s'"
+msgstr "Codage de dépôt '%s' invalide"
#: lib/option.tcl:117
msgid "Restore Defaults"
#: lib/option.tcl:131
#, tcl-format
msgid "%s Repository"
-msgstr "Dépôt: %s"
+msgstr "Dépôt : %s"
#: lib/option.tcl:132
msgid "Global (All Repositories)"
#: lib/option.tcl:155
msgid "Default File Contents Encoding"
-msgstr "Encodage du contenu des fichiers par défaut"
+msgstr "Codage du contenu des fichiers par défaut"
#: lib/option.tcl:203
msgid "Change"
#: lib/option.tcl:314
msgid "Failed to completely save options:"
-msgstr "La sauvegarde complète des options a échouée :"
+msgstr "La sauvegarde complète des options a échoué :"
#: lib/remote.tcl:163
msgid "Remove Remote"
-msgstr "Supprimer dépôt distant"
+msgstr "Supprimer un dépôt distant"
#: lib/remote.tcl:168
msgid "Prune from"
#: lib/remote_add.tcl:19
msgid "Add Remote"
-msgstr "Ajouter dépôt distant"
+msgstr "Ajouter un dépôt distant"
#: lib/remote_add.tcl:24
msgid "Add New Remote"
-msgstr "Ajouter nouveau dépôt distant"
+msgstr "Ajouter un nouveau dépôt distant"
#: lib/remote_add.tcl:28 lib/tools_dlg.tcl:36
msgid "Add"
#: lib/remote_add.tcl:50
msgid "Location:"
-msgstr "Emplacement:"
+msgstr "Emplacement :"
#: lib/remote_add.tcl:62
msgid "Further Action"
#: lib/remote_add.tcl:71
msgid "Initialize Remote Repository and Push"
-msgstr "Initialiser dépôt distant et pousser"
+msgstr "Initialiser un dépôt distant et pousser"
#: lib/remote_add.tcl:77
msgid "Do Nothing Else Now"
#: lib/remote_branch_delete.tcl:29 lib/remote_branch_delete.tcl:34
msgid "Delete Branch Remotely"
-msgstr "Supprimer branche à distance"
+msgstr "Supprimer une branche à distance"
#: lib/remote_branch_delete.tcl:47
msgid "From Repository"
"One or more of the merge tests failed because you have not fetched the "
"necessary commits. Try fetching from %s first."
msgstr ""
-"Une ou plusieurs des tests de fusion ont échoués parce que vous n'avez pas "
-"récupéré les commits nécessaires. Essayez de récupéré à partir de %s d'abord."
+"Un ou plusieurs des tests de fusion ont échoué parce que vous n'avez pas "
+"récupéré les commits nécessaires. Essayez de récupérer à partir de %s d'abord."
#: lib/remote_branch_delete.tcl:207
msgid "Please select one or more branches to delete."
"\n"
"Delete the selected branches?"
msgstr ""
-"Récupérer des branches supprimées est difficile.\n"
+"Il est difficile de récupérer des branches supprimées.\n"
"\n"
-"Souhaitez vous supprimer les branches sélectionnées ?"
+"Supprimer les branches sélectionnées ?"
#: lib/remote_branch_delete.tcl:226
#, tcl-format
msgid "Deleting branches from %s"
-msgstr "Supprimer les branches de %s"
+msgstr "Suppression des branches de %s"
#: lib/remote_branch_delete.tcl:286
msgid "No repository selected."
#: lib/search.tcl:24
msgid "Prev"
-msgstr "Précédant"
+msgstr "Précédent"
#: lib/search.tcl:25
msgid "Case-Sensitive"
#: lib/shortcut.tcl:20 lib/shortcut.tcl:61
msgid "Cannot write shortcut:"
-msgstr "Impossible d'écrire le raccourcis :"
+msgstr "Impossible d'écrire le raccourci :"
#: lib/shortcut.tcl:136
msgid "Cannot write icon:"
#: lib/spellcheck.tcl:73
msgid "Spell checker silently failed on startup"
-msgstr "La vérification d'orthographe a échouée silentieusement au démarrage"
+msgstr "La vérification d'orthographe a échoué silencieusement au démarrage"
#: lib/spellcheck.tcl:80
msgid "Unrecognized spell checker"
#: lib/sshkey.tcl:56
msgid "Copy To Clipboard"
-msgstr "Copier dans le presse papier"
+msgstr "Copier dans le presse-papier"
#: lib/sshkey.tcl:70
msgid "Your OpenSSH Public Key"
-msgstr "Votre clé publique Open SSH"
+msgstr "Votre clé publique OpenSSH"
#: lib/sshkey.tcl:78
msgid "Generating..."
"\n"
"%s"
msgstr ""
-"Impossible de lancer ssh-keygen:\n"
+"Impossible de lancer ssh-keygen :\n"
"\n"
"%s"
#: lib/tools.tcl:90
#, tcl-format
msgid "Are you sure you want to run %s?"
-msgstr "Êtes vous sûr de vouloir lancer %s ?"
+msgstr "Êtes-vous sûr de vouloir lancer %s ?"
#: lib/tools.tcl:110
#, tcl-format
#: lib/tools.tcl:149
#, tcl-format
-msgid "Tool completed succesfully: %s"
+msgid "Tool completed successfully: %s"
msgstr "L'outil a terminé avec succès : %s"
#: lib/tools.tcl:151
#: lib/tools_dlg.tcl:22
msgid "Add Tool"
-msgstr "Ajouter outil"
+msgstr "Ajouter un outil"
#: lib/tools_dlg.tcl:28
msgid "Add New Tool Command"
-msgstr "Ajouter nouvelle commande d'outil"
+msgstr "Ajouter une nouvelle commande d'outil"
#: lib/tools_dlg.tcl:33
msgid "Add globally"
#: lib/tools_dlg.tcl:48
msgid "Use '/' separators to create a submenu tree:"
-msgstr "Utiliser les séparateurs '/' pour créer un arbre de sous menus :"
+msgstr "Utiliser les séparateurs '/' pour créer un arbre de sous-menus :"
#: lib/tools_dlg.tcl:61
msgid "Command:"
#: lib/tools_dlg.tcl:97
msgid "Run only if a diff is selected ($FILENAME not empty)"
-msgstr "Lancer seulement si un diff est selectionné ($FILENAME non vide)"
+msgstr "Lancer seulement si un diff est sélectionné ($FILENAME non vide)"
#: lib/tools_dlg.tcl:121
msgid "Please supply a name for the tool."
"Could not add tool:\n"
"%s"
msgstr ""
-"Impossible d'ajouter l'outil:\n"
+"Impossible d'ajouter l'outil :\n"
"%s"
#: lib/tools_dlg.tcl:190
diff --git a/git-gui/po/git-gui.pot b/git-gui/po/git-gui.pot
index 15aea0dc64fd9711bf7246d347ceaafc773d874b..53b7d3634d842a43f8043e3f825d4232e17588aa 100644 (file)
--- a/git-gui/po/git-gui.pot
+++ b/git-gui/po/git-gui.pot
msgid "The following branches are not completely merged into %s:"
msgstr ""
-#: lib/branch_delete.tcl:115
-msgid ""
-"Recovering deleted branches is difficult. \n"
-"\n"
-" Delete the selected branches?"
-msgstr ""
-
#: lib/branch_delete.tcl:141
#, tcl-format
msgid ""
#: lib/tools.tcl:149
#, tcl-format
-msgid "Tool completed succesfully: %s"
+msgid "Tool completed successfully: %s"
msgstr ""
#: lib/tools.tcl:151
diff --git a/git-gui/po/hu.po b/git-gui/po/hu.po
index f761b6415298809897f4f1cccdd0ea325ccbb1dc..0f87bc1cbeedca8d9040777a5484500d1071c2e6 100644 (file)
--- a/git-gui/po/hu.po
+++ b/git-gui/po/hu.po
msgid "The following branches are not completely merged into %s:"
msgstr "A következő branchek nem teljesen lettek merge-ölve ebbe: %s:"
-#: lib/branch_delete.tcl:115
-msgid ""
-"Recovering deleted branches is difficult. \n"
-"\n"
-" Delete the selected branches?"
-msgstr ""
-"A törölt branchek visszaállítása bonyolult. \n"
-"\n"
-" Biztosan törli a kiválasztott brancheket?"
-
#: lib/branch_delete.tcl:141
#, tcl-format
msgid ""
#: lib/tools.tcl:149
#, tcl-format
-msgid "Tool completed succesfully: %s"
+msgid "Tool completed successfully: %s"
msgstr "Az eszköz sikeresen befejeződött: %s"
#: lib/tools.tcl:151
diff --git a/git-gui/po/it.po b/git-gui/po/it.po
index 294e5958874f41c52071313cd107124b38c710a3..762632c22f9e5567bf4603e2958401e6156f1872 100644 (file)
--- a/git-gui/po/it.po
+++ b/git-gui/po/it.po
msgid "The following branches are not completely merged into %s:"
msgstr "I rami seguenti non sono stati fusi completamente in %s:"
-#: lib/branch_delete.tcl:115
-msgid ""
-"Recovering deleted branches is difficult. \n"
-"\n"
-" Delete the selected branches?"
-msgstr ""
-"Ricomporre rami cancellati può essere complicato. \n"
-"\n"
-" Eliminare i rami selezionati?"
-
#: lib/branch_delete.tcl:141
#, tcl-format
msgid ""
#: lib/tools.tcl:149
#, tcl-format
-msgid "Tool completed succesfully: %s"
+msgid "Tool completed successfully: %s"
msgstr "Il programma esterno è terminato con successo: %s"
#: lib/tools.tcl:151
diff --git a/git-gui/po/ja.po b/git-gui/po/ja.po
index 09d60bef74990e43a9515437d9b4de53e5df0b98..63c4695103a764acbf116df1946fd0bc311c47f0 100644 (file)
--- a/git-gui/po/ja.po
+++ b/git-gui/po/ja.po
msgid "The following branches are not completely merged into %s:"
msgstr "以下のブランチは %s に完全にマージされていません:"
-#: lib/branch_delete.tcl:115
-msgid ""
-"Recovering deleted branches is difficult. \n"
-"\n"
-" Delete the selected branches?"
-msgstr ""
-"ブランチを削除すると元に戻すのは困難です。 \n"
-"\n"
-" 選択したブランチを削除しますか?"
-
#: lib/branch_delete.tcl:141
#, tcl-format
msgid ""
#: lib/tools.tcl:149
#, tcl-format
-msgid "Tool completed succesfully: %s"
+msgid "Tool completed successfully: %s"
msgstr "ツールが完了しました: %s"
#: lib/tools.tcl:151
diff --git a/git-gui/po/nb.po b/git-gui/po/nb.po
index 1c5137d84ca8797238dbcf1cbc6fd80218fbca5f..6de93c28c2e2b7cb0413521c987161c4a4fcb59d 100644 (file)
--- a/git-gui/po/nb.po
+++ b/git-gui/po/nb.po
msgid "The following branches are not completely merged into %s:"
msgstr "Følgende grener er ikke fullstendig slått sammen med %s:"
-#: lib/branch_delete.tcl:115
-msgid ""
-"Recovering deleted branches is difficult. \n"
-"\n"
-" Delete the selected branches?"
-msgstr ""
-"Gjenoppretting av fjernede grener er vanskelig. \n"
-"\n"
-" Fjern valgte grener?"
-
#: lib/branch_delete.tcl:141
#, tcl-format
msgid ""
#: lib/tools.tcl:149
#, tcl-format
-msgid "Tool completed succesfully: %s"
+msgid "Tool completed successfully: %s"
msgstr "Verktøyet ble fullført med suksess: %s"
#: lib/tools.tcl:151
diff --git a/git-gui/po/ru.po b/git-gui/po/ru.po
index db55b3e0a69813cba16932212ee1b2ce0f5b2b9a..0ffc4a418fccb4453c1601ca87668e2d185e14db 100644 (file)
--- a/git-gui/po/ru.po
+++ b/git-gui/po/ru.po
msgstr ""
"Project-Id-Version: git-gui\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2008-03-14 07:18+0100\n"
+"POT-Creation-Date: 2008-12-08 08:31-0800\n"
"PO-Revision-Date: 2007-10-22 22:30-0200\n"
"Last-Translator: Alex Riesen <raa.lkml@gmail.com>\n"
"Language-Team: Russian Translation <git@vger.kernel.org>\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-#: git-gui.sh:41 git-gui.sh:634 git-gui.sh:648 git-gui.sh:661 git-gui.sh:744
-#: git-gui.sh:763
+#: git-gui.sh:41 git-gui.sh:737 git-gui.sh:751 git-gui.sh:764 git-gui.sh:847
+#: git-gui.sh:866
msgid "git-gui: fatal error"
msgstr "git-gui: критическая ошибка"
-#: git-gui.sh:593
+#: git-gui.sh:689
#, tcl-format
msgid "Invalid font specified in %s:"
msgstr "В %s установлен неверный шрифт:"
-#: git-gui.sh:620
+#: git-gui.sh:723
msgid "Main Font"
msgstr "Шрифт интерфейса"
-#: git-gui.sh:621
+#: git-gui.sh:724
msgid "Diff/Console Font"
msgstr "Шрифт консоли и изменений (diff)"
-#: git-gui.sh:635
+#: git-gui.sh:738
msgid "Cannot find git in PATH."
msgstr "git не найден в PATH."
-#: git-gui.sh:662
+#: git-gui.sh:765
msgid "Cannot parse Git version string:"
msgstr "Невозможно распознать строку версии Git: "
-#: git-gui.sh:680
+#: git-gui.sh:783
#, tcl-format
msgid ""
"Git version cannot be determined.\n"
"Assume '%s' is version 1.5.0?\n"
msgstr ""
"Невозможно определить версию Git\n"
+"\n"
"%s указывает на версию '%s'.\n"
"\n"
"для %s требуется версия Git, начиная с 1.5.0\n"
"\n"
"Принять '%s' как версию 1.5.0?\n"
-#: git-gui.sh:918
+#: git-gui.sh:1062
msgid "Git directory not found:"
msgstr "Каталог Git не найден:"
-#: git-gui.sh:925
+#: git-gui.sh:1069
msgid "Cannot move to top of working directory:"
msgstr "Невозможно перейти к корню рабочего каталога репозитория: "
-#: git-gui.sh:932
+#: git-gui.sh:1076
msgid "Cannot use funny .git directory:"
-msgstr "Каталог.git испорчен: "
+msgstr "Каталог .git испорчен: "
-#: git-gui.sh:937
+#: git-gui.sh:1081
msgid "No working directory"
msgstr "Отсутствует рабочий каталог"
-#: git-gui.sh:1084 lib/checkout_op.tcl:283
+#: git-gui.sh:1247 lib/checkout_op.tcl:305
msgid "Refreshing file status..."
msgstr "Обновление информации о состоянии файлов..."
-#: git-gui.sh:1149
+#: git-gui.sh:1303
msgid "Scanning for modified files ..."
msgstr "Поиск измененных файлов..."
-#: git-gui.sh:1324 lib/browser.tcl:246
+#: git-gui.sh:1367
+msgid "Calling prepare-commit-msg hook..."
+msgstr "Вызов программы поддержки репозитория prepare-commit-msg..."
+
+#: git-gui.sh:1384
+msgid "Commit declined by prepare-commit-msg hook."
+msgstr "Сохранение прервано программой поддержки репозитория prepare-commit-msg"
+
+#: git-gui.sh:1542 lib/browser.tcl:246
msgid "Ready."
msgstr "Готово."
-#: git-gui.sh:1590
+#: git-gui.sh:1819
msgid "Unmodified"
msgstr "Не изменено"
-#: git-gui.sh:1592
+#: git-gui.sh:1821
msgid "Modified, not staged"
msgstr "Изменено, не подготовлено"
-#: git-gui.sh:1593 git-gui.sh:1598
+#: git-gui.sh:1822 git-gui.sh:1830
msgid "Staged for commit"
msgstr "Подготовлено для сохранения"
-#: git-gui.sh:1594 git-gui.sh:1599
+#: git-gui.sh:1823 git-gui.sh:1831
msgid "Portions staged for commit"
msgstr "Части, подготовленные для сохранения"
-#: git-gui.sh:1595 git-gui.sh:1600
+#: git-gui.sh:1824 git-gui.sh:1832
msgid "Staged for commit, missing"
msgstr "Подготовлено для сохранения, отсутствует"
-#: git-gui.sh:1597
+#: git-gui.sh:1826
+msgid "File type changed, not staged"
+msgstr "Тип файла изменён, не подготовлено"
+
+#: git-gui.sh:1827
+msgid "File type changed, staged"
+msgstr "Тип файла изменён, подготовлено"
+
+#: git-gui.sh:1829
msgid "Untracked, not staged"
msgstr "Не отслеживается, не подготовлено"
-#: git-gui.sh:1602
+#: git-gui.sh:1834
msgid "Missing"
msgstr "Отсутствует"
-#: git-gui.sh:1603
+#: git-gui.sh:1835
msgid "Staged for removal"
msgstr "Подготовлено для удаления"
-#: git-gui.sh:1604
+#: git-gui.sh:1836
msgid "Staged for removal, still present"
msgstr "Подготовлено для удаления, еще не удалено"
-#: git-gui.sh:1606 git-gui.sh:1607 git-gui.sh:1608 git-gui.sh:1609
+#: git-gui.sh:1838 git-gui.sh:1839 git-gui.sh:1840 git-gui.sh:1841
+#: git-gui.sh:1842 git-gui.sh:1843
msgid "Requires merge resolution"
-msgstr "Требуется разрешение конфликта при объединении"
+msgstr "Требуется разрешение конфликта при слиянии"
-#: git-gui.sh:1644
+#: git-gui.sh:1878
msgid "Starting gitk... please wait..."
-msgstr "Ð\97апÑ\83Ñ\81каеÑ\82Ñ\81Ñ\8f gitk... пожалÑ\83йÑ\81Ñ\82а, ждиÑ\82е..."
+msgstr "Ð\97апÑ\83Ñ\81каеÑ\82Ñ\81Ñ\8f gitk... Ð\9fодождиÑ\82е, пожалÑ\83йÑ\81Ñ\82а..."
-#: git-gui.sh:1653
-#, tcl-format
-msgid ""
-"Unable to start gitk:\n"
-"\n"
-"%s does not exist"
-msgstr ""
-"Не удалось запустить gitk:\n"
-"\n"
-"%s не существует"
+#: git-gui.sh:1887
+msgid "Couldn't find gitk in PATH"
+msgstr "gitk не найден в PATH."
-#: git-gui.sh:1860 lib/choose_repository.tcl:36
+#: git-gui.sh:2280 lib/choose_repository.tcl:36
msgid "Repository"
msgstr "Репозиторий"
-#: git-gui.sh:1861
+#: git-gui.sh:2281
msgid "Edit"
msgstr "Редактировать"
-#: git-gui.sh:1863 lib/choose_rev.tcl:561
+#: git-gui.sh:2283 lib/choose_rev.tcl:561
msgid "Branch"
msgstr "Ветвь"
-#: git-gui.sh:1866 lib/choose_rev.tcl:548
+#: git-gui.sh:2286 lib/choose_rev.tcl:548
msgid "Commit@@noun"
msgstr "Состояние"
-#: git-gui.sh:1869 lib/merge.tcl:120 lib/merge.tcl:149 lib/merge.tcl:167
+#: git-gui.sh:2289 lib/merge.tcl:121 lib/merge.tcl:150 lib/merge.tcl:168
msgid "Merge"
-msgstr "Ð\9eбÑ\8aединиÑ\82Ñ\8c"
+msgstr "СлиÑ\8fние"
-#: git-gui.sh:1870 lib/choose_rev.tcl:557
+#: git-gui.sh:2290 lib/choose_rev.tcl:557
msgid "Remote"
msgstr "Внешние репозитории"
-#: git-gui.sh:1879
+#: git-gui.sh:2293
+msgid "Tools"
+msgstr "Вспомогательные операции"
+
+#: git-gui.sh:2302
+msgid "Explore Working Copy"
+msgstr "Просмотр рабочего каталога"
+
+#: git-gui.sh:2307
msgid "Browse Current Branch's Files"
msgstr "Просмотреть файлы текущей ветви"
-#: git-gui.sh:1883
+#: git-gui.sh:2311
msgid "Browse Branch Files..."
msgstr "Показать файлы ветви..."
-#: git-gui.sh:1888
+#: git-gui.sh:2316
msgid "Visualize Current Branch's History"
-msgstr "Ð\98Ñ\81Ñ\82оÑ\80иÑ\8f Ñ\82екÑ\83Ñ\89ей веÑ\82ви наглÑ\8fдно"
+msgstr "Ð\9fоказаÑ\82Ñ\8c иÑ\81Ñ\82оÑ\80иÑ\8e Ñ\82екÑ\83Ñ\89ей веÑ\82ви"
-#: git-gui.sh:1892
+#: git-gui.sh:2320
msgid "Visualize All Branch History"
-msgstr "Ð\98Ñ\81Ñ\82оÑ\80иÑ\8f вÑ\81еÑ\85 веÑ\82вей наглÑ\8fдно"
+msgstr "Ð\9fоказаÑ\82Ñ\8c иÑ\81Ñ\82оÑ\80иÑ\8e вÑ\81еÑ\85 веÑ\82вей"
-#: git-gui.sh:1899
+#: git-gui.sh:2327
#, tcl-format
msgid "Browse %s's Files"
msgstr "Показать файлы ветви %s"
-#: git-gui.sh:1901
+#: git-gui.sh:2329
#, tcl-format
msgid "Visualize %s's History"
-msgstr "Ð\98Ñ\81Ñ\82оÑ\80иÑ\8f веÑ\82ви %s наглÑ\8fдно"
+msgstr "Ð\9fоказаÑ\82Ñ\8c иÑ\81Ñ\82оÑ\80иÑ\8e веÑ\82ви %s"
-#: git-gui.sh:1906 lib/database.tcl:27 lib/database.tcl:67
+#: git-gui.sh:2334 lib/database.tcl:27 lib/database.tcl:67
msgid "Database Statistics"
msgstr "Статистика базы данных"
-#: git-gui.sh:1909 lib/database.tcl:34
+#: git-gui.sh:2337 lib/database.tcl:34
msgid "Compress Database"
msgstr "Сжать базу данных"
-#: git-gui.sh:1912
+#: git-gui.sh:2340
msgid "Verify Database"
msgstr "Проверить базу данных"
-#: git-gui.sh:1919 git-gui.sh:1923 git-gui.sh:1927 lib/shortcut.tcl:7
+#: git-gui.sh:2347 git-gui.sh:2351 git-gui.sh:2355 lib/shortcut.tcl:7
#: lib/shortcut.tcl:39 lib/shortcut.tcl:71
msgid "Create Desktop Icon"
msgstr "Создать ярлык на рабочем столе"
-#: git-gui.sh:1932 lib/choose_repository.tcl:177 lib/choose_repository.tcl:185
+#: git-gui.sh:2363 lib/choose_repository.tcl:183 lib/choose_repository.tcl:191
msgid "Quit"
msgstr "Выход"
-#: git-gui.sh:1939
+#: git-gui.sh:2371
msgid "Undo"
msgstr "Отменить"
-#: git-gui.sh:1942
+#: git-gui.sh:2374
msgid "Redo"
msgstr "Повторить"
-#: git-gui.sh:1946 git-gui.sh:2443
+#: git-gui.sh:2378 git-gui.sh:2937
msgid "Cut"
msgstr "Вырезать"
-#: git-gui.sh:1949 git-gui.sh:2446 git-gui.sh:2520 git-gui.sh:2614
+#: git-gui.sh:2381 git-gui.sh:2940 git-gui.sh:3014 git-gui.sh:3096
#: lib/console.tcl:69
msgid "Copy"
msgstr "Копировать"
-#: git-gui.sh:1952 git-gui.sh:2449
+#: git-gui.sh:2384 git-gui.sh:2943
msgid "Paste"
msgstr "Вставить"
-#: git-gui.sh:1955 git-gui.sh:2452 lib/branch_delete.tcl:26
+#: git-gui.sh:2387 git-gui.sh:2946 lib/branch_delete.tcl:26
#: lib/remote_branch_delete.tcl:38
msgid "Delete"
msgstr "Удалить"
-#: git-gui.sh:1959 git-gui.sh:2456 git-gui.sh:2618 lib/console.tcl:71
+#: git-gui.sh:2391 git-gui.sh:2950 git-gui.sh:3100 lib/console.tcl:71
msgid "Select All"
msgstr "Выделить все"
-#: git-gui.sh:1968
+#: git-gui.sh:2400
msgid "Create..."
msgstr "Создать..."
-#: git-gui.sh:1974
+#: git-gui.sh:2406
msgid "Checkout..."
msgstr "Перейти..."
-#: git-gui.sh:1980
+#: git-gui.sh:2412
msgid "Rename..."
msgstr "Переименовать..."
-#: git-gui.sh:1985 git-gui.sh:2085
+#: git-gui.sh:2417
msgid "Delete..."
msgstr "Удалить..."
-#: git-gui.sh:1990
+#: git-gui.sh:2422
msgid "Reset..."
msgstr "Сбросить..."
-#: git-gui.sh:2002 git-gui.sh:2389
+#: git-gui.sh:2432
+msgid "Done"
+msgstr "Завершено"
+
+#: git-gui.sh:2434
+msgid "Commit@@verb"
+msgstr "Сохранить"
+
+#: git-gui.sh:2443 git-gui.sh:2878
msgid "New Commit"
msgstr "Новое состояние"
-#: git-gui.sh:2010 git-gui.sh:2396
+#: git-gui.sh:2451 git-gui.sh:2885
msgid "Amend Last Commit"
msgstr "Исправить последнее состояние"
-#: git-gui.sh:2019 git-gui.sh:2356 lib/remote_branch_delete.tcl:99
+#: git-gui.sh:2461 git-gui.sh:2839 lib/remote_branch_delete.tcl:99
msgid "Rescan"
msgstr "Перечитать"
-#: git-gui.sh:2025
+#: git-gui.sh:2467
msgid "Stage To Commit"
msgstr "Подготовить для сохранения"
-#: git-gui.sh:2031
+#: git-gui.sh:2473
msgid "Stage Changed Files To Commit"
msgstr "Подготовить измененные файлы для сохранения"
-#: git-gui.sh:2037
+#: git-gui.sh:2479
msgid "Unstage From Commit"
msgstr "Убрать из подготовленного"
-#: git-gui.sh:2042 lib/index.tcl:395
+#: git-gui.sh:2484 lib/index.tcl:410
msgid "Revert Changes"
msgstr "Отменить изменения"
-#: git-gui.sh:2049 git-gui.sh:2368 git-gui.sh:2467
-msgid "Sign Off"
-msgstr "Ð\9fодпиÑ\81аÑ\82Ñ\8c"
+#: git-gui.sh:2491 git-gui.sh:3083
+msgid "Show Less Context"
+msgstr "Ð\9cенÑ\8cÑ\88е конÑ\82екÑ\81Ñ\82а"
-#: git-gui.sh:2053 git-gui.sh:2372
-msgid "Commit@@verb"
-msgstr "Сохранить"
+#: git-gui.sh:2495 git-gui.sh:3087
+msgid "Show More Context"
+msgstr "Больше контекста"
+
+#: git-gui.sh:2502 git-gui.sh:2852 git-gui.sh:2961
+msgid "Sign Off"
+msgstr "Вставить Signed-off-by"
-#: git-gui.sh:2064
+#: git-gui.sh:2518
msgid "Local Merge..."
-msgstr "Локальное объединение..."
+msgstr "Локальное слияние..."
-#: git-gui.sh:2069
+#: git-gui.sh:2523
msgid "Abort Merge..."
-msgstr "Прервать объединение..."
+msgstr "Прервать слияние..."
+
+#: git-gui.sh:2535 git-gui.sh:2575
+msgid "Add..."
+msgstr "Добавить..."
-#: git-gui.sh:2081
+#: git-gui.sh:2539
msgid "Push..."
msgstr "Отправить..."
-#: git-gui.sh:2092 lib/choose_repository.tcl:41
-msgid "Apple"
-msgstr ""
+#: git-gui.sh:2543
+msgid "Delete Branch..."
+msgstr "Удалить ветвь..."
-#: git-gui.sh:2095 git-gui.sh:2117 lib/about.tcl:14
-#: lib/choose_repository.tcl:44 lib/choose_repository.tcl:50
+#: git-gui.sh:2553 git-gui.sh:2589 lib/about.tcl:14
+#: lib/choose_repository.tcl:44 lib/choose_repository.tcl:53
#, tcl-format
msgid "About %s"
msgstr "О %s"
-#: git-gui.sh:2099
+#: git-gui.sh:2557
msgid "Preferences..."
msgstr "Настройки..."
-#: git-gui.sh:2107 git-gui.sh:2639
+#: git-gui.sh:2565 git-gui.sh:3129
msgid "Options..."
msgstr "Настройки..."
-#: git-gui.sh:2113 lib/choose_repository.tcl:47
+#: git-gui.sh:2576
+msgid "Remove..."
+msgstr "Удалить..."
+
+#: git-gui.sh:2585 lib/choose_repository.tcl:50
msgid "Help"
msgstr "Помощь"
-#: git-gui.sh:2154
+#: git-gui.sh:2611
msgid "Online Documentation"
msgstr "Документация в интернете"
-#: git-gui.sh:2238
+#: git-gui.sh:2614 lib/choose_repository.tcl:47 lib/choose_repository.tcl:56
+msgid "Show SSH Key"
+msgstr "Показать ключ SSH"
+
+#: git-gui.sh:2721
#, tcl-format
msgid "fatal: cannot stat path %s: No such file or directory"
msgstr "критическая ошибка: %s: нет такого файла или каталога"
-#: git-gui.sh:2271
+#: git-gui.sh:2754
msgid "Current Branch:"
msgstr "Текущая ветвь:"
-#: git-gui.sh:2292
+#: git-gui.sh:2775
msgid "Staged Changes (Will Commit)"
msgstr "Подготовлено (будет сохранено)"
-#: git-gui.sh:2312
+#: git-gui.sh:2795
msgid "Unstaged Changes"
msgstr "Изменено (не будет сохранено)"
-#: git-gui.sh:2362
+#: git-gui.sh:2845
msgid "Stage Changed"
msgstr "Подготовить все"
-#: git-gui.sh:2378 lib/transport.tcl:93 lib/transport.tcl:182
+#: git-gui.sh:2864 lib/transport.tcl:104 lib/transport.tcl:193
msgid "Push"
msgstr "Отправить"
-#: git-gui.sh:2408
+#: git-gui.sh:2899
msgid "Initial Commit Message:"
msgstr "Комментарий к первому состоянию:"
-#: git-gui.sh:2409
+#: git-gui.sh:2900
msgid "Amended Commit Message:"
msgstr "Комментарий к исправленному состоянию:"
-#: git-gui.sh:2410
+#: git-gui.sh:2901
msgid "Amended Initial Commit Message:"
msgstr "Комментарий к исправленному первоначальному состоянию:"
-#: git-gui.sh:2411
+#: git-gui.sh:2902
msgid "Amended Merge Commit Message:"
-msgstr "Комментарий к исправленному объединению:"
+msgstr "Комментарий к исправленному слиянию:"
-#: git-gui.sh:2412
+#: git-gui.sh:2903
msgid "Merge Commit Message:"
-msgstr "Комментарий к объединению:"
+msgstr "Комментарий к слиянию:"
-#: git-gui.sh:2413
+#: git-gui.sh:2904
msgid "Commit Message:"
msgstr "Комментарий к состоянию:"
-#: git-gui.sh:2459 git-gui.sh:2622 lib/console.tcl:73
+#: git-gui.sh:2953 git-gui.sh:3104 lib/console.tcl:73
msgid "Copy All"
msgstr "Копировать все"
-#: git-gui.sh:2483 lib/blame.tcl:107
+#: git-gui.sh:2977 lib/blame.tcl:104
msgid "File:"
msgstr "Файл:"
-#: git-gui.sh:2589
-msgid "Apply/Reverse Hunk"
-msgstr "Применить/Убрать изменение"
-
-#: git-gui.sh:2595
-msgid "Show Less Context"
-msgstr "Меньше контекста"
-
-#: git-gui.sh:2602
-msgid "Show More Context"
-msgstr "Больше контекста"
-
-#: git-gui.sh:2610
+#: git-gui.sh:3092
msgid "Refresh"
msgstr "Обновить"
-#: git-gui.sh:2631
+#: git-gui.sh:3113
msgid "Decrease Font Size"
msgstr "Уменьшить размер шрифта"
-#: git-gui.sh:2635
+#: git-gui.sh:3117
msgid "Increase Font Size"
msgstr "Увеличить размер шрифта"
-#: git-gui.sh:2646
+#: git-gui.sh:3125 lib/blame.tcl:281
+msgid "Encoding"
+msgstr "Кодировка"
+
+#: git-gui.sh:3136
+msgid "Apply/Reverse Hunk"
+msgstr "Применить/Убрать изменение"
+
+#: git-gui.sh:3141
+msgid "Apply/Reverse Line"
+msgstr "Применить/Убрать строку"
+
+#: git-gui.sh:3151
+msgid "Run Merge Tool"
+msgstr "Запустить программу слияния"
+
+#: git-gui.sh:3156
+msgid "Use Remote Version"
+msgstr "Взять внешнюю версию"
+
+#: git-gui.sh:3160
+msgid "Use Local Version"
+msgstr "Взять локальную версию"
+
+#: git-gui.sh:3164
+msgid "Revert To Base"
+msgstr "Отменить изменения"
+
+#: git-gui.sh:3183
msgid "Unstage Hunk From Commit"
msgstr "Не сохранять часть"
-#: git-gui.sh:2648
+#: git-gui.sh:3184
+msgid "Unstage Line From Commit"
+msgstr "Убрать строку из подготовленного"
+
+#: git-gui.sh:3186
msgid "Stage Hunk For Commit"
msgstr "Подготовить часть для сохранения"
-#: git-gui.sh:2667
+#: git-gui.sh:3187
+msgid "Stage Line For Commit"
+msgstr "Подготовить строку для сохранения"
+
+#: git-gui.sh:3210
msgid "Initializing..."
msgstr "Инициализация..."
-#: git-gui.sh:2762
+#: git-gui.sh:3315
#, tcl-format
msgid ""
"Possible environment issues exist.\n"
"запущенными из %s\n"
"\n"
-#: git-gui.sh:2792
+#: git-gui.sh:3345
msgid ""
"\n"
"This is due to a known issue with the\n"
"Это известная проблема с Tcl,\n"
"распространяемым Cygwin."
-#: git-gui.sh:2797
+#: git-gui.sh:3350
#, tcl-format
msgid ""
"\n"
msgid "git-gui - a graphical user interface for Git."
msgstr "git-gui - графический пользовательский интерфейс к Git."
-#: lib/blame.tcl:77
+#: lib/blame.tcl:72
msgid "File Viewer"
msgstr "Просмотр файла"
-#: lib/blame.tcl:81
+#: lib/blame.tcl:78
msgid "Commit:"
msgstr "Сохраненное состояние:"
-#: lib/blame.tcl:264
+#: lib/blame.tcl:271
msgid "Copy Commit"
msgstr "Скопировать SHA-1"
-#: lib/blame.tcl:384
+#: 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/blame.tcl:291
+msgid "Blame Parent Commit"
+msgstr "Рассмотреть состояние предка"
+
+#: lib/blame.tcl:450
#, tcl-format
msgid "Reading %s..."
msgstr "Чтение %s..."
-#: lib/blame.tcl:488
+#: lib/blame.tcl:557
msgid "Loading copy/move tracking annotations..."
msgstr "Загрузка аннотации копирований/переименований..."
-#: lib/blame.tcl:508
+#: lib/blame.tcl:577
msgid "lines annotated"
msgstr "строк прокомментировано"
-#: lib/blame.tcl:689
+#: lib/blame.tcl:769
msgid "Loading original location annotations..."
msgstr "Загрузка аннотаций первоначального положения объекта..."
-#: lib/blame.tcl:692
+#: lib/blame.tcl:772
msgid "Annotation complete."
msgstr "Аннотация завершена."
-#: lib/blame.tcl:746
+#: lib/blame.tcl:802
+msgid "Busy"
+msgstr "Занят"
+
+#: lib/blame.tcl:803
+msgid "Annotation process is already running."
+msgstr "Аннотация уже запущена"
+
+#: lib/blame.tcl:842
+msgid "Running thorough copy detection..."
+msgstr "Выполнение полного поиска копий..."
+
+#: lib/blame.tcl:910
msgid "Loading annotation..."
msgstr "Загрузка аннотации..."
-#: lib/blame.tcl:802
+#: lib/blame.tcl:963
msgid "Author:"
msgstr "Автор:"
-#: lib/blame.tcl:806
+#: lib/blame.tcl:967
msgid "Committer:"
msgstr "Сохранил:"
-#: lib/blame.tcl:811
+#: lib/blame.tcl:972
msgid "Original File:"
msgstr "Исходный файл:"
-#: lib/blame.tcl:925
+#: lib/blame.tcl:1020
+msgid "Cannot find HEAD commit:"
+msgstr "Невозможно найти текущее состояние:"
+
+#: lib/blame.tcl:1075
+msgid "Cannot find parent commit:"
+msgstr "Невозможно найти состояние предка:"
+
+#: lib/blame.tcl:1090
+msgid "Unable to display parent"
+msgstr "Не могу показать предка"
+
+#: lib/blame.tcl:1091 lib/diff.tcl:297
+msgid "Error loading diff:"
+msgstr "Ошибка загрузки изменений:"
+
+#: lib/blame.tcl:1231
msgid "Originally By:"
msgstr "Источник:"
-#: lib/blame.tcl:931
+#: lib/blame.tcl:1237
msgid "In File:"
msgstr "Файл:"
-#: lib/blame.tcl:936
+#: lib/blame.tcl:1242
msgid "Copied Or Moved Here By:"
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:522 lib/choose_font.tcl:43 lib/merge.tcl:171
-#: lib/option.tcl:103 lib/remote_branch_delete.tcl:42 lib/transport.tcl:97
+#: lib/checkout_op.tcl:544 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 "Ð\9eÑ\82мениÑ\82Ñ\8c"
+msgstr "Ð\9eÑ\82мена"
-#: lib/branch_checkout.tcl:32 lib/browser.tcl:287
+#: lib/branch_checkout.tcl:32 lib/browser.tcl:287 lib/tools_dlg.tcl:328
msgid "Revision"
msgstr "Версия"
-#: lib/branch_checkout.tcl:36 lib/branch_create.tcl:69 lib/option.tcl:242
+#: lib/branch_checkout.tcl:36 lib/branch_create.tcl:69 lib/option.tcl:280
msgid "Options"
msgstr "Настройки"
msgid "Create New Branch"
msgstr "Создать новую ветвь"
-#: lib/branch_create.tcl:31 lib/choose_repository.tcl:371
+#: lib/branch_create.tcl:31 lib/choose_repository.tcl:377
msgid "Create"
msgstr "Создать"
msgid "Branch Name"
msgstr "Название ветви"
-#: lib/branch_create.tcl:43
+#: lib/branch_create.tcl:43 lib/remote_add.tcl:39 lib/tools_dlg.tcl:50
msgid "Name:"
msgstr "Название:"
msgid "Fast Forward Only"
msgstr "Только Fast Forward"
-#: lib/branch_create.tcl:85 lib/checkout_op.tcl:514
+#: lib/branch_create.tcl:85 lib/checkout_op.tcl:536
msgid "Reset"
msgstr "Сброс"
#: lib/branch_delete.tcl:52
msgid "Delete Only If Merged Into"
-msgstr "Удалить только в случае, если было объединение с"
+msgstr "Удалить только в случае, если было слияние с"
#: lib/branch_delete.tcl:54
msgid "Always (Do not perform merge test.)"
-msgstr "Всегда (не выполнять проверку на объединение)"
+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
-msgid ""
-"Recovering deleted branches is difficult. \n"
-"\n"
-" Delete the selected branches?"
-msgstr ""
-"Восстанавливать удаленные ветви сложно. \n"
-"\n"
-" Удалить выбранные ветви?"
+msgstr "Ветви, которые не полностью сливаются с %s:"
#: lib/branch_delete.tcl:141
#, tcl-format
msgid "Please select a branch to rename."
msgstr "Укажите ветвь для переименования."
-#: lib/branch_rename.tcl:96 lib/checkout_op.tcl:179
+#: lib/branch_rename.tcl:96 lib/checkout_op.tcl:201
#, tcl-format
msgid "Branch '%s' already exists."
msgstr "Ветвь '%s' уже существует."
msgid "Browse Branch Files"
msgstr "Показать файлы ветви"
-#: lib/browser.tcl:278 lib/choose_repository.tcl:387
-#: lib/choose_repository.tcl:474 lib/choose_repository.tcl:484
-#: lib/choose_repository.tcl:987
+#: lib/browser.tcl:278 lib/choose_repository.tcl:394
+#: lib/choose_repository.tcl:480 lib/choose_repository.tcl:491
+#: lib/choose_repository.tcl:995
msgid "Browse"
msgstr "Показать"
-#: lib/checkout_op.tcl:79
+#: lib/checkout_op.tcl:84
#, tcl-format
msgid "Fetching %s from %s"
msgstr "Получение %s из %s "
-#: lib/checkout_op.tcl:127
+#: lib/checkout_op.tcl:132
#, tcl-format
msgid "fatal: Cannot resolve %s"
msgstr "критическая ошибка: невозможно разрешить %s"
-#: lib/checkout_op.tcl:140 lib/console.tcl:81 lib/database.tcl:31
+#: lib/checkout_op.tcl:145 lib/console.tcl:81 lib/database.tcl:31
+#: lib/sshkey.tcl:53
msgid "Close"
msgstr "Закрыть"
-#: lib/checkout_op.tcl:169
+#: lib/checkout_op.tcl:174
#, tcl-format
msgid "Branch '%s' does not exist."
msgstr "Ветвь '%s' не существует "
-#: lib/checkout_op.tcl:206
+#: lib/checkout_op.tcl:193
+#, tcl-format
+msgid "Failed to configure simplified git-pull for '%s'."
+msgstr "Ошибка создания упрощённой конфигурации git pull для '%s'."
+
+#: lib/checkout_op.tcl:228
#, tcl-format
msgid ""
"Branch '%s' already exists.\n"
"Ветвь '%s' уже существует.\n"
"\n"
"Она не может быть прокручена(fast-forward) к %s.\n"
-"Требуется объединение."
+"Требуется слияние."
-#: lib/checkout_op.tcl:220
+#: lib/checkout_op.tcl:242
#, tcl-format
msgid "Merge strategy '%s' not supported."
-msgstr "СÑ\82Ñ\80аÑ\82егиÑ\8f обÑ\8aединениÑ\8f '%s' не поддеÑ\80живаеÑ\82Ñ\81Ñ\8f."
+msgstr "Ð\9dеизвеÑ\81Ñ\82наÑ\8f Ñ\81Ñ\82Ñ\80аÑ\82егиÑ\8f Ñ\81лиÑ\8fниÑ\8f: '%s'."
-#: lib/checkout_op.tcl:239
+#: lib/checkout_op.tcl:261
#, tcl-format
msgid "Failed to update '%s'."
msgstr "Не удалось обновить '%s'."
-#: lib/checkout_op.tcl:251
+#: lib/checkout_op.tcl:273
msgid "Staging area (index) is already locked."
msgstr "Рабочая область заблокирована другим процессом."
-#: lib/checkout_op.tcl:266
+#: lib/checkout_op.tcl:288
msgid ""
"Last scanned state does not match repository state.\n"
"\n"
"\n"
"Это будет сделано сейчас автоматически.\n"
-#: lib/checkout_op.tcl:322
+#: lib/checkout_op.tcl:344
#, tcl-format
msgid "Updating working directory to '%s'..."
msgstr "Обновление рабочего каталога из '%s'..."
-#: lib/checkout_op.tcl:323
+#: lib/checkout_op.tcl:345
msgid "files checked out"
msgstr "файлы извлечены"
-#: lib/checkout_op.tcl:353
+#: lib/checkout_op.tcl:375
#, tcl-format
msgid "Aborted checkout of '%s' (file level merging is required)."
-msgstr "Прерван переход на '%s' (требуется объединение на уровне файлов)"
+msgstr "Прерван переход на '%s' (требуется слияние содержания файлов)"
-#: lib/checkout_op.tcl:354
+#: lib/checkout_op.tcl:376
msgid "File level merge required."
-msgstr "Требуется объединение на уровне файлов."
+msgstr "Требуется слияние содержания файлов."
-#: lib/checkout_op.tcl:358
+#: lib/checkout_op.tcl:380
#, tcl-format
msgid "Staying on branch '%s'."
msgstr "Ветвь '%s' остается текущей."
-#: lib/checkout_op.tcl:429
+#: lib/checkout_op.tcl:451
msgid ""
"You are no longer on a local branch.\n"
"\n"
"Если вы хотите снова вернуться к какой-нибудь ветви, создайте ее сейчас, "
"начиная с 'Текущего отсоединенного состояния'."
-#: lib/checkout_op.tcl:446 lib/checkout_op.tcl:450
+#: lib/checkout_op.tcl:468 lib/checkout_op.tcl:472
#, tcl-format
msgid "Checked out '%s'."
msgstr "Ветвь '%s' сделана текущей."
-#: lib/checkout_op.tcl:478
+#: lib/checkout_op.tcl:500
#, tcl-format
msgid "Resetting '%s' to '%s' will lose the following commits:"
msgstr "Сброс '%s' в '%s' приведет к потере следующих сохраненных состояний: "
-#: lib/checkout_op.tcl:500
+#: lib/checkout_op.tcl:522
msgid "Recovering lost commits may not be easy."
msgstr "Восстановить потерянные сохраненные состояния будет сложно."
-#: lib/checkout_op.tcl:505
+#: lib/checkout_op.tcl:527
#, tcl-format
msgid "Reset '%s'?"
msgstr "Сбросить '%s'?"
-#: lib/checkout_op.tcl:510 lib/merge.tcl:163
+#: lib/checkout_op.tcl:532 lib/merge.tcl:164 lib/tools_dlg.tcl:343
msgid "Visualize"
msgstr "Наглядно"
-#: lib/checkout_op.tcl:578
+#: lib/checkout_op.tcl:600
#, tcl-format
msgid ""
"Failed to set current branch.\n"
#: lib/choose_repository.tcl:28
msgid "Git Gui"
-msgstr ""
+msgstr "Git Gui"
-#: lib/choose_repository.tcl:81 lib/choose_repository.tcl:376
+#: lib/choose_repository.tcl:87 lib/choose_repository.tcl:382
msgid "Create New Repository"
msgstr "Создать новый репозиторий"
-#: lib/choose_repository.tcl:87
+#: lib/choose_repository.tcl:93
msgid "New..."
msgstr "Новый..."
-#: lib/choose_repository.tcl:94 lib/choose_repository.tcl:460
+#: lib/choose_repository.tcl:100 lib/choose_repository.tcl:465
msgid "Clone Existing Repository"
msgstr "Склонировать существующий репозиторий"
-#: lib/choose_repository.tcl:100
+#: lib/choose_repository.tcl:106
msgid "Clone..."
msgstr "Склонировать..."
-#: lib/choose_repository.tcl:107 lib/choose_repository.tcl:976
+#: lib/choose_repository.tcl:113 lib/choose_repository.tcl:983
msgid "Open Existing Repository"
msgstr "Выбрать существующий репозиторий"
-#: lib/choose_repository.tcl:113
+#: lib/choose_repository.tcl:119
msgid "Open..."
msgstr "Открыть..."
-#: lib/choose_repository.tcl:126
+#: lib/choose_repository.tcl:132
msgid "Recent Repositories"
msgstr "Недавние репозитории"
-#: lib/choose_repository.tcl:132
+#: lib/choose_repository.tcl:138
msgid "Open Recent Repository:"
msgstr "Открыть последний репозиторий"
-#: lib/choose_repository.tcl:296 lib/choose_repository.tcl:303
-#: lib/choose_repository.tcl:310
+#: lib/choose_repository.tcl:302 lib/choose_repository.tcl:309
+#: lib/choose_repository.tcl:316
#, tcl-format
msgid "Failed to create repository %s:"
msgstr "Не удалось создать репозиторий %s:"
-#: lib/choose_repository.tcl:381 lib/choose_repository.tcl:478
+#: lib/choose_repository.tcl:387
msgid "Directory:"
msgstr "Каталог:"
-#: lib/choose_repository.tcl:412 lib/choose_repository.tcl:537
-#: lib/choose_repository.tcl:1011
+#: lib/choose_repository.tcl:417 lib/choose_repository.tcl:544
+#: lib/choose_repository.tcl:1017
msgid "Git Repository"
msgstr "Репозиторий"
-#: lib/choose_repository.tcl:437
+#: lib/choose_repository.tcl:442
#, tcl-format
msgid "Directory %s already exists."
msgstr "Каталог '%s' уже существует."
-#: lib/choose_repository.tcl:441
+#: lib/choose_repository.tcl:446
#, tcl-format
msgid "File %s already exists."
msgstr "Файл '%s' уже существует."
-#: lib/choose_repository.tcl:455
+#: lib/choose_repository.tcl:460
msgid "Clone"
msgstr "Склонировать"
-#: lib/choose_repository.tcl:468
-msgid "URL:"
-msgstr "Ссылка:"
+#: lib/choose_repository.tcl:473
+msgid "Source Location:"
+msgstr "Исходное положение:"
+
+#: lib/choose_repository.tcl:484
+msgid "Target Directory:"
+msgstr "Каталог назначения:"
-#: lib/choose_repository.tcl:489
+#: lib/choose_repository.tcl:496
msgid "Clone Type:"
msgstr "Тип клона:"
-#: lib/choose_repository.tcl:495
+#: lib/choose_repository.tcl:502
msgid "Standard (Fast, Semi-Redundant, Hardlinks)"
msgstr "Стандартный (Быстрый, полуизбыточный, \"жесткие\" ссылки)"
-#: lib/choose_repository.tcl:501
+#: lib/choose_repository.tcl:508
msgid "Full Copy (Slower, Redundant Backup)"
msgstr "Полная копия (Медленный, создает резервную копию)"
-#: lib/choose_repository.tcl:507
+#: lib/choose_repository.tcl:514
msgid "Shared (Fastest, Not Recommended, No Backup)"
msgstr "Общий (Самый быстрый, не рекомендуется, без резервной копии)"
-#: lib/choose_repository.tcl:543 lib/choose_repository.tcl:590
-#: lib/choose_repository.tcl:736 lib/choose_repository.tcl:806
-#: lib/choose_repository.tcl:1017 lib/choose_repository.tcl:1025
+#: lib/choose_repository.tcl:550 lib/choose_repository.tcl:597
+#: lib/choose_repository.tcl:743 lib/choose_repository.tcl:813
+#: lib/choose_repository.tcl:1023 lib/choose_repository.tcl:1031
#, tcl-format
msgid "Not a Git repository: %s"
msgstr "Каталог не является репозиторием: %s"
-#: lib/choose_repository.tcl:579
+#: lib/choose_repository.tcl:586
msgid "Standard only available for local repository."
msgstr "Стандартный клон возможен только для локального репозитория."
-#: lib/choose_repository.tcl:583
+#: lib/choose_repository.tcl:590
msgid "Shared only available for local repository."
msgstr "Общий клон возможен только для локального репозитория."
-#: lib/choose_repository.tcl:604
+#: lib/choose_repository.tcl:611
#, tcl-format
msgid "Location %s already exists."
msgstr "Путь '%s' уже существует."
-#: lib/choose_repository.tcl:615
+#: lib/choose_repository.tcl:622
msgid "Failed to configure origin"
msgstr "Не могу сконфигурировать исходный репозиторий."
-#: lib/choose_repository.tcl:627
+#: lib/choose_repository.tcl:634
msgid "Counting objects"
msgstr "Считаю объекты"
-#: lib/choose_repository.tcl:628
+#: lib/choose_repository.tcl:635
msgid "buckets"
msgstr ""
-#: lib/choose_repository.tcl:652
+#: lib/choose_repository.tcl:659
#, tcl-format
msgid "Unable to copy objects/info/alternates: %s"
msgstr "Не могу скопировать objects/info/alternates: %s"
-#: lib/choose_repository.tcl:688
+#: lib/choose_repository.tcl:695
#, tcl-format
msgid "Nothing to clone from %s."
msgstr "Нечего клонировать с %s."
-#: lib/choose_repository.tcl:690 lib/choose_repository.tcl:904
-#: lib/choose_repository.tcl:916
+#: lib/choose_repository.tcl:697 lib/choose_repository.tcl:911
+#: lib/choose_repository.tcl:923
msgid "The 'master' branch has not been initialized."
msgstr "Не инициализирована ветвь 'master'."
-#: lib/choose_repository.tcl:703
+#: lib/choose_repository.tcl:710
msgid "Hardlinks are unavailable. Falling back to copying."
-msgstr "\"Жесткие ссылки\" не доступны. Буду использовать копирование."
+msgstr "\"Жесткие ссылки\" недоступны. Будет использовано копирование."
-#: lib/choose_repository.tcl:715
+#: lib/choose_repository.tcl:722
#, tcl-format
msgid "Cloning from %s"
msgstr "Клонирование %s"
-#: lib/choose_repository.tcl:746
+#: lib/choose_repository.tcl:753
msgid "Copying objects"
msgstr "Копирование objects"
-#: lib/choose_repository.tcl:747
+#: lib/choose_repository.tcl:754
msgid "KiB"
msgstr "КБ"
-#: lib/choose_repository.tcl:771
+#: lib/choose_repository.tcl:778
#, tcl-format
msgid "Unable to copy object: %s"
msgstr "Не могу скопировать объект: %s"
-#: lib/choose_repository.tcl:781
+#: lib/choose_repository.tcl:788
msgid "Linking objects"
msgstr "Создание ссылок на objects"
-#: lib/choose_repository.tcl:782
+#: lib/choose_repository.tcl:789
msgid "objects"
msgstr "объекты"
-#: lib/choose_repository.tcl:790
+#: lib/choose_repository.tcl:797
#, tcl-format
msgid "Unable to hardlink object: %s"
msgstr "Не могу \"жестко связать\" объект: %s"
-#: lib/choose_repository.tcl:845
+#: lib/choose_repository.tcl:852
msgid "Cannot fetch branches and objects. See console output for details."
msgstr ""
"Не могу получить ветви и объекты. Дополнительная информация на консоли."
-#: lib/choose_repository.tcl:856
+#: lib/choose_repository.tcl:863
msgid "Cannot fetch tags. See console output for details."
msgstr "Не могу получить метки. Дополнительная информация на консоли."
-#: lib/choose_repository.tcl:880
+#: lib/choose_repository.tcl:887
msgid "Cannot determine HEAD. See console output for details."
msgstr "Не могу определить HEAD. Дополнительная информация на консоли."
-#: lib/choose_repository.tcl:889
+#: lib/choose_repository.tcl:896
#, tcl-format
msgid "Unable to cleanup %s"
msgstr "Не могу очистить %s"
-#: lib/choose_repository.tcl:895
+#: lib/choose_repository.tcl:902
msgid "Clone failed."
msgstr "Клонирование не удалось."
-#: lib/choose_repository.tcl:902
+#: lib/choose_repository.tcl:909
msgid "No default branch obtained."
msgstr "Не было получено ветви по умолчанию."
-#: lib/choose_repository.tcl:913
+#: lib/choose_repository.tcl:920
#, tcl-format
msgid "Cannot resolve %s as a commit."
msgstr "Не могу распознать %s как состояние."
-#: lib/choose_repository.tcl:925
+#: lib/choose_repository.tcl:932
msgid "Creating working directory"
msgstr "Создаю рабочий каталог"
-#: lib/choose_repository.tcl:926 lib/index.tcl:65 lib/index.tcl:127
-#: lib/index.tcl:193
+#: lib/choose_repository.tcl:933 lib/index.tcl:65 lib/index.tcl:128
+#: lib/index.tcl:196
msgid "files"
msgstr "файлов"
-#: lib/choose_repository.tcl:955
+#: lib/choose_repository.tcl:962
msgid "Initial file checkout failed."
msgstr "Не удалось получить начальное состояние файлов репозитория."
-#: lib/choose_repository.tcl:971
+#: lib/choose_repository.tcl:978
msgid "Open"
msgstr "Открыть"
-#: lib/choose_repository.tcl:981
+#: lib/choose_repository.tcl:988
msgid "Repository:"
msgstr "Репозиторий:"
-#: lib/choose_repository.tcl:1031
+#: lib/choose_repository.tcl:1037
#, tcl-format
msgid "Failed to open repository %s:"
msgstr "Не удалось открыть репозиторий %s:"
#: lib/choose_rev.tcl:84 lib/choose_rev.tcl:538
msgid "Tag"
-msgstr "Таг"
+msgstr "Ð\9cеÑ\82ка"
#: lib/choose_rev.tcl:317
#, tcl-format
"completed. You cannot amend the prior commit unless you first abort the "
"current merge activity.\n"
msgstr ""
-"Ð\9dевозможно иÑ\81пÑ\80авиÑ\82Ñ\8c Ñ\81оÑ\81Ñ\82оÑ\8fние во вÑ\80емÑ\8f обÑ\8aединения.\n"
+"Ð\9dевозможно иÑ\81пÑ\80авиÑ\82Ñ\8c Ñ\81оÑ\81Ñ\82оÑ\8fние во вÑ\80емÑ\8f опеÑ\80аÑ\86ии Ñ\81лиÑ\8fния.\n"
"\n"
-"Текущее объединение не завершено. Невозможно исправить предыдущее "
-"сохраненное состояние не прерывая текущее объединение.\n"
+"Текущее слияние не завершено. Невозможно исправить предыдущее "
+"сохраненное состояние, не прерывая эту операцию.\n"
-#: lib/commit.tcl:49
+#: lib/commit.tcl:48
msgid "Error loading commit data for amend:"
msgstr "Ошибка при загрузке данных для исправления сохраненного состояния:"
-#: lib/commit.tcl:76
+#: lib/commit.tcl:75
msgid "Unable to obtain your identity:"
msgstr "Невозможно получить информацию об авторстве:"
-#: lib/commit.tcl:81
+#: lib/commit.tcl:80
msgid "Invalid GIT_COMMITTER_IDENT:"
msgstr "Неверный GIT_COMMITTER_IDENT:"
-#: lib/commit.tcl:133
+#: lib/commit.tcl:132
msgid ""
"Last scanned state does not match repository state.\n"
"\n"
"\n"
"Это будет сделано сейчас автоматически.\n"
-#: lib/commit.tcl:154
+#: lib/commit.tcl:155
#, tcl-format
msgid ""
"Unmerged files cannot be committed.\n"
"File %s has merge conflicts. You must resolve them and stage the file "
"before committing.\n"
msgstr ""
-"Нельзя сохранить необъединенные файлы.\n"
+"Нельзя сохранить файлы с незавершённой операцей слияния.\n"
"\n"
-"Для файла %s возник конфликт объединения. Разрешите конфликт и добавьте к "
+"Для файла %s возник конфликт слияния. Разрешите конфликт и добавьте к "
"подготовленным файлам перед сохранением.\n"
-#: lib/commit.tcl:162
+#: lib/commit.tcl:163
#, tcl-format
msgid ""
"Unknown file state %s detected.\n"
"\n"
"Файл %s не может быть сохранен данной программой.\n"
-#: lib/commit.tcl:170
+#: lib/commit.tcl:171
msgid ""
"No changes to commit.\n"
"\n"
"\n"
"Подготовьте хотя бы один файл до создания сохраненного состояния.\n"
-#: lib/commit.tcl:183
+#: lib/commit.tcl:186
msgid ""
"Please supply a commit message.\n"
"\n"
"- вторая строка пустая\n"
"- оставшиеся строки: опишите, что дают ваши изменения.\n"
-#: lib/commit.tcl:207
+#: lib/commit.tcl:210
#, tcl-format
msgid "warning: Tcl does not support encoding '%s'."
msgstr "предупреждение: Tcl не поддерживает кодировку '%s'."
-#: lib/commit.tcl:221
+#: lib/commit.tcl:226
msgid "Calling pre-commit hook..."
msgstr "Вызов программы поддержки репозитория pre-commit..."
-#: lib/commit.tcl:236
+#: lib/commit.tcl:241
msgid "Commit declined by pre-commit hook."
msgstr "Сохранение прервано программой поддержки репозитория pre-commit"
-#: lib/commit.tcl:259
+#: lib/commit.tcl:264
msgid "Calling commit-msg hook..."
msgstr "Вызов программы поддержки репозитория commit-msg..."
-#: lib/commit.tcl:274
+#: lib/commit.tcl:279
msgid "Commit declined by commit-msg hook."
msgstr "Сохранение прервано программой поддержки репозитория commit-msg"
-#: lib/commit.tcl:287
+#: lib/commit.tcl:292
msgid "Committing changes..."
msgstr "Сохранение изменений..."
-#: lib/commit.tcl:303
+#: lib/commit.tcl:308
msgid "write-tree failed:"
msgstr "Программа write-tree завершилась с ошибкой:"
-#: lib/commit.tcl:304 lib/commit.tcl:348 lib/commit.tcl:368
+#: lib/commit.tcl:309 lib/commit.tcl:353 lib/commit.tcl:373
msgid "Commit failed."
msgstr "Сохранить состояние не удалось."
-#: lib/commit.tcl:321
+#: lib/commit.tcl:326
#, tcl-format
msgid "Commit %s appears to be corrupt"
msgstr "Состояние %s выглядит поврежденным"
-#: lib/commit.tcl:326
+#: lib/commit.tcl:331
msgid ""
"No changes to commit.\n"
"\n"
msgstr ""
"Отсутствуют изменения для сохранения.\n"
"\n"
-"Ни один файл не был изменен и не было объединения.\n"
+"Ни один файл не был изменен и не было слияния.\n"
"\n"
"Сейчас автоматически запустится перечитывание репозитория.\n"
-#: lib/commit.tcl:333
+#: lib/commit.tcl:338
msgid "No changes to commit."
msgstr "Отуствуют измения для сохранения."
-#: lib/commit.tcl:347
+#: lib/commit.tcl:352
msgid "commit-tree failed:"
msgstr "Программа commit-tree завершилась с ошибкой:"
-#: lib/commit.tcl:367
+#: lib/commit.tcl:372
msgid "update-ref failed:"
msgstr "Программа update-ref завершилась с ошибкой:"
-#: lib/commit.tcl:454
+#: lib/commit.tcl:460
#, tcl-format
msgid "Created commit %s: %s"
msgstr "Создано состояние %s: %s "
msgid "Invalid date from Git: %s"
msgstr "Неправильная дата в репозитории: %s"
-#: lib/diff.tcl:42
+#: lib/diff.tcl:59
#, tcl-format
msgid ""
"No differences detected.\n"
"\n"
"Сейчас будет запущено перечитывание репозитория, чтобы найти подобные файлы."
-#: lib/diff.tcl:81
+#: lib/diff.tcl:99
#, tcl-format
msgid "Loading diff of %s..."
msgstr "Загрузка изменений в %s..."
-#: lib/diff.tcl:114 lib/diff.tcl:184
+#: lib/diff.tcl:120
+msgid ""
+"LOCAL: deleted\n"
+"REMOTE:\n"
+msgstr ""
+"ЛОКАЛЬНО: удалён\n"
+"ВНЕШНИЙ:\n"
+
+#: lib/diff.tcl:125
+msgid ""
+"REMOTE: deleted\n"
+"LOCAL:\n"
+msgstr ""
+"ВНЕШНИЙ: удалён\n"
+"ЛОКАЛЬНО:\n"
+
+#: lib/diff.tcl:132
+msgid "LOCAL:\n"
+msgstr "ЛОКАЛЬНО:\n"
+
+#: lib/diff.tcl:135
+msgid "REMOTE:\n"
+msgstr "ВНЕШНИЙ:\n"
+
+#: lib/diff.tcl:197 lib/diff.tcl:296
#, tcl-format
msgid "Unable to display %s"
msgstr "Не могу показать %s"
-#: lib/diff.tcl:115
+#: lib/diff.tcl:198
msgid "Error loading file:"
msgstr "Ошибка загрузки файла:"
-#: lib/diff.tcl:122
+#: lib/diff.tcl:205
msgid "Git Repository (subproject)"
msgstr "Репозиторий Git (подпроект)"
-#: lib/diff.tcl:134
+#: lib/diff.tcl:217
msgid "* Binary file (not showing content)."
msgstr "* Двоичный файл (содержимое не показано)"
-#: lib/diff.tcl:185
-msgid "Error loading diff:"
-msgstr "Ошибка загрузки diff:"
+#: lib/diff.tcl:222
+#, tcl-format
+msgid ""
+"* Untracked file is %d bytes.\n"
+"* Showing only first %d bytes.\n"
+msgstr ""
+"* Размер неподготовленого файла %d байт.\n"
+"* Показано первых %d байт.\n"
+
+#: lib/diff.tcl:228
+#, tcl-format
+msgid ""
+"\n"
+"* Untracked file clipped here by %s.\n"
+"* To see the entire file, use an external editor.\n"
+msgstr ""
+"\n"
+"* Неподготовленый файл обрезан: %s.\n"
+"* Чтобы увидеть весь файл, используйте программу-редактор.\n"
-#: lib/diff.tcl:303
+#: lib/diff.tcl:436
msgid "Failed to unstage selected hunk."
msgstr "Не удалось исключить выбранную часть."
-#: lib/diff.tcl:310
+#: lib/diff.tcl:443
msgid "Failed to stage selected hunk."
msgstr "Не удалось подготовить к сохранению выбранную часть."
+#: lib/diff.tcl:509
+msgid "Failed to unstage selected line."
+msgstr "Не удалось исключить выбранную строку."
+
+#: lib/diff.tcl:517
+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/error.tcl:20 lib/error.tcl:114
msgid "error"
msgstr "ошибка"
#: lib/index.tcl:15
msgid "Index Error"
-msgstr "Ð\9eÑ\88ибка индекÑ\81а"
+msgstr "Ð\9eÑ\88ибка в индекÑ\81е"
#: lib/index.tcl:21
msgid ""
msgid "Unlock Index"
msgstr "Разблокировать индекс"
-#: lib/index.tcl:282
+#: lib/index.tcl:287
#, tcl-format
msgid "Unstaging %s from commit"
msgstr "Удаление %s из подготовленного"
-#: lib/index.tcl:313
+#: lib/index.tcl:326
msgid "Ready to commit."
msgstr "Подготовлено для сохранения"
-#: lib/index.tcl:326
+#: lib/index.tcl:339
#, tcl-format
msgid "Adding %s"
msgstr "Добавление %s..."
-#: lib/index.tcl:381
+#: lib/index.tcl:396
#, tcl-format
msgid "Revert changes in file %s?"
msgstr "Отменить изменения в файле %s?"
-#: lib/index.tcl:383
+#: lib/index.tcl:398
#, tcl-format
msgid "Revert changes in these %i files?"
msgstr "Отменить изменения в %i файле(-ах)?"
-#: lib/index.tcl:391
+#: lib/index.tcl:406
msgid "Any unstaged changes will be permanently lost by the revert."
msgstr ""
"Любые изменения, не подготовленные к сохранению, будут потеряны при данной "
"операции."
-#: lib/index.tcl:394
+#: lib/index.tcl:409
msgid "Do Nothing"
msgstr "Ничего не делать"
+#: lib/index.tcl:427
+msgid "Reverting selected files"
+msgstr "Удаление изменений в выбраных файлах"
+
+#: lib/index.tcl:431
+#, tcl-format
+msgid "Reverting %s"
+msgstr "Отмена изменений в %s"
+
#: 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"
"Завершите исправление данного состояния перед выполнением операции "
-"объединения.\n"
+"слияния.\n"
#: lib/merge.tcl:27
msgid ""
"\n"
"Это будет сделано сейчас автоматически.\n"
-#: lib/merge.tcl:44
+#: lib/merge.tcl:45
#, tcl-format
msgid ""
"You are in the middle of a conflicted merge.\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"
"\n"
-"Для файла %s возник конфликт объединения.\n"
+"Для файла %s возник конфликт слияния.\n"
"\n"
"Разрешите конфликт, подготовьте файл и сохраните. Только после этого можно "
-"начать следующее объединение.\n"
+"начать следующее слияние.\n"
-#: lib/merge.tcl:54
+#: lib/merge.tcl:55
#, tcl-format
msgid ""
"You are in the middle of a change.\n"
"\n"
"Файл %s изменен.\n"
"\n"
-"Подготовьте и сохраните измения перед началом объединения. В случае "
-"необходимости это позволит прервать операцию объединения.\n"
+"Подготовьте и сохраните измения перед началом слияния. В случае "
+"необходимости это позволит прервать операцию слияния.\n"
-#: lib/merge.tcl:106
+#: lib/merge.tcl:107
#, tcl-format
msgid "%s of %s"
msgstr "%s из %s"
-#: lib/merge.tcl:119
+#: lib/merge.tcl:120
+#, tcl-format
msgid "Merging %s and %s..."
-msgstr "Ð\9eбÑ\8aединение %s и %s..."
+msgstr "СлиÑ\8fние %s и %s..."
-#: lib/merge.tcl:130
+#: lib/merge.tcl:131
msgid "Merge completed successfully."
-msgstr "Ð\9eбÑ\8aединение успешно завершено."
+msgstr "СлиÑ\8fние успешно завершено."
-#: lib/merge.tcl:132
+#: lib/merge.tcl:133
msgid "Merge failed. Conflict resolution is required."
-msgstr "Не удалось завершить объединение. Требуется разрешение конфликта."
+msgstr "Не удалось завершить слияние. Требуется разрешение конфликта."
-#: lib/merge.tcl:157
+#: lib/merge.tcl:158
#, tcl-format
msgid "Merge Into %s"
-msgstr "Ð\9eбÑ\8aединиÑ\82Ñ\8c с %s"
+msgstr "СлиÑ\8fние с %s"
-#: lib/merge.tcl:176
+#: lib/merge.tcl:177
msgid "Revision To Merge"
-msgstr "Версия для объединения"
+msgstr "Версия, с которой провести слияние"
-#: lib/merge.tcl:211
+#: lib/merge.tcl:212
msgid ""
"Cannot abort while amending.\n"
"\n"
"\n"
"Завершите текущее исправление сохраненного состояния.\n"
-#: lib/merge.tcl:221
+#: lib/merge.tcl:222
msgid ""
"Abort merge?\n"
"\n"
"\n"
"Continue with aborting the current merge?"
msgstr ""
-"Ð\9fÑ\80еÑ\80ваÑ\82Ñ\8c обÑ\8aединение?\n"
+"Ð\9fÑ\80еÑ\80ваÑ\82Ñ\8c опеÑ\80аÑ\86иÑ\8e Ñ\81лиÑ\8fниÑ\8f?\n"
"\n"
-"Прерывание объединения приведет к потере *ВСЕХ* несохраненных изменений.\n"
+"Прерывание этой операции приведет к потере *ВСЕХ* несохраненных изменений.\n"
"\n"
"Продолжить?"
-#: lib/merge.tcl:227
+#: lib/merge.tcl:228
msgid ""
"Reset changes?\n"
"\n"
"\n"
"Continue with resetting the current changes?"
msgstr ""
-"Ð\9fÑ\80еÑ\80ваÑ\82Ñ\8c обÑ\8aединение?\n"
+"Ð\9fÑ\80еÑ\80ваÑ\82Ñ\8c опеÑ\80аÑ\86иÑ\8e Ñ\81лиÑ\8fниÑ\8f?\n"
"\n"
-"Прерывание объединения приведет к потере *ВСЕХ* несохраненных изменений.\n"
+"Прерывание этой операции приведет к потере *ВСЕХ* несохраненных изменений.\n"
"\n"
"Продолжить?"
-#: lib/merge.tcl:238
+#: lib/merge.tcl:239
msgid "Aborting"
msgstr "Прерываю"
-#: lib/merge.tcl:238
+#: lib/merge.tcl:239
msgid "files reset"
msgstr "изменения в файлах отменены"
-#: lib/merge.tcl:265
+#: lib/merge.tcl:267
msgid "Abort failed."
msgstr "Прервать не удалось."
-#: lib/merge.tcl:267
+#: lib/merge.tcl:269
msgid "Abort completed. Ready."
msgstr "Прервано."
-#: lib/option.tcl:95
+#: 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 ""
+"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."
+msgstr ""
+"Внимание! Список изменений показывает только конфликтующие отличия.\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/mergetool.tcl:146
+msgid "Conflict file does not exist"
+msgstr "Конфликтующий файл не существует"
+
+#: lib/mergetool.tcl:264
+#, tcl-format
+msgid "Not a GUI merge tool: '%s'"
+msgstr "'%s' не является программой слияния"
+
+#: lib/mergetool.tcl:268
+#, tcl-format
+msgid "Unsupported merge tool '%s'"
+msgstr "Неизвестная программа слияния '%s'"
+
+#: lib/mergetool.tcl:303
+msgid "Merge tool is already running, terminate it?"
+msgstr "Программа слияния уже работает. Прервать?"
+
+#: lib/mergetool.tcl:323
+#, tcl-format
+msgid ""
+"Error retrieving versions:\n"
+"%s"
+msgstr ""
+"Ошибка получения версий:\n"
+"%s"
+
+#: lib/mergetool.tcl:343
+#, tcl-format
+msgid ""
+"Could not start the merge tool:\n"
+"\n"
+"%s"
+msgstr ""
+"Ошибка запуска программы слияния:\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'"
+
+#: lib/option.tcl:19
+#, tcl-format
+msgid "Invalid repo encoding '%s'"
+msgstr "Неверная кодировка репозитория: '%s'"
+
+#: lib/option.tcl:117
msgid "Restore Defaults"
msgstr "Восстановить настройки по умолчанию"
-#: lib/option.tcl:99
+#: lib/option.tcl:121
msgid "Save"
msgstr "Сохранить"
-#: lib/option.tcl:109
+#: lib/option.tcl:131
#, tcl-format
msgid "%s Repository"
-msgstr "для репозитория %s"
+msgstr "Ð\94ля репозитория %s"
-#: lib/option.tcl:110
+#: lib/option.tcl:132
msgid "Global (All Repositories)"
msgstr "Общие (для всех репозиториев)"
-#: lib/option.tcl:116
+#: lib/option.tcl:138
msgid "User Name"
msgstr "Имя пользователя"
-#: lib/option.tcl:117
+#: lib/option.tcl:139
msgid "Email Address"
msgstr "Адрес электронной почты"
-#: lib/option.tcl:119
+#: lib/option.tcl:141
msgid "Summarize Merge Commits"
-msgstr "Суммарный комментарий при объединении"
+msgstr "Суммарный комментарий при слиянии"
-#: lib/option.tcl:120
+#: lib/option.tcl:142
msgid "Merge Verbosity"
-msgstr "Уровень детальности сообщений при объединении"
+msgstr "Уровень детальности сообщений при слиянии"
-#: lib/option.tcl:121
+#: lib/option.tcl:143
msgid "Show Diffstat After Merge"
-msgstr "Показать отчет об изменениях после объединения"
+msgstr "Показать отчет об изменениях после слияния"
+
+#: lib/option.tcl:144
+msgid "Use Merge Tool"
+msgstr "Использовать для слияния программу"
-#: lib/option.tcl:123
+#: lib/option.tcl:146
msgid "Trust File Modification Timestamps"
msgstr "Доверять времени модификации файла"
-#: lib/option.tcl:124
+#: lib/option.tcl:147
msgid "Prune Tracking Branches During Fetch"
msgstr "Чистка ветвей слежения при получении изменений"
-#: lib/option.tcl:125
+#: lib/option.tcl:148
msgid "Match Tracking Branches"
msgstr "Имя новой ветви взять из имен ветвей слежения"
-#: lib/option.tcl:126
+#: 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:127
+#: lib/option.tcl:153
msgid "Commit Message Text Width"
-msgstr "Ширина комментария к состоянию:"
+msgstr "Ширина текста комментария"
-#: lib/option.tcl:128
+#: lib/option.tcl:154
msgid "New Branch Name Template"
msgstr "Шаблон для имени новой ветви"
-#: lib/option.tcl:192
+#: lib/option.tcl:155
+msgid "Default File Contents Encoding"
+msgstr "Кодировка содержания файла по умолчанию"
+
+#: lib/option.tcl:203
+msgid "Change"
+msgstr "Изменить"
+
+#: lib/option.tcl:230
msgid "Spelling Dictionary:"
msgstr "Словарь для проверки правописания:"
-#: lib/option.tcl:216
+#: lib/option.tcl:254
msgid "Change Font"
-msgstr "Изменить шрифт"
+msgstr "Изменить"
-#: lib/option.tcl:220
+#: lib/option.tcl:258
#, tcl-format
msgid "Choose %s"
msgstr "Выберите %s"
# carbon copy
-#: lib/option.tcl:226
+#: lib/option.tcl:264
msgid "pt."
-msgstr ""
+msgstr "pt."
-#: lib/option.tcl:240
+#: lib/option.tcl:278
msgid "Preferences"
msgstr "Настройки"
-#: lib/option.tcl:275
+#: 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 "Чистка"
+
+#: lib/remote.tcl:173
+msgid "Fetch from"
+msgstr "Получение из"
+
+#: lib/remote.tcl:215
+msgid "Push to"
+msgstr "Отправить"
+
+#: lib/remote_add.tcl:19
+msgid "Add Remote"
+msgstr "Зарегистрировать внешний репозиторий"
+
+#: lib/remote_add.tcl:24
+msgid "Add New Remote"
+msgstr "Добавить внешний репозиторий"
+
+#: lib/remote_add.tcl:28 lib/tools_dlg.tcl:36
+msgid "Add"
+msgstr ""
+
+#: lib/remote_add.tcl:37
+msgid "Remote Details"
+msgstr "Информация о внешнем репозитории"
+
+#: lib/remote_add.tcl:50
+msgid "Location:"
+msgstr "Положение:"
+
+#: lib/remote_add.tcl:62
+msgid "Further Action"
+msgstr "Следующая операция"
+
+#: lib/remote_add.tcl:65
+msgid "Fetch Immediately"
+msgstr "Скачать сразу"
+
+#: lib/remote_add.tcl:71
+msgid "Initialize Remote Repository and Push"
+msgstr "Инициализировать внешний репозиторий и отправить"
+
+#: lib/remote_add.tcl:77
+msgid "Do Nothing Else Now"
+msgstr "Больше ничего не делать"
+
+#: lib/remote_add.tcl:101
+msgid "Please supply a remote name."
+msgstr "Укажите название внешнего репозитория."
+
+#: lib/remote_add.tcl:114
+#, tcl-format
+msgid "'%s' is not an acceptable remote name."
+msgstr "Недопустимое название внешнего репозитория '%s'."
+
+#: lib/remote_add.tcl:125
+#, tcl-format
+msgid "Failed to add remote '%s' of location '%s'."
+msgstr "Не удалось добавить '%s' из '%s'. "
+
+#: lib/remote_add.tcl:133 lib/transport.tcl:6
+#, tcl-format
+msgid "fetch %s"
+msgstr "получение %s"
+
+#: lib/remote_add.tcl:134
+#, tcl-format
+msgid "Fetching the %s"
+msgstr "Получение %s"
+
+#: lib/remote_add.tcl:157
+#, 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
+#, tcl-format
+msgid "Setting up the %s (at %s)"
+msgstr "Настройка %s (в %s)"
+
#: lib/remote_branch_delete.tcl:29 lib/remote_branch_delete.tcl:34
-msgid "Delete Remote Branch"
-msgstr "УдалиÑ\82Ñ\8c внеÑ\88нÑ\8eÑ\8e веÑ\82вÑ\8c"
+msgid "Delete Branch Remotely"
+msgstr "Удаление веÑ\82ви во внеÑ\88нем Ñ\80епозиÑ\82оÑ\80ии"
#: lib/remote_branch_delete.tcl:47
msgid "From Repository"
msgstr "Из репозитория"
-#: lib/remote_branch_delete.tcl:50 lib/transport.tcl:123
+#: lib/remote_branch_delete.tcl:50 lib/transport.tcl:134
msgid "Remote:"
msgstr "внешний:"
-#: lib/remote_branch_delete.tcl:66 lib/transport.tcl:138
-msgid "Arbitrary URL:"
-msgstr "по Ñ\83казанномÑ\83 URL:"
+#: lib/remote_branch_delete.tcl:66 lib/transport.tcl:149
+msgid "Arbitrary Location:"
+msgstr "Указаное положение:"
#: lib/remote_branch_delete.tcl:84
msgid "Branches"
#: lib/remote_branch_delete.tcl:111
msgid "Merged Into:"
-msgstr "Ð\9eбÑ\8aединено с:"
+msgstr "СлиÑ\8fние с:"
#: lib/remote_branch_delete.tcl:119
msgid "Always (Do not perform merge checks)"
-msgstr "Ð\92Ñ\81егда (не вÑ\8bполнÑ\8fÑ\82Ñ\8c пÑ\80овеÑ\80кÑ\83 обÑ\8aединений)"
+msgstr "Ð\92Ñ\81егда (не вÑ\8bполнÑ\8fÑ\82Ñ\8c пÑ\80овеÑ\80кÑ\83 на Ñ\81лиÑ\8fние)"
#: lib/remote_branch_delete.tcl:152
msgid "A branch is required for 'Merged Into'."
-msgstr "Ð\94лÑ\8f опÑ\86ии 'Ð\9eбÑ\8aединено с' требуется указать ветвь."
+msgstr "Ð\94лÑ\8f опÑ\86ии 'СлиÑ\8fние с' требуется указать ветвь."
#: lib/remote_branch_delete.tcl:184
#, tcl-format
"\n"
" - %s"
msgstr ""
-"Следующие ветви объединены с %s не полностью:\n"
+"Следующие ветви могут быть объединены с %s при помощи операции слияния:\n"
+"\n"
" - %s"
#: lib/remote_branch_delete.tcl:189
"One or more of the merge tests failed because you have not fetched the "
"necessary commits. Try fetching from %s first."
msgstr ""
-"Ð\9eдин или неÑ\81колÑ\8cко Ñ\82еÑ\81Ñ\82ов на обÑ\8aединение не прошли, потому что Вы не "
+"Ð\9dекоÑ\82оÑ\80Ñ\8bе Ñ\82еÑ\81Ñ\82Ñ\8b на Ñ\81лиÑ\8fние не прошли, потому что Вы не "
"получили необходимые состояния. Попытайтесь получить их из %s."
#: lib/remote_branch_delete.tcl:207
msgid "Scanning %s..."
msgstr "Перечитывание %s... "
-#: lib/remote.tcl:165
-msgid "Prune from"
-msgstr "ЧиÑ\81Ñ\82ка"
+#: lib/search.tcl:21
+msgid "Find:"
+msgstr "Ð\9fоиÑ\81к:"
-#: lib/remote.tcl:170
-msgid "Fetch from"
-msgstr "Ð\9fолÑ\83Ñ\87ение из"
+#: lib/search.tcl:23
+msgid "Next"
+msgstr "Ð\94алÑ\8cÑ\88е"
-#: lib/remote.tcl:213
-msgid "Push to"
-msgstr "Отправить"
+#: lib/search.tcl:24
+msgid "Prev"
+msgstr "Обратно"
+
+#: lib/search.tcl:25
+msgid "Case-Sensitive"
+msgstr "Игн. большие/маленькие"
#: lib/shortcut.tcl:20 lib/shortcut.tcl:61
msgid "Cannot write shortcut:"
msgid "Unrecognized spell checker"
msgstr "Нераспознаная программа проверки правописания"
-#: lib/spellcheck.tcl:180
+#: lib/spellcheck.tcl:186
msgid "No Suggestions"
msgstr "Исправлений не найдено"
-#: lib/spellcheck.tcl:381
+#: lib/spellcheck.tcl:388
msgid "Unexpected EOF from spell checker"
msgstr "Программа проверки правописания прервала передачу данных"
-#: lib/spellcheck.tcl:385
+#: 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 succeded, 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 "%s ... %*i из %*i %s (%3i%%)"
-#: lib/transport.tcl:6
+#: lib/tools.tcl:75
#, tcl-format
-msgid "fetch %s"
-msgstr "получение %s"
+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 succesfully: %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 "Pruning tracking branches deleted from %s"
msgstr "Чистка ветвей слежения, удаленных из %s"
-#: lib/transport.tcl:25 lib/transport.tcl:71
-#, tcl-format
-msgid "push %s"
-msgstr "отправить %s"
-
#: lib/transport.tcl:26
#, tcl-format
msgid "Pushing changes to %s"
msgstr "Отправка изменений в %s "
-#: lib/transport.tcl:72
+#: 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 "Отправка %s %s в %s"
-#: lib/transport.tcl:89
+#: lib/transport.tcl:100
msgid "Push Branches"
msgstr "Отправить изменения в ветвях"
-#: lib/transport.tcl:103
+#: lib/transport.tcl:114
msgid "Source Branches"
msgstr "Исходные ветви"
-#: lib/transport.tcl:120
+#: lib/transport.tcl:131
msgid "Destination Repository"
msgstr "Репозиторий назначения"
-#: lib/transport.tcl:158
+#: lib/transport.tcl:169
msgid "Transfer Options"
msgstr "Настройки отправки"
-#: lib/transport.tcl:160
+#: lib/transport.tcl:171
msgid "Force overwrite existing branch (may discard changes)"
msgstr "Намеренно переписать существующую ветвь (возможна потеря изменений)"
-#: lib/transport.tcl:164
+#: lib/transport.tcl:175
msgid "Use thin pack (for slow network connections)"
msgstr "Использовать thin pack (для медленных сетевых подключений)"
-#: lib/transport.tcl:168
+#: lib/transport.tcl:179
msgid "Include tags"
-msgstr "Передать таги"
+msgstr "Передать метки"
-#~ msgid "Next >"
-#~ msgstr "Дальше >"
diff --git a/git-gui/po/sv.po b/git-gui/po/sv.po
index 167654c7094c73f85b212ce5f48c401a31fca91b..c1535f94e86f2d619b4609965324a7c8ca0b396c 100644 (file)
--- a/git-gui/po/sv.po
+++ b/git-gui/po/sv.po
msgid "The following branches are not completely merged into %s:"
msgstr "Följande grenar är inte till fullo sammanslagna med %s:"
-#: lib/branch_delete.tcl:115
-msgid ""
-"Recovering deleted branches is difficult. \n"
-"\n"
-" Delete the selected branches?"
-msgstr ""
-"Det är svårt att återställa borttagna grenar.\n"
-"\n"
-" Ta bort valda grenar?"
-
#: lib/branch_delete.tcl:141
#, tcl-format
msgid ""
#: lib/tools.tcl:149
#, tcl-format
-msgid "Tool completed succesfully: %s"
+msgid "Tool completed successfully: %s"
msgstr "Verktyget avslutades framgångsrikt: %s"
#: lib/tools.tcl:151
diff --git a/git-gui/po/zh_cn.po b/git-gui/po/zh_cn.po
index d2c686667163ec4cd83045efd429e3413564290e..91c1be23c2bb8e87a6e08188f5a0f0b860af4242 100644 (file)
--- a/git-gui/po/zh_cn.po
+++ b/git-gui/po/zh_cn.po
msgid "The following branches are not completely merged into %s:"
msgstr "下列分支没有完全被合并到 %s:"
-#: lib/branch_delete.tcl:115
-msgid ""
-"Recovering deleted branches is difficult. \n"
-"\n"
-" Delete the selected branches?"
-msgstr ""
-"恢复被删除的分支非常困难.\n"
-"\n"
-"是否要删除所选分支?"
-
#: lib/branch_delete.tcl:141
#, tcl-format
msgid ""
index 53c3a94686813936445efbb055dc4f02885c70e9..66bbb2f8faaf83bc87819a9e288a0592f400e147 100644 (file)
exec wish "$0" -- "$@"
if { $argc >=2 && [lindex $argv 0] == "--working-dir" } {
- cd [lindex $argv 1]
+ set workdir [lindex $argv 1]
+ cd $workdir
+ if {[lindex [file split $workdir] end] eq {.git}} {
+ # Workaround for Explorer right click "Git GUI Here" on .git/
+ cd ..
+ }
set argv [lrange $argv 2 end]
incr argc -2
}
diff --git a/git-merge-one-file.sh b/git-merge-one-file.sh
index e1eb9632660146396a0b5f3f2a410d8cb027ff9d..9c2c1b7202462370509a7bdb391982ae32564bd6 100755 (executable)
--- a/git-merge-one-file.sh
+++ b/git-merge-one-file.sh
src1=`git-unpack-file $2`
git merge-file "$src1" "$orig" "$src2"
ret=$?
+ msg=
+ if [ $ret -ne 0 ]; then
+ msg='content conflict'
+ fi
# Create the working tree file, using "our tree" version from the
# index, and then store the result of the merge.
rm -f -- "$orig" "$src1" "$src2"
if [ "$6" != "$7" ]; then
- echo "ERROR: Permissions conflict: $5->$6,$7."
+ if [ -n "$msg" ]; then
+ msg="$msg, "
+ fi
+ msg="${msg}permissions conflict: $5->$6,$7"
ret=1
fi
if [ "$1" = '' ]; then
fi
if [ $ret -ne 0 ]; then
- echo "ERROR: Merge conflict in $4"
+ echo "ERROR: $msg in $4"
exit 1
fi
exec git update-index -- "$4"
diff --git a/git-svn.perl b/git-svn.perl
index c5965c9aafe8d5f990e64e88cea1061f84584b58..ef1d30db3889d0d33b43b1d15cd19281291f5aea 100755 (executable)
--- a/git-svn.perl
+++ b/git-svn.perl
'dry-run|n' => \$_dry_run } ],
'set-tree' => [ \&cmd_set_tree,
"Set an SVN repository to a git tree-ish",
- { 'stdin|' => \$_stdin, %cmt_opts, %fc_opts, } ],
+ { 'stdin' => \$_stdin, %cmt_opts, %fc_opts, } ],
'create-ignore' => [ \&cmd_create_ignore,
'Create a .gitignore per svn:ignore',
{ 'revision|r=i' => \$_revision
index cc5aaa76f10021018fd5a5ea84ae9912d3633b69..5a00726d09a13d5f70ab0378e02bbbd299124d5c 100644 (file)
--- a/git.c
+++ b/git.c
}
}
-static int handle_options(const char*** argv, int* argc, int* envchanged)
+static int handle_options(const char ***argv, int *argc, int *envchanged)
{
int handled = 0;
int envchanged = 0, ret = 0, saved_errno = errno;
const char *subdir;
int count, option_count;
- const char** new_argv;
+ const char **new_argv;
const char *alias_command;
char *alias_string;
int unused_nongit;
"trace: alias expansion: %s =>",
alias_command);
- new_argv = xrealloc(new_argv, sizeof(char*) *
+ new_argv = xrealloc(new_argv, sizeof(char *) *
(count + *argcp + 1));
/* insert after command name */
- memcpy(new_argv + count, *argv + 1, sizeof(char*) * *argcp);
+ memcpy(new_argv + count, *argv + 1, sizeof(char *) * *argcp);
new_argv[count+*argcp] = NULL;
*argv = new_argv;
index 04c777a20c1a8c10417cc9d44e53e5b99dc32a27..a649f063cf28baa5b0ddce72d7d6e4d9fca6f360 100644 (file)
--- a/grep.c
+++ b/grep.c
{
int hit = 0;
int saved_ch = 0;
+ const char *start = bol;
if ((p->token != GREP_PATTERN) &&
((p->token == GREP_PATTERN_HEAD) != (ctx == GREP_CONTEXT_HEAD)))
}
if (p->token == GREP_PATTERN_HEAD && saved_ch)
*eol = saved_ch;
+ if (hit) {
+ pmatch[0].rm_so += bol - start;
+ pmatch[0].rm_eo += bol - start;
+ }
return hit;
}
diff --git a/http-push.c b/http-push.c
index 5138224cc372482fb60afd350fa40e37d019f367..e16a0ad3f97ef49930a599d3a800a0c7fad317e0 100644 (file)
--- a/http-push.c
+++ b/http-push.c
"%s.temp", filename);
snprintf(prevfile, sizeof(prevfile), "%s.prev", request->filename);
- unlink(prevfile);
+ unlink_or_warn(prevfile);
rename(request->tmpfile, prevfile);
- unlink(request->tmpfile);
+ unlink_or_warn(request->tmpfile);
if (request->local_fileno != -1)
error("fd leakage in start: %d", request->local_fileno);
} while (prev_read > 0);
close(prevlocal);
}
- unlink(prevfile);
+ unlink_or_warn(prevfile);
/* Reset inflate/SHA1 if there was an error reading the previous temp
file; also rewind to the beginning of the local file. */
request->http_code != 416) {
if (stat(request->tmpfile, &st) == 0) {
if (st.st_size == 0)
- unlink(request->tmpfile);
+ unlink_or_warn(request->tmpfile);
}
} else {
if (request->http_code == 416)
git_inflate_end(&request->stream);
git_SHA1_Final(request->real_sha1, &request->c);
if (request->zret != Z_STREAM_END) {
- unlink(request->tmpfile);
+ unlink_or_warn(request->tmpfile);
} else if (hashcmp(request->obj->sha1, request->real_sha1)) {
- unlink(request->tmpfile);
+ unlink_or_warn(request->tmpfile);
} else {
request->rename =
move_temp_to_file(
fprintf(stderr, "Removing remote locks...\n");
while (lock) {
+ struct remote_lock *next = lock->next;
unlock_remote(lock);
- lock = lock->next;
+ lock = next;
}
}
diff --git a/http-walker.c b/http-walker.c
index c5a3ea3b31045be9407579a9d1aba222ee3e9914..7321ccc9fe751a1e608c6620bcce401eac7ff98c 100644 (file)
--- a/http-walker.c
+++ b/http-walker.c
struct walker_data *data = walker->data;
snprintf(prevfile, sizeof(prevfile), "%s.prev", obj_req->filename);
- unlink(prevfile);
+ unlink_or_warn(prevfile);
rename(obj_req->tmpfile, prevfile);
- unlink(obj_req->tmpfile);
+ unlink_or_warn(obj_req->tmpfile);
if (obj_req->local != -1)
error("fd leakage in start: %d", obj_req->local);
} while (prev_read > 0);
close(prevlocal);
}
- unlink(prevfile);
+ unlink_or_warn(prevfile);
/* Reset inflate/SHA1 if there was an error reading the previous temp
file; also rewind to the beginning of the local file. */
} else if (obj_req->curl_result != CURLE_OK) {
if (stat(obj_req->tmpfile, &st) == 0)
if (st.st_size == 0)
- unlink(obj_req->tmpfile);
+ unlink_or_warn(obj_req->tmpfile);
return;
}
git_inflate_end(&obj_req->stream);
git_SHA1_Final(obj_req->real_sha1, &obj_req->c);
if (obj_req->zret != Z_STREAM_END) {
- unlink(obj_req->tmpfile);
+ unlink_or_warn(obj_req->tmpfile);
return;
}
if (hashcmp(obj_req->sha1, obj_req->real_sha1)) {
- unlink(obj_req->tmpfile);
+ unlink_or_warn(obj_req->tmpfile);
return;
}
obj_req->rename =
close(obj_req->local);
obj_req->local = -1;
}
- unlink(obj_req->tmpfile);
+ unlink_or_warn(obj_req->tmpfile);
if (obj_req->slot) {
release_active_slot(obj_req->slot);
obj_req->slot = NULL;
diff --git a/ll-merge.c b/ll-merge.c
index fa2ca5250c75a0d335570a3a3c71b20ebd0b42fa..81c02ad0531e98379d8cd11dc7c2d70214d67fb4 100644 (file)
--- a/ll-merge.c
+++ b/ll-merge.c
close(fd);
bad:
for (i = 0; i < 3; i++)
- unlink(temp[i]);
+ unlink_or_warn(temp[i]);
strbuf_release(&cmd);
return status;
}
diff --git a/lockfile.c b/lockfile.c
index 3dbb2d1ff9407a7417be294adedc5312e7421a96..eb931eded5a6ed20f1d80dadf08cbb8009d85767 100644 (file)
--- a/lockfile.c
+++ b/lockfile.c
lock_file_list->filename[0]) {
if (lock_file_list->fd >= 0)
close(lock_file_list->fd);
- unlink(lock_file_list->filename);
+ unlink_or_warn(lock_file_list->filename);
}
lock_file_list = lock_file_list->next;
}
* link is a relative path, so I must replace the
* last element of p with it.
*/
- char *r = (char*)last_path_elm(p);
+ char *r = (char *)last_path_elm(p);
if (r - p + link_len < s)
strcpy(r, link);
else {
if (lk->filename[0]) {
if (lk->fd >= 0)
close(lk->fd);
- unlink(lk->filename);
+ unlink_or_warn(lk->filename);
}
lk->filename[0] = 0;
}
diff --git a/object.c b/object.c
index 7e6a92c88e7b139ec03e0ff26e97e1559a06a220..e1feef9c3329e0370e7caff612b4f6c8684cbaef 100644 (file)
--- a/object.c
+++ b/object.c
static unsigned int hash_obj(struct object *obj, unsigned int n)
{
- unsigned int hash = *(unsigned int *)obj->sha1;
+ unsigned int hash;
+ memcpy(&hash, obj->sha1, sizeof(unsigned int));
return hash % n;
}
diff --git a/pack-refs.c b/pack-refs.c
index 2c76fb181f64e10c65517224b0c09cb648db81ac..301fc60eae1ad53721851a272a0fbd0192881801 100644 (file)
--- a/pack-refs.c
+++ b/pack-refs.c
struct ref_lock *lock = lock_ref_sha1(r->name + 5, r->sha1);
if (lock) {
- unlink(git_path("%s", r->name));
+ unlink_or_warn(git_path("%s", r->name));
unlock_ref(lock);
}
}
diff --git a/reflog-walk.c b/reflog-walk.c
index fd065f4e1a689176a3f3255b2d88270bce094ff0..5623ea6b48a2f355e8866eabb2805b51b4127a4a 100644 (file)
--- a/reflog-walk.c
+++ b/reflog-walk.c
commit->object.flags &= ~(ADDED | SEEN | SHOWN);
}
-void show_reflog_message(struct reflog_walk_info* info, int oneline,
+void show_reflog_message(struct reflog_walk_info *info, int oneline,
enum date_mode dmode)
{
if (info && info->last_commit_reflog) {
index e65a3b4c4ef57863a1055108d2598777cabc2c8d..90163bdc56868151e4fd45ff77aa3bd56db45573 100644 (file)
--- a/refs.c
+++ b/refs.c
@@ -893,8 +893,10 @@ static struct ref_lock *lock_ref_sha1_basic(const char *ref, const unsigned char
* name is a proper prefix of our refname.
*/
if (missing &&
- !is_refname_available(ref, NULL, get_packed_refs(), 0))
+ !is_refname_available(ref, NULL, get_packed_refs(), 0)) {
+ last_errno = ENOTDIR;
goto error_return;
+ }
lock->lk = xcalloc(1, sizeof(struct lock_file));
} else {
path = git_path("%s", refname);
}
- err = unlink(path);
- if (err && errno != ENOENT) {
+ err = unlink_or_warn(path);
+ if (err && errno != ENOENT)
ret = 1;
- error("unlink(%s) failed: %s",
- path, strerror(errno));
- }
+
if (!(delopt & REF_NODEREF))
lock->lk->filename[i] = '.';
}
*/
ret |= repack_without_ref(refname);
- err = unlink(git_path("logs/%s", lock->ref_name));
- if (err && errno != ENOENT)
- warning("unlink(%s) failed: %s",
- git_path("logs/%s", lock->ref_name), strerror(errno));
+ unlink_or_warn(git_path("logs/%s", lock->ref_name));
invalidate_cached_refs();
unlock_ref(lock);
return ret;
if (adjust_shared_perm(git_HEAD)) {
error("Unable to fix permissions on %s", lockpath);
error_unlink_return:
- unlink(lockpath);
+ unlink_or_warn(lockpath);
error_free_return:
free(git_HEAD);
return -1;
diff --git a/rerere.c b/rerere.c
index 713c6e16ac536eaa667cc9f22768670be129483c..87360dc23e54aabf47b3bda160e58058507d4a2f 100644 (file)
--- a/rerere.c
+++ b/rerere.c
git_SHA1_Final(sha1, &ctx);
if (hunk != RR_CONTEXT) {
if (output)
- unlink(output);
+ unlink_or_warn(output);
return error("Could not parse conflict hunks in %s", path);
}
if (wrerror)
diff --git a/run-command.c b/run-command.c
index b05c734d05e99cd009a0df26f0fc95fa13ae6f25..eb2efc33073512efd14b65e67db8cf814ca3fa33 100644 (file)
--- a/run-command.c
+++ b/run-command.c
if (cmd->env) {
for (; *cmd->env; cmd->env++) {
if (strchr(*cmd->env, '='))
- putenv((char*)*cmd->env);
+ putenv((char *)*cmd->env);
else
unsetenv(*cmd->env);
}
diff --git a/server-info.c b/server-info.c
index 66b0d9d878a011393582b837301eb1fd5caf2e40..4098ca2b5c166c32cfe4aea9d1bff2e6593e9a60 100644 (file)
--- a/server-info.c
+++ b/server-info.c
static int compare_info(const void *a_, const void *b_)
{
- struct pack_info * const* a = a_;
- struct pack_info * const* b = b_;
+ struct pack_info *const *a = a_;
+ struct pack_info *const *b = b_;
if (0 <= (*a)->old_num && 0 <= (*b)->old_num)
/* Keep the order in the original */
errs = errs | update_info_packs(force);
/* remove leftover rev-cache file if there is any */
- unlink(git_path("info/rev-cache"));
+ unlink_or_warn(git_path("info/rev-cache"));
return errs;
}
diff --git a/sha1_file.c b/sha1_file.c
index f708cf4f674fdf393044d6c36c7d97f1fa7dcd0c..e73cd4fc0ba2daac14f604f1973d1b0658212b26 100644 (file)
--- a/sha1_file.c
+++ b/sha1_file.c
return error("packfile %s index unavailable", p->pack_name);
p->pack_fd = open(p->pack_name, O_RDONLY);
+ while (p->pack_fd < 0 && errno == EMFILE && unuse_one_window(p, -1))
+ p->pack_fd = open(p->pack_name, O_RDONLY);
if (p->pack_fd < 0 || fstat(p->pack_fd, &st))
return -1;
&& (offset + 20) <= (win_off + win->len);
}
-unsigned char* use_pack(struct packed_git *p,
+unsigned char *use_pack(struct packed_git *p,
struct pack_window **w_cursor,
off_t offset,
unsigned int *left)
sprintf(path, "%s/pack", objdir);
len = strlen(path);
dir = opendir(path);
+ while (!dir && errno == EMFILE && unuse_one_window(packed_git, -1))
+ dir = opendir(path);
if (!dir) {
if (errno != ENOENT)
error("unable to open object pack directory: %s: %s",
goto out;
ret = errno;
}
- unlink(tmpfile);
+ unlink_or_warn(tmpfile);
if (ret) {
if (ret != EEXIST) {
return error("unable to write sha1 filename %s: %s\n", filename, strerror(ret));
@@ -2339,6 +2343,8 @@ static int write_loose_object(const unsigned char *sha1, char *hdr, int hdrlen,
filename = sha1_file_name(sha1);
fd = create_tmpfile(tmpfile, sizeof(tmpfile), filename);
+ while (fd < 0 && errno == EMFILE && unuse_one_window(packed_git, -1))
+ fd = create_tmpfile(tmpfile, sizeof(tmpfile), filename);
if (fd < 0) {
if (errno == EACCES)
return error("insufficient permission for adding an object to repository database %s\n", get_object_directory());
diff --git a/t/annotate-tests.sh b/t/annotate-tests.sh
index cacb273afff1fbddf152bb440451fa141589cf33..396b9653a3ad80490cf360c86a910edff58862a2 100644 (file)
--- a/t/annotate-tests.sh
+++ b/t/annotate-tests.sh
test_expect_success \
'some edit' \
'mv file file.orig &&
- sed -e "s/^3A/99/" -e "/^1A/d" -e "/^incomplete/d" < file.orig > file &&
+ {
+ cat file.orig &&
+ echo
+ } | sed -e "s/^3A/99/" -e "/^1A/d" -e "/^incomplete/d" > file &&
echo "incomplete" | tr -d "\\012" >>file &&
GIT_AUTHOR_NAME="D" git commit -a -m "edit"'
diff --git a/t/t2014-switch.sh b/t/t2014-switch.sh
--- /dev/null
+++ b/t/t2014-switch.sh
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+test_description='Peter MacMillan'
+. ./test-lib.sh
+
+test_expect_success setup '
+ echo Hello >file &&
+ git add file &&
+ test_tick &&
+ git commit -m V1 &&
+ echo Hello world >file &&
+ git add file &&
+ git checkout -b other
+'
+
+test_expect_success 'check all changes are staged' '
+ git diff --exit-code
+'
+
+test_expect_success 'second commit' '
+ git commit -m V2
+'
+
+test_expect_success 'check' '
+ git diff --cached --exit-code
+'
+
+test_done
index 11061ddd5bd122a1e180509c018e1b8bea42ddc3..922a8941ed4720e2ad6dcd500a3759187aace969 100755 (executable)
--- a/t/t4014-format-patch.sh
+++ b/t/t4014-format-patch.sh
test -f "$basename"
'
+test_expect_success 'format-patch --in-reply-to' '
+ git format-patch -1 --stdout --in-reply-to "baz@foo.bar" > patch8 &&
+ grep "^In-Reply-To: <baz@foo.bar>" patch8 &&
+ grep "^References: <baz@foo.bar>" patch8
+'
+
+test_expect_success 'format-patch --signoff' '
+ git format-patch -1 --signoff --stdout |
+ grep "^Signed-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>"
+'
+
test_done
index be541348c6f8d469428e2fcc7abaf6d25168c08f..5b10e976a3fd0c554ff2fa14004e69343a9ec634 100755 (executable)
--- a/t/t4018-diff-funcname.sh
+++ b/t/t4018-diff-funcname.sh
sed 's/beer\\/beer,\\/' < Beer.java > Beer-correct.java
-builtin_patterns="bibtex html java objc pascal php python ruby tex"
+builtin_patterns="bibtex cpp html java objc pascal php python ruby tex"
for p in $builtin_patterns
do
test_expect_success "builtin $p pattern compiles" '
index 390af2389f3b9559fcfebe1e21a24317562ab7af..3c27f0dc19648e6c21ff4b1702f3e93f4b64755e 100755 (executable)
'
+test_expect_success '--start-number && --numbered' '
+
+ git format-patch --start-number 3 --numbered --stdout HEAD~1 > patch8 &&
+ grep "^Subject: \[PATCH 3/3\]" patch8
+'
+
test_done
index 9ddbbcde57489e266e2f229314ebac5dbfeb3be6..3ccc237a8d4443bfc8763fbb9cb51033f846b0e8 100755 (executable)
-#!/bin/bash
+#!/bin/sh
#
# Copyright (c) Jim Meyering
#
index f92e259cc6f251ec6f89edee3fc16720f264d82f..65f2e4c3efb9ae5b5459e15df337e07201d78c38 100755 (executable)
cat file1 &&
echo Q | tr -d "\\012"
} >file2 &&
- cat file2 >file2.orig
+ cat file2 >file2.orig &&
git add file1 file2 &&
sed -e "/^B/d" <file1.orig >file1 &&
- sed -e "/^[BQ]/d" <file2.orig >file2 &&
+ cat file1 > file2 &&
echo Q | tr -d "\\012" >>file2 &&
cat file1 >file1.mods &&
cat file2 >file2.mods &&
diff --git a/t/t4200-rerere.sh b/t/t4200-rerere.sh
index b68ab11f2915789cd04ac6bd43363aeab2079198..a6bc028a57115729d38e4b228cd259880d0bf6f8 100755 (executable)
--- a/t/t4200-rerere.sh
+++ b/t/t4200-rerere.sh
test_must_fail git merge first
'
-sha1=$(sed -e 's/ .*//' .git/MERGE_RR)
+sha1=$(perl -pe 's/ .*//' .git/MERGE_RR)
rr=.git/rr-cache/$sha1
test_expect_success 'recorded preimage' "grep ^=======$ $rr/preimage"
git add file2 &&
git commit -m version2 &&
test_must_fail git merge fourth &&
- sha1=$(sed -e "s/ .*//" .git/MERGE_RR) &&
- rr=.git/rr-cache/$sha1 &&
echo Cello > file2 &&
git add file2 &&
git commit -m resolution
diff --git a/t/t7201-co.sh b/t/t7201-co.sh
index bdb808af1aefae97c297f7845a8cd3b595404e89..ebfd34df36068f8808406a98d371731fb85012c4 100755 (executable)
--- a/t/t7201-co.sh
+++ b/t/t7201-co.sh
'
+test_expect_success 'switch out of non-branch' '
+ git reset --hard master &&
+ git checkout master^0 &&
+ echo modified >one &&
+ test_must_fail git checkout renamer 2>error.log &&
+ ! grep "^Previous HEAD" error.log
+'
+
test_done
diff --git a/t/t8005-blame-i18n.sh b/t/t8005-blame-i18n.sh
index 4470a92bb235420a2a0123eca5b57e06039ff011..fcd5c266754a2b5de3dbbf94c8ef25aebff061f2 100755 (executable)
--- a/t/t8005-blame-i18n.sh
+++ b/t/t8005-blame-i18n.sh
test_expect_success \
'blame respects i18n.commitencoding' '
git blame --incremental file | \
- grep "^\(author\|summary\) " > actual &&
+ egrep "^(author|summary) " > actual &&
test_cmp actual expected
'
'blame respects i18n.logoutputencoding' '
git config i18n.logoutputencoding cp1251 &&
git blame --incremental file | \
- grep "^\(author\|summary\) " > actual &&
+ egrep "^(author|summary) " > actual &&
test_cmp actual expected
'
test_expect_success \
'blame respects --encoding=utf-8' '
git blame --incremental --encoding=utf-8 file | \
- grep "^\(author\|summary\) " > actual &&
+ egrep "^(author|summary) " > actual &&
test_cmp actual expected
'
test_expect_success \
'blame respects --encoding=none' '
git blame --incremental --encoding=none file | \
- grep "^\(author\|summary\) " > actual &&
+ egrep "^(author|summary) " > actual &&
test_cmp actual expected
'
index 0e49279c7f7b805c78f1bc4760a0d1c70a84a0d9..0ba62076fb4a381e588eba90ed639dd560860fd3 100755 (executable)
#
# To enable this hook, rename this file to "pre-commit".
-if git-rev-parse --verify HEAD 2>/dev/null
+if git-rev-parse --verify HEAD >/dev/null 2>&1
then
against=HEAD
else
diff --git a/transport.c b/transport.c
index 3dfb03c06ed82102f60045d6889db97cf036651e..efecb65258ba95ee743f0e3ca178e74e2756e7d1 100644 (file)
--- a/transport.c
+++ b/transport.c
void transport_unlock_pack(struct transport *transport)
{
if (transport->pack_lockfile) {
- unlink(transport->pack_lockfile);
+ unlink_or_warn(transport->pack_lockfile);
free(transport->pack_lockfile);
transport->pack_lockfile = NULL;
}
diff --git a/unpack-trees.c b/unpack-trees.c
index e4eb8fa3afc7ad895ba925701ee3c6881b29bd91..aaacaf1015ccf1f353151982a3018ad349663d76 100644 (file)
--- a/unpack-trees.c
+++ b/unpack-trees.c
{
if (has_symlink_or_noent_leading_path(ce->name, ce_namelen(ce)))
return;
- if (unlink(ce->name))
+ if (unlink_or_warn(ce->name))
return;
schedule_dir_for_removal(ce->name, ce_namelen(ce));
}
diff --git a/wrapper.c b/wrapper.c
index d8efb1365a01104db568633fa8f6aef0c67b4cd1..7eb3218ee995991881252e4bb599452d7214ae4f 100644 (file)
--- a/wrapper.c
+++ b/wrapper.c
safe_create_leading_directories(name);
return open(name, O_RDWR|O_CREAT|O_EXCL, 0600);
}
+
+int unlink_or_warn(const char *file)
+{
+ int rc = unlink(file);
+
+ if (rc < 0) {
+ int err = errno;
+ if (ENOENT != err) {
+ warning("unable to unlink %s: %s",
+ file, strerror(errno));
+ errno = err;
+ }
+ }
+ return rc;
+}
+
diff --git a/wt-status.c b/wt-status.c
index 929b00f59285c21a07df98700c23171505f5cddb..1b6df45450c39c0f456df68485b5735950816ac8 100644 (file)
--- a/wt-status.c
+++ b/wt-status.c
die("bad config variable '%s'", var);
}
-static const char* color(int slot)
+static const char *color(int slot)
{
return wt_status_use_color > 0 ? wt_status_colors[slot] : "";
}