summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.clang-format2
-rw-r--r--Documentation/config/user.txt23
-rw-r--r--Documentation/diff-format.txt20
-rw-r--r--Documentation/diff-generate-patch.txt13
-rw-r--r--Documentation/diff-options.txt22
-rw-r--r--Documentation/git-branch.txt6
-rw-r--r--Documentation/git-checkout.txt12
-rw-r--r--Documentation/git-diff-tree.txt11
-rw-r--r--Documentation/git-rebase.txt3
-rw-r--r--Documentation/git-submodule.txt4
-rw-r--r--Documentation/githooks.txt4
-rw-r--r--Documentation/merge-options.txt11
-rw-r--r--Documentation/pretty-formats.txt264
-rw-r--r--Documentation/rev-list-options.txt7
-rw-r--r--Documentation/technical/api-trace2.txt1349
-rw-r--r--Documentation/technical/protocol-capabilities.txt18
-rwxr-xr-xGIT-VERSION-GEN2
-rw-r--r--Makefile16
-rw-r--r--README.md2
-rw-r--r--apply.c4
-rw-r--r--blame.c3
-rw-r--r--builtin/am.c6
-rw-r--r--builtin/blame.c2
-rw-r--r--builtin/branch.c25
-rw-r--r--builtin/checkout.c134
-rw-r--r--builtin/commit.c11
-rw-r--r--builtin/diff-tree.c6
-rw-r--r--builtin/diff.c20
-rw-r--r--builtin/help.c4
-rw-r--r--builtin/log.c8
-rw-r--r--builtin/merge.c9
-rw-r--r--builtin/pack-objects.c16
-rw-r--r--builtin/pack-redundant.c232
-rw-r--r--builtin/prune-packed.c5
-rw-r--r--builtin/prune.c44
-rw-r--r--builtin/pull.c4
-rw-r--r--builtin/rebase.c17
-rw-r--r--builtin/receive-pack.c27
-rw-r--r--builtin/replace.c4
-rw-r--r--builtin/reset.c6
-rw-r--r--builtin/submodule--helper.c9
-rw-r--r--builtin/update-index.c41
-rw-r--r--builtin/worktree.c1
-rw-r--r--cache.h21
-rw-r--r--check-racy.c28
-rw-r--r--combine-diff.c76
-rw-r--r--common-main.c13
-rw-r--r--compat/mingw.c13
-rw-r--r--compat/mingw.h3
-rw-r--r--compat/win32/trace2_win32_process_info.c147
-rw-r--r--config.c6
-rw-r--r--config.mak.uname2
-rw-r--r--connect.c3
-rw-r--r--contrib/completion/git-completion.bash45
-rw-r--r--date.c4
-rw-r--r--diff-lib.c2
-rw-r--r--diff-no-index.c8
-rw-r--r--diff.c616
-rw-r--r--diff.h85
-rw-r--r--editor.c1
-rw-r--r--entry.c26
-rw-r--r--exec-cmd.c2
-rw-r--r--git-compat-util.h7
-rwxr-xr-xgit-send-email.perl6
-rwxr-xr-xgit-submodule.sh3
-rw-r--r--git.c65
-rw-r--r--ident.c92
-rw-r--r--list-objects-filter-options.c4
-rw-r--r--log-tree.c3
-rw-r--r--merge-recursive.c23
-rw-r--r--pack-objects.c3
-rw-r--r--pack-objects.h6
-rw-r--r--pager.c1
-rw-r--r--parse-options-cb.c7
-rw-r--r--parse-options.c152
-rw-r--r--parse-options.h108
-rw-r--r--po/TEAMS9
-rw-r--r--po/bg.po6795
-rw-r--r--po/ca.po203
-rw-r--r--po/de.po7203
-rw-r--r--po/el.po21468
-rw-r--r--po/es.po6789
-rw-r--r--po/fr.po7776
-rw-r--r--po/git.pot6571
-rw-r--r--po/it.po21711
-rw-r--r--po/sv.po6811
-rw-r--r--po/vi.po6954
-rw-r--r--po/zh_CN.po6720
-rw-r--r--pretty.c117
-rw-r--r--reachable.c42
-rw-r--r--read-cache.c64
-rw-r--r--ref-filter.c40
-rw-r--r--refs/files-backend.c5
-rw-r--r--remote-curl.c7
-rw-r--r--repository.c2
-rw-r--r--repository.h3
-rw-r--r--revision.c6
-rw-r--r--revision.h1
-rw-r--r--run-command.c59
-rw-r--r--run-command.h13
-rw-r--r--sequencer.c7
-rw-r--r--sh-i18n--envsubst.c3
-rw-r--r--split-index.c36
-rw-r--r--strbuf.c21
-rw-r--r--strbuf.h8
-rw-r--r--sub-process.c1
-rw-r--r--submodule-config.c9
-rw-r--r--submodule.c15
-rw-r--r--t/README9
-rw-r--r--t/helper/test-genzeros.c21
-rw-r--r--t/helper/test-parse-options.c3
-rw-r--r--t/helper/test-tool.c5
-rw-r--r--t/helper/test-tool.h2
-rw-r--r--t/helper/test-trace2.c273
-rw-r--r--t/lib-httpd.sh1
-rwxr-xr-xt/perf/p5304-prune.sh35
-rwxr-xr-xt/t0001-init.sh1
-rwxr-xr-xt/t0210-trace2-normal.sh135
-rw-r--r--t/t0210/scrub_normal.perl48
-rwxr-xr-xt/t0211-trace2-perf.sh153
-rw-r--r--t/t0211/scrub_perf.perl76
-rwxr-xr-xt/t0212-trace2-event.sh236
-rw-r--r--t/t0212/parse_events.perl251
-rwxr-xr-xt/t1300-config.sh1
-rwxr-xr-xt/t1404-update-ref-errors.sh2
-rwxr-xr-xt/t1700-split-index.sh18
-rwxr-xr-xt/t2025-checkout-no-overlay.sh47
-rwxr-xr-xt/t2400-worktree-add.sh (renamed from t/t2025-worktree-add.sh)0
-rwxr-xr-xt/t2401-worktree-prune.sh (renamed from t/t2026-worktree-prune.sh)0
-rwxr-xr-xt/t2402-worktree-list.sh (renamed from t/t2027-worktree-list.sh)0
-rwxr-xr-xt/t2403-worktree-move.sh (renamed from t/t2028-worktree-move.sh)0
-rwxr-xr-xt/t2404-worktree-config.sh (renamed from t/t2029-worktree-config.sh)0
-rwxr-xr-xt/t3203-branch-output.sh44
-rwxr-xr-xt/t4038-diff-combined.sh88
-rwxr-xr-xt/t4053-diff-no-index.sh8
-rwxr-xr-xt/t4205-log-pretty-formats.sh117
-rwxr-xr-xt/t5304-prune.sh28
-rwxr-xr-xt/t5318-commit-graph.sh2
-rwxr-xr-xt/t5323-pack-redundant.sh467
-rwxr-xr-xt/t5562-http-backend-content-length.sh12
-rwxr-xr-xt/t6120-describe.sh8
-rwxr-xr-xt/t7517-per-repo-email.sh74
-rwxr-xr-xt/t7800-difftool.sh4
-rwxr-xr-xt/t9902-completion.sh1
-rw-r--r--t/test-lib-functions.sh8
-rw-r--r--t/test-lib.sh6
-rw-r--r--trace2.c761
-rw-r--r--trace2.h385
-rw-r--r--trace2/tr2_cfg.c90
-rw-r--r--trace2/tr2_cfg.h19
-rw-r--r--trace2/tr2_cmd_name.c30
-rw-r--r--trace2/tr2_cmd_name.h24
-rw-r--r--trace2/tr2_dst.c252
-rw-r--r--trace2/tr2_dst.h36
-rw-r--r--trace2/tr2_sid.c67
-rw-r--r--trace2/tr2_sid.h18
-rw-r--r--trace2/tr2_tbuf.c32
-rw-r--r--trace2/tr2_tbuf.h23
-rw-r--r--trace2/tr2_tgt.h133
-rw-r--r--trace2/tr2_tgt_event.c588
-rw-r--r--trace2/tr2_tgt_normal.c323
-rw-r--r--trace2/tr2_tgt_perf.c534
-rw-r--r--trace2/tr2_tls.c164
-rw-r--r--trace2/tr2_tls.h97
-rw-r--r--trailer.c25
-rw-r--r--trailer.h4
-rw-r--r--transport-helper.c2
-rw-r--r--transport.c1
-rw-r--r--unpack-trees.c21
-rw-r--r--usage.c31
-rw-r--r--wt-status.c24
-rw-r--r--xdiff-interface.c4
172 files changed, 81226 insertions, 28123 deletions
diff --git a/.clang-format b/.clang-format
index de1c8b5..41d4cd2 100644
--- a/.clang-format
+++ b/.clang-format
@@ -149,7 +149,7 @@ Cpp11BracedListStyle: false
# A list of macros that should be interpreted as foreach loops instead of as
# function calls.
-ForEachMacros: ['for_each_string_list_item']
+ForEachMacros: ['for_each_string_list_item', 'for_each_wanted_builtin', 'for_each_builtin', 'for_each_ut']
# The maximum number of consecutive empty lines to keep.
MaxEmptyLinesToKeep: 1
diff --git a/Documentation/config/user.txt b/Documentation/config/user.txt
index b5b2ba1..0557cbb 100644
--- a/Documentation/config/user.txt
+++ b/Documentation/config/user.txt
@@ -1,12 +1,19 @@
-user.email::
- Your email address to be recorded in any newly created commits.
- Can be overridden by the `GIT_AUTHOR_EMAIL`, `GIT_COMMITTER_EMAIL`, and
- `EMAIL` environment variables. See linkgit:git-commit-tree[1].
-
user.name::
- Your full name to be recorded in any newly created commits.
- Can be overridden by the `GIT_AUTHOR_NAME` and `GIT_COMMITTER_NAME`
- environment variables. See linkgit:git-commit-tree[1].
+user.email::
+author.name::
+author.email::
+committer.name::
+committer.email::
+ The `user.name` and `user.email` variables determine what ends
+ up in the `author` and `committer` field of commit
+ objects.
+ If you need the `author` or `committer` to be different, the
+ `author.name`, `author.email`, `committer.name` or
+ `committer.email` variables can be set.
+ Also, all of these can be overridden by the `GIT_AUTHOR_NAME`,
+ `GIT_AUTHOR_EMAIL`, `GIT_COMMITTER_NAME`,
+ `GIT_COMMITTER_EMAIL` and `EMAIL` environment variables.
+ See linkgit:git-commit-tree[1] for more information.
user.useConfigOnly::
Instruct Git to avoid trying to guess defaults for `user.email`
diff --git a/Documentation/diff-format.txt b/Documentation/diff-format.txt
index cdcc17f..4d846d7 100644
--- a/Documentation/diff-format.txt
+++ b/Documentation/diff-format.txt
@@ -95,12 +95,26 @@ from the format described above in the following way:
. there are more "src" modes and "src" sha1
. status is concatenated status characters for each parent
. no optional "score" number
-. single path, only for "dst"
+. tab-separated pathname(s) of the file
-Example:
+For `-c` and `--cc`, only the destination or final path is shown even
+if the file was renamed on any side of history. With
+`--combined-all-paths`, the name of the path in each parent is shown
+followed by the name of the path in the merge commit.
+
+Examples for `-c` and `--cc` without `--combined-all-paths`:
+------------------------------------------------
+::100644 100644 100644 fabadb8 cc95eb0 4866510 MM desc.c
+::100755 100755 100755 52b7a2d 6d1ac04 d2ac7d7 RM bar.sh
+::100644 100644 100644 e07d6c5 9042e82 ee91881 RR phooey.c
+------------------------------------------------
+
+Examples when `--combined-all-paths` added to either `-c` or `--cc`:
------------------------------------------------
-::100644 100644 100644 fabadb8 cc95eb0 4866510 MM describe.c
+::100644 100644 100644 fabadb8 cc95eb0 4866510 MM desc.c desc.c desc.c
+::100755 100755 100755 52b7a2d 6d1ac04 d2ac7d7 RM foo.sh bar.sh bar.sh
+::100644 100644 100644 e07d6c5 9042e82 ee91881 RR fooey.c fuey.c phooey.c
------------------------------------------------
Note that 'combined diff' lists only files which were modified from
diff --git a/Documentation/diff-generate-patch.txt b/Documentation/diff-generate-patch.txt
index 231105c..f10ca41 100644
--- a/Documentation/diff-generate-patch.txt
+++ b/Documentation/diff-generate-patch.txt
@@ -143,6 +143,19 @@ copying detection) are designed to work with diff of two
Similar to two-line header for traditional 'unified' diff
format, `/dev/null` is used to signal created or deleted
files.
++
+However, if the --combined-all-paths option is provided, instead of a
+two-line from-file/to-file you get a N+1 line from-file/to-file header,
+where N is the number of parents in the merge commit
+
+ --- a/file
+ --- a/file
+ --- a/file
+ +++ b/file
++
+This extended format can be useful if rename or copy detection is
+active, to allow you to see the original name of the file in different
+parents.
4. Chunk header format is modified to prevent people from
accidentally feeding it to `patch -p1`. Combined diff format
diff --git a/Documentation/diff-options.txt b/Documentation/diff-options.txt
index 554a340..5ebc568 100644
--- a/Documentation/diff-options.txt
+++ b/Documentation/diff-options.txt
@@ -36,11 +36,21 @@ endif::git-format-patch[]
-U<n>::
--unified=<n>::
Generate diffs with <n> lines of context instead of
- the usual three.
+ the usual three. Implies `--patch`.
ifndef::git-format-patch[]
Implies `-p`.
endif::git-format-patch[]
+--output=<file>::
+ Output to a specific file instead of stdout.
+
+--output-indicator-new=<char>::
+--output-indicator-old=<char>::
+--output-indicator-context=<char>::
+ Specify the character used to indicate new, old or context
+ lines in the generated patch. Normally they are '+', '-' and
+ ' ' respectively.
+
ifndef::git-format-patch[]
--raw::
ifndef::git-log[]
@@ -148,6 +158,7 @@ These parameters can also be set individually with `--stat-width=<width>`,
number of modified files, as well as number of added and deleted
lines.
+-X[<param1,param2,...>]::
--dirstat[=<param1,param2,...>]::
Output the distribution of relative amount of changes for each
sub-directory. The behavior of `--dirstat` can be customized by
@@ -192,6 +203,12 @@ directories with less than 10% of the total amount of changed files,
and accumulating child directory counts in the parent directories:
`--dirstat=files,10,cumulative`.
+--cumulative::
+ Synonym for --dirstat=cumulative
+
+--dirstat-by-file[=<param1,param2>...]::
+ Synonym for --dirstat=files,param1,param2...
+
--summary::
Output a condensed summary of extended header information
such as creations, renames and mode changes.
@@ -386,6 +403,9 @@ endif::git-format-patch[]
Turn off rename detection, even when the configuration
file gives the default to do so.
+--[no-]rename-empty::
+ Whether to use empty blobs as rename source.
+
ifndef::git-format-patch[]
--check::
Warn if changes introduce conflict markers or whitespace errors.
diff --git a/Documentation/git-branch.txt b/Documentation/git-branch.txt
index 3bd83a7..0cd87dd 100644
--- a/Documentation/git-branch.txt
+++ b/Documentation/git-branch.txt
@@ -9,7 +9,7 @@ SYNOPSIS
--------
[verse]
'git branch' [--color[=<when>] | --no-color] [-r | -a]
- [--list] [-v [--abbrev=<length> | --no-abbrev]]
+ [--list] [--show-current] [-v [--abbrev=<length> | --no-abbrev]]
[--column[=<options>] | --no-column] [--sort=<key>]
[(--merged | --no-merged) [<commit>]]
[--contains [<commit]] [--no-contains [<commit>]]
@@ -160,6 +160,10 @@ This option is only applicable in non-verbose mode.
branch --list 'maint-*'`, list only the branches that match
the pattern(s).
+--show-current::
+ Print the name of the current branch. In detached HEAD state,
+ nothing is printed.
+
-v::
-vv::
--verbose::
diff --git a/Documentation/git-checkout.txt b/Documentation/git-checkout.txt
index 9a39649..f179b43 100644
--- a/Documentation/git-checkout.txt
+++ b/Documentation/git-checkout.txt
@@ -260,6 +260,9 @@ the conflicted merge in the specified paths.
This means that you can use `git checkout -p` to selectively discard
edits from your current working tree. See the ``Interactive Mode''
section of linkgit:git-add[1] to learn how to operate the `--patch` mode.
++
+Note that this option uses the no overlay mode by default (see also
+`--[no-]overlay`), and currently doesn't support overlay mode.
--ignore-other-worktrees::
`git checkout` refuses when the wanted ref is already checked
@@ -280,6 +283,13 @@ section of linkgit:git-add[1] to learn how to operate the `--patch` mode.
Do not attempt to create a branch if a remote tracking branch
of the same name exists.
+--[no-]overlay::
+ In the default overlay mode, `git checkout` never
+ removes files from the index or the working tree. When
+ specifying `--no-overlay`, files that appear in the index and
+ working tree, but not in <tree-ish> are removed, to make them
+ match <tree-ish> exactly.
+
<branch>::
Branch to checkout; if it refers to a branch (i.e., a name that,
when prepended with "refs/heads/", is a valid ref), then that
@@ -289,7 +299,7 @@ section of linkgit:git-add[1] to learn how to operate the `--patch` mode.
+
You can use the `"@{-N}"` syntax to refer to the N-th last
branch/commit checked out using "git checkout" operation. You may
-also specify `-` which is synonymous to `"@{-1}`.
+also specify `-` which is synonymous to `"@{-1}"`.
+
As a special case, you may use `"A...B"` as a shortcut for the
merge base of `A` and `B` if there is exactly one merge base. You can
diff --git a/Documentation/git-diff-tree.txt b/Documentation/git-diff-tree.txt
index 43daa7c..24f32e8 100644
--- a/Documentation/git-diff-tree.txt
+++ b/Documentation/git-diff-tree.txt
@@ -10,8 +10,8 @@ SYNOPSIS
--------
[verse]
'git diff-tree' [--stdin] [-m] [-s] [-v] [--no-commit-id] [--pretty]
- [-t] [-r] [-c | --cc] [--root] [<common diff options>]
- <tree-ish> [<tree-ish>] [<path>...]
+ [-t] [-r] [-c | --cc] [--combined-all-paths] [--root]
+ [<common diff options>] <tree-ish> [<tree-ish>] [<path>...]
DESCRIPTION
-----------
@@ -105,6 +105,13 @@ include::pretty-options.txt[]
itself and the commit log message is not shown, just like in any other
"empty diff" case.
+--combined-all-paths::
+ This flag causes combined diffs (used for merge commits) to
+ list the name of the file from all parents. It thus only has
+ effect when -c or --cc are specified, and is likely only
+ useful if filename changes are detected (i.e. when either
+ rename or copy detection have been requested).
+
--always::
Show the commit itself and the commit log message even
if the diff itself is empty.
diff --git a/Documentation/git-rebase.txt b/Documentation/git-rebase.txt
index daa1640..5629ba4 100644
--- a/Documentation/git-rebase.txt
+++ b/Documentation/git-rebase.txt
@@ -529,7 +529,6 @@ are incompatible with the following options:
* --interactive
* --exec
* --keep-empty
- * --autosquash
* --edit-todo
* --root when used in combination with --onto
@@ -554,8 +553,6 @@ commit started empty (had no changes relative to its parent to
start with) or ended empty (all changes were already applied
upstream in other commits).
-The merge backend does the same.
-
The interactive backend drops commits by default that
started empty and halts if it hits a commit that ended up empty.
The `--keep-empty` option exists for the interactive backend to allow
diff --git a/Documentation/git-submodule.txt b/Documentation/git-submodule.txt
index ba3c4df..2794e29 100644
--- a/Documentation/git-submodule.txt
+++ b/Documentation/git-submodule.txt
@@ -9,6 +9,7 @@ git-submodule - Initialize, update or inspect submodules
SYNOPSIS
--------
[verse]
+'git submodule' [--quiet] [--cached]
'git submodule' [--quiet] add [<options>] [--] <repository> [<path>]
'git submodule' [--quiet] status [--cached] [--recursive] [--] [<path>...]
'git submodule' [--quiet] init [--] [<path>...]
@@ -28,6 +29,9 @@ For more information about submodules, see linkgit:gitsubmodules[7].
COMMANDS
--------
+With no arguments, shows the status of existing submodules. Several
+subcommands are available to perform operations on the submodules.
+
add [-b <branch>] [-f|--force] [--name <name>] [--reference <repository>] [--depth <depth>] [--] <repository> [<path>]::
Add the given repository as a submodule at the given path
to the changeset to be committed next to the current
diff --git a/Documentation/githooks.txt b/Documentation/githooks.txt
index 9590443..5bf653c 100644
--- a/Documentation/githooks.txt
+++ b/Documentation/githooks.txt
@@ -99,6 +99,10 @@ All the `git commit` hooks are invoked with the environment
variable `GIT_EDITOR=:` if the command will not bring up an editor
to modify the commit message.
+The default 'pre-commit' hook, when enabled--and with the
+`hooks.allownonascii` config option unset or set to false--prevents
+the use of non-ASCII filenames.
+
prepare-commit-msg
~~~~~~~~~~~~~~~~~~
diff --git a/Documentation/merge-options.txt b/Documentation/merge-options.txt
index 63a3fc0..92a7d93 100644
--- a/Documentation/merge-options.txt
+++ b/Documentation/merge-options.txt
@@ -3,9 +3,14 @@
Perform the merge and commit the result. This option can
be used to override --no-commit.
+
-With --no-commit perform the merge but pretend the merge
-failed and do not autocommit, to give the user a chance to
-inspect and further tweak the merge result before committing.
+With --no-commit perform the merge and stop just before creating
+a merge commit, to give the user a chance to inspect and further
+tweak the merge result before committing.
++
+Note that fast-forward updates do not create a merge commit and
+therefore there is no way to stop those merges with --no-commit.
+Thus, if you want to ensure your branch is not changed or updated
+by the merge command, use --no-ff with --no-commit.
--edit::
-e::
diff --git a/Documentation/pretty-formats.txt b/Documentation/pretty-formats.txt
index 7bfffae..0795983 100644
--- a/Documentation/pretty-formats.txt
+++ b/Documentation/pretty-formats.txt
@@ -102,120 +102,160 @@ The title was >>t4119: test autocomputing -p<n> for traditional diff input.<<
+
The placeholders are:
-- '%H': commit hash
-- '%h': abbreviated commit hash
-- '%T': tree hash
-- '%t': abbreviated tree hash
-- '%P': parent hashes
-- '%p': abbreviated parent hashes
-- '%an': author name
-- '%aN': author name (respecting .mailmap, see linkgit:git-shortlog[1]
- or linkgit:git-blame[1])
-- '%ae': author email
-- '%aE': author email (respecting .mailmap, see
- linkgit:git-shortlog[1] or linkgit:git-blame[1])
-- '%ad': author date (format respects --date= option)
-- '%aD': author date, RFC2822 style
-- '%ar': author date, relative
-- '%at': author date, UNIX timestamp
-- '%ai': author date, ISO 8601-like format
-- '%aI': author date, strict ISO 8601 format
-- '%cn': committer name
-- '%cN': committer name (respecting .mailmap, see
- linkgit:git-shortlog[1] or linkgit:git-blame[1])
-- '%ce': committer email
-- '%cE': committer email (respecting .mailmap, see
- linkgit:git-shortlog[1] or linkgit:git-blame[1])
-- '%cd': committer date (format respects --date= option)
-- '%cD': committer date, RFC2822 style
-- '%cr': committer date, relative
-- '%ct': committer date, UNIX timestamp
-- '%ci': committer date, ISO 8601-like format
-- '%cI': committer date, strict ISO 8601 format
-- '%d': ref names, like the --decorate option of linkgit:git-log[1]
-- '%D': ref names without the " (", ")" wrapping.
-- '%S': ref name given on the command line by which the commit was reached
- (like `git log --source`), only works with `git log`
-- '%e': encoding
-- '%s': subject
-- '%f': sanitized subject line, suitable for a filename
-- '%b': body
-- '%B': raw body (unwrapped subject and body)
+- Placeholders that expand to a single literal character:
+'%n':: newline
+'%%':: a raw '%'
+'%x00':: print a byte from a hex code
+
+- Placeholders that affect formatting of later placeholders:
+'%Cred':: switch color to red
+'%Cgreen':: switch color to green
+'%Cblue':: switch color to blue
+'%Creset':: reset color
+'%C(...)':: color specification, as described under Values in the
+ "CONFIGURATION FILE" section of linkgit:git-config[1]. By
+ default, colors are shown only when enabled for log output
+ (by `color.diff`, `color.ui`, or `--color`, and respecting
+ the `auto` settings of the former if we are going to a
+ terminal). `%C(auto,...)` is accepted as a historical
+ synonym for the default (e.g., `%C(auto,red)`). Specifying
+ `%C(always,...)` will show the colors even when color is
+ not otherwise enabled (though consider just using
+ `--color=always` to enable color for the whole output,
+ including this format and anything else git might color).
+ `auto` alone (i.e. `%C(auto)`) will turn on auto coloring
+ on the next placeholders until the color is switched
+ again.
+'%m':: left (`<`), right (`>`) or boundary (`-`) mark
+'%w([<w>[,<i1>[,<i2>]]])':: switch line wrapping, like the -w option of
+ linkgit:git-shortlog[1].
+'%<(<N>[,trunc|ltrunc|mtrunc])':: make the next placeholder take at
+ least N columns, padding spaces on
+ the right if necessary. Optionally
+ truncate at the beginning (ltrunc),
+ the middle (mtrunc) or the end
+ (trunc) if the output is longer than
+ N columns. Note that truncating
+ only works correctly with N >= 2.
+'%<|(<N>)':: make the next placeholder take at least until Nth
+ columns, padding spaces on the right if necessary
+'%>(<N>)', '%>|(<N>)':: similar to '%<(<N>)', '%<|(<N>)' respectively,
+ but padding spaces on the left
+'%>>(<N>)', '%>>|(<N>)':: similar to '%>(<N>)', '%>|(<N>)'
+ respectively, except that if the next
+ placeholder takes more spaces than given and
+ there are spaces on its left, use those
+ spaces
+'%><(<N>)', '%><|(<N>)':: similar to '%<(<N>)', '%<|(<N>)'
+ respectively, but padding both sides
+ (i.e. the text is centered)
+
+- Placeholders that expand to information extracted from the commit:
+'%H':: commit hash
+'%h':: abbreviated commit hash
+'%T':: tree hash
+'%t':: abbreviated tree hash
+'%P':: parent hashes
+'%p':: abbreviated parent hashes
+'%an':: author name
+'%aN':: author name (respecting .mailmap, see linkgit:git-shortlog[1]
+ or linkgit:git-blame[1])
+'%ae':: author email
+'%aE':: author email (respecting .mailmap, see linkgit:git-shortlog[1]
+ or linkgit:git-blame[1])
+'%ad':: author date (format respects --date= option)
+'%aD':: author date, RFC2822 style
+'%ar':: author date, relative
+'%at':: author date, UNIX timestamp
+'%ai':: author date, ISO 8601-like format
+'%aI':: author date, strict ISO 8601 format
+'%cn':: committer name
+'%cN':: committer name (respecting .mailmap, see
+ linkgit:git-shortlog[1] or linkgit:git-blame[1])
+'%ce':: committer email
+'%cE':: committer email (respecting .mailmap, see
+ linkgit:git-shortlog[1] or linkgit:git-blame[1])
+'%cd':: committer date (format respects --date= option)
+'%cD':: committer date, RFC2822 style
+'%cr':: committer date, relative
+'%ct':: committer date, UNIX timestamp
+'%ci':: committer date, ISO 8601-like format
+'%cI':: committer date, strict ISO 8601 format
+'%d':: ref names, like the --decorate option of linkgit:git-log[1]
+'%D':: ref names without the " (", ")" wrapping.
+'%S':: ref name given on the command line by which the commit was reached
+ (like `git log --source`), only works with `git log`
+'%e':: encoding
+'%s':: subject
+'%f':: sanitized subject line, suitable for a filename
+'%b':: body
+'%B':: raw body (unwrapped subject and body)
ifndef::git-rev-list[]
-- '%N': commit notes
+'%N':: commit notes
endif::git-rev-list[]
-- '%GG': raw verification message from GPG for a signed commit
-- '%G?': show "G" for a good (valid) signature,
- "B" for a bad signature,
- "U" for a good signature with unknown validity,
- "X" for a good signature that has expired,
- "Y" for a good signature made by an expired key,
- "R" for a good signature made by a revoked key,
- "E" if the signature cannot be checked (e.g. missing key)
- and "N" for no signature
-- '%GS': show the name of the signer for a signed commit
-- '%GK': show the key used to sign a signed commit
-- '%GF': show the fingerprint of the key used to sign a signed commit
-- '%GP': show the fingerprint of the primary key whose subkey was used
- to sign a signed commit
-- '%gD': reflog selector, e.g., `refs/stash@{1}` or
- `refs/stash@{2 minutes ago`}; the format follows the rules described
- for the `-g` option. The portion before the `@` is the refname as
- given on the command line (so `git log -g refs/heads/master` would
- yield `refs/heads/master@{0}`).
-- '%gd': shortened reflog selector; same as `%gD`, but the refname
- portion is shortened for human readability (so `refs/heads/master`
- becomes just `master`).
-- '%gn': reflog identity name
-- '%gN': reflog identity name (respecting .mailmap, see
- linkgit:git-shortlog[1] or linkgit:git-blame[1])
-- '%ge': reflog identity email
-- '%gE': reflog identity email (respecting .mailmap, see
- linkgit:git-shortlog[1] or linkgit:git-blame[1])
-- '%gs': reflog subject
-- '%Cred': switch color to red
-- '%Cgreen': switch color to green
-- '%Cblue': switch color to blue
-- '%Creset': reset color
-- '%C(...)': color specification, as described under Values in the
- "CONFIGURATION FILE" section of linkgit:git-config[1].
- By default, colors are shown only when enabled for log output (by
- `color.diff`, `color.ui`, or `--color`, and respecting the `auto`
- settings of the former if we are going to a terminal). `%C(auto,...)`
- is accepted as a historical synonym for the default (e.g.,
- `%C(auto,red)`). Specifying `%C(always,...)` will show the colors
- even when color is not otherwise enabled (though consider
- just using `--color=always` to enable color for the whole output,
- including this format and anything else git might color). `auto`
- alone (i.e. `%C(auto)`) will turn on auto coloring on the next
- placeholders until the color is switched again.
-- '%m': left (`<`), right (`>`) or boundary (`-`) mark
-- '%n': newline
-- '%%': a raw '%'
-- '%x00': print a byte from a hex code
-- '%w([<w>[,<i1>[,<i2>]]])': switch line wrapping, like the -w option of
- linkgit:git-shortlog[1].
-- '%<(<N>[,trunc|ltrunc|mtrunc])': make the next placeholder take at
- least N columns, padding spaces on the right if necessary.
- Optionally truncate at the beginning (ltrunc), the middle (mtrunc)
- or the end (trunc) if the output is longer than N columns.
- Note that truncating only works correctly with N >= 2.
-- '%<|(<N>)': make the next placeholder take at least until Nth
- columns, padding spaces on the right if necessary
-- '%>(<N>)', '%>|(<N>)': similar to '%<(<N>)', '%<|(<N>)'
- respectively, but padding spaces on the left
-- '%>>(<N>)', '%>>|(<N>)': similar to '%>(<N>)', '%>|(<N>)'
- respectively, except that if the next placeholder takes more spaces
- than given and there are spaces on its left, use those spaces
-- '%><(<N>)', '%><|(<N>)': similar to '%<(<N>)', '%<|(<N>)'
- respectively, but padding both sides (i.e. the text is centered)
-- %(trailers[:options]): display the trailers of the body as interpreted
- by linkgit:git-interpret-trailers[1]. The `trailers` string may be
- followed by a colon and zero or more comma-separated options. If the
- `only` option is given, omit non-trailer lines from the trailer block.
- If the `unfold` option is given, behave as if interpret-trailer's
- `--unfold` option was given. E.g., `%(trailers:only,unfold)` to do
- both.
+'%GG':: raw verification message from GPG for a signed commit
+'%G?':: show "G" for a good (valid) signature,
+ "B" for a bad signature,
+ "U" for a good signature with unknown validity,
+ "X" for a good signature that has expired,
+ "Y" for a good signature made by an expired key,
+ "R" for a good signature made by a revoked key,
+ "E" if the signature cannot be checked (e.g. missing key)
+ and "N" for no signature
+'%GS':: show the name of the signer for a signed commit
+'%GK':: show the key used to sign a signed commit
+'%GF':: show the fingerprint of the key used to sign a signed commit
+'%GP':: show the fingerprint of the primary key whose subkey was used
+ to sign a signed commit
+'%gD':: reflog selector, e.g., `refs/stash@{1}` or `refs/stash@{2
+ minutes ago`}; the format follows the rules described for the
+ `-g` option. The portion before the `@` is the refname as
+ given on the command line (so `git log -g refs/heads/master`
+ would yield `refs/heads/master@{0}`).
+'%gd':: shortened reflog selector; same as `%gD`, but the refname
+ portion is shortened for human readability (so
+ `refs/heads/master` becomes just `master`).
+'%gn':: reflog identity name
+'%gN':: reflog identity name (respecting .mailmap, see
+ linkgit:git-shortlog[1] or linkgit:git-blame[1])
+'%ge':: reflog identity email
+'%gE':: reflog identity email (respecting .mailmap, see
+ linkgit:git-shortlog[1] or linkgit:git-blame[1])
+'%gs':: reflog subject
+'%(trailers[:options])':: display the trailers of the body as
+ interpreted by
+ linkgit:git-interpret-trailers[1]. The
+ `trailers` string may be followed by a colon
+ and zero or more comma-separated options:
+** 'key=<K>': only show trailers with specified key. Matching is done
+ case-insensitively and trailing colon is optional. If option is
+ given multiple times trailer lines matching any of the keys are
+ shown. This option automatically enables the `only` option so that
+ non-trailer lines in the trailer block are hidden. If that is not
+ desired it can be disabled with `only=false`. E.g.,
+ `%(trailers:key=Reviewed-by)` shows trailer lines with key
+ `Reviewed-by`.
+** 'only[=val]': select whether non-trailer lines from the trailer
+ block should be included. The `only` keyword may optionally be
+ followed by an equal sign and one of `true`, `on`, `yes` to omit or
+ `false`, `off`, `no` to show the non-trailer lines. If option is
+ given without value it is enabled. If given multiple times the last
+ value is used.
+** 'separator=<SEP>': specify a separator inserted between trailer
+ lines. When this option is not given each trailer line is
+ terminated with a line feed character. The string SEP may contain
+ the literal formatting codes described above. To use comma as
+ separator one must use `%x2C` as it would otherwise be parsed as
+ next option. If separator option is given multiple times only the
+ last one is used. E.g., `%(trailers:key=Ticket,separator=%x2C )`
+ shows all trailer lines whose key is "Ticket" separated by a comma
+ and a space.
+** 'unfold[=val]': make it behave as if interpret-trailer's `--unfold`
+ option was given. In same way as to for `only` it can be followed
+ by an equal sign and explicit value. E.g.,
+ `%(trailers:only,unfold=true)` unfolds and shows all trailer lines.
+** 'valueonly[=val]': skip over the key part of the trailer line and only
+ show the value part. Also this optionally allows explicit value.
NOTE: Some placeholders may depend on other options given to the
revision traversal engine. For example, the `%g*` reflog options will
diff --git a/Documentation/rev-list-options.txt b/Documentation/rev-list-options.txt
index cad711c..ca959a7 100644
--- a/Documentation/rev-list-options.txt
+++ b/Documentation/rev-list-options.txt
@@ -960,6 +960,13 @@ options may be given. See linkgit:git-diff-files[1] for more options.
the parents have only two variants and the merge result picks
one of them without modification.
+--combined-all-paths::
+ This flag causes combined diffs (used for merge commits) to
+ list the name of the file from all parents. It thus only has
+ effect when -c or --cc are specified, and is likely only
+ useful if filename changes are detected (i.e. when either
+ rename or copy detection have been requested).
+
-m::
This flag makes the merge commits show the full diff like
regular commits; for each merge parent, a separate log entry
diff --git a/Documentation/technical/api-trace2.txt b/Documentation/technical/api-trace2.txt
new file mode 100644
index 0000000..2de565f
--- /dev/null
+++ b/Documentation/technical/api-trace2.txt
@@ -0,0 +1,1349 @@
+= Trace2 API
+
+The Trace2 API can be used to print debug, performance, and telemetry
+information to stderr or a file. The Trace2 feature is inactive unless
+explicitly enabled by enabling one or more Trace2 Targets.
+
+The Trace2 API is intended to replace the existing (Trace1)
+printf-style tracing provided by the existing `GIT_TRACE` and
+`GIT_TRACE_PERFORMANCE` facilities. During initial implementation,
+Trace2 and Trace1 may operate in parallel.
+
+The Trace2 API defines a set of high-level messages with known fields,
+such as (`start`: `argv`) and (`exit`: {`exit-code`, `elapsed-time`}).
+
+Trace2 instrumentation throughout the Git code base sends Trace2
+messages to the enabled Trace2 Targets. Targets transform these
+messages content into purpose-specific formats and write events to
+their data streams. In this manner, the Trace2 API can drive
+many different types of analysis.
+
+Targets are defined using a VTable allowing easy extension to other
+formats in the future. This might be used to define a binary format,
+for example.
+
+== Trace2 Targets
+
+Trace2 defines the following set of Trace2 Targets.
+Format details are given in a later section.
+
+`GIT_TR2` (NORMAL)::
+
+ a simple printf format like GIT_TRACE.
++
+------------
+$ export GIT_TR2=~/log.normal
+$ git version
+git version 2.20.1.155.g426c96fcdb
+------------
++
+------------
+$ cat ~/log.normal
+12:28:42.620009 common-main.c:38 version 2.20.1.155.g426c96fcdb
+12:28:42.620989 common-main.c:39 start git version
+12:28:42.621101 git.c:432 cmd_name version (version)
+12:28:42.621215 git.c:662 exit elapsed:0.001227 code:0
+12:28:42.621250 trace2/tr2_tgt_normal.c:124 atexit elapsed:0.001265 code:0
+------------
+
+`GIT_TR2_PERF` (PERF)::
+
+ a column-based format to replace GIT_TRACE_PERFORMANCE suitable for
+ development and testing, possibly to complement tools like gprof.
++
+------------
+$ export GIT_TR2_PERF=~/log.perf
+$ git version
+git version 2.20.1.155.g426c96fcdb
+------------
++
+------------
+$ cat ~/log.perf
+12:28:42.620675 common-main.c:38 | d0 | main | version | | | | | 2.20.1.155.g426c96fcdb
+12:28:42.621001 common-main.c:39 | d0 | main | start | | | | | git version
+12:28:42.621111 git.c:432 | d0 | main | cmd_name | | | | | version (version)
+12:28:42.621225 git.c:662 | d0 | main | exit | | 0.001227 | | | code:0
+12:28:42.621259 trace2/tr2_tgt_perf.c:211 | d0 | main | atexit | | 0.001265 | | | code:0
+------------
+
+`GIT_TR2_EVENT` (EVENT)::
+
+ a JSON-based format of event data suitable for telemetry analysis.
++
+------------
+$ export GIT_TR2_EVENT=~/log.event
+$ git version
+git version 2.20.1.155.g426c96fcdb
+------------
++
+------------
+$ cat ~/log.event
+{"event":"version","sid":"1547659722619736-11614","thread":"main","time":"2019-01-16 17:28:42.620713","file":"common-main.c","line":38,"evt":"1","exe":"2.20.1.155.g426c96fcdb"}
+{"event":"start","sid":"1547659722619736-11614","thread":"main","time":"2019-01-16 17:28:42.621027","file":"common-main.c","line":39,"argv":["git","version"]}
+{"event":"cmd_name","sid":"1547659722619736-11614","thread":"main","time":"2019-01-16 17:28:42.621122","file":"git.c","line":432,"name":"version","hierarchy":"version"}
+{"event":"exit","sid":"1547659722619736-11614","thread":"main","time":"2019-01-16 17:28:42.621236","file":"git.c","line":662,"t_abs":0.001227,"code":0}
+{"event":"atexit","sid":"1547659722619736-11614","thread":"main","time":"2019-01-16 17:28:42.621268","file":"trace2/tr2_tgt_event.c","line":163,"t_abs":0.001265,"code":0}
+------------
+
+== Enabling a Target
+
+A Trace2 Target is enabled when the corresponding environment variable
+(`GIT_TR2`, `GIT_TR2_PERF`, or `GIT_TR2_EVENT`) is set. The following
+values are recognized.
+
+`0`::
+`false`::
+
+ Disables the target.
+
+`1`::
+`true`::
+
+ Enables the target and writes stream to `STDERR`.
+
+`[2-9]`::
+
+ Enables the target and writes to the already opened file descriptor.
+
+`<absolute-pathname>`::
+
+ Enables the target, opens and writes to the file in append mode.
+
+`af_unix:[<socket_type>:]<absolute-pathname>`::
+
+ Enables the target, opens and writes to a Unix Domain Socket
+ (on platforms that support them).
++
+Socket type can be either `stream` or `dgram`. If the socket type is
+omitted, Git will try both.
+
+== Trace2 API
+
+All public Trace2 functions and macros are defined in `trace2.h` and
+`trace2.c`. All public symbols are prefixed with `trace2_`.
+
+There are no public Trace2 data structures.
+
+The Trace2 code also defines a set of private functions and data types
+in the `trace2/` directory. These symbols are prefixed with `tr2_`
+and should only be used by functions in `trace2.c`.
+
+== Conventions for Public Functions and Macros
+
+The functions defined by the Trace2 API are declared and documented
+in `trace2.h`. It defines the API functions and wrapper macros for
+Trace2.
+
+Some functions have a `_fl()` suffix to indicate that they take `file`
+and `line-number` arguments.
+
+Some functions have a `_va_fl()` suffix to indicate that they also
+take a `va_list` argument.
+
+Some functions have a `_printf_fl()` suffix to indicate that they also
+take a varargs argument.
+
+There are CPP wrapper macros and ifdefs to hide most of these details.
+See `trace2.h` for more details. The following discussion will only
+describe the simplified forms.
+
+== Public API
+
+All Trace2 API functions send a messsage to all of the active
+Trace2 Targets. This section describes the set of available
+messages.
+
+It helps to divide these functions into groups for discussion
+purposes.
+
+=== Basic Command Messages
+
+These are concerned with the lifetime of the overall git process.
+
+`void trace2_initialize()`::
+
+ Determines if any Trace2 Targets should be enabled and
+ initializes the Trace2 facility. This includes starting the
+ elapsed time clocks and thread local storage (TLS).
++
+This function emits a "version" message containing the version of git
+and the Trace2 protocol.
++
+This function should be called from `main()` as early as possible in
+the life of the process.
+
+`int trace2_is_enabled()`::
+
+ Returns 1 if Trace2 is enabled (at least one target is
+ active).
+
+`void trace2_cmd_start(int argc, const char **argv)`::
+
+ Emits a "start" message containing the process command line
+ arguments.
+
+`int trace2_cmd_exit(int exit_code)`::
+
+ Emits an "exit" message containing the process exit-code and
+ elapsed time.
++
+Returns the exit-code.
+
+`void trace2_cmd_error(const char *fmt, va_list ap)`::
+
+ Emits an "error" message containing a formatted error message.
+
+`void trace2_cmd_path(const char *pathname)`::
+
+ Emits a "cmd_path" message with the full pathname of the
+ current process.
+
+=== Command Detail Messages
+
+These are concerned with describing the specific Git command
+after the command line, config, and environment are inspected.
+
+`void trace2_cmd_name(const char *name)`::
+
+ Emits a "cmd_name" message with the canonical name of the
+ command, for example "status" or "checkout".
+
+`void trace2_cmd_mode(const char *mode)`::
+
+ Emits a "cmd_mode" message with a qualifier name to further
+ describe the current git command.
++
+This message is intended to be used with git commands having multiple
+major modes. For example, a "checkout" command can checkout a new
+branch or it can checkout a single file, so the checkout code could
+emit a cmd_mode message of "branch" or "file".
+
+`void trace2_cmd_alias(const char *alias, const char **argv_expansion)`::
+
+ Emits an "alias" message containing the alias used and the
+ argument expansion.
+
+`void trace2_def_param(const char *parameter, const char *value)`::
+
+ Emits a "def_param" message containing a key/value pair.
++
+This message is intended to report some global aspect of the current
+command, such as a configuration setting or command line switch that
+significantly affects program performance or behavior, such as
+`core.abbrev`, `status.showUntrackedFiles`, or `--no-ahead-behind`.
+
+`void trace2_cmd_list_config()`::
+
+ Emits a "def_param" messages for "important" configuration
+ settings.
++
+The environment variable `GIT_TR2_CONFIG_PARAMS` can be set to a
+list of patterns of important configuration settings, for example:
+`core.*,remote.*.url`. This function will iterate over all config
+settings and emit a "def_param" message for each match.
+
+`void trace2_cmd_set_config(const char *key, const char *value)`::
+
+ Emits a "def_param" message for a specific configuration
+ setting IFF it matches the `GIT_TR2_CONFIG_PARAMS` pattern.
++
+This is used to hook into `git_config_set()` and catch any
+configuration changes and update a value previously reported by
+`trace2_cmd_list_config()`.
+
+`void trace2_def_repo(struct repository *repo)`::
+
+ Registers a repository with the Trace2 layer. Assigns a
+ unique "repo-id" to `repo->trace2_repo_id`.
++
+Emits a "worktree" messages containing the repo-id and the worktree
+pathname.
++
+Region and data messages (described later) may refer to this repo-id.
++
+The main/top-level repository will have repo-id value 1 (aka "r1").
++
+The repo-id field is in anticipation of future in-proc submodule
+repositories.
+
+=== Child Process Messages
+
+These are concerned with the various spawned child processes,
+including shell scripts, git commands, editors, pagers, and hooks.
+
+`void trace2_child_start(struct child_process *cmd)`::
+
+ Emits a "child_start" message containing the "child-id",
+ "child-argv", and "child-classification".
++
+Before calling this, set `cmd->trace2_child_class` to a name
+describing the type of child process, for example "editor".
++
+This function assigns a unique "child-id" to `cmd->trace2_child_id`.
+This field is used later during the "child_exit" message to associate
+it with the "child_start" message.
++
+This function should be called before spawning the child process.
+
+`void trace2_child_exit(struct child_proess *cmd, int child_exit_code)`::
+
+ Emits a "child_exit" message containing the "child-id",
+ the child's elapsed time and exit-code.
++
+The reported elapsed time includes the process creation overhead and
+time spend waiting for it to exit, so it may be slightly longer than
+the time reported by the child itself.
++
+This function should be called after reaping the child process.
+
+`int trace2_exec(const char *exe, const char **argv)`::
+
+ Emits a "exec" message containing the "exec-id" and the
+ argv of the new process.
++
+This function should be called before calling one of the `exec()`
+variants, such as `execvp()`.
++
+This function returns a unique "exec-id". This value is used later
+if the exec() fails and a "exec-result" message is necessary.
+
+`void trace2_exec_result(int exec_id, int error_code)`::
+
+ Emits a "exec_result" message containing the "exec-id"
+ and the error code.
++
+On Unix-based systems, `exec()` does not return if successful.
+This message is used to indicate that the `exec()` failed and
+that the current program is continuing.
+
+=== Git Thread Messages
+
+These messages are concerned with Git thread usage.
+
+`void trace2_thread_start(const char *thread_name)`::
+
+ Emits a "thread_start" message.
++
+The `thread_name` field should be a descriptive name, such as the
+unique name of the thread-proc. A unique "thread-id" will be added
+to the name to uniquely identify thread instances.
++
+Region and data messages (described later) may refer to this thread
+name.
++
+This function must be called by the thread-proc of the new thread
+(so that TLS data is properly initialized) and not by the caller
+of `pthread_create()`.
+
+`void trace2_thread_exit()`::
+
+ Emits a "thread_exit" message containing the thread name
+ and the thread elapsed time.
++
+This function must be called by the thread-proc before it returns
+(so that the coorect TLS data is used and cleaned up. It should
+not be called by the caller of `pthread_join()`.
+
+=== Region and Data Messages
+
+These are concerned with recording performance data
+over regions or spans of code.
+
+`void trace2_region_enter(const char *category, const char *label, const struct repository *repo)`::
+
+`void trace2_region_enter_printf(const char *category, const char *label, const struct repository *repo, const char *fmt, ...)`::
+
+`void trace2_region_enter_printf_va(const char *category, const char *label, const struct repository *repo, const char *fmt, va_list ap)`::
+
+ Emits a thread-relative "region_enter" message with optional
+ printf string.
++
+This function pushes a new region nesting stack level on the current
+thread and starts a clock for the new stack frame.
++
+The `category` field is an arbitrary category name used to classify
+regions by feature area, such as "status" or "index". At this time
+it is only just printed along with the rest of the message. It may
+be used in the future to filter messages.
++
+The `label` field is an arbitrary label used to describe the activity
+being started, such as "read_recursive" or "do_read_index".
++
+The `repo` field, if set, will be used to get the "repo-id", so that
+recursive oerations can be attributed to the correct repository.
+
+`void trace2_region_leave(const char *category, const char *label, const struct repository *repo)`::
+
+`void trace2_region_leave_printf(const char *category, const char *label, const struct repository *repo, const char *fmt, ...)`::
+
+`void trace2_region_leave_printf_va(const char *category, const char *label, const struct repository *repo, const char *fmt, va_list ap)`::
+
+ Emits a thread-relative "region_leave" message with optional
+ printf string.
++
+This function pops the region nesting stack on the current thread
+and reports the elapsed time of the stack frame.
++
+The `category`, `label`, and `repo` fields are the same as above.
+The `category` and `label` do not need to match the correpsonding
+"region_enter" message, but it makes the data stream easier to
+understand.
+
+`void trace2_data_string(const char *category, const struct repository *repo, const char *key, const char * value)`::
+
+`void trace2_data_intmax(const char *category, const struct repository *repo, const char *key, intmax value)`::
+
+`void trace2_data_json(const char *category, const struct repository *repo, const char *key, const struct json_writer *jw)`::
+
+ Emits a region- and thread-relative "data" or "data_json" message.
++
+This is a key/value pair message containing information about the
+current thread, region stack, and repository. This could be used
+to print the number of files in a directory during a multi-threaded
+recursive tree walk.
+
+`void trace2_printf(const char *fmt, ...)`::
+
+`void trace2_printf_va(const char *fmt, va_list ap)`::
+
+ Emits a region- and thread-relative "printf" message.
+
+== Trace2 Target Formats
+
+=== NORMAL Format
+
+NORMAL format is enabled when the `GIT_TR2` environment variable is
+set.
+
+Events are written as lines of the form:
+
+------------
+[<time> SP <filename>:<line> SP+] <event-name> [[SP] <event-message>] LF
+------------
+
+`<event-name>`::
+
+ is the event name.
+
+`<event-message>`::
+ is a free-form printf message intended for human consumption.
++
+Note that this may contain embedded LF or CRLF characters that are
+not escaped, so the event may spill across multiple lines.
+
+If `GIT_TR2_BRIEF` is true, the `time`, `filename`, and `line` fields
+are omitted.
+
+This target is intended to be more of a summary (like GIT_TRACE) and
+less detailed than the other targets. It ignores thread, region, and
+data messages, for example.
+
+=== PERF Format
+
+PERF format is enabled when the `GIT_TR2_PERF` environment variable
+is set.
+
+Events are written as lines of the form:
+
+------------
+[<time> SP <filename>:<line> SP+
+ BAR SP] d<depth> SP
+ BAR SP <thread-name> SP+
+ BAR SP <event-name> SP+
+ BAR SP [r<repo-id>] SP+
+ BAR SP [<t_abs>] SP+
+ BAR SP [<t_rel>] SP+
+ BAR SP [<category>] SP+
+ BAR SP DOTS* <perf-event-message>
+ LF
+------------
+
+`<depth>`::
+ is the git process depth. This is the number of parent
+ git processes. A top-level git command has depth value "d0".
+ A child of it has depth value "d1". A second level child
+ has depth value "d2" and so on.
+
+`<thread-name>`::
+ is a unique name for the thread. The primary thread
+ is called "main". Other thread names are of the form "th%d:%s"
+ and include a unique number and the name of the thread-proc.
+
+`<event-name>`::
+ is the event name.
+
+`<repo-id>`::
+ when present, is a number indicating the repository
+ in use. A `def_repo` event is emitted when a repository is
+ opened. This defines the repo-id and associated worktree.
+ Subsequent repo-specific events will reference this repo-id.
++
+Currently, this is always "r1" for the main repository.
+This field is in anticipation of in-proc submodules in the future.
+
+`<t_abs>`::
+ when present, is the absolute time in seconds since the
+ program started.
+
+`<t_rel>`::
+ when present, is time in seconds relative to the start of
+ the current region. For a thread-exit event, it is the elapsed
+ time of the thread.
+
+`<category>`::
+ is present on region and data events and is used to
+ indicate a broad category, such as "index" or "status".
+
+`<perf-event-message>`::
+ is a free-form printf message intended for human consumption.
+
+------------
+15:33:33.532712 wt-status.c:2310 | d0 | main | region_enter | r1 | 0.126064 | | status | label:print
+15:33:33.532712 wt-status.c:2331 | d0 | main | region_leave | r1 | 0.127568 | 0.001504 | status | label:print
+------------
+
+If `GIT_TR2_PERF_BRIEF` is true, the `time`, `file`, and `line`
+fields are omitted.
+
+------------
+d0 | main | region_leave | r1 | 0.011717 | 0.009122 | index | label:preload
+------------
+
+The PERF target is intended for interactive performance analysis
+during development and is quite noisy.
+
+=== EVENT Format
+
+EVENT format is enabled when the `GIT_TR2_EVENT` environment
+variable is set.
+
+Each event is a JSON-object containing multiple key/value pairs
+written as a single line and followed by a LF.
+
+------------
+'{' <key> ':' <value> [',' <key> ':' <value>]* '}' LF
+------------
+
+Some key/value pairs are common to all events and some are
+event-specific.
+
+==== Common Key/Value Pairs
+
+The following key/value pairs are common to all events:
+
+------------
+{
+ "event":"version",
+ "sid":"1547659722619736-11614",
+ "thread":"main",
+ "time":"2019-01-16 17:28:42.620713",
+ "file":"common-main.c",
+ "line":38,
+ ...
+}
+------------
+
+`"event":<event>`::
+ is the event name.
+
+`"sid":<sid>`::
+ is the session-id. This is a unique string to identify the
+ process instance to allow all events emitted by a process to
+ be identified. A session-id is used instead of a PID because
+ PIDs are recycled by the OS. For child git processes, the
+ session-id is prepended with the session-id of the parent git
+ process to allow parent-child relationships to be identified
+ during post-processing.
+
+`"thread":<thread>`::
+ is the thread name.
+
+`"time":<time>`::
+ is the UTC time of the event.
+
+`"file":<filename>`::
+ is source file generating the event.
+
+`"line":<line-number>`::
+ is the integer source line number generating the event.
+
+`"repo":<repo-id>`::
+ when present, is the integer repo-id as described previously.
+
+If `GIT_TR2_EVENT_BRIEF` is true, the `file` and `line` fields are omitted
+from all events and the `time` field is only present on the "start" and
+"atexit" events.
+
+==== Event-Specific Key/Value Pairs
+
+`"version"`::
+ This event gives the version of the executable and the EVENT format.
++
+------------
+{
+ "event":"version",
+ ...
+ "evt":"1", # EVENT format version
+ "exe":"2.20.1.155.g426c96fcdb" # git version
+}
+------------
+
+`"start"`::
+ This event contains the complete argv received by main().
++
+------------
+{
+ "event":"start",
+ ...
+ "argv":["git","version"]
+}
+------------
+
+`"exit"`::
+ This event is emitted when git calls `exit()`.
++
+------------
+{
+ "event":"exit",
+ ...
+ "t_abs":0.001227, # elapsed time in seconds
+ "code":0 # exit code
+}
+------------
+
+`"atexit"`::
+ This event is emitted by the Trace2 `atexit` routine during
+ final shutdown. It should be the last event emitted by the
+ process.
++
+(The elapsed time reported here is greater than the time reported in
+the "exit" event because it runs after all other atexit tasks have
+completed.)
++
+------------
+{
+ "event":"atexit",
+ ...
+ "t_abs":0.001227, # elapsed time in seconds
+ "code":0 # exit code
+}
+------------
+
+`"signal"`::
+ This event is emitted when the program is terminated by a user
+ signal. Depending on the platform, the signal event may
+ prevent the "atexit" event from being generated.
++
+------------
+{
+ "event":"signal",
+ ...
+ "t_abs":0.001227, # elapsed time in seconds
+ "signal":13 # SIGTERM, SIGINT, etc.
+}
+------------
+
+`"error"`::
+ This event is emitted when one of the `error()`, `die()`,
+ or `usage()` functions are called.
++
+------------
+{
+ "event":"error",
+ ...
+ "msg":"invalid option: --cahced", # formatted error message
+ "fmt":"invalid option: %s" # error format string
+}
+------------
++
+The error event may be emitted more than once. The format string
+allows post-processors to group errors by type without worrying
+about specific error arguments.
+
+`"cmd_path"`::
+ This event contains the discovered full path of the git
+ executable (on platforms that are configured to resolve it).
++
+------------
+{
+ "event":"cmd_path",
+ ...
+ "path":"C:/work/gfw/git.exe"
+}
+------------
+
+`"cmd_name"`::
+ This event contains the command name for this git process
+ and the hierarchy of commands from parent git processes.
++
+------------
+{
+ "event":"cmd_name",
+ ...
+ "name":"pack-objects",
+ "hierarchy":"push/pack-objects"
+}
+------------
++
+Normally, the "name" field contains the canonical name of the
+command. When a canonical name is not available, one of
+these special values are used:
++
+------------
+"_query_" # "git --html-path"
+"_run_dashed_" # when "git foo" tries to run "git-foo"
+"_run_shell_alias_" # alias expansion to a shell command
+"_run_git_alias_" # alias expansion to a git command
+"_usage_" # usage error
+------------
+
+`"cmd_mode"`::
+ This event, when present, describes the command variant This
+ event may be emitted more than once.
++
+------------
+{
+ "event":"cmd_mode",
+ ...
+ "name":"branch"
+}
+------------
++
+The "name" field is an arbitrary string to describe the command mode.
+For example, checkout can checkout a branch or an individual file.
+And these variations typically have different performance
+characteristics that are not comparable.
+
+`"alias"`::
+ This event is present when an alias is expanded.
++
+------------
+{
+ "event":"alias",
+ ...
+ "alias":"l", # registered alias
+ "argv":["log","--graph"] # alias expansion
+}
+------------
+
+`"child_start"`::
+ This event describes a child process that is about to be
+ spawned.
++
+------------
+{
+ "event":"child_start",
+ ...
+ "child_id":2,
+ "child_class":"?",
+ "use_shell":false,
+ "argv":["git","rev-list","--objects","--stdin","--not","--all","--quiet"]
+
+ "hook_name":"<hook_name>" # present when child_class is "hook"
+ "cd":"<path>" # present when cd is required
+}
+------------
++
+The "child_id" field can be used to match this child_start with the
+corresponding child_exit event.
++
+The "child_class" field is a rough classification, such as "editor",
+"pager", "transport/*", and "hook". Unclassified children are classified
+with "?".
+
+`"child_exit"`::
+ This event is generated after the current process has returned
+ from the waitpid() and collected the exit information from the
+ child.
++
+------------
+{
+ "event":"child_exit",
+ ...
+ "child_id":2,
+ "pid":14708, # child PID
+ "code":0, # child exit-code
+ "t_rel":0.110605 # observed run-time of child process
+}
+------------
++
+Note that the session-id of the child process is not available to
+the current/spawning process, so the child's PID is reported here as
+a hint for post-processing. (But it is only a hint because the child
+proces may be a shell script which doesn't have a session-id.)
++
+Note that the `t_rel` field contains the observed run time in seconds
+for the child process (starting before the fork/exec/spawn and
+stopping after the waitpid() and includes OS process creation overhead).
+So this time will be slightly larger than the atexit time reported by
+the child process itself.
+
+`"exec"`::
+ This event is generated before git attempts to `exec()`
+ another command rather than starting a child process.
++
+------------
+{
+ "event":"exec",
+ ...
+ "exec_id":0,
+ "exe":"git",
+ "argv":["foo", "bar"]
+}
+------------
++
+The "exec_id" field is a command-unique id and is only useful if the
+`exec()` fails and a corresponding exec_result event is generated.
+
+`"exec_result"`::
+ This event is generated if the `exec()` fails and control
+ returns to the current git command.
++
+------------
+{
+ "event":"exec_result",
+ ...
+ "exec_id":0,
+ "code":1 # error code (errno) from exec()
+}
+------------
+
+`"thread_start"`::
+ This event is generated when a thread is started. It is
+ generated from *within* the new thread's thread-proc (for TLS
+ reasons).
++
+------------
+{
+ "event":"thread_start",
+ ...
+ "thread":"th02:preload_thread" # thread name
+}
+------------
+
+`"thread_exit"`::
+ This event is generated when a thread exits. It is generated
+ from *within* the thread's thread-proc (for TLS reasons).
++
+------------
+{
+ "event":"thread_exit",
+ ...
+ "thread":"th02:preload_thread", # thread name
+ "t_rel":0.007328 # thread elapsed time
+}
+------------
+
+`"def_param"`::
+ This event is generated to log a global parameter.
++
+------------
+{
+ "event":"def_param",
+ ...
+ "param":"core.abbrev",
+ "value":"7"
+}
+------------
+
+`"def_repo"`::
+ This event defines a repo-id and associates it with the root
+ of the worktree.
++
+------------
+{
+ "event":"def_repo",
+ ...
+ "repo":1,
+ "worktree":"/Users/jeffhost/work/gfw"
+}
+------------
++
+As stated earlier, the repo-id is currently always 1, so there will
+only be one def_repo event. Later, if in-proc submodules are
+supported, a def_repo event should be emitted for each submodule
+visited.
+
+`"region_enter"`::
+ This event is generated when entering a region.
++
+------------
+{
+ "event":"region_enter",
+ ...
+ "repo":1, # optional
+ "nesting":1, # current region stack depth
+ "category":"index", # optional
+ "label":"do_read_index", # optional
+ "msg":".git/index" # optional
+}
+------------
++
+The `category` field may be used in a future enhancement to
+do category-based filtering.
++
+The `GIT_TR2_EVENT_NESTING` environment variable can be used to
+filter deeply nested regions and data events. It defaults to "2".
+
+`"region_leave"`::
+ This event is generated when leaving a region.
++
+------------
+{
+ "event":"region_leave",
+ ...
+ "repo":1, # optional
+ "t_rel":0.002876, # time spent in region in seconds
+ "nesting":1, # region stack depth
+ "category":"index", # optional
+ "label":"do_read_index", # optional
+ "msg":".git/index" # optional
+}
+------------
+
+`"data"`::
+ This event is generated to log a thread- and region-local
+ key/value pair.
++
+------------
+{
+ "event":"data",
+ ...
+ "repo":1, # optional
+ "t_abs":0.024107, # absolute elapsed time
+ "t_rel":0.001031, # elapsed time in region/thread
+ "nesting":2, # region stack depth
+ "category":"index",
+ "key":"read/cache_nr",
+ "value":"3552"
+}
+------------
++
+The "value" field may be an integer or a string.
+
+`"data-json"`::
+ This event is generated to log a pre-formatted JSON string
+ containing structured data.
++
+------------
+{
+ "event":"data_json",
+ ...
+ "repo":1, # optional
+ "t_abs":0.015905,
+ "t_rel":0.015905,
+ "nesting":1,
+ "category":"process",
+ "key":"windows/ancestry",
+ "value":["bash.exe","bash.exe"]
+}
+------------
+
+== Example Trace2 API Usage
+
+Here is a hypothetical usage of the Trace2 API showing the intended
+usage (without worrying about the actual Git details).
+
+Initialization::
+
+ Initialization happens in `main()`. Behind the scenes, an
+ `atexit` and `signal` handler are registered.
++
+----------------
+int main(int argc, const char **argv)
+{
+ int exit_code;
+
+ trace2_initialize();
+ trace2_cmd_start(argv);
+
+ exit_code = cmd_main(argc, argv);
+
+ trace2_cmd_exit(exit_code);
+
+ return exit_code;
+}
+----------------
+
+Command Details::
+
+ After the basics are established, additional command
+ information can be sent to Trace2 as it is discovered.
++
+----------------
+int cmd_checkout(int argc, const char **argv)
+{
+ trace2_cmd_name("checkout");
+ trace2_cmd_mode("branch");
+ trace2_def_repo(the_repository);
+
+ // emit "def_param" messages for "interesting" config settings.
+ trace2_cmd_list_config();
+
+ if (do_something())
+ trace2_cmd_error("Path '%s': cannot do something", path);
+
+ return 0;
+}
+----------------
+
+Child Processes::
+
+ Wrap code spawning child processes.
++
+----------------
+void run_child(...)
+{
+ int child_exit_code;
+ struct child_process cmd = CHILD_PROCESS_INIT;
+ ...
+ cmd.trace2_child_class = "editor";
+
+ trace2_child_start(&cmd);
+ child_exit_code = spawn_child_and_wait_for_it();
+ trace2_child_exit(&cmd, child_exit_code);
+}
+----------------
++
+For example, the following fetch command spawned ssh, index-pack,
+rev-list, and gc. This example also shows that fetch took
+5.199 seconds and of that 4.932 was in ssh.
++
+----------------
+$ export GIT_TR2_BRIEF=1
+$ export GIT_TR2=~/log.normal
+$ git fetch origin
+...
+----------------
++
+----------------
+$ cat ~/log.normal
+version 2.20.1.vfs.1.1.47.g534dbe1ad1
+start git fetch origin
+worktree /Users/jeffhost/work/gfw
+cmd_name fetch (fetch)
+child_start[0] ssh git@github.com ...
+child_start[1] git index-pack ...
+... (Trace2 events from child processes omitted)
+child_exit[1] pid:14707 code:0 elapsed:0.076353
+child_exit[0] pid:14706 code:0 elapsed:4.931869
+child_start[2] git rev-list ...
+... (Trace2 events from child process omitted)
+child_exit[2] pid:14708 code:0 elapsed:0.110605
+child_start[3] git gc --auto
+... (Trace2 events from child process omitted)
+child_exit[3] pid:14709 code:0 elapsed:0.006240
+exit elapsed:5.198503 code:0
+atexit elapsed:5.198541 code:0
+----------------
++
+When a git process is a (direct or indirect) child of another
+git process, it inherits Trace2 context information. This
+allows the child to print the command hierarchy. This example
+shows gc as child[3] of fetch. When the gc process reports
+its name as "gc", it also reports the hierarchy as "fetch/gc".
+(In this example, trace2 messages from the child process is
+indented for clarity.)
++
+----------------
+$ export GIT_TR2_BRIEF=1
+$ export GIT_TR2=~/log.normal
+$ git fetch origin
+...
+----------------
++
+----------------
+$ cat ~/log.normal
+version 2.20.1.160.g5676107ecd.dirty
+start git fetch official
+worktree /Users/jeffhost/work/gfw
+cmd_name fetch (fetch)
+...
+child_start[3] git gc --auto
+ version 2.20.1.160.g5676107ecd.dirty
+ start /Users/jeffhost/work/gfw/git gc --auto
+ worktree /Users/jeffhost/work/gfw
+ cmd_name gc (fetch/gc)
+ exit elapsed:0.001959 code:0
+ atexit elapsed:0.001997 code:0
+child_exit[3] pid:20303 code:0 elapsed:0.007564
+exit elapsed:3.868938 code:0
+atexit elapsed:3.868970 code:0
+----------------
+
+Regions::
+
+ Regions can be use to time an interesting section of code.
++
+----------------
+void wt_status_collect(struct wt_status *s)
+{
+ trace2_region_enter("status", "worktrees", s->repo);
+ wt_status_collect_changes_worktree(s);
+ trace2_region_leave("status", "worktrees", s->repo);
+
+ trace2_region_enter("status", "index", s->repo);
+ wt_status_collect_changes_index(s);
+ trace2_region_leave("status", "index", s->repo);
+
+ trace2_region_enter("status", "untracked", s->repo);
+ wt_status_collect_untracked(s);
+ trace2_region_leave("status", "untracked", s->repo);
+}
+
+void wt_status_print(struct wt_status *s)
+{
+ trace2_region_enter("status", "print", s->repo);
+ switch (s->status_format) {
+ ...
+ }
+ trace2_region_leave("status", "print", s->repo);
+}
+----------------
++
+In this example, scanning for untracked files ran from +0.012568 to
++0.027149 (since the process started) and took 0.014581 seconds.
++
+----------------
+$ export GIT_TR2_PERF_BRIEF=1
+$ export GIT_TR2_PERF=~/log.perf
+$ git status
+...
+
+$ cat ~/log.perf
+d0 | main | version | | | | | 2.20.1.160.g5676107ecd.dirty
+d0 | main | start | | | | | git status
+d0 | main | def_repo | r1 | | | | worktree:/Users/jeffhost/work/gfw
+d0 | main | cmd_name | | | | | status (status)
+...
+d0 | main | region_enter | r1 | 0.010988 | | status | label:worktrees
+d0 | main | region_leave | r1 | 0.011236 | 0.000248 | status | label:worktrees
+d0 | main | region_enter | r1 | 0.011260 | | status | label:index
+d0 | main | region_leave | r1 | 0.012542 | 0.001282 | status | label:index
+d0 | main | region_enter | r1 | 0.012568 | | status | label:untracked
+d0 | main | region_leave | r1 | 0.027149 | 0.014581 | status | label:untracked
+d0 | main | region_enter | r1 | 0.027411 | | status | label:print
+d0 | main | region_leave | r1 | 0.028741 | 0.001330 | status | label:print
+d0 | main | exit | | 0.028778 | | | code:0
+d0 | main | atexit | | 0.028809 | | | code:0
+----------------
++
+Regions may be nested. This causes messages to be indented in the
+PERF target, for example.
+Elapsed times are relative to the start of the correpsonding nesting
+level as expected. For example, if we add region message to:
++
+----------------
+static enum path_treatment read_directory_recursive(struct dir_struct *dir,
+ struct index_state *istate, const char *base, int baselen,
+ struct untracked_cache_dir *untracked, int check_only,
+ int stop_at_first_file, const struct pathspec *pathspec)
+{
+ enum path_treatment state, subdir_state, dir_state = path_none;
+
+ trace2_region_enter_printf("dir", "read_recursive", NULL, "%.*s", baselen, base);
+ ...
+ trace2_region_leave_printf("dir", "read_recursive", NULL, "%.*s", baselen, base);
+ return dir_state;
+}
+----------------
++
+We can further investigate the time spent scanning for untracked files.
++
+----------------
+$ export GIT_TR2_PERF_BRIEF=1
+$ export GIT_TR2_PERF=~/log.perf
+$ git status
+...
+$ cat ~/log.perf
+d0 | main | version | | | | | 2.20.1.162.gb4ccea44db.dirty
+d0 | main | start | | | | | git status
+d0 | main | def_repo | r1 | | | | worktree:/Users/jeffhost/work/gfw
+d0 | main | cmd_name | | | | | status (status)
+...
+d0 | main | region_enter | r1 | 0.015047 | | status | label:untracked
+d0 | main | region_enter | | 0.015132 | | dir | ..label:read_recursive
+d0 | main | region_enter | | 0.016341 | | dir | ....label:read_recursive vcs-svn/
+d0 | main | region_leave | | 0.016422 | 0.000081 | dir | ....label:read_recursive vcs-svn/
+d0 | main | region_enter | | 0.016446 | | dir | ....label:read_recursive xdiff/
+d0 | main | region_leave | | 0.016522 | 0.000076 | dir | ....label:read_recursive xdiff/
+d0 | main | region_enter | | 0.016612 | | dir | ....label:read_recursive git-gui/
+d0 | main | region_enter | | 0.016698 | | dir | ......label:read_recursive git-gui/po/
+d0 | main | region_enter | | 0.016810 | | dir | ........label:read_recursive git-gui/po/glossary/
+d0 | main | region_leave | | 0.016863 | 0.000053 | dir | ........label:read_recursive git-gui/po/glossary/
+...
+d0 | main | region_enter | | 0.031876 | | dir | ....label:read_recursive builtin/
+d0 | main | region_leave | | 0.032270 | 0.000394 | dir | ....label:read_recursive builtin/
+d0 | main | region_leave | | 0.032414 | 0.017282 | dir | ..label:read_recursive
+d0 | main | region_leave | r1 | 0.032454 | 0.017407 | status | label:untracked
+...
+d0 | main | exit | | 0.034279 | | | code:0
+d0 | main | atexit | | 0.034322 | | | code:0
+----------------
++
+Trace2 regions are similar to the existing trace_performance_enter()
+and trace_performance_leave() routines, but are thread safe and
+maintain per-thread stacks of timers.
+
+Data Messages::
+
+ Data messages added to a region.
++
+----------------
+int read_index_from(struct index_state *istate, const char *path,
+ const char *gitdir)
+{
+ trace2_region_enter_printf("index", "do_read_index", the_repository, "%s", path);
+
+ ...
+
+ trace2_data_intmax("index", the_repository, "read/version", istate->version);
+ trace2_data_intmax("index", the_repository, "read/cache_nr", istate->cache_nr);
+
+ trace2_region_leave_printf("index", "do_read_index", the_repository, "%s", path);
+}
+----------------
++
+This example shows that the index contained 3552 entries.
++
+----------------
+$ export GIT_TR2_PERF_BRIEF=1
+$ export GIT_TR2_PERF=~/log.perf
+$ git status
+...
+$ cat ~/log.perf
+d0 | main | version | | | | | 2.20.1.156.gf9916ae094.dirty
+d0 | main | start | | | | | git status
+d0 | main | def_repo | r1 | | | | worktree:/Users/jeffhost/work/gfw
+d0 | main | cmd_name | | | | | status (status)
+d0 | main | region_enter | r1 | 0.001791 | | index | label:do_read_index .git/index
+d0 | main | data | r1 | 0.002494 | 0.000703 | index | ..read/version:2
+d0 | main | data | r1 | 0.002520 | 0.000729 | index | ..read/cache_nr:3552
+d0 | main | region_leave | r1 | 0.002539 | 0.000748 | index | label:do_read_index .git/index
+...
+----------------
+
+Thread Events::
+
+ Thread messages added to a thread-proc.
++
+For example, the multithreaded preload-index code can be
+instrumented with a region around the thread pool and then
+per-thread start and exit events within the threadproc.
++
+----------------
+static void *preload_thread(void *_data)
+{
+ // start the per-thread clock and emit a message.
+ trace2_thread_start("preload_thread");
+
+ // report which chunk of the array this thread was assigned.
+ trace2_data_intmax("index", the_repository, "offset", p->offset);
+ trace2_data_intmax("index", the_repository, "count", nr);
+
+ do {
+ ...
+ } while (--nr > 0);
+ ...
+
+ // report elapsed time taken by this thread.
+ trace2_thread_exit();
+ return NULL;
+}
+
+void preload_index(struct index_state *index,
+ const struct pathspec *pathspec,
+ unsigned int refresh_flags)
+{
+ trace2_region_enter("index", "preload", the_repository);
+
+ for (i = 0; i < threads; i++) {
+ ... /* create thread */
+ }
+
+ for (i = 0; i < threads; i++) {
+ ... /* join thread */
+ }
+
+ trace2_region_leave("index", "preload", the_repository);
+}
+----------------
++
+In this example preload_index() was executed by the `main` thread
+and started the `preload` region. Seven threads, named
+`th01:preload_thread` through `th07:preload_thread`, were started.
+Events from each thread are atomically appended to the shared target
+stream as they occur so they may appear in random order with respect
+other threads. Finally, the main thread waits for the threads to
+finish and leaves the region.
++
+Data events are tagged with the active thread name. They are used
+to report the per-thread parameters.
++
+----------------
+$ export GIT_TR2_PERF_BRIEF=1
+$ export GIT_TR2_PERF=~/log.perf
+$ git status
+...
+$ cat ~/log.perf
+...
+d0 | main | region_enter | r1 | 0.002595 | | index | label:preload
+d0 | th01:preload_thread | thread_start | | 0.002699 | | |
+d0 | th02:preload_thread | thread_start | | 0.002721 | | |
+d0 | th01:preload_thread | data | r1 | 0.002736 | 0.000037 | index | offset:0
+d0 | th02:preload_thread | data | r1 | 0.002751 | 0.000030 | index | offset:2032
+d0 | th03:preload_thread | thread_start | | 0.002711 | | |
+d0 | th06:preload_thread | thread_start | | 0.002739 | | |
+d0 | th01:preload_thread | data | r1 | 0.002766 | 0.000067 | index | count:508
+d0 | th06:preload_thread | data | r1 | 0.002856 | 0.000117 | index | offset:2540
+d0 | th03:preload_thread | data | r1 | 0.002824 | 0.000113 | index | offset:1016
+d0 | th04:preload_thread | thread_start | | 0.002710 | | |
+d0 | th02:preload_thread | data | r1 | 0.002779 | 0.000058 | index | count:508
+d0 | th06:preload_thread | data | r1 | 0.002966 | 0.000227 | index | count:508
+d0 | th07:preload_thread | thread_start | | 0.002741 | | |
+d0 | th07:preload_thread | data | r1 | 0.003017 | 0.000276 | index | offset:3048
+d0 | th05:preload_thread | thread_start | | 0.002712 | | |
+d0 | th05:preload_thread | data | r1 | 0.003067 | 0.000355 | index | offset:1524
+d0 | th05:preload_thread | data | r1 | 0.003090 | 0.000378 | index | count:508
+d0 | th07:preload_thread | data | r1 | 0.003037 | 0.000296 | index | count:504
+d0 | th03:preload_thread | data | r1 | 0.002971 | 0.000260 | index | count:508
+d0 | th04:preload_thread | data | r1 | 0.002983 | 0.000273 | index | offset:508
+d0 | th04:preload_thread | data | r1 | 0.007311 | 0.004601 | index | count:508
+d0 | th05:preload_thread | thread_exit | | 0.008781 | 0.006069 | |
+d0 | th01:preload_thread | thread_exit | | 0.009561 | 0.006862 | |
+d0 | th03:preload_thread | thread_exit | | 0.009742 | 0.007031 | |
+d0 | th06:preload_thread | thread_exit | | 0.009820 | 0.007081 | |
+d0 | th02:preload_thread | thread_exit | | 0.010274 | 0.007553 | |
+d0 | th07:preload_thread | thread_exit | | 0.010477 | 0.007736 | |
+d0 | th04:preload_thread | thread_exit | | 0.011657 | 0.008947 | |
+d0 | main | region_leave | r1 | 0.011717 | 0.009122 | index | label:preload
+...
+d0 | main | exit | | 0.029996 | | | code:0
+d0 | main | atexit | | 0.030027 | | | code:0
+----------------
++
+In this example, the preload region took 0.009122 seconds. The 7 threads
+took between 0.006069 and 0.008947 seconds to work on their portion of
+the index. Thread "th01" worked on 508 items at offset 0. Thread "th02"
+worked on 508 items at offset 2032. Thread "th04" worked on 508 itemts
+at offset 508.
++
+This example also shows that thread names are assigned in a racy manner
+as each thread starts and allocates TLS storage.
+
+== Future Work
+
+=== Relationship to the Existing Trace Api (api-trace.txt)
+
+There are a few issues to resolve before we can completely
+switch to Trace2.
+
+* Updating existing tests that assume GIT_TRACE format messages.
+
+* How to best handle custom GIT_TRACE_<key> messages?
+
+** The GIT_TRACE_<key> mechanism allows each <key> to write to a
+different file (in addition to just stderr).
+
+** Do we want to maintain that ability or simply write to the existing
+Trace2 targets (and convert <key> to a "category").
diff --git a/Documentation/technical/protocol-capabilities.txt b/Documentation/technical/protocol-capabilities.txt
index 332d209..2b267c0 100644
--- a/Documentation/technical/protocol-capabilities.txt
+++ b/Documentation/technical/protocol-capabilities.txt
@@ -1,6 +1,10 @@
Git Protocol Capabilities
=========================
+NOTE: this document describes capabilities for versions 0 and 1 of the pack
+protocol. For version 2, please refer to the link:protocol-v2.html[protocol-v2]
+doc.
+
Servers SHOULD support all capabilities defined in this document.
On the very first line of the initial server response of either
@@ -172,6 +176,20 @@ agent strings are purely informative for statistics and debugging
purposes, and MUST NOT be used to programmatically assume the presence
or absence of particular features.
+symref
+------
+
+This parameterized capability is used to inform the receiver which symbolic ref
+points to which ref; for example, "symref=HEAD:refs/heads/master" tells the
+receiver that HEAD points to master. This capability can be repeated to
+represent multiple symrefs.
+
+Servers SHOULD include this capability for the HEAD symref if it is one of the
+refs being sent.
+
+Clients MAY use the parameters from this capability to select the proper initial
+branch when cloning a repository.
+
shallow
-------
diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN
index 1d4886b..13f835f 100755
--- a/GIT-VERSION-GEN
+++ b/GIT-VERSION-GEN
@@ -1,7 +1,7 @@
#!/bin/sh
GVF=GIT-VERSION-FILE
-DEF_VER=v2.21.0-rc0
+DEF_VER=v2.21.0
LF='
'
diff --git a/Makefile b/Makefile
index f0b2299..1486683 100644
--- a/Makefile
+++ b/Makefile
@@ -740,6 +740,7 @@ TEST_BUILTINS_OBJS += test-dump-split-index.o
TEST_BUILTINS_OBJS += test-dump-untracked-cache.o
TEST_BUILTINS_OBJS += test-example-decorate.o
TEST_BUILTINS_OBJS += test-genrandom.o
+TEST_BUILTINS_OBJS += test-genzeros.o
TEST_BUILTINS_OBJS += test-hash.o
TEST_BUILTINS_OBJS += test-hashmap.o
TEST_BUILTINS_OBJS += test-hash-speed.o
@@ -772,6 +773,7 @@ TEST_BUILTINS_OBJS += test-string-list.o
TEST_BUILTINS_OBJS += test-submodule-config.o
TEST_BUILTINS_OBJS += test-submodule-nested-repo-config.o
TEST_BUILTINS_OBJS += test-subprocess.o
+TEST_BUILTINS_OBJS += test-trace2.o
TEST_BUILTINS_OBJS += test-urlmatch-normalization.o
TEST_BUILTINS_OBJS += test-xml-encode.o
TEST_BUILTINS_OBJS += test-wildmatch.o
@@ -1016,6 +1018,16 @@ LIB_OBJS += tempfile.o
LIB_OBJS += thread-utils.o
LIB_OBJS += tmp-objdir.o
LIB_OBJS += trace.o
+LIB_OBJS += trace2.o
+LIB_OBJS += trace2/tr2_cfg.o
+LIB_OBJS += trace2/tr2_cmd_name.o
+LIB_OBJS += trace2/tr2_dst.o
+LIB_OBJS += trace2/tr2_sid.o
+LIB_OBJS += trace2/tr2_tbuf.o
+LIB_OBJS += trace2/tr2_tgt_event.o
+LIB_OBJS += trace2/tr2_tgt_normal.o
+LIB_OBJS += trace2/tr2_tgt_perf.o
+LIB_OBJS += trace2/tr2_tls.o
LIB_OBJS += trailer.o
LIB_OBJS += transport.o
LIB_OBJS += transport-helper.o
@@ -1595,7 +1607,9 @@ ifdef NO_INET_PTON
LIB_OBJS += compat/inet_pton.o
BASIC_CFLAGS += -DNO_INET_PTON
endif
-ifndef NO_UNIX_SOCKETS
+ifdef NO_UNIX_SOCKETS
+ BASIC_CFLAGS += -DNO_UNIX_SOCKETS
+else
LIB_OBJS += unix-socket.o
PROGRAM_OBJS += credential-cache.o
PROGRAM_OBJS += credential-cache--daemon.o
diff --git a/README.md b/README.md
index 764c480..88f1261 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-[![Build Status](https://dev.azure.com/git/git/_apis/build/status/test-git.git)](https://dev.azure.com/git/git/_build/latest?definitionId=2)
+[![Build Status](https://dev.azure.com/git/git/_apis/build/status/git.git)](https://dev.azure.com/git/git/_build/latest?definitionId=11)
Git - fast, scalable, distributed revision control system
=========================================================
diff --git a/apply.c b/apply.c
index 892ede5..f15afa9 100644
--- a/apply.c
+++ b/apply.c
@@ -56,6 +56,10 @@ static int parse_whitespace_option(struct apply_state *state, const char *option
state->ws_error_action = correct_ws_error;
return 0;
}
+ /*
+ * Please update $__git_whitespacelist in git-completion.bash
+ * when you add new options.
+ */
return error(_("unrecognized whitespace option '%s'"), option);
}
diff --git a/blame.c b/blame.c
index da57233..5c07dec 100644
--- a/blame.c
+++ b/blame.c
@@ -204,7 +204,8 @@ static struct commit *fake_working_tree_commit(struct repository *r,
origin = make_origin(commit, path);
- ident = fmt_ident("Not Committed Yet", "not.committed.yet", NULL, 0);
+ ident = fmt_ident("Not Committed Yet", "not.committed.yet",
+ WANT_BLANK_IDENT, NULL, 0);
strbuf_addstr(&msg, "tree 0000000000000000000000000000000000000000\n");
for (parent = commit->parents; parent; parent = parent->next)
strbuf_addf(&msg, "parent %s\n",
diff --git a/builtin/am.c b/builtin/am.c
index 58a2aef..4fb107a 100644
--- a/builtin/am.c
+++ b/builtin/am.c
@@ -453,6 +453,7 @@ static int run_post_rewrite_hook(const struct am_state *state)
cp.in = xopen(am_path(state, "rewritten"), O_RDONLY);
cp.stdout_to_stderr = 1;
+ cp.trace2_hook_name = "post-rewrite";
ret = run_command(&cp);
@@ -1579,6 +1580,7 @@ static void do_commit(const struct am_state *state)
}
author = fmt_ident(state->author_name, state->author_email,
+ WANT_AUTHOR_IDENT,
state->ignore_date ? NULL : state->author_date,
IDENT_STRICT);
@@ -2119,6 +2121,10 @@ static int parse_opt_patchformat(const struct option *opt, const char *arg, int
*opt_value = PATCH_FORMAT_HG;
else if (!strcmp(arg, "mboxrd"))
*opt_value = PATCH_FORMAT_MBOXRD;
+ /*
+ * Please update $__git_patchformat in git-completion.bash
+ * when you add new options
+ */
else
return error(_("Invalid value for --patch-format: %s"), arg);
return 0;
diff --git a/builtin/blame.c b/builtin/blame.c
index 581de0d..177c102 100644
--- a/builtin/blame.c
+++ b/builtin/blame.c
@@ -814,7 +814,7 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
* and are only included here to get included in the "-h"
* output:
*/
- { OPTION_LOWLEVEL_CALLBACK, 0, "indent-heuristic", NULL, NULL, N_("Use an experimental heuristic to improve diffs"), PARSE_OPT_NOARG, parse_opt_unknown_cb },
+ { OPTION_LOWLEVEL_CALLBACK, 0, "indent-heuristic", NULL, NULL, N_("Use an experimental heuristic to improve diffs"), PARSE_OPT_NOARG, NULL, 0, parse_opt_unknown_cb },
OPT_BIT(0, "minimal", &xdl_opts, N_("Spend extra cycles to find better match"), XDF_NEED_MINIMAL),
OPT_STRING('S', NULL, &revs_file, N_("file"), N_("Use revisions from <file> instead of calling git-rev-list")),
diff --git a/builtin/branch.c b/builtin/branch.c
index 1be7272..4c83055 100644
--- a/builtin/branch.c
+++ b/builtin/branch.c
@@ -443,6 +443,21 @@ static void print_ref_list(struct ref_filter *filter, struct ref_sorting *sortin
free(to_free);
}
+static void print_current_branch_name(void)
+{
+ int flags;
+ const char *refname = resolve_ref_unsafe("HEAD", 0, NULL, &flags);
+ const char *shortname;
+ if (!refname)
+ die(_("could not resolve HEAD"));
+ else if (!(flags & REF_ISSYMREF))
+ return;
+ else if (skip_prefix(refname, "refs/heads/", &shortname))
+ puts(shortname);
+ else
+ die(_("HEAD (%s) points outside of refs/heads/"), refname);
+}
+
static void reject_rebase_or_bisect_branch(const char *target)
{
struct worktree **worktrees = get_worktrees(0);
@@ -581,6 +596,7 @@ static int edit_branch_description(const char *branch_name)
int cmd_branch(int argc, const char **argv, const char *prefix)
{
int delete = 0, rename = 0, copy = 0, force = 0, list = 0;
+ int show_current = 0;
int reflog = 0, edit_description = 0;
int quiet = 0, unset_upstream = 0;
const char *new_upstream = NULL;
@@ -620,6 +636,7 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
OPT_BIT('c', "copy", &copy, N_("copy a branch and its reflog"), 1),
OPT_BIT('C', NULL, &copy, N_("copy a branch, even if target exists"), 2),
OPT_BOOL('l', "list", &list, N_("list branch names")),
+ OPT_BOOL(0, "show-current", &show_current, N_("show current branch name")),
OPT_BOOL(0, "create-reflog", &reflog, N_("create the branch's reflog")),
OPT_BOOL(0, "edit-description", &edit_description,
N_("edit the description for the branch")),
@@ -662,14 +679,15 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
argc = parse_options(argc, argv, prefix, options, builtin_branch_usage,
0);
- if (!delete && !rename && !copy && !edit_description && !new_upstream && !unset_upstream && argc == 0)
+ if (!delete && !rename && !copy && !edit_description && !new_upstream &&
+ !show_current && !unset_upstream && argc == 0)
list = 1;
if (filter.with_commit || filter.merge != REF_FILTER_MERGED_NONE || filter.points_at.nr ||
filter.no_commit)
list = 1;
- if (!!delete + !!rename + !!copy + !!new_upstream +
+ if (!!delete + !!rename + !!copy + !!new_upstream + !!show_current +
list + unset_upstream > 1)
usage_with_options(builtin_branch_usage, options);
@@ -697,6 +715,9 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
if (!argc)
die(_("branch name required"));
return delete_branches(argc, argv, delete > 1, filter.kind, quiet);
+ } else if (show_current) {
+ print_current_branch_name();
+ return 0;
} else if (list) {
/* git branch --local also shows HEAD when it is detached */
if ((filter.kind & FILTER_REFS_BRANCHES) && filter.detached)
diff --git a/builtin/checkout.c b/builtin/checkout.c
index 24b8593..0e6037b 100644
--- a/builtin/checkout.c
+++ b/builtin/checkout.c
@@ -46,6 +46,7 @@ struct checkout_opts {
int ignore_other_worktrees;
int show_progress;
int count_checkout_paths;
+ int overlay_mode;
/*
* If new checkout options are added, skip_merge_working_tree
* should be updated accordingly.
@@ -135,7 +136,8 @@ static int skip_same_name(const struct cache_entry *ce, int pos)
return pos;
}
-static int check_stage(int stage, const struct cache_entry *ce, int pos)
+static int check_stage(int stage, const struct cache_entry *ce, int pos,
+ int overlay_mode)
{
while (pos < active_nr &&
!strcmp(active_cache[pos]->name, ce->name)) {
@@ -143,6 +145,8 @@ static int check_stage(int stage, const struct cache_entry *ce, int pos)
return 0;
pos++;
}
+ if (!overlay_mode)
+ return 0;
if (stage == 2)
return error(_("path '%s' does not have our version"), ce->name);
else
@@ -168,7 +172,8 @@ static int check_stages(unsigned stages, const struct cache_entry *ce, int pos)
}
static int checkout_stage(int stage, const struct cache_entry *ce, int pos,
- const struct checkout *state, int *nr_checkouts)
+ const struct checkout *state, int *nr_checkouts,
+ int overlay_mode)
{
while (pos < active_nr &&
!strcmp(active_cache[pos]->name, ce->name)) {
@@ -177,6 +182,10 @@ static int checkout_stage(int stage, const struct cache_entry *ce, int pos,
NULL, nr_checkouts);
pos++;
}
+ if (!overlay_mode) {
+ unlink_entry(ce);
+ return 0;
+ }
if (stage == 2)
return error(_("path '%s' does not have our version"), ce->name);
else
@@ -251,6 +260,59 @@ static int checkout_merged(int pos, const struct checkout *state, int *nr_checko
return status;
}
+static void mark_ce_for_checkout_overlay(struct cache_entry *ce,
+ char *ps_matched,
+ const struct checkout_opts *opts)
+{
+ ce->ce_flags &= ~CE_MATCHED;
+ if (!opts->ignore_skipworktree && ce_skip_worktree(ce))
+ return;
+ if (opts->source_tree && !(ce->ce_flags & CE_UPDATE))
+ /*
+ * "git checkout tree-ish -- path", but this entry
+ * is in the original index but is not in tree-ish
+ * or does not match the pathspec; it will not be
+ * checked out to the working tree. We will not do
+ * anything to this entry at all.
+ */
+ return;
+ /*
+ * Either this entry came from the tree-ish we are
+ * checking the paths out of, or we are checking out
+ * of the index.
+ *
+ * If it comes from the tree-ish, we already know it
+ * matches the pathspec and could just stamp
+ * CE_MATCHED to it from update_some(). But we still
+ * need ps_matched and read_tree_recursive (and
+ * eventually tree_entry_interesting) cannot fill
+ * ps_matched yet. Once it can, we can avoid calling
+ * match_pathspec() for _all_ entries when
+ * opts->source_tree != NULL.
+ */
+ if (ce_path_match(&the_index, ce, &opts->pathspec, ps_matched))
+ ce->ce_flags |= CE_MATCHED;
+}
+
+static void mark_ce_for_checkout_no_overlay(struct cache_entry *ce,
+ char *ps_matched,
+ const struct checkout_opts *opts)
+{
+ ce->ce_flags &= ~CE_MATCHED;
+ if (!opts->ignore_skipworktree && ce_skip_worktree(ce))
+ return;
+ if (ce_path_match(&the_index, ce, &opts->pathspec, ps_matched)) {
+ ce->ce_flags |= CE_MATCHED;
+ if (opts->source_tree && !(ce->ce_flags & CE_UPDATE))
+ /*
+ * In overlay mode, but the path is not in
+ * tree-ish, which means we should remove it
+ * from the index and the working tree.
+ */
+ ce->ce_flags |= CE_REMOVE | CE_WT_REMOVE;
+ }
+}
+
static int checkout_paths(const struct checkout_opts *opts,
const char *revision)
{
@@ -263,6 +325,8 @@ static int checkout_paths(const struct checkout_opts *opts,
struct lock_file lock_file = LOCK_INIT;
int nr_checkouts = 0, nr_unmerged = 0;
+ trace2_cmd_mode(opts->patch_mode ? "patch" : "path");
+
if (opts->track != BRANCH_TRACK_UNSPECIFIED)
die(_("'%s' cannot be used with updating paths"), "--track");
@@ -302,37 +366,15 @@ static int checkout_paths(const struct checkout_opts *opts,
* Make sure all pathspecs participated in locating the paths
* to be checked out.
*/
- for (pos = 0; pos < active_nr; pos++) {
- struct cache_entry *ce = active_cache[pos];
- ce->ce_flags &= ~CE_MATCHED;
- if (!opts->ignore_skipworktree && ce_skip_worktree(ce))
- continue;
- if (opts->source_tree && !(ce->ce_flags & CE_UPDATE))
- /*
- * "git checkout tree-ish -- path", but this entry
- * is in the original index; it will not be checked
- * out to the working tree and it does not matter
- * if pathspec matched this entry. We will not do
- * anything to this entry at all.
- */
- continue;
- /*
- * Either this entry came from the tree-ish we are
- * checking the paths out of, or we are checking out
- * of the index.
- *
- * If it comes from the tree-ish, we already know it
- * matches the pathspec and could just stamp
- * CE_MATCHED to it from update_some(). But we still
- * need ps_matched and read_tree_recursive (and
- * eventually tree_entry_interesting) cannot fill
- * ps_matched yet. Once it can, we can avoid calling
- * match_pathspec() for _all_ entries when
- * opts->source_tree != NULL.
- */
- if (ce_path_match(&the_index, ce, &opts->pathspec, ps_matched))
- ce->ce_flags |= CE_MATCHED;
- }
+ for (pos = 0; pos < active_nr; pos++)
+ if (opts->overlay_mode)
+ mark_ce_for_checkout_overlay(active_cache[pos],
+ ps_matched,
+ opts);
+ else
+ mark_ce_for_checkout_no_overlay(active_cache[pos],
+ ps_matched,
+ opts);
if (report_path_error(ps_matched, &opts->pathspec, opts->prefix)) {
free(ps_matched);
@@ -353,7 +395,7 @@ static int checkout_paths(const struct checkout_opts *opts,
if (opts->force) {
warning(_("path '%s' is unmerged"), ce->name);
} else if (opts->writeout_stage) {
- errs |= check_stage(opts->writeout_stage, ce, pos);
+ errs |= check_stage(opts->writeout_stage, ce, pos, opts->overlay_mode);
} else if (opts->merge) {
errs |= check_stages((1<<2) | (1<<3), ce, pos);
} else {
@@ -383,13 +425,16 @@ static int checkout_paths(const struct checkout_opts *opts,
if (opts->writeout_stage)
errs |= checkout_stage(opts->writeout_stage,
ce, pos,
- &state, &nr_checkouts);
+ &state,
+ &nr_checkouts, opts->overlay_mode);
else if (opts->merge)
errs |= checkout_merged(pos, &state,
&nr_unmerged);
pos = skip_same_name(ce, pos) - 1;
}
}
+ remove_marked_cache_entries(&the_index, 1);
+ remove_scheduled_dirs();
errs |= finish_delayed_checkout(&state, &nr_checkouts);
if (opts->count_checkout_paths) {
@@ -572,6 +617,11 @@ static int skip_merge_working_tree(const struct checkout_opts *opts,
*/
/*
+ * opts->overlay_mode cannot be used with switching branches so is
+ * not tested here
+ */
+
+ /*
* If we aren't creating a new branch any changes or updates will
* happen in the existing branch. Since that could only be updating
* the index and working directory, we don't want to skip those steps
@@ -966,6 +1016,9 @@ static int switch_branches(const struct checkout_opts *opts,
void *path_to_free;
struct object_id rev;
int flag, writeout_error = 0;
+
+ trace2_cmd_mode("branch");
+
memset(&old_branch_info, 0, sizeof(old_branch_info));
old_branch_info.path = path_to_free = resolve_refdup("HEAD", 0, &rev, &flag);
if (old_branch_info.path)
@@ -1203,6 +1256,8 @@ static int switch_unborn_to_new_branch(const struct checkout_opts *opts)
int status;
struct strbuf branch_ref = STRBUF_INIT;
+ trace2_cmd_mode("unborn");
+
if (!opts->new_branch)
die(_("You are on a branch yet to be born"));
strbuf_addf(&branch_ref, "refs/heads/%s", opts->new_branch);
@@ -1224,6 +1279,10 @@ static int checkout_branch(struct checkout_opts *opts,
die(_("'%s' cannot be used with switching branches"),
"--patch");
+ if (!opts->overlay_mode)
+ die(_("'%s' cannot be used with switching branches"),
+ "--no-overlay");
+
if (opts->writeout_stage)
die(_("'%s' cannot be used with switching branches"),
"--ours/--theirs");
@@ -1312,6 +1371,7 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
"checkout", "control recursive updating of submodules",
PARSE_OPT_OPTARG, option_parse_recurse_submodules_worktree_updater },
OPT_BOOL(0, "progress", &opts.show_progress, N_("force progress reporting")),
+ OPT_BOOL(0, "overlay", &opts.overlay_mode, N_("use overlay mode (default)")),
OPT_END(),
};
@@ -1320,6 +1380,7 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
opts.overwrite_ignore = 1;
opts.prefix = prefix;
opts.show_progress = -1;
+ opts.overlay_mode = -1;
git_config(git_checkout_config, &opts);
@@ -1344,6 +1405,9 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
if ((!!opts.new_branch + !!opts.new_branch_force + !!opts.new_orphan_branch) > 1)
die(_("-b, -B and --orphan are mutually exclusive"));
+ if (opts.overlay_mode == 1 && opts.patch_mode)
+ die(_("-p and --overlay are mutually exclusive"));
+
/*
* From here on, new_branch will contain the branch to be checked out,
* and new_branch_force and new_orphan_branch will tell us which one of
diff --git a/builtin/commit.c b/builtin/commit.c
index 2986553..f175374 100644
--- a/builtin/commit.c
+++ b/builtin/commit.c
@@ -609,7 +609,8 @@ static void determine_author_info(struct strbuf *author_ident)
set_ident_var(&date, strbuf_detach(&date_buf, NULL));
}
- strbuf_addstr(author_ident, fmt_ident(name, email, date, IDENT_STRICT));
+ strbuf_addstr(author_ident, fmt_ident(name, email, WANT_AUTHOR_IDENT, date,
+ IDENT_STRICT));
assert_split_ident(&author, author_ident);
export_one("GIT_AUTHOR_NAME", author.name_begin, author.name_end, 0);
export_one("GIT_AUTHOR_EMAIL", author.mail_begin, author.mail_end, 0);
@@ -1038,6 +1039,10 @@ static void handle_untracked_files_arg(struct wt_status *s)
s->show_untracked_files = SHOW_NORMAL_UNTRACKED_FILES;
else if (!strcmp(untracked_files_arg, "all"))
s->show_untracked_files = SHOW_ALL_UNTRACKED_FILES;
+ /*
+ * Please update $__git_untracked_file_modes in
+ * git-completion.bash when you add new options
+ */
else
die(_("Invalid untracked files mode '%s'"), untracked_files_arg);
}
@@ -1179,6 +1184,10 @@ static int parse_and_validate_options(int argc, const char *argv[],
else if (!strcmp(cleanup_arg, "scissors"))
cleanup_mode = use_editor ? COMMIT_MSG_CLEANUP_SCISSORS :
COMMIT_MSG_CLEANUP_SPACE;
+ /*
+ * Please update _git_commit() in git-completion.bash when you
+ * add new options.
+ */
else
die(_("Invalid cleanup mode %s"), cleanup_arg);
diff --git a/builtin/diff-tree.c b/builtin/diff-tree.c
index a90681b..cb9ea79 100644
--- a/builtin/diff-tree.c
+++ b/builtin/diff-tree.c
@@ -83,9 +83,13 @@ static int diff_tree_stdin(char *line)
}
static const char diff_tree_usage[] =
-"git diff-tree [--stdin] [-m] [-c] [--cc] [-s] [-v] [--pretty] [-t] [-r] [--root] "
+"git diff-tree [--stdin] [-m] [-c | --cc] [-s] [-v] [--pretty] [-t] [-r] [--root] "
"[<common-diff-options>] <tree-ish> [<tree-ish>] [<path>...]\n"
" -r diff recursively\n"
+" -c show combined diff for merge commits\n"
+" --cc show combined diff for merge commits removing uninteresting hunks\n"
+" --combined-all-paths\n"
+" show name of file in all parents for combined diffs\n"
" --root include the initial commit as diff against /dev/null\n"
COMMON_DIFF_OPTIONS_HELP;
diff --git a/builtin/diff.c b/builtin/diff.c
index 9f61092..53d4234 100644
--- a/builtin/diff.c
+++ b/builtin/diff.c
@@ -338,21 +338,23 @@ int cmd_diff(int argc, const char **argv, const char *prefix)
"--no-index" : "[--no-index]");
}
- if (no_index)
- /* If this is a no-index diff, just run it and exit there. */
- diff_no_index(the_repository, &rev, argc, argv);
-
- /* Otherwise, we are doing the usual "git" diff */
- rev.diffopt.skip_stat_unmatch = !!diff_auto_refresh_index;
- /* Scale to real terminal size and respect statGraphWidth config */
+ /* Set up defaults that will apply to both no-index and regular diffs. */
rev.diffopt.stat_width = -1;
rev.diffopt.stat_graph_width = -1;
-
- /* Default to let external and textconv be used */
rev.diffopt.flags.allow_external = 1;
rev.diffopt.flags.allow_textconv = 1;
+ /* If this is a no-index diff, just run it and exit there. */
+ if (no_index)
+ diff_no_index(&rev, argc, argv);
+
+ /*
+ * Otherwise, we are doing the usual "git" diff; set up any
+ * further defaults that apply to regular diffs.
+ */
+ rev.diffopt.skip_stat_unmatch = !!diff_auto_refresh_index;
+
/*
* Default to intent-to-add entries invisible in the
* index. This makes them show up as new files in diff-files
diff --git a/builtin/help.c b/builtin/help.c
index 7739a5c..e5590d7 100644
--- a/builtin/help.c
+++ b/builtin/help.c
@@ -70,6 +70,10 @@ static enum help_format parse_help_format(const char *format)
return HELP_FORMAT_INFO;
if (!strcmp(format, "web") || !strcmp(format, "html"))
return HELP_FORMAT_WEB;
+ /*
+ * Please update _git_config() in git-completion.bash when you
+ * add new help formats.
+ */
die(_("unrecognized help format '%s'"), format);
}
diff --git a/builtin/log.c b/builtin/log.c
index 5786926..ab859f5 100644
--- a/builtin/log.c
+++ b/builtin/log.c
@@ -84,6 +84,10 @@ static int parse_decoration_style(const char *value)
return DECORATE_SHORT_REFS;
else if (!strcmp(value, "auto"))
return auto_decoration_style();
+ /*
+ * Please update _git_log() in git-completion.bash when you
+ * add new decoration styles.
+ */
return -1;
}
@@ -1228,6 +1232,10 @@ static int thread_callback(const struct option *opt, const char *arg, int unset)
*thread = THREAD_SHALLOW;
else if (!strcmp(arg, "deep"))
*thread = THREAD_DEEP;
+ /*
+ * Please update _git_formatpatch() in git-completion.bash
+ * when you add new options.
+ */
else
return 1;
return 0;
diff --git a/builtin/merge.c b/builtin/merge.c
index e47d77b..5ce8946 100644
--- a/builtin/merge.c
+++ b/builtin/merge.c
@@ -113,12 +113,15 @@ static int option_parse_message(const struct option *opt,
return 0;
}
-static int option_read_message(struct parse_opt_ctx_t *ctx,
- const struct option *opt, int unset)
+static enum parse_opt_result option_read_message(struct parse_opt_ctx_t *ctx,
+ const struct option *opt,
+ const char *arg_not_used,
+ int unset)
{
struct strbuf *buf = opt->value;
const char *arg;
+ BUG_ON_OPT_ARG(arg_not_used);
if (unset)
BUG("-F cannot be negated");
@@ -262,7 +265,7 @@ static struct option builtin_merge_options[] = {
option_parse_message),
{ OPTION_LOWLEVEL_CALLBACK, 'F', "file", &merge_msg, N_("path"),
N_("read message from file"), PARSE_OPT_NONEG,
- (parse_opt_cb *) option_read_message },
+ NULL, 0, option_read_message },
OPT__VERBOSITY(&verbosity),
OPT_BOOL(0, "abort", &abort_current_merge,
N_("abort the current in-progress merge")),
diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c
index a9fac7c..a154fc2 100644
--- a/builtin/pack-objects.c
+++ b/builtin/pack-objects.c
@@ -33,6 +33,7 @@
#include "object-store.h"
#include "dir.h"
#include "midx.h"
+#include "trace2.h"
#define IN_PACK(obj) oe_in_pack(&to_pack, obj)
#define SIZE(obj) oe_size(&to_pack, obj)
@@ -3473,6 +3474,8 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix)
}
}
+ trace2_region_enter("pack-objects", "enumerate-objects",
+ the_repository);
prepare_packing_data(the_repository, &to_pack);
if (progress)
@@ -3487,12 +3490,23 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix)
if (include_tag && nr_result)
for_each_ref(add_ref_tag, NULL);
stop_progress(&progress_state);
+ trace2_region_leave("pack-objects", "enumerate-objects",
+ the_repository);
if (non_empty && !nr_result)
return 0;
- if (nr_result)
+ if (nr_result) {
+ trace2_region_enter("pack-objects", "prepare-pack",
+ the_repository);
prepare_pack(window, depth);
+ trace2_region_leave("pack-objects", "prepare-pack",
+ the_repository);
+ }
+
+ trace2_region_enter("pack-objects", "write-pack-file", the_repository);
write_pack_file();
+ trace2_region_leave("pack-objects", "write-pack-file", the_repository);
+
if (progress)
fprintf_ln(stderr,
_("Total %"PRIu32" (delta %"PRIu32"),"
diff --git a/builtin/pack-redundant.c b/builtin/pack-redundant.c
index 11bc514..68c1e54 100644
--- a/builtin/pack-redundant.c
+++ b/builtin/pack-redundant.c
@@ -32,14 +32,10 @@ static struct pack_list {
struct pack_list *next;
struct packed_git *pack;
struct llist *unique_objects;
- struct llist *all_objects;
+ struct llist *remaining_objects;
+ size_t all_objects_size;
} *local_packs = NULL, *altodb_packs = NULL;
-struct pll {
- struct pll *next;
- struct pack_list *pl;
-};
-
static struct llist_item *free_nodes;
static inline void llist_item_put(struct llist_item *item)
@@ -63,15 +59,6 @@ static inline struct llist_item *llist_item_get(void)
return new_item;
}
-static void llist_free(struct llist *list)
-{
- while ((list->back = list->front)) {
- list->front = list->front->next;
- llist_item_put(list->back);
- }
- free(list);
-}
-
static inline void llist_init(struct llist **list)
{
*list = xmalloc(sizeof(struct llist));
@@ -254,6 +241,11 @@ static void cmp_two_packs(struct pack_list *p1, struct pack_list *p2)
struct llist_item *p1_hint = NULL, *p2_hint = NULL;
const unsigned int hashsz = the_hash_algo->rawsz;
+ if (!p1->unique_objects)
+ p1->unique_objects = llist_copy(p1->remaining_objects);
+ if (!p2->unique_objects)
+ p2->unique_objects = llist_copy(p2->remaining_objects);
+
p1_base = p1->pack->index_data;
p2_base = p2->pack->index_data;
p1_base += 256 * 4 + ((p1->pack->index_version < 2) ? 4 : 8);
@@ -285,78 +277,6 @@ static void cmp_two_packs(struct pack_list *p1, struct pack_list *p2)
}
}
-static void pll_free(struct pll *l)
-{
- struct pll *old;
- struct pack_list *opl;
-
- while (l) {
- old = l;
- while (l->pl) {
- opl = l->pl;
- l->pl = opl->next;
- free(opl);
- }
- l = l->next;
- free(old);
- }
-}
-
-/* all the permutations have to be free()d at the same time,
- * since they refer to each other
- */
-static struct pll * get_permutations(struct pack_list *list, int n)
-{
- struct pll *subset, *ret = NULL, *new_pll = NULL;
-
- if (list == NULL || pack_list_size(list) < n || n == 0)
- return NULL;
-
- if (n == 1) {
- while (list) {
- new_pll = xmalloc(sizeof(*new_pll));
- new_pll->pl = NULL;
- pack_list_insert(&new_pll->pl, list);
- new_pll->next = ret;
- ret = new_pll;
- list = list->next;
- }
- return ret;
- }
-
- while (list->next) {
- subset = get_permutations(list->next, n - 1);
- while (subset) {
- new_pll = xmalloc(sizeof(*new_pll));
- new_pll->pl = subset->pl;
- pack_list_insert(&new_pll->pl, list);
- new_pll->next = ret;
- ret = new_pll;
- subset = subset->next;
- }
- list = list->next;
- }
- return ret;
-}
-
-static int is_superset(struct pack_list *pl, struct llist *list)
-{
- struct llist *diff;
-
- diff = llist_copy(list);
-
- while (pl) {
- llist_sorted_difference_inplace(diff, pl->all_objects);
- if (diff->size == 0) { /* we're done */
- llist_free(diff);
- return 1;
- }
- pl = pl->next;
- }
- llist_free(diff);
- return 0;
-}
-
static size_t sizeof_union(struct packed_git *p1, struct packed_git *p2)
{
size_t ret = 0;
@@ -421,14 +341,58 @@ static inline off_t pack_set_bytecount(struct pack_list *pl)
return ret;
}
+static int cmp_remaining_objects(const void *a, const void *b)
+{
+ struct pack_list *pl_a = *((struct pack_list **)a);
+ struct pack_list *pl_b = *((struct pack_list **)b);
+
+ if (pl_a->remaining_objects->size == pl_b->remaining_objects->size) {
+ /* have the same remaining_objects, big pack first */
+ if (pl_a->all_objects_size == pl_b->all_objects_size)
+ return 0;
+ else if (pl_a->all_objects_size < pl_b->all_objects_size)
+ return 1;
+ else
+ return -1;
+ } else if (pl_a->remaining_objects->size < pl_b->remaining_objects->size) {
+ /* sort by remaining objects, more objects first */
+ return 1;
+ } else {
+ return -1;
+ }
+}
+
+/* Sort pack_list, greater size of remaining_objects first */
+static void sort_pack_list(struct pack_list **pl)
+{
+ struct pack_list **ary, *p;
+ int i;
+ size_t n = pack_list_size(*pl);
+
+ if (n < 2)
+ return;
+
+ /* prepare an array of packed_list for easier sorting */
+ ary = xcalloc(n, sizeof(struct pack_list *));
+ for (n = 0, p = *pl; p; p = p->next)
+ ary[n++] = p;
+
+ QSORT(ary, n, cmp_remaining_objects);
+
+ /* link them back again */
+ for (i = 0; i < n - 1; i++)
+ ary[i]->next = ary[i + 1];
+ ary[n - 1]->next = NULL;
+ *pl = ary[0];
+
+ free(ary);
+}
+
+
static void minimize(struct pack_list **min)
{
- struct pack_list *pl, *unique = NULL,
- *non_unique = NULL, *min_perm = NULL;
- struct pll *perm, *perm_all, *perm_ok = NULL, *new_perm;
- struct llist *missing;
- off_t min_perm_size = 0, perm_size;
- int n;
+ struct pack_list *pl, *unique = NULL, *non_unique = NULL;
+ struct llist *missing, *unique_pack_objects;
pl = local_packs;
while (pl) {
@@ -442,53 +406,41 @@ static void minimize(struct pack_list **min)
missing = llist_copy(all_objects);
pl = unique;
while (pl) {
- llist_sorted_difference_inplace(missing, pl->all_objects);
+ llist_sorted_difference_inplace(missing, pl->remaining_objects);
pl = pl->next;
}
+ *min = unique;
+
/* return if there are no objects missing from the unique set */
if (missing->size == 0) {
- *min = unique;
free(missing);
return;
}
- /* find the permutations which contain all missing objects */
- for (n = 1; n <= pack_list_size(non_unique) && !perm_ok; n++) {
- perm_all = perm = get_permutations(non_unique, n);
- while (perm) {
- if (is_superset(perm->pl, missing)) {
- new_perm = xmalloc(sizeof(struct pll));
- memcpy(new_perm, perm, sizeof(struct pll));
- new_perm->next = perm_ok;
- perm_ok = new_perm;
- }
- perm = perm->next;
- }
- if (perm_ok)
- break;
- pll_free(perm_all);
- }
- if (perm_ok == NULL)
- die("Internal error: No complete sets found!");
-
- /* find the permutation with the smallest size */
- perm = perm_ok;
- while (perm) {
- perm_size = pack_set_bytecount(perm->pl);
- if (!min_perm_size || min_perm_size > perm_size) {
- min_perm_size = perm_size;
- min_perm = perm->pl;
- }
- perm = perm->next;
- }
- *min = min_perm;
- /* add the unique packs to the list */
- pl = unique;
+ unique_pack_objects = llist_copy(all_objects);
+ llist_sorted_difference_inplace(unique_pack_objects, missing);
+
+ /* remove unique pack objects from the non_unique packs */
+ pl = non_unique;
while (pl) {
- pack_list_insert(min, pl);
+ llist_sorted_difference_inplace(pl->remaining_objects, unique_pack_objects);
pl = pl->next;
}
+
+ while (non_unique) {
+ /* sort the non_unique packs, greater size of remaining_objects first */
+ sort_pack_list(&non_unique);
+ if (non_unique->remaining_objects->size == 0)
+ break;
+
+ pack_list_insert(min, non_unique);
+
+ for (pl = non_unique->next; pl && pl->remaining_objects->size > 0; pl = pl->next)
+ llist_sorted_difference_inplace(pl->remaining_objects, non_unique->remaining_objects);
+
+ non_unique = non_unique->next;
+ }
}
static void load_all_objects(void)
@@ -500,7 +452,7 @@ static void load_all_objects(void)
while (pl) {
hint = NULL;
- l = pl->all_objects->front;
+ l = pl->remaining_objects->front;
while (l) {
hint = llist_insert_sorted_unique(all_objects,
l->oid, hint);
@@ -511,7 +463,7 @@ static void load_all_objects(void)
/* remove objects present in remote packs */
pl = altodb_packs;
while (pl) {
- llist_sorted_difference_inplace(all_objects, pl->all_objects);
+ llist_sorted_difference_inplace(all_objects, pl->remaining_objects);
pl = pl->next;
}
}
@@ -536,11 +488,10 @@ static void scan_alt_odb_packs(void)
while (alt) {
local = local_packs;
while (local) {
- llist_sorted_difference_inplace(local->unique_objects,
- alt->all_objects);
+ llist_sorted_difference_inplace(local->remaining_objects,
+ alt->remaining_objects);
local = local->next;
}
- llist_sorted_difference_inplace(all_objects, alt->all_objects);
alt = alt->next;
}
}
@@ -555,7 +506,7 @@ static struct pack_list * add_pack(struct packed_git *p)
return NULL;
l.pack = p;
- llist_init(&l.all_objects);
+ llist_init(&l.remaining_objects);
if (open_pack_index(p))
return NULL;
@@ -564,11 +515,11 @@ static struct pack_list * add_pack(struct packed_git *p)
base += 256 * 4 + ((p->index_version < 2) ? 4 : 8);
step = the_hash_algo->rawsz + ((p->index_version < 2) ? 4 : 0);
while (off < p->num_objects * step) {
- llist_insert_back(l.all_objects, (const struct object_id *)(base + off));
+ llist_insert_back(l.remaining_objects, (const struct object_id *)(base + off));
off += step;
}
- /* this list will be pruned in cmp_two_packs later */
- l.unique_objects = llist_copy(l.all_objects);
+ l.all_objects_size = l.remaining_objects->size;
+ l.unique_objects = NULL;
if (p->pack_local)
return pack_list_insert(&local_packs, &l);
else
@@ -603,7 +554,7 @@ static void load_all(void)
int cmd_pack_redundant(int argc, const char **argv, const char *prefix)
{
int i;
- struct pack_list *min, *red, *pl;
+ struct pack_list *min = NULL, *red, *pl;
struct llist *ignore;
struct object_id *oid;
char buf[GIT_MAX_HEXSZ + 2]; /* hex hash + \n + \0 */
@@ -646,7 +597,6 @@ int cmd_pack_redundant(int argc, const char **argv, const char *prefix)
load_all_objects();
- cmp_local_packs();
if (alt_odb)
scan_alt_odb_packs();
@@ -663,10 +613,12 @@ int cmd_pack_redundant(int argc, const char **argv, const char *prefix)
llist_sorted_difference_inplace(all_objects, ignore);
pl = local_packs;
while (pl) {
- llist_sorted_difference_inplace(pl->unique_objects, ignore);
+ llist_sorted_difference_inplace(pl->remaining_objects, ignore);
pl = pl->next;
}
+ cmp_local_packs();
+
minimize(&min);
if (verbose) {
diff --git a/builtin/prune-packed.c b/builtin/prune-packed.c
index a9e7b55..48c5e78 100644
--- a/builtin/prune-packed.c
+++ b/builtin/prune-packed.c
@@ -63,6 +63,11 @@ int cmd_prune_packed(int argc, const char **argv, const char *prefix)
argc = parse_options(argc, argv, prefix, prune_packed_options,
prune_packed_usage, 0);
+ if (argc > 0)
+ usage_msg_opt(_("too many arguments"),
+ prune_packed_usage,
+ prune_packed_options);
+
prune_packed_objects(opts);
return 0;
}
diff --git a/builtin/prune.c b/builtin/prune.c
index 1ec9ddd..97613ec 100644
--- a/builtin/prune.c
+++ b/builtin/prune.c
@@ -31,16 +31,39 @@ static int prune_tmp_file(const char *fullpath)
return 0;
}
+static void perform_reachability_traversal(struct rev_info *revs)
+{
+ static int initialized;
+ struct progress *progress = NULL;
+
+ if (initialized)
+ return;
+
+ if (show_progress)
+ progress = start_delayed_progress(_("Checking connectivity"), 0);
+ mark_reachable_objects(revs, 1, expire, progress);
+ stop_progress(&progress);
+ initialized = 1;
+}
+
+static int is_object_reachable(const struct object_id *oid,
+ struct rev_info *revs)
+{
+ struct object *obj;
+
+ perform_reachability_traversal(revs);
+
+ obj = lookup_object(the_repository, oid->hash);
+ return obj && (obj->flags & SEEN);
+}
+
static int prune_object(const struct object_id *oid, const char *fullpath,
void *data)
{
+ struct rev_info *revs = data;
struct stat st;
- /*
- * Do we know about this object?
- * It must have been reachable
- */
- if (lookup_object(the_repository, oid->hash))
+ if (is_object_reachable(oid, revs))
return 0;
if (lstat(fullpath, &st)) {
@@ -102,7 +125,6 @@ static void remove_temporary_files(const char *path)
int cmd_prune(int argc, const char **argv, const char *prefix)
{
struct rev_info revs;
- struct progress *progress = NULL;
int exclude_promisor_objects = 0;
const struct option options[] = {
OPT__DRY_RUN(&show_only, N_("do not remove, show only")),
@@ -142,17 +164,13 @@ int cmd_prune(int argc, const char **argv, const char *prefix)
if (show_progress == -1)
show_progress = isatty(2);
- if (show_progress)
- progress = start_delayed_progress(_("Checking connectivity"), 0);
if (exclude_promisor_objects) {
fetch_if_missing = 0;
revs.exclude_promisor_objects = 1;
}
- mark_reachable_objects(&revs, 1, expire, progress);
- stop_progress(&progress);
for_each_loose_file_in_objdir(get_object_directory(), prune_object,
- prune_cruft, prune_subdir, NULL);
+ prune_cruft, prune_subdir, &revs);
prune_packed_objects(show_only ? PRUNE_PACKED_DRY_RUN : 0);
remove_temporary_files(get_object_directory());
@@ -160,8 +178,10 @@ int cmd_prune(int argc, const char **argv, const char *prefix)
remove_temporary_files(s);
free(s);
- if (is_repository_shallow(the_repository))
+ if (is_repository_shallow(the_repository)) {
+ perform_reachability_traversal(&revs);
prune_shallow(show_only ? PRUNE_SHOW_ONLY : 0);
+ }
return 0;
}
diff --git a/builtin/pull.c b/builtin/pull.c
index 701d147..33db889 100644
--- a/builtin/pull.c
+++ b/builtin/pull.c
@@ -56,6 +56,10 @@ static enum rebase_type parse_config_rebase(const char *key, const char *value,
return REBASE_MERGES;
else if (!strcmp(value, "interactive") || !strcmp(value, "i"))
return REBASE_INTERACTIVE;
+ /*
+ * Please update _git_config() in git-completion.bash when you
+ * add new rebase modes.
+ */
if (fatal)
die(_("Invalid value for %s: %s"), key, value);
diff --git a/builtin/rebase.c b/builtin/rebase.c
index 7c7bc13..52114cb 100644
--- a/builtin/rebase.c
+++ b/builtin/rebase.c
@@ -1027,6 +1027,14 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
ACTION_EDIT_TODO,
ACTION_SHOW_CURRENT_PATCH,
} action = NO_ACTION;
+ static const char *action_names[] = { N_("undefined"),
+ N_("continue"),
+ N_("skip"),
+ N_("abort"),
+ N_("quit"),
+ N_("edit_todo"),
+ N_("show_current_patch"),
+ NULL };
const char *gpg_sign = NULL;
struct string_list exec = STRING_LIST_INIT_NODUP;
const char *rebase_merges = NULL;
@@ -1212,6 +1220,15 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
die(_("The --edit-todo action can only be used during "
"interactive rebase."));
+ if (trace2_is_enabled()) {
+ if (is_interactive(&options))
+ trace2_cmd_mode("interactive");
+ else if (exec.nr)
+ trace2_cmd_mode("interactive-exec");
+ else
+ trace2_cmd_mode(action_names[action]);
+ }
+
switch (action) {
case ACTION_CONTINUE: {
struct object_id head;
diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c
index d58b775..29f165d 100644
--- a/builtin/receive-pack.c
+++ b/builtin/receive-pack.c
@@ -694,6 +694,8 @@ static int run_and_feed_hook(const char *hook_name, feed_fn feed,
proc.argv = argv;
proc.in = -1;
proc.stdout_to_stderr = 1;
+ proc.trace2_hook_name = hook_name;
+
if (feed_state->push_options) {
int i;
for (i = 0; i < feed_state->push_options->nr; i++)
@@ -807,6 +809,7 @@ static int run_update_hook(struct command *cmd)
proc.stdout_to_stderr = 1;
proc.err = use_sideband ? -1 : 0;
proc.argv = argv;
+ proc.trace2_hook_name = "update";
code = start_command(&proc);
if (code)
@@ -1190,6 +1193,7 @@ static void run_update_post_hook(struct command *commands)
proc.no_stdin = 1;
proc.stdout_to_stderr = 1;
proc.err = use_sideband ? -1 : 0;
+ proc.trace2_hook_name = "post-update";
if (!start_command(&proc)) {
if (use_sideband)
@@ -1198,17 +1202,12 @@ static void run_update_post_hook(struct command *commands)
}
}
-static void check_aliased_update(struct command *cmd, struct string_list *list)
+static void check_aliased_update_internal(struct command *cmd,
+ struct string_list *list,
+ const char *dst_name, int flag)
{
- struct strbuf buf = STRBUF_INIT;
- const char *dst_name;
struct string_list_item *item;
struct command *dst_cmd;
- int flag;
-
- strbuf_addf(&buf, "%s%s", get_git_namespace(), cmd->ref_name);
- dst_name = resolve_ref_unsafe(buf.buf, 0, NULL, &flag);
- strbuf_release(&buf);
if (!(flag & REF_ISSYMREF))
return;
@@ -1247,6 +1246,18 @@ static void check_aliased_update(struct command *cmd, struct string_list *list)
"inconsistent aliased update";
}
+static void check_aliased_update(struct command *cmd, struct string_list *list)
+{
+ struct strbuf buf = STRBUF_INIT;
+ const char *dst_name;
+ int flag;
+
+ strbuf_addf(&buf, "%s%s", get_git_namespace(), cmd->ref_name);
+ dst_name = resolve_ref_unsafe(buf.buf, 0, NULL, &flag);
+ check_aliased_update_internal(cmd, list, dst_name, flag);
+ strbuf_release(&buf);
+}
+
static void check_aliased_updates(struct command *commands)
{
struct command *cmd;
diff --git a/builtin/replace.c b/builtin/replace.c
index 5b80b7f..f570162 100644
--- a/builtin/replace.c
+++ b/builtin/replace.c
@@ -82,6 +82,10 @@ static int list_replace_refs(const char *pattern, const char *format)
data.format = REPLACE_FORMAT_MEDIUM;
else if (!strcmp(format, "long"))
data.format = REPLACE_FORMAT_LONG;
+ /*
+ * Please update _git_replace() in git-completion.bash when
+ * you add new format
+ */
else
return error(_("invalid replace format '%s'\n"
"valid formats are 'short', 'medium' and 'long'"),
diff --git a/builtin/reset.c b/builtin/reset.c
index 4d18a46..7882829 100644
--- a/builtin/reset.c
+++ b/builtin/reset.c
@@ -341,6 +341,7 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
if (patch_mode) {
if (reset_type != NONE)
die(_("--patch is incompatible with --{hard,mixed,soft}"));
+ trace2_cmd_mode("patch-interactive");
return run_add_interactive(rev, "--patch=reset", &pathspec);
}
@@ -357,6 +358,11 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
if (reset_type == NONE)
reset_type = MIXED; /* by default */
+ if (pathspec.nr)
+ trace2_cmd_mode("path");
+ else
+ trace2_cmd_mode(reset_type_names[reset_type]);
+
if (reset_type != SOFT && (reset_type != MIXED || get_git_work_tree()))
setup_work_tree();
diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c
index b80fc4b..6bcc4f1 100644
--- a/builtin/submodule--helper.c
+++ b/builtin/submodule--helper.c
@@ -1816,11 +1816,10 @@ static int update_submodules(struct submodule_update_clone *suc)
{
int i;
- run_processes_parallel(suc->max_jobs,
- update_clone_get_next_task,
- update_clone_start_failure,
- update_clone_task_finished,
- suc);
+ run_processes_parallel_tr2(suc->max_jobs, update_clone_get_next_task,
+ update_clone_start_failure,
+ update_clone_task_finished, suc, "submodule",
+ "parallel/update");
/*
* We saved the output and put it out all at once now.
diff --git a/builtin/update-index.c b/builtin/update-index.c
index 02ace60..1b6c42f 100644
--- a/builtin/update-index.c
+++ b/builtin/update-index.c
@@ -848,14 +848,16 @@ static int parse_new_style_cacheinfo(const char *arg,
return 0;
}
-static int cacheinfo_callback(struct parse_opt_ctx_t *ctx,
- const struct option *opt, int unset)
+static enum parse_opt_result cacheinfo_callback(
+ struct parse_opt_ctx_t *ctx, const struct option *opt,
+ const char *arg, int unset)
{
struct object_id oid;
unsigned int mode;
const char *path;
BUG_ON_OPT_NEG(unset);
+ BUG_ON_OPT_ARG(arg);
if (!parse_new_style_cacheinfo(ctx->argv[1], &mode, &oid, &path)) {
if (add_cacheinfo(mode, &oid, path, 0))
@@ -874,12 +876,14 @@ static int cacheinfo_callback(struct parse_opt_ctx_t *ctx,
return 0;
}
-static int stdin_cacheinfo_callback(struct parse_opt_ctx_t *ctx,
- const struct option *opt, int unset)
+static enum parse_opt_result stdin_cacheinfo_callback(
+ struct parse_opt_ctx_t *ctx, const struct option *opt,
+ const char *arg, int unset)
{
int *nul_term_line = opt->value;
BUG_ON_OPT_NEG(unset);
+ BUG_ON_OPT_ARG(arg);
if (ctx->argc != 1)
return error("option '%s' must be the last argument", opt->long_name);
@@ -888,12 +892,14 @@ static int stdin_cacheinfo_callback(struct parse_opt_ctx_t *ctx,
return 0;
}
-static int stdin_callback(struct parse_opt_ctx_t *ctx,
- const struct option *opt, int unset)
+static enum parse_opt_result stdin_callback(
+ struct parse_opt_ctx_t *ctx, const struct option *opt,
+ const char *arg, int unset)
{
int *read_from_stdin = opt->value;
BUG_ON_OPT_NEG(unset);
+ BUG_ON_OPT_ARG(arg);
if (ctx->argc != 1)
return error("option '%s' must be the last argument", opt->long_name);
@@ -901,13 +907,15 @@ static int stdin_callback(struct parse_opt_ctx_t *ctx,
return 0;
}
-static int unresolve_callback(struct parse_opt_ctx_t *ctx,
- const struct option *opt, int unset)
+static enum parse_opt_result unresolve_callback(
+ struct parse_opt_ctx_t *ctx, const struct option *opt,
+ const char *arg, int unset)
{
int *has_errors = opt->value;
const char *prefix = startup_info->prefix;
BUG_ON_OPT_NEG(unset);
+ BUG_ON_OPT_ARG(arg);
/* consume remaining arguments. */
*has_errors = do_unresolve(ctx->argc, ctx->argv,
@@ -920,13 +928,15 @@ static int unresolve_callback(struct parse_opt_ctx_t *ctx,
return 0;
}
-static int reupdate_callback(struct parse_opt_ctx_t *ctx,
- const struct option *opt, int unset)
+static enum parse_opt_result reupdate_callback(
+ struct parse_opt_ctx_t *ctx, const struct option *opt,
+ const char *arg, int unset)
{
int *has_errors = opt->value;
const char *prefix = startup_info->prefix;
BUG_ON_OPT_NEG(unset);
+ BUG_ON_OPT_ARG(arg);
/* consume remaining arguments. */
setup_work_tree();
@@ -986,7 +996,8 @@ int cmd_update_index(int argc, const char **argv, const char *prefix)
N_("add the specified entry to the index"),
PARSE_OPT_NOARG | /* disallow --cacheinfo=<mode> form */
PARSE_OPT_NONEG | PARSE_OPT_LITERAL_ARGHELP,
- (parse_opt_cb *) cacheinfo_callback},
+ NULL, 0,
+ cacheinfo_callback},
{OPTION_CALLBACK, 0, "chmod", &set_executable_bit, "(+|-)x",
N_("override the executable bit of the listed files"),
PARSE_OPT_NONEG,
@@ -1012,19 +1023,19 @@ int cmd_update_index(int argc, const char **argv, const char *prefix)
{OPTION_LOWLEVEL_CALLBACK, 0, "stdin", &read_from_stdin, NULL,
N_("read list of paths to be updated from standard input"),
PARSE_OPT_NONEG | PARSE_OPT_NOARG,
- (parse_opt_cb *) stdin_callback},
+ NULL, 0, stdin_callback},
{OPTION_LOWLEVEL_CALLBACK, 0, "index-info", &nul_term_line, NULL,
N_("add entries from standard input to the index"),
PARSE_OPT_NONEG | PARSE_OPT_NOARG,
- (parse_opt_cb *) stdin_cacheinfo_callback},
+ NULL, 0, stdin_cacheinfo_callback},
{OPTION_LOWLEVEL_CALLBACK, 0, "unresolve", &has_errors, NULL,
N_("repopulate stages #2 and #3 for the listed paths"),
PARSE_OPT_NONEG | PARSE_OPT_NOARG,
- (parse_opt_cb *) unresolve_callback},
+ NULL, 0, unresolve_callback},
{OPTION_LOWLEVEL_CALLBACK, 'g', "again", &has_errors, NULL,
N_("only update entries that differ from HEAD"),
PARSE_OPT_NONEG | PARSE_OPT_NOARG,
- (parse_opt_cb *) reupdate_callback},
+ NULL, 0, reupdate_callback},
OPT_BIT(0, "ignore-missing", &refresh_args.flags,
N_("ignore files missing from worktree"),
REFRESH_IGNORE_MISSING),
diff --git a/builtin/worktree.c b/builtin/worktree.c
index 3f9907f..6cc094a 100644
--- a/builtin/worktree.c
+++ b/builtin/worktree.c
@@ -402,6 +402,7 @@ done:
cp.dir = path;
cp.env = env;
cp.argv = NULL;
+ cp.trace2_hook_name = "post-checkout";
argv_array_pushl(&cp.args, absolute_path(hook),
oid_to_hex(&null_oid),
oid_to_hex(&commit->object.oid),
diff --git a/cache.h b/cache.h
index 27fe635..abd518a 100644
--- a/cache.h
+++ b/cache.h
@@ -9,6 +9,7 @@
#include "gettext.h"
#include "convert.h"
#include "trace.h"
+#include "trace2.h"
#include "string-list.h"
#include "pack-revindex.h"
#include "hash.h"
@@ -758,7 +759,7 @@ extern void rename_index_entry_at(struct index_state *, int pos, const char *new
/* Remove entry, return true if there are more entries to go. */
extern int remove_index_entry_at(struct index_state *, int pos);
-extern void remove_marked_cache_entries(struct index_state *istate);
+extern void remove_marked_cache_entries(struct index_state *istate, int invalidate);
extern int remove_file_from_index(struct index_state *, const char *path);
#define ADD_CACHE_VERBOSE 1
#define ADD_CACHE_PRETEND 2
@@ -1506,10 +1507,19 @@ int date_overflows(timestamp_t date);
#define IDENT_STRICT 1
#define IDENT_NO_DATE 2
#define IDENT_NO_NAME 4
+
+enum want_ident {
+ WANT_BLANK_IDENT,
+ WANT_AUTHOR_IDENT,
+ WANT_COMMITTER_IDENT
+};
+
extern const char *git_author_info(int);
extern const char *git_committer_info(int);
-extern const char *fmt_ident(const char *name, const char *email, const char *date_str, int);
-extern const char *fmt_name(const char *name, const char *email);
+extern const char *fmt_ident(const char *name, const char *email,
+ enum want_ident whose_ident,
+ const char *date_str, int);
+extern const char *fmt_name(enum want_ident);
extern const char *ident_default_name(void);
extern const char *ident_default_email(void);
extern const char *git_editor(void);
@@ -1569,6 +1579,11 @@ struct checkout {
extern int checkout_entry(struct cache_entry *ce, const struct checkout *state, char *topath, int *nr_checkouts);
extern void enable_delayed_checkout(struct checkout *state);
extern int finish_delayed_checkout(struct checkout *state, int *nr_checkouts);
+/*
+ * Unlink the last component and schedule the leading directories for
+ * removal, such that empty directories get removed.
+ */
+extern void unlink_entry(const struct cache_entry *ce);
struct cache_def {
struct strbuf path;
diff --git a/check-racy.c b/check-racy.c
deleted file mode 100644
index 24b6542..0000000
--- a/check-racy.c
+++ /dev/null
@@ -1,28 +0,0 @@
-#include "cache.h"
-
-int main(int ac, char **av)
-{
- int i;
- int dirty, clean, racy;
-
- dirty = clean = racy = 0;
- read_cache();
- for (i = 0; i < active_nr; i++) {
- struct cache_entry *ce = active_cache[i];
- struct stat st;
-
- if (lstat(ce->name, &st)) {
- error_errno("lstat(%s)", ce->name);
- continue;
- }
-
- if (ce_match_stat(ce, &st, 0))
- dirty++;
- else if (ce_match_stat(ce, &st, CE_MATCH_RACY_IS_DIRTY))
- racy++;
- else
- clean++;
- }
- printf("dirty %d, clean %d, racy %d\n", dirty, clean, racy);
- return 0;
-}
diff --git a/combine-diff.c b/combine-diff.c
index 23d8fab..3e49f3b 100644
--- a/combine-diff.c
+++ b/combine-diff.c
@@ -23,11 +23,20 @@ static int compare_paths(const struct combine_diff_path *one,
two->path, strlen(two->path), two->mode);
}
-static struct combine_diff_path *intersect_paths(struct combine_diff_path *curr, int n, int num_parent)
+static int filename_changed(char status)
+{
+ return status == 'R' || status == 'C';
+}
+
+static struct combine_diff_path *intersect_paths(
+ struct combine_diff_path *curr,
+ int n,
+ int num_parent,
+ int combined_all_paths)
{
struct diff_queue_struct *q = &diff_queued_diff;
struct combine_diff_path *p, **tail = &curr;
- int i, cmp;
+ int i, j, cmp;
if (!n) {
for (i = 0; i < q->nr; i++) {
@@ -50,6 +59,13 @@ static struct combine_diff_path *intersect_paths(struct combine_diff_path *curr,
oidcpy(&p->parent[n].oid, &q->queue[i]->one->oid);
p->parent[n].mode = q->queue[i]->one->mode;
p->parent[n].status = q->queue[i]->status;
+
+ if (combined_all_paths &&
+ filename_changed(p->parent[n].status)) {
+ strbuf_init(&p->parent[n].path, 0);
+ strbuf_addstr(&p->parent[n].path,
+ q->queue[i]->one->path);
+ }
*tail = p;
tail = &p->next;
}
@@ -68,6 +84,10 @@ static struct combine_diff_path *intersect_paths(struct combine_diff_path *curr,
if (cmp < 0) {
/* p->path not in q->queue[]; drop it */
*tail = p->next;
+ for (j = 0; j < num_parent; j++)
+ if (combined_all_paths &&
+ filename_changed(p->parent[j].status))
+ strbuf_release(&p->parent[j].path);
free(p);
continue;
}
@@ -81,6 +101,10 @@ static struct combine_diff_path *intersect_paths(struct combine_diff_path *curr,
oidcpy(&p->parent[n].oid, &q->queue[i]->one->oid);
p->parent[n].mode = q->queue[i]->one->mode;
p->parent[n].status = q->queue[i]->status;
+ if (combined_all_paths &&
+ filename_changed(p->parent[n].status))
+ strbuf_addstr(&p->parent[n].path,
+ q->queue[i]->one->path);
tail = &p->next;
i++;
@@ -960,12 +984,25 @@ static void show_combined_header(struct combine_diff_path *elem,
if (!show_file_header)
return;
- if (added)
- dump_quoted_path("--- ", "", "/dev/null",
- line_prefix, c_meta, c_reset);
- else
- dump_quoted_path("--- ", a_prefix, elem->path,
- line_prefix, c_meta, c_reset);
+ if (rev->combined_all_paths) {
+ for (i = 0; i < num_parent; i++) {
+ char *path = filename_changed(elem->parent[i].status)
+ ? elem->parent[i].path.buf : elem->path;
+ if (elem->parent[i].status == DIFF_STATUS_ADDED)
+ dump_quoted_path("--- ", "", "/dev/null",
+ line_prefix, c_meta, c_reset);
+ else
+ dump_quoted_path("--- ", a_prefix, path,
+ line_prefix, c_meta, c_reset);
+ }
+ } else {
+ if (added)
+ dump_quoted_path("--- ", "", "/dev/null",
+ line_prefix, c_meta, c_reset);
+ else
+ dump_quoted_path("--- ", a_prefix, elem->path,
+ line_prefix, c_meta, c_reset);
+ }
if (deleted)
dump_quoted_path("+++ ", "", "/dev/null",
line_prefix, c_meta, c_reset);
@@ -1227,6 +1264,15 @@ static void show_raw_diff(struct combine_diff_path *p, int num_parent, struct re
putchar(inter_name_termination);
}
+ for (i = 0; i < num_parent; i++)
+ if (rev->combined_all_paths) {
+ if (filename_changed(p->parent[i].status))
+ write_name_quoted(p->parent[i].path.buf, stdout,
+ inter_name_termination);
+ else
+ write_name_quoted(p->path, stdout,
+ inter_name_termination);
+ }
write_name_quoted(p->path, stdout, line_termination);
}
@@ -1332,7 +1378,9 @@ static const char *path_path(void *obj)
/* find set of paths that every parent touches */
static struct combine_diff_path *find_paths_generic(const struct object_id *oid,
- const struct oid_array *parents, struct diff_options *opt)
+ const struct oid_array *parents,
+ struct diff_options *opt,
+ int combined_all_paths)
{
struct combine_diff_path *paths = NULL;
int i, num_parent = parents->nr;
@@ -1357,7 +1405,8 @@ static struct combine_diff_path *find_paths_generic(const struct object_id *oid,
opt->output_format = DIFF_FORMAT_NO_OUTPUT;
diff_tree_oid(&parents->oid[i], oid, "", opt);
diffcore_std(opt);
- paths = intersect_paths(paths, i, num_parent);
+ paths = intersect_paths(paths, i, num_parent,
+ combined_all_paths);
/* if showing diff, show it in requested order */
if (opt->output_format != DIFF_FORMAT_NO_OUTPUT &&
@@ -1467,7 +1516,8 @@ void diff_tree_combined(const struct object_id *oid,
* diff(sha1,parent_i) for all i to do the job, specifically
* for parent0.
*/
- paths = find_paths_generic(oid, parents, &diffopts);
+ paths = find_paths_generic(oid, parents, &diffopts,
+ rev->combined_all_paths);
}
else {
int stat_opt;
@@ -1540,6 +1590,10 @@ void diff_tree_combined(const struct object_id *oid,
while (paths) {
struct combine_diff_path *tmp = paths;
paths = paths->next;
+ for (i = 0; i < num_parent; i++)
+ if (rev->combined_all_paths &&
+ filename_changed(tmp->parent[i].status))
+ strbuf_release(&tmp->parent[i].path);
free(tmp);
}
diff --git a/common-main.c b/common-main.c
index 3728f66..d484aec 100644
--- a/common-main.c
+++ b/common-main.c
@@ -25,12 +25,19 @@ static void restore_sigpipe_to_default(void)
int main(int argc, const char **argv)
{
+ int result;
+
/*
* Always open file descriptors 0/1/2 to avoid clobbering files
* in die(). It also avoids messing up when the pipes are dup'ed
* onto stdin/stdout/stderr in the child processes we spawn.
*/
sanitize_stdfds();
+ restore_sigpipe_to_default();
+
+ trace2_initialize();
+ trace2_cmd_start(argv);
+ trace2_collect_process_info();
git_resolve_executable_dir(argv[0]);
@@ -40,7 +47,9 @@ int main(int argc, const char **argv)
attr_start();
- restore_sigpipe_to_default();
+ result = cmd_main(argc, argv);
+
+ trace2_cmd_exit(result);
- return cmd_main(argc, argv);
+ return result;
}
diff --git a/compat/mingw.c b/compat/mingw.c
index 4276297..6b04514 100644
--- a/compat/mingw.c
+++ b/compat/mingw.c
@@ -1551,19 +1551,23 @@ static int try_shell_exec(const char *cmd, char *const *argv)
return 0;
prog = path_lookup(interpr, 1);
if (prog) {
+ int exec_id;
int argc = 0;
const char **argv2;
while (argv[argc]) argc++;
ALLOC_ARRAY(argv2, argc + 1);
argv2[0] = (char *)cmd; /* full path to the script file */
memcpy(&argv2[1], &argv[1], sizeof(*argv) * argc);
+ exec_id = trace2_exec(prog, argv2);
pid = mingw_spawnv(prog, argv2, 1);
if (pid >= 0) {
int status;
if (waitpid(pid, &status, 0) < 0)
status = 255;
+ trace2_exec_result(exec_id, status);
exit(status);
}
+ trace2_exec_result(exec_id, -1);
pid = 1; /* indicate that we tried but failed */
free(prog);
free(argv2);
@@ -1576,12 +1580,17 @@ int mingw_execv(const char *cmd, char *const *argv)
/* check if git_command is a shell script */
if (!try_shell_exec(cmd, argv)) {
int pid, status;
+ int exec_id;
+ exec_id = trace2_exec(cmd, (const char **)argv);
pid = mingw_spawnv(cmd, (const char **)argv, 0);
- if (pid < 0)
+ if (pid < 0) {
+ trace2_exec_result(exec_id, -1);
return -1;
+ }
if (waitpid(pid, &status, 0) < 0)
status = 255;
+ trace2_exec_result(exec_id, status);
exit(status);
}
return -1;
@@ -1632,7 +1641,7 @@ int mingw_kill(pid_t pid, int sig)
*/
char *mingw_getenv(const char *name)
{
-#define GETENV_MAX_RETAIN 30
+#define GETENV_MAX_RETAIN 64
static char *values[GETENV_MAX_RETAIN];
static int value_counter;
int len_key, len_value;
diff --git a/compat/mingw.h b/compat/mingw.h
index 30d9fb3..4d73f8a 100644
--- a/compat/mingw.h
+++ b/compat/mingw.h
@@ -147,8 +147,7 @@ static inline int fcntl(int fd, int cmd, ...)
errno = EINVAL;
return -1;
}
-/* bash cannot reliably detect negative return codes as failure */
-#define exit(code) exit((code) & 0xff)
+
#define sigemptyset(x) (void)0
static inline int sigaddset(sigset_t *set, int signum)
{ return 0; }
diff --git a/compat/win32/trace2_win32_process_info.c b/compat/win32/trace2_win32_process_info.c
new file mode 100644
index 0000000..52bd620
--- /dev/null
+++ b/compat/win32/trace2_win32_process_info.c
@@ -0,0 +1,147 @@
+#include "../../cache.h"
+#include "../../json-writer.h"
+#include <Psapi.h>
+#include <tlHelp32.h>
+
+/*
+ * An arbitrarily chosen value to limit the size of the ancestor
+ * array built in git_processes().
+ */
+#define NR_PIDS_LIMIT 10
+
+/*
+ * Find the process data for the given PID in the given snapshot
+ * and update the PROCESSENTRY32 data.
+ */
+static int find_pid(DWORD pid, HANDLE hSnapshot, PROCESSENTRY32 *pe32)
+{
+ pe32->dwSize = sizeof(PROCESSENTRY32);
+
+ if (Process32First(hSnapshot, pe32)) {
+ do {
+ if (pe32->th32ProcessID == pid)
+ return 1;
+ } while (Process32Next(hSnapshot, pe32));
+ }
+ return 0;
+}
+
+/*
+ * Accumulate JSON array of our parent processes:
+ * [
+ * exe-name-parent,
+ * exe-name-grand-parent,
+ * ...
+ * ]
+ *
+ * Note: we only report the filename of the process executable; the
+ * only way to get its full pathname is to use OpenProcess()
+ * and GetModuleFileNameEx() or QueryfullProcessImageName()
+ * and that seems rather expensive (on top of the cost of
+ * getting the snapshot).
+ *
+ * Note: we compute the set of parent processes by walking the PPID
+ * link in each visited PROCESSENTRY32 record. This search
+ * stops when an ancestor process is not found in the snapshot
+ * (because it exited before the current or intermediate parent
+ * process exited).
+ *
+ * This search may compute an incorrect result if the PPID link
+ * refers to the PID of an exited parent and that PID has been
+ * recycled and given to a new unrelated process.
+ *
+ * Worse, it is possible for a child or descendant of the
+ * current process to be given the recycled PID and cause a
+ * PPID-cycle. This would cause an infinite loop building our
+ * parent process array.
+ *
+ * Note: for completeness, the "System Idle" process has PID=0 and
+ * PPID=0 and could cause another PPID-cycle. We don't expect
+ * Git to be a descendant of the idle process, but because of
+ * PID recycling, it might be possible to get a PPID link value
+ * of 0. This too would cause an infinite loop.
+ *
+ * Therefore, we keep an array of the visited PPIDs to guard against
+ * cycles.
+ *
+ * We use a fixed-size array rather than ALLOC_GROW to keep things
+ * simple and avoid the alloc/realloc overhead. It is OK if we
+ * truncate the search and return a partial answer.
+ */
+static void get_processes(struct json_writer *jw, HANDLE hSnapshot)
+{
+ PROCESSENTRY32 pe32;
+ DWORD pid;
+ DWORD pid_list[NR_PIDS_LIMIT];
+ int k, nr_pids = 0;
+
+ pid = GetCurrentProcessId();
+ while (find_pid(pid, hSnapshot, &pe32)) {
+ /* Only report parents. Omit self from the JSON output. */
+ if (nr_pids)
+ jw_array_string(jw, pe32.szExeFile);
+
+ /* Check for cycle in snapshot. (Yes, it happened.) */
+ for (k = 0; k < nr_pids; k++)
+ if (pid == pid_list[k]) {
+ jw_array_string(jw, "(cycle)");
+ return;
+ }
+
+ if (nr_pids == NR_PIDS_LIMIT) {
+ jw_array_string(jw, "(truncated)");
+ return;
+ }
+
+ pid_list[nr_pids++] = pid;
+
+ pid = pe32.th32ParentProcessID;
+ }
+}
+
+/*
+ * Emit JSON data for the current and parent processes. Individual
+ * trace2 targets can decide how to actually print it.
+ */
+static void get_ancestry(void)
+{
+ HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
+
+ if (hSnapshot != INVALID_HANDLE_VALUE) {
+ struct json_writer jw = JSON_WRITER_INIT;
+
+ jw_array_begin(&jw, 0);
+ get_processes(&jw, hSnapshot);
+ jw_end(&jw);
+
+ trace2_data_json("process", the_repository, "windows/ancestry",
+ &jw);
+
+ jw_release(&jw);
+ CloseHandle(hSnapshot);
+ }
+}
+
+/*
+ * Is a debugger attached to the current process?
+ *
+ * This will catch debug runs (where the debugger started the process).
+ * This is the normal case. Since this code is called during our startup,
+ * it will not report instances where a debugger is attached dynamically
+ * to a running git process, but that is relatively rare.
+ */
+static void get_is_being_debugged(void)
+{
+ if (IsDebuggerPresent())
+ trace2_data_intmax("process", the_repository,
+ "windows/debugger_present", 1);
+}
+
+void trace2_collect_process_info(void)
+{
+ if (!trace2_is_enabled())
+ return;
+
+ get_is_being_debugged();
+ get_ancestry();
+}
diff --git a/config.c b/config.c
index 24ad1a9..0f0cdd8 100644
--- a/config.c
+++ b/config.c
@@ -1445,7 +1445,9 @@ int git_default_config(const char *var, const char *value, void *cb)
if (starts_with(var, "core."))
return git_default_core_config(var, value, cb);
- if (starts_with(var, "user."))
+ if (starts_with(var, "user.") ||
+ starts_with(var, "author.") ||
+ starts_with(var, "committer."))
return git_ident_config(var, value, cb);
if (starts_with(var, "i18n."))
@@ -2655,6 +2657,8 @@ int git_config_set_gently(const char *key, const char *value)
void git_config_set(const char *key, const char *value)
{
git_config_set_multivar(key, value, NULL, 0);
+
+ trace2_cmd_set_config(key, value);
}
/*
diff --git a/config.mak.uname b/config.mak.uname
index b37fa84..c8b0e34 100644
--- a/config.mak.uname
+++ b/config.mak.uname
@@ -393,6 +393,7 @@ ifeq ($(uname_S),Windows)
BASIC_CFLAGS = -nologo -I. -I../zlib -Icompat/vcbuild -Icompat/vcbuild/include -DWIN32 -D_CONSOLE -DHAVE_STRING_H -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE
COMPAT_OBJS = compat/msvc.o compat/winansi.o \
compat/win32/pthread.o compat/win32/syslog.o \
+ compat/win32/trace2_win32_process_info.o \
compat/win32/dirent.o
COMPAT_CFLAGS = -D__USE_MINGW_ACCESS -DNOGDI -DHAVE_STRING_H -Icompat -Icompat/regex -Icompat/win32 -DSTRIP_EXTENSION=\".exe\"
BASIC_LDFLAGS = -IGNORE:4217 -IGNORE:4049 -NOLOGO -SUBSYSTEM:CONSOLE
@@ -546,6 +547,7 @@ ifneq (,$(findstring MINGW,$(uname_S)))
COMPAT_CFLAGS += -DNOGDI -Icompat -Icompat/win32
COMPAT_CFLAGS += -DSTRIP_EXTENSION=\".exe\"
COMPAT_OBJS += compat/mingw.o compat/winansi.o \
+ compat/win32/trace2_win32_process_info.o \
compat/win32/path-utils.o \
compat/win32/pthread.o compat/win32/syslog.o \
compat/win32/dirent.o
diff --git a/connect.c b/connect.c
index 4813f00..2778481 100644
--- a/connect.c
+++ b/connect.c
@@ -1248,6 +1248,7 @@ struct child_process *git_connect(int fd[2], const char *url,
conn = NULL;
} else if (protocol == PROTO_GIT) {
conn = git_connect_git(fd, hostandport, path, prog, version, flags);
+ conn->trace2_child_class = "transport/git";
} else {
struct strbuf cmd = STRBUF_INIT;
const char *const *var;
@@ -1290,9 +1291,11 @@ struct child_process *git_connect(int fd[2], const char *url,
strbuf_release(&cmd);
return NULL;
}
+ conn->trace2_child_class = "transport/ssh";
fill_ssh_args(conn, ssh_host, port, version, flags);
} else {
transport_check_allowed("file");
+ conn->trace2_child_class = "transport/file";
if (version > 0) {
argv_array_pushf(&conn->env_array, GIT_PROTOCOL_ENVIRONMENT "=version=%d",
version);
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index 499e56f..976e4a6 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -853,6 +853,11 @@ __git_compute_merge_strategies ()
__git_merge_strategies=$(__git_list_merge_strategies)
}
+__git_merge_strategy_options="ours theirs subtree subtree= patience
+ histogram diff-algorithm= ignore-space-change ignore-all-space
+ ignore-space-at-eol renormalize no-renormalize no-renames
+ find-renames find-renames= rename-threshold="
+
__git_complete_revlist_file ()
{
local dequoted_word pfx ls ref cur_="$cur"
@@ -996,12 +1001,21 @@ __git_complete_strategy ()
-s|--strategy)
__gitcomp "$__git_merge_strategies"
return 0
+ ;;
+ -X)
+ __gitcomp "$__git_merge_strategy_options"
+ return 0
+ ;;
esac
case "$cur" in
--strategy=*)
__gitcomp "$__git_merge_strategies" "" "${cur##--strategy=}"
return 0
;;
+ --strategy-option=*)
+ __gitcomp "$__git_merge_strategy_options" "" "${cur##--strategy-option=}"
+ return 0
+ ;;
esac
return 1
}
@@ -1163,6 +1177,7 @@ __git_count_arguments ()
}
__git_whitespacelist="nowarn warn error error-all fix"
+__git_patchformat="mbox stgit stgit-series hg mboxrd"
__git_am_inprogress_options="--skip --continue --resolved --abort --quit --show-current-patch"
_git_am ()
@@ -1177,6 +1192,10 @@ _git_am ()
__gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
return
;;
+ --patch-format=*)
+ __gitcomp "$__git_patchformat" "" "${cur##--patch-format=}"
+ return
+ ;;
--*)
__gitcomp_builtin am "" \
"$__git_am_inprogress_options"
@@ -1200,6 +1219,10 @@ _git_apply ()
_git_add ()
{
case "$cur" in
+ --chmod=*)
+ __gitcomp "+x -x" "" "${cur##--chmod=}"
+ return
+ ;;
--*)
__gitcomp_builtin add
return
@@ -1260,6 +1283,8 @@ _git_bisect ()
esac
}
+__git_ref_fieldlist="refname objecttype objectsize objectname upstream push HEAD symref"
+
_git_branch ()
{
local i c=1 only_local_ref="n" has_r="n"
@@ -1343,6 +1368,9 @@ _git_cherry_pick ()
__gitcomp "$__git_cherry_pick_inprogress_options"
return
fi
+
+ __git_complete_strategy && return
+
case "$cur" in
--*)
__gitcomp_builtin cherry-pick "" \
@@ -1506,6 +1534,10 @@ _git_fetch ()
__gitcomp "$__git_fetch_recurse_submodules" "" "${cur##--recurse-submodules=}"
return
;;
+ --filter=*)
+ __gitcomp "blob:none blob:limit= sparse:oid= sparse:path=" "" "${cur##--filter=}"
+ return
+ ;;
--*)
__gitcomp_builtin fetch
return
@@ -1702,8 +1734,8 @@ __git_log_shortlog_options="
--all-match --invert-grep
"
-__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_pretty_formats="oneline short medium full fuller email raw format: mboxrd"
+__git_log_date_formats="relative iso8601 iso8601-strict rfc2822 short local default raw unix format:"
_git_log ()
{
@@ -2221,7 +2253,7 @@ _git_config ()
return
;;
diff.submodule)
- __gitcomp "log short"
+ __gitcomp "$__git_diff_submodule_formats"
return
;;
help.format)
@@ -2388,6 +2420,10 @@ _git_remote ()
_git_replace ()
{
case "$cur" in
+ --format=*)
+ __gitcomp "short medium long" "" "${cur##--format=}"
+ return
+ ;;
--*)
__gitcomp_builtin replace
return
@@ -2429,6 +2465,7 @@ _git_revert ()
__gitcomp "$__git_revert_inprogress_options"
return
fi
+ __git_complete_strategy && return
case "$cur" in
--*)
__gitcomp_builtin revert "" \
@@ -2573,7 +2610,7 @@ _git_submodule ()
{
__git_has_doubledash && return
- local subcommands="add status init deinit update summary foreach sync"
+ local subcommands="add status init deinit update summary foreach sync absorbgitdirs"
local subcommand="$(__git_find_on_cmdline "$subcommands")"
if [ -z "$subcommand" ]; then
case "$cur" in
diff --git a/date.c b/date.c
index 9c5870e..8126146 100644
--- a/date.c
+++ b/date.c
@@ -921,6 +921,10 @@ static enum date_mode_type parse_date_type(const char *format, const char **end)
return DATE_UNIX;
if (skip_prefix(format, "format", end))
return DATE_STRFTIME;
+ /*
+ * Please update $__git_log_date_formats in
+ * git-completion.bash when you add new formats.
+ */
die("unknown date format %s", format);
}
diff --git a/diff-lib.c b/diff-lib.c
index 23c8d35..a838c21 100644
--- a/diff-lib.c
+++ b/diff-lib.c
@@ -531,7 +531,7 @@ int run_diff_index(struct rev_info *revs, int cached)
exit(128);
diff_set_mnemonic_prefix(&revs->diffopt, "c/", cached ? "i/" : "w/");
- diffcore_fix_diff_index(&revs->diffopt);
+ diffcore_fix_diff_index();
diffcore_std(&revs->diffopt);
diff_flush(&revs->diffopt);
trace_performance_leave("diff-index");
diff --git a/diff-no-index.c b/diff-no-index.c
index 9414e92..6001bae 100644
--- a/diff-no-index.c
+++ b/diff-no-index.c
@@ -233,8 +233,7 @@ static void fixup_paths(const char **path, struct strbuf *replacement)
}
}
-void diff_no_index(struct repository *r,
- struct rev_info *revs,
+void diff_no_index(struct rev_info *revs,
int argc, const char **argv)
{
int i;
@@ -242,11 +241,6 @@ void diff_no_index(struct repository *r,
struct strbuf replacement = STRBUF_INIT;
const char *prefix = revs->prefix;
- /*
- * FIXME: --no-index should not look at index and we should be
- * able to pass NULL repo. Maybe later.
- */
- repo_diff_setup(r, &revs->diffopt);
for (i = 1; i < argc - 2; ) {
int j;
if (!strcmp(argv[i], "--no-index"))
diff --git a/diff.c b/diff.c
index 5306c48..ec5c095 100644
--- a/diff.c
+++ b/diff.c
@@ -23,6 +23,7 @@
#include "argv-array.h"
#include "graph.h"
#include "packfile.h"
+#include "parse-options.h"
#include "help.h"
#ifdef NO_FAST_WORKING_DIRECTORY
@@ -103,11 +104,6 @@ static const char *color_diff_slots[] = {
[DIFF_FILE_NEW_BOLD] = "newBold",
};
-static NORETURN void die_want_option(const char *option_name)
-{
- die(_("option '%s' requires a value"), option_name);
-}
-
define_list_config_array_extra(color_diff_slots, {"plain"});
static int parse_diff_color_slot(const char *var)
@@ -178,6 +174,10 @@ static int parse_submodule_params(struct diff_options *options, const char *valu
options->submodule_format = DIFF_SUBMODULE_SHORT;
else if (!strcmp(value, "diff"))
options->submodule_format = DIFF_SUBMODULE_INLINE_DIFF;
+ /*
+ * Please update $__git_diff_submodule_formats in
+ * git-completion.bash when you add new formats.
+ */
else
return -1;
return 0;
@@ -204,6 +204,10 @@ long parse_algorithm_value(const char *value)
return XDF_PATIENCE_DIFF;
else if (!strcasecmp(value, "histogram"))
return XDF_HISTOGRAM_DIFF;
+ /*
+ * Please update $__git_diff_algorithms in git-completion.bash
+ * when you add new algorithms.
+ */
return -1;
}
@@ -1613,8 +1617,7 @@ static int new_blank_line_at_eof(struct emit_callback *ecbdata, const char *line
return ws_blank_line(line, len, ecbdata->ws_rule);
}
-static void emit_add_line(const char *reset,
- struct emit_callback *ecbdata,
+static void emit_add_line(struct emit_callback *ecbdata,
const char *line, int len)
{
unsigned flags = WSEH_NEW | ecbdata->ws_rule;
@@ -1624,16 +1627,14 @@ static void emit_add_line(const char *reset,
emit_diff_symbol(ecbdata->opt, DIFF_SYMBOL_PLUS, line, len, flags);
}
-static void emit_del_line(const char *reset,
- struct emit_callback *ecbdata,
+static void emit_del_line(struct emit_callback *ecbdata,
const char *line, int len)
{
unsigned flags = WSEH_OLD | ecbdata->ws_rule;
emit_diff_symbol(ecbdata->opt, DIFF_SYMBOL_MINUS, line, len, flags);
}
-static void emit_context_line(const char *reset,
- struct emit_callback *ecbdata,
+static void emit_context_line(struct emit_callback *ecbdata,
const char *line, int len)
{
unsigned flags = WSEH_CONTEXT | ecbdata->ws_rule;
@@ -1742,7 +1743,6 @@ static void emit_rewrite_lines(struct emit_callback *ecb,
int prefix, const char *data, int size)
{
const char *endp = NULL;
- const char *reset = diff_get_color(ecb->color_diff, DIFF_RESET);
while (0 < size) {
int len;
@@ -1751,10 +1751,10 @@ static void emit_rewrite_lines(struct emit_callback *ecb,
len = endp ? (endp - data + 1) : size;
if (prefix != '+') {
ecb->lno_in_preimage++;
- emit_del_line(reset, ecb, data, len);
+ emit_del_line(ecb, data, len);
} else {
ecb->lno_in_postimage++;
- emit_add_line(reset, ecb, data, len);
+ emit_add_line(ecb, data, len);
}
size -= len;
data += len;
@@ -2291,7 +2291,7 @@ const char *diff_line_prefix(struct diff_options *opt)
return msgbuf->buf;
}
-static unsigned long sane_truncate_line(struct emit_callback *ecb, char *line, unsigned long len)
+static unsigned long sane_truncate_line(char *line, unsigned long len)
{
const char *cp;
unsigned long allot;
@@ -2325,7 +2325,6 @@ static void find_lno(const char *line, struct emit_callback *ecbdata)
static void fn_out_consume(void *priv, char *line, unsigned long len)
{
struct emit_callback *ecbdata = priv;
- const char *reset = diff_get_color(ecbdata->color_diff, DIFF_RESET);
struct diff_options *o = ecbdata->opt;
o->found_changes = 1;
@@ -2356,7 +2355,7 @@ static void fn_out_consume(void *priv, char *line, unsigned long len)
if (line[0] == '@') {
if (ecbdata->diff_words)
diff_words_flush(ecbdata);
- len = sane_truncate_line(ecbdata, line, len);
+ len = sane_truncate_line(line, len);
find_lno(line, ecbdata);
emit_hunk_header(ecbdata, line, len);
return;
@@ -2392,16 +2391,16 @@ static void fn_out_consume(void *priv, char *line, unsigned long len)
switch (line[0]) {
case '+':
ecbdata->lno_in_postimage++;
- emit_add_line(reset, ecbdata, line + 1, len - 1);
+ emit_add_line(ecbdata, line + 1, len - 1);
break;
case '-':
ecbdata->lno_in_preimage++;
- emit_del_line(reset, ecbdata, line + 1, len - 1);
+ emit_del_line(ecbdata, line + 1, len - 1);
break;
case ' ':
ecbdata->lno_in_postimage++;
ecbdata->lno_in_preimage++;
- emit_context_line(reset, ecbdata, line + 1, len - 1);
+ emit_context_line(ecbdata, line + 1, len - 1);
break;
default:
/* incomplete line at the end */
@@ -4183,7 +4182,6 @@ static void run_external_diff(const char *pgm,
struct diff_filespec *one,
struct diff_filespec *two,
const char *xfrm_msg,
- int complete_rewrite,
struct diff_options *o)
{
struct argv_array argv = ARGV_ARRAY_INIT;
@@ -4341,8 +4339,7 @@ static void run_diff_cmd(const char *pgm,
}
if (pgm) {
- run_external_diff(pgm, name, other, one, two, xfrm_msg,
- complete_rewrite, o);
+ run_external_diff(pgm, name, other, one, two, xfrm_msg, o);
return;
}
if (one && two)
@@ -4491,6 +4488,8 @@ static void run_checkdiff(struct diff_filepair *p, struct diff_options *o)
builtin_checkdiff(name, other, attr_path, p->one, p->two, o);
}
+static void prep_parse_options(struct diff_options *options);
+
void repo_diff_setup(struct repository *r, struct diff_options *options)
{
memcpy(options, &default_diff_options, sizeof(*options));
@@ -4532,6 +4531,8 @@ void repo_diff_setup(struct repository *r, struct diff_options *options)
options->color_moved = diff_color_moved_default;
options->color_moved_ws_handling = diff_color_moved_ws_default;
+
+ prep_parse_options(options);
}
void diff_setup_done(struct diff_options *options)
@@ -4635,6 +4636,8 @@ void diff_setup_done(struct diff_options *options)
if (!options->use_color || external_diff())
options->color_moved = 0;
+
+ FREE_AND_NULL(options->parseopts);
}
static int opt_arg(const char *arg, int arg_short, const char *arg_long, int *val)
@@ -4681,8 +4684,6 @@ static int opt_arg(const char *arg, int arg_short, const char *arg_long, int *va
return 1;
}
-static int diff_scoreopt_parse(const char *opt);
-
static inline int short_opt(char opt, const char **argv,
const char **optarg)
{
@@ -4720,77 +4721,56 @@ int parse_long_opt(const char *opt, const char **argv,
return 2;
}
-static int stat_opt(struct diff_options *options, const char **av)
+static int diff_opt_stat(const struct option *opt, const char *value, int unset)
{
- const char *arg = av[0];
- char *end;
+ struct diff_options *options = opt->value;
int width = options->stat_width;
int name_width = options->stat_name_width;
int graph_width = options->stat_graph_width;
int count = options->stat_count;
- int argcount = 1;
+ char *end;
- if (!skip_prefix(arg, "--stat", &arg))
- BUG("stat option does not begin with --stat: %s", arg);
- end = (char *)arg;
+ BUG_ON_OPT_NEG(unset);
- switch (*arg) {
- case '-':
- if (skip_prefix(arg, "-width", &arg)) {
- if (*arg == '=')
- width = strtoul(arg + 1, &end, 10);
- else if (!*arg && !av[1])
- die_want_option("--stat-width");
- else if (!*arg) {
- width = strtoul(av[1], &end, 10);
- argcount = 2;
- }
- } else if (skip_prefix(arg, "-name-width", &arg)) {
- if (*arg == '=')
- name_width = strtoul(arg + 1, &end, 10);
- else if (!*arg && !av[1])
- die_want_option("--stat-name-width");
- else if (!*arg) {
- name_width = strtoul(av[1], &end, 10);
- argcount = 2;
- }
- } else if (skip_prefix(arg, "-graph-width", &arg)) {
- if (*arg == '=')
- graph_width = strtoul(arg + 1, &end, 10);
- else if (!*arg && !av[1])
- die_want_option("--stat-graph-width");
- else if (!*arg) {
- graph_width = strtoul(av[1], &end, 10);
- argcount = 2;
- }
- } else if (skip_prefix(arg, "-count", &arg)) {
- if (*arg == '=')
- count = strtoul(arg + 1, &end, 10);
- else if (!*arg && !av[1])
- die_want_option("--stat-count");
- else if (!*arg) {
- count = strtoul(av[1], &end, 10);
- argcount = 2;
- }
+ if (!strcmp(opt->long_name, "stat")) {
+ if (value) {
+ width = strtoul(value, &end, 10);
+ if (*end == ',')
+ name_width = strtoul(end+1, &end, 10);
+ if (*end == ',')
+ count = strtoul(end+1, &end, 10);
+ if (*end)
+ return error(_("invalid --stat value: %s"), value);
}
- break;
- case '=':
- width = strtoul(arg+1, &end, 10);
- if (*end == ',')
- name_width = strtoul(end+1, &end, 10);
- if (*end == ',')
- count = strtoul(end+1, &end, 10);
- }
+ } else if (!strcmp(opt->long_name, "stat-width")) {
+ width = strtoul(value, &end, 10);
+ if (*end)
+ return error(_("%s expects a numerical value"),
+ opt->long_name);
+ } else if (!strcmp(opt->long_name, "stat-name-width")) {
+ name_width = strtoul(value, &end, 10);
+ if (*end)
+ return error(_("%s expects a numerical value"),
+ opt->long_name);
+ } else if (!strcmp(opt->long_name, "stat-graph-width")) {
+ graph_width = strtoul(value, &end, 10);
+ if (*end)
+ return error(_("%s expects a numerical value"),
+ opt->long_name);
+ } else if (!strcmp(opt->long_name, "stat-count")) {
+ count = strtoul(value, &end, 10);
+ if (*end)
+ return error(_("%s expects a numerical value"),
+ opt->long_name);
+ } else
+ BUG("%s should not get here", opt->long_name);
- /* Important! This checks all the error cases! */
- if (*end)
- return 0;
options->output_format |= DIFF_FORMAT_DIFFSTAT;
options->stat_name_width = name_width;
options->stat_graph_width = graph_width;
options->stat_width = width;
options->stat_count = count;
- return argcount;
+ return 0;
}
static int parse_dirstat_opt(struct diff_options *options, const char *params)
@@ -4926,6 +4906,308 @@ static int parse_objfind_opt(struct diff_options *opt, const char *arg)
return 1;
}
+static int diff_opt_break_rewrites(const struct option *opt,
+ const char *arg, int unset)
+{
+ int *break_opt = opt->value;
+ int opt1, opt2;
+
+ BUG_ON_OPT_NEG(unset);
+ if (!arg)
+ arg = "";
+ opt1 = parse_rename_score(&arg);
+ if (*arg == 0)
+ opt2 = 0;
+ else if (*arg != '/')
+ return error(_("%s expects <n>/<m> form"), opt->long_name);
+ else {
+ arg++;
+ opt2 = parse_rename_score(&arg);
+ }
+ if (*arg != 0)
+ return error(_("%s expects <n>/<m> form"), opt->long_name);
+ *break_opt = opt1 | (opt2 << 16);
+ return 0;
+}
+
+static int diff_opt_char(const struct option *opt,
+ const char *arg, int unset)
+{
+ char *value = opt->value;
+
+ BUG_ON_OPT_NEG(unset);
+ if (arg[1])
+ return error(_("%s expects a character, got '%s'"),
+ opt->long_name, arg);
+ *value = arg[0];
+ return 0;
+}
+
+static int diff_opt_compact_summary(const struct option *opt,
+ const char *arg, int unset)
+{
+ struct diff_options *options = opt->value;
+
+ BUG_ON_OPT_ARG(arg);
+ if (unset) {
+ options->flags.stat_with_summary = 0;
+ } else {
+ options->flags.stat_with_summary = 1;
+ options->output_format |= DIFF_FORMAT_DIFFSTAT;
+ }
+ return 0;
+}
+
+static int diff_opt_dirstat(const struct option *opt,
+ const char *arg, int unset)
+{
+ struct diff_options *options = opt->value;
+
+ BUG_ON_OPT_NEG(unset);
+ if (!strcmp(opt->long_name, "cumulative")) {
+ if (arg)
+ BUG("how come --cumulative take a value?");
+ arg = "cumulative";
+ } else if (!strcmp(opt->long_name, "dirstat-by-file"))
+ parse_dirstat_opt(options, "files");
+ parse_dirstat_opt(options, arg ? arg : "");
+ return 0;
+}
+
+static int diff_opt_find_copies(const struct option *opt,
+ const char *arg, int unset)
+{
+ struct diff_options *options = opt->value;
+
+ BUG_ON_OPT_NEG(unset);
+ if (!arg)
+ arg = "";
+ options->rename_score = parse_rename_score(&arg);
+ if (*arg != 0)
+ return error(_("invalid argument to %s"), opt->long_name);
+
+ if (options->detect_rename == DIFF_DETECT_COPY)
+ options->flags.find_copies_harder = 1;
+ else
+ options->detect_rename = DIFF_DETECT_COPY;
+
+ return 0;
+}
+
+static int diff_opt_find_renames(const struct option *opt,
+ const char *arg, int unset)
+{
+ struct diff_options *options = opt->value;
+
+ BUG_ON_OPT_NEG(unset);
+ if (!arg)
+ arg = "";
+ options->rename_score = parse_rename_score(&arg);
+ if (*arg != 0)
+ return error(_("invalid argument to %s"), opt->long_name);
+
+ options->detect_rename = DIFF_DETECT_RENAME;
+ return 0;
+}
+
+static enum parse_opt_result diff_opt_output(struct parse_opt_ctx_t *ctx,
+ const struct option *opt,
+ const char *arg, int unset)
+{
+ struct diff_options *options = opt->value;
+ char *path;
+
+ BUG_ON_OPT_NEG(unset);
+ path = prefix_filename(ctx->prefix, arg);
+ options->file = xfopen(path, "w");
+ options->close_file = 1;
+ if (options->use_color != GIT_COLOR_ALWAYS)
+ options->use_color = GIT_COLOR_NEVER;
+ free(path);
+ return 0;
+}
+
+static int diff_opt_relative(const struct option *opt,
+ const char *arg, int unset)
+{
+ struct diff_options *options = opt->value;
+
+ BUG_ON_OPT_NEG(unset);
+ options->flags.relative_name = 1;
+ if (arg)
+ options->prefix = arg;
+ return 0;
+}
+
+static int diff_opt_unified(const struct option *opt,
+ const char *arg, int unset)
+{
+ struct diff_options *options = opt->value;
+ char *s;
+
+ BUG_ON_OPT_NEG(unset);
+
+ options->context = strtol(arg, &s, 10);
+ if (*s)
+ return error(_("%s expects a numerical value"), "--unified");
+ enable_patch_output(&options->output_format);
+
+ return 0;
+}
+
+static void prep_parse_options(struct diff_options *options)
+{
+ struct option parseopts[] = {
+ OPT_GROUP(N_("Diff output format options")),
+ OPT_BITOP('p', "patch", &options->output_format,
+ N_("generate patch"),
+ DIFF_FORMAT_PATCH, DIFF_FORMAT_NO_OUTPUT),
+ OPT_BIT_F('s', "no-patch", &options->output_format,
+ N_("suppress diff output"),
+ DIFF_FORMAT_NO_OUTPUT, PARSE_OPT_NONEG),
+ OPT_BITOP('u', NULL, &options->output_format,
+ N_("generate patch"),
+ DIFF_FORMAT_PATCH, DIFF_FORMAT_NO_OUTPUT),
+ OPT_CALLBACK_F('U', "unified", options, N_("<n>"),
+ N_("generate diffs with <n> lines context"),
+ PARSE_OPT_NONEG, diff_opt_unified),
+ OPT_BOOL('W', "function-context", &options->flags.funccontext,
+ N_("generate diffs with <n> lines context")),
+ OPT_BIT_F(0, "raw", &options->output_format,
+ N_("generate the diff in raw format"),
+ DIFF_FORMAT_RAW, PARSE_OPT_NONEG),
+ OPT_BITOP(0, "patch-with-raw", &options->output_format,
+ N_("synonym for '-p --raw'"),
+ DIFF_FORMAT_PATCH | DIFF_FORMAT_RAW,
+ DIFF_FORMAT_NO_OUTPUT),
+ OPT_BITOP(0, "patch-with-stat", &options->output_format,
+ N_("synonym for '-p --stat'"),
+ DIFF_FORMAT_PATCH | DIFF_FORMAT_DIFFSTAT,
+ DIFF_FORMAT_NO_OUTPUT),
+ OPT_BIT_F(0, "numstat", &options->output_format,
+ N_("machine friendly --stat"),
+ DIFF_FORMAT_NUMSTAT, PARSE_OPT_NONEG),
+ OPT_BIT_F(0, "shortstat", &options->output_format,
+ N_("output only the last line of --stat"),
+ DIFF_FORMAT_SHORTSTAT, PARSE_OPT_NONEG),
+ OPT_CALLBACK_F('X', "dirstat", options, N_("<param1,param2>..."),
+ N_("output the distribution of relative amount of changes for each sub-directory"),
+ PARSE_OPT_NONEG | PARSE_OPT_OPTARG,
+ diff_opt_dirstat),
+ OPT_CALLBACK_F(0, "cumulative", options, NULL,
+ N_("synonym for --dirstat=cumulative"),
+ PARSE_OPT_NONEG | PARSE_OPT_NOARG,
+ diff_opt_dirstat),
+ OPT_CALLBACK_F(0, "dirstat-by-file", options, N_("<param1,param2>..."),
+ N_("synonym for --dirstat=files,param1,param2..."),
+ PARSE_OPT_NONEG | PARSE_OPT_OPTARG,
+ diff_opt_dirstat),
+ OPT_BIT_F(0, "check", &options->output_format,
+ N_("warn if changes introduce conflict markers or whitespace errors"),
+ DIFF_FORMAT_CHECKDIFF, PARSE_OPT_NONEG),
+ OPT_BIT_F(0, "summary", &options->output_format,
+ N_("condensed summary such as creations, renames and mode changes"),
+ DIFF_FORMAT_SUMMARY, PARSE_OPT_NONEG),
+ OPT_BIT_F(0, "name-only", &options->output_format,
+ N_("show only names of changed files"),
+ DIFF_FORMAT_NAME, PARSE_OPT_NONEG),
+ OPT_BIT_F(0, "name-status", &options->output_format,
+ N_("show only names and status of changed files"),
+ DIFF_FORMAT_NAME_STATUS, PARSE_OPT_NONEG),
+ OPT_CALLBACK_F(0, "stat", options, N_("<width>[,<name-width>[,<count>]]"),
+ N_("generate diffstat"),
+ PARSE_OPT_NONEG | PARSE_OPT_OPTARG, diff_opt_stat),
+ OPT_CALLBACK_F(0, "stat-width", options, N_("<width>"),
+ N_("generate diffstat with a given width"),
+ PARSE_OPT_NONEG, diff_opt_stat),
+ OPT_CALLBACK_F(0, "stat-name-width", options, N_("<width>"),
+ N_("generate diffstat with a given name width"),
+ PARSE_OPT_NONEG, diff_opt_stat),
+ OPT_CALLBACK_F(0, "stat-graph-width", options, N_("<width>"),
+ N_("generate diffstat with a given graph width"),
+ PARSE_OPT_NONEG, diff_opt_stat),
+ OPT_CALLBACK_F(0, "stat-count", options, N_("<count>"),
+ N_("generate diffstat with limited lines"),
+ PARSE_OPT_NONEG, diff_opt_stat),
+ OPT_CALLBACK_F(0, "compact-summary", options, NULL,
+ N_("generate compact summary in diffstat"),
+ PARSE_OPT_NOARG, diff_opt_compact_summary),
+ OPT_CALLBACK_F(0, "output-indicator-new",
+ &options->output_indicators[OUTPUT_INDICATOR_NEW],
+ N_("<char>"),
+ N_("specify the character to indicate a new line instead of '+'"),
+ PARSE_OPT_NONEG, diff_opt_char),
+ OPT_CALLBACK_F(0, "output-indicator-old",
+ &options->output_indicators[OUTPUT_INDICATOR_OLD],
+ N_("<char>"),
+ N_("specify the character to indicate an old line instead of '-'"),
+ PARSE_OPT_NONEG, diff_opt_char),
+ OPT_CALLBACK_F(0, "output-indicator-context",
+ &options->output_indicators[OUTPUT_INDICATOR_CONTEXT],
+ N_("<char>"),
+ N_("specify the character to indicate a context instead of ' '"),
+ PARSE_OPT_NONEG, diff_opt_char),
+
+ OPT_GROUP(N_("Diff rename options")),
+ OPT_CALLBACK_F('B', "break-rewrites", &options->break_opt, N_("<n>[/<m>]"),
+ N_("break complete rewrite changes into pairs of delete and create"),
+ PARSE_OPT_NONEG | PARSE_OPT_OPTARG,
+ diff_opt_break_rewrites),
+ OPT_CALLBACK_F('M', "find-renames", options, N_("<n>"),
+ N_("detect renames"),
+ PARSE_OPT_NONEG | PARSE_OPT_OPTARG,
+ diff_opt_find_renames),
+ OPT_SET_INT_F('D', "irreversible-delete", &options->irreversible_delete,
+ N_("omit the preimage for deletes"),
+ 1, PARSE_OPT_NONEG),
+ OPT_CALLBACK_F('C', "find-copies", options, N_("<n>"),
+ N_("detect copies"),
+ PARSE_OPT_NONEG | PARSE_OPT_OPTARG,
+ diff_opt_find_copies),
+ OPT_BOOL(0, "find-copies-harder", &options->flags.find_copies_harder,
+ N_("use unmodified files as source to find copies")),
+ OPT_SET_INT_F(0, "no-renames", &options->detect_rename,
+ N_("disable rename detection"),
+ 0, PARSE_OPT_NONEG),
+ OPT_BOOL(0, "rename-empty", &options->flags.rename_empty,
+ N_("use empty blobs as rename source")),
+
+ OPT_GROUP(N_("Diff algorithm options")),
+ OPT_BIT(0, "minimal", &options->xdl_opts,
+ N_("produce the smallest possible diff"),
+ XDF_NEED_MINIMAL),
+ OPT_BIT_F('w', "ignore-all-space", &options->xdl_opts,
+ N_("ignore whitespace when comparing lines"),
+ XDF_IGNORE_WHITESPACE, PARSE_OPT_NONEG),
+ OPT_BIT_F('b', "ignore-space-change", &options->xdl_opts,
+ N_("ignore changes in amount of whitespace"),
+ XDF_IGNORE_WHITESPACE_CHANGE, PARSE_OPT_NONEG),
+ OPT_BIT_F(0, "ignore-space-at-eol", &options->xdl_opts,
+ N_("ignore changes in whitespace at EOL"),
+ XDF_IGNORE_WHITESPACE_AT_EOL, PARSE_OPT_NONEG),
+ OPT_BIT_F(0, "ignore-cr-at-eol", &options->xdl_opts,
+ N_("ignore carrier-return at the end of line"),
+ XDF_IGNORE_CR_AT_EOL, PARSE_OPT_NONEG),
+ OPT_BIT_F(0, "ignore-blank-lines", &options->xdl_opts,
+ N_("ignore changes whose lines are all blank"),
+ XDF_IGNORE_BLANK_LINES, PARSE_OPT_NONEG),
+
+ OPT_GROUP(N_("Diff other options")),
+ OPT_CALLBACK_F(0, "relative", options, N_("<prefix>"),
+ N_("when run from subdir, exclude changes outside and show relative paths"),
+ PARSE_OPT_NONEG | PARSE_OPT_OPTARG,
+ diff_opt_relative),
+ { OPTION_CALLBACK, 0, "output", options, N_("<file>"),
+ N_("Output to a specific file"),
+ PARSE_OPT_NONEG, NULL, 0, diff_opt_output },
+
+ OPT_END()
+ };
+
+ ALLOC_ARRAY(options->parseopts, ARRAY_SIZE(parseopts));
+ memcpy(options->parseopts, parseopts, sizeof(parseopts));
+}
+
int diff_opt_parse(struct diff_options *options,
const char **av, int ac, const char *prefix)
{
@@ -4936,107 +5218,18 @@ int diff_opt_parse(struct diff_options *options,
if (!prefix)
prefix = "";
- /* Output format options */
- if (!strcmp(arg, "-p") || !strcmp(arg, "-u") || !strcmp(arg, "--patch")
- || opt_arg(arg, 'U', "unified", &options->context))
- enable_patch_output(&options->output_format);
- else if (!strcmp(arg, "--raw"))
- options->output_format |= DIFF_FORMAT_RAW;
- else if (!strcmp(arg, "--patch-with-raw")) {
- enable_patch_output(&options->output_format);
- options->output_format |= DIFF_FORMAT_RAW;
- } else if (!strcmp(arg, "--numstat"))
- options->output_format |= DIFF_FORMAT_NUMSTAT;
- else if (!strcmp(arg, "--shortstat"))
- options->output_format |= DIFF_FORMAT_SHORTSTAT;
- else if (skip_prefix(arg, "-X", &arg) ||
- skip_to_optional_arg(arg, "--dirstat", &arg))
- return parse_dirstat_opt(options, arg);
- else if (!strcmp(arg, "--cumulative"))
- return parse_dirstat_opt(options, "cumulative");
- else if (skip_to_optional_arg(arg, "--dirstat-by-file", &arg)) {
- parse_dirstat_opt(options, "files");
- return parse_dirstat_opt(options, arg);
- }
- else if (!strcmp(arg, "--check"))
- options->output_format |= DIFF_FORMAT_CHECKDIFF;
- else if (!strcmp(arg, "--summary"))
- options->output_format |= DIFF_FORMAT_SUMMARY;
- else if (!strcmp(arg, "--patch-with-stat")) {
- enable_patch_output(&options->output_format);
- options->output_format |= DIFF_FORMAT_DIFFSTAT;
- } else if (!strcmp(arg, "--name-only"))
- options->output_format |= DIFF_FORMAT_NAME;
- else if (!strcmp(arg, "--name-status"))
- options->output_format |= DIFF_FORMAT_NAME_STATUS;
- else if (!strcmp(arg, "-s") || !strcmp(arg, "--no-patch"))
- options->output_format |= DIFF_FORMAT_NO_OUTPUT;
- else if (starts_with(arg, "--stat"))
- /* --stat, --stat-width, --stat-name-width, or --stat-count */
- return stat_opt(options, av);
- else if (!strcmp(arg, "--compact-summary")) {
- options->flags.stat_with_summary = 1;
- options->output_format |= DIFF_FORMAT_DIFFSTAT;
- } else if (!strcmp(arg, "--no-compact-summary"))
- options->flags.stat_with_summary = 0;
- else if (skip_prefix(arg, "--output-indicator-new=", &arg))
- options->output_indicators[OUTPUT_INDICATOR_NEW] = arg[0];
- else if (skip_prefix(arg, "--output-indicator-old=", &arg))
- options->output_indicators[OUTPUT_INDICATOR_OLD] = arg[0];
- else if (skip_prefix(arg, "--output-indicator-context=", &arg))
- options->output_indicators[OUTPUT_INDICATOR_CONTEXT] = arg[0];
-
- /* renames options */
- else if (starts_with(arg, "-B") ||
- skip_to_optional_arg(arg, "--break-rewrites", NULL)) {
- if ((options->break_opt = diff_scoreopt_parse(arg)) == -1)
- return error("invalid argument to -B: %s", arg+2);
- }
- else if (starts_with(arg, "-M") ||
- skip_to_optional_arg(arg, "--find-renames", NULL)) {
- if ((options->rename_score = diff_scoreopt_parse(arg)) == -1)
- return error("invalid argument to -M: %s", arg+2);
- options->detect_rename = DIFF_DETECT_RENAME;
- }
- else if (!strcmp(arg, "-D") || !strcmp(arg, "--irreversible-delete")) {
- options->irreversible_delete = 1;
- }
- else if (starts_with(arg, "-C") ||
- skip_to_optional_arg(arg, "--find-copies", NULL)) {
- if (options->detect_rename == DIFF_DETECT_COPY)
- options->flags.find_copies_harder = 1;
- if ((options->rename_score = diff_scoreopt_parse(arg)) == -1)
- return error("invalid argument to -C: %s", arg+2);
- options->detect_rename = DIFF_DETECT_COPY;
- }
- else if (!strcmp(arg, "--no-renames"))
- options->detect_rename = 0;
- else if (!strcmp(arg, "--rename-empty"))
- options->flags.rename_empty = 1;
- else if (!strcmp(arg, "--no-rename-empty"))
- options->flags.rename_empty = 0;
- else if (skip_to_optional_arg_default(arg, "--relative", &arg, NULL)) {
- options->flags.relative_name = 1;
- if (arg)
- options->prefix = arg;
- }
+ ac = parse_options(ac, av, prefix, options->parseopts, NULL,
+ PARSE_OPT_KEEP_DASHDASH |
+ PARSE_OPT_KEEP_UNKNOWN |
+ PARSE_OPT_NO_INTERNAL_HELP |
+ PARSE_OPT_ONE_SHOT |
+ PARSE_OPT_STOP_AT_NON_OPTION);
+
+ if (ac)
+ return ac;
/* xdiff options */
- else if (!strcmp(arg, "--minimal"))
- DIFF_XDL_SET(options, NEED_MINIMAL);
- else if (!strcmp(arg, "--no-minimal"))
- DIFF_XDL_CLR(options, NEED_MINIMAL);
- else if (!strcmp(arg, "-w") || !strcmp(arg, "--ignore-all-space"))
- DIFF_XDL_SET(options, IGNORE_WHITESPACE);
- else if (!strcmp(arg, "-b") || !strcmp(arg, "--ignore-space-change"))
- DIFF_XDL_SET(options, IGNORE_WHITESPACE_CHANGE);
- else if (!strcmp(arg, "--ignore-space-at-eol"))
- DIFF_XDL_SET(options, IGNORE_WHITESPACE_AT_EOL);
- else if (!strcmp(arg, "--ignore-cr-at-eol"))
- DIFF_XDL_SET(options, IGNORE_CR_AT_EOL);
- else if (!strcmp(arg, "--ignore-blank-lines"))
- DIFF_XDL_SET(options, IGNORE_BLANK_LINES);
- else if (!strcmp(arg, "--indent-heuristic"))
+ if (!strcmp(arg, "--indent-heuristic"))
DIFF_XDL_SET(options, INDENT_HEURISTIC);
else if (!strcmp(arg, "--no-indent-heuristic"))
DIFF_XDL_CLR(options, INDENT_HEURISTIC);
@@ -5081,8 +5274,6 @@ int diff_opt_parse(struct diff_options *options,
options->flags.text = 1;
else if (!strcmp(arg, "-R"))
options->flags.reverse_diff = 1;
- else if (!strcmp(arg, "--find-copies-harder"))
- options->flags.find_copies_harder = 1;
else if (!strcmp(arg, "--follow"))
options->flags.follow_renames = 1;
else if (!strcmp(arg, "--no-follow")) {
@@ -5230,21 +5421,7 @@ int diff_opt_parse(struct diff_options *options,
else if (opt_arg(arg, '\0', "inter-hunk-context",
&options->interhunkcontext))
;
- else if (!strcmp(arg, "-W"))
- options->flags.funccontext = 1;
- else if (!strcmp(arg, "--function-context"))
- options->flags.funccontext = 1;
- else if (!strcmp(arg, "--no-function-context"))
- options->flags.funccontext = 0;
- else if ((argcount = parse_long_opt("output", av, &optarg))) {
- char *path = prefix_filename(prefix, optarg);
- options->file = xfopen(path, "w");
- options->close_file = 1;
- if (options->use_color != GIT_COLOR_ALWAYS)
- options->use_color = GIT_COLOR_NEVER;
- free(path);
- return argcount;
- } else
+ else
return 0;
return 1;
}
@@ -5285,47 +5462,6 @@ int parse_rename_score(const char **cp_p)
return (int)((num >= scale) ? MAX_SCORE : (MAX_SCORE * num / scale));
}
-static int diff_scoreopt_parse(const char *opt)
-{
- int opt1, opt2, cmd;
-
- if (*opt++ != '-')
- return -1;
- cmd = *opt++;
- if (cmd == '-') {
- /* convert the long-form arguments into short-form versions */
- if (skip_prefix(opt, "break-rewrites", &opt)) {
- if (*opt == 0 || *opt++ == '=')
- cmd = 'B';
- } else if (skip_prefix(opt, "find-copies", &opt)) {
- if (*opt == 0 || *opt++ == '=')
- cmd = 'C';
- } else if (skip_prefix(opt, "find-renames", &opt)) {
- if (*opt == 0 || *opt++ == '=')
- cmd = 'M';
- }
- }
- if (cmd != 'M' && cmd != 'C' && cmd != 'B')
- return -1; /* that is not a -M, -C, or -B option */
-
- opt1 = parse_rename_score(&opt);
- if (cmd != 'B')
- opt2 = 0;
- else {
- if (*opt == 0)
- opt2 = 0;
- else if (*opt != '/')
- return -1; /* we expect -B80/99 or -B80 */
- else {
- opt++;
- opt2 = parse_rename_score(&opt);
- }
- }
- if (*opt != 0)
- return -1;
- return opt1 | (opt2 << 16);
-}
-
struct diff_queue_struct diff_queued_diff;
void diff_q(struct diff_queue_struct *queue, struct diff_filepair *dp)
@@ -6224,7 +6360,7 @@ static int diffnamecmp(const void *a_, const void *b_)
return strcmp(name_a, name_b);
}
-void diffcore_fix_diff_index(struct diff_options *options)
+void diffcore_fix_diff_index(void)
{
struct diff_queue_struct *q = &diff_queued_diff;
QSORT(q->queue, q->nr, diffnamecmp);
diff --git a/diff.h b/diff.h
index b512d04..c9db982 100644
--- a/diff.h
+++ b/diff.h
@@ -9,16 +9,17 @@
#include "object.h"
#include "oidset.h"
-struct rev_info;
+struct combine_diff_path;
+struct commit;
+struct diff_filespec;
struct diff_options;
struct diff_queue_struct;
-struct strbuf;
-struct diff_filespec;
-struct userdiff_driver;
struct oid_array;
-struct commit;
-struct combine_diff_path;
+struct option;
struct repository;
+struct rev_info;
+struct strbuf;
+struct userdiff_driver;
typedef int (*pathchange_fn_t)(struct diff_options *options,
struct combine_diff_path *path);
@@ -64,39 +65,39 @@ typedef struct strbuf *(*diff_prefix_fn_t)(struct diff_options *opt, void *data)
#define DIFF_FLAGS_INIT { 0 }
struct diff_flags {
- unsigned recursive:1;
- unsigned tree_in_recursive:1;
- unsigned binary:1;
- unsigned text:1;
- unsigned full_index:1;
- unsigned silent_on_remove:1;
- unsigned find_copies_harder:1;
- unsigned follow_renames:1;
- unsigned rename_empty:1;
- unsigned has_changes:1;
- unsigned quick:1;
- unsigned no_index:1;
- unsigned allow_external:1;
- unsigned exit_with_status:1;
- unsigned reverse_diff:1;
- unsigned check_failed:1;
- unsigned relative_name:1;
- unsigned ignore_submodules:1;
- unsigned dirstat_cumulative:1;
- unsigned dirstat_by_file:1;
- unsigned allow_textconv:1;
- unsigned textconv_set_via_cmdline:1;
- unsigned diff_from_contents:1;
- unsigned dirty_submodules:1;
- unsigned ignore_untracked_in_submodules:1;
- unsigned ignore_dirty_submodules:1;
- unsigned override_submodule_config:1;
- unsigned dirstat_by_line:1;
- unsigned funccontext:1;
- unsigned default_follow_renames:1;
- unsigned stat_with_summary:1;
- unsigned suppress_diff_headers:1;
- unsigned dual_color_diffed_diffs:1;
+ unsigned recursive;
+ unsigned tree_in_recursive;
+ unsigned binary;
+ unsigned text;
+ unsigned full_index;
+ unsigned silent_on_remove;
+ unsigned find_copies_harder;
+ unsigned follow_renames;
+ unsigned rename_empty;
+ unsigned has_changes;
+ unsigned quick;
+ unsigned no_index;
+ unsigned allow_external;
+ unsigned exit_with_status;
+ unsigned reverse_diff;
+ unsigned check_failed;
+ unsigned relative_name;
+ unsigned ignore_submodules;
+ unsigned dirstat_cumulative;
+ unsigned dirstat_by_file;
+ unsigned allow_textconv;
+ unsigned textconv_set_via_cmdline;
+ unsigned diff_from_contents;
+ unsigned dirty_submodules;
+ unsigned ignore_untracked_in_submodules;
+ unsigned ignore_dirty_submodules;
+ unsigned override_submodule_config;
+ unsigned dirstat_by_line;
+ unsigned funccontext;
+ unsigned default_follow_renames;
+ unsigned stat_with_summary;
+ unsigned suppress_diff_headers;
+ unsigned dual_color_diffed_diffs;
};
static inline void diff_flags_or(struct diff_flags *a,
@@ -229,6 +230,7 @@ struct diff_options {
unsigned color_moved_ws_handling;
struct repository *repo;
+ struct option *parseopts;
};
void diff_emit_submodule_del(struct diff_options *o, const char *line);
@@ -294,6 +296,7 @@ struct combine_diff_path {
char status;
unsigned int mode;
struct object_id oid;
+ struct strbuf path;
} parent[FLEX_ARRAY];
};
#define combine_diff_path_size(n, l) \
@@ -367,7 +370,7 @@ int git_config_rename(const char *var, const char *value);
#define DIFF_PICKAXE_IGNORE_CASE 32
void diffcore_std(struct diff_options *);
-void diffcore_fix_diff_index(struct diff_options *);
+void diffcore_fix_diff_index(void);
#define COMMON_DIFF_OPTIONS_HELP \
"\ncommon diff options:\n" \
@@ -435,7 +438,7 @@ int diff_flush_patch_id(struct diff_options *, struct object_id *, int);
int diff_result_code(struct diff_options *, int);
-void diff_no_index(struct repository *, struct rev_info *, int, const char **);
+void diff_no_index(struct rev_info *, int, const char **);
int index_differs_from(struct repository *r, const char *def,
const struct diff_flags *flags,
diff --git a/editor.c b/editor.c
index c985eee..7154767 100644
--- a/editor.c
+++ b/editor.c
@@ -78,6 +78,7 @@ static int launch_specified_editor(const char *editor, const char *path,
p.argv = args;
p.env = env;
p.use_shell = 1;
+ p.trace2_child_class = "editor";
if (start_command(&p) < 0)
return error("unable to start editor '%s'", editor);
diff --git a/entry.c b/entry.c
index 6fd72b3..0e4f2f2 100644
--- a/entry.c
+++ b/entry.c
@@ -441,6 +441,17 @@ int checkout_entry(struct cache_entry *ce, const struct checkout *state,
static struct strbuf path = STRBUF_INIT;
struct stat st;
+ if (ce->ce_flags & CE_WT_REMOVE) {
+ if (topath)
+ /*
+ * No content and thus no path to create, so we have
+ * no pathname to return.
+ */
+ BUG("Can't remove entry to a path");
+ unlink_entry(ce);
+ return 0;
+ }
+
if (topath)
return write_entry(ce, topath, state, 1);
@@ -510,3 +521,18 @@ int checkout_entry(struct cache_entry *ce, const struct checkout *state,
(*nr_checkouts)++;
return write_entry(ce, path.buf, state, 0);
}
+
+void unlink_entry(const struct cache_entry *ce)
+{
+ const struct submodule *sub = submodule_from_ce(ce);
+ if (sub) {
+ /* state.force is set at the caller. */
+ submodule_move_head(ce->name, "HEAD", NULL,
+ SUBMODULE_MOVE_HEAD_FORCE);
+ }
+ if (!check_leading_path(ce->name, ce_namelen(ce)))
+ return;
+ if (remove_or_warn(ce->ce_mode, ce->name))
+ return;
+ schedule_dir_for_removal(ce->name, ce_namelen(ce));
+}
diff --git a/exec-cmd.c b/exec-cmd.c
index 4f81f44..7deeab3 100644
--- a/exec-cmd.c
+++ b/exec-cmd.c
@@ -209,6 +209,8 @@ static int git_get_exec_path(struct strbuf *buf, const char *argv0)
return -1;
}
+ trace2_cmd_path(buf->buf);
+
return 0;
}
diff --git a/git-compat-util.h b/git-compat-util.h
index 6573808..31b4793 100644
--- a/git-compat-util.h
+++ b/git-compat-util.h
@@ -1260,6 +1260,13 @@ static inline int is_missing_file_error(int errno_)
extern int cmd_main(int, const char **);
/*
+ * Intercept all calls to exit() and route them to trace2 to
+ * optionally emit a message before calling the real exit().
+ */
+int trace2_cmd_exit_fl(const char *file, int line, int code);
+#define exit(code) exit(trace2_cmd_exit_fl(__FILE__, __LINE__, (code)))
+
+/*
* You can mark a stack variable with UNLEAK(var) to avoid it being
* reported as a leak by tools like LSAN or valgrind. The argument
* should generally be the variable itself (not its address and not what
diff --git a/git-send-email.perl b/git-send-email.perl
index 8eb63b5..8200d58 100755
--- a/git-send-email.perl
+++ b/git-send-email.perl
@@ -465,6 +465,8 @@ $smtp_encryption = '' unless (defined $smtp_encryption);
my(%suppress_cc);
if (@suppress_cc) {
foreach my $entry (@suppress_cc) {
+ # Please update $__git_send_email_suppresscc_options
+ # in git-completion.bash when you add new options.
die sprintf(__("Unknown --suppress-cc field: '%s'\n"), $entry)
unless $entry =~ /^(?:all|cccmd|cc|author|self|sob|body|bodycc|misc-by)$/;
$suppress_cc{$entry} = 1;
@@ -494,6 +496,8 @@ my $confirm_unconfigured = !defined $confirm;
if ($confirm_unconfigured) {
$confirm = scalar %suppress_cc ? 'compose' : 'auto';
};
+# Please update $__git_send_email_confirm_options in
+# git-completion.bash when you add new options.
die sprintf(__("Unknown --confirm setting: '%s'\n"), $confirm)
unless $confirm =~ /^(?:auto|cc|compose|always|never)/;
@@ -587,6 +591,8 @@ my %parse_alias = (
if (/\(define-mail-alias\s+"(\S+?)"\s+"(\S+?)"\)/) {
$aliases{$1} = [ $2 ];
}}}
+ # Please update _git_config() in git-completion.bash when you
+ # add new MUAs.
);
if (@alias_files and $aliasfiletype and defined $parse_alias{$aliasfiletype}) {
diff --git a/git-submodule.sh b/git-submodule.sh
index b5f2bee..514ede2 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -5,7 +5,8 @@
# Copyright (c) 2007 Lars Hjemli
dashless=$(basename "$0" | sed -e 's/-/ /')
-USAGE="[--quiet] add [-b <branch>] [-f|--force] [--name <name>] [--reference <repository>] [--] <repository> [<path>]
+USAGE="[--quiet] [--cached]
+ or: $dashless [--quiet] add [-b <branch>] [-f|--force] [--name <name>] [--reference <repository>] [--] <repository> [<path>]
or: $dashless [--quiet] status [--cached] [--recursive] [--] [<path>...]
or: $dashless [--quiet] init [--] [<path>...]
or: $dashless [--quiet] deinit [-f|--force] (--all| [--] <path>...)
diff --git a/git.c b/git.c
index 2dd5886..2014aab 100644
--- a/git.c
+++ b/git.c
@@ -147,16 +147,20 @@ static int handle_options(const char ***argv, int *argc, int *envchanged)
git_set_exec_path(cmd + 1);
else {
puts(git_exec_path());
+ trace2_cmd_name("_query_");
exit(0);
}
} else if (!strcmp(cmd, "--html-path")) {
puts(system_path(GIT_HTML_PATH));
+ trace2_cmd_name("_query_");
exit(0);
} else if (!strcmp(cmd, "--man-path")) {
puts(system_path(GIT_MAN_PATH));
+ trace2_cmd_name("_query_");
exit(0);
} else if (!strcmp(cmd, "--info-path")) {
puts(system_path(GIT_INFO_PATH));
+ trace2_cmd_name("_query_");
exit(0);
} else if (!strcmp(cmd, "-p") || !strcmp(cmd, "--paginate")) {
use_pager = 1;
@@ -285,6 +289,7 @@ static int handle_options(const char ***argv, int *argc, int *envchanged)
(*argv)++;
(*argc)--;
} else if (skip_prefix(cmd, "--list-cmds=", &cmd)) {
+ trace2_cmd_name("_query_");
if (!strcmp(cmd, "parseopt")) {
struct string_list list = STRING_LIST_INIT_DUP;
int i;
@@ -332,9 +337,14 @@ static int handle_alias(int *argcp, const char ***argv)
commit_pager_choice();
child.use_shell = 1;
+ child.trace2_child_class = "shell_alias";
argv_array_push(&child.args, alias_string + 1);
argv_array_pushv(&child.args, (*argv) + 1);
+ trace2_cmd_alias(alias_command, child.args.argv);
+ trace2_cmd_list_config();
+ trace2_cmd_name("_run_shell_alias_");
+
ret = run_command(&child);
if (ret >= 0) /* normal exit */
exit(ret);
@@ -369,6 +379,9 @@ static int handle_alias(int *argcp, const char ***argv)
/* insert after command name */
memcpy(new_argv + count, *argv + 1, sizeof(char *) * *argcp);
+ trace2_cmd_alias(alias_command, new_argv);
+ trace2_cmd_list_config();
+
*argv = new_argv;
*argcp += count - 1;
@@ -417,6 +430,8 @@ static int run_builtin(struct cmd_struct *p, int argc, const char **argv)
setup_work_tree();
trace_argv_printf(argv, "trace: built-in: git");
+ trace2_cmd_name(p->cmd);
+ trace2_cmd_list_config();
validate_cache_entries(the_repository->index);
status = p->fn(argc, argv, prefix);
@@ -666,7 +681,14 @@ static void execv_dashed_external(const char **argv)
cmd.clean_on_exit = 1;
cmd.wait_after_clean = 1;
cmd.silent_exec_failure = 1;
+ cmd.trace2_child_class = "dashed";
+ trace2_cmd_name("_run_dashed_");
+
+ /*
+ * The code in run_command() logs trace2 child_start/child_exit
+ * events, so we do not need to report exec/exec_result events here.
+ */
trace_argv_printf(cmd.args.argv, "trace: exec:");
/*
@@ -676,6 +698,12 @@ static void execv_dashed_external(const char **argv)
* the program.
*/
status = run_command(&cmd);
+
+ /*
+ * If the child process ran and we are now going to exit, emit a
+ * generic string as our trace2 command verb to indicate that we
+ * launched a dashed command.
+ */
if (status >= 0)
exit(status);
else if (errno != ENOENT)
@@ -701,6 +729,43 @@ static int run_argv(int *argcp, const char ***argv)
if (!done_alias)
handle_builtin(*argcp, *argv);
+#if 0 // TODO In GFW, need to amend a7924b655e940b06cb547c235d6bed9767929673 to include trace2_ and _tr2 lines.
+ else if (get_builtin(**argv)) {
+ struct argv_array args = ARGV_ARRAY_INIT;
+ int i;
+
+ /*
+ * The current process is committed to launching a
+ * child process to run the command named in (**argv)
+ * and exiting. Log a generic string as the trace2
+ * command verb to indicate this. Note that the child
+ * process will log the actual verb when it runs.
+ */
+ trace2_cmd_name("_run_git_alias_");
+
+ if (get_super_prefix())
+ die("%s doesn't support --super-prefix", **argv);
+
+ commit_pager_choice();
+
+ argv_array_push(&args, "git");
+ for (i = 0; i < *argcp; i++)
+ argv_array_push(&args, (*argv)[i]);
+
+ trace_argv_printf(args.argv, "trace: exec:");
+
+ /*
+ * if we fail because the command is not found, it is
+ * OK to return. Otherwise, we just pass along the status code.
+ */
+ i = run_command_v_opt_tr2(args.argv, RUN_SILENT_EXEC_FAILURE |
+ RUN_CLEAN_ON_EXIT, "git_alias");
+ if (i >= 0 || errno != ENOENT)
+ exit(i);
+ die("could not execute builtin %s", **argv);
+ }
+#endif // a7924b655e940b06cb547c235d6bed9767929673
+
/* .. then try the external ones */
execv_dashed_external(*argv);
diff --git a/ident.c b/ident.c
index 33bcf40..9c2eb0a 100644
--- a/ident.c
+++ b/ident.c
@@ -11,6 +11,10 @@
static struct strbuf git_default_name = STRBUF_INIT;
static struct strbuf git_default_email = STRBUF_INIT;
static struct strbuf git_default_date = STRBUF_INIT;
+static struct strbuf git_author_name = STRBUF_INIT;
+static struct strbuf git_author_email = STRBUF_INIT;
+static struct strbuf git_committer_name = STRBUF_INIT;
+static struct strbuf git_committer_email = STRBUF_INIT;
static int default_email_is_bogus;
static int default_name_is_bogus;
@@ -355,7 +359,7 @@ N_("\n"
"\n");
const char *fmt_ident(const char *name, const char *email,
- const char *date_str, int flag)
+ enum want_ident whose_ident, const char *date_str, int flag)
{
static struct strbuf ident = STRBUF_INIT;
int strict = (flag & IDENT_STRICT);
@@ -363,6 +367,12 @@ const char *fmt_ident(const char *name, const char *email,
int want_name = !(flag & IDENT_NO_NAME);
if (!email) {
+ if (whose_ident == WANT_AUTHOR_IDENT && git_author_email.len)
+ email = git_author_email.buf;
+ else if (whose_ident == WANT_COMMITTER_IDENT && git_committer_email.len)
+ email = git_committer_email.buf;
+ }
+ if (!email) {
if (strict && ident_use_config_only
&& !(ident_config_given & IDENT_MAIL_GIVEN)) {
fputs(_(env_hint), stderr);
@@ -378,6 +388,13 @@ const char *fmt_ident(const char *name, const char *email,
if (want_name) {
int using_default = 0;
if (!name) {
+ if (whose_ident == WANT_AUTHOR_IDENT && git_author_name.len)
+ name = git_author_name.buf;
+ else if (whose_ident == WANT_COMMITTER_IDENT &&
+ git_committer_name.len)
+ name = git_committer_name.buf;
+ }
+ if (!name) {
if (strict && ident_use_config_only
&& !(ident_config_given & IDENT_NAME_GIVEN)) {
fputs(_(env_hint), stderr);
@@ -425,9 +442,25 @@ const char *fmt_ident(const char *name, const char *email,
return ident.buf;
}
-const char *fmt_name(const char *name, const char *email)
+const char *fmt_name(enum want_ident whose_ident)
{
- return fmt_ident(name, email, NULL, IDENT_STRICT | IDENT_NO_DATE);
+ char *name = NULL;
+ char *email = NULL;
+
+ switch (whose_ident) {
+ case WANT_BLANK_IDENT:
+ break;
+ case WANT_AUTHOR_IDENT:
+ name = getenv("GIT_AUTHOR_NAME");
+ email = getenv("GIT_AUTHOR_EMAIL");
+ break;
+ case WANT_COMMITTER_IDENT:
+ name = getenv("GIT_COMMITTER_NAME");
+ email = getenv("GIT_COMMITTER_EMAIL");
+ break;
+ }
+ return fmt_ident(name, email, whose_ident, NULL,
+ IDENT_STRICT | IDENT_NO_DATE);
}
const char *git_author_info(int flag)
@@ -438,6 +471,7 @@ const char *git_author_info(int flag)
author_ident_explicitly_given |= IDENT_MAIL_GIVEN;
return fmt_ident(getenv("GIT_AUTHOR_NAME"),
getenv("GIT_AUTHOR_EMAIL"),
+ WANT_AUTHOR_IDENT,
getenv("GIT_AUTHOR_DATE"),
flag);
}
@@ -450,6 +484,7 @@ const char *git_committer_info(int flag)
committer_ident_explicitly_given |= IDENT_MAIL_GIVEN;
return fmt_ident(getenv("GIT_COMMITTER_NAME"),
getenv("GIT_COMMITTER_EMAIL"),
+ WANT_COMMITTER_IDENT,
getenv("GIT_COMMITTER_DATE"),
flag);
}
@@ -473,10 +508,45 @@ int author_ident_sufficiently_given(void)
return ident_is_sufficient(author_ident_explicitly_given);
}
-int git_ident_config(const char *var, const char *value, void *data)
+static int set_ident(const char *var, const char *value)
{
- if (!strcmp(var, "user.useconfigonly")) {
- ident_use_config_only = git_config_bool(var, value);
+ if (!strcmp(var, "author.name")) {
+ if (!value)
+ return config_error_nonbool(var);
+ strbuf_reset(&git_author_name);
+ strbuf_addstr(&git_author_name, value);
+ author_ident_explicitly_given |= IDENT_NAME_GIVEN;
+ ident_config_given |= IDENT_NAME_GIVEN;
+ return 0;
+ }
+
+ if (!strcmp(var, "author.email")) {
+ if (!value)
+ return config_error_nonbool(var);
+ strbuf_reset(&git_author_email);
+ strbuf_addstr(&git_author_email, value);
+ author_ident_explicitly_given |= IDENT_MAIL_GIVEN;
+ ident_config_given |= IDENT_MAIL_GIVEN;
+ return 0;
+ }
+
+ if (!strcmp(var, "committer.name")) {
+ if (!value)
+ return config_error_nonbool(var);
+ strbuf_reset(&git_committer_name);
+ strbuf_addstr(&git_committer_name, value);
+ committer_ident_explicitly_given |= IDENT_NAME_GIVEN;
+ ident_config_given |= IDENT_NAME_GIVEN;
+ return 0;
+ }
+
+ if (!strcmp(var, "committer.email")) {
+ if (!value)
+ return config_error_nonbool(var);
+ strbuf_reset(&git_committer_email);
+ strbuf_addstr(&git_committer_email, value);
+ committer_ident_explicitly_given |= IDENT_MAIL_GIVEN;
+ ident_config_given |= IDENT_MAIL_GIVEN;
return 0;
}
@@ -505,6 +575,16 @@ int git_ident_config(const char *var, const char *value, void *data)
return 0;
}
+int git_ident_config(const char *var, const char *value, void *data)
+{
+ if (!strcmp(var, "user.useconfigonly")) {
+ ident_use_config_only = git_config_bool(var, value);
+ return 0;
+ }
+
+ return set_ident(var, value);
+}
+
static int buf_cmp(const char *a_begin, const char *a_end,
const char *b_begin, const char *b_end)
{
diff --git a/list-objects-filter-options.c b/list-objects-filter-options.c
index b71bd1f..c0036f7 100644
--- a/list-objects-filter-options.c
+++ b/list-objects-filter-options.c
@@ -82,6 +82,10 @@ static int gently_parse_list_objects_filter(
filter_options->sparse_path_value = strdup(v0);
return 0;
}
+ /*
+ * Please update _git_fetch() in git-completion.bash when you
+ * add new filters
+ */
if (errbuf)
strbuf_addf(errbuf, "invalid filter-spec '%s'", arg);
diff --git a/log-tree.c b/log-tree.c
index 3cb1425..1e56df6 100644
--- a/log-tree.c
+++ b/log-tree.c
@@ -687,8 +687,7 @@ void show_log(struct rev_info *opt)
*/
if (ctx.need_8bit_cte >= 0 && opt->add_signoff)
ctx.need_8bit_cte =
- has_non_ascii(fmt_name(getenv("GIT_COMMITTER_NAME"),
- getenv("GIT_COMMITTER_EMAIL")));
+ has_non_ascii(fmt_name(WANT_COMMITTER_IDENT));
ctx.date_mode = opt->date_mode;
ctx.date_mode_explicit = opt->date_mode_explicit;
ctx.abbrev = opt->diffopt.abbrev;
diff --git a/merge-recursive.c b/merge-recursive.c
index 4851825..6c40c61 100644
--- a/merge-recursive.c
+++ b/merge-recursive.c
@@ -1402,8 +1402,7 @@ static int merge_mode_and_contents(struct merge_options *o,
static int handle_rename_via_dir(struct merge_options *o,
struct diff_filepair *pair,
- const char *rename_branch,
- const char *other_branch)
+ const char *rename_branch)
{
/*
* Handle file adds that need to be renamed due to directory rename
@@ -2213,8 +2212,7 @@ static void handle_directory_level_conflicts(struct merge_options *o,
remove_hashmap_entries(dir_re_merge, &remove_from_merge);
}
-static struct hashmap *get_directory_renames(struct diff_queue_struct *pairs,
- struct tree *tree)
+static struct hashmap *get_directory_renames(struct diff_queue_struct *pairs)
{
struct hashmap *dir_renames;
struct hashmap_iter iter;
@@ -2460,8 +2458,7 @@ static void apply_directory_rename_modifications(struct merge_options *o,
struct tree *o_tree,
struct tree *a_tree,
struct tree *b_tree,
- struct string_list *entries,
- int *clean)
+ struct string_list *entries)
{
struct string_list_item *item;
int stage = (tree == a_tree ? 2 : 3);
@@ -2632,8 +2629,7 @@ static struct string_list *get_renames(struct merge_options *o,
apply_directory_rename_modifications(o, pair, new_path,
re, tree, o_tree,
a_tree, b_tree,
- entries,
- clean_merge);
+ entries);
}
hashmap_iter_init(&collisions, &iter);
@@ -2944,8 +2940,8 @@ static int detect_and_process_renames(struct merge_options *o,
merge_pairs = get_diffpairs(o, common, merge);
if (o->detect_directory_renames) {
- dir_re_head = get_directory_renames(head_pairs, head);
- dir_re_merge = get_directory_renames(merge_pairs, merge);
+ dir_re_head = get_directory_renames(head_pairs);
+ dir_re_merge = get_directory_renames(merge_pairs);
handle_directory_level_conflicts(o,
dir_re_head, head,
@@ -3268,8 +3264,7 @@ static int process_entry(struct merge_options *o,
clean_merge = 1;
if (handle_rename_via_dir(o,
conflict_info->pair1,
- conflict_info->branch1,
- conflict_info->branch2))
+ conflict_info->branch1))
clean_merge = -1;
break;
case RENAME_ADD:
@@ -3764,6 +3759,10 @@ int parse_merge_opt(struct merge_options *o, const char *s)
return -1;
o->merge_detect_rename = 1;
}
+ /*
+ * Please update $__git_merge_strategy_options in
+ * git-completion.bash when you add new options
+ */
else
return -1;
return 0;
diff --git a/pack-objects.c b/pack-objects.c
index e7cd337..ce33b89 100644
--- a/pack-objects.c
+++ b/pack-objects.c
@@ -119,8 +119,7 @@ static void prepare_in_pack_by_idx(struct packing_data *pdata)
* this fall back code, just stay simple and fall back to using
* in_pack[] array.
*/
-void oe_map_new_pack(struct packing_data *pack,
- struct packed_git *p)
+void oe_map_new_pack(struct packing_data *pack)
{
uint32_t i;
diff --git a/pack-objects.h b/pack-objects.h
index 6bfacc7..6fde7ce 100644
--- a/pack-objects.h
+++ b/pack-objects.h
@@ -247,14 +247,14 @@ static inline struct packed_git *oe_in_pack(const struct packing_data *pack,
return pack->in_pack[e - pack->objects];
}
-void oe_map_new_pack(struct packing_data *pack,
- struct packed_git *p);
+void oe_map_new_pack(struct packing_data *pack);
+
static inline void oe_set_in_pack(struct packing_data *pack,
struct object_entry *e,
struct packed_git *p)
{
if (!p->index)
- oe_map_new_pack(pack, p);
+ oe_map_new_pack(pack);
if (pack->in_pack_by_idx)
e->in_pack_idx = p->index;
else
diff --git a/pager.c b/pager.c
index a768797..4168460 100644
--- a/pager.c
+++ b/pager.c
@@ -100,6 +100,7 @@ void prepare_pager_args(struct child_process *pager_process, const char *pager)
argv_array_push(&pager_process->args, pager);
pager_process->use_shell = 1;
setup_pager_env(&pager_process->env_array);
+ pager_process->trace2_child_class = "pager";
}
void setup_pager(void)
diff --git a/parse-options-cb.c b/parse-options-cb.c
index e2f3eae..2733393 100644
--- a/parse-options-cb.c
+++ b/parse-options-cb.c
@@ -170,9 +170,12 @@ int parse_opt_noop_cb(const struct option *opt, const char *arg, int unset)
* "-h" output even if it's not being handled directly by
* parse_options().
*/
-int parse_opt_unknown_cb(const struct option *opt, const char *arg, int unset)
+enum parse_opt_result parse_opt_unknown_cb(struct parse_opt_ctx_t *ctx,
+ const struct option *opt,
+ const char *arg, int unset)
{
- return -2;
+ BUG_ON_OPT_ARG(arg);
+ return PARSE_OPT_UNKNOWN;
}
/**
diff --git a/parse-options.c b/parse-options.c
index 9f84bac..cec7452 100644
--- a/parse-options.c
+++ b/parse-options.c
@@ -20,8 +20,9 @@ int optbug(const struct option *opt, const char *reason)
return error("BUG: switch '%c' %s", opt->short_name, reason);
}
-static int get_arg(struct parse_opt_ctx_t *p, const struct option *opt,
- int flags, const char **arg)
+static enum parse_opt_result get_arg(struct parse_opt_ctx_t *p,
+ const struct option *opt,
+ int flags, const char **arg)
{
if (p->opt) {
*arg = p->opt;
@@ -44,9 +45,10 @@ static void fix_filename(const char *prefix, const char **file)
*file = prefix_filename(prefix, *file);
}
-static int opt_command_mode_error(const struct option *opt,
- const struct option *all_opts,
- int flags)
+static enum parse_opt_result opt_command_mode_error(
+ const struct option *opt,
+ const struct option *all_opts,
+ int flags)
{
const struct option *that;
struct strbuf that_name = STRBUF_INIT;
@@ -69,16 +71,16 @@ static int opt_command_mode_error(const struct option *opt,
error(_("%s is incompatible with %s"),
optname(opt, flags), that_name.buf);
strbuf_release(&that_name);
- return -1;
+ return PARSE_OPT_ERROR;
}
return error(_("%s : incompatible with something else"),
optname(opt, flags));
}
-static int get_value(struct parse_opt_ctx_t *p,
- const struct option *opt,
- const struct option *all_opts,
- int flags)
+static enum parse_opt_result get_value(struct parse_opt_ctx_t *p,
+ const struct option *opt,
+ const struct option *all_opts,
+ int flags)
{
const char *s, *arg;
const int unset = flags & OPT_UNSET;
@@ -93,7 +95,7 @@ static int get_value(struct parse_opt_ctx_t *p,
switch (opt->type) {
case OPTION_LOWLEVEL_CALLBACK:
- return (*(parse_opt_ll_cb *)opt->callback)(p, opt, unset);
+ return opt->ll_callback(p, opt, NULL, unset);
case OPTION_BIT:
if (unset)
@@ -109,6 +111,13 @@ static int get_value(struct parse_opt_ctx_t *p,
*(int *)opt->value &= ~opt->defval;
return 0;
+ case OPTION_BITOP:
+ if (unset)
+ BUG("BITOP can't have unset form");
+ *(int *)opt->value &= ~opt->extra;
+ *(int *)opt->value |= opt->defval;
+ return 0;
+
case OPTION_COUNTUP:
if (*(int *)opt->value < 0)
*(int *)opt->value = 0;
@@ -152,16 +161,27 @@ static int get_value(struct parse_opt_ctx_t *p,
return err;
case OPTION_CALLBACK:
+ {
+ const char *p_arg = NULL;
+ int p_unset;
+
if (unset)
- return (*opt->callback)(opt, NULL, 1) ? (-1) : 0;
- if (opt->flags & PARSE_OPT_NOARG)
- return (*opt->callback)(opt, NULL, 0) ? (-1) : 0;
- if (opt->flags & PARSE_OPT_OPTARG && !p->opt)
- return (*opt->callback)(opt, NULL, 0) ? (-1) : 0;
- if (get_arg(p, opt, flags, &arg))
+ p_unset = 1;
+ else if (opt->flags & PARSE_OPT_NOARG)
+ p_unset = 0;
+ else if (opt->flags & PARSE_OPT_OPTARG && !p->opt)
+ p_unset = 0;
+ else if (get_arg(p, opt, flags, &arg))
return -1;
- return (*opt->callback)(opt, arg, 0) ? (-1) : 0;
-
+ else {
+ p_unset = 0;
+ p_arg = arg;
+ }
+ if (opt->callback)
+ return (*opt->callback)(opt, p_arg, p_unset) ? (-1) : 0;
+ else
+ return (*opt->ll_callback)(p, opt, p_arg, p_unset);
+ }
case OPTION_INTEGER:
if (unset) {
*(int *)opt->value = 0;
@@ -201,7 +221,8 @@ static int get_value(struct parse_opt_ctx_t *p,
}
}
-static int parse_short_opt(struct parse_opt_ctx_t *p, const struct option *options)
+static enum parse_opt_result parse_short_opt(struct parse_opt_ctx_t *p,
+ const struct option *options)
{
const struct option *all_opts = options;
const struct option *numopt = NULL;
@@ -228,15 +249,19 @@ static int parse_short_opt(struct parse_opt_ctx_t *p, const struct option *optio
len++;
arg = xmemdupz(p->opt, len);
p->opt = p->opt[len] ? p->opt + len : NULL;
- rc = (*numopt->callback)(numopt, arg, 0) ? (-1) : 0;
+ if (numopt->callback)
+ rc = (*numopt->callback)(numopt, arg, 0) ? (-1) : 0;
+ else
+ rc = (*numopt->ll_callback)(p, numopt, arg, 0);
free(arg);
return rc;
}
- return -2;
+ return PARSE_OPT_UNKNOWN;
}
-static int parse_long_opt(struct parse_opt_ctx_t *p, const char *arg,
- const struct option *options)
+static enum parse_opt_result parse_long_opt(
+ struct parse_opt_ctx_t *p, const char *arg,
+ const struct option *options)
{
const struct option *all_opts = options;
const char *arg_end = strchrnul(arg, '=');
@@ -262,11 +287,12 @@ again:
if (*rest)
continue;
p->out[p->cpidx++] = arg - 2;
- return 0;
+ return PARSE_OPT_DONE;
}
if (!rest) {
/* abbreviated? */
- if (!strncmp(long_name, arg, arg_end - arg)) {
+ if (!(p->flags & PARSE_OPT_KEEP_UNKNOWN) &&
+ !strncmp(long_name, arg, arg_end - arg)) {
is_abbreviated:
if (abbrev_option) {
/*
@@ -326,11 +352,11 @@ is_abbreviated:
ambiguous_option->long_name,
(abbrev_flags & OPT_UNSET) ? "no-" : "",
abbrev_option->long_name);
- return -3;
+ return PARSE_OPT_HELP;
}
if (abbrev_option)
return get_value(p, abbrev_option, all_opts, abbrev_flags);
- return -2;
+ return PARSE_OPT_UNKNOWN;
}
static int parse_nodash_opt(struct parse_opt_ctx_t *p, const char *arg,
@@ -400,6 +426,19 @@ static void parse_options_check(const struct option *opts)
if ((opts->flags & PARSE_OPT_OPTARG) ||
!(opts->flags & PARSE_OPT_NOARG))
err |= optbug(opts, "should not accept an argument");
+ break;
+ case OPTION_CALLBACK:
+ if (!opts->callback && !opts->ll_callback)
+ BUG("OPTION_CALLBACK needs one callback");
+ if (opts->callback && opts->ll_callback)
+ BUG("OPTION_CALLBACK can't have two callbacks");
+ break;
+ case OPTION_LOWLEVEL_CALLBACK:
+ if (!opts->ll_callback)
+ BUG("OPTION_LOWLEVEL_CALLBACK needs a callback");
+ if (opts->callback)
+ BUG("OPTION_LOWLEVEL_CALLBACK needs no high level callback");
+ break;
default:
; /* ok. (usually accepts an argument) */
}
@@ -416,15 +455,24 @@ void parse_options_start(struct parse_opt_ctx_t *ctx,
const struct option *options, int flags)
{
memset(ctx, 0, sizeof(*ctx));
- ctx->argc = ctx->total = argc - 1;
- ctx->argv = argv + 1;
- ctx->out = argv;
+ ctx->argc = argc;
+ ctx->argv = argv;
+ if (!(flags & PARSE_OPT_ONE_SHOT)) {
+ ctx->argc--;
+ ctx->argv++;
+ }
+ ctx->total = ctx->argc;
+ ctx->out = argv;
ctx->prefix = prefix;
ctx->cpidx = ((flags & PARSE_OPT_KEEP_ARGV0) != 0);
ctx->flags = flags;
if ((flags & PARSE_OPT_KEEP_UNKNOWN) &&
- (flags & PARSE_OPT_STOP_AT_NON_OPTION))
+ (flags & PARSE_OPT_STOP_AT_NON_OPTION) &&
+ !(flags & PARSE_OPT_ONE_SHOT))
BUG("STOP_AT_NON_OPTION and KEEP_UNKNOWN don't go together");
+ if ((flags & PARSE_OPT_ONE_SHOT) &&
+ (flags & PARSE_OPT_KEEP_ARGV0))
+ BUG("Can't keep argv0 if you don't have it");
parse_options_check(options);
}
@@ -536,6 +584,10 @@ int parse_options_step(struct parse_opt_ctx_t *ctx,
for (; ctx->argc; ctx->argc--, ctx->argv++) {
const char *arg = ctx->argv[0];
+ if (ctx->flags & PARSE_OPT_ONE_SHOT &&
+ ctx->argc != ctx->total)
+ break;
+
if (*arg != '-' || !arg[1]) {
if (parse_nodash_opt(ctx, arg, options) == 0)
continue;
@@ -556,22 +608,28 @@ int parse_options_step(struct parse_opt_ctx_t *ctx,
if (arg[1] != '-') {
ctx->opt = arg + 1;
switch (parse_short_opt(ctx, options)) {
- case -1:
+ case PARSE_OPT_ERROR:
return PARSE_OPT_ERROR;
- case -2:
+ case PARSE_OPT_UNKNOWN:
if (ctx->opt)
check_typos(arg + 1, options);
if (internal_help && *ctx->opt == 'h')
goto show_usage;
goto unknown;
+ case PARSE_OPT_NON_OPTION:
+ case PARSE_OPT_HELP:
+ case PARSE_OPT_COMPLETE:
+ BUG("parse_short_opt() cannot return these");
+ case PARSE_OPT_DONE:
+ break;
}
if (ctx->opt)
check_typos(arg + 1, options);
while (ctx->opt) {
switch (parse_short_opt(ctx, options)) {
- case -1:
+ case PARSE_OPT_ERROR:
return PARSE_OPT_ERROR;
- case -2:
+ case PARSE_OPT_UNKNOWN:
if (internal_help && *ctx->opt == 'h')
goto show_usage;
@@ -583,6 +641,12 @@ int parse_options_step(struct parse_opt_ctx_t *ctx,
ctx->argv[0] = xstrdup(ctx->opt - 1);
*(char *)ctx->argv[0] = '-';
goto unknown;
+ case PARSE_OPT_NON_OPTION:
+ case PARSE_OPT_COMPLETE:
+ case PARSE_OPT_HELP:
+ BUG("parse_short_opt() cannot return these");
+ case PARSE_OPT_DONE:
+ break;
}
}
continue;
@@ -601,15 +665,22 @@ int parse_options_step(struct parse_opt_ctx_t *ctx,
if (internal_help && !strcmp(arg + 2, "help"))
goto show_usage;
switch (parse_long_opt(ctx, arg + 2, options)) {
- case -1:
+ case PARSE_OPT_ERROR:
return PARSE_OPT_ERROR;
- case -2:
+ case PARSE_OPT_UNKNOWN:
goto unknown;
- case -3:
+ case PARSE_OPT_HELP:
goto show_usage;
+ case PARSE_OPT_NON_OPTION:
+ case PARSE_OPT_COMPLETE:
+ BUG("parse_long_opt() cannot return these");
+ case PARSE_OPT_DONE:
+ break;
}
continue;
unknown:
+ if (ctx->flags & PARSE_OPT_ONE_SHOT)
+ break;
if (!(ctx->flags & PARSE_OPT_KEEP_UNKNOWN))
return PARSE_OPT_UNKNOWN;
ctx->out[ctx->cpidx++] = ctx->argv[0];
@@ -623,6 +694,9 @@ unknown:
int parse_options_end(struct parse_opt_ctx_t *ctx)
{
+ if (ctx->flags & PARSE_OPT_ONE_SHOT)
+ return ctx->total - ctx->argc;
+
MOVE_ARRAY(ctx->out + ctx->cpidx, ctx->argv, ctx->argc);
ctx->out[ctx->cpidx + ctx->argc] = NULL;
return ctx->cpidx + ctx->argc;
diff --git a/parse-options.h b/parse-options.h
index 14fe324..7d83e29 100644
--- a/parse-options.h
+++ b/parse-options.h
@@ -10,6 +10,7 @@ enum parse_opt_type {
/* options with no arguments */
OPTION_BIT,
OPTION_NEGBIT,
+ OPTION_BITOP,
OPTION_COUNTUP,
OPTION_SET_INT,
OPTION_CMDMODE,
@@ -27,7 +28,8 @@ enum parse_opt_flags {
PARSE_OPT_STOP_AT_NON_OPTION = 2,
PARSE_OPT_KEEP_ARGV0 = 4,
PARSE_OPT_KEEP_UNKNOWN = 8,
- PARSE_OPT_NO_INTERNAL_HELP = 16
+ PARSE_OPT_NO_INTERNAL_HELP = 16,
+ PARSE_OPT_ONE_SHOT = 32
};
enum parse_opt_option_flags {
@@ -47,8 +49,9 @@ struct option;
typedef int parse_opt_cb(const struct option *, const char *arg, int unset);
struct parse_opt_ctx_t;
-typedef int parse_opt_ll_cb(struct parse_opt_ctx_t *ctx,
- const struct option *opt, int unset);
+typedef enum parse_opt_result parse_opt_ll_cb(struct parse_opt_ctx_t *ctx,
+ const struct option *opt,
+ const char *arg, int unset);
/*
* `type`::
@@ -98,13 +101,16 @@ typedef int parse_opt_ll_cb(struct parse_opt_ctx_t *ctx,
* the option takes optional argument.
*
* `callback`::
- * pointer to the callback to use for OPTION_CALLBACK or
- * OPTION_LOWLEVEL_CALLBACK.
+ * pointer to the callback to use for OPTION_CALLBACK
*
* `defval`::
* default value to fill (*->value) with for PARSE_OPT_OPTARG.
* OPTION_{BIT,SET_INT} store the {mask,integer} to put in the value when met.
* CALLBACKS can use it like they want.
+ *
+ * `ll_callback`::
+ * pointer to the callback to use for OPTION_LOWLEVEL_CALLBACK
+ *
*/
struct option {
enum parse_opt_type type;
@@ -117,6 +123,8 @@ struct option {
int flags;
parse_opt_cb *callback;
intptr_t defval;
+ parse_opt_ll_cb *ll_callback;
+ intptr_t extra;
};
#define OPT_BIT_F(s, l, v, h, b, f) { OPTION_BIT, (s), (l), (v), NULL, (h), \
@@ -126,12 +134,17 @@ struct option {
#define OPT_SET_INT_F(s, l, v, h, i, f) { OPTION_SET_INT, (s), (l), (v), NULL, \
(h), PARSE_OPT_NOARG | (f), NULL, (i) }
#define OPT_BOOL_F(s, l, v, h, f) OPT_SET_INT_F(s, l, v, h, 1, f)
+#define OPT_CALLBACK_F(s, l, v, a, h, f, cb) \
+ { OPTION_CALLBACK, (s), (l), (v), (a), (h), (f), (cb) }
#define OPT_END() { OPTION_END }
#define OPT_ARGUMENT(l, h) { OPTION_ARGUMENT, 0, (l), NULL, NULL, \
(h), PARSE_OPT_NOARG}
#define OPT_GROUP(h) { OPTION_GROUP, 0, NULL, NULL, NULL, (h) }
#define OPT_BIT(s, l, v, h, b) OPT_BIT_F(s, l, v, h, b, 0)
+#define OPT_BITOP(s, l, v, h, set, clear) { OPTION_BITOP, (s), (l), (v), NULL, (h), \
+ PARSE_OPT_NOARG|PARSE_OPT_NONEG, NULL, \
+ (set), NULL, (clear) }
#define OPT_NEGBIT(s, l, v, h, b) { OPTION_NEGBIT, (s), (l), (v), NULL, \
(h), PARSE_OPT_NOARG, NULL, (b) }
#define OPT_COUNTUP(s, l, v, h) OPT_COUNTUP_F(s, l, v, h, 0)
@@ -153,8 +166,7 @@ struct option {
#define OPT_EXPIRY_DATE(s, l, v, h) \
{ OPTION_CALLBACK, (s), (l), (v), N_("expiry-date"),(h), 0, \
parse_opt_expiry_date_cb }
-#define OPT_CALLBACK(s, l, v, a, h, f) \
- { OPTION_CALLBACK, (s), (l), (v), (a), (h), 0, (f) }
+#define OPT_CALLBACK(s, l, v, a, h, f) OPT_CALLBACK_F(s, l, v, a, h, 0, f)
#define OPT_NUMBER_CALLBACK(v, h, f) \
{ OPTION_NUMBER, 0, NULL, (v), NULL, (h), \
PARSE_OPT_NOARG | PARSE_OPT_NONEG, (f) }
@@ -169,23 +181,31 @@ struct option {
N_("no-op (backward compatibility)"), \
PARSE_OPT_HIDDEN | PARSE_OPT_NOARG, parse_opt_noop_cb }
-/* parse_options() will filter out the processed options and leave the
- * non-option arguments in argv[]. usagestr strings should be marked
- * for translation with N_().
+/*
+ * parse_options() will filter out the processed options and leave the
+ * non-option arguments in argv[]. argv0 is assumed program name and
+ * skipped.
+ *
+ * usagestr strings should be marked for translation with N_().
+ *
* Returns the number of arguments left in argv[].
+ *
+ * In one-shot mode, argv0 is not a program name, argv[] is left
+ * untouched and parse_options() returns the number of options
+ * processed.
*/
-extern int parse_options(int argc, const char **argv, const char *prefix,
- const struct option *options,
- const char * const usagestr[], int flags);
+int parse_options(int argc, const char **argv, const char *prefix,
+ const struct option *options,
+ const char * const usagestr[], int flags);
-extern NORETURN void usage_with_options(const char * const *usagestr,
- const struct option *options);
+NORETURN void usage_with_options(const char * const *usagestr,
+ const struct option *options);
-extern NORETURN void usage_msg_opt(const char *msg,
- const char * const *usagestr,
- const struct option *options);
+NORETURN void usage_msg_opt(const char *msg,
+ const char * const *usagestr,
+ const struct option *options);
-extern int optbug(const struct option *opt, const char *reason);
+int optbug(const struct option *opt, const char *reason);
const char *optname(const struct option *opt, int flags);
/*
@@ -204,12 +224,12 @@ const char *optname(const struct option *opt, int flags);
/*----- incremental advanced APIs -----*/
-enum {
- PARSE_OPT_COMPLETE = -2,
- PARSE_OPT_HELP = -1,
- PARSE_OPT_DONE,
+enum parse_opt_result {
+ PARSE_OPT_COMPLETE = -3,
+ PARSE_OPT_HELP = -2,
+ PARSE_OPT_ERROR = -1, /* must be the same as error() */
+ PARSE_OPT_DONE = 0, /* fixed so that "return 0" works */
PARSE_OPT_NON_OPTION,
- PARSE_OPT_ERROR,
PARSE_OPT_UNKNOWN
};
@@ -227,31 +247,31 @@ struct parse_opt_ctx_t {
const char *prefix;
};
-extern void parse_options_start(struct parse_opt_ctx_t *ctx,
- int argc, const char **argv, const char *prefix,
- const struct option *options, int flags);
+void parse_options_start(struct parse_opt_ctx_t *ctx,
+ int argc, const char **argv, const char *prefix,
+ const struct option *options, int flags);
-extern int parse_options_step(struct parse_opt_ctx_t *ctx,
- const struct option *options,
- const char * const usagestr[]);
+int parse_options_step(struct parse_opt_ctx_t *ctx,
+ const struct option *options,
+ const char * const usagestr[]);
-extern int parse_options_end(struct parse_opt_ctx_t *ctx);
+int parse_options_end(struct parse_opt_ctx_t *ctx);
-extern struct option *parse_options_concat(struct option *a, struct option *b);
+struct option *parse_options_concat(struct option *a, struct option *b);
/*----- some often used options -----*/
-extern int parse_opt_abbrev_cb(const struct option *, const char *, int);
-extern int parse_opt_expiry_date_cb(const struct option *, const char *, int);
-extern int parse_opt_color_flag_cb(const struct option *, const char *, int);
-extern int parse_opt_verbosity_cb(const struct option *, const char *, int);
-extern int parse_opt_object_name(const struct option *, const char *, int);
-extern int parse_opt_commits(const struct option *, const char *, int);
-extern int parse_opt_tertiary(const struct option *, const char *, int);
-extern int parse_opt_string_list(const struct option *, const char *, int);
-extern int parse_opt_noop_cb(const struct option *, const char *, int);
-extern int parse_opt_unknown_cb(const struct option *, const char *, int);
-extern int parse_opt_passthru(const struct option *, const char *, int);
-extern int parse_opt_passthru_argv(const struct option *, const char *, int);
+int parse_opt_abbrev_cb(const struct option *, const char *, int);
+int parse_opt_expiry_date_cb(const struct option *, const char *, int);
+int parse_opt_color_flag_cb(const struct option *, const char *, int);
+int parse_opt_verbosity_cb(const struct option *, const char *, int);
+int parse_opt_object_name(const struct option *, const char *, int);
+int parse_opt_commits(const struct option *, const char *, int);
+int parse_opt_tertiary(const struct option *, const char *, int);
+int parse_opt_string_list(const struct option *, const char *, int);
+int parse_opt_noop_cb(const struct option *, const char *, int);
+int parse_opt_unknown_cb(struct parse_opt_ctx_t *ctx, const struct option *, const char *, int);
+int parse_opt_passthru(const struct option *, const char *, int);
+int parse_opt_passthru_argv(const struct option *, const char *, int);
#define OPT__VERBOSE(var, h) OPT_COUNTUP('v', "verbose", (var), (h))
#define OPT__QUIET(var, h) OPT_COUNTUP('q', "quiet", (var), (h))
diff --git a/po/TEAMS b/po/TEAMS
index d8f7a2b..9414509 100644
--- a/po/TEAMS
+++ b/po/TEAMS
@@ -16,6 +16,10 @@ Leader: Ralf Thielow <ralf.thielow@gmail.com>
Members: Matthias Rüster <matthias.ruester@gmail.com>
Phillip Szelat <phillip.szelat@gmail.com>
+Language: el (Greek)
+Repository: https://github.com/vyruss/git-po-el
+Leader: Jimmy Angelakos <vyruss@hellug.gr>
+
Language: es (Spanish)
Repository: https://github.com/ChrisADR/git-po
Leader: Christopher Díaz <christopher.diaz.riv@gmail.com>
@@ -29,9 +33,8 @@ Language: is (Icelandic)
Leader: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Language: it (Italian)
-Repository: https://github.com/quizzlo/git-po-it/
-Leader: Marco Paolone <marcopaolone AT gmail.com>
-Members: Stefano Lattarini <stefano.lattarini AT gmail.com>
+Repository: https://github.com/AlessandroMenti/git-po
+Leader: Alessandro Menti <alessandro.menti@alessandromenti.it>
Language: ko (Korean)
Repository: https://github.com/git-l10n-ko/git-l10n-ko/
diff --git a/po/bg.po b/po/bg.po
index 814d40a..26c66ca 100644
--- a/po/bg.po
+++ b/po/bg.po
@@ -1,7 +1,7 @@
# Bulgarian translation of git po-file.
-# Copyright (C) 2014, 2015, 2016, 2017, 2018 Alexander Shopov <ash@kambanaria.org>.
+# Copyright (C) 2014, 2015, 2016, 2017, 2018, 2019 Alexander Shopov <ash@kambanaria.org>.
# This file is distributed under the same license as the git package.
-# Alexander Shopov <ash@kambanaria.org>, 2014, 2015, 2016, 2017, 2018.
+# Alexander Shopov <ash@kambanaria.org>, 2014, 2015, 2016, 2017, 2018, 2019.
#
# ========================
# DICTIONARY TO MERGE IN GIT GUI
@@ -127,6 +127,8 @@
# ssl backend реализация на SSL
# delta island група разлики
# island marks граници на групите
+# reflog журнал на указателите
+# hash контролна сума, изчисляване на контролна сума
# ------------------------
# „$var“ - може да не сработва за shell има gettext и eval_gettext - проверка - намират се лесно по „$
# ------------------------
@@ -145,8 +147,8 @@ msgid ""
msgstr ""
"Project-Id-Version: git 2.20\n"
"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2018-12-02 10:55+0800\n"
-"PO-Revision-Date: 2018-12-02 13:41+0100\n"
+"POT-Creation-Date: 2019-02-15 10:09+0800\n"
+"PO-Revision-Date: 2019-02-23 23:27+0200\n"
"Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
"Language-Team: Bulgarian <dict@fsa-bg.org>\n"
"Language: bg\n"
@@ -155,37 +157,37 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: advice.c:99
+#: advice.c:101
#, c-format
msgid "%shint: %.*s%s\n"
msgstr "%sподсказка: %.*s%s\n"
-#: advice.c:152
+#: advice.c:154
msgid "Cherry-picking is not possible because you have unmerged files."
msgstr "Отбирането на подавания е блокирано от неслети файлове."
-#: advice.c:154
+#: advice.c:156
msgid "Committing is not possible because you have unmerged files."
msgstr "Подаването е блокирано от неслети файлове."
-#: advice.c:156
+#: advice.c:158
msgid "Merging is not possible because you have unmerged files."
msgstr "Сливането е блокирано от неслети файлове."
-#: advice.c:158
+#: advice.c:160
msgid "Pulling is not possible because you have unmerged files."
msgstr "Издърпването е блокирано от неслети файлове."
-#: advice.c:160
+#: advice.c:162
msgid "Reverting is not possible because you have unmerged files."
msgstr "Отмяната е блокирана от неслети файлове."
-#: advice.c:162
+#: advice.c:164
#, c-format
msgid "It is not possible to %s because you have unmerged files."
msgstr "Действието „%s“ е блокирано от неслети файлове."
-#: advice.c:170
+#: advice.c:172
msgid ""
"Fix them up in the work tree, and then use 'git add/rm <file>'\n"
"as appropriate to mark resolution and make a commit."
@@ -193,23 +195,23 @@ msgstr ""
"Редактирайте ги в работното дърво, и тогава ползвайте „git add/rm ФАЙЛ“,\n"
"за да отбележите коригирането им. След това извършете подаването."
-#: advice.c:178
+#: advice.c:180
msgid "Exiting because of an unresolved conflict."
msgstr "Изход от програмата заради некоригиран конфликт."
-#: advice.c:183 builtin/merge.c:1289
+#: advice.c:185 builtin/merge.c:1290
msgid "You have not concluded your merge (MERGE_HEAD exists)."
msgstr "Не сте завършили сливане. (Указателят „MERGE_HEAD“ съществува)."
-#: advice.c:185
+#: advice.c:187
msgid "Please, commit your changes before merging."
msgstr "Промените трябва да се подадат преди сливане."
-#: advice.c:186
+#: advice.c:188
msgid "Exiting because of unfinished merge."
msgstr "Изход от програмата заради незавършено сливане."
-#: advice.c:192
+#: advice.c:194
#, c-format
msgid ""
"Note: checking out '%s'.\n"
@@ -238,6 +240,14 @@ msgstr ""
" git checkout -b ИМЕ_НА_НОВ_КЛОН\n"
"\n"
+#: alias.c:50
+msgid "cmdline ends with \\"
+msgstr "командният ред завършва с „/“"
+
+#: alias.c:51
+msgid "unclosed quote"
+msgstr "кавичка без еш"
+
#: apply.c:59
#, c-format
msgid "unrecognized whitespace option '%s'"
@@ -268,70 +278,70 @@ msgstr "като „--index“, но извън хранилище"
msgid "--cached outside a repository"
msgstr "като „--cached“, но извън хранилище"
-#: apply.c:826
+#: apply.c:825
#, c-format
msgid "Cannot prepare timestamp regexp %s"
msgstr "Регулярният израз за времето „%s“ не може за бъде компилиран"
-#: apply.c:835
+#: apply.c:834
#, c-format
msgid "regexec returned %d for input: %s"
msgstr "Регулярният израз върна %d при подадена последователност „%s“ на входа"
-#: apply.c:909
+#: apply.c:908
#, c-format
msgid "unable to find filename in patch at line %d"
msgstr "Липсва име на файл на ред %d от кръпката"
-#: apply.c:947
+#: apply.c:946
#, c-format
msgid "git apply: bad git-diff - expected /dev/null, got %s on line %d"
msgstr ""
"git apply: лош изход от командата „git-diff“ — на ред %2$d се очакваше „/dev/"
"null“, а бе получен „%1$s“"
-#: apply.c:953
+#: apply.c:952
#, c-format
msgid "git apply: bad git-diff - inconsistent new filename on line %d"
msgstr ""
"git apply: лош изход от командата „git-diff“ — на ред %d бе получено "
"неправилно име на нов файл"
-#: apply.c:954
+#: apply.c:953
#, c-format
msgid "git apply: bad git-diff - inconsistent old filename on line %d"
msgstr ""
"git apply: лош изход от командата „git-diff“ — на ред %d бе получено "
"неправилно име на стар файл"
-#: apply.c:959
+#: apply.c:958
#, c-format
msgid "git apply: bad git-diff - expected /dev/null on line %d"
msgstr ""
"git apply: лош изход от командата „git-diff“ — на ред %d се очакваше „/dev/"
"null“"
-#: apply.c:988
+#: apply.c:987
#, c-format
msgid "invalid mode on line %d: %s"
msgstr "грешен режим на ред №%d: %s"
-#: apply.c:1307
+#: apply.c:1306
#, c-format
msgid "inconsistent header lines %d and %d"
msgstr "несъвместими заглавни части на редове №%d и №%d"
-#: apply.c:1479
+#: apply.c:1478
#, c-format
msgid "recount: unexpected line: %.*s"
msgstr "при повторното преброяване бе получен неочакван ред: „%.*s“"
-#: apply.c:1548
+#: apply.c:1547
#, c-format
msgid "patch fragment without header at line %d: %.*s"
msgstr "част от кръпка без заглавна част на ред %d: %.*s"
-#: apply.c:1568
+#: apply.c:1567
#, c-format
msgid ""
"git diff header lacks filename information when removing %d leading pathname "
@@ -346,71 +356,71 @@ msgstr[1] ""
"След съкращаването на първите %d части от компонентите на пътя, в заглавната "
"част на „git diff“ липсва информация за име на файл (ред: %d)"
-#: apply.c:1581
+#: apply.c:1580
#, c-format
msgid "git diff header lacks filename information (line %d)"
msgstr ""
"в заглавната част на „git diff“ липсва информация за име на файл (ред: %d)"
-#: apply.c:1769
+#: apply.c:1768
msgid "new file depends on old contents"
msgstr "новият файл зависи от старото съдържание на файла"
-#: apply.c:1771
+#: apply.c:1770
msgid "deleted file still has contents"
msgstr "изтритият файл не е празен"
-#: apply.c:1805
+#: apply.c:1804
#, c-format
msgid "corrupt patch at line %d"
msgstr "грешка в кръпката на ред %d"
-#: apply.c:1842
+#: apply.c:1841
#, c-format
msgid "new file %s depends on old contents"
msgstr "новият файл „%s“ зависи от старото съдържание на файла"
-#: apply.c:1844
+#: apply.c:1843
#, c-format
msgid "deleted file %s still has contents"
msgstr "изтритият файл „%s“ не е празен"
-#: apply.c:1847
+#: apply.c:1846
#, c-format
msgid "** warning: file %s becomes empty but is not deleted"
msgstr "● предупреждение: файлът „%s“ вече е празен, но не е изтрит"
-#: apply.c:1994
+#: apply.c:1993
#, c-format
msgid "corrupt binary patch at line %d: %.*s"
msgstr "грешка в двоичната кръпка на ред %d: %.*s"
-#: apply.c:2031
+#: apply.c:2030
#, c-format
msgid "unrecognized binary patch at line %d"
msgstr "неразпозната двоичната кръпка на ред %d"
-#: apply.c:2193
+#: apply.c:2192
#, c-format
msgid "patch with only garbage at line %d"
msgstr "кръпката е с изцяло повредени данни на ред %d"
-#: apply.c:2279
+#: apply.c:2278
#, c-format
msgid "unable to read symlink %s"
msgstr "символната връзка „%s“ не може да бъде прочетена"
-#: apply.c:2283
+#: apply.c:2282
#, c-format
msgid "unable to open or read %s"
msgstr "файлът „%s“ не може да бъде отворен или прочетен"
-#: apply.c:2942
+#: apply.c:2941
#, c-format
msgid "invalid start of line: '%c'"
msgstr "неправилно начало на ред: „%c“"
-#: apply.c:3063
+#: apply.c:3062
#, c-format
msgid "Hunk #%d succeeded at %d (offset %d line)."
msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
@@ -419,13 +429,13 @@ msgstr[0] ""
msgstr[1] ""
"%d-то парче код бе успешно приложено на ред %d (отместване от %d реда)."
-#: apply.c:3075
+#: apply.c:3074
#, c-format
msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
msgstr ""
"Контекстът е намален на (%ld/%ld) за прилагането на парчето код на ред %d"
-#: apply.c:3081
+#: apply.c:3080
#, c-format
msgid ""
"while searching for:\n"
@@ -434,54 +444,54 @@ msgstr ""
"при търсене за:\n"
"%.*s"
-#: apply.c:3103
+#: apply.c:3102
#, c-format
msgid "missing binary patch data for '%s'"
msgstr "липсват данните за двоичната кръпка за „%s“"
-#: apply.c:3111
+#: apply.c:3110
#, c-format
msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
msgstr ""
"двоичната кръпка не може да се приложи в обратна посока, когато обратното "
"парче за „%s“ липсва"
-#: apply.c:3158
+#: apply.c:3157
#, c-format
msgid "cannot apply binary patch to '%s' without full index line"
msgstr "към „%s“ не може да се приложи двоична кръпка без пълен индекс"
-#: apply.c:3168
+#: apply.c:3167
#, c-format
msgid ""
"the patch applies to '%s' (%s), which does not match the current contents."
msgstr "кръпката съответства на „%s“ (%s), който не съвпада по съдържание."
-#: apply.c:3176
+#: apply.c:3175
#, c-format
msgid "the patch applies to an empty '%s' but it is not empty"
msgstr "кръпката съответства на „%s“, който трябва да е празен, но не е"
-#: apply.c:3194
+#: apply.c:3193
#, c-format
msgid "the necessary postimage %s for '%s' cannot be read"
msgstr ""
"необходимият резултат след операцията — „%s“ за „%s“ не може да бъде "
"прочетен"
-#: apply.c:3207
+#: apply.c:3206
#, c-format
msgid "binary patch does not apply to '%s'"
msgstr "двоичната кръпка не може да бъде приложена върху „%s“"
-#: apply.c:3213
+#: apply.c:3212
#, c-format
msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
msgstr ""
"двоичната кръпка за „%s“ води до неправилни резултати (очакваше се: „%s“, а "
"бе получено: „%s“)"
-#: apply.c:3234
+#: apply.c:3233
#, c-format
msgid "patch failed: %s:%ld"
msgstr "неуспешно прилагане на кръпка: „%s:%ld“"
@@ -561,7 +571,8 @@ msgstr "„%s“: неправилен вид"
msgid "%s has type %o, expected %o"
msgstr "„%s“ е от вид „%o“, а се очакваше „%o“"
-#: apply.c:3881 apply.c:3883
+#: apply.c:3881 apply.c:3883 read-cache.c:820 read-cache.c:846
+#: read-cache.c:1299
#, c-format
msgid "invalid path '%s'"
msgstr "неправилен път: „%s“"
@@ -618,7 +629,7 @@ msgstr "смяна на режима на достъпа на „%s“, койт
msgid "sha1 information is lacking or useless (%s)."
msgstr "информацията за сумата по SHA1 липсва или не е достатъчна (%s)."
-#: apply.c:4113 builtin/checkout.c:244 builtin/reset.c:142
+#: apply.c:4113 builtin/checkout.c:248 builtin/reset.c:143
#, c-format
msgid "make_cache_entry failed for path '%s'"
msgstr "неуспешно създаване на запис в кеша чрез „make_cache_entry“ за „%s“"
@@ -696,7 +707,7 @@ msgstr[1] "Прилагане на кръпката „%%s“ с %d отхвър
msgid "truncating .rej filename to %.*s.rej"
msgstr "съкращаване на името на файла с отхвърлените парчета на „ %.*s.rej“"
-#: apply.c:4564 builtin/fetch.c:843 builtin/fetch.c:1122
+#: apply.c:4564 builtin/fetch.c:837 builtin/fetch.c:1118
#, c-format
msgid "cannot open %s"
msgstr "„%s“ не може да бъде отворен"
@@ -720,30 +731,30 @@ msgstr "Пропусната кръпка: „%s“"
msgid "unrecognized input"
msgstr "непознат вход"
-#: apply.c:4719
+#: apply.c:4720
msgid "unable to read index file"
msgstr "индексът не може да бъде записан"
-#: apply.c:4874
+#: apply.c:4875
#, c-format
msgid "can't open patch '%s': %s"
msgstr "кръпката „%s“ не може да бъде отворена: %s"
-#: apply.c:4901
+#: apply.c:4902
#, c-format
msgid "squelched %d whitespace error"
msgid_plural "squelched %d whitespace errors"
msgstr[0] "пренебрегната е %d грешка в знаците за интервали"
msgstr[1] "пренебрегнати са %d грешки в знаците за интервали"
-#: apply.c:4907 apply.c:4922
+#: apply.c:4908 apply.c:4923
#, c-format
msgid "%d line adds whitespace errors."
msgid_plural "%d lines add whitespace errors."
msgstr[0] "%d ред добавя грешки в знаците за интервали."
msgstr[1] "%d реда добавят грешки в знаците за интервали."
-#: apply.c:4915
+#: apply.c:4916
#, c-format
msgid "%d line applied after fixing whitespace errors."
msgid_plural "%d lines applied after fixing whitespace errors."
@@ -752,145 +763,145 @@ msgstr[0] ""
msgstr[1] ""
"Добавени са %d реда след корекцията на грешките в знаците за интервали."
-#: apply.c:4931 builtin/add.c:538 builtin/mv.c:300 builtin/rm.c:389
+#: apply.c:4932 builtin/add.c:539 builtin/mv.c:301 builtin/rm.c:390
msgid "Unable to write new index file"
msgstr "Новият индекс не може да бъде записан"
-#: apply.c:4958 apply.c:4961 builtin/am.c:2209 builtin/am.c:2212
-#: builtin/clone.c:121 builtin/fetch.c:118 builtin/merge.c:262
-#: builtin/pull.c:199 builtin/submodule--helper.c:406
-#: builtin/submodule--helper.c:1362 builtin/submodule--helper.c:1365
-#: builtin/submodule--helper.c:1846 builtin/submodule--helper.c:1849
-#: builtin/submodule--helper.c:2088 git-add--interactive.perl:197
+#: apply.c:4959 apply.c:4962 builtin/am.c:2203 builtin/am.c:2206
+#: builtin/clone.c:122 builtin/fetch.c:118 builtin/merge.c:263
+#: builtin/pull.c:200 builtin/submodule--helper.c:407
+#: builtin/submodule--helper.c:1366 builtin/submodule--helper.c:1369
+#: builtin/submodule--helper.c:1850 builtin/submodule--helper.c:1853
+#: builtin/submodule--helper.c:2092 git-add--interactive.perl:197
msgid "path"
msgstr "път"
-#: apply.c:4959
+#: apply.c:4960
msgid "don't apply changes matching the given path"
msgstr "без прилагане на промените напасващи на дадения път"
-#: apply.c:4962
+#: apply.c:4963
msgid "apply changes matching the given path"
msgstr "прилагане на промените напасващи на дадения път"
-#: apply.c:4964 builtin/am.c:2218
+#: apply.c:4965 builtin/am.c:2212
msgid "num"
msgstr "БРОЙ"
-#: apply.c:4965
+#: apply.c:4966
msgid "remove <num> leading slashes from traditional diff paths"
msgstr "премахване на този БРОЙ водещи елементи от пътищата в разликата"
-#: apply.c:4968
+#: apply.c:4969
msgid "ignore additions made by the patch"
msgstr "игнориране на редовете добавени от тази кръпка"
-#: apply.c:4970
+#: apply.c:4971
msgid "instead of applying the patch, output diffstat for the input"
msgstr "извеждане на статистика на промените без прилагане на кръпката"
-#: apply.c:4974
+#: apply.c:4975
msgid "show number of added and deleted lines in decimal notation"
msgstr "извеждане на броя на добавените и изтритите редове"
-#: apply.c:4976
+#: apply.c:4977
msgid "instead of applying the patch, output a summary for the input"
msgstr "извеждане на статистика на входните данни без прилагане на кръпката"
-#: apply.c:4978
+#: apply.c:4979
msgid "instead of applying the patch, see if the patch is applicable"
msgstr "проверка дали кръпката може да се приложи, без действително прилагане"
-#: apply.c:4980
+#: apply.c:4981
msgid "make sure the patch is applicable to the current index"
msgstr "проверка дали кръпката може да бъде приложена към текущия индекс"
-#: apply.c:4982
+#: apply.c:4983
msgid "mark new files with `git add --intent-to-add`"
msgstr "отбелязване на новите файлове с „git add --intent-to-add“"
-#: apply.c:4984
+#: apply.c:4985
msgid "apply a patch without touching the working tree"
msgstr "прилагане на кръпката без промяна на работното дърво"
-#: apply.c:4986
+#: apply.c:4987
msgid "accept a patch that touches outside the working area"
msgstr "прилагане на кръпка, която променя и файлове извън работното дърво"
-#: apply.c:4989
+#: apply.c:4990
msgid "also apply the patch (use with --stat/--summary/--check)"
msgstr ""
"кръпката да бъде приложена. Опцията се комбинира с „--check“/„--stat“/„--"
"summary“"
-#: apply.c:4991
+#: apply.c:4992
msgid "attempt three-way merge if a patch does not apply"
msgstr "пробване с тройно сливане, ако кръпката не може да се приложи директно"
-#: apply.c:4993
+#: apply.c:4994
msgid "build a temporary index based on embedded index information"
msgstr ""
"създаване на временен индекс на база на включената информация за индекса"
-#: apply.c:4996 builtin/checkout-index.c:170 builtin/ls-files.c:523
+#: apply.c:4997 builtin/checkout-index.c:173 builtin/ls-files.c:524
msgid "paths are separated with NUL character"
msgstr "разделяне на пътищата с нулевия знак „NUL“"
-#: apply.c:4998
+#: apply.c:4999
msgid "ensure at least <n> lines of context match"
msgstr "да се осигури контекст от поне такъв БРОЙ съвпадащи редове"
-#: apply.c:4999 builtin/am.c:2197 builtin/interpret-trailers.c:97
+#: apply.c:5000 builtin/am.c:2191 builtin/interpret-trailers.c:97
#: builtin/interpret-trailers.c:99 builtin/interpret-trailers.c:101
-#: builtin/pack-objects.c:3312 builtin/rebase.c:857
+#: builtin/pack-objects.c:3314 builtin/rebase.c:1065
msgid "action"
msgstr "действие"
-#: apply.c:5000
+#: apply.c:5001
msgid "detect new or modified lines that have whitespace errors"
msgstr "засичане на нови или променени редове с грешки в знаците за интервали"
-#: apply.c:5003 apply.c:5006
+#: apply.c:5004 apply.c:5007
msgid "ignore changes in whitespace when finding context"
msgstr ""
"игнориране на промените в знаците за интервали при откриване на контекста"
-#: apply.c:5009
+#: apply.c:5010
msgid "apply the patch in reverse"
msgstr "прилагане на кръпката в обратна посока"
-#: apply.c:5011
+#: apply.c:5012
msgid "don't expect at least one line of context"
msgstr "без изискване на дори и един ред контекст"
-#: apply.c:5013
+#: apply.c:5014
msgid "leave the rejected hunks in corresponding *.rej files"
msgstr "оставяне на отхвърлените парчета във файлове с разширение „.rej“"
-#: apply.c:5015
+#: apply.c:5016
msgid "allow overlapping hunks"
msgstr "позволяване на застъпващи се парчета"
-#: apply.c:5016 builtin/add.c:290 builtin/check-ignore.c:21
-#: builtin/commit.c:1309 builtin/count-objects.c:98 builtin/fsck.c:698
-#: builtin/log.c:2023 builtin/mv.c:122 builtin/read-tree.c:127
-#: builtin/rebase--interactive.c:157
+#: apply.c:5017 builtin/add.c:291 builtin/check-ignore.c:22
+#: builtin/commit.c:1312 builtin/count-objects.c:98 builtin/fsck.c:724
+#: builtin/log.c:2037 builtin/mv.c:123 builtin/read-tree.c:128
+#: builtin/rebase--interactive.c:159
msgid "be verbose"
msgstr "повече подробности"
-#: apply.c:5018
+#: apply.c:5019
msgid "tolerate incorrectly detected missing new-line at the end of file"
msgstr "пренебрегване на неправилно липсващ знак за нов ред в края на файл"
-#: apply.c:5021
+#: apply.c:5022
msgid "do not trust the line counts in the hunk headers"
msgstr "без доверяване на номерата на редовете в заглавните части на парчетата"
-#: apply.c:5023 builtin/am.c:2206
+#: apply.c:5024 builtin/am.c:2200
msgid "root"
msgstr "НАЧАЛНА_ДИРЕКТОРИЯ"
-#: apply.c:5024
+#: apply.c:5025
msgid "prepend <root> to all filenames"
msgstr "добавяне на тази НАЧАЛНА_ДИРЕКТОРИЯ към имената на всички файлове"
@@ -913,99 +924,118 @@ msgstr ""
msgid "git archive --remote <repo> [--exec <cmd>] --list"
msgstr "git archive --remote ХРАНИЛИЩЕ [--exec КОМАНДА] --list"
-#: archive.c:370 builtin/add.c:176 builtin/add.c:514 builtin/rm.c:298
+#: archive.c:372 builtin/add.c:177 builtin/add.c:515 builtin/rm.c:299
#, c-format
msgid "pathspec '%s' did not match any files"
msgstr "пътят „%s“ не съвпада с никой файл"
-#: archive.c:453
+#: archive.c:396
+#, c-format
+msgid "no such ref: %.*s"
+msgstr "такъв указател няма: %.*s"
+
+#: archive.c:401
+#, c-format
+msgid "not a valid object name: %s"
+msgstr "неправилно име на обект: „%s“"
+
+#: archive.c:414
+#, c-format
+msgid "not a tree object: %s"
+msgstr "не е обект-дърво: %s"
+
+#: archive.c:424
+msgid "current working directory is untracked"
+msgstr "текущата работна директория не е следена"
+
+#: archive.c:455
msgid "fmt"
msgstr "ФОРМАТ"
-#: archive.c:453
+#: archive.c:455
msgid "archive format"
msgstr "ФОРМАТ на архива"
-#: archive.c:454 builtin/log.c:1536
+#: archive.c:456 builtin/log.c:1549
msgid "prefix"
msgstr "ПРЕФИКС"
-#: archive.c:455
+#: archive.c:457
msgid "prepend prefix to each pathname in the archive"
msgstr "добавяне на този ПРЕФИКС към всеки път в архива"
-#: archive.c:456 builtin/blame.c:820 builtin/blame.c:821 builtin/config.c:129
-#: builtin/fast-export.c:1013 builtin/fast-export.c:1015 builtin/grep.c:884
-#: builtin/hash-object.c:104 builtin/ls-files.c:559 builtin/ls-files.c:562
-#: builtin/notes.c:412 builtin/notes.c:575 builtin/read-tree.c:122
+#: archive.c:458 builtin/blame.c:820 builtin/blame.c:821 builtin/config.c:129
+#: builtin/fast-export.c:1091 builtin/fast-export.c:1093 builtin/grep.c:895
+#: builtin/hash-object.c:105 builtin/ls-files.c:560 builtin/ls-files.c:563
+#: builtin/notes.c:412 builtin/notes.c:578 builtin/read-tree.c:123
#: parse-options.h:162
msgid "file"
msgstr "ФАЙЛ"
-#: archive.c:457 builtin/archive.c:89
+#: archive.c:459 builtin/archive.c:90
msgid "write the archive to this file"
msgstr "запазване на архива в този ФАЙЛ"
-#: archive.c:459
+#: archive.c:461
msgid "read .gitattributes in working directory"
msgstr "изчитане на „.gitattributes“ в работната директория"
-#: archive.c:460
+#: archive.c:462
msgid "report archived files on stderr"
msgstr "извеждане на архивираните файлове на стандартната грешка"
-#: archive.c:461
+#: archive.c:463
msgid "store only"
msgstr "само съхранение без компресиране"
-#: archive.c:462
+#: archive.c:464
msgid "compress faster"
msgstr "бързо компресиране"
-#: archive.c:470
+#: archive.c:472
msgid "compress better"
msgstr "добро компресиране"
-#: archive.c:473
+#: archive.c:475
msgid "list supported archive formats"
msgstr "извеждане на списъка с поддържаните формати"
-#: archive.c:475 builtin/archive.c:90 builtin/clone.c:111 builtin/clone.c:114
-#: builtin/submodule--helper.c:1374 builtin/submodule--helper.c:1855
+#: archive.c:477 builtin/archive.c:91 builtin/clone.c:112 builtin/clone.c:115
+#: builtin/submodule--helper.c:1378 builtin/submodule--helper.c:1859
msgid "repo"
msgstr "хранилище"
-#: archive.c:476 builtin/archive.c:91
+#: archive.c:478 builtin/archive.c:92
msgid "retrieve the archive from remote repository <repo>"
msgstr "изтегляне на архива от отдалеченото ХРАНИЛИЩЕ"
-#: archive.c:477 builtin/archive.c:92 builtin/difftool.c:714
-#: builtin/notes.c:496
+#: archive.c:479 builtin/archive.c:93 builtin/difftool.c:715
+#: builtin/notes.c:498
msgid "command"
msgstr "команда"
-#: archive.c:478 builtin/archive.c:93
+#: archive.c:480 builtin/archive.c:94
msgid "path to the remote git-upload-archive command"
msgstr "път към отдалечената команда „git-upload-archive“"
-#: archive.c:485
+#: archive.c:487
msgid "Unexpected option --remote"
msgstr "Неочаквана опция „--remote“"
-#: archive.c:487
+#: archive.c:489
msgid "Option --exec can only be used together with --remote"
msgstr "Опцията „--exec“ изисква „--remote“"
-#: archive.c:489
+#: archive.c:491
msgid "Unexpected option --output"
msgstr "Неочаквана опция „--output“"
-#: archive.c:511
+#: archive.c:513
#, c-format
msgid "Unknown archive format '%s'"
msgstr "Непознат формат на архив: „%s“"
-#: archive.c:518
+#: archive.c:520
#, c-format
msgid "Argument not supported for format '%s': -%d"
msgstr "Аргументът не се поддържа за форма̀та „%s“: -%d"
@@ -1049,7 +1079,7 @@ msgstr "пътят не е правилно кодиран в UTF-8: %s"
msgid "path too long (%d chars, SHA1: %s): %s"
msgstr "твърде дълъг път (%d знака, SHA1: %s): %s"
-#: archive-zip.c:474 builtin/pack-objects.c:224 builtin/pack-objects.c:227
+#: archive-zip.c:474 builtin/pack-objects.c:225 builtin/pack-objects.c:228
#, c-format
msgid "deflate error (%d)"
msgstr "грешка при декомпресиране с „deflate“ (%d)"
@@ -1059,12 +1089,17 @@ msgstr "грешка при декомпресиране с „deflate“ (%d)"
msgid "timestamp too large for this system: %<PRIuMAX>"
msgstr "времевата стойност е твърде голяма за тази система: %<PRIuMAX>"
-#: attr.c:212
+#: attr.c:211
#, c-format
msgid "%.*s is not a valid attribute name"
msgstr "„%.*s“ е неправилно име за атрибут"
-#: attr.c:409
+#: attr.c:368
+#, c-format
+msgid "%s not allowed: %s:%d"
+msgstr "%s: командата не е позволена: „%s:%d“"
+
+#: attr.c:408
msgid ""
"Negative patterns are ignored in git attributes\n"
"Use '\\!' for literal leading exclamation."
@@ -1077,17 +1112,17 @@ msgstr ""
msgid "Badly quoted content in file '%s': %s"
msgstr "Неправилно цитирано съдържание във файла „%s“: %s"
-#: bisect.c:676
+#: bisect.c:678
#, c-format
msgid "We cannot bisect more!\n"
msgstr "Повече не може да се търси двоично!\n"
-#: bisect.c:730
+#: bisect.c:733
#, c-format
msgid "Not a valid commit name %s"
msgstr "Неправилно име на подаване „%s“"
-#: bisect.c:754
+#: bisect.c:758
#, c-format
msgid ""
"The merge base %s is bad.\n"
@@ -1096,7 +1131,7 @@ msgstr ""
"Неправилна база за сливане: %s.\n"
"Следователно грешката е коригирана между „%s“ и [%s].\n"
-#: bisect.c:759
+#: bisect.c:763
#, c-format
msgid ""
"The merge base %s is new.\n"
@@ -1105,7 +1140,7 @@ msgstr ""
"Нова база за сливане: %s.\n"
"Свойството е променено между „%s“ и [%s].\n"
-#: bisect.c:764
+#: bisect.c:768
#, c-format
msgid ""
"The merge base %s is %s.\n"
@@ -1114,7 +1149,7 @@ msgstr ""
"Базата за сливане „%s“ е %s.\n"
"Следователно първото %s подаване е между „%s“ и [%s].\n"
-#: bisect.c:772
+#: bisect.c:776
#, c-format
msgid ""
"Some %s revs are not ancestors of the %s rev.\n"
@@ -1125,7 +1160,7 @@ msgstr ""
"Двоичното търсене с git bisect няма да работи правилно.\n"
"Дали не сте объркали указателите „%s“ и „%s“?\n"
-#: bisect.c:785
+#: bisect.c:789
#, c-format
msgid ""
"the merge base between %s and [%s] must be skipped.\n"
@@ -1136,36 +1171,36 @@ msgstr ""
"Не може да сме сигурни, че първото %s подаване е между „%s“ и „%s“.\n"
"Двоичното търсене продължава."
-#: bisect.c:818
+#: bisect.c:822
#, c-format
msgid "Bisecting: a merge base must be tested\n"
msgstr "Двоично търсене: трябва да се провери база за сливане\n"
-#: bisect.c:858
+#: bisect.c:865
#, c-format
msgid "a %s revision is needed"
msgstr "необходима е версия „%s“"
-#: bisect.c:877 builtin/notes.c:177 builtin/tag.c:237
+#: bisect.c:884 builtin/notes.c:177 builtin/tag.c:237
#, c-format
msgid "could not create file '%s'"
msgstr "файлът „%s“ не може да бъде създаден"
-#: bisect.c:928 builtin/merge.c:138
+#: bisect.c:937 builtin/merge.c:139
#, c-format
msgid "could not read file '%s'"
msgstr "файлът „%s“ не може да бъде прочетен"
-#: bisect.c:958
+#: bisect.c:967
msgid "reading bisect refs failed"
msgstr "неуспешно прочитане на указателите за двоично търсене"
-#: bisect.c:977
+#: bisect.c:986
#, c-format
msgid "%s was both %s and %s\n"
msgstr "„%s“ e както „%s“, така и „%s“\n"
-#: bisect.c:985
+#: bisect.c:994
#, c-format
msgid ""
"No testable commit found.\n"
@@ -1174,7 +1209,7 @@ msgstr ""
"Липсва подходящо за тестване подаване.\n"
"Проверете параметрите за пътищата.\n"
-#: bisect.c:1004
+#: bisect.c:1013
#, c-format
msgid "(roughly %d step)"
msgid_plural "(roughly %d steps)"
@@ -1184,48 +1219,48 @@ msgstr[1] "(приблизително %d стъпки)"
#. TRANSLATORS: the last %s will be replaced with "(roughly %d
#. steps)" translation.
#.
-#: bisect.c:1010
+#: bisect.c:1019
#, c-format
msgid "Bisecting: %d revision left to test after this %s\n"
msgid_plural "Bisecting: %d revisions left to test after this %s\n"
msgstr[0] "Двоично търсене: остава %d версия след тази %s\n"
msgstr[1] "Двоично търсене: остават %d версии след тази %s\n"
-#: blame.c:1787
+#: blame.c:1792
msgid "--contents and --reverse do not blend well."
msgstr "Опциите „--contents“ и „--reverse“ са несъвместими"
-#: blame.c:1801
+#: blame.c:1806
msgid "cannot use --contents with final commit object name"
msgstr "Опцията „--contents“ е несъвместима с име на обект от крайно подаване"
-#: blame.c:1822
+#: blame.c:1827
msgid "--reverse and --first-parent together require specified latest commit"
msgstr ""
"Едновременното задаване на опциите „--reverse“ и „--first-parent“ изисква "
"указването на крайно подаване"
-#: blame.c:1831 bundle.c:162 ref-filter.c:2046 sequencer.c:1963
-#: sequencer.c:4002 builtin/commit.c:1001 builtin/log.c:377 builtin/log.c:932
-#: builtin/log.c:1407 builtin/log.c:1783 builtin/log.c:2072 builtin/merge.c:406
+#: blame.c:1836 bundle.c:164 ref-filter.c:2071 remote.c:1948 sequencer.c:1993
+#: sequencer.c:4064 builtin/commit.c:1004 builtin/log.c:378 builtin/log.c:936
+#: builtin/log.c:1420 builtin/log.c:1796 builtin/log.c:2086 builtin/merge.c:407
#: builtin/pack-objects.c:3137 builtin/pack-objects.c:3152
#: builtin/shortlog.c:192
msgid "revision walk setup failed"
msgstr "неуспешно настройване на обхождането на версиите"
-#: blame.c:1849
+#: blame.c:1854
msgid ""
"--reverse --first-parent together require range along first-parent chain"
msgstr ""
"Едновременното задаване на опциите „--reverse“ и „--first-parent“ изисква "
"указването на диапазон по веригата на първите наследници"
-#: blame.c:1860
+#: blame.c:1865
#, c-format
msgid "no such path %s in %s"
msgstr "няма път на име „%s“ в „%s“"
-#: blame.c:1871
+#: blame.c:1876
#, c-format
msgid "cannot read blob %s for path %s"
msgstr "обектът-BLOB „%s“ в пътя %s не може да бъде прочетен"
@@ -1343,27 +1378,27 @@ msgstr ""
"може да използвате „git push -u“, за да настроите към кой клон да се "
"изтласква."
-#: branch.c:279
+#: branch.c:280
#, c-format
msgid "Not a valid object name: '%s'."
msgstr "Неправилно име на обект: „%s“"
-#: branch.c:299
+#: branch.c:300
#, c-format
msgid "Ambiguous object name: '%s'."
msgstr "Името на обект не е еднозначно: „%s“"
-#: branch.c:304
+#: branch.c:305
#, c-format
msgid "Not a valid branch point: '%s'."
msgstr "Неправилно място за начало на клон: „%s“"
-#: branch.c:358
+#: branch.c:359
#, c-format
msgid "'%s' is already checked out at '%s'"
msgstr "„%s“ вече е изтеглен в „%s“"
-#: branch.c:381
+#: branch.c:382
#, c-format
msgid "HEAD of working tree %s is not updated"
msgstr "Указателят „HEAD“ на работното дърво „%s“ не е обновен"
@@ -1378,71 +1413,71 @@ msgstr "Файлът „%s“ не изглежда да е пратка на gi
msgid "unrecognized header: %s%s (%d)"
msgstr "непозната заглавна част: %s%s (%d)"
-#: bundle.c:90 rerere.c:480 rerere.c:690 sequencer.c:2182 sequencer.c:2722
-#: builtin/commit.c:774
+#: bundle.c:90 rerere.c:480 rerere.c:690 sequencer.c:2215 sequencer.c:2763
+#: builtin/commit.c:776
#, c-format
msgid "could not open '%s'"
msgstr "„%s“ не може да се отвори"
-#: bundle.c:141
+#: bundle.c:143
msgid "Repository lacks these prerequisite commits:"
msgstr "В хранилището липсват следните необходими подавания:"
-#: bundle.c:192
+#: bundle.c:194
#, c-format
msgid "The bundle contains this ref:"
msgid_plural "The bundle contains these %d refs:"
msgstr[0] "Пратката съдържа следния указател:"
msgstr[1] "Пратката съдържа следните %d указатели:"
-#: bundle.c:199
+#: bundle.c:201
msgid "The bundle records a complete history."
msgstr "Пратката съдържа пълна история."
-#: bundle.c:201
+#: bundle.c:203
#, c-format
msgid "The bundle requires this ref:"
msgid_plural "The bundle requires these %d refs:"
msgstr[0] "Пратката изисква следния указател:"
msgstr[1] "Пратката изисква следните %d указатели:"
-#: bundle.c:267
+#: bundle.c:269
msgid "unable to dup bundle descriptor"
msgstr "неуспешно дублиране на дескриптора на пратката с „dup“"
-#: bundle.c:274
+#: bundle.c:276
msgid "Could not spawn pack-objects"
msgstr "Командата „git pack-objects“ не може да бъде стартирана"
-#: bundle.c:285
+#: bundle.c:287
msgid "pack-objects died"
msgstr "Командата „git pack-objects“ не завърши успешно"
-#: bundle.c:327
+#: bundle.c:329
msgid "rev-list died"
msgstr "Командата „git rev-list“ не завърши успешно"
-#: bundle.c:376
+#: bundle.c:378
#, c-format
msgid "ref '%s' is excluded by the rev-list options"
msgstr ""
"указателят „%s“ не е бил включен поради опциите зададени на „git rev-list“"
-#: bundle.c:456 builtin/log.c:192 builtin/log.c:1688 builtin/shortlog.c:304
+#: bundle.c:457 builtin/log.c:193 builtin/log.c:1701 builtin/shortlog.c:306
#, c-format
msgid "unrecognized argument: %s"
msgstr "непознат аргумент: %s"
-#: bundle.c:464
+#: bundle.c:465
msgid "Refusing to create empty bundle."
msgstr "Създаването на празна пратка е невъзможно."
-#: bundle.c:474
+#: bundle.c:475
#, c-format
msgid "cannot create '%s'"
msgstr "Файлът „%s“ не може да бъде създаден"
-#: bundle.c:498
+#: bundle.c:500
msgid "index-pack died"
msgstr "Командата „git index-pack“ не завърши успешно"
@@ -1451,8 +1486,8 @@ msgstr "Командата „git index-pack“ не завърши успешн
msgid "invalid color value: %.*s"
msgstr "неправилна стойност за цвят: %.*s"
-#: commit.c:50 sequencer.c:2528 builtin/am.c:370 builtin/am.c:414
-#: builtin/am.c:1390 builtin/am.c:2025 builtin/replace.c:376
+#: commit.c:50 sequencer.c:2567 builtin/am.c:355 builtin/am.c:399
+#: builtin/am.c:1375 builtin/am.c:2019 builtin/replace.c:376
#: builtin/replace.c:448
#, c-format
msgid "could not parse %s"
@@ -1486,29 +1521,29 @@ msgstr ""
"\n"
" git config advice.graftFileDeprecated false"
-#: commit.c:1115
+#: commit.c:1122
#, c-format
msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
msgstr ""
"Подаването „%s“ е с недоверен подпис от GPG, който твърди, че е на „%s“."
-#: commit.c:1118
+#: commit.c:1125
#, c-format
msgid "Commit %s has a bad GPG signature allegedly by %s."
msgstr ""
"Подаването „%s“ е с неправилен подпис от GPG, който твърди, че е на „%s“."
-#: commit.c:1121
+#: commit.c:1128
#, c-format
msgid "Commit %s does not have a GPG signature."
msgstr "Подаването „%s“ е без подпис от GPG."
-#: commit.c:1124
+#: commit.c:1131
#, c-format
msgid "Commit %s has a good GPG signature by %s\n"
msgstr "Подаването „%s“ е с коректен подпис от GPG на „%s“.\n"
-#: commit.c:1378
+#: commit.c:1385
msgid ""
"Warning: commit message did not conform to UTF-8.\n"
"You may want to amend it after fixing the message, or set the config\n"
@@ -1518,91 +1553,133 @@ msgstr ""
"Може да поправите подаването заедно със съобщението или може да\n"
"зададете ползваното кодиране в настройката „i18n.commitencoding“.\n"
-#: commit-graph.c:108
+#: commit-graph.c:101
#, c-format
msgid "graph file %s is too small"
msgstr "файлът с гра̀фа на подаванията „%s“ е твърде малък"
-#: commit-graph.c:115
+#: commit-graph.c:136
#, c-format
msgid "graph signature %X does not match signature %X"
msgstr "отпечатъкът на гра̀фа с подаванията %X не съвпада с %X"
-#: commit-graph.c:122
+#: commit-graph.c:143
#, c-format
msgid "graph version %X does not match version %X"
msgstr "версията на гра̀фа с подаванията %X не съвпада с %X"
-#: commit-graph.c:129
+#: commit-graph.c:150
#, c-format
msgid "hash version %X does not match version %X"
msgstr "версията на отпечатъка на гра̀фа с подаванията %X не съвпада с %X"
-#: commit-graph.c:153
+#: commit-graph.c:173
+msgid "chunk lookup table entry missing; graph file may be incomplete"
+msgstr ""
+"записът в таблицата за откъси липсва, файлът за гра̀фа може да е непълен"
+
+#: commit-graph.c:184
#, c-format
msgid "improper chunk offset %08x%08x"
msgstr "неправилно отместване на откъс: %08x%08x"
-#: commit-graph.c:189
+#: commit-graph.c:221
#, c-format
msgid "chunk id %08x appears multiple times"
msgstr "откъсът %08x се явява многократно"
-#: commit-graph.c:308
+#: commit-graph.c:334
#, c-format
msgid "could not find commit %s"
msgstr "подаването „%s“ не може да бъде открито"
-#: commit-graph.c:617 builtin/pack-objects.c:2652
+#: commit-graph.c:671 builtin/pack-objects.c:2646
#, c-format
msgid "unable to get type of object %s"
msgstr "видът на обекта „%s“ не може да бъде определен"
-#: commit-graph.c:651
-msgid "Annotating commits in commit graph"
-msgstr "Анотиране на подаванията в гра̀фа"
+#: commit-graph.c:704
+msgid "Loading known commits in commit graph"
+msgstr "Зареждане на познатите подавания в гра̀фа с подаванията"
-#: commit-graph.c:691
+#: commit-graph.c:720
+msgid "Expanding reachable commits in commit graph"
+msgstr "Разширяване на достижимите подавания в гра̀фа"
+
+#: commit-graph.c:732
+msgid "Clearing commit marks in commit graph"
+msgstr "Изчистване на отбелязванията на подаванията в гра̀фа с подаванията"
+
+#: commit-graph.c:752
msgid "Computing commit graph generation numbers"
msgstr "Изчисляване на номерата на поколенията в гра̀фа с подаванията"
-#: commit-graph.c:803 commit-graph.c:826 commit-graph.c:852
-msgid "Finding commits for commit graph"
-msgstr "Откриване на подаванията в гра̀фа"
+#: commit-graph.c:869
+#, c-format
+msgid "Finding commits for commit graph in %d pack"
+msgid_plural "Finding commits for commit graph in %d packs"
+msgstr[0] "Откриване на подаванията в гра̀фа в %d пакетен файл"
+msgstr[1] "Откриване на подаванията в гра̀фа в %d пакетни файла"
-#: commit-graph.c:812
+#: commit-graph.c:882
#, c-format
msgid "error adding pack %s"
msgstr "грешка при добавяне на пакетен файл „%s“"
-#: commit-graph.c:814
+#: commit-graph.c:884
#, c-format
msgid "error opening index for %s"
msgstr "грешка при отваряне на индекса на „%s“"
-#: commit-graph.c:868
+#: commit-graph.c:898
+#, c-format
+msgid "Finding commits for commit graph from %d ref"
+msgid_plural "Finding commits for commit graph from %d refs"
+msgstr[0] "Откриване на подаванията в гра̀фа измежду %d указател"
+msgstr[1] "Откриване на подаванията в гра̀фа измежду %d указатели"
+
+#: commit-graph.c:930
+msgid "Finding commits for commit graph among packed objects"
+msgstr "Откриване на подаванията в гра̀фа измежду пакетираните обекти"
+
+#: commit-graph.c:943
+msgid "Counting distinct commits in commit graph"
+msgstr "Преброяване на различните подавания в гра̀фа"
+
+#: commit-graph.c:956
#, c-format
msgid "the commit graph format cannot write %d commits"
msgstr "форматът на гра̀фа с подаванията не може да запише %d подавания"
-#: commit-graph.c:895
+#: commit-graph.c:965
+msgid "Finding extra edges in commit graph"
+msgstr "Откриване на още върхове в гра̀фа с подаванията"
+
+#: commit-graph.c:989
msgid "too many commits to write graph"
msgstr "прекалено много подавания за записване на гра̀фа"
-#: commit-graph.c:902 midx.c:769
+#: commit-graph.c:996 midx.c:769
#, c-format
msgid "unable to create leading directories of %s"
msgstr "родителските директории на „%s“ не могат да бъдат създадени"
-#: commit-graph.c:1002
+#: commit-graph.c:1036
+#, c-format
+msgid "Writing out commit graph in %d pass"
+msgid_plural "Writing out commit graph in %d passes"
+msgstr[0] "Запазване на гра̀фа с подаванията в %d пас"
+msgstr[1] "Запазване на гра̀фа с подаванията в %d паса"
+
+#: commit-graph.c:1109
msgid "the commit-graph file has incorrect checksum and is likely corrupt"
msgstr "графът с подаванията е с грешна сума за проверка — вероятно е повреден"
-#: commit-graph.c:1046
+#: commit-graph.c:1153
msgid "Verifying commits in commit graph"
msgstr "Проверка на подаванията в гра̀фа"
-#: compat/obstack.c:405 compat/obstack.c:407
+#: compat/obstack.c:406 compat/obstack.c:408
msgid "memory exhausted"
msgstr "паметта свърши"
@@ -1644,7 +1721,7 @@ msgstr "ключът не съдържа раздел: „%s“"
msgid "key does not contain variable name: %s"
msgstr "ключът не съдържа име на променлива: „%s“"
-#: config.c:378 sequencer.c:2296
+#: config.c:378 sequencer.c:2330
#, c-format
msgid "invalid key: %s"
msgstr "неправилен ключ: „%s“"
@@ -1784,7 +1861,7 @@ msgstr ""
"„simple“ (клонът със същото име, от който се издърпва), „upstream“ (клонът, "
"от който се издърпва) или „current“ (клонът със същото име)"
-#: config.c:1481 builtin/pack-objects.c:3391
+#: config.c:1481 builtin/pack-objects.c:3394
#, c-format
msgid "bad pack compression level %d"
msgstr "неправилно ниво на компресиране при пакетиране: %d"
@@ -1861,62 +1938,62 @@ msgstr "зададени са няколко стойности за „%s“"
msgid "failed to write new configuration file %s"
msgstr "новият конфигурационен файл „%s“ не може да бъде запазен"
-#: config.c:2717 config.c:3041
+#: config.c:2716 config.c:3040
#, c-format
msgid "could not lock config file %s"
msgstr "конфигурационният файл „%s“ не може да бъде заключен"
-#: config.c:2728
+#: config.c:2727
#, c-format
msgid "opening %s"
msgstr "отваряне на „%s“"
-#: config.c:2763 builtin/config.c:327
+#: config.c:2762 builtin/config.c:328
#, c-format
msgid "invalid pattern: %s"
msgstr "неправилен шаблон: %s"
-#: config.c:2788
+#: config.c:2787
#, c-format
msgid "invalid config file %s"
msgstr "неправилен конфигурационен файл: „%s“"
-#: config.c:2801 config.c:3054
+#: config.c:2800 config.c:3053
#, c-format
msgid "fstat on %s failed"
msgstr "неуспешно изпълнение на „fstat“ върху „%s“"
-#: config.c:2812
+#: config.c:2811
#, c-format
msgid "unable to mmap '%s'"
msgstr "неуспешно изпълнение на „mmap“ върху „%s“"
-#: config.c:2821 config.c:3059
+#: config.c:2820 config.c:3058
#, c-format
msgid "chmod on %s failed"
msgstr "неуспешна смяна на права с „chmod“ върху „%s“"
-#: config.c:2906 config.c:3156
+#: config.c:2905 config.c:3155
#, c-format
msgid "could not write config file %s"
msgstr "конфигурационният файл „%s“ не може да бъде записан"
-#: config.c:2940
+#: config.c:2939
#, c-format
msgid "could not set '%s' to '%s'"
msgstr "„%s“ не може да се зададе да е „%s“"
-#: config.c:2942 builtin/remote.c:782
+#: config.c:2941 builtin/remote.c:782
#, c-format
msgid "could not unset '%s'"
msgstr "„%s“ не може да се премахне"
-#: config.c:3032
+#: config.c:3031
#, c-format
msgid "invalid section name: %s"
msgstr "неправилно име на раздел: %s"
-#: config.c:3199
+#: config.c:3198
#, c-format
msgid "missing value for '%s'"
msgstr "липсва стойност за „%s“"
@@ -1970,50 +2047,45 @@ msgstr "протоколна грешка: очаква се SHA1 на плит
msgid "repository on the other end cannot be shallow"
msgstr "отсрещното хранилище не може да е плитко"
-#: connect.c:310 fetch-pack.c:182 builtin/archive.c:63
-#, c-format
-msgid "remote error: %s"
-msgstr "отдалечена грешка: %s"
-
-#: connect.c:316
+#: connect.c:313
msgid "invalid packet"
msgstr "неправилен пакет"
-#: connect.c:336
+#: connect.c:333
#, c-format
msgid "protocol error: unexpected '%s'"
msgstr "протоколна грешка: неочаквано „%s“"
-#: connect.c:444
+#: connect.c:441
#, c-format
msgid "invalid ls-refs response: %s"
msgstr "неправилен отговор на „ls-refs“: „%s“"
-#: connect.c:448
+#: connect.c:445
msgid "expected flush after ref listing"
msgstr "очакваше се изчистване на буферите след изброяването на указателите"
-#: connect.c:547
+#: connect.c:544
#, c-format
msgid "protocol '%s' is not supported"
msgstr "протокол „%s“ не се поддържа"
-#: connect.c:598
+#: connect.c:595
msgid "unable to set SO_KEEPALIVE on socket"
msgstr "неуспешно задаване на „SO_KEEPALIVE“ на гнездо"
-#: connect.c:638 connect.c:701
+#: connect.c:635 connect.c:698
#, c-format
msgid "Looking up %s ... "
msgstr "Търсене на „%s“… "
-#: connect.c:642
+#: connect.c:639
#, c-format
msgid "unable to look up %s (port %s) (%s)"
msgstr "„%s“ (порт %s) не може да се открие („%s“)"
#. TRANSLATORS: this is the end of "Looking up %s ... "
-#: connect.c:646 connect.c:717
+#: connect.c:643 connect.c:714
#, c-format
msgid ""
"done.\n"
@@ -2022,7 +2094,7 @@ msgstr ""
"готово.\n"
"Свързване към „%s“ (порт %s)…"
-#: connect.c:668 connect.c:745
+#: connect.c:665 connect.c:742
#, c-format
msgid ""
"unable to connect to %s:\n"
@@ -2032,67 +2104,67 @@ msgstr ""
"%s"
#. TRANSLATORS: this is the end of "Connecting to %s (port %s) ... "
-#: connect.c:674 connect.c:751
+#: connect.c:671 connect.c:748
msgid "done."
msgstr "действието завърши."
-#: connect.c:705
+#: connect.c:702
#, c-format
msgid "unable to look up %s (%s)"
msgstr "„%s“ не може да се открие (%s)"
-#: connect.c:711
+#: connect.c:708
#, c-format
msgid "unknown port %s"
msgstr "непознат порт „%s“"
-#: connect.c:848 connect.c:1174
+#: connect.c:845 connect.c:1171
#, c-format
msgid "strange hostname '%s' blocked"
msgstr "необичайното име на хост „%s“ е блокирано"
-#: connect.c:850
+#: connect.c:847
#, c-format
msgid "strange port '%s' blocked"
msgstr "необичайният порт „%s“ е блокиран"
-#: connect.c:860
+#: connect.c:857
#, c-format
msgid "cannot start proxy %s"
msgstr "посредникът „%s“ не може да се стартира"
-#: connect.c:927
+#: connect.c:924
msgid "no path specified; see 'git help pull' for valid url syntax"
msgstr ""
"не е указан път. Проверете синтаксиса с командата:\n"
"\n"
" git help pull"
-#: connect.c:1122
+#: connect.c:1119
msgid "ssh variant 'simple' does not support -4"
msgstr "вариантът за „ssh“ — „simple“ (опростен), не поддържа опцията „-4“"
-#: connect.c:1134
+#: connect.c:1131
msgid "ssh variant 'simple' does not support -6"
msgstr "вариантът за „ssh“ — „simple“ (опростен), не поддържа опцията „-6“"
-#: connect.c:1151
+#: connect.c:1148
msgid "ssh variant 'simple' does not support setting port"
msgstr ""
"вариантът за „ssh“ — „simple“ (опростен), не поддържа задаването на порт"
-#: connect.c:1262
+#: connect.c:1259
#, c-format
msgid "strange pathname '%s' blocked"
msgstr "необичайният път „%s“ е блокиран"
-#: connect.c:1307
+#: connect.c:1304
msgid "unable to fork"
msgstr "неуспешно създаване на процес"
-#: connected.c:68 builtin/fsck.c:202 builtin/prune.c:147
+#: connected.c:68 builtin/fsck.c:221 builtin/prune.c:146
msgid "Checking connectivity"
-msgstr "Проверка на връзката"
+msgstr "Проверка на свързаността"
#: connected.c:80
msgid "Could not run 'git rev-list'"
@@ -2106,17 +2178,17 @@ msgstr "неуспешен запис на списъка с версиите"
msgid "failed to close rev-list's stdin"
msgstr "стандартният вход на списъка с версиите не може да бъде затворен"
-#: convert.c:194
+#: convert.c:193
#, c-format
msgid "illegal crlf_action %d"
msgstr "неправилно действие за край на ред: %d"
-#: convert.c:207
+#: convert.c:206
#, c-format
msgid "CRLF would be replaced by LF in %s"
msgstr "Всяка последователност от знаци „CRLF“ ще бъдe заменена с „LF“ в „%s“."
-#: convert.c:209
+#: convert.c:208
#, c-format
msgid ""
"CRLF will be replaced by LF in %s.\n"
@@ -2126,13 +2198,13 @@ msgstr ""
"Файлът ще остане с първоначалните знаци за край на ред в работната ви "
"директория."
-#: convert.c:217
+#: convert.c:216
#, c-format
msgid "LF would be replaced by CRLF in %s"
msgstr ""
"Всеки знак „LF“ ще бъдe заменен с последователността от знаци „CRLF“ в „%s“."
-#: convert.c:219
+#: convert.c:218
#, c-format
msgid ""
"LF will be replaced by CRLF in %s.\n"
@@ -2143,14 +2215,14 @@ msgstr ""
"Файлът ще остане с първоначалните знаци за край на ред в работната ви "
"директория."
-#: convert.c:280
+#: convert.c:279
#, c-format
msgid "BOM is prohibited in '%s' if encoded as %s"
msgstr ""
"„%s“ не трябва да съдържа маркер за поредността на байтовете (BOM) при "
"кодиране „%s“"
-#: convert.c:287
+#: convert.c:286
#, c-format
msgid ""
"The file '%s' contains a byte order mark (BOM). Please use UTF-%s as working-"
@@ -2159,14 +2231,14 @@ msgstr ""
"Файлът „%s“ съдържа маркер за поредността на байтовете (BOM). Използвайте "
"„UTF-%s“ като кодиране за работното дърво."
-#: convert.c:305
+#: convert.c:304
#, c-format
msgid "BOM is required in '%s' if encoded as %s"
msgstr ""
"„%s“ трябва да съдържа маркер за поредността на байтовете (BOM) при кодиране "
"„%s“"
-#: convert.c:307
+#: convert.c:306
#, c-format
msgid ""
"The file '%s' is missing a byte order mark (BOM). Please use UTF-%sBE or UTF-"
@@ -2176,37 +2248,37 @@ msgstr ""
"на работното дърво използвайте UTF-%sBE или UTF-%sLE (в зависимост от "
"поредността на байтовете)."
-#: convert.c:425 convert.c:496
+#: convert.c:424 convert.c:495
#, c-format
msgid "failed to encode '%s' from %s to %s"
msgstr "неуспешно прекодиране на „%s“ от „%s“ към „%s“"
-#: convert.c:468
+#: convert.c:467
#, c-format
msgid "encoding '%s' from %s to %s and back is not the same"
msgstr "Прекодирането на „%s“ от „%s“ към „%s“ и обратно променя файла"
-#: convert.c:674
+#: convert.c:673
#, c-format
msgid "cannot fork to run external filter '%s'"
msgstr "неуспешно създаване на процес за външен филтър „%s“"
-#: convert.c:694
+#: convert.c:693
#, c-format
msgid "cannot feed the input to external filter '%s'"
msgstr "входът не може да бъде подаден на външния филтър „%s“"
-#: convert.c:701
+#: convert.c:700
#, c-format
msgid "external filter '%s' failed %d"
msgstr "неуспешно изпълнение на външния филтър „%s“: %d"
-#: convert.c:736 convert.c:739
+#: convert.c:735 convert.c:738
#, c-format
msgid "read from external filter '%s' failed"
msgstr "неуспешно четене от външния филтър „%s“"
-#: convert.c:742 convert.c:796
+#: convert.c:741 convert.c:796
#, c-format
msgid "external filter '%s' failed"
msgstr "неуспешно изпълнение на външния филтър „%s“"
@@ -2242,53 +2314,53 @@ msgstr "%s: неуспешно изпълнение на декодиращ фи
msgid "%s: smudge filter %s failed"
msgstr "%s: неуспешно изпълнение на кодиращ филтър „%s“"
-#: date.c:116
+#: date.c:137
msgid "in the future"
msgstr "в бъдещето"
-#: date.c:122
+#: date.c:143
#, c-format
msgid "%<PRIuMAX> second ago"
msgid_plural "%<PRIuMAX> seconds ago"
msgstr[0] "преди %<PRIuMAX> секунда"
msgstr[1] "преди %<PRIuMAX> секунди"
-#: date.c:129
+#: date.c:150
#, c-format
msgid "%<PRIuMAX> minute ago"
msgid_plural "%<PRIuMAX> minutes ago"
msgstr[0] "преди %<PRIuMAX> минута"
msgstr[1] "преди %<PRIuMAX> минути"
-#: date.c:136
+#: date.c:157
#, c-format
msgid "%<PRIuMAX> hour ago"
msgid_plural "%<PRIuMAX> hours ago"
msgstr[0] "преди %<PRIuMAX> час"
msgstr[1] "преди %<PRIuMAX> часа"
-#: date.c:143
+#: date.c:164
#, c-format
msgid "%<PRIuMAX> day ago"
msgid_plural "%<PRIuMAX> days ago"
msgstr[0] "преди %<PRIuMAX> ден"
msgstr[1] "преди %<PRIuMAX> дена"
-#: date.c:149
+#: date.c:170
#, c-format
msgid "%<PRIuMAX> week ago"
msgid_plural "%<PRIuMAX> weeks ago"
msgstr[0] "преди %<PRIuMAX> седмица"
msgstr[1] "преди %<PRIuMAX> седмици"
-#: date.c:156
+#: date.c:177
#, c-format
msgid "%<PRIuMAX> month ago"
msgid_plural "%<PRIuMAX> months ago"
msgstr[0] "преди %<PRIuMAX> месец"
msgstr[1] "преди %<PRIuMAX> месеца"
-#: date.c:167
+#: date.c:188
#, c-format
msgid "%<PRIuMAX> year"
msgid_plural "%<PRIuMAX> years"
@@ -2296,42 +2368,42 @@ msgstr[0] "%<PRIuMAX> година"
msgstr[1] "%<PRIuMAX> години"
#. TRANSLATORS: "%s" is "<n> years"
-#: date.c:170
+#: date.c:191
#, c-format
msgid "%s, %<PRIuMAX> month ago"
msgid_plural "%s, %<PRIuMAX> months ago"
msgstr[0] "преди %s и %<PRIuMAX> месец"
msgstr[1] "преди %s и %<PRIuMAX> месеца"
-#: date.c:175 date.c:180
+#: date.c:196 date.c:201
#, c-format
msgid "%<PRIuMAX> year ago"
msgid_plural "%<PRIuMAX> years ago"
msgstr[0] "преди %<PRIuMAX> година"
msgstr[1] "преди %<PRIuMAX> години"
-#: delta-islands.c:268
+#: delta-islands.c:272
msgid "Propagating island marks"
msgstr "Разпространяване на границите на групите"
-#: delta-islands.c:286
+#: delta-islands.c:290
#, c-format
msgid "bad tree object %s"
msgstr "неправилен обект-дърво: %s"
-#: delta-islands.c:330
+#: delta-islands.c:334
#, c-format
msgid "failed to load island regex for '%s': %s"
msgstr "регулярният израз на групата за „%s“, не може да бъде зареден: „%s“"
-#: delta-islands.c:386
+#: delta-islands.c:390
#, c-format
msgid "island regex from config has too many capture groups (max=%d)"
msgstr ""
"регулярният израз на групата в конфигурационния файл съдържа повече от "
"максимално поддържаните (%d) прихващащи групи"
-#: delta-islands.c:462
+#: delta-islands.c:466
#, c-format
msgid "Marked %d islands, done.\n"
msgstr "Отбелязани са %d групи, работата приключи.\n"
@@ -2371,25 +2443,33 @@ msgstr ""
"„default“ (стандартно), „blocks“ (парчета), „zebra“ (райе), "
"„dimmed_zebra“ (тъмно райе), „plain“ (обикновено)"
-#: diff.c:316
+#: diff.c:319
#, c-format
-msgid "ignoring unknown color-moved-ws mode '%s'"
-msgstr "непознатата стойност „%s“ на настройката „color-moved-ws“ се прескача"
+msgid ""
+"unknown color-moved-ws mode '%s', possible values are 'ignore-space-change', "
+"'ignore-space-at-eol', 'ignore-all-space', 'allow-indentation-change'"
+msgstr ""
+"неподдържан режим за настройката „color-moved-ws mode“ — „%s“, possible "
+"values are „ignore-space-change“ (пренебрегване на промените на празните "
+"знаци), „ignore-space-at-eol“ (пренебрегване на промените на празните знаци "
+"в края на реда), „ignore-all-space“ (пренебрегване на всички празни знаци), "
+"„allow-indentation-change“ (позволяване на промените в празните знаци за "
+"форматиране)"
-#: diff.c:323
+#: diff.c:327
msgid ""
-"color-moved-ws: allow-indentation-change cannot be combined with other white "
-"space modes"
+"color-moved-ws: allow-indentation-change cannot be combined with other "
+"whitespace modes"
msgstr ""
"color-moved-ws: „allow-indentation-change“ е несъвместима с другите режими "
-"за знаците за интервали"
+"за празни знаци"
-#: diff.c:394
+#: diff.c:400
#, c-format
msgid "Unknown value for 'diff.submodule' config variable: '%s'"
msgstr "Непозната стойност „%s“ за настройката „diff.submodule“"
-#: diff.c:454
+#: diff.c:460
#, c-format
msgid ""
"Found errors in 'diff.dirstat' config variable:\n"
@@ -2398,27 +2478,27 @@ msgstr ""
"Грешки в настройката „diff.dirstat“:\n"
"%s"
-#: diff.c:4140
+#: diff.c:4211
#, c-format
msgid "external diff died, stopping at %s"
msgstr ""
"външната програма за разлики завърши неуспешно. Спиране на работата при „%s“"
-#: diff.c:4482
+#: diff.c:4553
msgid "--name-only, --name-status, --check and -s are mutually exclusive"
msgstr ""
"Опциите „--name-only“, „--name-status“, „--check“ и „-s“ са несъвместими "
"една с друга"
-#: diff.c:4485
+#: diff.c:4556
msgid "-G, -S and --find-object are mutually exclusive"
msgstr "Опциите „-G“, „-S“ и „--find-object“ са несъвместими една с друга"
-#: diff.c:4563
+#: diff.c:4634
msgid "--follow requires exactly one pathspec"
msgstr "Опцията „--follow“ изисква точно един път"
-#: diff.c:4729
+#: diff.c:4800
#, c-format
msgid ""
"Failed to parse --dirstat/-X option parameter:\n"
@@ -2427,63 +2507,63 @@ msgstr ""
"Неразпознат параметър към опцията „--dirstat/-X“:\n"
"%s"
-#: diff.c:4743
+#: diff.c:4814
#, c-format
msgid "Failed to parse --submodule option parameter: '%s'"
msgstr "Неразпознат параметър към опцията „--submodule“: „%s“"
-#: diff.c:5823
+#: diff.c:5900
msgid "inexact rename detection was skipped due to too many files."
msgstr ""
"търсенето на преименувания на обекти съчетани с промени се прескача поради "
"многото файлове."
-#: diff.c:5826
+#: diff.c:5903
msgid "only found copies from modified paths due to too many files."
msgstr ""
"установени са точните копия на променените пътища поради многото файлове."
-#: diff.c:5829
+#: diff.c:5906
#, c-format
msgid ""
"you may want to set your %s variable to at least %d and retry the command."
msgstr "задайте променливата „%s“ да е поне %d и отново изпълнете командата."
-#: dir.c:576
+#: dir.c:538
#, c-format
msgid "pathspec '%s' did not match any file(s) known to git"
msgstr "пътят „%s“ не съвпада с никой файл в git"
-#: dir.c:965
+#: dir.c:927
#, c-format
msgid "cannot use %s as an exclude file"
msgstr "„%s“ не може да се ползва за игнорираните файлове (като gitignore)"
-#: dir.c:1880
+#: dir.c:1842
#, c-format
msgid "could not open directory '%s'"
msgstr "директорията „%s“ не може да бъде отворена"
-#: dir.c:2122
+#: dir.c:2084
msgid "failed to get kernel name and information"
msgstr "името и версията на ядрото не бяха получени"
-#: dir.c:2246
+#: dir.c:2208
msgid "untracked cache is disabled on this system or location"
msgstr ""
"кешът за неследените файлове е изключен на тази система или местоположение"
-#: dir.c:3047
+#: dir.c:3009
#, c-format
msgid "index file corrupt in repo %s"
msgstr "файлът с индекса е повреден в хранилището „%s“"
-#: dir.c:3092 dir.c:3097
+#: dir.c:3054 dir.c:3059
#, c-format
msgid "could not create directories for %s"
msgstr "директориите за „%s“ не може да бъдат създадени"
-#: dir.c:3126
+#: dir.c:3088
#, c-format
msgid "could not migrate git directory from '%s' to '%s'"
msgstr "директорията на git не може да се мигрира от „%s“ до „%s“"
@@ -2525,239 +2605,243 @@ msgstr "Липсва адрес за отдалеченото хранилище
msgid "git fetch-pack: expected shallow list"
msgstr "git fetch-pack: очаква се плитък списък"
-#: fetch-pack.c:163
+#: fetch-pack.c:154
+msgid "git fetch-pack: expected a flush packet after shallow list"
+msgstr "git fetch-pack: след плитък списък се очаква изчистващ пакет „flush“"
+
+#: fetch-pack.c:165
msgid "git fetch-pack: expected ACK/NAK, got a flush packet"
msgstr ""
"git fetch-pack: очаква се „ACK“/„NAK“, а бе получен изчистващ пакет „flush“"
-#: fetch-pack.c:183
+#: fetch-pack.c:185
#, c-format
msgid "git fetch-pack: expected ACK/NAK, got '%s'"
msgstr "git fetch-pack: очаква се „ACK“/„NAK“, а бе получено „%s“"
-#: fetch-pack.c:253
+#: fetch-pack.c:256
msgid "--stateless-rpc requires multi_ack_detailed"
msgstr "опцията „--stateless-rpc“ изисква „multi_ack_detailed“"
-#: fetch-pack.c:347 fetch-pack.c:1277
+#: fetch-pack.c:358 fetch-pack.c:1264
#, c-format
msgid "invalid shallow line: %s"
msgstr "неправилен плитък ред: „%s“"
-#: fetch-pack.c:353 fetch-pack.c:1283
+#: fetch-pack.c:364 fetch-pack.c:1271
#, c-format
msgid "invalid unshallow line: %s"
msgstr "неправилен неплитък ред: „%s“"
-#: fetch-pack.c:355 fetch-pack.c:1285
+#: fetch-pack.c:366 fetch-pack.c:1273
#, c-format
msgid "object not found: %s"
msgstr "обектът „%s“ липсва"
-#: fetch-pack.c:358 fetch-pack.c:1288
+#: fetch-pack.c:369 fetch-pack.c:1276
#, c-format
msgid "error in object: %s"
msgstr "грешка в обекта: „%s“"
-#: fetch-pack.c:360 fetch-pack.c:1290
+#: fetch-pack.c:371 fetch-pack.c:1278
#, c-format
msgid "no shallow found: %s"
msgstr "не е открит плитък обект: %s"
-#: fetch-pack.c:363 fetch-pack.c:1293
+#: fetch-pack.c:374 fetch-pack.c:1282
#, c-format
msgid "expected shallow/unshallow, got %s"
msgstr "очаква се плитък или не обект, а бе получено: „%s“"
-#: fetch-pack.c:404
+#: fetch-pack.c:415
#, c-format
msgid "got %s %d %s"
msgstr "получено бе %s %d %s"
-#: fetch-pack.c:421
+#: fetch-pack.c:432
#, c-format
msgid "invalid commit %s"
msgstr "неправилно подаване: „%s“"
-#: fetch-pack.c:452
+#: fetch-pack.c:463
msgid "giving up"
msgstr "преустановяване"
-#: fetch-pack.c:464 progress.c:229
+#: fetch-pack.c:475 progress.c:229
msgid "done"
msgstr "действието завърши"
-#: fetch-pack.c:476
+#: fetch-pack.c:487
#, c-format
msgid "got %s (%d) %s"
msgstr "получено бе %s (%d) %s"
-#: fetch-pack.c:522
+#: fetch-pack.c:533
#, c-format
msgid "Marking %s as complete"
msgstr "Отбелязване на „%s“ като пълно"
-#: fetch-pack.c:764
+#: fetch-pack.c:740
#, c-format
msgid "already have %s (%s)"
msgstr "вече има „%s“ (%s)"
-#: fetch-pack.c:803
+#: fetch-pack.c:779
msgid "fetch-pack: unable to fork off sideband demultiplexer"
msgstr "fetch-pack: не може да се създаде процес за демултиплексора"
-#: fetch-pack.c:811
+#: fetch-pack.c:787
msgid "protocol error: bad pack header"
msgstr "протоколна грешка: неправилна заглавна част на пакет"
-#: fetch-pack.c:879
+#: fetch-pack.c:855
#, c-format
msgid "fetch-pack: unable to fork off %s"
msgstr "fetch-pack: не може да се създаде процес за „%s“"
-#: fetch-pack.c:895
+#: fetch-pack.c:871
#, c-format
msgid "%s failed"
msgstr "неуспешно изпълнение на „%s“"
-#: fetch-pack.c:897
+#: fetch-pack.c:873
msgid "error in sideband demultiplexer"
msgstr "грешка в демултиплексора"
-#: fetch-pack.c:926
+#: fetch-pack.c:902
msgid "Server does not support shallow clients"
msgstr "Сървърът не поддържа плитки клиенти"
-#: fetch-pack.c:930
+#: fetch-pack.c:906
msgid "Server supports multi_ack_detailed"
msgstr "Сървърът поддържа „multi_ack_detailed“"
-#: fetch-pack.c:933
+#: fetch-pack.c:909
msgid "Server supports no-done"
msgstr "Сървърът поддържа „no-done“"
-#: fetch-pack.c:939
+#: fetch-pack.c:915
msgid "Server supports multi_ack"
msgstr "Сървърът поддържа „multi_ack“"
-#: fetch-pack.c:943
+#: fetch-pack.c:919
msgid "Server supports side-band-64k"
msgstr "Сървърът поддържа „side-band-64k“"
-#: fetch-pack.c:947
+#: fetch-pack.c:923
msgid "Server supports side-band"
msgstr "Сървърът поддържа „side-band“"
-#: fetch-pack.c:951
+#: fetch-pack.c:927
msgid "Server supports allow-tip-sha1-in-want"
msgstr "Сървърът поддържа „allow-tip-sha1-in-want“"
-#: fetch-pack.c:955
+#: fetch-pack.c:931
msgid "Server supports allow-reachable-sha1-in-want"
msgstr "Сървърът поддържа „allow-reachable-sha1-in-want“"
-#: fetch-pack.c:965
+#: fetch-pack.c:941
msgid "Server supports ofs-delta"
msgstr "Сървърът поддържа „ofs-delta“"
-#: fetch-pack.c:971 fetch-pack.c:1158
+#: fetch-pack.c:947 fetch-pack.c:1140
msgid "Server supports filter"
msgstr "Сървърът поддържа филтри"
-#: fetch-pack.c:979
+#: fetch-pack.c:955
#, c-format
msgid "Server version is %.*s"
msgstr "Версията на сървъра е: %.*s"
-#: fetch-pack.c:985
+#: fetch-pack.c:961
msgid "Server does not support --shallow-since"
msgstr "Сървърът не поддържа опцията „--shallow-since“"
-#: fetch-pack.c:989
+#: fetch-pack.c:965
msgid "Server does not support --shallow-exclude"
msgstr "Сървърът не поддържа опцията „--shallow-exclude“"
-#: fetch-pack.c:991
+#: fetch-pack.c:967
msgid "Server does not support --deepen"
msgstr "Сървърът не поддържа опцията „--deepen“"
-#: fetch-pack.c:1008
+#: fetch-pack.c:984
msgid "no common commits"
msgstr "няма общи подавания"
-#: fetch-pack.c:1020 fetch-pack.c:1418
+#: fetch-pack.c:996 fetch-pack.c:1419
msgid "git fetch-pack: fetch failed."
msgstr "git fetch-pack: неуспешно доставяне."
-#: fetch-pack.c:1153
+#: fetch-pack.c:1134
msgid "Server does not support shallow requests"
msgstr "Сървърът не поддържа плитки заявки"
-#: fetch-pack.c:1199
+#: fetch-pack.c:1184
#, c-format
msgid "error reading section header '%s'"
msgstr "грешка при прочитане на заглавната част на раздел „%s“"
-#: fetch-pack.c:1205
+#: fetch-pack.c:1190
#, c-format
msgid "expected '%s', received '%s'"
msgstr "очаква се „%s“, а бе получено „%s“"
-#: fetch-pack.c:1244
+#: fetch-pack.c:1229
#, c-format
msgid "unexpected acknowledgment line: '%s'"
msgstr "неочакван ред за потвърждение: „%s“"
-#: fetch-pack.c:1249
+#: fetch-pack.c:1234
#, c-format
msgid "error processing acks: %d"
msgstr "грешка при обработка на потвържденията: %d"
-#: fetch-pack.c:1259
+#: fetch-pack.c:1244
msgid "expected packfile to be sent after 'ready'"
msgstr ""
"очакваше се пакетният файл да бъде изпратен след отговор за готовност (ready)"
-#: fetch-pack.c:1261
+#: fetch-pack.c:1246
msgid "expected no other sections to be sent after no 'ready'"
msgstr ""
"очакваше се след липса на отговор за готовност (ready) да не се се пращат "
"други раздели"
-#: fetch-pack.c:1298
+#: fetch-pack.c:1287
#, c-format
msgid "error processing shallow info: %d"
msgstr "грешка при обработка на информация за дълбочината/плиткостта: %d"
-#: fetch-pack.c:1314
+#: fetch-pack.c:1308
#, c-format
msgid "expected wanted-ref, got '%s'"
msgstr "очаква се искан указател, а бе получено: „%s“"
-#: fetch-pack.c:1324
+#: fetch-pack.c:1318
#, c-format
msgid "unexpected wanted-ref: '%s'"
msgstr "неочакван искан указател: „%s“"
-#: fetch-pack.c:1328
+#: fetch-pack.c:1322
#, c-format
msgid "error processing wanted refs: %d"
msgstr "грешка при обработката на исканите указатели: %d"
-#: fetch-pack.c:1642
+#: fetch-pack.c:1646
msgid "no matching remote head"
msgstr "не може да бъде открит подходящ връх от отдалеченото хранилище"
-#: fetch-pack.c:1660 builtin/clone.c:664
+#: fetch-pack.c:1664 builtin/clone.c:671
msgid "remote did not send all necessary objects"
msgstr "отдалеченото хранилище не изпрати всички необходими обекти."
-#: fetch-pack.c:1686
+#: fetch-pack.c:1690
#, c-format
msgid "no such remote ref %s"
msgstr "такъв отдалечен указател няма: %s"
-#: fetch-pack.c:1689
+#: fetch-pack.c:1693
#, c-format
msgid "Server does not allow request for unadvertised object %s"
msgstr "Сървърът не позволява заявка за необявен „%s“"
@@ -2785,8 +2869,8 @@ msgstr "прескачане на неправилния цвят „%.*s“ в
msgid "'%s': unable to read %s"
msgstr "„%s“: файлът сочен от „%s“ не може да бъде прочетен"
-#: grep.c:2130 setup.c:164 builtin/clone.c:410 builtin/diff.c:81
-#: builtin/rm.c:134
+#: grep.c:2130 setup.c:164 builtin/clone.c:411 builtin/diff.c:82
+#: builtin/rm.c:135
#, c-format
msgid "failed to stat '%s'"
msgstr "не може да бъде получена информация чрез „stat“ за „%s“"
@@ -2848,41 +2932,41 @@ msgstr "Команди от ниско ниво/Синхронизация на
msgid "Low-level Commands / Internal Helpers"
msgstr "Команди от ниско ниво/Допълнителни инструменти"
-#: help.c:296
+#: help.c:298
#, c-format
msgid "available git commands in '%s'"
msgstr "налични команди на git от „%s“"
-#: help.c:303
+#: help.c:305
msgid "git commands available from elsewhere on your $PATH"
msgstr "команди на git от други директории от „$PATH“"
-#: help.c:312
+#: help.c:314
msgid "These are common Git commands used in various situations:"
msgstr "Това са най-често използваните команди на Git:"
-#: help.c:361 git.c:90
+#: help.c:363 git.c:90
#, c-format
msgid "unsupported command listing type '%s'"
msgstr "неподдържан списък от команди „%s“"
-#: help.c:408
+#: help.c:410
msgid "The common Git guides are:"
msgstr "Популярните въведения в Git са:"
-#: help.c:517
+#: help.c:519
msgid "See 'git help <command>' to read about a specific subcommand"
msgstr "За повече информация за КОМАНДА изпълнете „git help КОМАНДА“"
-#: help.c:522
+#: help.c:524
msgid "External commands"
msgstr "Външни команди"
-#: help.c:530
+#: help.c:539
msgid "Command aliases"
msgstr "Псевдоними на командите"
-#: help.c:594
+#: help.c:603
#, c-format
msgid ""
"'%s' appears to be a git command, but we were not\n"
@@ -2891,36 +2975,36 @@ msgstr ""
"Изглежда, че „%s“ е команда на git, но тя не може да\n"
"бъде изпълнена. Вероятно пакетът „git-%s“ е повреден."
-#: help.c:653
+#: help.c:662
msgid "Uh oh. Your system reports no Git commands at all."
msgstr "Странно, изглежда, че на системата ви няма нито една команда на git."
-#: help.c:675
+#: help.c:684
#, c-format
msgid "WARNING: You called a Git command named '%s', which does not exist."
msgstr ""
"ПРЕДУПРЕЖДЕНИЕ: Пробвахте да изпълните команда на Git на име „%s“, а такава "
"не съществува."
-#: help.c:680
+#: help.c:689
#, c-format
msgid "Continuing under the assumption that you meant '%s'."
msgstr ""
"Изпълнението автоматично продължава, като се счита, че имате предвид „%s“."
-#: help.c:685
+#: help.c:694
#, c-format
msgid "Continuing in %0.1f seconds, assuming that you meant '%s'."
msgstr ""
"Изпълнението автоматично ще продължи след %0.1f сек., като се счита, че "
"имате предвид „%s“."
-#: help.c:693
+#: help.c:702
#, c-format
msgid "git: '%s' is not a git command. See 'git --help'."
msgstr "git: „%s“ не е команда на git. Погледнете изхода от „git --help“."
-#: help.c:697
+#: help.c:706
msgid ""
"\n"
"The most similar command is"
@@ -2934,16 +3018,16 @@ msgstr[1] ""
"\n"
"Най-близките команди са"
-#: help.c:712
+#: help.c:721
msgid "git version [<options>]"
msgstr "git version [ОПЦИЯ…]"
-#: help.c:780
+#: help.c:789
#, c-format
msgid "%s: %s - %s"
msgstr "%s: %s — %s"
-#: help.c:784
+#: help.c:793
msgid ""
"\n"
"Did you mean this?"
@@ -3014,20 +3098,20 @@ msgstr "не може да се ползва празно име като иде
msgid "name consists only of disallowed characters: %s"
msgstr "името съдържа само непозволени знаци: „%s“"
-#: ident.c:419 builtin/commit.c:606
+#: ident.c:419 builtin/commit.c:608
#, c-format
msgid "invalid date format: %s"
msgstr "неправилен формат на дата: %s"
-#: list-objects-filter-options.c:35
+#: list-objects-filter-options.c:36
msgid "multiple filter-specs cannot be combined"
msgstr "не може да комбинирате множество филтри"
#: list-objects-filter-options.c:58
-msgid "only 'tree:0' is supported"
-msgstr "поддържа се единствено „tree:0“"
+msgid "expected 'tree:<depth>'"
+msgstr "очаква се „tree:ДЪЛБОЧИНА“"
-#: list-objects-filter-options.c:137
+#: list-objects-filter-options.c:152
msgid "cannot change partial clone promisor remote"
msgstr "не може да промените хранилището-гарант на непълно хранилище"
@@ -3059,102 +3143,102 @@ msgstr "Файлът-ключалка „%s.lock“ не може да бъде
msgid "failed to read the cache"
msgstr "кешът не може да бъде прочетен"
-#: merge.c:107 rerere.c:720 builtin/am.c:1899 builtin/am.c:1933
-#: builtin/checkout.c:387 builtin/checkout.c:708 builtin/clone.c:764
+#: merge.c:107 rerere.c:720 builtin/am.c:1884 builtin/am.c:1918
+#: builtin/checkout.c:416 builtin/checkout.c:745 builtin/clone.c:771
msgid "unable to write new index file"
msgstr "неуспешно записване на новия индекс"
-#: merge-recursive.c:323
+#: merge-recursive.c:332
msgid "(bad commit)\n"
msgstr "(лошо подаване)\n"
-#: merge-recursive.c:345
+#: merge-recursive.c:355
#, c-format
msgid "add_cacheinfo failed for path '%s'; merge aborting."
msgstr ""
"неуспешно изпълнение на „add_cacheinfo“ за пътя „%s“. Сливането е "
"преустановено."
-#: merge-recursive.c:353
+#: merge-recursive.c:364
#, c-format
msgid "add_cacheinfo failed to refresh for path '%s'; merge aborting."
msgstr ""
"неуспешно изпълнение на „add_cacheinfo“ за обновяването на пътя „%s“. "
"Сливането е преустановено."
-#: merge-recursive.c:435
+#: merge-recursive.c:447
msgid "error building trees"
msgstr "грешка при изграждане на дърветата"
-#: merge-recursive.c:906
+#: merge-recursive.c:902
#, c-format
msgid "failed to create path '%s'%s"
msgstr "грешка при създаването на пътя „%s“%s"
-#: merge-recursive.c:917
+#: merge-recursive.c:913
#, c-format
msgid "Removing %s to make room for subdirectory\n"
msgstr "Изтриване на „%s“, за да се освободи място за поддиректория\n"
-#: merge-recursive.c:931 merge-recursive.c:950
+#: merge-recursive.c:927 merge-recursive.c:946
msgid ": perhaps a D/F conflict?"
msgstr ": възможно е да има конфликт директория/файл."
-#: merge-recursive.c:940
+#: merge-recursive.c:936
#, c-format
msgid "refusing to lose untracked file at '%s'"
msgstr ""
"преустановяване на действието, за да не се изтрие неследеният файл „%s“"
-#: merge-recursive.c:982 builtin/cat-file.c:39
+#: merge-recursive.c:978 builtin/cat-file.c:40
#, c-format
msgid "cannot read object %s '%s'"
msgstr "обектът „%s“ (%s) не може да бъде прочетен"
-#: merge-recursive.c:984
+#: merge-recursive.c:980
#, c-format
msgid "blob expected for %s '%s'"
msgstr "обектът „%s“ (%s) се очакваше да е BLOB, а не е"
-#: merge-recursive.c:1008
+#: merge-recursive.c:1004
#, c-format
msgid "failed to open '%s': %s"
msgstr "„%s“ не може да се отвори: %s"
-#: merge-recursive.c:1019
+#: merge-recursive.c:1015
#, c-format
msgid "failed to symlink '%s': %s"
msgstr "неуспешно създаване на символната връзка „%s“: %s"
-#: merge-recursive.c:1024
+#: merge-recursive.c:1020
#, c-format
msgid "do not know what to do with %06o %s '%s'"
msgstr ""
"не е ясно какво да се прави с обекта „%2$s“ (%3$s) с права за достъп „%1$06o“"
-#: merge-recursive.c:1212
+#: merge-recursive.c:1211
#, c-format
msgid "Failed to merge submodule %s (not checked out)"
msgstr "Неуспешно сливане на подмодула „%s“ (не е изтеглен)"
-#: merge-recursive.c:1219
+#: merge-recursive.c:1218
#, c-format
msgid "Failed to merge submodule %s (commits not present)"
msgstr "Неуспешно сливане на подмодула „%s“ (няма подавания)"
-#: merge-recursive.c:1226
+#: merge-recursive.c:1225
#, c-format
msgid "Failed to merge submodule %s (commits don't follow merge-base)"
msgstr ""
"Подмодулът „%s“ не може да бъде слят (базата за сливане не предшества "
"подаванията)"
-#: merge-recursive.c:1234 merge-recursive.c:1246
+#: merge-recursive.c:1233 merge-recursive.c:1245
#, c-format
msgid "Fast-forwarding submodule %s to the following commit:"
msgstr "Превъртане на подмодула „%s“ до следното подаване:"
-#: merge-recursive.c:1237 merge-recursive.c:1249
+#: merge-recursive.c:1236 merge-recursive.c:1248
#, c-format
msgid "Fast-forwarding submodule %s"
msgstr "Превъртане на подмодула „%s“"
@@ -3198,26 +3282,26 @@ msgstr ""
msgid "Failed to merge submodule %s (multiple merges found)"
msgstr "Неуспешно сливане на подмодула „%s“ (открити са множество сливания)"
-#: merge-recursive.c:1358
+#: merge-recursive.c:1361
msgid "Failed to execute internal merge"
msgstr "Неуспешно вътрешно сливане"
-#: merge-recursive.c:1363
+#: merge-recursive.c:1366
#, c-format
msgid "Unable to add %s to database"
msgstr "„%s“ не може да се добави в базата с данни"
-#: merge-recursive.c:1395
+#: merge-recursive.c:1398
#, c-format
msgid "Auto-merging %s"
msgstr "Автоматично сливане на „%s“"
-#: merge-recursive.c:1416
+#: merge-recursive.c:1419
#, c-format
msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
msgstr "Грешка: за да не се изтрие неследеният файл „%s“, се записва в „%s“."
-#: merge-recursive.c:1483
+#: merge-recursive.c:1486
#, c-format
msgid ""
"CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -3226,7 +3310,7 @@ msgstr ""
"КОНФЛИКТ (%s/изтриване): „%s“ е изтрит в %s, а „%s“ в %s. Версия %s на „%s“ "
"е оставена в дървото."
-#: merge-recursive.c:1488
+#: merge-recursive.c:1491
#, c-format
msgid ""
"CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -3235,7 +3319,7 @@ msgstr ""
"КОНФЛИКТ (%s/изтриване): „%s“ е изтрит в %s, а „%s“ е преименуван на „%s“ в "
"%s. Версия %s на „%s“ е оставена в дървото."
-#: merge-recursive.c:1495
+#: merge-recursive.c:1498
#, c-format
msgid ""
"CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -3244,7 +3328,7 @@ msgstr ""
"КОНФЛИКТ (%s/изтриване): „%s“ е изтрит в %s, а „%s“ в %s. Версия %s на „%s“ "
"е оставена в дървото: %s."
-#: merge-recursive.c:1500
+#: merge-recursive.c:1503
#, c-format
msgid ""
"CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -3253,33 +3337,45 @@ msgstr ""
"КОНФЛИКТ (%s/изтриване): „%s“ е изтрит в %s, а „%s“ е преименуван на „%s“ в "
"%s. Версия %s на „%s“ е оставена в дървото: %s."
-#: merge-recursive.c:1534
+#: merge-recursive.c:1537
msgid "rename"
msgstr "преименуване"
-#: merge-recursive.c:1534
+#: merge-recursive.c:1537
msgid "renamed"
msgstr "преименуван"
-#: merge-recursive.c:1588 merge-recursive.c:1737 merge-recursive.c:2369
-#: merge-recursive.c:3124
+#: merge-recursive.c:1633 merge-recursive.c:2481 merge-recursive.c:3213
#, c-format
msgid "Refusing to lose dirty file at %s"
msgstr "Преустановяване на действието, за да не се изгуби промененият „%s“"
-#: merge-recursive.c:1602
+#: merge-recursive.c:1643
+#, c-format
+msgid "Refusing to lose untracked file at %s, even though it's in the way."
+msgstr ""
+"Отказ да се загуби неследеният файл „%s“, защото е на място, където пречи."
+
+#: merge-recursive.c:1706
+#, c-format
+msgid "CONFLICT (rename/add): Rename %s->%s in %s. Added %s in %s"
+msgstr ""
+"КОНФЛИКТ (преименуване/добавяне): „%s“ е преименуван на „%s“ в клон „%s“, а "
+"„%s“ е добавен в „%s“"
+
+#: merge-recursive.c:1734
#, c-format
msgid "%s is a directory in %s adding as %s instead"
msgstr "„%s“ е директория в „%s“, затова се добавя като „%s“"
-#: merge-recursive.c:1607
+#: merge-recursive.c:1739
#, c-format
msgid "Refusing to lose untracked file at %s; adding as %s instead"
msgstr ""
"Преустановяване на действието, за да не се изгуби неследеният файл „%s“. "
"Вместо него се добавя „%s“"
-#: merge-recursive.c:1633
+#: merge-recursive.c:1759
#, c-format
msgid ""
"CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
@@ -3288,29 +3384,18 @@ msgstr ""
"КОНФЛИКТ (преименуване/преименуване): „%s“ е преименуван на „%s“ в клон "
"„%s“, а „%s“ е преименуван на „%s“ в „%s“/%s."
-#: merge-recursive.c:1638
+#: merge-recursive.c:1764
msgid " (left unresolved)"
msgstr " (некоригиран конфликт)"
-#: merge-recursive.c:1699
+#: merge-recursive.c:1868
#, c-format
msgid "CONFLICT (rename/rename): Rename %s->%s in %s. Rename %s->%s in %s"
msgstr ""
"КОНФЛИКТ (преименуване/преименуване): „%s“ е преименуван на „%s“ в клон "
"„%s“, а „%s“ е преименуван на „%s“ в „%s“"
-#: merge-recursive.c:1734
-#, c-format
-msgid "Renaming %s to %s and %s to %s instead"
-msgstr "Преименуване на „%s“ на „%s“, а „%s“ на „%s“"
-
-#: merge-recursive.c:1746
-#, c-format
-msgid "Refusing to lose untracked file at %s, even though it's in the way."
-msgstr ""
-"Отказ да се загуби неследеният файл „%s“, защото е на място, където пречи."
-
-#: merge-recursive.c:1952
+#: merge-recursive.c:2064
#, c-format
msgid ""
"CONFLICT (directory rename split): Unclear where to place %s because "
@@ -3321,7 +3406,7 @@ msgstr ""
"постави „%s“, защото няколко нови директории поделят съдържанието на "
"директория „%s“, като никоя не съдържа мнозинство от файловете ѝ."
-#: merge-recursive.c:1984
+#: merge-recursive.c:2096
#, c-format
msgid ""
"CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
@@ -3330,7 +3415,7 @@ msgstr ""
"КОНФЛИКТ (косвено преименуване на директория): следният файл или директория "
"„%s“ не позволяват косвеното преименуване на следния път/ища: %s."
-#: merge-recursive.c:1994
+#: merge-recursive.c:2106
#, c-format
msgid ""
"CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
@@ -3340,7 +3425,7 @@ msgstr ""
"съответства на „%s“. Косвено преименуване на директория води до поставянето "
"на тези пътища там: %s."
-#: merge-recursive.c:2086
+#: merge-recursive.c:2198
#, c-format
msgid ""
"CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory %s-"
@@ -3349,7 +3434,7 @@ msgstr ""
"КОНФЛИКТ (преименуване/преименуване): „%s“ е преименуван на „%s“ в клон "
"„%s“, а „%s“ е преименуван на „%s“ в „%s“"
-#: merge-recursive.c:2331
+#: merge-recursive.c:2443
#, c-format
msgid ""
"WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
@@ -3358,89 +3443,82 @@ msgstr ""
"ПРЕДУПРЕЖДЕНИЕ: прескачане на преименуването на „%s“ на „%s“ в „%s“, защото "
"„%s“ също е с променено име."
-#: merge-recursive.c:2737
-#, c-format
-msgid "CONFLICT (rename/add): Rename %s->%s in %s. %s added in %s"
-msgstr ""
-"КОНФЛИКТ (преименуване/добавяне): „%s“ е преименуван на „%s“ в клон „%s“, а "
-"„%s“ е добавен в „%s“"
-
-#: merge-recursive.c:2763
-#, c-format
-msgid "Adding merged %s"
-msgstr "Добавяне на слетия „%s“"
-
-#: merge-recursive.c:2770 merge-recursive.c:3127
-#, c-format
-msgid "Adding as %s instead"
-msgstr "Добавяне като „%s“"
-
-#: merge-recursive.c:2934
+#: merge-recursive.c:3022
#, c-format
msgid "cannot read object %s"
msgstr "обектът „%s“ не може да се прочете"
-#: merge-recursive.c:2937
+#: merge-recursive.c:3025
#, c-format
msgid "object %s is not a blob"
msgstr "обектът „%s“ не е BLOB"
-#: merge-recursive.c:3006
+#: merge-recursive.c:3094
msgid "modify"
msgstr "промяна"
-#: merge-recursive.c:3006
+#: merge-recursive.c:3094
msgid "modified"
msgstr "променен"
-#: merge-recursive.c:3017
+#: merge-recursive.c:3105
msgid "content"
msgstr "съдържание"
-#: merge-recursive.c:3024
+#: merge-recursive.c:3112
msgid "add/add"
msgstr "добавяне/добавяне"
-#: merge-recursive.c:3071
+#: merge-recursive.c:3160
#, c-format
msgid "Skipped %s (merged same as existing)"
msgstr "Прескачане на „%s“ (слетият резултат е идентичен със сегашния)"
-#: merge-recursive.c:3093 git-submodule.sh:858
+#: merge-recursive.c:3182 git-submodule.sh:861
msgid "submodule"
msgstr "ПОДМОДУЛ"
-#: merge-recursive.c:3094
+#: merge-recursive.c:3183
#, c-format
msgid "CONFLICT (%s): Merge conflict in %s"
msgstr "КОНФЛИКТ (%s): Конфликт при сливане на „%s“"
#: merge-recursive.c:3216
#, c-format
+msgid "Adding as %s instead"
+msgstr "Добавяне като „%s“"
+
+#: merge-recursive.c:3319
+#, c-format
msgid "Removing %s"
msgstr "Изтриване на „%s“"
-#: merge-recursive.c:3242
+#: merge-recursive.c:3345
msgid "file/directory"
msgstr "файл/директория"
-#: merge-recursive.c:3248
+#: merge-recursive.c:3351
msgid "directory/file"
msgstr "директория/файл"
-#: merge-recursive.c:3255
+#: merge-recursive.c:3358
#, c-format
msgid "CONFLICT (%s): There is a directory with name %s in %s. Adding %s as %s"
msgstr ""
"КОНФЛИКТ (%s): Съществува директория на име „%s“ в „%s“. Добавяне на „%s“ "
"като „%s“"
-#: merge-recursive.c:3264
+#: merge-recursive.c:3367
#, c-format
msgid "Adding %s"
msgstr "Добавяне на „%s“"
-#: merge-recursive.c:3300
+#: merge-recursive.c:3376
+#, c-format
+msgid "CONFLICT (add/add): Merge conflict in %s"
+msgstr "КОНФЛИКТ (добавяне/добавяне): Конфликт при сливане на „%s“"
+
+#: merge-recursive.c:3417
#, c-format
msgid ""
"Your local changes to the following files would be overwritten by merge:\n"
@@ -3449,36 +3527,36 @@ msgstr ""
"Сливането ще презапише локалните промени на тези файлове:\n"
" %s"
-#: merge-recursive.c:3311
+#: merge-recursive.c:3428
msgid "Already up to date!"
msgstr "Вече е обновено!"
-#: merge-recursive.c:3320
+#: merge-recursive.c:3437
#, c-format
msgid "merging of trees %s and %s failed"
msgstr "неуспешно сливане на дърветата „%s“ и „%s“"
-#: merge-recursive.c:3419
+#: merge-recursive.c:3536
msgid "Merging:"
msgstr "Сливане:"
-#: merge-recursive.c:3432
+#: merge-recursive.c:3549
#, c-format
msgid "found %u common ancestor:"
msgid_plural "found %u common ancestors:"
msgstr[0] "открит е %u общ предшественик:"
msgstr[1] "открити са %u общи предшественици:"
-#: merge-recursive.c:3471
+#: merge-recursive.c:3588
msgid "merge returned no commit"
msgstr "сливането не върна подаване"
-#: merge-recursive.c:3537
+#: merge-recursive.c:3654
#, c-format
msgid "Could not parse object '%s'"
msgstr "Неуспешен анализ на обекта „%s“"
-#: merge-recursive.c:3553 builtin/merge.c:691 builtin/merge.c:849
+#: merge-recursive.c:3670 builtin/merge.c:692 builtin/merge.c:850
msgid "Unable to write index."
msgstr "Индексът не може да бъде прочетен"
@@ -3606,22 +3684,22 @@ msgstr "индексът на пакета „%s“ не може да бъде
msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
msgstr "неправилно отместване на обект за oid[%d] = %s: %<PRIx64> != %<PRIx64>"
-#: name-hash.c:532
+#: name-hash.c:531
#, c-format
msgid "unable to create lazy_dir thread: %s"
msgstr "не може да се създаде нишка за директории: %s"
-#: name-hash.c:554
+#: name-hash.c:553
#, c-format
msgid "unable to create lazy_name thread: %s"
msgstr "не може да се създаде нишка за имена: %s"
-#: name-hash.c:560
+#: name-hash.c:559
#, c-format
msgid "unable to join lazy_name thread: %s"
msgstr "не може да се изчака нишка за имена: %s"
-#: notes-merge.c:275
+#: notes-merge.c:277
#, c-format
msgid ""
"You have not concluded your previous notes merge (%s exists).\n"
@@ -3638,23 +3716,23 @@ msgstr ""
"\n"
" git notes merge --abort"
-#: notes-merge.c:282
+#: notes-merge.c:284
#, c-format
msgid "You have not concluded your notes merge (%s exists)."
msgstr ""
"Не сте завършили сливането на бележките. (Указателят „%s“ съществува)."
-#: notes-utils.c:45
+#: notes-utils.c:46
msgid "Cannot commit uninitialized/unreferenced notes tree"
msgstr ""
"Неинициализирано или нереферирано дърво за бележки не може да бъде подадено"
-#: notes-utils.c:104
+#: notes-utils.c:105
#, c-format
msgid "Bad notes.rewriteMode value: '%s'"
msgstr "Неправилна стойност за „notes.rewriteMode“: „%s“"
-#: notes-utils.c:114
+#: notes-utils.c:115
#, c-format
msgid "Refusing to rewrite notes in %s (outside of refs/notes/)"
msgstr ""
@@ -3664,7 +3742,7 @@ msgstr ""
#. the environment variable, the second %s is
#. its value.
#.
-#: notes-utils.c:144
+#: notes-utils.c:145
#, c-format
msgid "Bad %s value: '%s'"
msgstr "Зададена е лоша стойност на променливата „%s“: „%s“"
@@ -3674,50 +3752,111 @@ msgstr "Зададена е лоша стойност на променлива
msgid "invalid object type \"%s\""
msgstr "неправилен вид обект: „%s“"
-#: object.c:173
+#: object.c:174
#, c-format
msgid "object %s is a %s, not a %s"
msgstr "обектът „%s“ е %s, а не %s"
-#: object.c:233
+#: object.c:234
#, c-format
msgid "object %s has unknown type id %d"
msgstr "обектът „%s“ е непознат вид: %d"
-#: object.c:246
+#: object.c:247
#, c-format
msgid "unable to parse object: %s"
msgstr "обектът „%s“ не може да бъде анализиран"
-#: object.c:266 object.c:277
+#: object.c:267 object.c:278
#, c-format
-msgid "sha1 mismatch %s"
-msgstr "разлика в SHA1: „%s“"
+msgid "hash mismatch %s"
+msgstr "разлика в контролната сума: „%s“"
#: packfile.c:607
msgid "offset before end of packfile (broken .idx?)"
msgstr ""
"отместване преди края на пакетния файл (възможно е индексът да е повреден)"
-#: packfile.c:1864
+#: packfile.c:1870
#, c-format
msgid "offset before start of pack index for %s (corrupt index?)"
msgstr ""
"отместване преди началото на индекса на пакетния файл „%s“ (възможно е "
"индексът да е повреден)"
-#: packfile.c:1868
+#: packfile.c:1874
#, c-format
msgid "offset beyond end of pack index for %s (truncated index?)"
msgstr ""
"отместване преди края на индекса на пакетния файл „%s“ (възможно е индексът "
"да е отрязан)"
-#: parse-options.c:672
+#: parse-options.c:35
+#, c-format
+msgid "%s requires a value"
+msgstr "опцията „%s“ изисква аргумент"
+
+#: parse-options.c:69
+#, c-format
+msgid "%s is incompatible with %s"
+msgstr "опциите „%s“ и „%s“ са несъвместими"
+
+#: parse-options.c:74
+#, c-format
+msgid "%s : incompatible with something else"
+msgstr "опцията „%s“ е несъвместима с нещо"
+
+#: parse-options.c:88 parse-options.c:92 parse-options.c:260
+#, c-format
+msgid "%s takes no value"
+msgstr "опцията „%s“ не приема аргументи"
+
+#: parse-options.c:90
+#, c-format
+msgid "%s isn't available"
+msgstr "опцията „%s“ не е налична"
+
+#: parse-options.c:178
+#, c-format
+msgid "%s expects a numerical value"
+msgstr "опцията „%s“ очаква число за аргумент"
+
+#: parse-options.c:194
+#, c-format
+msgid "%s expects a non-negative integer value with an optional k/m/g suffix"
+msgstr ""
+"„%s“ очаква неотрицателно цяло число, евентуално със суфикс „k“/„m“/„g“"
+
+#: parse-options.c:322
+#, c-format
+msgid "ambiguous option: %s (could be --%s%s or --%s%s)"
+msgstr "нееднозначна опция: „%s“ (може да е „--%s%s“ или „--%s%s“)"
+
+#: parse-options.c:356 parse-options.c:364
+#, c-format
+msgid "did you mean `--%s` (with two dashes ?)"
+msgstr "„--%s“ (с 2 тирета) ли имахте предвид?"
+
+#: parse-options.c:649
+#, c-format
+msgid "unknown option `%s'"
+msgstr "непозната опция: „%s“"
+
+#: parse-options.c:651
+#, c-format
+msgid "unknown switch `%c'"
+msgstr "непознат флаг „%c“"
+
+#: parse-options.c:653
+#, c-format
+msgid "unknown non-ascii option in string: `%s'"
+msgstr "непозната стойност извън „ascii“ в низа: „%s“"
+
+#: parse-options.c:675
msgid "..."
msgstr "…"
-#: parse-options.c:691
+#: parse-options.c:694
#, c-format
msgid "usage: %s"
msgstr "употреба: %s"
@@ -3725,26 +3864,38 @@ msgstr "употреба: %s"
#. TRANSLATORS: the colon here should align with the
#. one in "usage: %s" translation.
#.
-#: parse-options.c:697
+#: parse-options.c:700
#, c-format
msgid " or: %s"
msgstr " или: %s"
-#: parse-options.c:700
+#: parse-options.c:703
#, c-format
msgid " %s"
msgstr " %s"
-#: parse-options.c:739
+#: parse-options.c:742
msgid "-NUM"
msgstr "-ЧИСЛО"
-#: parse-options-cb.c:37
+#: parse-options-cb.c:21
+#, c-format
+msgid "option `%s' expects a numerical value"
+msgstr "опцията „%s“ очаква число за аргумент"
+
+#: parse-options-cb.c:38
#, c-format
msgid "malformed expiration date '%s'"
msgstr "неправилна дата на срок: „%s“"
-#: parse-options-cb.c:109
+#: parse-options-cb.c:51
+#, c-format
+msgid "option `%s' expects \"always\", \"auto\", or \"never\""
+msgstr ""
+"опцията „%s“ изисква някоя от стойностите: „always“ (винаги), "
+"„auto“ (автоматично) или „never“ (никога)"
+
+#: parse-options-cb.c:110
#, c-format
msgid "malformed object name '%s'"
msgstr "неправилно име на обект „%s“"
@@ -3754,29 +3905,29 @@ msgstr "неправилно име на обект „%s“"
msgid "Could not make %s writable by group"
msgstr "Не могат да се дадат права за запис в директорията „%s“ на групата"
-#: pathspec.c:129
+#: pathspec.c:128
msgid "Escape character '\\' not allowed as last character in attr value"
msgstr ""
"Екраниращият знак „\\“не може да е последен знак в стойността на атрибут"
-#: pathspec.c:147
+#: pathspec.c:146
msgid "Only one 'attr:' specification is allowed."
msgstr "Позволено е само едно указване на „attr:“."
-#: pathspec.c:150
+#: pathspec.c:149
msgid "attr spec must not be empty"
msgstr "„attr:“ трябва да указва стойност"
-#: pathspec.c:193
+#: pathspec.c:192
#, c-format
msgid "invalid attribute name %s"
msgstr "неправилно име на атрибут: „%s“"
-#: pathspec.c:258
+#: pathspec.c:257
msgid "global 'glob' and 'noglob' pathspec settings are incompatible"
msgstr "глобалните настройки за пътища „glob“ и „noglob“ са несъвместими"
-#: pathspec.c:265
+#: pathspec.c:264
msgid ""
"global 'literal' pathspec setting is incompatible with all other global "
"pathspec settings"
@@ -3784,46 +3935,46 @@ msgstr ""
"глобалната настройка за дословни пътища „literal“ е несъвместима с всички "
"други глобални настройки за пътища"
-#: pathspec.c:305
+#: pathspec.c:304
msgid "invalid parameter for pathspec magic 'prefix'"
msgstr "неправилен параметър за опцията за магически пътища „prefix“"
-#: pathspec.c:326
+#: pathspec.c:325
#, c-format
msgid "Invalid pathspec magic '%.*s' in '%s'"
msgstr "Неправилна стойност за опцията за магически пътища „%.*s“ в „%s“"
-#: pathspec.c:331
+#: pathspec.c:330
#, c-format
msgid "Missing ')' at the end of pathspec magic in '%s'"
msgstr "Знакът „)“ липсва в опцията за магически пътища в „%s“"
-#: pathspec.c:369
+#: pathspec.c:368
#, c-format
msgid "Unimplemented pathspec magic '%c' in '%s'"
msgstr "Магическите пътища „%c“ са без реализация за „%s“"
-#: pathspec.c:428
+#: pathspec.c:427
#, c-format
msgid "%s: 'literal' and 'glob' are incompatible"
msgstr "%s: опциите „literal“ и „glob“ са несъвместими"
-#: pathspec.c:441
+#: pathspec.c:440
#, c-format
msgid "%s: '%s' is outside repository"
msgstr "%s: „%s“ е извън хранилището"
-#: pathspec.c:515
+#: pathspec.c:514
#, c-format
msgid "'%s' (mnemonic: '%c')"
msgstr "„%s“ (клавиш: „%c“)"
-#: pathspec.c:525
+#: pathspec.c:524
#, c-format
msgid "%s: pathspec magic not supported by this command: %s"
msgstr "%s: магическите пътища не се поддържат от командата „%s“"
-#: pathspec.c:592
+#: pathspec.c:591
#, c-format
msgid "pathspec '%s' is beyond a symbolic link"
msgstr "пътят „%s“ е след символна връзка"
@@ -3832,52 +3983,57 @@ msgstr "пътят „%s“ е след символна връзка"
msgid "flush packet write failed"
msgstr "неуспешно изчистване на буферите при запис на пакет"
-#: pkt-line.c:142 pkt-line.c:228
+#: pkt-line.c:144 pkt-line.c:230
msgid "protocol error: impossibly long line"
msgstr "протоколна грешка: прекалено дълъг ред"
-#: pkt-line.c:158 pkt-line.c:160
+#: pkt-line.c:160 pkt-line.c:162
msgid "packet write with format failed"
msgstr "неуспешен запис на пакет с формат"
-#: pkt-line.c:192
+#: pkt-line.c:194
msgid "packet write failed - data exceeds max packet size"
msgstr ""
"неуспешен запис на пакетен файл — данните надвишават максималният размер на "
"пакет"
-#: pkt-line.c:199 pkt-line.c:206
+#: pkt-line.c:201 pkt-line.c:208
msgid "packet write failed"
msgstr "неуспешен запис на пакет"
-#: pkt-line.c:291
+#: pkt-line.c:293
msgid "read error"
msgstr "грешка при четене"
-#: pkt-line.c:299
+#: pkt-line.c:301
msgid "the remote end hung up unexpectedly"
msgstr "отдалеченото хранилище неочаквано прекъсна връзката"
-#: pkt-line.c:327
+#: pkt-line.c:329
#, c-format
msgid "protocol error: bad line length character: %.4s"
msgstr "протоколна грешка: неправилeн знак за дължина на ред: %.4s"
-#: pkt-line.c:337 pkt-line.c:342
+#: pkt-line.c:339 pkt-line.c:344
#, c-format
msgid "protocol error: bad line length %d"
msgstr "протоколна грешка: неправилна дължина на ред: %d"
-#: preload-index.c:118
+#: pkt-line.c:353
+#, c-format
+msgid "remote error: %s"
+msgstr "отдалечена грешка: %s"
+
+#: preload-index.c:119
msgid "Refreshing index"
msgstr "Обновяване на индекса"
-#: preload-index.c:137
+#: preload-index.c:138
#, c-format
msgid "unable to create threaded lstat: %s"
msgstr "не може да се създаде нишка за изпълнението на „lstat“: %s"
-#: pretty.c:962
+#: pretty.c:963
msgid "unable to parse --pretty format"
msgstr "аргументът към опцията „--pretty“ не може да се анализира"
@@ -3890,7 +4046,7 @@ msgid "could not read `log` output"
msgstr ""
"изходът от командата за журнала с подавания „log“ не може да се прочете"
-#: range-diff.c:74 sequencer.c:4764
+#: range-diff.c:74 sequencer.c:4828
#, c-format
msgid "could not parse commit '%s'"
msgstr "подаването „%s“ не може да бъде анализирано"
@@ -3904,11 +4060,48 @@ msgstr "неуспешно търсене на разлика"
msgid "could not parse log for '%s'"
msgstr "журналът с подаванията на „%s“ не може да бъде анализиран"
-#: read-cache.c:1490
+#: read-cache.c:673
+#, c-format
+msgid "will not add file alias '%s' ('%s' already exists in index)"
+msgstr ""
+"няма да бъде добавен псевдоним за файл „%s“ („%s“ вече съществува в индекса)"
+
+#: read-cache.c:689
+msgid "cannot create an empty blob in the object database"
+msgstr "в базата от данни за обектите не може да се създаде празен обект-BLOB"
+
+#: read-cache.c:710
+#, c-format
+msgid "%s: can only add regular files, symbolic links or git-directories"
+msgstr ""
+"%s: може да добавяте само обикновени файлове, символни връзки и директории "
+"на git"
+
+#: read-cache.c:765
+#, c-format
+msgid "unable to index file '%s'"
+msgstr "файлът „%s“ не може да бъде индексиран"
+
+#: read-cache.c:784
+#, c-format
+msgid "unable to add '%s' to index"
+msgstr "„%s“ не може да се добави в индекса"
+
+#: read-cache.c:795
+#, c-format
+msgid "unable to stat '%s'"
+msgstr "„stat“ не може да се изпълни върху „%s“"
+
+#: read-cache.c:1304
+#, c-format
+msgid "'%s' appears as both a file and as a directory"
+msgstr "„%s“ съществува и като файл, и като директория"
+
+#: read-cache.c:1489
msgid "Refresh index"
msgstr "Обновяване на индекса"
-#: read-cache.c:1604
+#: read-cache.c:1603
#, c-format
msgid ""
"index.version set, but the value is invalid.\n"
@@ -3917,7 +4110,7 @@ msgstr ""
"Зададена е неправилна стойност на настройката „index.version“.\n"
"Ще се ползва версия %i"
-#: read-cache.c:1614
+#: read-cache.c:1613
#, c-format
msgid ""
"GIT_INDEX_VERSION set, but the value is invalid.\n"
@@ -3927,61 +4120,146 @@ msgstr ""
"„GIT_INDEX_VERSION“.\n"
"Ще се ползва версия %i"
-#: read-cache.c:1792
+#: read-cache.c:1684
+#, c-format
+msgid "bad signature 0x%08x"
+msgstr "неправилен подпис: „0x%08x“"
+
+#: read-cache.c:1687
+#, c-format
+msgid "bad index version %d"
+msgstr "неправилна версия на индекса %d"
+
+#: read-cache.c:1696
+msgid "bad index file sha1 signature"
+msgstr "неправилен подпис за контролна сума по SHA1 на файла на индекса"
+
+#: read-cache.c:1726
+#, c-format
+msgid "index uses %.4s extension, which we do not understand"
+msgstr ""
+"индексът ползва разширение „%.4s“, което не се поддържа от тази версия на git"
+
+#: read-cache.c:1728
+#, c-format
+msgid "ignoring %.4s extension"
+msgstr "игнориране на разширението „%.4s“"
+
+#: read-cache.c:1765
+#, c-format
+msgid "unknown index entry format 0x%08x"
+msgstr "непознат формат на запис в индекса: „0x%08x“"
+
+#: read-cache.c:1781
#, c-format
msgid "malformed name field in the index, near path '%s'"
-msgstr "неправилно име на поле в индекса, близо до пътя „%s“"
+msgstr "неправилно име на поле в индекса близо до пътя „%s“"
+
+#: read-cache.c:1836
+msgid "unordered stage entries in index"
+msgstr "неподредени записи в индекса"
+
+#: read-cache.c:1839
+#, c-format
+msgid "multiple stage entries for merged file '%s'"
+msgstr "множество записи за слетия файл „%s“"
+
+#: read-cache.c:1842
+#, c-format
+msgid "unordered stage entries for '%s'"
+msgstr "неподредени записи за „%s“"
-#: read-cache.c:1960 rerere.c:565 rerere.c:599 rerere.c:1111 builtin/add.c:458
-#: builtin/check-ignore.c:177 builtin/checkout.c:289 builtin/checkout.c:585
-#: builtin/checkout.c:953 builtin/clean.c:954 builtin/commit.c:343
-#: builtin/diff-tree.c:115 builtin/grep.c:489 builtin/mv.c:144
-#: builtin/reset.c:244 builtin/rm.c:270 builtin/submodule--helper.c:329
+#: read-cache.c:1949 read-cache.c:2227 rerere.c:565 rerere.c:599 rerere.c:1111
+#: builtin/add.c:459 builtin/check-ignore.c:178 builtin/checkout.c:294
+#: builtin/checkout.c:622 builtin/checkout.c:991 builtin/clean.c:955
+#: builtin/commit.c:344 builtin/diff-tree.c:116 builtin/grep.c:498
+#: builtin/mv.c:145 builtin/reset.c:245 builtin/rm.c:271
+#: builtin/submodule--helper.c:330
msgid "index file corrupt"
msgstr "файлът с индекса е повреден"
-#: read-cache.c:2101
+#: read-cache.c:2090
#, c-format
msgid "unable to create load_cache_entries thread: %s"
msgstr "не може да се създаде нишка за зареждане на обектите от кеша: %s"
-#: read-cache.c:2114
+#: read-cache.c:2103
#, c-format
msgid "unable to join load_cache_entries thread: %s"
msgstr "не може да се изчака нишка за зареждане на обектите от кеша: %s"
-#: read-cache.c:2201
+#: read-cache.c:2136
+#, c-format
+msgid "%s: index file open failed"
+msgstr "%s: неуспешно отваряне на файла на индекса"
+
+#: read-cache.c:2140
+#, c-format
+msgid "%s: cannot stat the open index"
+msgstr "%s: не може да се получи информация за отворения индекс със „stat“"
+
+#: read-cache.c:2144
+#, c-format
+msgid "%s: index file smaller than expected"
+msgstr "%s: файлът на индекса е по-малък от очакваното"
+
+#: read-cache.c:2148
+#, c-format
+msgid "%s: unable to map index file"
+msgstr "%s: неуспешно заделяне на съответстваща памет чрез „mmap“ на индекса"
+
+#: read-cache.c:2190
#, c-format
msgid "unable to create load_index_extensions thread: %s"
msgstr ""
"не може да се създаде нишка за зареждане на разширенията на индекса: %s"
-#: read-cache.c:2228
+#: read-cache.c:2217
#, c-format
msgid "unable to join load_index_extensions thread: %s"
msgstr ""
"не може да се създаде нишка за зареждане на разширенията на индекса: %s"
-#: read-cache.c:2982 sequencer.c:4727 wrapper.c:658 builtin/merge.c:1086
+#: read-cache.c:2239
+#, c-format
+msgid "could not freshen shared index '%s'"
+msgstr "споделеният индекс „%s“ не може да се обнови"
+
+#: read-cache.c:2274
+#, c-format
+msgid "broken index, expect %s in %s, got %s"
+msgstr "грешки в индекса — в „%2$s“ се очаква „%1$s“, а бе получено „%3$s“"
+
+#: read-cache.c:2971 sequencer.c:4791 wrapper.c:658 builtin/merge.c:1087
#, c-format
msgid "could not close '%s'"
msgstr "„%s“ не може да се затвори"
-#: read-cache.c:3055 sequencer.c:2203 sequencer.c:3592
+#: read-cache.c:3044 sequencer.c:2237 sequencer.c:3647
#, c-format
msgid "could not stat '%s'"
msgstr "неуспешно изпълнение на „stat“ върху „%s“"
-#: read-cache.c:3068
+#: read-cache.c:3057
#, c-format
msgid "unable to open git dir: %s"
msgstr "не може да се отвори директорията на git: %s"
-#: read-cache.c:3080
+#: read-cache.c:3069
#, c-format
msgid "unable to unlink: %s"
msgstr "неуспешно изтриване на „%s“"
+#: read-cache.c:3088
+#, c-format
+msgid "cannot fix permission bits on '%s'"
+msgstr "правата за достъп до „%s“ не могат да бъдат поправени"
+
+#: read-cache.c:3237
+#, c-format
+msgid "%s: cannot drop to stage #0"
+msgstr "%s: не може да се премине към етап №0"
+
#: rebase-interactive.c:10
msgid ""
"\n"
@@ -4075,8 +4353,8 @@ msgstr ""
msgid "Note that empty commits are commented out"
msgstr "Празните подавания са коментирани"
-#: rebase-interactive.c:62 rebase-interactive.c:75 sequencer.c:2186
-#: sequencer.c:4505 sequencer.c:4561 sequencer.c:4836
+#: rebase-interactive.c:62 rebase-interactive.c:75 sequencer.c:2219
+#: sequencer.c:4569 sequencer.c:4625 sequencer.c:4900
#, c-format
msgid "could not read '%s'."
msgstr "от „%s“ не може да се чете."
@@ -4091,7 +4369,7 @@ msgstr "„%s“ не сочи към позволен обект!"
msgid "ignoring dangling symref %s"
msgstr "игнориране на указател на обект извън клон „%s“"
-#: refs.c:585 ref-filter.c:1951
+#: refs.c:585 ref-filter.c:1976
#, c-format
msgid "ignoring broken ref %s"
msgstr "игнориране на повредения указател „%s“"
@@ -4116,15 +4394,15 @@ msgstr "указателят „%s“ вече съществува"
msgid "unexpected object ID when writing '%s'"
msgstr "неочакван идентификатор на обект при записването на „%s“"
-#: refs.c:740 sequencer.c:394 sequencer.c:2510 sequencer.c:2636
-#: sequencer.c:2650 sequencer.c:2877 sequencer.c:4725 sequencer.c:4788
+#: refs.c:740 sequencer.c:396 sequencer.c:2549 sequencer.c:2675
+#: sequencer.c:2689 sequencer.c:2923 sequencer.c:4789 sequencer.c:4852
#: wrapper.c:656
#, c-format
msgid "could not write to '%s'"
msgstr "в „%s“ не може да се пише"
-#: refs.c:767 sequencer.c:4723 sequencer.c:4782 wrapper.c:225 wrapper.c:395
-#: builtin/am.c:728
+#: refs.c:767 sequencer.c:4787 sequencer.c:4846 wrapper.c:225 wrapper.c:395
+#: builtin/am.c:713 builtin/rebase.c:575
#, c-format
msgid "could not open '%s' for writing"
msgstr "„%s“ не може да бъде отворен за запис"
@@ -4199,7 +4477,7 @@ msgstr "Указателите не може да бъдат изтрити: %s"
msgid "invalid refspec '%s'"
msgstr "неправилен указател: „%s“"
-#: ref-filter.c:39 wt-status.c:1855
+#: ref-filter.c:39 wt-status.c:1861
msgid "gone"
msgstr "изтрит"
@@ -4248,148 +4526,153 @@ msgstr "непознат аргумент за „%%(%s)“: %s"
msgid "%%(objecttype) does not take arguments"
msgstr "%%(objecttype) не приема аргументи"
-#: ref-filter.c:235
+#: ref-filter.c:245
+#, c-format
+msgid "unrecognized %%(objectsize) argument: %s"
+msgstr "непознат аргумент за %%(objectsize): %s"
+
+#: ref-filter.c:253
#, c-format
-msgid "%%(objectsize) does not take arguments"
-msgstr "%%(objectsize) не приема аргументи"
+msgid "%%(deltabase) does not take arguments"
+msgstr "%%(deltabase) не приема аргументи"
-#: ref-filter.c:247
+#: ref-filter.c:265
#, c-format
msgid "%%(body) does not take arguments"
msgstr "%%(body) не приема аргументи"
-#: ref-filter.c:256
+#: ref-filter.c:274
#, c-format
msgid "%%(subject) does not take arguments"
msgstr "%%(subject) не приема аргументи"
-#: ref-filter.c:278
+#: ref-filter.c:296
#, c-format
msgid "unknown %%(trailers) argument: %s"
msgstr "непознат аргумент „%%(trailers)“: %s"
-#: ref-filter.c:307
+#: ref-filter.c:325
#, c-format
msgid "positive value expected contents:lines=%s"
msgstr "очаква се положителна стойност за „contents:lines=%s“"
-#: ref-filter.c:309
+#: ref-filter.c:327
#, c-format
msgid "unrecognized %%(contents) argument: %s"
msgstr "непознат аргумент за %%(contents): %s"
-#: ref-filter.c:324
+#: ref-filter.c:342
#, c-format
msgid "positive value expected objectname:short=%s"
msgstr "очаква се положителна стойност за „objectname:short=%s“"
-#: ref-filter.c:328
+#: ref-filter.c:346
#, c-format
msgid "unrecognized %%(objectname) argument: %s"
msgstr "непознат аргумент за %%(objectname): %s"
-#: ref-filter.c:358
+#: ref-filter.c:376
#, c-format
msgid "expected format: %%(align:<width>,<position>)"
msgstr "очакван формат: %%(align:ШИРОЧИНА,ПОЗИЦИЯ)"
-#: ref-filter.c:370
+#: ref-filter.c:388
#, c-format
msgid "unrecognized position:%s"
msgstr "непозната позиция: %s"
-#: ref-filter.c:377
+#: ref-filter.c:395
#, c-format
msgid "unrecognized width:%s"
msgstr "непозната широчина: %s"
-#: ref-filter.c:386
+#: ref-filter.c:404
#, c-format
msgid "unrecognized %%(align) argument: %s"
msgstr "непознат аргумент за %%(align): %s"
-#: ref-filter.c:394
+#: ref-filter.c:412
#, c-format
msgid "positive width expected with the %%(align) atom"
msgstr "очаква се положителна широчина с лексемата „%%(align)“"
-#: ref-filter.c:412
+#: ref-filter.c:430
#, c-format
msgid "unrecognized %%(if) argument: %s"
msgstr "непознат аргумент за „%%(if)“: %s"
-#: ref-filter.c:508
+#: ref-filter.c:527
#, c-format
msgid "malformed field name: %.*s"
msgstr "неправилно име на обект: „%.*s“"
-#: ref-filter.c:535
+#: ref-filter.c:554
#, c-format
msgid "unknown field name: %.*s"
msgstr "непознато име на обект: „%.*s“"
-#: ref-filter.c:539
+#: ref-filter.c:558
#, c-format
msgid ""
"not a git repository, but the field '%.*s' requires access to object data"
msgstr "не е хранилище на git, а полето „%.*s“ изисква достъп данни на обектни"
-#: ref-filter.c:663
+#: ref-filter.c:682
#, c-format
msgid "format: %%(if) atom used without a %%(then) atom"
msgstr "формат: лексемата %%(if) е използвана без съответната ѝ %%(then)"
-#: ref-filter.c:726
+#: ref-filter.c:745
#, c-format
msgid "format: %%(then) atom used without an %%(if) atom"
msgstr "формат: лексемата %%(then) е използвана без съответната ѝ %%(if)"
-#: ref-filter.c:728
+#: ref-filter.c:747
#, c-format
msgid "format: %%(then) atom used more than once"
msgstr "формат: лексемата %%(then) е използвана повече от един път"
-#: ref-filter.c:730
+#: ref-filter.c:749
#, c-format
msgid "format: %%(then) atom used after %%(else)"
msgstr "формат: лексемата %%(then) е използвана след %%(else)"
-#: ref-filter.c:758
+#: ref-filter.c:777
#, c-format
msgid "format: %%(else) atom used without an %%(if) atom"
msgstr "формат: лексемата %%(else) е използвана без съответната ѝ %%(if)"
-#: ref-filter.c:760
+#: ref-filter.c:779
#, c-format
msgid "format: %%(else) atom used without a %%(then) atom"
msgstr "формат: лексемата %%(else) е използвана без съответната ѝ %%(then)"
-#: ref-filter.c:762
+#: ref-filter.c:781
#, c-format
msgid "format: %%(else) atom used more than once"
msgstr "формат: лексемата %%(else) е използвана повече от един път"
-#: ref-filter.c:777
+#: ref-filter.c:796
#, c-format
msgid "format: %%(end) atom used without corresponding atom"
msgstr "формат: лексемата %%(end) е използвана без съответната ѝ"
-#: ref-filter.c:834
+#: ref-filter.c:853
#, c-format
msgid "malformed format string %s"
msgstr "неправилен форматиращ низ „%s“"
-#: ref-filter.c:1424
+#: ref-filter.c:1447
#, c-format
msgid "(no branch, rebasing %s)"
msgstr "(извън клон, пребазиране на „%s“)"
-#: ref-filter.c:1427
+#: ref-filter.c:1450
#, c-format
msgid "(no branch, rebasing detached HEAD %s)"
msgstr "(извън клон, пребазиране на несвързан указател „HEAD“ при „%s“)"
-#: ref-filter.c:1430
+#: ref-filter.c:1453
#, c-format
msgid "(no branch, bisect started on %s)"
msgstr "(извън клон, двоично търсене от „%s“)"
@@ -4397,7 +4680,7 @@ msgstr "(извън клон, двоично търсене от „%s“)"
#. TRANSLATORS: make sure this matches "HEAD
#. detached at " in wt-status.c
#.
-#: ref-filter.c:1438
+#: ref-filter.c:1461
#, c-format
msgid "(HEAD detached at %s)"
msgstr "(Указателят „HEAD“ не е свързан и е при „%s“)"
@@ -4405,144 +4688,291 @@ msgstr "(Указателят „HEAD“ не е свързан и е при „
#. TRANSLATORS: make sure this matches "HEAD
#. detached from " in wt-status.c
#.
-#: ref-filter.c:1445
+#: ref-filter.c:1468
#, c-format
msgid "(HEAD detached from %s)"
msgstr "Указателят „HEAD“ не е свързан и е отделѐн от „%s“"
-#: ref-filter.c:1449
+#: ref-filter.c:1472
msgid "(no branch)"
msgstr "(извън клон)"
-#: ref-filter.c:1483 ref-filter.c:1638
+#: ref-filter.c:1506 ref-filter.c:1663
#, c-format
msgid "missing object %s for %s"
msgstr "обектът „%s“ липсва за „%s“"
-#: ref-filter.c:1491
+#: ref-filter.c:1516
#, c-format
msgid "parse_object_buffer failed on %s for %s"
msgstr "неуспешно анализиране чрез „parse_object_buffer“ на „%s“ за „%s“"
-#: ref-filter.c:1857
+#: ref-filter.c:1882
#, c-format
msgid "malformed object at '%s'"
msgstr "обект със сгрешен формат при „%s“"
-#: ref-filter.c:1946
+#: ref-filter.c:1971
#, c-format
msgid "ignoring ref with broken name %s"
msgstr "игнориране на указателя с грешно име „%s“"
-#: ref-filter.c:2232
+#: ref-filter.c:2257
#, c-format
msgid "format: %%(end) atom missing"
msgstr "грешка във форма̀та: липсва лексемата %%(end)"
-#: ref-filter.c:2338
+#: ref-filter.c:2352
+#, c-format
+msgid "option `%s' is incompatible with --merged"
+msgstr "опциите „%s“ и „--merged“ са несъвместими"
+
+#: ref-filter.c:2355
+#, c-format
+msgid "option `%s' is incompatible with --no-merged"
+msgstr "опциите „%s“ и „--no-merged“ са несъвместими"
+
+#: ref-filter.c:2365
#, c-format
msgid "malformed object name %s"
msgstr "неправилно име на обект „%s“"
-#: remote.c:607
+#: ref-filter.c:2370
+#, c-format
+msgid "option `%s' must point to a commit"
+msgstr "опцията „%s“ не сочи към подаване"
+
+#: remote.c:363
+#, c-format
+msgid "config remote shorthand cannot begin with '/': %s"
+msgstr ""
+"съкращението за отдалечено хранилище не може за започва със знака „/“: %s"
+
+#: remote.c:410
+msgid "more than one receivepack given, using the first"
+msgstr "зададен е повече от един пакет за получаване, ще се ползва първият"
+
+#: remote.c:418
+msgid "more than one uploadpack given, using the first"
+msgstr "зададен е повече от един пакет за изпращане, ще се ползва първият"
+
+#: remote.c:608
#, c-format
msgid "Cannot fetch both %s and %s to %s"
msgstr "Невъзможно е да се доставят едновременно и „%s“, и „%s“ към „%s“"
-#: remote.c:611
+#: remote.c:612
#, c-format
msgid "%s usually tracks %s, not %s"
msgstr "„%s“ обикновено следи „%s“, а не „%s“"
-#: remote.c:615
+#: remote.c:616
#, c-format
msgid "%s tracks both %s and %s"
msgstr "„%s“ следи както „%s“, така и „%s“"
-#: remote.c:623
-msgid "Internal error"
-msgstr "Вътрешна грешка"
+#: remote.c:684
+#, c-format
+msgid "key '%s' of pattern had no '*'"
+msgstr "ключ „%s“ на шаблона не съдържа „*“"
-#: remote.c:1569 remote.c:1670
+#: remote.c:694
+#, c-format
+msgid "value '%s' of pattern has no '*'"
+msgstr "стойност „%s“ на шаблона не съдържа „*“"
+
+#: remote.c:1000
+#, c-format
+msgid "src refspec %s does not match any"
+msgstr "указателят на версия-източник „%s“ не съвпада с никой обект"
+
+#: remote.c:1005
+#, c-format
+msgid "src refspec %s matches more than one"
+msgstr "указателят на версия-източник „%s“ съвпада с повече от един обект"
+
+#. TRANSLATORS: "matches '%s'%" is the <dst> part of "git push
+#. <remote> <src>:<dst>" push, and "being pushed ('%s')" is
+#. the <src>.
+#.
+#: remote.c:1020
+#, c-format
+msgid ""
+"The destination you provided is not a full refname (i.e.,\n"
+"starting with \"refs/\"). We tried to guess what you meant by:\n"
+"\n"
+"- Looking for a ref that matches '%s' on the remote side.\n"
+"- Checking if the <src> being pushed ('%s')\n"
+" is a ref in \"refs/{heads,tags}/\". If so we add a corresponding\n"
+" refs/{heads,tags}/ prefix on the remote side.\n"
+"\n"
+"Neither worked, so we gave up. You must fully qualify the ref."
+msgstr ""
+"Зададената цел не е пълен указател (не започва с „refs/“).\n"
+"Бяха пробвани следните варианти:\n"
+"\n"
+" ⁃ указател от отдалеченото хранилище, който да съответства на „%s“;\n"
+" ⁃ дали изтласкваният ИЗТОЧНИК („%s“) е указател в „refs/{heads,tags}/“.\n"
+" При съвпадение се добавя съответен префикс „refs/{heads,tags}/“ за\n"
+" отдалеченото хранилище.\n"
+"\n"
+"Никой от вариантите не сработи. Трябва сами да укажете пълното име на\n"
+"указателя."
+
+#: remote.c:1040
+#, c-format
+msgid ""
+"The <src> part of the refspec is a commit object.\n"
+"Did you mean to create a new branch by pushing to\n"
+"'%s:refs/heads/%s'?"
+msgstr ""
+"ИЗТОЧНИКът е обект-подаване. Не целите ли всъщност да създадете нов клон "
+"като\n"
+"изтласкате към „%s:refs/heads/%s“?"
+
+#: remote.c:1045
+#, c-format
+msgid ""
+"The <src> part of the refspec is a tag object.\n"
+"Did you mean to create a new tag by pushing to\n"
+"'%s:refs/tags/%s'?"
+msgstr ""
+"ИЗТОЧНИКът е обект-етикет. Не целите ли всъщност да създадете нов клон "
+"като\n"
+"изтласкате към „%s:refs/tags/%s“?"
+
+#: remote.c:1050
+#, c-format
+msgid ""
+"The <src> part of the refspec is a tree object.\n"
+"Did you mean to tag a new tree by pushing to\n"
+"'%s:refs/tags/%s'?"
+msgstr ""
+"ИЗТОЧНИКът е обект-дърво. Не целите ли всъщност да създадете нов клон като\n"
+"изтласкате към „%s:refs/tags/%s“?"
+
+#: remote.c:1055
+#, c-format
+msgid ""
+"The <src> part of the refspec is a blob object.\n"
+"Did you mean to tag a new blob by pushing to\n"
+"'%s:refs/tags/%s'?"
+msgstr ""
+"ИЗТОЧНИКът е обект-BLOB. Не целите ли всъщност да създадете нов клон като\n"
+"изтласкате към „%s:refs/tags/%s“?"
+
+#: remote.c:1091
+#, c-format
+msgid "%s cannot be resolved to branch"
+msgstr "не е открит клон съответстващ на „%s“"
+
+#: remote.c:1102
+#, c-format
+msgid "unable to delete '%s': remote ref does not exist"
+msgstr "„%s“ не може да се изтрие: отдалечения указател не съществува"
+
+#: remote.c:1114
+#, c-format
+msgid "dst refspec %s matches more than one"
+msgstr "указателят на версия-цел „%s“ съвпада с повече от един обект"
+
+#: remote.c:1121
+#, c-format
+msgid "dst ref %s receives from more than one src"
+msgstr ""
+"указателят на версия-цел „%s“ съответства и ще получава от повече от един "
+"източник"
+
+#: remote.c:1624 remote.c:1725
msgid "HEAD does not point to a branch"
msgstr "Указателят „HEAD“ не сочи към клон"
-#: remote.c:1578
+#: remote.c:1633
#, c-format
msgid "no such branch: '%s'"
msgstr "няма клон на име „%s“"
-#: remote.c:1581
+#: remote.c:1636
#, c-format
msgid "no upstream configured for branch '%s'"
msgstr "не е зададен клон-източник за клона „%s“"
-#: remote.c:1587
+#: remote.c:1642
#, c-format
msgid "upstream branch '%s' not stored as a remote-tracking branch"
msgstr "клонът-източник „%s“ не е съхранен като следящ клон"
-#: remote.c:1602
+#: remote.c:1657
#, c-format
msgid "push destination '%s' on remote '%s' has no local tracking branch"
msgstr ""
"липсва локален следящ клон за местоположението за изтласкване „%s“ в "
"хранилището „%s“"
-#: remote.c:1614
+#: remote.c:1669
#, c-format
msgid "branch '%s' has no remote for pushing"
msgstr "няма информация клонът „%s“ да следи някой друг"
-#: remote.c:1624
+#: remote.c:1679
#, c-format
msgid "push refspecs for '%s' do not include '%s'"
msgstr "указателят за изтласкване на „%s“ не включва „%s“"
-#: remote.c:1637
+#: remote.c:1692
msgid "push has no destination (push.default is 'nothing')"
msgstr "указателят за изтласкване не включва цел („push.default“ е „nothing“)"
-#: remote.c:1659
+#: remote.c:1714
msgid "cannot resolve 'simple' push to a single destination"
msgstr "простото (simple) изтласкване не съответства на една цел"
-#: remote.c:1935
+#: remote.c:1840
+#, c-format
+msgid "couldn't find remote ref %s"
+msgstr "отдалеченият указател „%s“ не може да бъде открит"
+
+#: remote.c:1853
+#, c-format
+msgid "* Ignoring funny ref '%s' locally"
+msgstr "• прескачане на неочаквания локален указател „%s“"
+
+#: remote.c:1990
#, c-format
msgid "Your branch is based on '%s', but the upstream is gone.\n"
msgstr "Този клон следи „%s“, но следеният клон е изтрит.\n"
-#: remote.c:1939
+#: remote.c:1994
msgid " (use \"git branch --unset-upstream\" to fixup)\n"
msgstr " (за да коригирате това, използвайте „git branch --unset-upstream“)\n"
-#: remote.c:1942
+#: remote.c:1997
#, c-format
msgid "Your branch is up to date with '%s'.\n"
msgstr "Клонът е актуализиран към „%s“.\n"
-#: remote.c:1946
+#: remote.c:2001
#, c-format
msgid "Your branch and '%s' refer to different commits.\n"
msgstr "Клонът ви и „%s“ сочат към различни подавания.\n"
-#: remote.c:1949
+#: remote.c:2004
#, c-format
msgid " (use \"%s\" for details)\n"
msgstr " (за повече информация ползвайте „%s“)\n"
-#: remote.c:1953
+#: remote.c:2008
#, c-format
msgid "Your branch is ahead of '%s' by %d commit.\n"
msgid_plural "Your branch is ahead of '%s' by %d commits.\n"
msgstr[0] "Клонът ви е с %2$d подаване пред „%1$s“.\n"
msgstr[1] "Клонът ви е с %2$d подавания пред „%1$s“.\n"
-#: remote.c:1959
+#: remote.c:2014
msgid " (use \"git push\" to publish your local commits)\n"
msgstr " (публикувайте локалните си промени чрез „git push“)\n"
-#: remote.c:1962
+#: remote.c:2017
#, c-format
msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
msgid_plural ""
@@ -4550,11 +4980,11 @@ msgid_plural ""
msgstr[0] "Клонът ви е с %2$d подаване зад „%1$s“ и може да бъде превъртян.\n"
msgstr[1] "Клонът ви е с %2$d подавания зад „%1$s“ и може да бъде превъртян.\n"
-#: remote.c:1970
+#: remote.c:2025
msgid " (use \"git pull\" to update your local branch)\n"
msgstr " (обновете локалния си клон чрез „git pull“)\n"
-#: remote.c:1973
+#: remote.c:2028
#, c-format
msgid ""
"Your branch and '%s' have diverged,\n"
@@ -4569,10 +4999,15 @@ msgstr[1] ""
"Текущият клон се е отделил от „%s“,\n"
"двата имат съответно по %d и %d несъвпадащи подавания.\n"
-#: remote.c:1983
+#: remote.c:2038
msgid " (use \"git pull\" to merge the remote branch into yours)\n"
msgstr " (слейте отдалечения клон в локалния чрез „git pull“)\n"
+#: remote.c:2221
+#, c-format
+msgid "cannot parse expected object name '%s'"
+msgstr "очакваното име на обект „%s“ не може да бъде анализирано"
+
#: replace-object.c:21
#, c-format
msgid "bad replace ref name: %s"
@@ -4596,7 +5031,8 @@ msgstr "повреден „MERGE_RR“ (запис за коригиране н
msgid "unable to write rerere record"
msgstr "приложеното коригиране на конфликт не може да бъде записано"
-#: rerere.c:485 rerere.c:692 sequencer.c:3136 sequencer.c:3162
+#: rerere.c:485 rerere.c:692 sequencer.c:3186 sequencer.c:3212
+#: builtin/fsck.c:314
#, c-format
msgid "could not write '%s'"
msgstr "„%s“ не може да се запише"
@@ -4654,8 +5090,8 @@ msgstr "излишният обект „%s“ не може да се изтр
msgid "Recorded preimage for '%s'"
msgstr "Предварителният вариант на „%s“ е запазен"
-#: rerere.c:881 submodule.c:1763 builtin/submodule--helper.c:1413
-#: builtin/submodule--helper.c:1423
+#: rerere.c:881 submodule.c:2012 builtin/submodule--helper.c:1417
+#: builtin/submodule--helper.c:1427
#, c-format
msgid "could not create directory '%s'"
msgstr "Директорията „%s“ не може да бъде създадена"
@@ -4689,29 +5125,29 @@ msgstr "Запазената корекция на конфликт при „%s
msgid "unable to open rr-cache directory"
msgstr "директорията „rr-cache“ не може да се отвори"
-#: revision.c:2324
+#: revision.c:2484
msgid "your current branch appears to be broken"
msgstr "Текущият клон е повреден"
-#: revision.c:2327
+#: revision.c:2487
#, c-format
msgid "your current branch '%s' does not have any commits yet"
msgstr "Текущият клон „%s“ е без подавания "
-#: revision.c:2523
+#: revision.c:2684
msgid "--first-parent is incompatible with --bisect"
msgstr "опциите „--first-parent“ и „--bisect“ са несъвместими"
-#: run-command.c:740
+#: run-command.c:742
msgid "open /dev/null failed"
msgstr "неуспешно отваряне на „/dev/null“"
-#: run-command.c:1229
+#: run-command.c:1231
#, c-format
msgid "cannot create async thread: %s"
msgstr "не може да се създаде асинхронна нишка: %s"
-#: run-command.c:1293
+#: run-command.c:1295
#, c-format
msgid ""
"The '%s' hook was ignored because it's not set as executable.\n"
@@ -4721,32 +5157,32 @@ msgstr ""
"За да изключите това предупреждение, изпълнете:\n"
" git config advice.ignoredHook false"
-#: send-pack.c:142
+#: send-pack.c:141
msgid "unexpected flush packet while reading remote unpack status"
msgstr ""
"неочакван изчистващ пакет „flush“ при изчитане на състоянието от "
"отдалеченото разпакетиране"
-#: send-pack.c:144
+#: send-pack.c:143
#, c-format
msgid "unable to parse remote unpack status: %s"
msgstr ""
"състоянието от отдалеченото разпакетиране не може да бъде анализирано: %s"
-#: send-pack.c:146
+#: send-pack.c:145
#, c-format
msgid "remote unpack failed: %s"
msgstr "неуспешно отдалечено разпакетиране: %s"
-#: send-pack.c:308
+#: send-pack.c:306
msgid "failed to sign the push certificate"
msgstr "сертификатът за изтласкване не може да бъде подписан"
-#: send-pack.c:421
+#: send-pack.c:420
msgid "the receiving end does not support --signed push"
msgstr "отсрещната страна не поддържа изтласкване с опцията „--signed“"
-#: send-pack.c:423
+#: send-pack.c:422
msgid ""
"not sending a push certificate since the receiving end does not support --"
"signed push"
@@ -4754,42 +5190,42 @@ msgstr ""
"отсрещната страна не поддържа изтласкване с опцията „--signed“, затова не се "
"използва сертификат"
-#: send-pack.c:435
+#: send-pack.c:434
msgid "the receiving end does not support --atomic push"
msgstr "получаващата страна не поддържа изтласкване с опцията „--atomic“"
-#: send-pack.c:440
+#: send-pack.c:439
msgid "the receiving end does not support push options"
msgstr "отсрещната страна не поддържа опции при изтласкване"
-#: sequencer.c:183
+#: sequencer.c:184
#, c-format
msgid "invalid commit message cleanup mode '%s'"
msgstr "несъществуващ режим на изчистване „%s“ на съобщение при подаване"
-#: sequencer.c:287
+#: sequencer.c:288
#, c-format
msgid "could not delete '%s'"
msgstr "„%s“ не може да бъде изтрит"
-#: sequencer.c:313
+#: sequencer.c:314
msgid "revert"
msgstr "отмяна"
-#: sequencer.c:315
+#: sequencer.c:316
msgid "cherry-pick"
msgstr "отбиране"
-#: sequencer.c:317
+#: sequencer.c:318
msgid "rebase -i"
msgstr "rebase -i"
-#: sequencer.c:319
+#: sequencer.c:320
#, c-format
msgid "unknown action: %d"
msgstr "неизвестно действие: %d"
-#: sequencer.c:376
+#: sequencer.c:378
msgid ""
"after resolving the conflicts, mark the corrected paths\n"
"with 'git add <paths>' or 'git rm <paths>'"
@@ -4797,7 +5233,7 @@ msgstr ""
"след коригирането на конфликтите, отбележете съответните\n"
"пътища с „git add ПЪТ…“ или „git rm ПЪТ…“."
-#: sequencer.c:379
+#: sequencer.c:381
msgid ""
"after resolving the conflicts, mark the corrected paths\n"
"with 'git add <paths>' or 'git rm <paths>'\n"
@@ -4807,39 +5243,39 @@ msgstr ""
"пътища с „git add ПЪТ…“ или „git rm ПЪТ…“, след което\n"
"подайте резултата с командата „git commit'“."
-#: sequencer.c:392 sequencer.c:2632
+#: sequencer.c:394 sequencer.c:2671
#, c-format
msgid "could not lock '%s'"
msgstr "„%s“ не може да се заключи"
-#: sequencer.c:399
+#: sequencer.c:401
#, c-format
msgid "could not write eol to '%s'"
msgstr "краят на ред не може да се запише в „%s“"
-#: sequencer.c:404 sequencer.c:2515 sequencer.c:2638 sequencer.c:2652
-#: sequencer.c:2885
+#: sequencer.c:406 sequencer.c:2554 sequencer.c:2677 sequencer.c:2691
+#: sequencer.c:2931
#, c-format
msgid "failed to finalize '%s'"
msgstr "„%s“ не може да се завърши"
-#: sequencer.c:427 sequencer.c:921 sequencer.c:1594 sequencer.c:2535
-#: sequencer.c:2867 sequencer.c:2974 builtin/am.c:260 builtin/commit.c:746
-#: builtin/merge.c:1084 builtin/rebase.c:152
+#: sequencer.c:429 sequencer.c:931 sequencer.c:1615 sequencer.c:2574
+#: sequencer.c:2913 sequencer.c:3022 builtin/am.c:245 builtin/commit.c:748
+#: builtin/merge.c:1085 builtin/rebase.c:154
#, c-format
msgid "could not read '%s'"
msgstr "файлът „%s“ не може да бъде прочетен"
-#: sequencer.c:453
+#: sequencer.c:455
#, c-format
msgid "your local changes would be overwritten by %s."
msgstr "локалните ви промени ще бъдат презаписани при %s."
-#: sequencer.c:457
+#: sequencer.c:459
msgid "commit your changes or stash them to proceed."
msgstr "подайте или скатайте промените, за да продължите"
-#: sequencer.c:486
+#: sequencer.c:491
#, c-format
msgid "%s: fast-forward"
msgstr "%s: превъртане"
@@ -4847,70 +5283,70 @@ msgstr "%s: превъртане"
#. TRANSLATORS: %s will be "revert", "cherry-pick" or
#. "rebase -i".
#.
-#: sequencer.c:575
+#: sequencer.c:582
#, c-format
msgid "%s: Unable to write new index file"
msgstr "%s: новият индекс не може да бъде запазен"
-#: sequencer.c:591
+#: sequencer.c:598
msgid "unable to update cache tree"
msgstr "дървото на кеша не може да бъде обновено"
-#: sequencer.c:604
+#: sequencer.c:612
msgid "could not resolve HEAD commit"
msgstr "подаването, сочено от указателя „HEAD“, не може да бъде открито"
-#: sequencer.c:684
+#: sequencer.c:692
#, c-format
msgid "no key present in '%.*s'"
msgstr "в „%.*s“ няма ключове"
-#: sequencer.c:695
+#: sequencer.c:703
#, c-format
msgid "unable to dequote value of '%s'"
msgstr "цитирането на стойността на „%s“ не може да бъде изчистено"
-#: sequencer.c:732 wrapper.c:227 wrapper.c:397 builtin/am.c:719
-#: builtin/am.c:811 builtin/merge.c:1081
+#: sequencer.c:740 wrapper.c:227 wrapper.c:397 builtin/am.c:704
+#: builtin/am.c:796 builtin/merge.c:1082 builtin/rebase.c:617
#, c-format
msgid "could not open '%s' for reading"
msgstr "файлът не може да бъде прочетен: „%s“"
-#: sequencer.c:742
+#: sequencer.c:750
msgid "'GIT_AUTHOR_NAME' already given"
msgstr "настройката за автор „GIT_AUTHOR_NAME“ вече е зададена"
-#: sequencer.c:747
+#: sequencer.c:755
msgid "'GIT_AUTHOR_EMAIL' already given"
msgstr "настройката за е-поща „GIT_AUTHOR_EMAIL“ вече е зададена"
-#: sequencer.c:752
+#: sequencer.c:760
msgid "'GIT_AUTHOR_DATE' already given"
msgstr "настройката за дата „GIT_AUTHOR_DATE“ вече е зададена"
-#: sequencer.c:756
+#: sequencer.c:764
#, c-format
msgid "unknown variable '%s'"
msgstr "непозната променлива „%s“"
-#: sequencer.c:761
+#: sequencer.c:769
msgid "missing 'GIT_AUTHOR_NAME'"
msgstr "настройката за автор „GIT_AUTHOR_NAME“ липсва"
-#: sequencer.c:763
+#: sequencer.c:771
msgid "missing 'GIT_AUTHOR_EMAIL'"
msgstr "настройката за е-поща „GIT_AUTHOR_EMAIL“ липсва"
-#: sequencer.c:765
+#: sequencer.c:773
msgid "missing 'GIT_AUTHOR_DATE'"
msgstr "настройката за дата „GIT_AUTHOR_DATE“ липсва"
-#: sequencer.c:825
+#: sequencer.c:833
#, c-format
msgid "invalid date format '%s' in '%s'"
msgstr "неправилен формат на дата „%s“ в „%s“"
-#: sequencer.c:842
+#: sequencer.c:850
#, c-format
msgid ""
"you have staged changes in your working tree\n"
@@ -4939,17 +5375,17 @@ msgstr ""
"\n"
" git rebase --continue\n"
-#: sequencer.c:935
+#: sequencer.c:945
msgid "writing root commit"
msgstr "запазване на начално подаване"
-#: sequencer.c:1142
+#: sequencer.c:1155
msgid "'prepare-commit-msg' hook failed"
msgstr ""
"неуспешно изпълнение на куката при промяна на съобщението при подаване "
"(prepare-commit-msg)"
-#: sequencer.c:1149
+#: sequencer.c:1162
msgid ""
"Your name and email address were configured automatically based\n"
"on your username and hostname. Please check that they are accurate.\n"
@@ -4978,7 +5414,7 @@ msgstr ""
"\n"
" git commit --amend --reset-author\n"
-#: sequencer.c:1162
+#: sequencer.c:1175
msgid ""
"Your name and email address were configured automatically based\n"
"on your username and hostname. Please check that they are accurate.\n"
@@ -5004,311 +5440,306 @@ msgstr ""
"\n"
" git commit --amend --reset-author\n"
-#: sequencer.c:1202
+#: sequencer.c:1217
msgid "couldn't look up newly created commit"
msgstr "току що създаденото подаване не може да бъде открито"
-#: sequencer.c:1204
+#: sequencer.c:1219
msgid "could not parse newly created commit"
msgstr "току що създаденото подаване не може да бъде анализирано"
-#: sequencer.c:1250
+#: sequencer.c:1265
msgid "unable to resolve HEAD after creating commit"
msgstr ""
"състоянието сочено от указателя „HEAD“ не може да бъде открито след "
"подаването"
-#: sequencer.c:1252
+#: sequencer.c:1267
msgid "detached HEAD"
msgstr "несвързан връх „HEAD“"
-#: sequencer.c:1256
+#: sequencer.c:1271
msgid " (root-commit)"
msgstr " (начално подаване)"
-#: sequencer.c:1277
+#: sequencer.c:1292
msgid "could not parse HEAD"
msgstr "указателят „HEAD“ не може да бъде анализиран"
-#: sequencer.c:1279
+#: sequencer.c:1294
#, c-format
msgid "HEAD %s is not a commit!"
msgstr "указателят „HEAD“ „%s“ сочи към нещо, което не е подаване!"
-#: sequencer.c:1283 builtin/commit.c:1543
+#: sequencer.c:1298 builtin/commit.c:1546
msgid "could not parse HEAD commit"
msgstr "върховото подаване „HEAD“ не може да бъде прочетено"
-#: sequencer.c:1334 sequencer.c:1934
+#: sequencer.c:1350 sequencer.c:1964
msgid "unable to parse commit author"
msgstr "авторът на подаването не може да бъде анализиран"
-#: sequencer.c:1344 builtin/am.c:1585 builtin/merge.c:677
+#: sequencer.c:1360 builtin/am.c:1570 builtin/merge.c:678
msgid "git write-tree failed to write a tree"
msgstr "Командата „git write-tree“ не успя да запише обект-дърво"
-#: sequencer.c:1361 sequencer.c:1416
+#: sequencer.c:1377 sequencer.c:1433
#, c-format
msgid "unable to read commit message from '%s'"
msgstr "съобщението за подаване не може да бъде прочетено от „%s“"
-#: sequencer.c:1383 builtin/am.c:1606 builtin/commit.c:1646 builtin/merge.c:858
-#: builtin/merge.c:883
+#: sequencer.c:1399 builtin/am.c:1591 builtin/commit.c:1649 builtin/merge.c:859
+#: builtin/merge.c:884
msgid "failed to write commit object"
msgstr "обектът за подаването не може да бъде записан"
-#: sequencer.c:1443
+#: sequencer.c:1460
#, c-format
msgid "could not parse commit %s"
msgstr "подаването „%s“ не може да бъде анализирано"
-#: sequencer.c:1448
+#: sequencer.c:1465
#, c-format
msgid "could not parse parent commit %s"
msgstr "родителското подаване „%s“ не може да бъде анализирано"
-#: sequencer.c:1546 sequencer.c:1654
+#: sequencer.c:1565 sequencer.c:1675
#, c-format
msgid "unknown command: %d"
msgstr "непозната команда: %d"
-#: sequencer.c:1601 sequencer.c:1626
+#: sequencer.c:1622 sequencer.c:1647
#, c-format
msgid "This is a combination of %d commits."
msgstr "Това е обединение от %d подавания"
-#: sequencer.c:1611 sequencer.c:4744
+#: sequencer.c:1632 sequencer.c:4808
msgid "need a HEAD to fixup"
msgstr "За вкарване в предходното подаване ви трябва указател „HEAD“"
-#: sequencer.c:1613 sequencer.c:2912
+#: sequencer.c:1634 sequencer.c:2958
msgid "could not read HEAD"
msgstr "указателят „HEAD“ не може да се прочете"
-#: sequencer.c:1615
+#: sequencer.c:1636
msgid "could not read HEAD's commit message"
msgstr ""
"съобщението за подаване към указателя „HEAD“ не може да бъде прочетено: %s"
-#: sequencer.c:1621
+#: sequencer.c:1642
#, c-format
msgid "cannot write '%s'"
msgstr "„%s“ не може да се запази"
-#: sequencer.c:1628 git-rebase--preserve-merges.sh:441
+#: sequencer.c:1649 git-rebase--preserve-merges.sh:441
msgid "This is the 1st commit message:"
msgstr "Това е 1-то съобщение при подаване:"
-#: sequencer.c:1636
+#: sequencer.c:1657
#, c-format
msgid "could not read commit message of %s"
msgstr "съобщението за подаване към „%s“ не може да бъде прочетено"
-#: sequencer.c:1643
+#: sequencer.c:1664
#, c-format
msgid "This is the commit message #%d:"
msgstr "Това е съобщение при подаване №%d:"
-#: sequencer.c:1649
+#: sequencer.c:1670
#, c-format
msgid "The commit message #%d will be skipped:"
msgstr "Съобщение при подаване №%d ще бъде прескочено:"
-#: sequencer.c:1732
+#: sequencer.c:1758
msgid "your index file is unmerged."
msgstr "индексът не е слят."
-#: sequencer.c:1739
+#: sequencer.c:1765
msgid "cannot fixup root commit"
msgstr "началното подаване не може да се вкара в предходното му"
-#: sequencer.c:1758
+#: sequencer.c:1784
#, c-format
msgid "commit %s is a merge but no -m option was given."
msgstr "подаването „%s“ е сливане, но не е дадена опцията „-m“"
-#: sequencer.c:1766
+#: sequencer.c:1792 sequencer.c:1800
#, c-format
msgid "commit %s does not have parent %d"
msgstr "подаването „%s“ няма родител %d"
-#: sequencer.c:1770
-#, c-format
-msgid "mainline was specified but commit %s is not a merge."
-msgstr "указано е базово подаване, но подаването „%s“ не е сливане."
-
-#: sequencer.c:1776
+#: sequencer.c:1806
#, c-format
msgid "cannot get commit message for %s"
msgstr "неуспешно извличане на съобщението за подаване на „%s“"
#. TRANSLATORS: The first %s will be a "todo" command like
#. "revert" or "pick", the second %s a SHA1.
-#: sequencer.c:1795
+#: sequencer.c:1825
#, c-format
msgid "%s: cannot parse parent commit %s"
msgstr "%s: неразпозната стойност за родителското подаване „%s“"
-#: sequencer.c:1860
+#: sequencer.c:1890
#, c-format
msgid "could not rename '%s' to '%s'"
msgstr "„%s“ не може да се преименува на „%s“"
-#: sequencer.c:1915
+#: sequencer.c:1945
#, c-format
msgid "could not revert %s... %s"
msgstr "подаването „%s“… не може да бъде отменено: „%s“"
-#: sequencer.c:1916
+#: sequencer.c:1946
#, c-format
msgid "could not apply %s... %s"
msgstr "подаването „%s“… не може да бъде приложено: „%s“"
-#: sequencer.c:1974
+#: sequencer.c:2005
#, c-format
msgid "git %s: failed to read the index"
msgstr "git %s: неуспешно изчитане на индекса"
-#: sequencer.c:1981
+#: sequencer.c:2012
#, c-format
msgid "git %s: failed to refresh the index"
msgstr "git %s: неуспешно обновяване на индекса"
-#: sequencer.c:2062
+#: sequencer.c:2094
#, c-format
msgid "%s does not accept arguments: '%s'"
msgstr "„%s“ не приема аргументи: „%s“"
-#: sequencer.c:2071
+#: sequencer.c:2103
#, c-format
msgid "missing arguments for %s"
msgstr "„%s“ изисква аргументи"
-#: sequencer.c:2130
+#: sequencer.c:2163
#, c-format
msgid "invalid line %d: %.*s"
msgstr "неправилен ред %d: %.*s"
-#: sequencer.c:2138
+#: sequencer.c:2171
#, c-format
msgid "cannot '%s' without a previous commit"
msgstr "Без предишно подаване не може да се изпълни „%s“"
-#: sequencer.c:2209
+#: sequencer.c:2243
msgid "please fix this using 'git rebase --edit-todo'."
msgstr "коригирайте това чрез „git rebase --edit-todo“."
-#: sequencer.c:2211
+#: sequencer.c:2245
#, c-format
msgid "unusable instruction sheet: '%s'"
msgstr "неизползваем файл с описание на предстоящите действия: „%s“"
-#: sequencer.c:2216
+#: sequencer.c:2250
msgid "no commits parsed."
msgstr "никое от подаванията не може да се разпознае."
-#: sequencer.c:2227
+#: sequencer.c:2261
msgid "cannot cherry-pick during a revert."
msgstr ""
"по време на отмяна на подаване не може да се извърши отбиране на подаване."
-#: sequencer.c:2229
+#: sequencer.c:2263
msgid "cannot revert during a cherry-pick."
msgstr "по време на отбиране не може да се извърши отмяна на подаване."
-#: sequencer.c:2299
+#: sequencer.c:2333
#, c-format
msgid "invalid value for %s: %s"
msgstr "неправилна стойност за „%s“: „%s“"
-#: sequencer.c:2380
+#: sequencer.c:2420
msgid "unusable squash-onto"
msgstr "подаването, в което другите да се вкарат, не може да се използва"
-#: sequencer.c:2396
+#: sequencer.c:2436
#, c-format
msgid "malformed options sheet: '%s'"
msgstr "неправилен файл с опции: „%s“"
-#: sequencer.c:2479 sequencer.c:4005
+#: sequencer.c:2518 sequencer.c:4067
msgid "empty commit set passed"
msgstr "зададено е празно множество от подавания"
-#: sequencer.c:2487
+#: sequencer.c:2526
msgid "a cherry-pick or revert is already in progress"
msgstr ""
"в момента вече се извършва отбиране на подавания или пребазиране на клона"
-#: sequencer.c:2488
+#: sequencer.c:2527
msgid "try \"git cherry-pick (--continue | --quit | --abort)\""
msgstr "използвайте „git cherry-pick (--continue | --quit | --abort)“"
-#: sequencer.c:2491
+#: sequencer.c:2530
#, c-format
msgid "could not create sequencer directory '%s'"
msgstr "директорията за секвенсора „%s“ не може да бъде създадена"
-#: sequencer.c:2505
+#: sequencer.c:2544
msgid "could not lock HEAD"
msgstr "указателят „HEAD“ не може да се заключи"
-#: sequencer.c:2560 sequencer.c:3761
+#: sequencer.c:2599 sequencer.c:3819
msgid "no cherry-pick or revert in progress"
msgstr ""
"в момента не се извършва отбиране на подавания или пребазиране на клона"
-#: sequencer.c:2562
+#: sequencer.c:2601
msgid "cannot resolve HEAD"
msgstr "Подаването сочено от указателя „HEAD“ не може да бъде открито"
-#: sequencer.c:2564 sequencer.c:2599
+#: sequencer.c:2603 sequencer.c:2638
msgid "cannot abort from a branch yet to be born"
msgstr ""
"действието не може да бъде преустановено, когато сте на клон, който тепърва "
"предстои да бъде създаден"
-#: sequencer.c:2585 builtin/grep.c:721
+#: sequencer.c:2624 builtin/grep.c:732
#, c-format
msgid "cannot open '%s'"
msgstr "„%s“ не може да бъде отворен"
-#: sequencer.c:2587
+#: sequencer.c:2626
#, c-format
msgid "cannot read '%s': %s"
msgstr "„%s“ не може да бъде прочетен: %s"
-#: sequencer.c:2588
+#: sequencer.c:2627
msgid "unexpected end of file"
msgstr "неочакван край на файл"
-#: sequencer.c:2594
+#: sequencer.c:2633
#, c-format
msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
msgstr ""
"запазеният преди започването на отбирането файл за указателя „HEAD“ — „%s“ е "
"повреден"
-#: sequencer.c:2605
+#: sequencer.c:2644
msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
msgstr ""
"Изглежда указателят „HEAD“ е променен. Проверете към какво сочи.\n"
"Не се правят промени."
-#: sequencer.c:2709 sequencer.c:3679
+#: sequencer.c:2750 sequencer.c:3735
#, c-format
msgid "could not update %s"
msgstr "„%s“ не може да се обнови"
-#: sequencer.c:2747 sequencer.c:3659
+#: sequencer.c:2788 sequencer.c:3715
msgid "cannot read HEAD"
msgstr "указателят „HEAD“ не може да бъде прочетен"
-#: sequencer.c:2762
+#: sequencer.c:2805
#, c-format
msgid "unable to copy '%s' to '%s'"
msgstr "„%s“ не може да се копира като „%s“"
-#: sequencer.c:2770
+#: sequencer.c:2813
#, c-format
msgid ""
"You can amend the commit now, with\n"
@@ -5327,27 +5758,27 @@ msgstr ""
"\n"
" git rebase --continue\n"
-#: sequencer.c:2780
+#: sequencer.c:2823
#, c-format
msgid "Could not apply %s... %.*s"
msgstr "Подаването „%s“… не може да бъде приложено: „%.*s“"
-#: sequencer.c:2787
+#: sequencer.c:2830
#, c-format
msgid "Could not merge %.*s"
msgstr "Невъзможно сливане на „%.*s“"
-#: sequencer.c:2798 sequencer.c:2802 builtin/difftool.c:640
+#: sequencer.c:2844 sequencer.c:2848 builtin/difftool.c:641
#, c-format
msgid "could not copy '%s' to '%s'"
msgstr "„%s“ не може да се копира като „%s“"
-#: sequencer.c:2824 sequencer.c:3242 builtin/rebase.c:580 builtin/rebase.c:1019
-#: builtin/rebase.c:1372 builtin/rebase.c:1426
+#: sequencer.c:2870 sequencer.c:3293 builtin/rebase.c:424 builtin/rebase.c:1230
+#: builtin/rebase.c:1591 builtin/rebase.c:1646
msgid "could not read index"
msgstr "индексът не може да бъде прочетен"
-#: sequencer.c:2829
+#: sequencer.c:2875
#, c-format
msgid ""
"execution failed: %s\n"
@@ -5362,11 +5793,11 @@ msgstr ""
" git rebase --continue\n"
"\n"
-#: sequencer.c:2835
+#: sequencer.c:2881
msgid "and made changes to the index and/or the working tree\n"
msgstr "и промени индекса и/или работното дърво\n"
-#: sequencer.c:2841
+#: sequencer.c:2887
#, c-format
msgid ""
"execution succeeded: %s\n"
@@ -5383,76 +5814,76 @@ msgstr ""
" git rebase --continue\n"
"\n"
-#: sequencer.c:2902
+#: sequencer.c:2948
#, c-format
msgid "illegal label name: '%.*s'"
msgstr "неправилно име на етикет: „%.*s“"
-#: sequencer.c:2954
+#: sequencer.c:3002
msgid "writing fake root commit"
msgstr "запазване на фалшиво начално подаване"
-#: sequencer.c:2959
+#: sequencer.c:3007
msgid "writing squash-onto"
msgstr "запазване на подаването, в което другите да се вкарат"
-#: sequencer.c:2997 builtin/rebase.c:585 builtin/rebase.c:591
+#: sequencer.c:3045 builtin/rebase.c:429 builtin/rebase.c:435
#, c-format
msgid "failed to find tree of %s"
msgstr "дървото, сочено от „%s“, не може да бъде открито"
-#: sequencer.c:3015 builtin/rebase.c:604
+#: sequencer.c:3063 builtin/rebase.c:448
msgid "could not write index"
msgstr "индексът не може да бъде записан"
-#: sequencer.c:3042
+#: sequencer.c:3090
#, c-format
msgid "could not resolve '%s'"
msgstr "„%s“ не може да бъде открит"
-#: sequencer.c:3068
+#: sequencer.c:3118
msgid "cannot merge without a current revision"
msgstr "без текущо подаване не може да се слива"
-#: sequencer.c:3090
+#: sequencer.c:3140
#, c-format
msgid "unable to parse '%.*s'"
msgstr "„%.*s“ не може да се анализира"
-#: sequencer.c:3099
+#: sequencer.c:3149
#, c-format
msgid "nothing to merge: '%.*s'"
msgstr "няма нищо за сливане: „%.*s“"
-#: sequencer.c:3111
+#: sequencer.c:3161
msgid "octopus merge cannot be executed on top of a [new root]"
msgstr "върху начално подаване не може да се извърши множествено сливане"
-#: sequencer.c:3126
+#: sequencer.c:3176
#, c-format
msgid "could not get commit message of '%s'"
msgstr "съобщението за подаване към „%s“ не може да бъде получено"
-#: sequencer.c:3274
+#: sequencer.c:3325
#, c-format
msgid "could not even attempt to merge '%.*s'"
msgstr "сливането на „%.*s“ не може даже да започне"
-#: sequencer.c:3290
+#: sequencer.c:3341
msgid "merge: Unable to write new index file"
msgstr "сливане: новият индекс не може да бъде запазен"
-#: sequencer.c:3358 builtin/rebase.c:268
+#: sequencer.c:3409 builtin/rebase.c:298
#, c-format
msgid "Applied autostash.\n"
msgstr "Автоматично скатаното е приложено.\n"
-#: sequencer.c:3370
+#: sequencer.c:3421
#, c-format
msgid "cannot store %s"
msgstr "„%s“ не може да бъде запазен"
-#: sequencer.c:3373 builtin/rebase.c:284
+#: sequencer.c:3424 builtin/rebase.c:314
#, c-format
msgid ""
"Applying autostash resulted in conflicts.\n"
@@ -5463,31 +5894,31 @@ msgstr ""
"надеждно скатани. Можете да пробвате да ги приложите чрез „git stash pop“\n"
"или да ги изхвърлите чрез „git stash drop“, когато поискате.\n"
-#: sequencer.c:3427
+#: sequencer.c:3478
#, c-format
msgid "could not checkout %s"
msgstr "„%s“ не може да се изтегли"
-#: sequencer.c:3441
+#: sequencer.c:3492
#, c-format
msgid "%s: not a valid OID"
msgstr "„%s“ е неправилен идентификатор на обект"
-#: sequencer.c:3446 git-rebase--preserve-merges.sh:724
+#: sequencer.c:3497 git-rebase--preserve-merges.sh:724
msgid "could not detach HEAD"
msgstr "указателят „HEAD“ не може да се отдели"
-#: sequencer.c:3461
+#: sequencer.c:3512
#, c-format
msgid "Stopped at HEAD\n"
msgstr "Бе спряно при „HEAD“\n"
-#: sequencer.c:3463
+#: sequencer.c:3514
#, c-format
msgid "Stopped at %s\n"
msgstr "Бе спряно при „%s“\n"
-#: sequencer.c:3471
+#: sequencer.c:3522
#, c-format
msgid ""
"Could not execute the todo command\n"
@@ -5510,48 +5941,48 @@ msgstr ""
" git rebase --edit-todo\n"
" git rebase --continue\n"
-#: sequencer.c:3543
+#: sequencer.c:3597
#, c-format
msgid "Stopped at %s... %.*s\n"
msgstr "Спиране при „%s“… %.*s\n"
-#: sequencer.c:3622
+#: sequencer.c:3677
#, c-format
msgid "unknown command %d"
msgstr "непозната команда %d"
-#: sequencer.c:3667
+#: sequencer.c:3723
msgid "could not read orig-head"
msgstr "указателят за „orig-head“ не може да се прочете"
-#: sequencer.c:3672 sequencer.c:4741
+#: sequencer.c:3728 sequencer.c:4805
msgid "could not read 'onto'"
msgstr "указателят за „onto“ не може да се прочете"
-#: sequencer.c:3686
+#: sequencer.c:3742
#, c-format
msgid "could not update HEAD to %s"
msgstr "„HEAD“ не може да бъде обновен до „%s“"
-#: sequencer.c:3772
+#: sequencer.c:3831
msgid "cannot rebase: You have unstaged changes."
msgstr "не може да пребазирате, защото има промени, които не са в индекса."
-#: sequencer.c:3781
+#: sequencer.c:3840
msgid "cannot amend non-existing commit"
msgstr "несъществуващо подаване не може да се поправи"
-#: sequencer.c:3783
+#: sequencer.c:3842
#, c-format
msgid "invalid file: '%s'"
msgstr "неправилен файл: „%s“"
-#: sequencer.c:3785
+#: sequencer.c:3844
#, c-format
msgid "invalid contents: '%s'"
msgstr "неправилно съдържание: „%s“"
-#: sequencer.c:3788
+#: sequencer.c:3847
msgid ""
"\n"
"You have uncommitted changes in your working tree. Please, commit them\n"
@@ -5561,47 +5992,47 @@ msgstr ""
"В работното дърво има неподадени промени. Първо ги подайте, а след това\n"
"отново изпълнете „git rebase --continue“."
-#: sequencer.c:3824 sequencer.c:3862
+#: sequencer.c:3883 sequencer.c:3921
#, c-format
msgid "could not write file: '%s'"
msgstr "файлът „%s“ не може да бъде записан"
-#: sequencer.c:3877
+#: sequencer.c:3936
msgid "could not remove CHERRY_PICK_HEAD"
msgstr "указателят „CHERRY_PICK_HEAD“ не може да бъде изтрит"
-#: sequencer.c:3884
+#: sequencer.c:3943
msgid "could not commit staged changes."
msgstr "промените в индекса не могат да бъдат подадени."
-#: sequencer.c:3982
+#: sequencer.c:4044
#, c-format
msgid "%s: can't cherry-pick a %s"
msgstr "%s: не може да се отбере „%s“"
-#: sequencer.c:3986
+#: sequencer.c:4048
#, c-format
msgid "%s: bad revision"
msgstr "%s: неправилна версия"
-#: sequencer.c:4021
+#: sequencer.c:4083
msgid "can't revert as initial commit"
msgstr "първоначалното подаване не може да бъде отменено"
-#: sequencer.c:4466
+#: sequencer.c:4529
msgid "make_script: unhandled options"
msgstr "make_script: неподдържани опции"
-#: sequencer.c:4469
+#: sequencer.c:4532
msgid "make_script: error preparing revisions"
msgstr "make_script: грешка при подготовката на версии"
-#: sequencer.c:4509 sequencer.c:4565 sequencer.c:4840
+#: sequencer.c:4573 sequencer.c:4629 sequencer.c:4904
#, c-format
msgid "unusable todo list: '%s'"
msgstr "неуспешно изтриване на списъка за изпълнение: „%s“"
-#: sequencer.c:4620
+#: sequencer.c:4684
#, c-format
msgid ""
"unrecognized setting %s for option rebase.missingCommitsCheck. Ignoring."
@@ -5609,7 +6040,7 @@ msgstr ""
"Непозната стойност „%s“ за настройката „rebase.missingCommitsCheck“. "
"Настройката се прескача."
-#: sequencer.c:4690
+#: sequencer.c:4754
#, c-format
msgid ""
"Warning: some commits may have been dropped accidentally.\n"
@@ -5618,7 +6049,7 @@ msgstr ""
"Предупреждение: някои подавания може да са пропуснати.\n"
"Пропуснати подавания (новите са най-отгоре):\n"
-#: sequencer.c:4697
+#: sequencer.c:4761
#, c-format
msgid ""
"To avoid this message, use \"drop\" to explicitly remove a commit.\n"
@@ -5635,7 +6066,7 @@ msgstr ""
"предупреждение)\n"
"или „error“ (считане за грешка).\n"
-#: sequencer.c:4710
+#: sequencer.c:4774
#, c-format
msgid ""
"You can fix this with 'git rebase --edit-todo' and then run 'git rebase --"
@@ -5646,31 +6077,31 @@ msgstr ""
"continue“ след това.\n"
"Може и да преустановите пребазирането с командата „git rebase --abort“.\n"
-#: sequencer.c:4848 sequencer.c:4886
+#: sequencer.c:4912 sequencer.c:4950
msgid "nothing to do"
msgstr "няма какво да се прави"
-#: sequencer.c:4852
+#: sequencer.c:4916
#, c-format
msgid "Rebase %s onto %s (%d command)"
msgid_plural "Rebase %s onto %s (%d commands)"
msgstr[0] "Пребазиране на „%s“ върху „%s“ (%d команди)"
msgstr[1] "Пребазиране на „%s“ върху „%s“ (%d команда)"
-#: sequencer.c:4864
+#: sequencer.c:4928
#, c-format
msgid "could not copy '%s' to '%s'."
msgstr "„%s“ не може да се копира като „%s“."
-#: sequencer.c:4868 sequencer.c:4897
+#: sequencer.c:4932 sequencer.c:4961
msgid "could not transform the todo list"
msgstr "файлът с командите не може да се обработи"
-#: sequencer.c:4900
+#: sequencer.c:4964
msgid "could not skip unnecessary pick commands"
msgstr "излишните команди за отбиране не бяха прескочени"
-#: sequencer.c:4983
+#: sequencer.c:5047
msgid "the script was already rearranged."
msgstr "скриптът вече е преподреден."
@@ -5783,32 +6214,32 @@ msgstr "не е хранилище на git: „%s“"
msgid "cannot chdir to '%s'"
msgstr "не може да се влезе в директорията „%s“"
-#: setup.c:711 setup.c:767 setup.c:777 setup.c:816 setup.c:824 setup.c:839
+#: setup.c:711 setup.c:767 setup.c:777 setup.c:816 setup.c:824
msgid "cannot come back to cwd"
msgstr "процесът не може да се върне към предишната работна директория"
-#: setup.c:837
-#, c-format
-msgid "not a git repository (or any of the parent directories): %s"
-msgstr ""
-"нито тази, нито която и да е от по-горните директории, не е хранилище на "
-"git: %s"
-
-#: setup.c:848
+#: setup.c:838
#, c-format
msgid "failed to stat '%*s%s%s'"
msgstr "не може да бъде получена информация чрез „stat“ за „%*s%s%s“"
-#: setup.c:1078
+#: setup.c:1068
msgid "Unable to read current working directory"
msgstr "Текущата работна директория не може да бъде прочетена"
-#: setup.c:1090 setup.c:1096
+#: setup.c:1077 setup.c:1083
#, c-format
msgid "cannot change to '%s'"
msgstr "не може да се влезе в директорията „%s“"
-#: setup.c:1109
+#: setup.c:1088
+#, c-format
+msgid "not a git repository (or any of the parent directories): %s"
+msgstr ""
+"нито тази, нито която и да е от по-горните директории, не е хранилище на "
+"git: %s"
+
+#: setup.c:1094
#, c-format
msgid ""
"not a git repository (or any parent up to mount point %s)\n"
@@ -5819,7 +6250,7 @@ msgstr ""
"Git работи в рамките на една файлова система, защото променливата на средата "
"„GIT_DISCOVERY_ACROSS_FILESYSTEM“ не е зададена."
-#: setup.c:1192
+#: setup.c:1204
#, c-format
msgid ""
"problem with core.sharedRepository filemode value (0%.3o).\n"
@@ -5829,286 +6260,286 @@ msgstr ""
"(0%.3o).\n"
"Собственикът на файла трябва да има права за писане и четене."
-#: setup.c:1235
+#: setup.c:1247
msgid "open /dev/null or dup failed"
msgstr "неуспешно изпълнение на „open“ или „dup“ върху „/dev/null“"
-#: setup.c:1250
+#: setup.c:1262
msgid "fork failed"
msgstr "неуспешно създаване на процес чрез „fork“"
-#: setup.c:1255
+#: setup.c:1267
msgid "setsid failed"
msgstr "неуспешно изпълнение на „setsid“"
-#: sha1-file.c:381
+#: sha1-file.c:445
#, c-format
msgid "object directory %s does not exist; check .git/objects/info/alternates"
msgstr ""
"директорията за обекти „%s“ не съществува, проверете „.git/objects/info/"
"alternates“"
-#: sha1-file.c:432
+#: sha1-file.c:496
#, c-format
msgid "unable to normalize alternate object path: %s"
msgstr "алтернативният път към обекти не може да бъде нормализиран: „%s“"
-#: sha1-file.c:503
+#: sha1-file.c:568
#, c-format
msgid "%s: ignoring alternate object stores, nesting too deep"
msgstr ""
"%s: алтернативните хранилища за обекти се пренебрегват поради прекалено "
"дълбоко влагане"
-#: sha1-file.c:510
+#: sha1-file.c:575
#, c-format
msgid "unable to normalize object directory: %s"
msgstr "директорията за обекти „%s“ не може да бъде нормализирана"
-#: sha1-file.c:565
+#: sha1-file.c:618
msgid "unable to fdopen alternates lockfile"
msgstr "заключващият файл за алтернативите не може да се отвори с „fdopen“"
-#: sha1-file.c:583
+#: sha1-file.c:636
msgid "unable to read alternates file"
msgstr "файлът с алтернативите не може да бъде прочетен"
-#: sha1-file.c:590
+#: sha1-file.c:643
msgid "unable to move new alternates file into place"
msgstr "новият файл с алтернативите не може да бъде преместен на мястото му"
-#: sha1-file.c:625
+#: sha1-file.c:678
#, c-format
msgid "path '%s' does not exist"
msgstr "пътят „%s“ не съществува."
-#: sha1-file.c:651
+#: sha1-file.c:704
#, c-format
msgid "reference repository '%s' as a linked checkout is not supported yet."
msgstr "все още не се поддържа еталонно хранилище „%s“ като свързано."
-#: sha1-file.c:657
+#: sha1-file.c:710
#, c-format
msgid "reference repository '%s' is not a local repository."
msgstr "еталонното хранилище „%s“ не е локално"
-#: sha1-file.c:663
+#: sha1-file.c:716
#, c-format
msgid "reference repository '%s' is shallow"
msgstr "еталонното хранилище „%s“ е плитко"
-#: sha1-file.c:671
+#: sha1-file.c:724
#, c-format
msgid "reference repository '%s' is grafted"
msgstr "еталонното хранилище „%s“ е с присаждане"
-#: sha1-file.c:781
+#: sha1-file.c:838
#, c-format
msgid "attempting to mmap %<PRIuMAX> over limit %<PRIuMAX>"
msgstr ""
"неуспешен опит за „mmap“ %<PRIuMAX>, което е над позволеното %<PRIuMAX>"
-#: sha1-file.c:806
+#: sha1-file.c:863
msgid "mmap failed"
msgstr "неуспешно изпълнение на „mmap“"
-#: sha1-file.c:973
+#: sha1-file.c:1027
#, c-format
msgid "object file %s is empty"
msgstr "файлът с обектите „%s“ е празен"
-#: sha1-file.c:1093 sha1-file.c:2215
+#: sha1-file.c:1151 sha1-file.c:2288
#, c-format
msgid "corrupt loose object '%s'"
msgstr "непакетираният обект „%s“ е повреден"
-#: sha1-file.c:1095 sha1-file.c:2219
+#: sha1-file.c:1153 sha1-file.c:2292
#, c-format
msgid "garbage at end of loose object '%s'"
msgstr "грешни данни в края на непакетирания обект „%s“"
-#: sha1-file.c:1137
+#: sha1-file.c:1195
msgid "invalid object type"
msgstr "неправилен вид обект"
-#: sha1-file.c:1219
+#: sha1-file.c:1279
#, c-format
msgid "unable to unpack %s header with --allow-unknown-type"
msgstr ""
"заглавната част „%s“ не може да се разпакетира с опцията „--allow-unknown-"
"type“"
-#: sha1-file.c:1222
+#: sha1-file.c:1282
#, c-format
msgid "unable to unpack %s header"
msgstr "заглавната част на „%s“ не може да бъде разпакетирана"
-#: sha1-file.c:1228
+#: sha1-file.c:1288
#, c-format
msgid "unable to parse %s header with --allow-unknown-type"
msgstr ""
"заглавната част „%s“ не може да се анализира с опцията „--allow-unknown-type“"
-#: sha1-file.c:1231
+#: sha1-file.c:1291
#, c-format
msgid "unable to parse %s header"
msgstr "заглавната част на „%s“ не може да бъде анализирана"
-#: sha1-file.c:1422
+#: sha1-file.c:1481
#, c-format
msgid "failed to read object %s"
msgstr "обектът „%s“ не може да бъде прочетен"
-#: sha1-file.c:1426
+#: sha1-file.c:1485
#, c-format
msgid "replacement %s not found for %s"
msgstr "заместителят „%s“ на „%s“ не може да бъде открит"
-#: sha1-file.c:1430
+#: sha1-file.c:1489
#, c-format
msgid "loose object %s (stored in %s) is corrupt"
msgstr "непакетираният обект „%s“ (в „%s“) е повреден"
-#: sha1-file.c:1434
+#: sha1-file.c:1493
#, c-format
msgid "packed object %s (stored in %s) is corrupt"
msgstr "пакетираният обект „%s“ (в „%s“) е повреден"
-#: sha1-file.c:1536
+#: sha1-file.c:1595
#, c-format
-msgid "unable to write sha1 filename %s"
-msgstr "грешка при записа на файла със сумите по SHA1 „%s“"
+msgid "unable to write file %s"
+msgstr "файлът „%s“ не може да бъде записан"
-#: sha1-file.c:1543
+#: sha1-file.c:1602
#, c-format
msgid "unable to set permission to '%s'"
msgstr "правата за достъп до „%s“ не могат да бъдат зададени"
-#: sha1-file.c:1550
+#: sha1-file.c:1609
msgid "file write error"
msgstr "грешка при запис на файл"
-#: sha1-file.c:1569
-msgid "error when closing sha1 file"
-msgstr "грешка при затварянето на файла със сумите по SHA1"
+#: sha1-file.c:1628
+msgid "error when closing loose object file"
+msgstr "грешка при затварянето на файла с непакетиран обект"
-#: sha1-file.c:1635
+#: sha1-file.c:1693
#, c-format
msgid "insufficient permission for adding an object to repository database %s"
msgstr ""
"няма права за добавяне на обект към базата от данни на хранилището „%s“"
-#: sha1-file.c:1637
+#: sha1-file.c:1695
msgid "unable to create temporary file"
msgstr "не може да бъде създаден временен файл"
-#: sha1-file.c:1661
-msgid "unable to write sha1 file"
-msgstr "не може да се пише във файла със сумите по SHA1"
+#: sha1-file.c:1719
+msgid "unable to write loose object file"
+msgstr "грешка при записа на файла с непакетиран обект"
-#: sha1-file.c:1667
+#: sha1-file.c:1725
#, c-format
msgid "unable to deflate new object %s (%d)"
msgstr "новият обект „%s“ не може да се компресира с „deflate“: %d"
-#: sha1-file.c:1671
+#: sha1-file.c:1729
#, c-format
msgid "deflateEnd on object %s failed (%d)"
msgstr "неуспешно приключване на „deflate“ върху „%s“: %d"
-#: sha1-file.c:1675
+#: sha1-file.c:1733
#, c-format
msgid "confused by unstable object source data for %s"
msgstr "грешка поради нестабилния източник данни за обектите „%s“"
-#: sha1-file.c:1685 builtin/pack-objects.c:918
+#: sha1-file.c:1743 builtin/pack-objects.c:919
#, c-format
msgid "failed utime() on %s"
msgstr "неуспешно задаване на време на достъп/създаване чрез „utime“ на „%s“"
-#: sha1-file.c:1760
+#: sha1-file.c:1818
#, c-format
-msgid "cannot read sha1_file for %s"
-msgstr "файлът със сумите по SHA1 на „%s“ не може да бъде прочетен"
+msgid "cannot read object for %s"
+msgstr "обектът за „%s“ не може да се прочете"
-#: sha1-file.c:1805
+#: sha1-file.c:1858
msgid "corrupt commit"
msgstr "повредено подаване"
-#: sha1-file.c:1813
+#: sha1-file.c:1866
msgid "corrupt tag"
msgstr "повреден етикет"
-#: sha1-file.c:1912
+#: sha1-file.c:1965
#, c-format
msgid "read error while indexing %s"
msgstr "грешка при четене по време на индексиране на „%s“"
-#: sha1-file.c:1915
+#: sha1-file.c:1968
#, c-format
msgid "short read while indexing %s"
msgstr "непълно прочитане по време на индексиране на „%s“"
-#: sha1-file.c:1988 sha1-file.c:1997
+#: sha1-file.c:2041 sha1-file.c:2050
#, c-format
msgid "%s: failed to insert into database"
msgstr "„%s“ не може да се вмъкне в базата от данни"
-#: sha1-file.c:2003
+#: sha1-file.c:2056
#, c-format
msgid "%s: unsupported file type"
msgstr "неподдържан вид файл: „%s“"
-#: sha1-file.c:2027
+#: sha1-file.c:2080
#, c-format
msgid "%s is not a valid object"
msgstr "„%s“ е неправилен обект"
-#: sha1-file.c:2029
+#: sha1-file.c:2082
#, c-format
msgid "%s is not a valid '%s' object"
msgstr "„%s“ е неправилен обект от вид „%s“"
-#: sha1-file.c:2056 builtin/index-pack.c:154
+#: sha1-file.c:2109 builtin/index-pack.c:154
#, c-format
msgid "unable to open %s"
msgstr "обектът „%s“ не може да бъде отворен"
-#: sha1-file.c:2226 sha1-file.c:2278
+#: sha1-file.c:2299 sha1-file.c:2351
#, c-format
-msgid "sha1 mismatch for %s (expected %s)"
-msgstr "неправилна сума по SHA1 за „%s“ (трябва да е %s)"
+msgid "hash mismatch for %s (expected %s)"
+msgstr "неправилна контролна сума за „%s“ (трябва да е %s)"
-#: sha1-file.c:2250
+#: sha1-file.c:2323
#, c-format
msgid "unable to mmap %s"
msgstr "неуспешно изпълнение на „mmap“ върху „%s“"
-#: sha1-file.c:2255
+#: sha1-file.c:2328
#, c-format
msgid "unable to unpack header of %s"
msgstr "заглавната част на „%s“ не може да бъде разпакетирана"
-#: sha1-file.c:2261
+#: sha1-file.c:2334
#, c-format
msgid "unable to parse header of %s"
msgstr "заглавната част на „%s“ не може да бъде анализирана"
-#: sha1-file.c:2272
+#: sha1-file.c:2345
#, c-format
msgid "unable to unpack contents of %s"
msgstr "съдържанието на „%s“ не може да бъде разпакетирано"
-#: sha1-name.c:476
+#: sha1-name.c:448
#, c-format
msgid "short SHA1 %s is ambiguous"
msgstr "късият SHA1 „%s“ не е еднозначен"
-#: sha1-name.c:487
+#: sha1-name.c:459
msgid "The candidates are:"
msgstr "Възможностите са:"
-#: sha1-name.c:770
+#: sha1-name.c:742
msgid ""
"Git normally never creates a ref that ends with 40 hex characters\n"
"because it will be ignored when you just specify 40-hex. These refs\n"
@@ -6132,71 +6563,81 @@ msgstr ""
"спрете това съобщение като изпълните командата:\n"
"„git config advice.objectNameWarning false“"
-#: submodule.c:116 submodule.c:145
+#: submodule.c:114 submodule.c:143
msgid "Cannot change unmerged .gitmodules, resolve merge conflicts first"
msgstr ""
"Неслетите файлове „.gitmodules“ не могат да бъдат променяни. Първо "
"коригирайте конфликтите"
-#: submodule.c:120 submodule.c:149
+#: submodule.c:118 submodule.c:147
#, c-format
msgid "Could not find section in .gitmodules where path=%s"
msgstr "Във файла „.gitmodules“ липсва раздел за директория „path=%s“"
-#: submodule.c:156
+#: submodule.c:154
#, c-format
msgid "Could not remove .gitmodules entry for %s"
msgstr "Записът „%s“ във файла „.gitmodules“ не може да бъде изтрит"
-#: submodule.c:167
+#: submodule.c:165
msgid "staging updated .gitmodules failed"
msgstr "неуспешно добавяне на променения файл „.gitmodules“ в индекса"
-#: submodule.c:329
+#: submodule.c:327
#, c-format
msgid "in unpopulated submodule '%s'"
msgstr "в неподготвения подмодул „%s“"
-#: submodule.c:360
+#: submodule.c:358
#, c-format
msgid "Pathspec '%s' is in submodule '%.*s'"
msgstr "Пътят „%s“ е в подмодула „%.*s“"
-#: submodule.c:857
+#: submodule.c:906
#, c-format
msgid "submodule entry '%s' (%s) is a %s, not a commit"
msgstr "записът за подмодула „%s“ (%s) е %s, а не подаване!"
-#: submodule.c:1097 builtin/branch.c:656 builtin/submodule--helper.c:1985
+#: submodule.c:1143 builtin/branch.c:656 builtin/submodule--helper.c:1989
msgid "Failed to resolve HEAD as a valid ref."
msgstr "Не може да се открие към какво сочи указателят „HEAD“"
-#: submodule.c:1404
+#: submodule.c:1477
+#, c-format
+msgid "Could not access submodule '%s'"
+msgstr "Подмодулът „%s“ не може да бъде достъпен"
+
+#: submodule.c:1639
#, c-format
msgid "'%s' not recognized as a git repository"
msgstr "„%s“ не е хранилище на git"
-#: submodule.c:1542
+#: submodule.c:1777
#, c-format
msgid "could not start 'git status' in submodule '%s'"
msgstr "командата „git status“ не може да се изпълни в подмодула „%s“"
-#: submodule.c:1555
+#: submodule.c:1790
#, c-format
msgid "could not run 'git status' in submodule '%s'"
msgstr "командата „git status“ не може да се изпълни в подмодула „%s“"
-#: submodule.c:1648
+#: submodule.c:1805
+#, c-format
+msgid "Could not unset core.worktree setting in submodule '%s'"
+msgstr "Настройката „core.worktree“ не може да се изтрие в подмодула „%s“"
+
+#: submodule.c:1895
#, c-format
msgid "submodule '%s' has dirty index"
msgstr "индексът на подмодула „%s“ не е чист"
-#: submodule.c:1700
+#: submodule.c:1947
#, c-format
msgid "Submodule '%s' could not be updated."
msgstr "Подмодулът „%s“ не може да се обнови."
-#: submodule.c:1747
+#: submodule.c:1996
#, c-format
msgid ""
"relocate_gitdir for submodule '%s' with more than one worktree not supported"
@@ -6204,12 +6645,12 @@ msgstr ""
"не се поддържа „relocate_gitdir“ за подмодула „%s“, който има повече от едно "
"работно дърво"
-#: submodule.c:1759 submodule.c:1815
+#: submodule.c:2008 submodule.c:2064
#, c-format
msgid "could not lookup name for submodule '%s'"
msgstr "името на подмодула „%s“ не може да бъде намерено"
-#: submodule.c:1766
+#: submodule.c:2015
#, c-format
msgid ""
"Migrating git directory of '%s%s' from\n"
@@ -6220,16 +6661,16 @@ msgstr ""
"„%s“ към\n"
"„%s“\n"
-#: submodule.c:1850
+#: submodule.c:2099
#, c-format
msgid "could not recurse into submodule '%s'"
msgstr "неуспешна обработка на поддиректориите в подмодула „%s“"
-#: submodule.c:1894
+#: submodule.c:2143
msgid "could not start ls-files in .."
msgstr "„ls-stat“ не може да се стартира в „..“"
-#: submodule.c:1933
+#: submodule.c:2182
#, c-format
msgid "ls-tree returned unexpected return code %d"
msgstr "„ls-tree“ завърши с неочакван изходен код: %d"
@@ -6290,7 +6731,7 @@ msgstr "входният файл „%s“ не може да бъде проч
msgid "could not read from stdin"
msgstr "от стандартния вход не може да се чете"
-#: trailer.c:1011 builtin/am.c:47
+#: trailer.c:1011 wrapper.c:701
#, c-format
msgid "could not stat %s"
msgstr "Не може да се получи информация чрез „stat“ за „%s“"
@@ -6329,29 +6770,29 @@ msgstr "пратката на git „%s“ не може да бъде проч
msgid "transport: invalid depth option '%s'"
msgstr "transport: неправилна опция за дълбочина: %s"
-#: transport.c:616
+#: transport.c:617
msgid "could not parse transport.color.* config"
msgstr "стойността на настройката „transport.color.*“ не може да се разпознае"
-#: transport.c:689
+#: transport.c:690
msgid "support for protocol v2 not implemented yet"
msgstr "протокол версия 2 все още не се поддържа"
-#: transport.c:816
+#: transport.c:817
#, c-format
msgid "unknown value for config '%s': %s"
msgstr "непозната стойност за настройката „%s“: „%s“"
-#: transport.c:882
+#: transport.c:883
#, c-format
msgid "transport '%s' not allowed"
msgstr "преносът по „%s“ не е позволен"
-#: transport.c:936
+#: transport.c:937
msgid "git-over-rsync is no longer supported"
msgstr "командата „git-over-rsync“ вече не се поддържа"
-#: transport.c:1031
+#: transport.c:1032
#, c-format
msgid ""
"The following submodule paths contain changes that can\n"
@@ -6360,7 +6801,7 @@ msgstr ""
"Следните пътища за подмодули съдържат промени,\n"
"които липсват от всички отдалечени хранилища:\n"
-#: transport.c:1035
+#: transport.c:1036
#, c-format
msgid ""
"\n"
@@ -6385,19 +6826,19 @@ msgstr ""
" git push\n"
"\n"
-#: transport.c:1043
+#: transport.c:1044
msgid "Aborting."
msgstr "Преустановяване на действието."
-#: transport.c:1182
+#: transport.c:1184
msgid "failed to push all needed submodules"
msgstr "неуспешно изтласкване на всички необходими подмодули"
-#: transport.c:1315 transport-helper.c:643
+#: transport.c:1317 transport-helper.c:643
msgid "operation not supported by protocol"
msgstr "опцията не се поддържа от протокола"
-#: transport.c:1419
+#: transport.c:1421
#, c-format
msgid "invalid line while parsing alternate refs: %s"
msgstr "неправилен ред при анализа на алтернативните указатели: „%s“"
@@ -6450,7 +6891,7 @@ msgstr "неуспешно изпълнение на бързо внасяне"
msgid "error while running fast-import"
msgstr "грешка при изпълнението на бързо внасяне"
-#: transport-helper.c:531 transport-helper.c:1091
+#: transport-helper.c:531 transport-helper.c:1097
#, c-format
msgid "could not read ref %s"
msgstr "указателят „%s“ не може да се прочете"
@@ -6473,59 +6914,59 @@ msgstr "неправилен път на отдалечената услуга"
msgid "can't connect to subservice %s"
msgstr "неуспешно свързване към подуслугата „%s“"
-#: transport-helper.c:713
+#: transport-helper.c:718
#, c-format
msgid "expected ok/error, helper said '%s'"
msgstr ""
"очаква се или успех, или грешка, но насрещната помощна програма върна „%s“"
-#: transport-helper.c:766
+#: transport-helper.c:771
#, c-format
msgid "helper reported unexpected status of %s"
msgstr "насрещната помощна програма завърши с неочакван изходен код: „%s“"
-#: transport-helper.c:827
+#: transport-helper.c:832
#, c-format
msgid "helper %s does not support dry-run"
msgstr "насрещната помощна програма „%s“ не поддържа проби „dry-run“"
-#: transport-helper.c:830
+#: transport-helper.c:835
#, c-format
msgid "helper %s does not support --signed"
msgstr "насрещната помощна програма „%s“ не поддържа опцията „--signed“"
-#: transport-helper.c:833
+#: transport-helper.c:838
#, c-format
msgid "helper %s does not support --signed=if-asked"
msgstr ""
"насрещната помощна програма „%s“ не поддържа опцията „--signed=if-asked“"
-#: transport-helper.c:840
+#: transport-helper.c:845
#, c-format
msgid "helper %s does not support 'push-option'"
msgstr "насрещната помощна програма „%s“ не поддържа опции за изтласкване"
-#: transport-helper.c:932
+#: transport-helper.c:937
msgid "remote-helper doesn't support push; refspec needed"
msgstr ""
"насрещната помощна програма не поддържа изтласкване. Необходимо е "
"изброяване на указателите"
-#: transport-helper.c:937
+#: transport-helper.c:942
#, c-format
msgid "helper %s does not support 'force'"
msgstr ""
"насрещната помощна програма не поддържа „%s“ поддържа опцията „--force“"
-#: transport-helper.c:984
+#: transport-helper.c:989
msgid "couldn't run fast-export"
msgstr "не може да се извърши бързо изнасяне"
-#: transport-helper.c:989
+#: transport-helper.c:994
msgid "error while running fast-export"
msgstr "грешка при изпълнението на командата за бързо изнасяне"
-#: transport-helper.c:1014
+#: transport-helper.c:1019
#, c-format
msgid ""
"No refs in common and none specified; doing nothing.\n"
@@ -6534,47 +6975,47 @@ msgstr ""
"Няма общи указатели, не са указани никакви указатели — нищо няма да бъде\n"
"направено. Пробвайте да укажете клон, напр. “master“.\n"
-#: transport-helper.c:1077
+#: transport-helper.c:1083
#, c-format
msgid "malformed response in ref list: %s"
msgstr "неправилен отговор в списъка с указатели: „%s“"
-#: transport-helper.c:1231
+#: transport-helper.c:1236
#, c-format
msgid "read(%s) failed"
msgstr "неуспешно четене на „%s“"
-#: transport-helper.c:1258
+#: transport-helper.c:1263
#, c-format
msgid "write(%s) failed"
msgstr "неуспешен запис в „%s“"
-#: transport-helper.c:1307
+#: transport-helper.c:1312
#, c-format
msgid "%s thread failed"
msgstr "неуспешно изпълнение на нишката „%s“"
-#: transport-helper.c:1311
+#: transport-helper.c:1316
#, c-format
msgid "%s thread failed to join: %s"
msgstr "завършването на нишката „%s“ не може да се изчака: „%s“"
-#: transport-helper.c:1330 transport-helper.c:1334
+#: transport-helper.c:1335 transport-helper.c:1339
#, c-format
msgid "can't start thread for copying data: %s"
msgstr "неуспешно стартиране на нишка за копиране на данните: „%s“"
-#: transport-helper.c:1371
+#: transport-helper.c:1376
#, c-format
msgid "%s process failed to wait"
msgstr "процесът на „%s“ не успя да изчака чрез „waitpid“"
-#: transport-helper.c:1375
+#: transport-helper.c:1380
#, c-format
msgid "%s process failed"
msgstr "неуспешно изпълнение на „%s“"
-#: transport-helper.c:1393 transport-helper.c:1402
+#: transport-helper.c:1398 transport-helper.c:1407
msgid "can't start thread for copying data"
msgstr "неуспешно стартиране на нишка за копиране на данните"
@@ -6590,11 +7031,11 @@ msgstr "неправилни права за достъп в запис в дъ
msgid "empty filename in tree entry"
msgstr "празно име на файл в запис в дърво"
-#: tree-walk.c:115
+#: tree-walk.c:116
msgid "too-short tree file"
msgstr "прекалено кратък файл-дърво"
-#: unpack-trees.c:112
+#: unpack-trees.c:111
#, c-format
msgid ""
"Your local changes to the following files would be overwritten by checkout:\n"
@@ -6603,7 +7044,7 @@ msgstr ""
"Изтеглянето ще презапише локалните промени на тези файлове:\n"
"%%sПодайте или скатайте промените, за да преминете към нов клон."
-#: unpack-trees.c:114
+#: unpack-trees.c:113
#, c-format
msgid ""
"Your local changes to the following files would be overwritten by checkout:\n"
@@ -6612,7 +7053,7 @@ msgstr ""
"Изтеглянето ще презапише локалните промени на тези файлове:\n"
"%%s"
-#: unpack-trees.c:117
+#: unpack-trees.c:116
#, c-format
msgid ""
"Your local changes to the following files would be overwritten by merge:\n"
@@ -6621,7 +7062,7 @@ msgstr ""
"Сливането ще презапише локалните промени на тези файлове:\n"
"%%sПодайте или скатайте промените, за да слеете."
-#: unpack-trees.c:119
+#: unpack-trees.c:118
#, c-format
msgid ""
"Your local changes to the following files would be overwritten by merge:\n"
@@ -6630,7 +7071,7 @@ msgstr ""
"Сливането ще презапише локалните промени на тези файлове:\n"
"%%s"
-#: unpack-trees.c:122
+#: unpack-trees.c:121
#, c-format
msgid ""
"Your local changes to the following files would be overwritten by %s:\n"
@@ -6639,7 +7080,7 @@ msgstr ""
"„%s“ ще презапише локалните промени на тези файлове:\n"
"%%sПодайте или скатайте промените, за да извършите „%s“."
-#: unpack-trees.c:124
+#: unpack-trees.c:123
#, c-format
msgid ""
"Your local changes to the following files would be overwritten by %s:\n"
@@ -6648,7 +7089,7 @@ msgstr ""
"„%s“ ще презапише локалните промени на тези файлове:\n"
"%%s"
-#: unpack-trees.c:129
+#: unpack-trees.c:128
#, c-format
msgid ""
"Updating the following directories would lose untracked files in them:\n"
@@ -6657,7 +7098,7 @@ msgstr ""
"Обновяването на следните директории ще изтрие неследените файлове в тях:\n"
"%s"
-#: unpack-trees.c:133
+#: unpack-trees.c:132
#, c-format
msgid ""
"The following untracked working tree files would be removed by checkout:\n"
@@ -6666,7 +7107,7 @@ msgstr ""
"Изтеглянето ще изтрие тези неследени файлове в работното дърво:\n"
"%%sПреместете ги или ги изтрийте, за да преминете на друг клон."
-#: unpack-trees.c:135
+#: unpack-trees.c:134
#, c-format
msgid ""
"The following untracked working tree files would be removed by checkout:\n"
@@ -6675,7 +7116,7 @@ msgstr ""
"Изтеглянето ще изтрие тези неследени файлове в работното дърво:\n"
"%%s"
-#: unpack-trees.c:138
+#: unpack-trees.c:137
#, c-format
msgid ""
"The following untracked working tree files would be removed by merge:\n"
@@ -6684,7 +7125,7 @@ msgstr ""
"Сливането ще изтрие тези неследени файлове в работното дърво:\n"
"%%sПреместете ги или ги изтрийте, за да слеете."
-#: unpack-trees.c:140
+#: unpack-trees.c:139
#, c-format
msgid ""
"The following untracked working tree files would be removed by merge:\n"
@@ -6693,7 +7134,7 @@ msgstr ""
"Сливането ще изтрие тези неследени файлове в работното дърво:\n"
"%%s"
-#: unpack-trees.c:143
+#: unpack-trees.c:142
#, c-format
msgid ""
"The following untracked working tree files would be removed by %s:\n"
@@ -6702,7 +7143,7 @@ msgstr ""
"„%s“ ще изтрие тези неследени файлове в работното дърво:\n"
"%%sПреместете ги или ги изтрийте, за да извършите „%s“."
-#: unpack-trees.c:145
+#: unpack-trees.c:144
#, c-format
msgid ""
"The following untracked working tree files would be removed by %s:\n"
@@ -6711,7 +7152,7 @@ msgstr ""
"„%s“ ще изтрие тези неследени файлове в работното дърво:\n"
"%%s"
-#: unpack-trees.c:151
+#: unpack-trees.c:150
#, c-format
msgid ""
"The following untracked working tree files would be overwritten by "
@@ -6721,7 +7162,7 @@ msgstr ""
"Изтеглянето ще презапише тези неследени файлове в работното дърво:\n"
"%%sПреместете ги или ги изтрийте, за да смените клон."
-#: unpack-trees.c:153
+#: unpack-trees.c:152
#, c-format
msgid ""
"The following untracked working tree files would be overwritten by "
@@ -6731,7 +7172,7 @@ msgstr ""
"Изтеглянето ще презапише тези неследени файлове в работното дърво:\n"
"%%s"
-#: unpack-trees.c:156
+#: unpack-trees.c:155
#, c-format
msgid ""
"The following untracked working tree files would be overwritten by merge:\n"
@@ -6740,7 +7181,7 @@ msgstr ""
"Сливането ще презапише тези неследени файлове в работното дърво:\n"
"%%sПреместете ги или ги изтрийте, за да слеете."
-#: unpack-trees.c:158
+#: unpack-trees.c:157
#, c-format
msgid ""
"The following untracked working tree files would be overwritten by merge:\n"
@@ -6749,7 +7190,7 @@ msgstr ""
"Сливането ще презапише тези неследени файлове в работното дърво:\n"
"%%s"
-#: unpack-trees.c:161
+#: unpack-trees.c:160
#, c-format
msgid ""
"The following untracked working tree files would be overwritten by %s:\n"
@@ -6758,7 +7199,7 @@ msgstr ""
"„%s“ ще презапише тези неследени файлове в работното дърво:\n"
"%%sПреместете ги или ги изтрийте, за да извършите „%s“."
-#: unpack-trees.c:163
+#: unpack-trees.c:162
#, c-format
msgid ""
"The following untracked working tree files would be overwritten by %s:\n"
@@ -6767,12 +7208,12 @@ msgstr ""
"„%s“ ще презапише тези неследени файлове в работното дърво:\n"
"%%s"
-#: unpack-trees.c:171
+#: unpack-trees.c:170
#, c-format
msgid "Entry '%s' overlaps with '%s'. Cannot bind."
msgstr "Записът за „%s“ съвпада с този за „%s“. Не може да се присвои."
-#: unpack-trees.c:174
+#: unpack-trees.c:173
#, c-format
msgid ""
"Cannot update sparse checkout: the following entries are not up to date:\n"
@@ -6782,7 +7223,7 @@ msgstr ""
"актуални:\n"
"%s"
-#: unpack-trees.c:176
+#: unpack-trees.c:175
#, c-format
msgid ""
"The following working tree files would be overwritten by sparse checkout "
@@ -6793,7 +7234,7 @@ msgstr ""
"дърво:\n"
"%s"
-#: unpack-trees.c:178
+#: unpack-trees.c:177
#, c-format
msgid ""
"The following working tree files would be removed by sparse checkout "
@@ -6804,7 +7245,7 @@ msgstr ""
"дърво:\n"
"%s"
-#: unpack-trees.c:180
+#: unpack-trees.c:179
#, c-format
msgid ""
"Cannot update submodule:\n"
@@ -6813,16 +7254,16 @@ msgstr ""
"Подмодулът не може да бъде обновен:\n"
"„%s“"
-#: unpack-trees.c:254
+#: unpack-trees.c:253
#, c-format
msgid "Aborting\n"
msgstr "Преустановяване на действието\n"
-#: unpack-trees.c:336
+#: unpack-trees.c:335
msgid "Checking out files"
msgstr "Изтегляне на файлове"
-#: unpack-trees.c:368
+#: unpack-trees.c:367
msgid ""
"the following paths have collided (e.g. case-sensitive paths\n"
"on a case-insensitive filesystem) and only one from the same\n"
@@ -6861,7 +7302,7 @@ msgstr "неправилен номер на порт"
msgid "invalid '..' path segment"
msgstr "неправилна част от пътя „..“"
-#: worktree.c:249 builtin/am.c:2100
+#: worktree.c:249 builtin/am.c:2094
#, c-format
msgid "failed to read '%s'"
msgstr "„%s“ не може да бъде прочетен"
@@ -6906,161 +7347,161 @@ msgstr "няма достъп до „%s“"
msgid "unable to get current working directory"
msgstr "текущата работна директория е недостъпна"
-#: wt-status.c:154
+#: wt-status.c:155
msgid "Unmerged paths:"
msgstr "Неслети пътища:"
-#: wt-status.c:181 wt-status.c:208
+#: wt-status.c:182 wt-status.c:209
#, c-format
msgid " (use \"git reset %s <file>...\" to unstage)"
msgstr " (използвайте „git reset %s ФАЙЛ…“, за да извадите ФАЙЛа от индекса)"
-#: wt-status.c:183 wt-status.c:210
+#: wt-status.c:184 wt-status.c:211
msgid " (use \"git rm --cached <file>...\" to unstage)"
msgstr ""
" (използвайте „git rm --cached %s ФАЙЛ…“, за да извадите ФАЙЛа от индекса)"
-#: wt-status.c:187
+#: wt-status.c:188
msgid " (use \"git add <file>...\" to mark resolution)"
msgstr ""
" (използвайте „git add ФАЙЛ…“, за да укажете разрешаването на конфликта)"
-#: wt-status.c:189 wt-status.c:193
+#: wt-status.c:190 wt-status.c:194
msgid " (use \"git add/rm <file>...\" as appropriate to mark resolution)"
msgstr ""
" (използвайте „git add/rm ФАЙЛ…“, според решението, което избирате за "
"конфликта)"
-#: wt-status.c:191
+#: wt-status.c:192
msgid " (use \"git rm <file>...\" to mark resolution)"
msgstr ""
" (използвайте „git rm ФАЙЛ…“, за да укажете разрешаването на конфликта)"
-#: wt-status.c:202 wt-status.c:1042
+#: wt-status.c:203 wt-status.c:1046
msgid "Changes to be committed:"
msgstr "Промени, които ще бъдат подадени:"
-#: wt-status.c:220 wt-status.c:1051
+#: wt-status.c:221 wt-status.c:1055
msgid "Changes not staged for commit:"
msgstr "Промени, които не са в индекса за подаване:"
-#: wt-status.c:224
+#: wt-status.c:225
msgid " (use \"git add <file>...\" to update what will be committed)"
msgstr ""
" (използвайте „git add ФАЙЛ…“, за да обновите съдържанието за подаване)"
-#: wt-status.c:226
+#: wt-status.c:227
msgid " (use \"git add/rm <file>...\" to update what will be committed)"
msgstr ""
" (използвайте „git add/rm ФАЙЛ…“, за да обновите съдържанието за подаване)"
-#: wt-status.c:227
+#: wt-status.c:228
msgid ""
" (use \"git checkout -- <file>...\" to discard changes in working directory)"
msgstr ""
" (използвайте „git checkout -- ФАЙЛ…“, за да отхвърлите промените в "
"работното дърво)"
-#: wt-status.c:229
+#: wt-status.c:230
msgid " (commit or discard the untracked or modified content in submodules)"
msgstr ""
" (подайте или отхвърлете неследеното или промененото съдържание в "
"подмодулите)"
-#: wt-status.c:241
+#: wt-status.c:242
#, c-format
msgid " (use \"git %s <file>...\" to include in what will be committed)"
msgstr ""
" (използвайте „git %s ФАЙЛ…“, за да определите какво включвате в подаването)"
-#: wt-status.c:256
+#: wt-status.c:257
msgid "both deleted:"
msgstr "изтрити в двата случая:"
-#: wt-status.c:258
+#: wt-status.c:259
msgid "added by us:"
msgstr "добавени от вас:"
-#: wt-status.c:260
+#: wt-status.c:261
msgid "deleted by them:"
msgstr "изтрити от тях:"
-#: wt-status.c:262
+#: wt-status.c:263
msgid "added by them:"
msgstr "добавени от тях:"
-#: wt-status.c:264
+#: wt-status.c:265
msgid "deleted by us:"
msgstr "изтрити от вас:"
-#: wt-status.c:266
+#: wt-status.c:267
msgid "both added:"
msgstr "добавени и в двата случая:"
-#: wt-status.c:268
+#: wt-status.c:269
msgid "both modified:"
msgstr "променени и в двата случая:"
-#: wt-status.c:278
+#: wt-status.c:279
msgid "new file:"
msgstr "нов файл:"
-#: wt-status.c:280
+#: wt-status.c:281
msgid "copied:"
msgstr "копиран:"
-#: wt-status.c:282
+#: wt-status.c:283
msgid "deleted:"
msgstr "изтрит:"
-#: wt-status.c:284
+#: wt-status.c:285
msgid "modified:"
msgstr "променен:"
-#: wt-status.c:286
+#: wt-status.c:287
msgid "renamed:"
msgstr "преименуван:"
-#: wt-status.c:288
+#: wt-status.c:289
msgid "typechange:"
msgstr "смяна на вида:"
-#: wt-status.c:290
+#: wt-status.c:291
msgid "unknown:"
msgstr "непозната промяна:"
-#: wt-status.c:292
+#: wt-status.c:293
msgid "unmerged:"
msgstr "неслят:"
-#: wt-status.c:372
+#: wt-status.c:373
msgid "new commits, "
msgstr "нови подавания, "
-#: wt-status.c:374
+#: wt-status.c:375
msgid "modified content, "
msgstr "променено съдържание, "
-#: wt-status.c:376
+#: wt-status.c:377
msgid "untracked content, "
msgstr "неследено съдържание, "
-#: wt-status.c:880
+#: wt-status.c:884
#, c-format
msgid "Your stash currently has %d entry"
msgid_plural "Your stash currently has %d entries"
msgstr[0] "Има %d скатаване."
msgstr[1] "Има %d скатавания."
-#: wt-status.c:912
+#: wt-status.c:916
msgid "Submodules changed but not updated:"
msgstr "Подмодулите са променени, но не са обновени:"
-#: wt-status.c:914
+#: wt-status.c:918
msgid "Submodule changes to be committed:"
msgstr "Промени в подмодулите за подаване:"
-#: wt-status.c:996
+#: wt-status.c:1000
msgid ""
"Do not modify or remove the line above.\n"
"Everything below it will be ignored."
@@ -7068,241 +7509,241 @@ msgstr ""
"Не променяйте и не изтривайте горния ред.\n"
"Всичко отдолу ще бъде изтрито."
-#: wt-status.c:1097
+#: wt-status.c:1101
msgid "You have unmerged paths."
msgstr "Някои пътища не са слети."
-#: wt-status.c:1100
+#: wt-status.c:1104
msgid " (fix conflicts and run \"git commit\")"
msgstr " (коригирайте конфликтите и изпълнете „git commit“)"
-#: wt-status.c:1102
+#: wt-status.c:1106
msgid " (use \"git merge --abort\" to abort the merge)"
msgstr " (използвайте „git merge --abort“, за да преустановите сливането)"
-#: wt-status.c:1106
+#: wt-status.c:1110
msgid "All conflicts fixed but you are still merging."
msgstr "Всички конфликти са решени, но продължавате сливането."
-#: wt-status.c:1109
+#: wt-status.c:1113
msgid " (use \"git commit\" to conclude merge)"
msgstr " (използвайте „git commit“, за да завършите сливането)"
-#: wt-status.c:1118
+#: wt-status.c:1122
msgid "You are in the middle of an am session."
msgstr "В момента прилагате поредица от кръпки чрез „git am“."
-#: wt-status.c:1121
+#: wt-status.c:1125
msgid "The current patch is empty."
msgstr "Текущата кръпка е празна."
-#: wt-status.c:1125
+#: wt-status.c:1129
msgid " (fix conflicts and then run \"git am --continue\")"
msgstr " (коригирайте конфликтите и изпълнете „git am --continue“)"
-#: wt-status.c:1127
+#: wt-status.c:1131
msgid " (use \"git am --skip\" to skip this patch)"
msgstr " (използвайте „git am --skip“, за да пропуснете тази кръпка)"
-#: wt-status.c:1129
+#: wt-status.c:1133
msgid " (use \"git am --abort\" to restore the original branch)"
msgstr ""
" (използвайте „git am --abort“, за да възстановите първоначалния клон)"
-#: wt-status.c:1260
+#: wt-status.c:1264
msgid "git-rebase-todo is missing."
msgstr "„git-rebase-todo“ липсва."
-#: wt-status.c:1262
+#: wt-status.c:1266
msgid "No commands done."
msgstr "Не са изпълнени команди."
-#: wt-status.c:1265
+#: wt-status.c:1269
#, c-format
msgid "Last command done (%d command done):"
msgid_plural "Last commands done (%d commands done):"
msgstr[0] "Последна изпълнена команда (изпълнена е общо %d команда):"
msgstr[1] "Последна изпълнена команда (изпълнени са общо %d команди):"
-#: wt-status.c:1276
+#: wt-status.c:1280
#, c-format
msgid " (see more in file %s)"
msgstr " повече информация има във файла „%s“)"
-#: wt-status.c:1281
+#: wt-status.c:1285
msgid "No commands remaining."
msgstr "Не остават повече команди."
-#: wt-status.c:1284
+#: wt-status.c:1288
#, c-format
msgid "Next command to do (%d remaining command):"
msgid_plural "Next commands to do (%d remaining commands):"
msgstr[0] "Следваща команда за изпълнение (остава още %d команда):"
msgstr[1] "Следваща команда за изпълнение (остават още %d команди):"
-#: wt-status.c:1292
+#: wt-status.c:1296
msgid " (use \"git rebase --edit-todo\" to view and edit)"
msgstr ""
" (използвайте „git rebase --edit-todo“, за да разгледате и редактирате)"
-#: wt-status.c:1304
+#: wt-status.c:1308
#, c-format
msgid "You are currently rebasing branch '%s' on '%s'."
msgstr "В момента пребазирате клона „%s“ върху „%s“."
-#: wt-status.c:1309
+#: wt-status.c:1313
msgid "You are currently rebasing."
msgstr "В момента пребазирате."
-#: wt-status.c:1322
+#: wt-status.c:1326
msgid " (fix conflicts and then run \"git rebase --continue\")"
msgstr " (коригирайте конфликтите и използвайте „git rebase --continue“)"
-#: wt-status.c:1324
+#: wt-status.c:1328
msgid " (use \"git rebase --skip\" to skip this patch)"
msgstr " (използвайте „git rebase --skip“, за да пропуснете тази кръпка)"
-#: wt-status.c:1326
+#: wt-status.c:1330
msgid " (use \"git rebase --abort\" to check out the original branch)"
msgstr ""
" (използвайте „git rebase --abort“, за да възстановите първоначалния клон)"
-#: wt-status.c:1333
+#: wt-status.c:1337
msgid " (all conflicts fixed: run \"git rebase --continue\")"
msgstr " (всички конфликти са коригирани: изпълнете „git rebase --continue“)"
-#: wt-status.c:1337
+#: wt-status.c:1341
#, c-format
msgid ""
"You are currently splitting a commit while rebasing branch '%s' on '%s'."
msgstr "В момента разделяте подаване докато пребазирате клона „%s“ върху „%s“."
-#: wt-status.c:1342
+#: wt-status.c:1346
msgid "You are currently splitting a commit during a rebase."
msgstr "В момента разделяте подаване докато пребазирате."
-#: wt-status.c:1345
+#: wt-status.c:1349
msgid " (Once your working directory is clean, run \"git rebase --continue\")"
msgstr ""
" (След като работното ви дърво стане чисто, използвайте „git rebase --"
"continue“)"
-#: wt-status.c:1349
+#: wt-status.c:1353
#, c-format
msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
msgstr ""
"В момента редактирате подаване докато пребазирате клона „%s“ върху „%s“."
-#: wt-status.c:1354
+#: wt-status.c:1358
msgid "You are currently editing a commit during a rebase."
msgstr "В момента редактирате подаване докато пребазирате."
-#: wt-status.c:1357
+#: wt-status.c:1361
msgid " (use \"git commit --amend\" to amend the current commit)"
msgstr ""
" (използвайте „git commit --amend“, за да редактирате текущото подаване)"
-#: wt-status.c:1359
+#: wt-status.c:1363
msgid ""
" (use \"git rebase --continue\" once you are satisfied with your changes)"
msgstr ""
" (използвайте „git rebase --continue“, след като завършите промените си)"
-#: wt-status.c:1368
+#: wt-status.c:1372
#, c-format
msgid "You are currently cherry-picking commit %s."
msgstr "В момента отбирате подаването „%s“."
-#: wt-status.c:1373
+#: wt-status.c:1377
msgid " (fix conflicts and run \"git cherry-pick --continue\")"
msgstr " (коригирайте конфликтите и изпълнете „git cherry-pick --continue“)"
-#: wt-status.c:1376
+#: wt-status.c:1380
msgid " (all conflicts fixed: run \"git cherry-pick --continue\")"
msgstr ""
" (всички конфликти са коригирани, изпълнете „git cherry-pick --continue“)"
-#: wt-status.c:1378
+#: wt-status.c:1382
msgid " (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
msgstr ""
" (използвайте „git cherry-pick --abort“, за да отмените всички действия с "
"отбиране)"
-#: wt-status.c:1386
+#: wt-status.c:1390
#, c-format
msgid "You are currently reverting commit %s."
msgstr "В момента отменяте подаване „%s“."
-#: wt-status.c:1391
+#: wt-status.c:1395
msgid " (fix conflicts and run \"git revert --continue\")"
msgstr " (коригирайте конфликтите и изпълнете „git revert --continue“)"
-#: wt-status.c:1394
+#: wt-status.c:1398
msgid " (all conflicts fixed: run \"git revert --continue\")"
msgstr " (всички конфликти са коригирани, изпълнете „git revert --continue“)"
-#: wt-status.c:1396
+#: wt-status.c:1400
msgid " (use \"git revert --abort\" to cancel the revert operation)"
msgstr ""
" (използвайте „git revert --abort“, за да преустановите отмяната на "
"подаване)"
-#: wt-status.c:1406
+#: wt-status.c:1410
#, c-format
msgid "You are currently bisecting, started from branch '%s'."
msgstr "В момента търсите двоично, като сте стартирали от клон „%s“."
-#: wt-status.c:1410
+#: wt-status.c:1414
msgid "You are currently bisecting."
msgstr "В момента търсите двоично."
-#: wt-status.c:1413
+#: wt-status.c:1417
msgid " (use \"git bisect reset\" to get back to the original branch)"
msgstr ""
" (използвайте „git bisect reset“, за да се върнете към първоначалното "
"състояние и клон)"
-#: wt-status.c:1611
+#: wt-status.c:1617
msgid "On branch "
msgstr "На клон "
-#: wt-status.c:1618
+#: wt-status.c:1624
msgid "interactive rebase in progress; onto "
msgstr "извършвате интерактивно пребазиране върху "
-#: wt-status.c:1620
+#: wt-status.c:1626
msgid "rebase in progress; onto "
msgstr "извършвате пребазиране върху "
-#: wt-status.c:1625
+#: wt-status.c:1631
msgid "HEAD detached at "
msgstr "Указателят „HEAD“ не е свързан и е при "
-#: wt-status.c:1627
+#: wt-status.c:1633
msgid "HEAD detached from "
msgstr "Указателят „HEAD“ не е свързан и е отделѐн от "
-#: wt-status.c:1630
+#: wt-status.c:1636
msgid "Not currently on any branch."
msgstr "Извън всички клони."
-#: wt-status.c:1647
+#: wt-status.c:1653
msgid "Initial commit"
msgstr "Първоначално подаване"
-#: wt-status.c:1648
+#: wt-status.c:1654
msgid "No commits yet"
msgstr "Все още липсват подавания"
-#: wt-status.c:1662
+#: wt-status.c:1668
msgid "Untracked files"
msgstr "Неследени файлове"
-#: wt-status.c:1664
+#: wt-status.c:1670
msgid "Ignored files"
msgstr "Игнорирани файлове"
-#: wt-status.c:1668
+#: wt-status.c:1674
#, c-format
msgid ""
"It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -7314,32 +7755,32 @@ msgstr ""
"изпълнението, но не трябва да забравяте ръчно да добавяте новите файлове.\n"
"За повече подробности погледнете „git status help“."
-#: wt-status.c:1674
+#: wt-status.c:1680
#, c-format
msgid "Untracked files not listed%s"
msgstr "Неследените файлове не са изведени%s"
-#: wt-status.c:1676
+#: wt-status.c:1682
msgid " (use -u option to show untracked files)"
msgstr " (използвайте опцията „-u“, за да изведете неследените файлове)"
-#: wt-status.c:1682
+#: wt-status.c:1688
msgid "No changes"
msgstr "Няма промени"
-#: wt-status.c:1687
+#: wt-status.c:1693
#, c-format
msgid "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n"
msgstr ""
"към индекса за подаване не са добавени промени (използвайте „git add“ и/или "
"„git commit -a“)\n"
-#: wt-status.c:1690
+#: wt-status.c:1696
#, c-format
msgid "no changes added to commit\n"
msgstr "към индекса за подаване не са добавени промени\n"
-#: wt-status.c:1693
+#: wt-status.c:1699
#, c-format
msgid ""
"nothing added to commit but untracked files present (use \"git add\" to "
@@ -7348,196 +7789,196 @@ msgstr ""
"към индекса за подаване не са добавени промени, но има нови файлове "
"(използвайте „git add“, за да започне тяхното следене)\n"
-#: wt-status.c:1696
+#: wt-status.c:1702
#, c-format
msgid "nothing added to commit but untracked files present\n"
msgstr "към индекса за подаване не са добавени промени, но има нови файлове\n"
-#: wt-status.c:1699
+#: wt-status.c:1705
#, c-format
msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
msgstr ""
"липсват каквито и да е промени (създайте или копирайте файлове и използвайте "
"„git add“, за да започне тяхното следене)\n"
-#: wt-status.c:1702 wt-status.c:1707
+#: wt-status.c:1708 wt-status.c:1713
#, c-format
msgid "nothing to commit\n"
msgstr "липсват каквито и да е промени\n"
-#: wt-status.c:1705
+#: wt-status.c:1711
#, c-format
msgid "nothing to commit (use -u to show untracked files)\n"
msgstr ""
"липсват каквито и да е промени (използвайте опцията „-u“, за да се изведат и "
"неследените файлове)\n"
-#: wt-status.c:1709
+#: wt-status.c:1715
#, c-format
msgid "nothing to commit, working tree clean\n"
msgstr "липсват каквито и да е промени, работното дърво е чисто\n"
-#: wt-status.c:1822
+#: wt-status.c:1828
msgid "No commits yet on "
msgstr "Все още липсват подавания в "
-#: wt-status.c:1826
+#: wt-status.c:1832
msgid "HEAD (no branch)"
msgstr "HEAD (извън клон)"
-#: wt-status.c:1857
+#: wt-status.c:1863
msgid "different"
msgstr "различен"
-#: wt-status.c:1859 wt-status.c:1867
+#: wt-status.c:1865 wt-status.c:1873
msgid "behind "
msgstr "назад с "
-#: wt-status.c:1862 wt-status.c:1865
+#: wt-status.c:1868 wt-status.c:1871
msgid "ahead "
msgstr "напред с "
#. TRANSLATORS: the action is e.g. "pull with rebase"
-#: wt-status.c:2374
+#: wt-status.c:2386
#, c-format
msgid "cannot %s: You have unstaged changes."
msgstr "не може да извършите „%s“, защото има промени, които не са в индекса."
-#: wt-status.c:2380
+#: wt-status.c:2392
msgid "additionally, your index contains uncommitted changes."
msgstr "освен това в индекса има неподадени промени."
-#: wt-status.c:2382
+#: wt-status.c:2394
#, c-format
msgid "cannot %s: Your index contains uncommitted changes."
msgstr "не може да извършите „%s“, защото в индекса има неподадени промени."
-#: builtin/add.c:24
+#: builtin/add.c:25
msgid "git add [<options>] [--] <pathspec>..."
msgstr "git add [ОПЦИЯ…] [--] ПЪТ…"
-#: builtin/add.c:83
+#: builtin/add.c:84
#, c-format
msgid "unexpected diff status %c"
msgstr "неочакван изходен код при генериране на разлика: %c"
-#: builtin/add.c:88 builtin/commit.c:284
+#: builtin/add.c:89 builtin/commit.c:285
msgid "updating files failed"
msgstr "неуспешно обновяване на файловете"
-#: builtin/add.c:98
+#: builtin/add.c:99
#, c-format
msgid "remove '%s'\n"
msgstr "изтриване на „%s“\n"
-#: builtin/add.c:173
+#: builtin/add.c:174
msgid "Unstaged changes after refreshing the index:"
msgstr "Промени, които и след обновяването на индекса не са добавени към него:"
-#: builtin/add.c:233 builtin/rev-parse.c:895
+#: builtin/add.c:234 builtin/rev-parse.c:896
msgid "Could not read the index"
msgstr "Индексът не може да бъде прочетен"
-#: builtin/add.c:244
+#: builtin/add.c:245
#, c-format
msgid "Could not open '%s' for writing."
msgstr "Файлът „%s“ не може да бъде отворен за запис."
-#: builtin/add.c:248
+#: builtin/add.c:249
msgid "Could not write patch"
msgstr "Кръпката не може да бъде записана"
-#: builtin/add.c:251
+#: builtin/add.c:252
msgid "editing patch failed"
msgstr "неуспешно редактиране на кръпка"
-#: builtin/add.c:254
+#: builtin/add.c:255
#, c-format
msgid "Could not stat '%s'"
msgstr "Не може да се получи информация чрез „stat“ за файла „%s“"
-#: builtin/add.c:256
+#: builtin/add.c:257
msgid "Empty patch. Aborted."
msgstr "Празна кръпка, преустановяване на действието."
-#: builtin/add.c:261
+#: builtin/add.c:262
#, c-format
msgid "Could not apply '%s'"
msgstr "Кръпката „%s“ не може да бъде приложена"
-#: builtin/add.c:269
+#: builtin/add.c:270
msgid "The following paths are ignored by one of your .gitignore files:\n"
msgstr ""
"Следните пътища ще бъдат игнорирани според някой от файловете „.gitignore“:\n"
-#: builtin/add.c:289 builtin/clean.c:907 builtin/fetch.c:137 builtin/mv.c:123
-#: builtin/prune-packed.c:56 builtin/pull.c:213 builtin/push.c:557
-#: builtin/remote.c:1345 builtin/rm.c:240 builtin/send-pack.c:165
+#: builtin/add.c:290 builtin/clean.c:908 builtin/fetch.c:137 builtin/mv.c:124
+#: builtin/prune-packed.c:56 builtin/pull.c:214 builtin/push.c:560
+#: builtin/remote.c:1345 builtin/rm.c:241 builtin/send-pack.c:165
msgid "dry run"
msgstr "пробно изпълнение"
-#: builtin/add.c:292
+#: builtin/add.c:293
msgid "interactive picking"
msgstr "интерактивно отбиране на промени"
-#: builtin/add.c:293 builtin/checkout.c:1258 builtin/reset.c:305
+#: builtin/add.c:294 builtin/checkout.c:1304 builtin/reset.c:306
msgid "select hunks interactively"
msgstr "интерактивен избор на парчета код"
-#: builtin/add.c:294
+#: builtin/add.c:295
msgid "edit current diff and apply"
msgstr "редактиране на текущата разлика и прилагане"
-#: builtin/add.c:295
+#: builtin/add.c:296
msgid "allow adding otherwise ignored files"
msgstr "добавяне и на иначе игнорираните файлове"
-#: builtin/add.c:296
+#: builtin/add.c:297
msgid "update tracked files"
msgstr "обновяване на следените файлове"
-#: builtin/add.c:297
+#: builtin/add.c:298
msgid "renormalize EOL of tracked files (implies -u)"
msgstr "уеднаквяване на знаците за край на файл (включва опцията „-u“)"
-#: builtin/add.c:298
+#: builtin/add.c:299
msgid "record only the fact that the path will be added later"
msgstr "отбелязване само на факта, че пътят ще бъде добавен по-късно"
-#: builtin/add.c:299
+#: builtin/add.c:300
msgid "add changes from all tracked and untracked files"
msgstr "добавяне на всички промени в следените и неследените файлове"
-#: builtin/add.c:302
+#: builtin/add.c:303
msgid "ignore paths removed in the working tree (same as --no-all)"
msgstr ""
"игнориране на пътищата, които са изтрити от работното дърво (същото като „--"
"no-all“)"
-#: builtin/add.c:304
+#: builtin/add.c:305
msgid "don't add, only refresh the index"
msgstr "без добавяне на нови файлове, само обновяване на индекса"
-#: builtin/add.c:305
+#: builtin/add.c:306
msgid "just skip files which cannot be added because of errors"
msgstr ""
"прескачане на файловете, които не могат да бъдат добавени поради грешки"
-#: builtin/add.c:306
+#: builtin/add.c:307
msgid "check if - even missing - files are ignored in dry run"
msgstr ""
"проверка, че при пробно изпълнение всички файлове, дори и изтритите, се "
"игнорират"
-#: builtin/add.c:308 builtin/update-index.c:990
+#: builtin/add.c:309 builtin/update-index.c:991
msgid "override the executable bit of the listed files"
msgstr "изрично задаване на стойността на флага дали файлът е изпълним"
-#: builtin/add.c:310
+#: builtin/add.c:311
msgid "warn when adding an embedded repository"
msgstr "предупреждаване при добавяне на вградено хранилище"
-#: builtin/add.c:325
+#: builtin/add.c:326
#, c-format
msgid ""
"You've added another git repository inside your current repository.\n"
@@ -7568,151 +8009,151 @@ msgstr ""
"\n"
"За повече информация погледнете „git help submodule“."
-#: builtin/add.c:353
+#: builtin/add.c:354
#, c-format
msgid "adding embedded git repository: %s"
msgstr "добавяне на вградено хранилище: %s"
-#: builtin/add.c:371
+#: builtin/add.c:372
#, c-format
msgid "Use -f if you really want to add them.\n"
msgstr "Използвайте опцията „-f“, за да ги добавите наистина.\n"
-#: builtin/add.c:379
+#: builtin/add.c:380
msgid "adding files failed"
msgstr "неуспешно добавяне на файлове"
-#: builtin/add.c:417
+#: builtin/add.c:418
msgid "-A and -u are mutually incompatible"
msgstr "опциите „-A“ и „-u“ са несъвместими"
-#: builtin/add.c:424
+#: builtin/add.c:425
msgid "Option --ignore-missing can only be used together with --dry-run"
msgstr "Опцията „--ignore-missing“ е съвместима само с „--dry-run“"
-#: builtin/add.c:428
+#: builtin/add.c:429
#, c-format
msgid "--chmod param '%s' must be either -x or +x"
msgstr "параметърът към „--chmod“ — „%s“ може да е или „-x“, или „+x“"
-#: builtin/add.c:443
+#: builtin/add.c:444
#, c-format
msgid "Nothing specified, nothing added.\n"
msgstr "Нищо не е зададено и нищо не е добавено.\n"
-#: builtin/add.c:444
+#: builtin/add.c:445
#, c-format
msgid "Maybe you wanted to say 'git add .'?\n"
msgstr "Вероятно искахте да използвате „git add .“?\n"
-#: builtin/am.c:363
+#: builtin/am.c:348
msgid "could not parse author script"
msgstr "скриптът за автор не може да се анализира"
-#: builtin/am.c:447
+#: builtin/am.c:432
#, c-format
msgid "'%s' was deleted by the applypatch-msg hook"
msgstr "„%s“ бе изтрит от куката „applypatch-msg“"
-#: builtin/am.c:488
+#: builtin/am.c:473
#, c-format
msgid "Malformed input line: '%s'."
msgstr "Даденият входен ред е с неправилен формат: „%s“."
-#: builtin/am.c:525
+#: builtin/am.c:510
#, c-format
msgid "Failed to copy notes from '%s' to '%s'"
msgstr "Бележката не може да се копира от „%s“ към „%s“"
-#: builtin/am.c:551
+#: builtin/am.c:536
msgid "fseek failed"
msgstr "неуспешно изпълнение на „fseek“"
-#: builtin/am.c:739
+#: builtin/am.c:724
#, c-format
msgid "could not parse patch '%s'"
msgstr "кръпката „%s“ не може да се анализира"
-#: builtin/am.c:804
+#: builtin/am.c:789
msgid "Only one StGIT patch series can be applied at once"
msgstr ""
"Само една поредица от кръпки от „StGIT“ може да бъде прилагана в даден момент"
-#: builtin/am.c:852
+#: builtin/am.c:837
msgid "invalid timestamp"
msgstr "неправилна стойност за време"
-#: builtin/am.c:857 builtin/am.c:869
+#: builtin/am.c:842 builtin/am.c:854
msgid "invalid Date line"
msgstr "неправилен ред за дата „Date“"
-#: builtin/am.c:864
+#: builtin/am.c:849
msgid "invalid timezone offset"
msgstr "неправилно отместване на часовия пояс"
-#: builtin/am.c:957
+#: builtin/am.c:942
msgid "Patch format detection failed."
msgstr "Форматът на кръпката не може да бъде определен."
-#: builtin/am.c:962 builtin/clone.c:408
+#: builtin/am.c:947 builtin/clone.c:409
#, c-format
msgid "failed to create directory '%s'"
msgstr "директорията „%s“ не може да бъде създадена"
-#: builtin/am.c:967
+#: builtin/am.c:952
msgid "Failed to split patches."
msgstr "Кръпките не могат да бъдат разделени."
-#: builtin/am.c:1097 builtin/commit.c:369
+#: builtin/am.c:1082 builtin/commit.c:371
msgid "unable to write index file"
msgstr "индексът не може да бъде записан"
-#: builtin/am.c:1111
+#: builtin/am.c:1096
#, c-format
msgid "When you have resolved this problem, run \"%s --continue\"."
msgstr "След коригирането на този проблем изпълнете „%s --continue“."
-#: builtin/am.c:1112
+#: builtin/am.c:1097
#, c-format
msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
msgstr "Ако предпочитате да прескочите тази кръпка, изпълнете „%s --skip“."
-#: builtin/am.c:1113
+#: builtin/am.c:1098
#, c-format
msgid "To restore the original branch and stop patching, run \"%s --abort\"."
msgstr "За да се върнете към първоначалното състояние, изпълнете „%s --abort“."
-#: builtin/am.c:1196
+#: builtin/am.c:1181
msgid "Patch sent with format=flowed; space at the end of lines might be lost."
msgstr ""
"Кръпката е пратена с форматиране „format=flowed“. Празните знаци в края на "
"редовете може да се загубят."
-#: builtin/am.c:1224
+#: builtin/am.c:1209
msgid "Patch is empty."
msgstr "Кръпката е празна."
-#: builtin/am.c:1290
+#: builtin/am.c:1275
#, c-format
msgid "invalid ident line: %.*s"
msgstr "грешен ред с идентичност: %.*s"
-#: builtin/am.c:1312
+#: builtin/am.c:1297
#, c-format
msgid "unable to parse commit %s"
msgstr "подаването не може да бъде анализирано: %s"
-#: builtin/am.c:1508
+#: builtin/am.c:1493
msgid "Repository lacks necessary blobs to fall back on 3-way merge."
msgstr ""
"В хранилището липсват необходимите обекти-BLOB, за да се премине към тройно "
"сливане."
-#: builtin/am.c:1510
+#: builtin/am.c:1495
msgid "Using index info to reconstruct a base tree..."
msgstr "Базовото дърво се реконструира от информацията в индекса…"
-#: builtin/am.c:1529
+#: builtin/am.c:1514
msgid ""
"Did you hand edit your patch?\n"
"It does not apply to blobs recorded in its index."
@@ -7720,30 +8161,30 @@ msgstr ""
"Кръпката не може да се приложи към обектите-BLOB в индекса.\n"
"Да не би да сте я редактирали на ръка?"
-#: builtin/am.c:1535
+#: builtin/am.c:1520
msgid "Falling back to patching base and 3-way merge..."
msgstr "Преминаване към прилагане на кръпка към базата и тройно сливане…"
-#: builtin/am.c:1561
+#: builtin/am.c:1546
msgid "Failed to merge in the changes."
msgstr "Неуспешно сливане на промените."
-#: builtin/am.c:1593
+#: builtin/am.c:1578
msgid "applying to an empty history"
msgstr "прилагане върху празна история"
-#: builtin/am.c:1639 builtin/am.c:1643
+#: builtin/am.c:1624 builtin/am.c:1628
#, c-format
msgid "cannot resume: %s does not exist."
msgstr "не може да се продължи — „%s“ не съществува."
-#: builtin/am.c:1659
+#: builtin/am.c:1644
msgid "cannot be interactive without stdin connected to a terminal."
msgstr ""
"За интерактивно изпълнение е необходимо стандартният\n"
"вход да е свързан с терминал, а в момента не е."
-#: builtin/am.c:1664
+#: builtin/am.c:1649
msgid "Commit Body is:"
msgstr "Тялото на кръпката за прилагане е:"
@@ -7751,39 +8192,39 @@ msgstr "Тялото на кръпката за прилагане е:"
#. in your translation. The program will only accept English
#. input at this point.
#.
-#: builtin/am.c:1674
+#: builtin/am.c:1659
msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
msgstr ""
"Прилагане? „y“ — да/„n“ — не/„e“ — редактиране/„v“ — преглед/„a“ — приемане "
"на всичко:"
-#: builtin/am.c:1724
+#: builtin/am.c:1709
#, c-format
msgid "Dirty index: cannot apply patches (dirty: %s)"
msgstr ""
"Индексът не е чист: кръпките не могат да бъдат приложени (замърсени са: %s)"
-#: builtin/am.c:1764 builtin/am.c:1832
+#: builtin/am.c:1749 builtin/am.c:1817
#, c-format
msgid "Applying: %.*s"
msgstr "Прилагане: %.*s"
-#: builtin/am.c:1781
+#: builtin/am.c:1766
msgid "No changes -- Patch already applied."
msgstr "Без промени — кръпката вече е приложена."
-#: builtin/am.c:1787
+#: builtin/am.c:1772
#, c-format
msgid "Patch failed at %s %.*s"
msgstr "Неуспешно прилагане на кръпка при %s %.*s“"
-#: builtin/am.c:1791
+#: builtin/am.c:1776
msgid "Use 'git am --show-current-patch' to see the failed patch"
msgstr ""
"За да видите неуспешно приложени кръпки, използвайте опцията „git am --show-"
"current-patch“ to see the failed patch"
-#: builtin/am.c:1835
+#: builtin/am.c:1820
msgid ""
"No changes - did you forget to use 'git add'?\n"
"If there is nothing left to stage, chances are that something else\n"
@@ -7793,7 +8234,7 @@ msgstr ""
"Ако няма друга промяна за включване в индекса, най-вероятно някоя друга\n"
"кръпка е довела до същите промени и в такъв случай просто пропуснете тази."
-#: builtin/am.c:1842
+#: builtin/am.c:1827
msgid ""
"You still have unmerged paths in your index.\n"
"You should 'git add' each file with resolved conflicts to mark them as "
@@ -7804,17 +8245,17 @@ msgstr ""
"След корекция на конфликтите изпълнете „git add“ върху поправените файлове.\n"
"За да приемете „изтрити от тях“, изпълнете „git rm“ върху изтритите файлове."
-#: builtin/am.c:1949 builtin/am.c:1953 builtin/am.c:1965 builtin/reset.c:328
-#: builtin/reset.c:336
+#: builtin/am.c:1934 builtin/am.c:1938 builtin/am.c:1950 builtin/reset.c:329
+#: builtin/reset.c:337
#, c-format
msgid "Could not parse object '%s'."
msgstr "„%s“ не е разпознат като обект."
-#: builtin/am.c:2001
+#: builtin/am.c:1986
msgid "failed to clean index"
msgstr "индексът не може да бъде изчистен"
-#: builtin/am.c:2036
+#: builtin/am.c:2030
msgid ""
"You seem to have moved HEAD since the last 'am' failure.\n"
"Not rewinding to ORIG_HEAD"
@@ -7825,149 +8266,149 @@ msgstr ""
"сочи към\n"
"„ORIG_HEAD“"
-#: builtin/am.c:2129
+#: builtin/am.c:2123
#, c-format
msgid "Invalid value for --patch-format: %s"
msgstr "Неправилна стойност за „--patch-format“: „%s“"
-#: builtin/am.c:2165
+#: builtin/am.c:2159
msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
msgstr "git am [ОПЦИЯ…] [(ФАЙЛ_С_ПОЩА|ДИРЕКТОРИЯ_С_ПОЩА)…]"
-#: builtin/am.c:2166
+#: builtin/am.c:2160
msgid "git am [<options>] (--continue | --skip | --abort)"
msgstr "git am [ОПЦИЯ…] (--continue | --quit | --abort)"
-#: builtin/am.c:2172
+#: builtin/am.c:2166
msgid "run interactively"
msgstr "интерактивна работа"
-#: builtin/am.c:2174
+#: builtin/am.c:2168
msgid "historical option -- no-op"
msgstr "изоставена опция, съществува по исторически причини, нищо не прави"
-#: builtin/am.c:2176
+#: builtin/am.c:2170
msgid "allow fall back on 3way merging if needed"
msgstr "да се преминава към тройно сливане при нужда."
-#: builtin/am.c:2177 builtin/init-db.c:486 builtin/prune-packed.c:58
+#: builtin/am.c:2171 builtin/init-db.c:486 builtin/prune-packed.c:58
#: builtin/repack.c:306
msgid "be quiet"
msgstr "без извеждане на информация"
-#: builtin/am.c:2179
+#: builtin/am.c:2173
msgid "add a Signed-off-by line to the commit message"
msgstr "добавяне на ред за подпис „Signed-off-by“ в съобщението за подаване"
-#: builtin/am.c:2182
+#: builtin/am.c:2176
msgid "recode into utf8 (default)"
msgstr "прекодиране в UTF-8 (стандартно)"
-#: builtin/am.c:2184
+#: builtin/am.c:2178
msgid "pass -k flag to git-mailinfo"
msgstr "подаване на опцията „-k“ на командата „git-mailinfo“"
-#: builtin/am.c:2186
+#: builtin/am.c:2180
msgid "pass -b flag to git-mailinfo"
msgstr "подаване на опцията „-b“ на командата „git-mailinfo“"
-#: builtin/am.c:2188
+#: builtin/am.c:2182
msgid "pass -m flag to git-mailinfo"
msgstr "подаване на опцията „-m“ на командата „git-mailinfo“"
-#: builtin/am.c:2190
+#: builtin/am.c:2184
msgid "pass --keep-cr flag to git-mailsplit for mbox format"
msgstr ""
"подаване на опцията „--keep-cr“ на командата „git-mailsplit“ за формат „mbox“"
-#: builtin/am.c:2193
+#: builtin/am.c:2187
msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
msgstr ""
"без подаване на опцията „--keep-cr“ на командата „git-mailsplit“ независимо "
"от „am.keepcr“"
-#: builtin/am.c:2196
+#: builtin/am.c:2190
msgid "strip everything before a scissors line"
msgstr "пропускане на всичко преди реда за отрязване"
-#: builtin/am.c:2198 builtin/am.c:2201 builtin/am.c:2204 builtin/am.c:2207
-#: builtin/am.c:2210 builtin/am.c:2213 builtin/am.c:2216 builtin/am.c:2219
-#: builtin/am.c:2225
+#: builtin/am.c:2192 builtin/am.c:2195 builtin/am.c:2198 builtin/am.c:2201
+#: builtin/am.c:2204 builtin/am.c:2207 builtin/am.c:2210 builtin/am.c:2213
+#: builtin/am.c:2219
msgid "pass it through git-apply"
msgstr "прекарване през „git-apply“"
-#: builtin/am.c:2215 builtin/commit.c:1340 builtin/fmt-merge-msg.c:671
-#: builtin/fmt-merge-msg.c:674 builtin/grep.c:868 builtin/merge.c:239
-#: builtin/pull.c:151 builtin/pull.c:209 builtin/rebase.c:854
+#: builtin/am.c:2209 builtin/commit.c:1343 builtin/fmt-merge-msg.c:671
+#: builtin/fmt-merge-msg.c:674 builtin/grep.c:879 builtin/merge.c:240
+#: builtin/pull.c:152 builtin/pull.c:210 builtin/rebase.c:1062
#: builtin/repack.c:317 builtin/repack.c:321 builtin/repack.c:323
#: builtin/show-branch.c:651 builtin/show-ref.c:171 builtin/tag.c:386
-#: parse-options.h:144 parse-options.h:146 parse-options.h:268
+#: parse-options.h:144 parse-options.h:146 parse-options.h:266
msgid "n"
msgstr "БРОЙ"
-#: builtin/am.c:2221 builtin/branch.c:637 builtin/for-each-ref.c:38
+#: builtin/am.c:2215 builtin/branch.c:637 builtin/for-each-ref.c:38
#: builtin/replace.c:544 builtin/tag.c:422 builtin/verify-tag.c:39
msgid "format"
msgstr "ФОРМАТ"
-#: builtin/am.c:2222
+#: builtin/am.c:2216
msgid "format the patch(es) are in"
msgstr "формат на кръпките"
-#: builtin/am.c:2228
+#: builtin/am.c:2222
msgid "override error message when patch failure occurs"
msgstr "избрано от вас съобщение за грешка при прилагане на кръпки"
-#: builtin/am.c:2230
+#: builtin/am.c:2224
msgid "continue applying patches after resolving a conflict"
msgstr "продължаване на прилагането на кръпки след коригирането на конфликт"
-#: builtin/am.c:2233
+#: builtin/am.c:2227
msgid "synonyms for --continue"
msgstr "псевдоними на „--continue“"
-#: builtin/am.c:2236
+#: builtin/am.c:2230
msgid "skip the current patch"
msgstr "прескачане на текущата кръпка"
-#: builtin/am.c:2239
+#: builtin/am.c:2233
msgid "restore the original branch and abort the patching operation."
msgstr ""
"възстановяване на първоначалното състояние на клона и преустановяване на "
"прилагането на кръпката."
-#: builtin/am.c:2242
+#: builtin/am.c:2236
msgid "abort the patching operation but keep HEAD where it is."
msgstr ""
"преустановяване на прилагането на кръпката без промяна към кое сочи „HEAD“."
-#: builtin/am.c:2245
+#: builtin/am.c:2239
msgid "show the patch being applied."
msgstr "показване на прилаганата кръпка."
-#: builtin/am.c:2249
+#: builtin/am.c:2243
msgid "lie about committer date"
msgstr "дата за подаване различна от първоначалната"
-#: builtin/am.c:2251
+#: builtin/am.c:2245
msgid "use current timestamp for author date"
msgstr "използване на текущото време като това за автор"
-#: builtin/am.c:2253 builtin/commit.c:1483 builtin/merge.c:273
-#: builtin/pull.c:184 builtin/rebase.c:898 builtin/rebase--interactive.c:183
-#: builtin/revert.c:113 builtin/tag.c:402
+#: builtin/am.c:2247 builtin/commit.c:1486 builtin/merge.c:274
+#: builtin/pull.c:185 builtin/rebase.c:1106 builtin/rebase--interactive.c:185
+#: builtin/revert.c:114 builtin/tag.c:402
msgid "key-id"
msgstr "ИДЕНТИФИКАТОР_НА_КЛЮЧ"
-#: builtin/am.c:2254 builtin/rebase.c:899 builtin/rebase--interactive.c:184
+#: builtin/am.c:2248 builtin/rebase.c:1107 builtin/rebase--interactive.c:186
msgid "GPG-sign commits"
msgstr "подписване на подаванията с GPG"
-#: builtin/am.c:2257
+#: builtin/am.c:2251
msgid "(internal use for git-rebase)"
msgstr "(ползва се вътрешно за „git-rebase“)"
-#: builtin/am.c:2275
+#: builtin/am.c:2269
msgid ""
"The -b/--binary option has been a no-op for long time, and\n"
"it will be removed. Please do not use it anymore."
@@ -7975,18 +8416,18 @@ msgstr ""
"Опциите „-b“/„--binary“ отдавна не правят нищо и\n"
"ще бъдат премахнати в бъдеще. Не ги ползвайте."
-#: builtin/am.c:2282
+#: builtin/am.c:2276
msgid "failed to read the index"
msgstr "неуспешно изчитане на индекса"
-#: builtin/am.c:2297
+#: builtin/am.c:2291
#, c-format
msgid "previous rebase directory %s still exists but mbox given."
msgstr ""
"предишната директория за пребазиране „%s“ все още съществува, а е зададен "
"файл „mbox“."
-#: builtin/am.c:2321
+#: builtin/am.c:2315
#, c-format
msgid ""
"Stray %s directory found.\n"
@@ -7995,7 +8436,7 @@ msgstr ""
"Открита е излишна директория „%s“.\n"
"Можете да я изтриете с командата „git am --abort“."
-#: builtin/am.c:2327
+#: builtin/am.c:2321
msgid "Resolve operation not in progress, we are not resuming."
msgstr "В момента не тече операция по коригиране и няма как да се продължи."
@@ -8016,88 +8457,298 @@ msgstr "изходът не може да бъде пренасочен"
msgid "git archive: Remote with no URL"
msgstr "git archive: Липсва адрес за отдалеченото хранилище"
-#: builtin/archive.c:58
+#: builtin/archive.c:61
msgid "git archive: expected ACK/NAK, got a flush packet"
msgstr ""
"git archive: очакваше се „ACK“/„NAK“, а бе получен изчистващ пакет „flush“"
-#: builtin/archive.c:61
+#: builtin/archive.c:64
#, c-format
msgid "git archive: NACK %s"
msgstr "git archive: получен е „NACK“ — %s"
-#: builtin/archive.c:64
+#: builtin/archive.c:65
msgid "git archive: protocol error"
msgstr "git archive: протоколна грешка"
-#: builtin/archive.c:68
+#: builtin/archive.c:69
msgid "git archive: expected a flush"
msgstr "git archive: очакваше се изчистване на буферите чрез „flush“"
-#: builtin/bisect--helper.c:12
+#: builtin/bisect--helper.c:22
msgid "git bisect--helper --next-all [--no-checkout]"
msgstr "git bisect--helper --next-all [--no-checkout]"
-#: builtin/bisect--helper.c:13
+#: builtin/bisect--helper.c:23
msgid "git bisect--helper --write-terms <bad_term> <good_term>"
msgstr "git bisect--helper --write-terms ЛОШО ДОБРО"
-#: builtin/bisect--helper.c:14
+#: builtin/bisect--helper.c:24
msgid "git bisect--helper --bisect-clean-state"
msgstr "git bisect--helper --bisect-clean-state"
-#: builtin/bisect--helper.c:46
+#: builtin/bisect--helper.c:25
+msgid "git bisect--helper --bisect-reset [<commit>]"
+msgstr "git bisect--helper --bisect-reset [ПОДАВАНЕ]"
+
+#: builtin/bisect--helper.c:26
+msgid ""
+"git bisect--helper --bisect-write [--no-log] <state> <revision> <good_term> "
+"<bad_term>"
+msgstr ""
+"git bisect--helper --bisect-write [--no-log] СЪСТОЯНИЕ ВЕРСИЯ ДОБРО ЛОШО"
+
+#: builtin/bisect--helper.c:27
+msgid ""
+"git bisect--helper --bisect-check-and-set-terms <command> <good_term> "
+"<bad_term>"
+msgstr "git bisect--helper --bisect-check-and-set-terms КОМАНДА ДОБРО"
+
+#: builtin/bisect--helper.c:28
+msgid "git bisect--helper --bisect-next-check <good_term> <bad_term> [<term>]"
+msgstr "git bisect--helper --bisect-next-check ЛОШО ДОБРО УПРАВЛЯВАЩА_ДУМА"
+
+#: builtin/bisect--helper.c:29
+msgid ""
+"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
+"term-new]"
+msgstr ""
+"git bisect--helper --bisect-terms [--term-good | --term-old | --term-bad | --"
+"term-new]"
+
+#: builtin/bisect--helper.c:30
+msgid ""
+"git bisect--helper --bisect-start [--term-{old,good}=<term> --term-{new,bad}"
+"=<term>][--no-checkout] [<bad> [<good>...]] [--] [<paths>...]"
+msgstr ""
+"git bisect--helper --bisect-start [--term-{old,good}=<term> --term-{new,bad}"
+"=<term>][--no-checkout] [ЛОШО [ДОБРО…]] [--] [ПЪТ…]"
+
+#: builtin/bisect--helper.c:86
#, c-format
msgid "'%s' is not a valid term"
msgstr "„%s“ е неправилна управляваща дума"
-#: builtin/bisect--helper.c:50
+#: builtin/bisect--helper.c:90
#, c-format
msgid "can't use the builtin command '%s' as a term"
msgstr "„%s“ е вградена команда и не може да се използва като управляваща дума"
-#: builtin/bisect--helper.c:60
+#: builtin/bisect--helper.c:100
#, c-format
msgid "can't change the meaning of the term '%s'"
msgstr "не може да смените значението на управляващата дума „%s“"
-#: builtin/bisect--helper.c:71
+#: builtin/bisect--helper.c:111
msgid "please use two different terms"
msgstr "използвайте две различни управляващи думи"
-#: builtin/bisect--helper.c:78
+#: builtin/bisect--helper.c:118
msgid "could not open the file BISECT_TERMS"
msgstr "файлът „BISECT_TERMS“ не може да се отвори"
-#: builtin/bisect--helper.c:120
+#: builtin/bisect--helper.c:155
+#, c-format
+msgid "We are not bisecting.\n"
+msgstr "В момента не се извършва двоично търсене.\n"
+
+#: builtin/bisect--helper.c:163
+#, c-format
+msgid "'%s' is not a valid commit"
+msgstr "„%s“ не е подаване"
+
+#: builtin/bisect--helper.c:174
+#, c-format
+msgid ""
+"could not check out original HEAD '%s'. Try 'git bisect reset <commit>'."
+msgstr ""
+"първоначално указаното „%s“ в указателя „HEAD“ не може да бъде\n"
+"изтеглено. Пробвайте да изпълните командата „git bisect reset ПОДАВАНЕ“."
+
+#: builtin/bisect--helper.c:215
+#, c-format
+msgid "Bad bisect_write argument: %s"
+msgstr "Неправилен аргумент на функцията „bisect_write“: „%s“"
+
+#: builtin/bisect--helper.c:220
+#, c-format
+msgid "couldn't get the oid of the rev '%s'"
+msgstr "идентификаторът на обект на версия „%s“ не може да бъде получен"
+
+#: builtin/bisect--helper.c:232
+#, c-format
+msgid "couldn't open the file '%s'"
+msgstr "файлът „%s“ не може да бъде отворен"
+
+#: builtin/bisect--helper.c:258
+#, c-format
+msgid "Invalid command: you're currently in a %s/%s bisect"
+msgstr "Неправилна команда: в момента се изпълнява двоично търсене по %s/%s."
+
+#: builtin/bisect--helper.c:285
+#, c-format
+msgid ""
+"You need to give me at least one %s and %s revision.\n"
+"You can use \"git bisect %s\" and \"git bisect %s\" for that."
+msgstr ""
+"Трябва да зададете поне една „%s“ и една „%s“ версия. (Това може да се\n"
+"направи съответно и чрез командите „git bisect %s“ и „git bisect %s“.)"
+
+#: builtin/bisect--helper.c:289
+#, c-format
+msgid ""
+"You need to start by \"git bisect start\".\n"
+"You then need to give me at least one %s and %s revision.\n"
+"You can use \"git bisect %s\" and \"git bisect %s\" for that."
+msgstr ""
+"Трябва да започнете двоичното търсене чрез командата „git bisect start“.\n"
+"Трябва да зададете поне една „%s“ и една „%s“ версия. (Това може да се\n"
+"направи съответно и чрез командите „git bisect %s“ и „git bisect %s“.)"
+
+#: builtin/bisect--helper.c:321
+#, c-format
+msgid "bisecting only with a %s commit"
+msgstr "двоично търсене само по „%s“ подаване."
+
+#. TRANSLATORS: Make sure to include [Y] and [n] in your
+#. translation. The program will only accept English input
+#. at this point.
+#.
+#: builtin/bisect--helper.c:329
+msgid "Are you sure [Y/n]? "
+msgstr "Да се продължи ли? „Y“ — ДА, „n“ — не"
+
+#: builtin/bisect--helper.c:376
+msgid "no terms defined"
+msgstr "не са указани управляващи думи"
+
+#: builtin/bisect--helper.c:379
+#, c-format
+msgid ""
+"Your current terms are %s for the old state\n"
+"and %s for the new state.\n"
+msgstr ""
+"Текущите управляващи думи са: %s за старото състояние\n"
+"и %s за новото състояние.\n"
+
+#: builtin/bisect--helper.c:389
+#, c-format
+msgid ""
+"invalid argument %s for 'git bisect terms'.\n"
+"Supported options are: --term-good|--term-old and --term-bad|--term-new."
+msgstr ""
+"на „git bisect terms“ е подаден неправилен аргумент „%s“\n"
+"Поддържат се опциите „--term-good“/„--term-old“ и „--term-bad„/„--term-new“."
+
+#: builtin/bisect--helper.c:475
+#, c-format
+msgid "unrecognized option: '%s'"
+msgstr "непозната опция: %s"
+
+#: builtin/bisect--helper.c:479
+#, c-format
+msgid "'%s' does not appear to be a valid revision"
+msgstr "„%s“ не изглежда като указател към версия"
+
+#: builtin/bisect--helper.c:511
+msgid "bad HEAD - I need a HEAD"
+msgstr "Неправилен указател „HEAD“"
+
+#: builtin/bisect--helper.c:526
+#, c-format
+msgid "checking out '%s' failed. Try 'git bisect start <valid-branch>'."
+msgstr ""
+"Неуспешно преминаване към „%s“. Изпълнете командата „git bisect start "
+"СЪЩЕСТВУВАЩ_КЛОН“."
+
+#: builtin/bisect--helper.c:547
+msgid "won't bisect on cg-seek'ed tree"
+msgstr ""
+"не може да се търси двоично, когато е изпълнена командата „cg-seek“ от "
+"„cogito“"
+
+#: builtin/bisect--helper.c:550
+msgid "bad HEAD - strange symbolic ref"
+msgstr "Неправилен указател „HEAD“ — необичаен символен указател"
+
+#: builtin/bisect--helper.c:627
msgid "perform 'git bisect next'"
msgstr "извършване на „git bisect next“"
-#: builtin/bisect--helper.c:122
+#: builtin/bisect--helper.c:629
msgid "write the terms to .git/BISECT_TERMS"
msgstr "запазване на управляващите думи в „“.git/BISECT_TERMS„“"
-#: builtin/bisect--helper.c:124
+#: builtin/bisect--helper.c:631
msgid "cleanup the bisection state"
msgstr "изчистване на състоянието на двоичното търсене"
-#: builtin/bisect--helper.c:126
+#: builtin/bisect--helper.c:633
msgid "check for expected revs"
msgstr "проверка за очакваните версии"
-#: builtin/bisect--helper.c:128
+#: builtin/bisect--helper.c:635
+msgid "reset the bisection state"
+msgstr "изчистване на състоянието на двоичното търсене"
+
+#: builtin/bisect--helper.c:637
+msgid "write out the bisection state in BISECT_LOG"
+msgstr "запис на състоянието на двоичното търсене в „BISECT_LOG“"
+
+#: builtin/bisect--helper.c:639
+msgid "check and set terms in a bisection state"
+msgstr ""
+"проверка и задаване на управляващи думи към състоянието на двоичното търсене"
+
+#: builtin/bisect--helper.c:641
+msgid "check whether bad or good terms exist"
+msgstr "проверка дали съществуват одобряващи/отхвърлящи управляващи думи"
+
+#: builtin/bisect--helper.c:643
+msgid "print out the bisect terms"
+msgstr "извеждане на управляващите думи"
+
+#: builtin/bisect--helper.c:645
+msgid "start the bisect session"
+msgstr "начало на двоично търсене"
+
+#: builtin/bisect--helper.c:647
msgid "update BISECT_HEAD instead of checking out the current commit"
msgstr ""
"обновяване на указателя „BISECT_HEAD“ вместо да се използва текущото подаване"
-#: builtin/bisect--helper.c:143
+#: builtin/bisect--helper.c:649
+msgid "no log for BISECT_WRITE"
+msgstr "липсва запис за „BISECT_WRITE“"
+
+#: builtin/bisect--helper.c:666
msgid "--write-terms requires two arguments"
-msgstr "опцията „--write-terms“ изисква точно два аргумента"
+msgstr "опцията „--write-terms“ изисква точно 2 аргумента"
-#: builtin/bisect--helper.c:147
+#: builtin/bisect--helper.c:670
msgid "--bisect-clean-state requires no arguments"
msgstr "опцията „--bisect-clean-state“ не приема аргументи"
+#: builtin/bisect--helper.c:677
+msgid "--bisect-reset requires either no argument or a commit"
+msgstr "опцията „--bisect-reset“ изисква или 0 аргументи, или 1 — подаване"
+
+#: builtin/bisect--helper.c:681
+msgid "--bisect-write requires either 4 or 5 arguments"
+msgstr "опцията „--bisect-write“ изисква 4 или 5 аргумента"
+
+#: builtin/bisect--helper.c:687
+msgid "--check-and-set-terms requires 3 arguments"
+msgstr "опцията „--check-and-set-terms“ изисква 3 аргумента"
+
+#: builtin/bisect--helper.c:693
+msgid "--bisect-next-check requires 2 or 3 arguments"
+msgstr "опцията „--bisect-next-check“ изисква 2 или 3 аргумента"
+
+#: builtin/bisect--helper.c:699
+msgid "--bisect-terms requires 0 or 1 argument"
+msgstr "опцията „--bisect-terms“ изисква 0 или 1 аргумента"
+
#: builtin/blame.c:31
msgid "git blame [<options>] [<rev-opts>] [<rev>] [--] <file>"
msgstr "git blame [ОПЦИЯ…] [ОПЦИЯ_ЗА_ВЕРСИЯТА…] [ВЕРСИЯ] [--] ФАЙЛ"
@@ -8251,7 +8902,7 @@ msgstr ""
"Информация само за редовете в диапазона от n до m включително. Броенето "
"започва от 1"
-#: builtin/blame.c:873
+#: builtin/blame.c:875
msgid "--progress can't be used with --incremental or porcelain formats"
msgstr ""
"опцията „--progress“ е несъвместима с „--incremental“ и форма̀та на командите "
@@ -8265,18 +8916,18 @@ msgstr ""
#. your language may need more or fewer display
#. columns.
#.
-#: builtin/blame.c:924
+#: builtin/blame.c:926
msgid "4 years, 11 months ago"
msgstr "преди 4 години и 11 месеца"
-#: builtin/blame.c:1011
+#: builtin/blame.c:1018
#, c-format
msgid "file %s has only %lu line"
msgid_plural "file %s has only %lu lines"
msgstr[0] "има само %2$lu ред във файла „%1$s“"
msgstr[1] "има само %2$lu реда във файла „%1$s“"
-#: builtin/blame.c:1057
+#: builtin/blame.c:1064
msgid "Blaming lines"
msgstr "Анотирани редове"
@@ -8464,8 +9115,8 @@ msgstr "Общи настройки"
#: builtin/branch.c:596
msgid "show hash and subject, give twice for upstream branch"
msgstr ""
-"извеждане на хеша и темата. Повтарянето на опцията прибавя отдалечените "
-"клони"
+"извеждане на контролната сума и темата. Повтарянето на опцията прибавя "
+"отдалечените клони"
#: builtin/branch.c:597
msgid "suppress informational messages"
@@ -8479,7 +9130,7 @@ msgstr "задаване на режима на следене (виж git-pull(
msgid "do not use"
msgstr "да не се ползва"
-#: builtin/branch.c:602 builtin/rebase--interactive.c:180
+#: builtin/branch.c:602 builtin/rebase--interactive.c:182
msgid "upstream"
msgstr "клон-източник"
@@ -8579,7 +9230,7 @@ msgid "field name to sort on"
msgstr "име на полето, по което да е подредбата"
#: builtin/branch.c:633 builtin/for-each-ref.c:43 builtin/notes.c:415
-#: builtin/notes.c:418 builtin/notes.c:578 builtin/notes.c:581
+#: builtin/notes.c:418 builtin/notes.c:581 builtin/notes.c:584
#: builtin/tag.c:418
msgid "object"
msgstr "ОБЕКТ"
@@ -8597,7 +9248,7 @@ msgstr "подредбата и филтрирането третират едн
msgid "format to use for the output"
msgstr "ФОРМАТ за изхода"
-#: builtin/branch.c:660 builtin/clone.c:739
+#: builtin/branch.c:660 builtin/clone.c:746
msgid "HEAD not found below refs/heads!"
msgstr "В директорията „refs/heads“ липсва файл „HEAD“"
@@ -8647,7 +9298,7 @@ msgstr ""
"Следеното от „HEAD“ не може да се зададе да е „%s“, защото то не сочи към "
"никой клон."
-#: builtin/branch.c:776 builtin/branch.c:798
+#: builtin/branch.c:776 builtin/branch.c:799
#, c-format
msgid "no such branch '%s'"
msgstr "Няма клон на име „%s“."
@@ -8657,25 +9308,25 @@ msgstr "Няма клон на име „%s“."
msgid "branch '%s' does not exist"
msgstr "Не съществува клон на име „%s“."
-#: builtin/branch.c:792
+#: builtin/branch.c:793
msgid "too many arguments to unset upstream"
msgstr "прекалено много аргументи към командата за спиране на следене"
-#: builtin/branch.c:796
+#: builtin/branch.c:797
msgid "could not unset upstream of HEAD when it does not point to any branch."
msgstr ""
"Следеното от „HEAD“ не може да махне, защото то не сочи към никой клон."
-#: builtin/branch.c:802
+#: builtin/branch.c:803
#, c-format
msgid "Branch '%s' has no upstream information"
msgstr "Няма информация клонът „%s“ да следи някой друг"
-#: builtin/branch.c:812
+#: builtin/branch.c:813
msgid "-a and -r options to 'git branch' do not make sense with a branch name"
msgstr "Опциите „-a“ и „-r“ на „git branch“ са несъвместими с име на клон"
-#: builtin/branch.c:815
+#: builtin/branch.c:816
msgid ""
"the '--set-upstream' option is no longer supported. Please use '--track' or "
"'--set-upstream-to' instead."
@@ -8696,7 +9347,7 @@ msgstr "За създаването на пратка е необходимо х
msgid "Need a repository to unbundle."
msgstr "За приемането на пратка е необходимо хранилище."
-#: builtin/cat-file.c:587
+#: builtin/cat-file.c:593
msgid ""
"git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
"p | <type> | --textconv | --filters) [--path=<path>] <object>"
@@ -8704,7 +9355,7 @@ msgstr ""
"git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
"p | ВИД | --textconv --filters) [--path=ПЪТ] ОБЕКТ"
-#: builtin/cat-file.c:588
+#: builtin/cat-file.c:594
msgid ""
"git cat-file (--batch | --batch-check) [--follow-symlinks] [--textconv | --"
"filters]"
@@ -8712,140 +9363,140 @@ msgstr ""
"git cat-file (--batch | --batch-check) [--follow-symlinks] [--textconv | --"
"filters]"
-#: builtin/cat-file.c:609
+#: builtin/cat-file.c:615
msgid "only one batch option may be specified"
msgstr "може да укажете само една пакетна опция"
-#: builtin/cat-file.c:627
+#: builtin/cat-file.c:633
msgid "<type> can be one of: blob, tree, commit, tag"
msgstr ""
"ВИДът може да е: „blob“ (BLOB), „tree“ (дърво), „commit“ (подаване), "
"„tag“ (етикет)"
-#: builtin/cat-file.c:628
+#: builtin/cat-file.c:634
msgid "show object type"
msgstr "извеждане на вида на обект"
-#: builtin/cat-file.c:629
+#: builtin/cat-file.c:635
msgid "show object size"
msgstr "извеждане на размера на обект"
-#: builtin/cat-file.c:631
+#: builtin/cat-file.c:637
msgid "exit with zero when there's no error"
msgstr "изход с 0, когато няма грешка"
-#: builtin/cat-file.c:632
+#: builtin/cat-file.c:638
msgid "pretty-print object's content"
msgstr "форматирано извеждане на съдържанието на обекта"
-#: builtin/cat-file.c:634
+#: builtin/cat-file.c:640
msgid "for blob objects, run textconv on object's content"
msgstr ""
"да се стартира програмата зададена в настройката „textconv“ за преобразуване "
"на съдържанието на обекта-BLOB"
-#: builtin/cat-file.c:636
+#: builtin/cat-file.c:642
msgid "for blob objects, run filters on object's content"
msgstr ""
"да се стартират програмите за преобразуване на съдържанието на обектите-BLOB"
-#: builtin/cat-file.c:637 git-submodule.sh:857
+#: builtin/cat-file.c:643 git-submodule.sh:860
msgid "blob"
msgstr "обект-BLOB"
-#: builtin/cat-file.c:638
+#: builtin/cat-file.c:644
msgid "use a specific path for --textconv/--filters"
msgstr "опциите „--textconv“/„--filters“ изискват път"
-#: builtin/cat-file.c:640
+#: builtin/cat-file.c:646
msgid "allow -s and -t to work with broken/corrupt objects"
msgstr "позволяване на опциите „-s“ и „-t“ да работят с повредени обекти"
-#: builtin/cat-file.c:641
+#: builtin/cat-file.c:647
msgid "buffer --batch output"
msgstr "буфериране на изхода от „--batch“"
-#: builtin/cat-file.c:643
+#: builtin/cat-file.c:649
msgid "show info and content of objects fed from the standard input"
msgstr ""
"извеждане на информация и съдържание на обектите подадени на стандартния вход"
-#: builtin/cat-file.c:647
+#: builtin/cat-file.c:653
msgid "show info about objects fed from the standard input"
msgstr "извеждане на информация за обектите подадени на стандартния вход"
-#: builtin/cat-file.c:651
+#: builtin/cat-file.c:657
msgid "follow in-tree symlinks (used with --batch or --batch-check)"
msgstr ""
"следване на символните връзки сочещи в дървото (ползва се с „--batch“ или „--"
"batch-check“)"
-#: builtin/cat-file.c:653
+#: builtin/cat-file.c:659
msgid "show all objects with --batch or --batch-check"
msgstr "извеждане на всички обекти с „--batch“ или „--batch-check“"
-#: builtin/cat-file.c:655
+#: builtin/cat-file.c:661
msgid "do not order --batch-all-objects output"
msgstr "без подреждане на изхода от „--batch-all-objects“"
-#: builtin/check-attr.c:12
+#: builtin/check-attr.c:13
msgid "git check-attr [-a | --all | <attr>...] [--] <pathname>..."
msgstr "git check-attr [-a | --all | АТРИБУТ…] [--] ПЪТ…"
-#: builtin/check-attr.c:13
+#: builtin/check-attr.c:14
msgid "git check-attr --stdin [-z] [-a | --all | <attr>...]"
msgstr "git check-attr --stdin [-z] [-a | --all | АТРИБУТ…]"
-#: builtin/check-attr.c:20
+#: builtin/check-attr.c:21
msgid "report all attributes set on file"
msgstr "извеждане на всички атрибути, зададени върху файл"
-#: builtin/check-attr.c:21
+#: builtin/check-attr.c:22
msgid "use .gitattributes only from the index"
msgstr "използване на файла „.gitattributes“ само от индекса"
-#: builtin/check-attr.c:22 builtin/check-ignore.c:24 builtin/hash-object.c:101
+#: builtin/check-attr.c:23 builtin/check-ignore.c:25 builtin/hash-object.c:102
msgid "read file names from stdin"
msgstr "изчитане на имената на файловете от стандартния вход"
-#: builtin/check-attr.c:24 builtin/check-ignore.c:26
+#: builtin/check-attr.c:25 builtin/check-ignore.c:27
msgid "terminate input and output records by a NUL character"
msgstr "разделяне на входните и изходните записи с нулевия знак „NUL“"
-#: builtin/check-ignore.c:20 builtin/checkout.c:1234 builtin/gc.c:517
-#: builtin/worktree.c:495
+#: builtin/check-ignore.c:21 builtin/checkout.c:1280 builtin/gc.c:517
+#: builtin/worktree.c:496
msgid "suppress progress reporting"
msgstr "без показване на напредъка"
-#: builtin/check-ignore.c:28
+#: builtin/check-ignore.c:29
msgid "show non-matching input paths"
msgstr "извеждане на несъвпадащите пътища"
-#: builtin/check-ignore.c:30
+#: builtin/check-ignore.c:31
msgid "ignore index when checking"
msgstr "прескачане на индекса при проверката"
-#: builtin/check-ignore.c:159
+#: builtin/check-ignore.c:160
msgid "cannot specify pathnames with --stdin"
msgstr "опцията „--stdin“ е несъвместима с имена на пътища"
-#: builtin/check-ignore.c:162
+#: builtin/check-ignore.c:163
msgid "-z only makes sense with --stdin"
msgstr "опцията „-z“ изисква „--stdin“"
-#: builtin/check-ignore.c:164
+#: builtin/check-ignore.c:165
msgid "no path specified"
msgstr "не е зададен път"
-#: builtin/check-ignore.c:168
+#: builtin/check-ignore.c:169
msgid "--quiet is only valid with a single pathname"
msgstr "опцията „--quiet“ изисква да е подаден точно един път"
-#: builtin/check-ignore.c:170
+#: builtin/check-ignore.c:171
msgid "cannot have both --quiet and --verbose"
msgstr "опциите „--quiet“ и „--verbose“ са несъвместими"
-#: builtin/check-ignore.c:173
+#: builtin/check-ignore.c:174
msgid "--non-matching is only valid with --verbose"
msgstr "опцията „--non-matching“ изисква „--verbose“"
@@ -8866,165 +9517,186 @@ msgstr "контактът не може да бъде анализиран: %s"
msgid "no contacts specified"
msgstr "не са указани контакти"
-#: builtin/checkout-index.c:128
+#: builtin/checkout-index.c:131
msgid "git checkout-index [<options>] [--] [<file>...]"
msgstr "git checkout-index [ОПЦИЯ…] [--] [ФАЙЛ…]"
-#: builtin/checkout-index.c:145
+#: builtin/checkout-index.c:148
msgid "stage should be between 1 and 3 or all"
msgstr "етапът трябва да е „1“, „2“, „3“ или „all“ (всички)"
-#: builtin/checkout-index.c:161
+#: builtin/checkout-index.c:164
msgid "check out all files in the index"
msgstr "изтегляне на всички файлове в индекса"
-#: builtin/checkout-index.c:162
+#: builtin/checkout-index.c:165
msgid "force overwrite of existing files"
msgstr "презаписване на файловете, дори и да съществуват"
-#: builtin/checkout-index.c:164
+#: builtin/checkout-index.c:167
msgid "no warning for existing files and files not in index"
msgstr "без предупреждения при липсващи файлове и файлове не в индекса"
-#: builtin/checkout-index.c:166
+#: builtin/checkout-index.c:169
msgid "don't checkout new files"
msgstr "без изтегляне на нови файлове"
-#: builtin/checkout-index.c:168
+#: builtin/checkout-index.c:171
msgid "update stat information in the index file"
msgstr "обновяване на информацията получена чрез „stat“ за файловете в индекса"
-#: builtin/checkout-index.c:172
+#: builtin/checkout-index.c:175
msgid "read list of paths from the standard input"
msgstr "изчитане на пътищата от стандартния вход"
-#: builtin/checkout-index.c:174
+#: builtin/checkout-index.c:177
msgid "write the content to temporary files"
msgstr "записване на съдържанието във временни файлове"
-#: builtin/checkout-index.c:175 builtin/column.c:31
-#: builtin/submodule--helper.c:1368 builtin/submodule--helper.c:1371
-#: builtin/submodule--helper.c:1379 builtin/submodule--helper.c:1853
-#: builtin/worktree.c:668
+#: builtin/checkout-index.c:178 builtin/column.c:31
+#: builtin/submodule--helper.c:1372 builtin/submodule--helper.c:1375
+#: builtin/submodule--helper.c:1383 builtin/submodule--helper.c:1857
+#: builtin/worktree.c:669
msgid "string"
msgstr "НИЗ"
-#: builtin/checkout-index.c:176
+#: builtin/checkout-index.c:179
msgid "when creating files, prepend <string>"
msgstr "при създаването на нови файлове да се добавя префикса НИЗ"
-#: builtin/checkout-index.c:178
+#: builtin/checkout-index.c:181
msgid "copy out the files from named stage"
msgstr "копиране на файловете от това състояние на сливане"
-#: builtin/checkout.c:31
+#: builtin/checkout.c:32
msgid "git checkout [<options>] <branch>"
msgstr "git checkout [ОПЦИЯ…] КЛОН"
-#: builtin/checkout.c:32
+#: builtin/checkout.c:33
msgid "git checkout [<options>] [<branch>] -- <file>..."
msgstr "git checkout [ОПЦИЯ…] [КЛОН] -- ФАЙЛ…"
-#: builtin/checkout.c:144 builtin/checkout.c:177
+#: builtin/checkout.c:147 builtin/checkout.c:181
#, c-format
msgid "path '%s' does not have our version"
msgstr "вашата версия липсва в пътя „%s“"
-#: builtin/checkout.c:146 builtin/checkout.c:179
+#: builtin/checkout.c:149 builtin/checkout.c:183
#, c-format
msgid "path '%s' does not have their version"
msgstr "чуждата версия липсва в пътя „%s“"
-#: builtin/checkout.c:162
+#: builtin/checkout.c:165
#, c-format
msgid "path '%s' does not have all necessary versions"
msgstr "някоя от необходимите версии липсва в пътя „%s“"
-#: builtin/checkout.c:206
+#: builtin/checkout.c:210
#, c-format
msgid "path '%s' does not have necessary versions"
msgstr "някоя от необходимите версии липсва в пътя „%s“"
-#: builtin/checkout.c:224
+#: builtin/checkout.c:228
#, c-format
msgid "path '%s': cannot merge"
msgstr "пътят „%s“ не може да бъде слян"
-#: builtin/checkout.c:240
+#: builtin/checkout.c:244
#, c-format
msgid "Unable to add merge result for '%s'"
msgstr "Резултатът за „%s“ не може да бъде слян"
-#: builtin/checkout.c:262 builtin/checkout.c:265 builtin/checkout.c:268
-#: builtin/checkout.c:271
+#: builtin/checkout.c:267 builtin/checkout.c:270 builtin/checkout.c:273
+#: builtin/checkout.c:276
#, c-format
msgid "'%s' cannot be used with updating paths"
msgstr "Опцията „%s“ е несъвместима с обновяването на пътища"
-#: builtin/checkout.c:274 builtin/checkout.c:277
+#: builtin/checkout.c:279 builtin/checkout.c:282
#, c-format
msgid "'%s' cannot be used with %s"
msgstr "Опцията „%s“ е несъвместима с „%s“"
-#: builtin/checkout.c:280
+#: builtin/checkout.c:285
#, c-format
msgid "Cannot update paths and switch to branch '%s' at the same time."
msgstr ""
"Невъзможно е едновременно да обновявате пътища и да преминете към клона „%s“."
-#: builtin/checkout.c:349 builtin/checkout.c:356
+#: builtin/checkout.c:354 builtin/checkout.c:361
#, c-format
msgid "path '%s' is unmerged"
msgstr "пътят „%s“ не е слят"
-#: builtin/checkout.c:608
+#: builtin/checkout.c:397
+#, c-format
+msgid "Recreated %d merge conflict"
+msgid_plural "Recreated %d merge conflicts"
+msgstr[0] "Пресъздаден е %d конфликт при сливане"
+msgstr[1] "Пресъздадени са %d конфликта при сливане"
+
+#: builtin/checkout.c:402
+#, c-format
+msgid "Updated %d path from %s"
+msgid_plural "Updated %d paths from %s"
+msgstr[0] "Обновен е %d път от „%s“"
+msgstr[1] "Обновени са %d пътя от „%s“"
+
+#: builtin/checkout.c:409
+#, c-format
+msgid "Updated %d path from the index"
+msgid_plural "Updated %d paths from the index"
+msgstr[0] "Обновен е %d път от индекса"
+msgstr[1] "Обновени са %d пътя от индекса"
+
+#: builtin/checkout.c:645
msgid "you need to resolve your current index first"
msgstr "първо трябва да коригирате индекса си"
-#: builtin/checkout.c:745
+#: builtin/checkout.c:782
#, c-format
msgid "Can not do reflog for '%s': %s\n"
msgstr "Журналът на указателите за „%s“ не може да се проследи: %s\n"
-#: builtin/checkout.c:786
+#: builtin/checkout.c:824
msgid "HEAD is now at"
msgstr "Указателят „HEAD“ в момента сочи към"
-#: builtin/checkout.c:790 builtin/clone.c:692
+#: builtin/checkout.c:828 builtin/clone.c:699
msgid "unable to update HEAD"
msgstr "Указателят „HEAD“ не може да бъде обновен"
-#: builtin/checkout.c:794
+#: builtin/checkout.c:832
#, c-format
msgid "Reset branch '%s'\n"
msgstr "Зануляване на клона „%s“\n"
-#: builtin/checkout.c:797
+#: builtin/checkout.c:835
#, c-format
msgid "Already on '%s'\n"
msgstr "Вече сте на „%s“\n"
-#: builtin/checkout.c:801
+#: builtin/checkout.c:839
#, c-format
msgid "Switched to and reset branch '%s'\n"
msgstr "Преминаване към клона „%s“ и зануляване на промените\n"
-#: builtin/checkout.c:803 builtin/checkout.c:1166
+#: builtin/checkout.c:841 builtin/checkout.c:1212
#, c-format
msgid "Switched to a new branch '%s'\n"
msgstr "Преминахте към новия клон „%s“\n"
-#: builtin/checkout.c:805
+#: builtin/checkout.c:843
#, c-format
msgid "Switched to branch '%s'\n"
msgstr "Преминахте към клона „%s“\n"
-#: builtin/checkout.c:856
+#: builtin/checkout.c:894
#, c-format
msgid " ... and %d more.\n"
msgstr "… и още %d.\n"
-#: builtin/checkout.c:862
+#: builtin/checkout.c:900
#, c-format
msgid ""
"Warning: you are leaving %d commit behind, not connected to\n"
@@ -9046,7 +9718,7 @@ msgstr[1] ""
"\n"
"%s\n"
-#: builtin/checkout.c:881
+#: builtin/checkout.c:919
#, c-format
msgid ""
"If you want to keep it by creating a new branch, this may be a good time\n"
@@ -9073,164 +9745,173 @@ msgstr[1] ""
" git branch ИМЕ_НА_НОВИЯ_КЛОН %s\n"
"\n"
-#: builtin/checkout.c:913
+#: builtin/checkout.c:951
msgid "internal error in revision walk"
msgstr "вътрешна грешка при обхождането на версиите"
-#: builtin/checkout.c:917
+#: builtin/checkout.c:955
msgid "Previous HEAD position was"
msgstr "Преди това „HEAD“ сочеше към"
-#: builtin/checkout.c:945 builtin/checkout.c:1161
+#: builtin/checkout.c:983 builtin/checkout.c:1207
msgid "You are on a branch yet to be born"
msgstr "В момента сте на клон, който предстои да бъде създаден"
-#: builtin/checkout.c:1066
+#: builtin/checkout.c:1104
#, c-format
msgid "only one reference expected, %d given."
msgstr "очакваше се един указател, а сте подали %d."
-#: builtin/checkout.c:1107 builtin/worktree.c:289 builtin/worktree.c:444
+#: builtin/checkout.c:1140
+#, c-format
+msgid ""
+"'%s' could be both a local file and a tracking branch.\n"
+"Please use -- (and optionally --no-guess) to disambiguate"
+msgstr ""
+"„%s“ може да е както локален файл, така и следящ клон. За доуточвяване\n"
+"ползвайте разделителя „--“ (и евентуално опцията „--no-guess“)"
+
+#: builtin/checkout.c:1153 builtin/worktree.c:290 builtin/worktree.c:445
#, c-format
msgid "invalid reference: %s"
msgstr "неправилен указател: %s"
-#: builtin/checkout.c:1136
+#: builtin/checkout.c:1182
#, c-format
msgid "reference is not a tree: %s"
msgstr "указателят не сочи към обект-дърво: %s"
-#: builtin/checkout.c:1175
+#: builtin/checkout.c:1221
msgid "paths cannot be used with switching branches"
msgstr "задаването на път е несъвместимо с преминаването от един клон към друг"
-#: builtin/checkout.c:1178 builtin/checkout.c:1182
+#: builtin/checkout.c:1224 builtin/checkout.c:1228
#, c-format
msgid "'%s' cannot be used with switching branches"
msgstr "опцията „%s“ е несъвместима с преминаването от един клон към друг"
-#: builtin/checkout.c:1186 builtin/checkout.c:1189 builtin/checkout.c:1194
-#: builtin/checkout.c:1197
+#: builtin/checkout.c:1232 builtin/checkout.c:1235 builtin/checkout.c:1240
+#: builtin/checkout.c:1243
#, c-format
msgid "'%s' cannot be used with '%s'"
msgstr "опцията „%s“ е несъвместима с „%s“"
-#: builtin/checkout.c:1202
+#: builtin/checkout.c:1248
#, c-format
msgid "Cannot switch branch to a non-commit '%s'"
msgstr ""
"За да преминете към клон, подайте указател, който сочи към подаване. „%s“ "
"не е такъв"
-#: builtin/checkout.c:1235 builtin/checkout.c:1237 builtin/clone.c:119
-#: builtin/remote.c:169 builtin/remote.c:171 builtin/worktree.c:488
-#: builtin/worktree.c:490
+#: builtin/checkout.c:1281 builtin/checkout.c:1283 builtin/clone.c:120
+#: builtin/remote.c:169 builtin/remote.c:171 builtin/worktree.c:489
+#: builtin/worktree.c:491
msgid "branch"
msgstr "клон"
-#: builtin/checkout.c:1236
+#: builtin/checkout.c:1282
msgid "create and checkout a new branch"
msgstr "създаване и преминаване към нов клон"
-#: builtin/checkout.c:1238
+#: builtin/checkout.c:1284
msgid "create/reset and checkout a branch"
msgstr "създаване/зануляване на клон и преминаване към него"
-#: builtin/checkout.c:1239
+#: builtin/checkout.c:1285
msgid "create reflog for new branch"
msgstr "създаване на журнал на указателите за нов клон"
-#: builtin/checkout.c:1240 builtin/worktree.c:492
+#: builtin/checkout.c:1286 builtin/worktree.c:493
msgid "detach HEAD at named commit"
msgstr "отделяне на указателя „HEAD“ към указаното подаване"
-#: builtin/checkout.c:1241
+#: builtin/checkout.c:1287
msgid "set upstream info for new branch"
msgstr "задаване на кой клон бива следен при създаването на новия клон"
-#: builtin/checkout.c:1243
+#: builtin/checkout.c:1289
msgid "new-branch"
msgstr "НОВ_КЛОН"
-#: builtin/checkout.c:1243
+#: builtin/checkout.c:1289
msgid "new unparented branch"
msgstr "нов клон без родител"
-#: builtin/checkout.c:1245
+#: builtin/checkout.c:1291
msgid "checkout our version for unmerged files"
msgstr "изтегляне на вашата версия на неслетите файлове"
-#: builtin/checkout.c:1248
+#: builtin/checkout.c:1294
msgid "checkout their version for unmerged files"
msgstr "изтегляне на чуждата версия на неслетите файлове"
-#: builtin/checkout.c:1250
+#: builtin/checkout.c:1296
msgid "force checkout (throw away local modifications)"
msgstr "принудително изтегляне (вашите промени ще бъдат занулени)"
-#: builtin/checkout.c:1252
+#: builtin/checkout.c:1298
msgid "perform a 3-way merge with the new branch"
msgstr "извършване на тройно сливане с новия клон"
-#: builtin/checkout.c:1254 builtin/merge.c:275
+#: builtin/checkout.c:1300 builtin/merge.c:276
msgid "update ignored files (default)"
msgstr "обновяване на игнорираните файлове (стандартно)"
-#: builtin/checkout.c:1256 builtin/log.c:1573 parse-options.h:274
+#: builtin/checkout.c:1302 builtin/log.c:1586 parse-options.h:272
msgid "style"
msgstr "СТИЛ"
-#: builtin/checkout.c:1257
+#: builtin/checkout.c:1303
msgid "conflict style (merge or diff3)"
msgstr "действие при конфликт (сливане или тройна разлика)"
-#: builtin/checkout.c:1260
+#: builtin/checkout.c:1306
msgid "do not limit pathspecs to sparse entries only"
msgstr "без ограничаване на изброените пътища само до частично изтеглените"
-#: builtin/checkout.c:1262
-msgid "second guess 'git checkout <no-such-branch>'"
+#: builtin/checkout.c:1308
+msgid "do not second guess 'git checkout <no-such-branch>'"
msgstr ""
-"опит за отгатване на име на клон след неуспешен опит с „git checkout "
+"без опит за отгатване на име на клон след неуспешен опит с „git checkout "
"НЕСЪЩЕСТВУВАЩ_КЛОН“"
-#: builtin/checkout.c:1264
+#: builtin/checkout.c:1310
msgid "do not check if another worktree is holding the given ref"
msgstr "без проверка дали друго работно дърво държи указателя"
-#: builtin/checkout.c:1268 builtin/clone.c:86 builtin/fetch.c:141
-#: builtin/merge.c:272 builtin/pull.c:129 builtin/push.c:572
+#: builtin/checkout.c:1314 builtin/clone.c:87 builtin/fetch.c:141
+#: builtin/merge.c:273 builtin/pull.c:130 builtin/push.c:575
#: builtin/send-pack.c:174
msgid "force progress reporting"
msgstr "извеждане на напредъка"
-#: builtin/checkout.c:1298
+#: builtin/checkout.c:1345
msgid "-b, -B and --orphan are mutually exclusive"
msgstr "Опциите „-b“, „-B“ и „--orphan“ са несъвместими една с друга"
-#: builtin/checkout.c:1315
+#: builtin/checkout.c:1362
msgid "--track needs a branch name"
msgstr "опцията „--track“ изисква име на клон"
-#: builtin/checkout.c:1320
+#: builtin/checkout.c:1367
msgid "missing branch name; try -b"
msgstr "липсва име на клон, използвайте опцията „-b“"
-#: builtin/checkout.c:1357
+#: builtin/checkout.c:1404
msgid "invalid path specification"
msgstr "указан е неправилен път"
-#: builtin/checkout.c:1364
+#: builtin/checkout.c:1411
#, c-format
msgid "'%s' is not a commit and a branch '%s' cannot be created from it"
msgstr "„%s“ не е подаване, затова от него не може да се създаде клон „%s“"
-#: builtin/checkout.c:1368
+#: builtin/checkout.c:1415
#, c-format
msgid "git checkout: --detach does not take a path argument '%s'"
msgstr "git checkout: опцията „--detach“ не приема аргумент-път „%s“"
-#: builtin/checkout.c:1372
+#: builtin/checkout.c:1419
msgid ""
"git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
"checking out of the index."
@@ -9238,7 +9919,7 @@ msgstr ""
"git checkout: опциите „--ours“/„--theirs“, „--force“ и „--merge“\n"
"са несъвместими с изтегляне от индекса."
-#: builtin/checkout.c:1392
+#: builtin/checkout.c:1439
#, c-format
msgid ""
"'%s' matched more than one remote tracking branch.\n"
@@ -9268,37 +9949,37 @@ msgstr ""
"\n"
" checkout.defaultRemote=origin"
-#: builtin/clean.c:27
+#: builtin/clean.c:28
msgid ""
"git clean [-d] [-f] [-i] [-n] [-q] [-e <pattern>] [-x | -X] [--] <paths>..."
msgstr "git clean [-d] [-f] [-i] [-n] [-q] [-e ШАБЛОН] [-x | -X] [--] ПЪТ…"
-#: builtin/clean.c:31
+#: builtin/clean.c:32
#, c-format
msgid "Removing %s\n"
msgstr "Изтриване на „%s“\n"
-#: builtin/clean.c:32
+#: builtin/clean.c:33
#, c-format
msgid "Would remove %s\n"
msgstr "Файлът „%s“ ще бъде изтрит\n"
-#: builtin/clean.c:33
+#: builtin/clean.c:34
#, c-format
msgid "Skipping repository %s\n"
msgstr "Прескачане на хранилището „%s“\n"
-#: builtin/clean.c:34
+#: builtin/clean.c:35
#, c-format
msgid "Would skip repository %s\n"
msgstr "Хранилището „%s“ ще бъде прескочено\n"
-#: builtin/clean.c:35
+#: builtin/clean.c:36
#, c-format
msgid "failed to remove %s"
msgstr "файлът „%s“ не може да бъде изтрит"
-#: builtin/clean.c:298 git-add--interactive.perl:579
+#: builtin/clean.c:299 git-add--interactive.perl:579
#, c-format
msgid ""
"Prompt help:\n"
@@ -9311,7 +9992,7 @@ msgstr ""
"ПРЕФИКС — избор на единствен обект по този уникален префикс\n"
" — (празно) нищо да не се избира\n"
-#: builtin/clean.c:302 git-add--interactive.perl:588
+#: builtin/clean.c:303 git-add--interactive.perl:588
#, c-format
msgid ""
"Prompt help:\n"
@@ -9332,39 +10013,39 @@ msgstr ""
"* — избиране на всички обекти\n"
" — (празно) завършване на избирането\n"
-#: builtin/clean.c:518 git-add--interactive.perl:554
+#: builtin/clean.c:519 git-add--interactive.perl:554
#: git-add--interactive.perl:559
#, c-format, perl-format
msgid "Huh (%s)?\n"
msgstr "Неправилен избор (%s).\n"
-#: builtin/clean.c:660
+#: builtin/clean.c:661
#, c-format
msgid "Input ignore patterns>> "
msgstr "Шаблони за игнорирани елементи≫ "
-#: builtin/clean.c:697
+#: builtin/clean.c:698
#, c-format
msgid "WARNING: Cannot find items matched by: %s"
msgstr "ПРЕДУПРЕЖДЕНИЕ: Никой обект не напасва на „%s“"
-#: builtin/clean.c:718
+#: builtin/clean.c:719
msgid "Select items to delete"
msgstr "Избиране на обекти за изтриване"
#. TRANSLATORS: Make sure to keep [y/N] as is
-#: builtin/clean.c:759
+#: builtin/clean.c:760
#, c-format
msgid "Remove %s [y/N]? "
msgstr "Да се изтрие ли „%s“? „y“ — да, „N“ — НЕ"
#
-#: builtin/clean.c:784 git-add--interactive.perl:1717
+#: builtin/clean.c:785 git-add--interactive.perl:1717
#, c-format
msgid "Bye.\n"
msgstr "Изход.\n"
-#: builtin/clean.c:792
+#: builtin/clean.c:793
msgid ""
"clean - start cleaning\n"
"filter by pattern - exclude items from deletion\n"
@@ -9382,64 +10063,64 @@ msgstr ""
"help — този край\n"
"? — подсказка за шаблоните"
-#: builtin/clean.c:819 git-add--interactive.perl:1793
+#: builtin/clean.c:820 git-add--interactive.perl:1793
msgid "*** Commands ***"
msgstr "●●● Команди ●●●"
-#: builtin/clean.c:820 git-add--interactive.perl:1790
+#: builtin/clean.c:821 git-add--interactive.perl:1790
msgid "What now"
msgstr "Избор на следващо действие"
-#: builtin/clean.c:828
+#: builtin/clean.c:829
msgid "Would remove the following item:"
msgid_plural "Would remove the following items:"
msgstr[0] "Следният обект ще бъде изтрит:"
msgstr[1] "Следните обекти ще бъдат изтрити:"
-#: builtin/clean.c:844
+#: builtin/clean.c:845
msgid "No more files to clean, exiting."
msgstr "Файловете за изчистване свършиха. Изход от програмата."
-#: builtin/clean.c:906
+#: builtin/clean.c:907
msgid "do not print names of files removed"
msgstr "без извеждане на имената на файловете, които ще бъдат изтрити"
-#: builtin/clean.c:908
+#: builtin/clean.c:909
msgid "force"
msgstr "принудително изтриване"
-#: builtin/clean.c:909
+#: builtin/clean.c:910
msgid "interactive cleaning"
msgstr "интерактивно изтриване"
-#: builtin/clean.c:911
+#: builtin/clean.c:912
msgid "remove whole directories"
msgstr "изтриване на цели директории"
-#: builtin/clean.c:912 builtin/describe.c:545 builtin/describe.c:547
-#: builtin/grep.c:886 builtin/log.c:166 builtin/log.c:168
-#: builtin/ls-files.c:556 builtin/name-rev.c:415 builtin/name-rev.c:417
+#: builtin/clean.c:913 builtin/describe.c:546 builtin/describe.c:548
+#: builtin/grep.c:897 builtin/log.c:167 builtin/log.c:169
+#: builtin/ls-files.c:557 builtin/name-rev.c:415 builtin/name-rev.c:417
#: builtin/show-ref.c:178
msgid "pattern"
msgstr "ШАБЛОН"
-#: builtin/clean.c:913
+#: builtin/clean.c:914
msgid "add <pattern> to ignore rules"
msgstr "добавяне на ШАБЛОН от файлове, които да не се трият"
-#: builtin/clean.c:914
+#: builtin/clean.c:915
msgid "remove ignored files, too"
msgstr "изтриване и на игнорираните файлове"
-#: builtin/clean.c:916
+#: builtin/clean.c:917
msgid "remove only ignored files"
msgstr "изтриване само на игнорирани файлове"
-#: builtin/clean.c:934
+#: builtin/clean.c:935
msgid "-x and -X cannot be used together"
msgstr "опциите „-x“ и „-X“ са несъвместими"
-#: builtin/clean.c:938
+#: builtin/clean.c:939
msgid ""
"clean.requireForce set to true and neither -i, -n, nor -f given; refusing to "
"clean"
@@ -9447,7 +10128,7 @@ msgstr ""
"Настройката „clean.requireForce“ е зададена като истина, което изисква някоя "
"от опциите „-i“, „-n“ или „-f“. Няма да се извърши изчистване"
-#: builtin/clean.c:941
+#: builtin/clean.c:942
msgid ""
"clean.requireForce defaults to true and neither -i, -n, nor -f given; "
"refusing to clean"
@@ -9456,150 +10137,150 @@ msgstr ""
"което изисква някоя от опциите „-i“, „-n“ или „-f“. Няма да се извърши "
"изчистване"
-#: builtin/clone.c:43
+#: builtin/clone.c:44
msgid "git clone [<options>] [--] <repo> [<dir>]"
msgstr "git clone [ОПЦИЯ…] [--] ХРАНИЛИЩЕ [ДИРЕКТОРИЯ]"
-#: builtin/clone.c:88
+#: builtin/clone.c:89
msgid "don't create a checkout"
msgstr "без създаване на работно дърво"
-#: builtin/clone.c:89 builtin/clone.c:91 builtin/init-db.c:481
+#: builtin/clone.c:90 builtin/clone.c:92 builtin/init-db.c:481
msgid "create a bare repository"
msgstr "създаване на голо хранилище"
-#: builtin/clone.c:93
+#: builtin/clone.c:94
msgid "create a mirror repository (implies bare)"
msgstr ""
"създаване на хранилище-огледало (включва опцията „--bare“ за голо хранилище)"
-#: builtin/clone.c:95
+#: builtin/clone.c:96
msgid "to clone from a local repository"
msgstr "клониране от локално хранилище"
-#: builtin/clone.c:97
+#: builtin/clone.c:98
msgid "don't use local hardlinks, always copy"
msgstr "без твърди връзки, файловете винаги да се копират"
-#: builtin/clone.c:99
+#: builtin/clone.c:100
msgid "setup as shared repository"
msgstr "настройване за споделено хранилище"
-#: builtin/clone.c:101 builtin/clone.c:105
+#: builtin/clone.c:102 builtin/clone.c:106
msgid "pathspec"
msgstr "път"
-#: builtin/clone.c:101 builtin/clone.c:105
+#: builtin/clone.c:102 builtin/clone.c:106
msgid "initialize submodules in the clone"
msgstr "инициализиране на подмодулите при това клониране"
-#: builtin/clone.c:108
+#: builtin/clone.c:109
msgid "number of submodules cloned in parallel"
msgstr "брой подмодули, клонирани паралелно"
-#: builtin/clone.c:109 builtin/init-db.c:478
+#: builtin/clone.c:110 builtin/init-db.c:478
msgid "template-directory"
msgstr "директория с шаблони"
-#: builtin/clone.c:110 builtin/init-db.c:479
+#: builtin/clone.c:111 builtin/init-db.c:479
msgid "directory from which templates will be used"
msgstr "директория, която съдържа шаблоните, които да се ползват"
-#: builtin/clone.c:112 builtin/clone.c:114 builtin/submodule--helper.c:1375
-#: builtin/submodule--helper.c:1856
+#: builtin/clone.c:113 builtin/clone.c:115 builtin/submodule--helper.c:1379
+#: builtin/submodule--helper.c:1860
msgid "reference repository"
msgstr "еталонно хранилище"
-#: builtin/clone.c:116 builtin/submodule--helper.c:1377
-#: builtin/submodule--helper.c:1858
+#: builtin/clone.c:117 builtin/submodule--helper.c:1381
+#: builtin/submodule--helper.c:1862
msgid "use --reference only while cloning"
msgstr "опцията „--reference“ може да се използва само при клониране"
-#: builtin/clone.c:117 builtin/column.c:27 builtin/merge-file.c:46
-#: builtin/pack-objects.c:3301 builtin/repack.c:329
+#: builtin/clone.c:118 builtin/column.c:27 builtin/merge-file.c:46
+#: builtin/pack-objects.c:3303 builtin/repack.c:329
msgid "name"
msgstr "ИМЕ"
-#: builtin/clone.c:118
+#: builtin/clone.c:119
msgid "use <name> instead of 'origin' to track upstream"
msgstr "използване на това ИМЕ вместо „origin“ при проследяване на клони"
-#: builtin/clone.c:120
+#: builtin/clone.c:121
msgid "checkout <branch> instead of the remote's HEAD"
msgstr "изтегляне на този КЛОН, а не соченият от отдалечения указател „HEAD“"
-#: builtin/clone.c:122
+#: builtin/clone.c:123
msgid "path to git-upload-pack on the remote"
msgstr "път към командата „git-upload-pack“ на отдалеченото хранилище"
-#: builtin/clone.c:123 builtin/fetch.c:142 builtin/grep.c:825
-#: builtin/pull.c:217
+#: builtin/clone.c:124 builtin/fetch.c:142 builtin/grep.c:836
+#: builtin/pull.c:218
msgid "depth"
msgstr "ДЪЛБОЧИНА"
-#: builtin/clone.c:124
+#: builtin/clone.c:125
msgid "create a shallow clone of that depth"
msgstr "плитко клониране до тази ДЪЛБОЧИНА"
-#: builtin/clone.c:125 builtin/fetch.c:144 builtin/pack-objects.c:3292
+#: builtin/clone.c:126 builtin/fetch.c:144 builtin/pack-objects.c:3292
msgid "time"
msgstr "ВРЕМЕ"
-#: builtin/clone.c:126
+#: builtin/clone.c:127
msgid "create a shallow clone since a specific time"
msgstr "плитко клониране до момент във времето"
-#: builtin/clone.c:127 builtin/fetch.c:146 builtin/fetch.c:169
-#: builtin/rebase.c:831
+#: builtin/clone.c:128 builtin/fetch.c:146 builtin/fetch.c:169
+#: builtin/rebase.c:1039
msgid "revision"
msgstr "версия"
-#: builtin/clone.c:128 builtin/fetch.c:147
+#: builtin/clone.c:129 builtin/fetch.c:147
msgid "deepen history of shallow clone, excluding rev"
msgstr "задълбочаване на историята на плитко хранилище до изключващ указател"
-#: builtin/clone.c:130
+#: builtin/clone.c:131
msgid "clone only one branch, HEAD or --branch"
msgstr ""
"клониране само на един клон — или сочения от отдалечения „HEAD“, или изрично "
"зададения с „--branch“"
-#: builtin/clone.c:132
+#: builtin/clone.c:133
msgid "don't clone any tags, and make later fetches not to follow them"
msgstr ""
"без клониране на етикети, като последващите доставяния няма да ги следят"
-#: builtin/clone.c:134
+#: builtin/clone.c:135
msgid "any cloned submodules will be shallow"
msgstr "всички клонирани подмодули ще са плитки"
-#: builtin/clone.c:135 builtin/init-db.c:487
+#: builtin/clone.c:136 builtin/init-db.c:487
msgid "gitdir"
msgstr "СЛУЖЕБНА_ДИРЕКТОРИЯ"
-#: builtin/clone.c:136 builtin/init-db.c:488
+#: builtin/clone.c:137 builtin/init-db.c:488
msgid "separate git dir from working tree"
msgstr "отделна СЛУЖЕБНА_ДИРЕКТОРИЯ за git извън работното дърво"
-#: builtin/clone.c:137
+#: builtin/clone.c:138
msgid "key=value"
msgstr "КЛЮЧ=СТОЙНОСТ"
-#: builtin/clone.c:138
+#: builtin/clone.c:139
msgid "set config inside the new repository"
msgstr "задаване на настройките на новото хранилище"
-#: builtin/clone.c:139 builtin/fetch.c:165 builtin/pull.c:230
-#: builtin/push.c:583
+#: builtin/clone.c:140 builtin/fetch.c:165 builtin/pull.c:231
+#: builtin/push.c:586
msgid "use IPv4 addresses only"
msgstr "само адреси IPv4"
-#: builtin/clone.c:141 builtin/fetch.c:167 builtin/pull.c:233
-#: builtin/push.c:585
+#: builtin/clone.c:142 builtin/fetch.c:167 builtin/pull.c:234
+#: builtin/push.c:588
msgid "use IPv6 addresses only"
msgstr "само адреси IPv6"
-#: builtin/clone.c:279
+#: builtin/clone.c:280
msgid ""
"No directory name could be guessed.\n"
"Please specify a directory on the command line"
@@ -9607,48 +10288,48 @@ msgstr ""
"Името на директорията не може да бъде отгатнато.\n"
"Задайте директорията изрично на командния ред"
-#: builtin/clone.c:332
+#: builtin/clone.c:333
#, c-format
msgid "info: Could not add alternate for '%s': %s\n"
msgstr ""
"ПРЕДУПРЕЖДЕНИЕ: не може да се добави алтернативен източник на „%s“: %s\n"
-#: builtin/clone.c:404
+#: builtin/clone.c:405
#, c-format
msgid "failed to open '%s'"
msgstr "директорията „%s“ не може да бъде отворена"
-#: builtin/clone.c:412
+#: builtin/clone.c:413
#, c-format
msgid "%s exists and is not a directory"
msgstr "„%s“ съществува и не е директория"
-#: builtin/clone.c:426
+#: builtin/clone.c:427
#, c-format
msgid "failed to stat %s\n"
msgstr "не може да бъде получена информация чрез „stat“ за „%s“\n"
-#: builtin/clone.c:443
+#: builtin/clone.c:444
#, c-format
msgid "failed to unlink '%s'"
msgstr "неуспешно изтриване на „%s“"
-#: builtin/clone.c:448
+#: builtin/clone.c:449
#, c-format
msgid "failed to create link '%s'"
msgstr "връзката „%s“ не може да бъде създадена"
-#: builtin/clone.c:452
+#: builtin/clone.c:453
#, c-format
msgid "failed to copy file to '%s'"
msgstr "файлът не може да бъде копиран като „%s“"
-#: builtin/clone.c:478
+#: builtin/clone.c:479
#, c-format
msgid "done.\n"
msgstr "действието завърши.\n"
-#: builtin/clone.c:492
+#: builtin/clone.c:493
msgid ""
"Clone succeeded, but checkout failed.\n"
"You can inspect what was checked out with 'git status'\n"
@@ -9659,99 +10340,99 @@ msgstr ""
"клон в момента са изтеглени с командата „git status“. Можете да\n"
"завършите изтеглянето на клона с командата „git checkout -f HEAD“.\n"
-#: builtin/clone.c:569
+#: builtin/clone.c:570
#, c-format
msgid "Could not find remote branch %s to clone."
msgstr ""
"Клонът „%s“ от отдалеченото хранилище, което клонирате,\n"
"и който следва да бъде изтеглен, не съществува."
-#: builtin/clone.c:680
+#: builtin/clone.c:687
#, c-format
msgid "unable to update %s"
msgstr "обектът „%s“ не може да бъде обновен"
-#: builtin/clone.c:730
+#: builtin/clone.c:737
msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n"
msgstr ""
"указателят „HEAD“ от отдалеченото хранилище сочи към нещо,\n"
"което не съществува. Не може да се изтегли определен клон.\n"
-#: builtin/clone.c:761
+#: builtin/clone.c:768
msgid "unable to checkout working tree"
msgstr "работното дърво не може да бъде подготвено"
-#: builtin/clone.c:806
+#: builtin/clone.c:813
msgid "unable to write parameters to config file"
msgstr "настройките не могат да бъдат записани в конфигурационния файл"
-#: builtin/clone.c:869
+#: builtin/clone.c:876
msgid "cannot repack to clean up"
msgstr "не може да се извърши пакетиране за изчистване на файловете"
-#: builtin/clone.c:871
+#: builtin/clone.c:878
msgid "cannot unlink temporary alternates file"
msgstr "временният файл за алтернативни обекти не може да бъде изтрит"
-#: builtin/clone.c:911 builtin/receive-pack.c:1941
+#: builtin/clone.c:918 builtin/receive-pack.c:1941
msgid "Too many arguments."
msgstr "Прекалено много аргументи."
-#: builtin/clone.c:915
+#: builtin/clone.c:922
msgid "You must specify a repository to clone."
msgstr "Трябва да укажете кое хранилище искате да клонирате."
-#: builtin/clone.c:928
+#: builtin/clone.c:935
#, c-format
msgid "--bare and --origin %s options are incompatible."
msgstr "опциите „--bare“ и „--origin %s“ са несъвместими."
-#: builtin/clone.c:931
+#: builtin/clone.c:938
msgid "--bare and --separate-git-dir are incompatible."
msgstr "опциите „--bare“ и „--separate-git-dir“ са несъвместими."
-#: builtin/clone.c:944
+#: builtin/clone.c:951
#, c-format
msgid "repository '%s' does not exist"
msgstr "не съществува хранилище „%s“"
-#: builtin/clone.c:950 builtin/fetch.c:1606
+#: builtin/clone.c:957 builtin/fetch.c:1608
#, c-format
msgid "depth %s is not a positive number"
msgstr "дълбочината трябва да е положително цяло число, а не „%s“"
-#: builtin/clone.c:960
+#: builtin/clone.c:967
#, c-format
msgid "destination path '%s' already exists and is not an empty directory."
msgstr "целевият път „%s“ съществува и не е празна директория."
-#: builtin/clone.c:970
+#: builtin/clone.c:977
#, c-format
msgid "working tree '%s' already exists."
msgstr "в „%s“ вече съществува работно дърво."
-#: builtin/clone.c:985 builtin/clone.c:1006 builtin/difftool.c:271
-#: builtin/worktree.c:295 builtin/worktree.c:325
+#: builtin/clone.c:992 builtin/clone.c:1013 builtin/difftool.c:272
+#: builtin/worktree.c:296 builtin/worktree.c:326
#, c-format
msgid "could not create leading directories of '%s'"
msgstr "родителските директории на „%s“ не могат да бъдат създадени"
-#: builtin/clone.c:990
+#: builtin/clone.c:997
#, c-format
msgid "could not create work tree dir '%s'"
msgstr "работното дърво в „%s“ не може да бъде създадено."
-#: builtin/clone.c:1010
+#: builtin/clone.c:1017
#, c-format
msgid "Cloning into bare repository '%s'...\n"
msgstr "Клониране и създаване на голо хранилище в „%s“…\n"
-#: builtin/clone.c:1012
+#: builtin/clone.c:1019
#, c-format
msgid "Cloning into '%s'...\n"
msgstr "Клониране и създаване на хранилище в „%s“…\n"
-#: builtin/clone.c:1036
+#: builtin/clone.c:1043
msgid ""
"clone --recursive is not compatible with both --reference and --reference-if-"
"able"
@@ -9759,44 +10440,44 @@ msgstr ""
"Опцията „--recursive“ е несъвместима с опциите „--reference“ и „--reference-"
"if-able“"
-#: builtin/clone.c:1097
+#: builtin/clone.c:1104
msgid "--depth is ignored in local clones; use file:// instead."
msgstr ""
"При локално клониране опцията „--depth“ се прескача. Ползвайте схемата "
"„file://“."
-#: builtin/clone.c:1099
+#: builtin/clone.c:1106
msgid "--shallow-since is ignored in local clones; use file:// instead."
msgstr ""
"При локално клониране опцията „--shallow-since“ се прескача. Ползвайте "
"схемата „file://“."
-#: builtin/clone.c:1101
+#: builtin/clone.c:1108
msgid "--shallow-exclude is ignored in local clones; use file:// instead."
msgstr ""
"При локално клониране опцията „--shallow-exclude“ се прескача. Ползвайте "
"схемата „file://“."
-#: builtin/clone.c:1103
+#: builtin/clone.c:1110
msgid "--filter is ignored in local clones; use file:// instead."
msgstr ""
"При локално клониране опцията „--filter“ се прескача. Ползвайте схемата "
"„file://“."
-#: builtin/clone.c:1106
+#: builtin/clone.c:1113
msgid "source repository is shallow, ignoring --local"
msgstr "клонираното хранилище е плитко, затова опцията „--local“ се прескача"
-#: builtin/clone.c:1111
+#: builtin/clone.c:1118
msgid "--local is ignored"
msgstr "опцията „--local“ се прескача"
-#: builtin/clone.c:1181 builtin/clone.c:1189
+#: builtin/clone.c:1192 builtin/clone.c:1200
#, c-format
msgid "Remote branch %s not found in upstream %s"
msgstr "Отдалеченият клон „%s“ липсва в клонираното хранилище „%s“"
-#: builtin/clone.c:1192
+#: builtin/clone.c:1203
msgid "You appear to have cloned an empty repository."
msgstr "Изглежда клонирахте празно хранилище."
@@ -9832,15 +10513,15 @@ msgstr "Поле в знаци между колоните"
msgid "--command must be the first argument"
msgstr "опцията „--command“ трябва да е първият аргумент"
-#: builtin/commit.c:40
+#: builtin/commit.c:41
msgid "git commit [<options>] [--] <pathspec>..."
msgstr "git commit [ОПЦИЯ…] [--] ПЪТ…"
-#: builtin/commit.c:45
+#: builtin/commit.c:46
msgid "git status [<options>] [--] <pathspec>..."
msgstr "git status [ОПЦИЯ…] [--] ПЪТ…"
-#: builtin/commit.c:50
+#: builtin/commit.c:51
msgid ""
"You asked to amend the most recent commit, but doing so would make\n"
"it empty. You can repeat your command with --allow-empty, or you can\n"
@@ -9852,7 +10533,7 @@ msgstr ""
"с опцията „--allow-empty“, или да го изтриете от историята с командата:\n"
"„git reset HEAD^“.\n"
-#: builtin/commit.c:55
+#: builtin/commit.c:56
msgid ""
"The previous cherry-pick is now empty, possibly due to conflict resolution.\n"
"If you wish to commit it anyway, use:\n"
@@ -9867,11 +10548,11 @@ msgstr ""
" git commit --allow-empty\n"
"\n"
-#: builtin/commit.c:62
+#: builtin/commit.c:63
msgid "Otherwise, please use 'git reset'\n"
msgstr "В противен случай използвайте командата „git reset“\n"
-#: builtin/commit.c:65
+#: builtin/commit.c:66
msgid ""
"If you wish to skip this commit, use:\n"
"\n"
@@ -9887,61 +10568,61 @@ msgstr ""
"Чрез командата „git cherry-pick --continue“ ще продължите отбирането на\n"
"останалите подавания.\n"
-#: builtin/commit.c:311
+#: builtin/commit.c:312
msgid "failed to unpack HEAD tree object"
msgstr "върховото дърво (HEAD tree object) не може да бъде извадено от пакет"
-#: builtin/commit.c:352
+#: builtin/commit.c:353
msgid "unable to create temporary index"
msgstr "временният индекс не може да бъде създаден"
-#: builtin/commit.c:358
+#: builtin/commit.c:359
msgid "interactive add failed"
msgstr "неуспешно интерактивно добавяне"
-#: builtin/commit.c:371
+#: builtin/commit.c:373
msgid "unable to update temporary index"
msgstr "временният индекс не може да бъде обновен"
-#: builtin/commit.c:373
+#: builtin/commit.c:375
msgid "Failed to update main cache tree"
msgstr "Дървото на основния кеш не може да бъде обновено"
-#: builtin/commit.c:398 builtin/commit.c:421 builtin/commit.c:467
+#: builtin/commit.c:400 builtin/commit.c:423 builtin/commit.c:469
msgid "unable to write new_index file"
msgstr "новият индекс не може да бъде записан"
-#: builtin/commit.c:450
+#: builtin/commit.c:452
msgid "cannot do a partial commit during a merge."
msgstr "по време на сливане не може да се извърши частично подаване."
-#: builtin/commit.c:452
+#: builtin/commit.c:454
msgid "cannot do a partial commit during a cherry-pick."
msgstr "по време на отбиране не може да се извърши частично подаване."
-#: builtin/commit.c:460
+#: builtin/commit.c:462
msgid "cannot read the index"
msgstr "индексът не може да бъде прочетен"
-#: builtin/commit.c:479
+#: builtin/commit.c:481
msgid "unable to write temporary index file"
msgstr "временният индекс не може да бъде записан"
-#: builtin/commit.c:577
+#: builtin/commit.c:579
#, c-format
msgid "commit '%s' lacks author header"
msgstr "заглавната част за автор в подаването „%s“ липсва"
-#: builtin/commit.c:579
+#: builtin/commit.c:581
#, c-format
msgid "commit '%s' has malformed author line"
msgstr "заглавната част за автор в подаването „%s“ е неправилна"
-#: builtin/commit.c:598
+#: builtin/commit.c:600
msgid "malformed --author parameter"
msgstr "неправилен параметър към опцията „--author“"
-#: builtin/commit.c:650
+#: builtin/commit.c:652
msgid ""
"unable to select a comment character that is not used\n"
"in the current commit message"
@@ -9949,38 +10630,38 @@ msgstr ""
"не може да се избере знак за коментар — в текущото съобщение за подаване са "
"използвани всички подобни знаци"
-#: builtin/commit.c:687 builtin/commit.c:720 builtin/commit.c:1049
+#: builtin/commit.c:689 builtin/commit.c:722 builtin/commit.c:1052
#, c-format
msgid "could not lookup commit %s"
msgstr "следното подаване не може да бъде открито: %s"
-#: builtin/commit.c:699 builtin/shortlog.c:317
+#: builtin/commit.c:701 builtin/shortlog.c:319
#, c-format
msgid "(reading log message from standard input)\n"
msgstr "(изчитане на съобщението за подаване от стандартния вход)\n"
-#: builtin/commit.c:701
+#: builtin/commit.c:703
msgid "could not read log from standard input"
msgstr "съобщението за подаване не бе прочетено стандартния вход"
-#: builtin/commit.c:705
+#: builtin/commit.c:707
#, c-format
msgid "could not read log file '%s'"
msgstr "файлът със съобщението за подаване „%s“ не може да бъде прочетен"
-#: builtin/commit.c:734 builtin/commit.c:742
+#: builtin/commit.c:736 builtin/commit.c:744
msgid "could not read SQUASH_MSG"
msgstr "съобщението за вкарване SQUASH_MSG не може да бъде прочетено"
-#: builtin/commit.c:739
+#: builtin/commit.c:741
msgid "could not read MERGE_MSG"
msgstr "съобщението за сливане MERGE_MSG не може да бъде прочетено"
-#: builtin/commit.c:793
+#: builtin/commit.c:795
msgid "could not write commit template"
msgstr "шаблонът за подаване не може да бъде запазен"
-#: builtin/commit.c:811
+#: builtin/commit.c:813
#, c-format
msgid ""
"\n"
@@ -9995,7 +10676,7 @@ msgstr ""
" %s\n"
"и опитайте отново.\n"
-#: builtin/commit.c:816
+#: builtin/commit.c:818
#, c-format
msgid ""
"\n"
@@ -10011,7 +10692,7 @@ msgstr ""
" %s\n"
"и опитайте отново.\n"
-#: builtin/commit.c:829
+#: builtin/commit.c:831
#, c-format
msgid ""
"Please enter the commit message for your changes. Lines starting\n"
@@ -10020,7 +10701,7 @@ msgstr ""
"Въведете съобщението за подаване на промените. Редовете, които започват\n"
"с „%c“, ще бъдат пропуснати, а празно съобщение преустановява подаването.\n"
-#: builtin/commit.c:837
+#: builtin/commit.c:839
#, c-format
msgid ""
"Please enter the commit message for your changes. Lines starting\n"
@@ -10031,155 +10712,155 @@ msgstr ""
"с „%c“, също ще бъдат включени — може да ги изтриете вие. Празно \n"
"съобщение преустановява подаването.\n"
-#: builtin/commit.c:854
+#: builtin/commit.c:856
#, c-format
msgid "%sAuthor: %.*s <%.*s>"
msgstr "%sАвтор: %.*s <%.*s>"
-#: builtin/commit.c:862
+#: builtin/commit.c:864
#, c-format
msgid "%sDate: %s"
msgstr "%sДата: %s"
-#: builtin/commit.c:869
+#: builtin/commit.c:871
#, c-format
msgid "%sCommitter: %.*s <%.*s>"
msgstr "%sПодаващ: %.*s <%.*s>"
-#: builtin/commit.c:887
+#: builtin/commit.c:889
msgid "Cannot read index"
msgstr "Индексът не може да бъде прочетен"
-#: builtin/commit.c:953
+#: builtin/commit.c:956
msgid "Error building trees"
msgstr "Грешка при изграждане на дърветата"
-#: builtin/commit.c:967 builtin/tag.c:258
+#: builtin/commit.c:970 builtin/tag.c:258
#, c-format
msgid "Please supply the message using either -m or -F option.\n"
msgstr "Подайте съобщението с някоя от опциите „-m“ или „-F“.\n"
-#: builtin/commit.c:1011
+#: builtin/commit.c:1014
#, c-format
msgid "--author '%s' is not 'Name <email>' and matches no existing author"
msgstr ""
"Опцията „--author '%s'“ не отговаря на форма̀та „Име <е-поща>“ и не съвпада с "
"никой автор"
-#: builtin/commit.c:1025
+#: builtin/commit.c:1028
#, c-format
msgid "Invalid ignored mode '%s'"
msgstr "Неправилен режим за игнорираните файлове: „%s“"
-#: builtin/commit.c:1039 builtin/commit.c:1276
+#: builtin/commit.c:1042 builtin/commit.c:1279
#, c-format
msgid "Invalid untracked files mode '%s'"
msgstr "Неправилен режим за неследените файлове: „%s“"
-#: builtin/commit.c:1077
+#: builtin/commit.c:1080
msgid "--long and -z are incompatible"
msgstr "Опциите „--long“ и „-z“ са несъвместими."
-#: builtin/commit.c:1110
+#: builtin/commit.c:1113
msgid "Using both --reset-author and --author does not make sense"
msgstr "Опциите „--reset-author“ и „--author“ са несъвместими."
-#: builtin/commit.c:1119
+#: builtin/commit.c:1122
msgid "You have nothing to amend."
msgstr "Няма какво да бъде поправено."
-#: builtin/commit.c:1122
+#: builtin/commit.c:1125
msgid "You are in the middle of a merge -- cannot amend."
msgstr "В момента се извършва сливане, не можете да поправяте."
-#: builtin/commit.c:1124
+#: builtin/commit.c:1127
msgid "You are in the middle of a cherry-pick -- cannot amend."
msgstr "В момента се извършва отбиране на подаване, не можете да поправяте."
-#: builtin/commit.c:1127
+#: builtin/commit.c:1130
msgid "Options --squash and --fixup cannot be used together"
msgstr "Опциите „--squash“ и „--fixup“ са несъвместими."
-#: builtin/commit.c:1137
+#: builtin/commit.c:1140
msgid "Only one of -c/-C/-F/--fixup can be used."
msgstr "Опциите „-c“, „-C“, „-F“ и „--fixup““ са несъвместими."
-#: builtin/commit.c:1139
+#: builtin/commit.c:1142
msgid "Option -m cannot be combined with -c/-C/-F."
msgstr "Опцията „-m“ е несъвместима с „-c“, „-C“ и „-F“."
-#: builtin/commit.c:1147
+#: builtin/commit.c:1150
msgid "--reset-author can be used only with -C, -c or --amend."
msgstr ""
"Опцията „--reset-author“ може да се използва само заедно с „-C“, „-c“ или\n"
"„--amend“."
-#: builtin/commit.c:1164
+#: builtin/commit.c:1167
msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
msgstr ""
"Опциите „--include“, „--only“, „--all“, „--interactive“ и „--patch“ са\n"
"несъвместими."
-#: builtin/commit.c:1166
+#: builtin/commit.c:1169
msgid "No paths with --include/--only does not make sense."
msgstr "Опциите „--include“ и „--only“ изискват аргументи."
-#: builtin/commit.c:1180 builtin/tag.c:546
+#: builtin/commit.c:1183 builtin/tag.c:546
#, c-format
msgid "Invalid cleanup mode %s"
msgstr "Несъществуващ режим на изчистване „%s“"
-#: builtin/commit.c:1185
+#: builtin/commit.c:1188
msgid "Paths with -a does not make sense."
msgstr "Опцията „-a“ е несъвместима със задаването на пътища."
-#: builtin/commit.c:1311 builtin/commit.c:1495
+#: builtin/commit.c:1314 builtin/commit.c:1498
msgid "show status concisely"
msgstr "кратка информация за състоянието"
-#: builtin/commit.c:1313 builtin/commit.c:1497
+#: builtin/commit.c:1316 builtin/commit.c:1500
msgid "show branch information"
msgstr "информация за клоните"
-#: builtin/commit.c:1315
+#: builtin/commit.c:1318
msgid "show stash information"
msgstr "информация за скатаното"
-#: builtin/commit.c:1317 builtin/commit.c:1499
+#: builtin/commit.c:1320 builtin/commit.c:1502
msgid "compute full ahead/behind values"
msgstr "изчисляване на точните стойности напред/назад"
-#: builtin/commit.c:1319
+#: builtin/commit.c:1322
msgid "version"
msgstr "версия"
-#: builtin/commit.c:1319 builtin/commit.c:1501 builtin/push.c:558
-#: builtin/worktree.c:639
+#: builtin/commit.c:1322 builtin/commit.c:1504 builtin/push.c:561
+#: builtin/worktree.c:640
msgid "machine-readable output"
msgstr "формат на изхода за четене от програма"
-#: builtin/commit.c:1322 builtin/commit.c:1503
+#: builtin/commit.c:1325 builtin/commit.c:1506
msgid "show status in long format (default)"
msgstr "подробна информация за състоянието (стандартно)"
-#: builtin/commit.c:1325 builtin/commit.c:1506
+#: builtin/commit.c:1328 builtin/commit.c:1509
msgid "terminate entries with NUL"
msgstr "разделяне на елементите с нулевия знак „NUL“"
-#: builtin/commit.c:1327 builtin/commit.c:1331 builtin/commit.c:1509
-#: builtin/fast-export.c:1007 builtin/fast-export.c:1010 builtin/rebase.c:910
+#: builtin/commit.c:1330 builtin/commit.c:1334 builtin/commit.c:1512
+#: builtin/fast-export.c:1085 builtin/fast-export.c:1088 builtin/rebase.c:1118
#: builtin/tag.c:400
msgid "mode"
msgstr "РЕЖИМ"
-#: builtin/commit.c:1328 builtin/commit.c:1509
+#: builtin/commit.c:1331 builtin/commit.c:1512
msgid "show untracked files, optional modes: all, normal, no. (Default: all)"
msgstr ""
"извеждане на неследените файлове. Възможните РЕЖИМи са „all“ (подробна "
"информация), „normal“ (кратка информация), „no“ (без неследените файлове). "
"Стандартният РЕЖИМ е: „all“."
-#: builtin/commit.c:1332
+#: builtin/commit.c:1335
msgid ""
"show ignored files, optional modes: traditional, matching, no. (Default: "
"traditional)"
@@ -10188,11 +10869,11 @@ msgstr ""
"„traditional“ (традиционен), „matching“ (напасващи), „no“ (без игнорираните "
"файлове). Стандартният РЕЖИМ е: „traditional“."
-#: builtin/commit.c:1334 parse-options.h:164
+#: builtin/commit.c:1337 parse-options.h:164
msgid "when"
msgstr "КОГА"
-#: builtin/commit.c:1335
+#: builtin/commit.c:1338
msgid ""
"ignore changes to submodules, optional when: all, dirty, untracked. "
"(Default: all)"
@@ -10201,198 +10882,198 @@ msgstr ""
"една от „all“ (всички), „dirty“ (тези с неподадени промени), "
"„untracked“ (неследени)"
-#: builtin/commit.c:1337
+#: builtin/commit.c:1340
msgid "list untracked files in columns"
msgstr "извеждане на неследените файлове в колони"
-#: builtin/commit.c:1338
+#: builtin/commit.c:1341
msgid "do not detect renames"
msgstr "без засичане на преименуванията"
-#: builtin/commit.c:1340
+#: builtin/commit.c:1343
msgid "detect renames, optionally set similarity index"
msgstr "засичане на преименуванията, може да се зададе коефициент на прилика"
-#: builtin/commit.c:1360
+#: builtin/commit.c:1363
msgid "Unsupported combination of ignored and untracked-files arguments"
msgstr "Неподдържана комбинация от аргументи за игнорирани и неследени файлове"
-#: builtin/commit.c:1465
+#: builtin/commit.c:1468
msgid "suppress summary after successful commit"
msgstr "без информация след успешно подаване"
-#: builtin/commit.c:1466
+#: builtin/commit.c:1469
msgid "show diff in commit message template"
msgstr "добавяне на разликата към шаблона за съобщението при подаване"
-#: builtin/commit.c:1468
+#: builtin/commit.c:1471
msgid "Commit message options"
msgstr "Опции за съобщението при подаване"
-#: builtin/commit.c:1469 builtin/merge.c:263 builtin/tag.c:397
+#: builtin/commit.c:1472 builtin/merge.c:264 builtin/tag.c:397
msgid "read message from file"
msgstr "взимане на съобщението от ФАЙЛ"
-#: builtin/commit.c:1470
+#: builtin/commit.c:1473
msgid "author"
msgstr "АВТОР"
-#: builtin/commit.c:1470
+#: builtin/commit.c:1473
msgid "override author for commit"
msgstr "задаване на АВТОР за подаването"
-#: builtin/commit.c:1471 builtin/gc.c:518
+#: builtin/commit.c:1474 builtin/gc.c:518
msgid "date"
msgstr "ДАТА"
-#: builtin/commit.c:1471
+#: builtin/commit.c:1474
msgid "override date for commit"
msgstr "задаване на ДАТА за подаването"
-#: builtin/commit.c:1472 builtin/merge.c:259 builtin/notes.c:409
-#: builtin/notes.c:572 builtin/tag.c:395
+#: builtin/commit.c:1475 builtin/merge.c:260 builtin/notes.c:409
+#: builtin/notes.c:575 builtin/tag.c:395
msgid "message"
msgstr "СЪОБЩЕНИЕ"
-#: builtin/commit.c:1472
+#: builtin/commit.c:1475
msgid "commit message"
msgstr "СЪОБЩЕНИЕ при подаване"
-#: builtin/commit.c:1473 builtin/commit.c:1474 builtin/commit.c:1475
-#: builtin/commit.c:1476 ref-filter.h:92 parse-options.h:280
+#: builtin/commit.c:1476 builtin/commit.c:1477 builtin/commit.c:1478
+#: builtin/commit.c:1479 parse-options.h:278 ref-filter.h:92
msgid "commit"
msgstr "ПОДАВАНЕ"
-#: builtin/commit.c:1473
+#: builtin/commit.c:1476
msgid "reuse and edit message from specified commit"
msgstr "преизползване и редактиране на съобщението от указаното ПОДАВАНЕ"
-#: builtin/commit.c:1474
+#: builtin/commit.c:1477
msgid "reuse message from specified commit"
msgstr "преизползване на съобщението от указаното ПОДАВАНЕ"
-#: builtin/commit.c:1475
+#: builtin/commit.c:1478
msgid "use autosquash formatted message to fixup specified commit"
msgstr ""
"използване на автоматичното съобщение за вкарване на указаното ПОДАВАНЕ в "
"предходното без следа"
-#: builtin/commit.c:1476
+#: builtin/commit.c:1479
msgid "use autosquash formatted message to squash specified commit"
msgstr ""
"използване на автоматичното съобщение за вкарване на указаното ПОДАВАНЕ в "
"предното"
-#: builtin/commit.c:1477
+#: builtin/commit.c:1480
msgid "the commit is authored by me now (used with -C/-c/--amend)"
msgstr ""
"смяна на автора да съвпада с подаващия (използва се с „-C“/„-c“/„--amend“)"
-#: builtin/commit.c:1478 builtin/log.c:1520 builtin/merge.c:276
-#: builtin/pull.c:155 builtin/revert.c:106
+#: builtin/commit.c:1481 builtin/log.c:1533 builtin/merge.c:277
+#: builtin/pull.c:156 builtin/revert.c:107
msgid "add Signed-off-by:"
msgstr "добавяне на поле за подпис — „Signed-off-by:“"
-#: builtin/commit.c:1479
+#: builtin/commit.c:1482
msgid "use specified template file"
msgstr "използване на указания шаблонен ФАЙЛ"
-#: builtin/commit.c:1480
+#: builtin/commit.c:1483
msgid "force edit of commit"
msgstr "редактиране на подаване"
-#: builtin/commit.c:1481
+#: builtin/commit.c:1484
msgid "default"
msgstr "стандартно"
-#: builtin/commit.c:1481 builtin/tag.c:401
+#: builtin/commit.c:1484 builtin/tag.c:401
msgid "how to strip spaces and #comments from message"
msgstr "кои празни знаци и #коментари да се махат от съобщенията"
-#: builtin/commit.c:1482
+#: builtin/commit.c:1485
msgid "include status in commit message template"
msgstr "вмъкване на състоянието в шаблона за съобщението при подаване"
-#: builtin/commit.c:1484 builtin/merge.c:274 builtin/pull.c:185
-#: builtin/revert.c:114
+#: builtin/commit.c:1487 builtin/merge.c:275 builtin/pull.c:186
+#: builtin/revert.c:115
msgid "GPG sign commit"
msgstr "подписване на подаването с GPG"
-#: builtin/commit.c:1487
+#: builtin/commit.c:1490
msgid "Commit contents options"
msgstr "Опции за избор на файлове при подаване"
-#: builtin/commit.c:1488
+#: builtin/commit.c:1491
msgid "commit all changed files"
msgstr "подаване на всички променени файлове"
-#: builtin/commit.c:1489
+#: builtin/commit.c:1492
msgid "add specified files to index for commit"
msgstr "добавяне на указаните файлове към индекса за подаване"
-#: builtin/commit.c:1490
+#: builtin/commit.c:1493
msgid "interactively add files"
msgstr "интерактивно добавяне на файлове"
-#: builtin/commit.c:1491
+#: builtin/commit.c:1494
msgid "interactively add changes"
msgstr "интерактивно добавяне на промени"
-#: builtin/commit.c:1492
+#: builtin/commit.c:1495
msgid "commit only specified files"
msgstr "подаване само на указаните файлове"
-#: builtin/commit.c:1493
+#: builtin/commit.c:1496
msgid "bypass pre-commit and commit-msg hooks"
msgstr ""
"без изпълнение на куките преди подаване и при промяна на съобщението за "
"подаване (pre-commit и commit-msg)"
-#: builtin/commit.c:1494
+#: builtin/commit.c:1497
msgid "show what would be committed"
msgstr "отпечатване на това, което би било подадено"
-#: builtin/commit.c:1507
+#: builtin/commit.c:1510
msgid "amend previous commit"
msgstr "поправяне на предишното подаване"
-#: builtin/commit.c:1508
+#: builtin/commit.c:1511
msgid "bypass post-rewrite hook"
msgstr "без изпълнение на куката след презаписване (post-rewrite)"
-#: builtin/commit.c:1513
+#: builtin/commit.c:1516
msgid "ok to record an empty change"
msgstr "позволяване на празни подавания"
-#: builtin/commit.c:1515
+#: builtin/commit.c:1518
msgid "ok to record a change with an empty message"
msgstr "позволяване на подавания с празни съобщения"
-#: builtin/commit.c:1588
+#: builtin/commit.c:1591
#, c-format
msgid "Corrupt MERGE_HEAD file (%s)"
msgstr "Повреден файл за върха за сливането „MERGE_HEAD“ (%s)"
-#: builtin/commit.c:1595
+#: builtin/commit.c:1598
msgid "could not read MERGE_MODE"
msgstr "режимът на сливане „MERGE_MODE“ не може да бъде прочетен"
-#: builtin/commit.c:1614
+#: builtin/commit.c:1617
#, c-format
msgid "could not read commit message: %s"
msgstr "съобщението за подаване не може да бъде прочетено: %s"
-#: builtin/commit.c:1625
+#: builtin/commit.c:1628
#, c-format
msgid "Aborting commit due to empty commit message.\n"
msgstr "Неизвършване на подаване поради празно съобщение.\n"
-#: builtin/commit.c:1630
+#: builtin/commit.c:1633
#, c-format
msgid "Aborting commit; you did not edit the message.\n"
msgstr "Неизвършване на подаване поради нередактирано съобщение.\n"
-#: builtin/commit.c:1665
+#: builtin/commit.c:1668
msgid ""
"repository has been updated, but unable to write\n"
"new_index file. Check that disk is not full and quota is\n"
@@ -10424,7 +11105,7 @@ msgstr ""
#: builtin/commit-graph.c:48 builtin/commit-graph.c:78
#: builtin/commit-graph.c:132 builtin/commit-graph.c:190 builtin/fetch.c:153
-#: builtin/log.c:1540
+#: builtin/log.c:1553
msgid "dir"
msgstr "директория"
@@ -10624,48 +11305,48 @@ msgstr "СТОЙНОСТ"
msgid "with --get, use default value when missing entry"
msgstr "с „--get“ се използва стандартна СТОЙНОСТ при липсваща"
-#: builtin/config.c:171
+#: builtin/config.c:172
#, c-format
msgid "wrong number of arguments, should be %d"
msgstr "неправилен брой аргументи, трябва да е точно %d"
-#: builtin/config.c:173
+#: builtin/config.c:174
#, c-format
msgid "wrong number of arguments, should be from %d to %d"
msgstr "неправилен брой аргументи, трябва да е от %d до %d включително"
-#: builtin/config.c:307
+#: builtin/config.c:308
#, c-format
msgid "invalid key pattern: %s"
msgstr "неправилен шаблон за ключ: „%s“"
-#: builtin/config.c:343
+#: builtin/config.c:344
#, c-format
msgid "failed to format default config value: %s"
msgstr "неуспешно форматиране на стандартната стойност на настройка: %s"
-#: builtin/config.c:400
+#: builtin/config.c:401
#, c-format
msgid "cannot parse color '%s'"
msgstr "„%s“ не може да се анализира като цвят"
-#: builtin/config.c:442
+#: builtin/config.c:443
msgid "unable to parse default color value"
msgstr "неразпозната стойност на стандартния цвят"
-#: builtin/config.c:495 builtin/config.c:741
+#: builtin/config.c:496 builtin/config.c:742
msgid "not in a git directory"
msgstr "не е в директория под Git"
-#: builtin/config.c:498
+#: builtin/config.c:499
msgid "writing to stdin is not supported"
msgstr "не се поддържа записване в стандартния вход"
-#: builtin/config.c:501
+#: builtin/config.c:502
msgid "writing config blobs is not supported"
msgstr "обекти-BLOB в настройките не се поддържат"
-#: builtin/config.c:586
+#: builtin/config.c:587
#, c-format
msgid ""
"# This is Git's per-user configuration file.\n"
@@ -10680,23 +11361,23 @@ msgstr ""
"#\tname = %s\n"
"#\temail = %s\n"
-#: builtin/config.c:610
+#: builtin/config.c:611
msgid "only one config file at a time"
msgstr "само по един конфигурационен файл"
-#: builtin/config.c:615
+#: builtin/config.c:616
msgid "--local can only be used inside a git repository"
msgstr "„--local“ може да се използва само в хранилище"
-#: builtin/config.c:618
+#: builtin/config.c:619
msgid "--blob can only be used inside a git repository"
msgstr "„--blob“ може да се използва само в хранилище"
-#: builtin/config.c:637
+#: builtin/config.c:638
msgid "$HOME not set"
msgstr "променливата „HOME“ не е зададена"
-#: builtin/config.c:657
+#: builtin/config.c:658
msgid ""
"--worktree cannot be used with multiple working trees unless the config\n"
"extension worktreeConfig is enabled. Please read \"CONFIGURATION FILE\"\n"
@@ -10707,20 +11388,20 @@ msgstr ""
"повече информация вижте раздела „CONFIGURATION FILE“ в\n"
"„git help worktree“"
-#: builtin/config.c:687
+#: builtin/config.c:688
msgid "--get-color and variable type are incoherent"
msgstr "опцията „--get-color“ не съответства на вида на променливата"
-#: builtin/config.c:692
+#: builtin/config.c:693
msgid "only one action at a time"
msgstr "само по едно действие"
-#: builtin/config.c:705
+#: builtin/config.c:706
msgid "--name-only is only applicable to --list or --get-regexp"
msgstr ""
"опцията „--name-only“ е приложима само към опциите „--list“ и „--get-regexp“"
-#: builtin/config.c:711
+#: builtin/config.c:712
msgid ""
"--show-origin is only applicable to --get, --get-all, --get-regexp, and --"
"list"
@@ -10728,33 +11409,33 @@ msgstr ""
"опцията „--show-origin“ е приложима само към опциите „--get“, „--get-all“, "
"„--get-regexp“ и „--list“"
-#: builtin/config.c:717
+#: builtin/config.c:718
msgid "--default is only applicable to --get"
msgstr "опцията „--default“ е приложима само към опцията „--get“"
-#: builtin/config.c:730
+#: builtin/config.c:731
#, c-format
msgid "unable to read config file '%s'"
msgstr "конфигурационният файл „%s“ не може да бъде прочетен"
-#: builtin/config.c:733
+#: builtin/config.c:734
msgid "error processing config file(s)"
msgstr "грешка при обработката на конфигурационен файл"
-#: builtin/config.c:743
+#: builtin/config.c:744
msgid "editing stdin is not supported"
msgstr "не се поддържа редактиране на стандартния вход"
-#: builtin/config.c:745
+#: builtin/config.c:746
msgid "editing blobs is not supported"
msgstr "не се поддържа редактиране на обекти-BLOB"
-#: builtin/config.c:759
+#: builtin/config.c:760
#, c-format
msgid "cannot create configuration file %s"
msgstr "конфигурационният файл „%s“ не може да бъде създаден"
-#: builtin/config.c:772
+#: builtin/config.c:773
#, c-format
msgid ""
"cannot overwrite multiple values with a single value\n"
@@ -10764,7 +11445,7 @@ msgstr ""
"За да промените „%s“, ползвайте регулярен израз или опциите „--add“ и „--"
"replace-all“."
-#: builtin/config.c:846 builtin/config.c:857
+#: builtin/config.c:847 builtin/config.c:858
#, c-format
msgid "no such section: %s"
msgstr "такъв раззел няма: %s"
@@ -10777,57 +11458,57 @@ msgstr "git count-objects [-v] [-H | --human-readable]"
msgid "print sizes in human readable format"
msgstr "извеждане на размерите на обектите във формат лесно четим от хора"
-#: builtin/describe.c:26
+#: builtin/describe.c:27
msgid "git describe [<options>] [<commit-ish>...]"
msgstr "git describe [ОПЦИЯ…] [УКАЗАТЕЛ_КЪМ_ПОДАВАНЕ…]"
-#: builtin/describe.c:27
+#: builtin/describe.c:28
msgid "git describe [<options>] --dirty"
msgstr "git describe [ОПЦИЯ…] --dirty"
-#: builtin/describe.c:62
+#: builtin/describe.c:63
msgid "head"
msgstr "основно"
-#: builtin/describe.c:62
+#: builtin/describe.c:63
msgid "lightweight"
msgstr "кратко"
-#: builtin/describe.c:62
+#: builtin/describe.c:63
msgid "annotated"
msgstr "анотирано"
-#: builtin/describe.c:272
+#: builtin/describe.c:273
#, c-format
msgid "annotated tag %s not available"
msgstr "не съществува анотиран етикет „%s“"
-#: builtin/describe.c:276
+#: builtin/describe.c:277
#, c-format
msgid "annotated tag %s has no embedded name"
msgstr "в анотирания етикет „%s“ липсва вградено име"
-#: builtin/describe.c:278
+#: builtin/describe.c:279
#, c-format
msgid "tag '%s' is really '%s' here"
msgstr "етикетът „%s“ тук е всъщност „%s“"
-#: builtin/describe.c:322
+#: builtin/describe.c:323
#, c-format
msgid "no tag exactly matches '%s'"
msgstr "никой етикет не напасва точно „%s“"
-#: builtin/describe.c:324
+#: builtin/describe.c:325
#, c-format
msgid "No exact match on refs or tags, searching to describe\n"
msgstr "Никоя версия и етикет не напасват точно. Търси се по описание\n"
-#: builtin/describe.c:378
+#: builtin/describe.c:379
#, c-format
msgid "finished search at %s\n"
msgstr "търсенето приключи при „%s“\n"
-#: builtin/describe.c:404
+#: builtin/describe.c:405
#, c-format
msgid ""
"No annotated tags can describe '%s'.\n"
@@ -10836,7 +11517,7 @@ msgstr ""
"Никой анотиран етикет не описва „%s“.\n"
"Съществуват и неанотирани етикети. Пробвайте с опцията „--tags“."
-#: builtin/describe.c:408
+#: builtin/describe.c:409
#, c-format
msgid ""
"No tags can describe '%s'.\n"
@@ -10845,12 +11526,12 @@ msgstr ""
"Никой етикет не описва „%s“.\n"
"Пробвайте с опцията „--always“ или създайте етикети."
-#: builtin/describe.c:438
+#: builtin/describe.c:439
#, c-format
msgid "traversed %lu commits\n"
msgstr "претърсени са %lu подавания\n"
-#: builtin/describe.c:441
+#: builtin/describe.c:442
#, c-format
msgid ""
"more than %i tags found; listed %i most recent\n"
@@ -10859,150 +11540,150 @@ msgstr ""
"открити са над %i етикета, изведени са последните %i,\n"
"търсенето бе прекратено при „%s“.\n"
-#: builtin/describe.c:509
+#: builtin/describe.c:510
#, c-format
msgid "describe %s\n"
msgstr "описание на „%s“\n"
-#: builtin/describe.c:512 builtin/log.c:513
+#: builtin/describe.c:513 builtin/log.c:516
#, c-format
msgid "Not a valid object name %s"
msgstr "Неправилно име на обект „%s“"
-#: builtin/describe.c:520
+#: builtin/describe.c:521
#, c-format
msgid "%s is neither a commit nor blob"
msgstr "„%s“ не е нито подаване, нито обект-BLOB"
-#: builtin/describe.c:534
+#: builtin/describe.c:535
msgid "find the tag that comes after the commit"
msgstr "откриване на етикета, който следва подаване"
-#: builtin/describe.c:535
+#: builtin/describe.c:536
msgid "debug search strategy on stderr"
msgstr ""
"извеждане на информация за трасиране на стратегията за търсене на "
"стандартната грешка"
-#: builtin/describe.c:536
+#: builtin/describe.c:537
msgid "use any ref"
msgstr "използване на произволен указател"
-#: builtin/describe.c:537
+#: builtin/describe.c:538
msgid "use any tag, even unannotated"
msgstr "използване на всеки етикет — включително и неанотираните"
-#: builtin/describe.c:538
+#: builtin/describe.c:539
msgid "always use long format"
msgstr "винаги да се ползва дългият формат"
-#: builtin/describe.c:539
+#: builtin/describe.c:540
msgid "only follow first parent"
msgstr "проследяване само на първия родител"
-#: builtin/describe.c:542
+#: builtin/describe.c:543
msgid "only output exact matches"
msgstr "извеждане само на точните съвпадения"
-#: builtin/describe.c:544
+#: builtin/describe.c:545
msgid "consider <n> most recent tags (default: 10)"
msgstr "да се търси само в този БРОЙ последни етикети (стандартно: 10)"
-#: builtin/describe.c:546
+#: builtin/describe.c:547
msgid "only consider tags matching <pattern>"
msgstr "да се търси само измежду етикетите напасващи този ШАБЛОН"
-#: builtin/describe.c:548
+#: builtin/describe.c:549
msgid "do not consider tags matching <pattern>"
msgstr "да не се търси измежду етикетите напасващи този ШАБЛОН"
-#: builtin/describe.c:550 builtin/name-rev.c:424
+#: builtin/describe.c:551 builtin/name-rev.c:424
msgid "show abbreviated commit object as fallback"
msgstr "извеждане на съкратено име на обект като резервен вариант"
-#: builtin/describe.c:551 builtin/describe.c:554
+#: builtin/describe.c:552 builtin/describe.c:555
msgid "mark"
msgstr "МАРКЕР"
-#: builtin/describe.c:552
+#: builtin/describe.c:553
msgid "append <mark> on dirty working tree (default: \"-dirty\")"
msgstr "добавяне на такъв МАРКЕР на работното дърво (стандартно е „-dirty“)"
-#: builtin/describe.c:555
+#: builtin/describe.c:556
msgid "append <mark> on broken working tree (default: \"-broken\")"
msgstr ""
"добавяне на такъв МАРКЕР на счупеното работно дърво (стандартно е „-broken“)"
-#: builtin/describe.c:573
+#: builtin/describe.c:574
msgid "--long is incompatible with --abbrev=0"
msgstr "Опциите „--long“ и „--abbrev=0“ са несъвместими"
-#: builtin/describe.c:602
+#: builtin/describe.c:603
msgid "No names found, cannot describe anything."
msgstr "Не са открити имена — нищо не може да бъде описано."