summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitattributes1
-rw-r--r--.mailmap1
-rw-r--r--Documentation/RelNotes/2.20.1.txt20
-rw-r--r--Documentation/RelNotes/2.21.0.txt66
-rw-r--r--Documentation/config/advice.txt7
-rw-r--r--Documentation/config/http.txt9
-rw-r--r--Documentation/diff-options.txt5
-rw-r--r--Documentation/git-checkout.txt4
-rw-r--r--Documentation/git-clone.txt6
-rw-r--r--Documentation/git-fast-export.txt23
-rw-r--r--Documentation/git-fast-import.txt23
-rw-r--r--Documentation/git-push.txt23
-rw-r--r--Documentation/git-rebase.txt7
-rw-r--r--Documentation/gitdiffcore.txt3
-rw-r--r--Documentation/gitweb.conf.txt2
-rw-r--r--Documentation/glossary-content.txt2
-rwxr-xr-xGIT-VERSION-GEN2
l---------RelNotes2
-rw-r--r--advice.c2
-rw-r--r--advice.h1
-rw-r--r--alias.c4
-rw-r--r--apply.c3
-rw-r--r--archive-tar.c2
-rw-r--r--archive.c18
-rw-r--r--attr.c4
-rw-r--r--bisect.c48
-rw-r--r--bisect.h5
-rw-r--r--blame.c39
-rw-r--r--branch.c21
-rw-r--r--branch.h8
-rw-r--r--builtin/add.c2
-rw-r--r--builtin/am.c4
-rw-r--r--builtin/bisect--helper.c2
-rw-r--r--builtin/blame.c2
-rw-r--r--builtin/branch.c6
-rw-r--r--builtin/bundle.c7
-rw-r--r--builtin/checkout-index.c6
-rw-r--r--builtin/checkout.c65
-rw-r--r--builtin/clone.c33
-rw-r--r--builtin/commit.c8
-rw-r--r--builtin/count-objects.c4
-rw-r--r--builtin/difftool.c2
-rw-r--r--builtin/fast-export.c190
-rw-r--r--builtin/fsck.c198
-rw-r--r--builtin/gc.c2
-rw-r--r--builtin/grep.c5
-rw-r--r--builtin/log.c5
-rw-r--r--builtin/ls-files.c2
-rw-r--r--builtin/ls-tree.c3
-rw-r--r--builtin/merge-ours.c2
-rw-r--r--builtin/merge-tree.c2
-rw-r--r--builtin/merge.c6
-rw-r--r--builtin/notes.c2
-rw-r--r--builtin/pack-objects.c12
-rw-r--r--builtin/prune.c1
-rw-r--r--builtin/pull.c3
-rw-r--r--builtin/push.c3
-rw-r--r--builtin/read-tree.c4
-rw-r--r--builtin/rebase--interactive.c19
-rw-r--r--builtin/rebase.c17
-rw-r--r--builtin/reflog.c34
-rw-r--r--builtin/repack.c26
-rw-r--r--builtin/rerere.c10
-rw-r--r--builtin/reset.c4
-rw-r--r--builtin/rev-list.c6
-rw-r--r--builtin/revert.c11
-rw-r--r--builtin/shortlog.c2
-rw-r--r--builtin/submodule--helper.c9
-rw-r--r--builtin/update-index.c2
-rw-r--r--bundle.c26
-rw-r--r--bundle.h9
-rw-r--r--cache-tree.c28
-rw-r--r--cache-tree.h4
-rw-r--r--cache.h4
-rw-r--r--combine-diff.c2
-rw-r--r--commit-graph.c26
-rw-r--r--compat/cygwin.c19
-rw-r--r--compat/cygwin.h2
-rw-r--r--compat/mingw.c29
-rw-r--r--compat/mingw.h20
-rw-r--r--compat/win32/path-utils.c28
-rw-r--r--compat/win32/path-utils.h20
-rw-r--r--config.mak.uname4
-rw-r--r--convert.c6
-rw-r--r--delta-islands.c24
-rw-r--r--delta-islands.h9
-rw-r--r--diff-lib.c7
-rw-r--r--diff.c37
-rw-r--r--diff.h8
-rw-r--r--diffcore-pickaxe.c10
-rw-r--r--dir.c41
-rw-r--r--entry.c10
-rw-r--r--environment.c4
-rw-r--r--fast-import.c166
-rw-r--r--fetch-pack.c39
-rw-r--r--git-compat-util.h5
-rwxr-xr-xgit-stash.sh17
-rw-r--r--git.c32
-rw-r--r--grep.c2
-rw-r--r--help.c10
-rw-r--r--help.h2
-rw-r--r--http-backend.c2
-rw-r--r--http-walker.c2
-rw-r--r--http.c43
-rw-r--r--line-log.c2
-rw-r--r--list-objects-filter.c10
-rw-r--r--list-objects-filter.h2
-rw-r--r--list-objects.c16
-rw-r--r--ll-merge.c4
-rw-r--r--ll-merge.h1
-rw-r--r--merge-recursive.c532
-rw-r--r--midx.c2
-rw-r--r--notes-cache.c12
-rw-r--r--notes-cache.h6
-rw-r--r--notes-merge.c16
-rw-r--r--notes-merge.h5
-rw-r--r--object-store.h60
-rw-r--r--object.c26
-rw-r--r--pack-bitmap-write.c6
-rw-r--r--pack-bitmap.c13
-rw-r--r--pack-bitmap.h3
-rw-r--r--pack-check.c9
-rw-r--r--pack-objects.c6
-rw-r--r--pack-objects.h5
-rw-r--r--pack.h4
-rw-r--r--packfile.c20
-rw-r--r--parse-options-cb.c7
-rw-r--r--parse-options.c70
-rw-r--r--parse-options.h12
-rw-r--r--path.c2
-rw-r--r--pathspec.c38
-rw-r--r--pathspec.h27
-rw-r--r--po/bg.po7366
-rw-r--r--po/ca.po11401
-rw-r--r--po/de.po10456
-rw-r--r--po/es.po7604
-rw-r--r--po/fr.po7314
-rw-r--r--po/git.pot7045
-rw-r--r--po/sv.po7290
-rw-r--r--po/vi.po7325
-rw-r--r--po/zh_CN.po7372
-rw-r--r--quote.c2
-rw-r--r--read-cache.c193
-rw-r--r--rebase-interactive.c6
-rw-r--r--rebase-interactive.h5
-rw-r--r--ref-filter.c10
-rw-r--r--remote.c120
-rw-r--r--repository.c8
-rw-r--r--rerere.c26
-rw-r--r--rerere.h6
-rw-r--r--revision.c17
-rw-r--r--revision.h4
-rw-r--r--run-command.c2
-rw-r--r--sequencer.c453
-rw-r--r--sequencer.h27
-rw-r--r--sha1-file.c211
-rw-r--r--sha1-name.c42
-rw-r--r--sideband.c5
-rw-r--r--symlinks.c2
-rw-r--r--t/.gitattributes1
-rwxr-xr-xt/check-non-portable-shell.pl1
-rwxr-xr-xt/t0027-auto-crlf.sh4
-rwxr-xr-xt/t0040-parse-options.sh4
-rwxr-xr-xt/t0061-run-command.sh19
-rwxr-xr-xt/t0410-partial-clone.sh16
-rwxr-xr-xt/t1410-reflog.sh6
-rwxr-xr-xt/t1450-fsck.sh60
-rwxr-xr-xt/t2024-checkout-dwim.sh31
-rwxr-xr-xt/t3903-stash.sh28
-rwxr-xr-xt/t4015-diff-whitespace.sh18
-rwxr-xr-xt/t4209-log-pickaxe.sh35
-rwxr-xr-xt/t4211-line-log.sh2
-rwxr-xr-xt/t5004-archive-corner-cases.sh17
-rwxr-xr-xt/t5409-colorize-remote-messages.sh2
-rwxr-xr-xt/t5505-remote.sh55
-rwxr-xr-xt/t5601-clone.sh2
-rwxr-xr-xt/t5611-clone-config.sh47
-rwxr-xr-xt/t5616-partial-clone.sh2
-rwxr-xr-xt/t5703-upload-pack-ref-in-want.sh4
-rwxr-xr-xt/t6036-recursive-corner-cases.sh430
-rwxr-xr-xt/t6042-merge-rename-corner-cases.sh333
-rwxr-xr-xt/t6043-merge-rename-directories.sh144
-rwxr-xr-xt/t6050-replace.sh4
-rwxr-xr-xt/t6135-pathspec-with-attrs.sh58
-rwxr-xr-xt/t7415-submodule-names.sh6
-rwxr-xr-xt/t9350-fast-export.sh80
-rwxr-xr-xt/t9902-completion.sh5
-rw-r--r--transport.c11
-rw-r--r--transport.h3
-rw-r--r--tree-diff.c3
-rw-r--r--tree-walk.c89
-rw-r--r--tree-walk.h10
-rw-r--r--tree.c21
-rw-r--r--tree.h18
-rw-r--r--unpack-trees.c14
-rw-r--r--userdiff.c5
-rw-r--r--userdiff.h4
-rw-r--r--wt-status.c94
-rw-r--r--wt-status.h21
199 files changed, 48129 insertions, 30585 deletions
diff --git a/.gitattributes b/.gitattributes
index acf853e..9fa72ad 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -9,6 +9,7 @@
/command-list.txt eol=lf
/GIT-VERSION-GEN eol=lf
/mergetools/* eol=lf
+/t/oid-info/* eol=lf
/Documentation/git-merge.txt conflict-marker-size=32
/Documentation/gitk.txt conflict-marker-size=32
/Documentation/user-manual.txt conflict-marker-size=32
diff --git a/.mailmap b/.mailmap
index eb7b5fc..247a3de 100644
--- a/.mailmap
+++ b/.mailmap
@@ -27,6 +27,7 @@ Ben Walton <bdwalton@gmail.com> <bwalton@artsci.utoronto.ca>
Benoit Sigoure <tsunanet@gmail.com> <tsuna@lrde.epita.fr>
Bernt Hansen <bernt@norang.ca> <bernt@alumni.uwaterloo.ca>
Brandon Casey <drafnel@gmail.com> <casey@nrlssc.navy.mil>
+Brandon Williams <bwilliams.eng@gmail.com> <bmwill@google.com>
brian m. carlson <sandals@crustytoothpaste.net>
brian m. carlson <sandals@crustytoothpaste.net> <sandals@crustytoothpaste.ath.cx>
Bryan Larsen <bryan@larsen.st> <bryan.larsen@gmail.com>
diff --git a/Documentation/RelNotes/2.20.1.txt b/Documentation/RelNotes/2.20.1.txt
new file mode 100644
index 0000000..dcba888
--- /dev/null
+++ b/Documentation/RelNotes/2.20.1.txt
@@ -0,0 +1,20 @@
+Git v2.20.1 Release Notes
+=========================
+
+This release is primarily to fix brown-paper-bag breakages in the
+2.20.0 release.
+
+Fixes since v2.20
+-----------------
+
+ * A few newly added tests were not portable and caused minority
+ platforms to report false breakages, which have been fixed.
+
+ * Portability fix for a recent update to parse-options API.
+
+ * "git help -a" did not work well when an overly long alias is
+ defined, which has been corrected.
+
+ * A recent update accidentally squelched an error message when the
+ run_command API failed to run a missing command, which has been
+ corrected.
diff --git a/Documentation/RelNotes/2.21.0.txt b/Documentation/RelNotes/2.21.0.txt
new file mode 100644
index 0000000..8a5e53b
--- /dev/null
+++ b/Documentation/RelNotes/2.21.0.txt
@@ -0,0 +1,66 @@
+Git 2.21 Release Notes
+======================
+
+Backward Compatibility Notes
+----------------------------
+
+
+Updates since v2.20
+-------------------
+
+UI, Workflows & Features
+
+ * The "http.version" configuration variable can be used with recent
+ enough cURL library to force the version of HTTP used to talk when
+ fetching and pushing.
+
+ * Small fixes and features for fast-export and fast-import, mostly on
+ the fast-export side.
+
+ * "git push $there $src:$dst" rejects when $dst is not a fully
+ qualified refname and not clear what the end user meant. The
+ codepath has been taught to give a clearer error message, and also
+ guess where the push should go by taking the type of the pushed
+ object into account (e.g. a tag object would want to go under
+ refs/tags/).
+
+
+Performance, Internal Implementation, Development Support etc.
+
+ * Code clean-up with optimization for the codepath that checks
+ (non-)existence of loose objects.
+
+ * More codepaths become aware of working with in-core repository
+ instance other than the default "the_repository".
+
+
+Fixes since v2.20
+-----------------
+
+ * Updates for corner cases in merge-recursive.
+ (merge cc4cb0902c en/merge-path-collision later to maint).
+
+ * "git checkout frotz" (without any double-dash) avoids ambiguity by
+ making sure 'frotz' cannot be interpreted as a revision and as a
+ path at the same time. This safety has been updated to check also
+ a unique remote-tracking branch 'frotz' in a remote, when dwimming
+ to create a local branch 'frotz' out of a remote-tracking branch
+ 'frotz' from a remote.
+ (merge be4908f103 nd/checkout-dwim-fix later to maint).
+
+ * Refspecs configured with "git -c var=val clone" did not propagate
+ to the resulting repository, which has been corrected.
+ (merge 7eae4a3ac4 sg/clone-initial-fetch-configuration later to maint).
+
+ * A properly configured username/email is required under
+ user.useConfigOnly in order to create commits; now "git stash"
+ (even though it creates commit objects to represent stash entries)
+ command is exempt from the requirement.
+ (merge 3bc2111fc2 sd/stash-wo-user-name later to maint).
+
+ * The http-backend CGI process did not correctly clean up the child
+ processes it spawns to run upload-pack etc. when it dies itself,
+ which has been corrected.
+ (merge 02818a98d7 mk/http-backend-kill-children-before-exit later to maint).
+
+ * Code cleanup, docfix, build fix, etc.
diff --git a/Documentation/config/advice.txt b/Documentation/config/advice.txt
index 57fcd4c..8862042 100644
--- a/Documentation/config/advice.txt
+++ b/Documentation/config/advice.txt
@@ -30,6 +30,13 @@ advice.*::
tries to overwrite a remote ref that points at an
object that is not a commit-ish, or make the remote
ref point at an object that is not a commit-ish.
+ pushUnqualifiedRefname::
+ Shown when linkgit:git-push[1] gives up trying to
+ guess based on the source and destination refs what
+ remote ref namespace the source belongs in, but where
+ we can still suggest that the user push to either
+ refs/heads/* or refs/tags/* based on the type of the
+ source object.
statusHints::
Show directions on how to proceed from the current
state in the output of linkgit:git-status[1], in
diff --git a/Documentation/config/http.txt b/Documentation/config/http.txt
index a56d848..5a32f5b 100644
--- a/Documentation/config/http.txt
+++ b/Documentation/config/http.txt
@@ -68,6 +68,15 @@ http.saveCookies::
If set, store cookies received during requests to the file specified by
http.cookieFile. Has no effect if http.cookieFile is unset.
+http.version::
+ Use the specified HTTP protocol version when communicating with a server.
+ If you want to force the default. The available and default version depend
+ on libcurl. Actually the possible values of
+ this option are:
+
+ - HTTP/2
+ - HTTP/1.1
+
http.sslVersion::
The SSL version to use when negotiating an SSL connection, if you
want to force the default. The available and default version
diff --git a/Documentation/diff-options.txt b/Documentation/diff-options.txt
index 0378cd5..b94d332 100644
--- a/Documentation/diff-options.txt
+++ b/Documentation/diff-options.txt
@@ -524,6 +524,8 @@ struct), and want to know the history of that block since it first
came into being: use the feature iteratively to feed the interesting
block in the preimage back into `-S`, and keep going until you get the
very first version of the block.
++
+Binary files are searched as well.
-G<regex>::
Look for differences whose patch text contains added/removed
@@ -543,6 +545,9 @@ While `git log -G"regexec\(regexp"` will show this commit, `git log
-S"regexec\(regexp" --pickaxe-regex` will not (because the number of
occurrences of that string did not change).
+
+Unless `--text` is supplied patches of binary files without a textconv
+filter will be ignored.
++
See the 'pickaxe' entry in linkgit:gitdiffcore[7] for more
information.
diff --git a/Documentation/git-checkout.txt b/Documentation/git-checkout.txt
index 801de2f..6acc3d9 100644
--- a/Documentation/git-checkout.txt
+++ b/Documentation/git-checkout.txt
@@ -276,6 +276,10 @@ section of linkgit:git-add[1] to learn how to operate the `--patch` mode.
Just like linkgit:git-submodule[1], this will detach the
submodules HEAD.
+--no-guess::
+ Do not attempt to create a branch if a remote tracking branch
+ of the same name exists.
+
<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
diff --git a/Documentation/git-clone.txt b/Documentation/git-clone.txt
index a55536f..2fd1252 100644
--- a/Documentation/git-clone.txt
+++ b/Documentation/git-clone.txt
@@ -189,6 +189,12 @@ objects from the source repository into a pack in the cloned repository.
values are given for the same key, each value will be written to
the config file. This makes it safe, for example, to add
additional fetch refspecs to the origin remote.
++
+Due to limitations of the current implementation, some configuration
+variables do not take effect until after the initial fetch and checkout.
+Configuration variables known to not take effect are:
+`remote.<name>.mirror` and `remote.<name>.tagOpt`. Use the
+corresponding `--mirror` and `--no-tags` options instead.
--depth <depth>::
Create a 'shallow' clone with a history truncated to the
diff --git a/Documentation/git-fast-export.txt b/Documentation/git-fast-export.txt
index ce954be..64c01ba 100644
--- a/Documentation/git-fast-export.txt
+++ b/Documentation/git-fast-export.txt
@@ -110,6 +110,25 @@ marks the same across runs.
the shape of the history and stored tree. See the section on
`ANONYMIZING` below.
+--reference-excluded-parents::
+ By default, running a command such as `git fast-export
+ master~5..master` will not include the commit master{tilde}5
+ and will make master{tilde}4 no longer have master{tilde}5 as
+ a parent (though both the old master{tilde}4 and new
+ master{tilde}4 will have all the same files). Use
+ --reference-excluded-parents to instead have the the stream
+ refer to commits in the excluded range of history by their
+ sha1sum. Note that the resulting stream can only be used by a
+ repository which already contains the necessary parent
+ commits.
+
+--show-original-ids::
+ Add an extra directive to the output for commits and blobs,
+ `original-oid <SHA1SUM>`. While such directives will likely be
+ ignored by importers such as git-fast-import, it may be useful
+ for intermediary filters (e.g. for rewriting commit messages
+ which refer to older commits, or for stripping blobs by id).
+
--refspec::
Apply the specified refspec to each ref exported. Multiple of them can
be specified.
@@ -119,7 +138,9 @@ marks the same across runs.
'git rev-list', that specifies the specific objects and references
to export. For example, `master~10..master` causes the
current master reference to be exported along with all objects
- added since its 10th ancestor commit.
+ added since its 10th ancestor commit and (unless the
+ --reference-excluded-parents option is specified) all files
+ common to master{tilde}9 and master{tilde}10.
EXAMPLES
--------
diff --git a/Documentation/git-fast-import.txt b/Documentation/git-fast-import.txt
index e81117d..43ab3b1 100644
--- a/Documentation/git-fast-import.txt
+++ b/Documentation/git-fast-import.txt
@@ -40,9 +40,10 @@ OPTIONS
not contain the old commit).
--quiet::
- Disable all non-fatal output, making fast-import silent when it
- is successful. This option disables the output shown by
- --stats.
+ Disable the output shown by --stats, making fast-import usually
+ be silent when it is successful. However, if the import stream
+ has directives intended to show user output (e.g. `progress`
+ directives), the corresponding messages will still be shown.
--stats::
Display some basic statistics about the objects fast-import has
@@ -384,6 +385,7 @@ change to the project.
....
'commit' SP <ref> LF
mark?
+ original-oid?
('author' (SP <name>)? SP LT <email> GT SP <when> LF)?
'committer' (SP <name>)? SP LT <email> GT SP <when> LF
data
@@ -740,6 +742,19 @@ New marks are created automatically. Existing marks can be moved
to another object simply by reusing the same `<idnum>` in another
`mark` command.
+`original-oid`
+~~~~~~~~~~~~~~
+Provides the name of the object in the original source control system.
+fast-import will simply ignore this directive, but filter processes
+which operate on and modify the stream before feeding to fast-import
+may have uses for this information
+
+....
+ 'original-oid' SP <object-identifier> LF
+....
+
+where `<object-identifer>` is any string not containing LF.
+
`tag`
~~~~~
Creates an annotated tag referring to a specific commit. To create
@@ -748,6 +763,7 @@ lightweight (non-annotated) tags see the `reset` command below.
....
'tag' SP <name> LF
'from' SP <commit-ish> LF
+ original-oid?
'tagger' (SP <name>)? SP LT <email> GT SP <when> LF
data
....
@@ -822,6 +838,7 @@ assigned mark.
....
'blob' LF
mark?
+ original-oid?
data
....
diff --git a/Documentation/git-push.txt b/Documentation/git-push.txt
index a5fc54a..6a8a0d9 100644
--- a/Documentation/git-push.txt
+++ b/Documentation/git-push.txt
@@ -73,6 +73,26 @@ be omitted--such a push will update a ref that `<src>` normally updates
without any `<refspec>` on the command line. Otherwise, missing
`:<dst>` means to update the same ref as the `<src>`.
+
+If <dst> doesn't start with `refs/` (e.g. `refs/heads/master`) we will
+try to infer where in `refs/*` on the destination <repository> it
+belongs based on the the type of <src> being pushed and whether <dst>
+is ambiguous.
++
+--
+* If <dst> unambiguously refers to a ref on the <repository> remote,
+ then push to that ref.
+
+* If <src> resolves to a ref starting with refs/heads/ or refs/tags/,
+ then prepend that to <dst>.
+
+* Other ambiguity resolutions might be added in the future, but for
+ now any other cases will error out with an error indicating what we
+ tried, and depending on the `advice.pushUnqualifiedRefname`
+ configuration (see linkgit:git-config[1]) suggest what refs/
+ namespace you may have wanted to push to.
+
+--
++
The object referenced by <src> is used to update the <dst> reference
on the remote side. Whether this is allowed depends on where in
`refs/*` the <dst> reference lives as described in detail below, in
@@ -591,6 +611,9 @@ the ones in the examples below) can be configured as the default for
`refs/remotes/satellite/master`) in the `mothership` repository;
do the same for `dev` and `satellite/dev`.
+
+See the section describing `<refspec>...` above for a discussion of
+the matching semantics.
++
This is to emulate `git fetch` run on the `mothership` using `git
push` that is run in the opposite direction in order to integrate
the work done on `satellite`, and is often necessary when you can
diff --git a/Documentation/git-rebase.txt b/Documentation/git-rebase.txt
index dff17b3..d284155 100644
--- a/Documentation/git-rebase.txt
+++ b/Documentation/git-rebase.txt
@@ -570,8 +570,9 @@ it to keep commits that started empty.
Directory rename detection
~~~~~~~~~~~~~~~~~~~~~~~~~~
-The merge and interactive backends work fine with
-directory rename detection. The am backend sometimes does not.
+Directory rename heuristics are enabled in the merge and interactive
+backends. Due to the lack of accurate tree information, directory
+rename detection is disabled in the am backend.
include::merge-strategies.txt[]
@@ -979,7 +980,7 @@ when the merge operation did not even start), it is rescheduled immediately.
At this time, the `merge` command will *always* use the `recursive`
merge strategy for regular merges, and `octopus` for octopus merges,
-strategy, with no way to choose a different one. To work around
+with no way to choose a different one. To work around
this, an `exec` command can be used to call `git merge` explicitly,
using the fact that the labels are worktree-local refs (the ref
`refs/rewritten/onto` would correspond to the label `onto`, for example).
diff --git a/Documentation/gitdiffcore.txt b/Documentation/gitdiffcore.txt
index c0a60f3..c970d9f 100644
--- a/Documentation/gitdiffcore.txt
+++ b/Documentation/gitdiffcore.txt
@@ -242,7 +242,8 @@ textual diff has an added or a deleted line that matches the given
regular expression. This means that it will detect in-file (or what
rename-detection considers the same file) moves, which is noise. The
implementation runs diff twice and greps, and this can be quite
-expensive.
+expensive. To speed things up binary files without textconv filters
+will be ignored.
When `-S` or `-G` are used without `--pickaxe-all`, only filepairs
that match their respective criterion are kept in the output. When
diff --git a/Documentation/gitweb.conf.txt b/Documentation/gitweb.conf.txt
index 83b4388..92535db 100644
--- a/Documentation/gitweb.conf.txt
+++ b/Documentation/gitweb.conf.txt
@@ -684,7 +684,7 @@ compressed tar archive) and "zip"; please consult gitweb sources for
a definitive list. By default only "tgz" is offered.
+
This feature can be configured on a per-repository basis via
-repository's `gitweb.blame` configuration variable, which contains
+repository's `gitweb.snapshot` configuration variable, which contains
a comma separated list of formats or "none" to disable snapshots.
Unknown values are ignored.
diff --git a/Documentation/glossary-content.txt b/Documentation/glossary-content.txt
index 0d2aa48..023ca95 100644
--- a/Documentation/glossary-content.txt
+++ b/Documentation/glossary-content.txt
@@ -404,6 +404,8 @@ these forms:
- "`!ATTR`" requires that the attribute `ATTR` be
unspecified.
+
+Note that when matching against a tree object, attributes are still
+obtained from working tree, not from the given tree object.
exclude;;
After a path matches any non-exclude pathspec, it will be run
diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN
index e80102e..0a3ccac 100755
--- a/GIT-VERSION-GEN
+++ b/GIT-VERSION-GEN
@@ -1,7 +1,7 @@
#!/bin/sh
GVF=GIT-VERSION-FILE
-DEF_VER=v2.20.0-rc2
+DEF_VER=v2.20.GIT
LF='
'
diff --git a/RelNotes b/RelNotes
index 8d0b165..31e2135 120000
--- a/RelNotes
+++ b/RelNotes
@@ -1 +1 @@
-Documentation/RelNotes/2.20.0.txt \ No newline at end of file
+Documentation/RelNotes/2.21.0.txt \ No newline at end of file
diff --git a/advice.c b/advice.c
index 5f35656..567209a 100644
--- a/advice.c
+++ b/advice.c
@@ -9,6 +9,7 @@ int advice_push_non_ff_matching = 1;
int advice_push_already_exists = 1;
int advice_push_fetch_first = 1;
int advice_push_needs_force = 1;
+int advice_push_unqualified_ref_name = 1;
int advice_status_hints = 1;
int advice_status_u_option = 1;
int advice_commit_before_merge = 1;
@@ -63,6 +64,7 @@ static struct {
{ "pushAlreadyExists", &advice_push_already_exists },
{ "pushFetchFirst", &advice_push_fetch_first },
{ "pushNeedsForce", &advice_push_needs_force },
+ { "pushUnqualifiedRefName", &advice_push_unqualified_ref_name },
{ "statusHints", &advice_status_hints },
{ "statusUoption", &advice_status_u_option },
{ "commitBeforeMerge", &advice_commit_before_merge },
diff --git a/advice.h b/advice.h
index 696bf0e..f875f8c 100644
--- a/advice.h
+++ b/advice.h
@@ -9,6 +9,7 @@ extern int advice_push_non_ff_matching;
extern int advice_push_already_exists;
extern int advice_push_fetch_first;
extern int advice_push_needs_force;
+extern int advice_push_unqualified_ref_name;
extern int advice_status_hints;
extern int advice_status_u_option;
extern int advice_commit_before_merge;
diff --git a/alias.c b/alias.c
index a7e4e57..c471538 100644
--- a/alias.c
+++ b/alias.c
@@ -47,8 +47,8 @@ void list_aliases(struct string_list *list)
#define SPLIT_CMDLINE_BAD_ENDING 1
#define SPLIT_CMDLINE_UNCLOSED_QUOTE 2
static const char *split_cmdline_errors[] = {
- "cmdline ends with \\",
- "unclosed quote"
+ N_("cmdline ends with \\"),
+ N_("unclosed quote")
};
int split_cmdline(char *cmdline, const char ***argv)
diff --git a/apply.c b/apply.c
index 01793d6..3703bfc 100644
--- a/apply.c
+++ b/apply.c
@@ -3352,7 +3352,8 @@ static int checkout_target(struct index_state *istate,
costate.refresh_cache = 1;
costate.istate = istate;
- if (checkout_entry(ce, &costate, NULL) || lstat(ce->name, st))
+ if (checkout_entry(ce, &costate, NULL, NULL) ||
+ lstat(ce->name, st))
return error(_("cannot checkout %s"), ce->name);
return 0;
}
diff --git a/archive-tar.c b/archive-tar.c
index a58e1a8..4aabd56 100644
--- a/archive-tar.c
+++ b/archive-tar.c
@@ -142,7 +142,7 @@ static int stream_blocked(const struct object_id *oid)
* string and appends it to a struct strbuf.
*/
static void strbuf_append_ext_header(struct strbuf *sb, const char *keyword,
- const char *value, unsigned int valuelen)
+ const char *value, unsigned int valuelen)
{
int len, tmp;
diff --git a/archive.c b/archive.c
index fd556c2..1f98324 100644
--- a/archive.c
+++ b/archive.c
@@ -36,8 +36,8 @@ void init_archivers(void)
}
static void format_subst(const struct commit *commit,
- const char *src, size_t len,
- struct strbuf *buf)
+ const char *src, size_t len,
+ struct strbuf *buf)
{
char *to_free = NULL;
struct strbuf fmt = STRBUF_INIT;
@@ -285,7 +285,8 @@ int write_archive_entries(struct archiver_args *args,
git_attr_set_direction(GIT_ATTR_INDEX);
}
- err = read_tree_recursive(args->tree, "", 0, 0, &args->pathspec,
+ err = read_tree_recursive(args->repo, args->tree, "",
+ 0, 0, &args->pathspec,
queue_or_write_archive_entry,
&context);
if (err == READ_TREE_RECURSIVE)
@@ -346,7 +347,8 @@ static int path_exists(struct archiver_args *args, const char *path)
ctx.args = args;
parse_pathspec(&ctx.pathspec, 0, 0, "", paths);
ctx.pathspec.recursive = 1;
- ret = read_tree_recursive(args->tree, "", 0, 0, &ctx.pathspec,
+ ret = read_tree_recursive(args->repo, args->tree, "",
+ 0, 0, &ctx.pathspec,
reject_entry, &ctx);
clear_pathspec(&ctx.pathspec);
return ret != 0;
@@ -391,12 +393,12 @@ static void parse_treeish_arg(const char **argv,
int refnamelen = colon - name;
if (!dwim_ref(name, refnamelen, &oid, &ref))
- die("no such ref: %.*s", refnamelen, name);
+ die(_("no such ref: %.*s"), refnamelen, name);
free(ref);
}
if (get_oid(name, &oid))
- die("Not a valid object name");
+ die(_("not a valid object name: %s"), name);
commit = lookup_commit_reference_gently(ar_args->repo, &oid, 1);
if (commit) {
@@ -409,7 +411,7 @@ static void parse_treeish_arg(const char **argv,
tree = parse_tree_indirect(&oid);
if (tree == NULL)
- die("not a tree object");
+ die(_("not a tree object: %s"), oid_to_hex(&oid));
if (prefix) {
struct object_id tree_oid;
@@ -419,7 +421,7 @@ static void parse_treeish_arg(const char **argv,
err = get_tree_entry(&tree->object.oid, prefix, &tree_oid,
&mode);
if (err || !S_ISDIR(mode))
- die("current working directory is untracked");
+ die(_("current working directory is untracked"));
tree = parse_tree_indirect(&tree_oid);
}
diff --git a/attr.c b/attr.c
index eaece66..b63fe0f 100644
--- a/attr.c
+++ b/attr.c
@@ -366,8 +366,8 @@ static struct match_attr *parse_attr_line(const char *line, const char *src,
if (strlen(ATTRIBUTE_MACRO_PREFIX) < namelen &&
starts_with(name, ATTRIBUTE_MACRO_PREFIX)) {
if (!macro_ok) {
- fprintf(stderr, "%s not allowed: %s:%d\n",
- name, src, lineno);
+ fprintf_ln(stderr, _("%s not allowed: %s:%d"),
+ name, src, lineno);
goto fail_return;
}
is_macro = 1;
diff --git a/bisect.c b/bisect.c
index 487675c..4c1b80b 100644
--- a/bisect.c
+++ b/bisect.c
@@ -626,14 +626,15 @@ static struct commit_list *managed_skipped(struct commit_list *list,
return skip_away(list, count);
}
-static void bisect_rev_setup(struct rev_info *revs, const char *prefix,
+static void bisect_rev_setup(struct repository *r, struct rev_info *revs,
+ const char *prefix,
const char *bad_format, const char *good_format,
int read_paths)
{
struct argv_array rev_argv = ARGV_ARRAY_INIT;
int i;
- repo_init_revisions(the_repository, revs, prefix);
+ repo_init_revisions(r, revs, prefix);
revs->abbrev = 0;
revs->commit_format = CMIT_FMT_UNSPECIFIED;
@@ -723,23 +724,25 @@ static int bisect_checkout(const struct object_id *bisect_rev, int no_checkout)
return run_command_v_opt(argv_show_branch, RUN_GIT_CMD);
}
-static struct commit *get_commit_reference(const struct object_id *oid)
+static struct commit *get_commit_reference(struct repository *r,
+ const struct object_id *oid)
{
- struct commit *r = lookup_commit_reference(the_repository, oid);
- if (!r)
+ struct commit *c = lookup_commit_reference(r, oid);
+ if (!c)
die(_("Not a valid commit name %s"), oid_to_hex(oid));
- return r;
+ return c;
}
-static struct commit **get_bad_and_good_commits(int *rev_nr)
+static struct commit **get_bad_and_good_commits(struct repository *r,
+ int *rev_nr)
{
struct commit **rev;
int i, n = 0;
ALLOC_ARRAY(rev, 1 + good_revs.nr);
- rev[n++] = get_commit_reference(current_bad_oid);
+ rev[n++] = get_commit_reference(r, current_bad_oid);
for (i = 0; i < good_revs.nr; i++)
- rev[n++] = get_commit_reference(good_revs.oid + i);
+ rev[n++] = get_commit_reference(r, good_revs.oid + i);
*rev_nr = n;
return rev;
@@ -823,12 +826,13 @@ static void check_merge_bases(int rev_nr, struct commit **rev, int no_checkout)
free_commit_list(result);
}
-static int check_ancestors(int rev_nr, struct commit **rev, const char *prefix)
+static int check_ancestors(struct repository *r, int rev_nr,
+ struct commit **rev, const char *prefix)
{
struct rev_info revs;
int res;
- bisect_rev_setup(&revs, prefix, "^%s", "%s", 0);
+ bisect_rev_setup(r, &revs, prefix, "^%s", "%s", 0);
bisect_common(&revs);
res = (revs.commits != NULL);
@@ -847,7 +851,9 @@ static int check_ancestors(int rev_nr, struct commit **rev, const char *prefix)
* If a merge base must be tested by the user, its source code will be
* checked out to be tested by the user and we will exit.
*/
-static void check_good_are_ancestors_of_bad(const char *prefix, int no_checkout)
+static void check_good_are_ancestors_of_bad(struct repository *r,
+ const char *prefix,
+ int no_checkout)
{
char *filename = git_pathdup("BISECT_ANCESTORS_OK");
struct stat st;
@@ -866,8 +872,8 @@ static void check_good_are_ancestors_of_bad(const char *prefix, int no_checkout)
goto done;
/* Check if all good revs are ancestor of the bad rev. */
- rev = get_bad_and_good_commits(&rev_nr);
- if (check_ancestors(rev_nr, rev, prefix))
+ rev = get_bad_and_good_commits(r, &rev_nr);
+ if (check_ancestors(r, rev_nr, rev, prefix))
check_merge_bases(rev_nr, rev, no_checkout);
free(rev);
@@ -885,12 +891,14 @@ static void check_good_are_ancestors_of_bad(const char *prefix, int no_checkout)
/*
* This does "git diff-tree --pretty COMMIT" without one fork+exec.
*/
-static void show_diff_tree(const char *prefix, struct commit *commit)
+static void show_diff_tree(struct repository *r,
+ const char *prefix,
+ struct commit *commit)
{
struct rev_info opt;
/* diff-tree init */
- repo_init_revisions(the_repository, &opt, prefix);
+ repo_init_revisions(r, &opt, prefix);
git_config(git_diff_basic_config, NULL); /* no "diff" UI options */
opt.abbrev = 0;
opt.diff = 1;
@@ -945,7 +953,7 @@ void read_bisect_terms(const char **read_bad, const char **read_good)
* If no_checkout is non-zero, the bisection process does not
* checkout the trial commit but instead simply updates BISECT_HEAD.
*/
-int bisect_next_all(const char *prefix, int no_checkout)
+int bisect_next_all(struct repository *r, const char *prefix, int no_checkout)
{
struct rev_info revs;
struct commit_list *tried;
@@ -957,9 +965,9 @@ int bisect_next_all(const char *prefix, int no_checkout)
if (read_bisect_refs())
die(_("reading bisect refs failed"));
- check_good_are_ancestors_of_bad(prefix, no_checkout);
+ check_good_are_ancestors_of_bad(r, prefix, no_checkout);
- bisect_rev_setup(&revs, prefix, "%s", "^%s", 1);
+ bisect_rev_setup(r, &revs, prefix, "%s", "^%s", 1);
revs.limited = 1;
bisect_common(&revs);
@@ -993,7 +1001,7 @@ int bisect_next_all(const char *prefix, int no_checkout)
exit_if_skipped_commits(tried, current_bad_oid);
printf("%s is the first %s commit\n", oid_to_hex(bisect_rev),
term_bad);
- show_diff_tree(prefix, revs.commits->item);
+ show_diff_tree(r, prefix, revs.commits->item);
/* This means the bisection process succeeded. */
exit(10);
}
diff --git a/bisect.h b/bisect.h
index 34df209..821d16e 100644
--- a/bisect.h
+++ b/bisect.h
@@ -2,6 +2,7 @@
#define BISECT_H
struct commit_list;
+struct repository;
/*
* Find bisection. If something is found, `reaches` will be the number of
@@ -30,7 +31,9 @@ struct rev_list_info {
const char *header_prefix;
};
-extern int bisect_next_all(const char *prefix, int no_checkout);
+extern int bisect_next_all(struct repository *r,
+ const char *prefix,
+ int no_checkout);
extern int estimate_bisect_steps(int all);
diff --git a/blame.c b/blame.c
index d84c937..4386143 100644
--- a/blame.c
+++ b/blame.c
@@ -116,35 +116,38 @@ static void verify_working_tree_path(struct repository *r,
die("no such path '%s' in HEAD", path);
}
-static struct commit_list **append_parent(struct commit_list **tail, const struct object_id *oid)
+static struct commit_list **append_parent(struct repository *r,
+ struct commit_list **tail,
+ const struct object_id *oid)
{
struct commit *parent;
- parent = lookup_commit_reference(the_repository, oid);
+ parent = lookup_commit_reference(r, oid);
if (!parent)
die("no such commit %s", oid_to_hex(oid));
return &commit_list_insert(parent, tail)->next;
}
-static void append_merge_parents(struct commit_list **tail)
+static void append_merge_parents(struct repository *r,
+ struct commit_list **tail)
{
int merge_head;
struct strbuf line = STRBUF_INIT;
- merge_head = open(git_path_merge_head(the_repository), O_RDONLY);
+ merge_head = open(git_path_merge_head(r), O_RDONLY);
if (merge_head < 0) {
if (errno == ENOENT)
return;
die("cannot open '%s' for reading",
- git_path_merge_head(the_repository));
+ git_path_merge_head(r));
}
while (!strbuf_getwholeline_fd(&line, merge_head, '\n')) {
struct object_id oid;
if (line.len < GIT_SHA1_HEXSZ || get_oid_hex(line.buf, &oid))
die("unknown line in '%s': %s",
- git_path_merge_head(the_repository), line.buf);
- tail = append_parent(tail, &oid);
+ git_path_merge_head(r), line.buf);
+ tail = append_parent(r, tail, &oid);
}
close(merge_head);
strbuf_release(&line);
@@ -155,11 +158,13 @@ static void append_merge_parents(struct commit_list **tail)
* want to transfer ownership of the buffer to the commit (so we
* must use detach).
*/
-static void set_commit_buffer_from_strbuf(struct commit *c, struct strbuf *sb)
+static void set_commit_buffer_from_strbuf(struct repository *r,
+ struct commit *c,
+ struct strbuf *sb)
{
size_t len;
void *buf = strbuf_detach(sb, &len);
- set_commit_buffer(the_repository, c, buf, len);
+ set_commit_buffer(r, c, buf, len);
}
/*
@@ -185,7 +190,7 @@ static struct commit *fake_working_tree_commit(struct repository *r,
read_index(r->index);
time(&now);
- commit = alloc_commit_node(the_repository);
+ commit = alloc_commit_node(r);
commit->object.parsed = 1;
commit->date = now;
parent_tail = &commit->parents;
@@ -193,8 +198,8 @@ static struct commit *fake_working_tree_commit(struct repository *r,
if (!resolve_ref_unsafe("HEAD", RESOLVE_REF_READING, &head_oid, NULL))
die("no such ref: HEAD");
- parent_tail = append_parent(parent_tail, &head_oid);
- append_merge_parents(parent_tail);
+ parent_tail = append_parent(r, parent_tail, &head_oid);
+ append_merge_parents(r, parent_tail);
verify_working_tree_path(r, commit, path);
origin = make_origin(commit, path);
@@ -211,7 +216,7 @@ static struct commit *fake_working_tree_commit(struct repository *r,
ident, ident, path,
(!contents_from ? path :
(!strcmp(contents_from, "-") ? "standard input" : contents_from)));
- set_commit_buffer_from_strbuf(commit, &msg);
+ set_commit_buffer_from_strbuf(r, commit, &msg);
if (!contents_from || strcmp("-", contents_from)) {
struct stat st;
@@ -1678,7 +1683,7 @@ static struct commit *find_single_final(struct rev_info *revs,
struct object *obj = revs->pending.objects[i].item;
if (obj->flags & UNINTERESTING)
continue;
- obj = deref_tag(the_repository, obj, NULL, 0);
+ obj = deref_tag(revs->repo, obj, NULL, 0);
if (obj->type != OBJ_COMMIT)
die("Non commit %s?", revs->pending.objects[i].name);
if (found)
@@ -1709,14 +1714,14 @@ static struct commit *dwim_reverse_initial(struct rev_info *revs,
/* Is that sole rev a committish? */
obj = revs->pending.objects[0].item;
- obj = deref_tag(the_repository, obj, NULL, 0);
+ obj = deref_tag(revs->repo, obj, NULL, 0);
if (obj->type != OBJ_COMMIT)
return NULL;
/* Do we have HEAD? */
if (!resolve_ref_unsafe("HEAD", RESOLVE_REF_READING, &head_oid, NULL))
return NULL;
- head_commit = lookup_commit_reference_gently(the_repository,
+ head_commit = lookup_commit_reference_gently(revs->repo,
&head_oid, 1);
if (!head_commit)
return NULL;
@@ -1745,7 +1750,7 @@ static struct commit *find_single_initial(struct rev_info *revs,
struct object *obj = revs->pending.objects[i].item;
if (!(obj->flags & UNINTERESTING))
continue;
- obj = deref_tag(the_repository, obj, NULL, 0);
+ obj = deref_tag(revs->repo, obj, NULL, 0);
if (obj->type != OBJ_COMMIT)
die("Non commit %s?", revs->pending.objects[i].name);
if (found)
diff --git a/branch.c b/branch.c
index 776f55f..28b81a7 100644
--- a/branch.c
+++ b/branch.c
@@ -242,7 +242,8 @@ N_("\n"
"will track its remote counterpart, you may want to use\n"
"\"git push -u\" to set the upstream config as you push.");
-void create_branch(const char *name, const char *start_name,
+void create_branch(struct repository *r,
+ const char *name, const char *start_name,
int force, int clobber_head_ok, int reflog,
int quiet, enum branch_track track)
{
@@ -300,7 +301,7 @@ void create_branch(const char *name, const char *start_name,
break;
}
- if ((commit = lookup_commit_reference(the_repository, &oid)) == NULL)
+ if ((commit = lookup_commit_reference(r, &oid)) == NULL)
die(_("Not a valid branch point: '%s'."), start_name);
oidcpy(&oid, &commit->object.oid);
@@ -336,15 +337,15 @@ void create_branch(const char *name, const char *start_name,
free(real_ref);
}
-void remove_branch_state(void)
+void remove_branch_state(struct repository *r)
{
- unlink(git_path_cherry_pick_head(the_repository));
- unlink(git_path_revert_head(the_repository));
- unlink(git_path_merge_head(the_repository));
- unlink(git_path_merge_rr(the_repository));
- unlink(git_path_merge_msg(the_repository));
- unlink(git_path_merge_mode(the_repository));
- unlink(git_path_squash_msg(the_repository));
+ unlink(git_path_cherry_pick_head(r));
+ unlink(git_path_revert_head(r));
+ unlink(git_path_merge_head(r));
+ unlink(git_path_merge_rr(r));
+ unlink(git_path_merge_msg(r));
+ unlink(git_path_merge_mode(r));
+ unlink(git_path_squash_msg(r));
}
void die_if_checked_out(const char *branch, int ignore_current_worktree)
diff --git a/branch.h b/branch.h
index 5cace45..29c1afa 100644
--- a/branch.h
+++ b/branch.h
@@ -1,6 +1,7 @@
#ifndef BRANCH_H
#define BRANCH_H
+struct repository;
struct strbuf;
enum branch_track {
@@ -19,6 +20,8 @@ extern enum branch_track git_branch_track;
/*
* Creates a new branch, where:
*
+ * - r is the repository to add a branch to
+ *
* - name is the new branch name
*
* - start_name is the name of the existing branch that the new branch should
@@ -37,7 +40,8 @@ extern enum branch_track git_branch_track;
* that start_name is a tracking branch for (if any).
*
*/
-void create_branch(const char *name, const char *start_name,
+void create_branch(struct repository *r,
+ const char *name, const char *start_name,
int force, int clobber_head_ok,
int reflog, int quiet, enum branch_track track);
@@ -60,7 +64,7 @@ extern int validate_new_branchname(const char *name, struct strbuf *ref, int for
* Remove information about the state of working on the current
* branch. (E.g., MERGE_HEAD)
*/
-void remove_branch_state(void);
+void remove_branch_state(struct repository *r);
/*
* Configure local branch "local" as downstream to branch "remote"
diff --git a/builtin/add.c b/builtin/add.c
index f65c172..12247b4 100644
--- a/builtin/add.c
+++ b/builtin/add.c
@@ -176,7 +176,7 @@ static void refresh(int verbose, const struct pathspec *pathspec)
die(_("pathspec '%s' did not match any files"),
pathspec->items[i].match);
}
- free(seen);
+ free(seen);
}
int run_add_interactive(const char *revision, const char *patch_mode,
diff --git a/builtin/am.c b/builtin/am.c
index 8f27f33..9537031 100644
--- a/builtin/am.c
+++ b/builtin/am.c
@@ -1970,7 +1970,7 @@ static int clean_index(const struct object_id *head, const struct object_id *rem
if (merge_tree(remote_tree))
return -1;
- remove_branch_state();
+ remove_branch_state(the_repository);
return 0;
}
@@ -1981,7 +1981,7 @@ static int clean_index(const struct object_id *head, const struct object_id *rem
static void am_rerere_clear(void)
{
struct string_list merge_rr = STRING_LIST_INIT_DUP;
- rerere_clear(&merge_rr);
+ rerere_clear(the_repository, &merge_rr);
string_list_clear(&merge_rr, 1);
}
diff --git a/builtin/bisect--helper.c b/builtin/bisect--helper.c
index 4b5fadc..417d141 100644
--- a/builtin/bisect--helper.c
+++ b/builtin/bisect--helper.c
@@ -137,7 +137,7 @@ int cmd_bisect__helper(int argc, const char **argv, const char *prefix)
switch (cmdmode) {
case NEXT_ALL:
- return bisect_next_all(prefix, no_checkout);
+ return bisect_next_all(the_repository, prefix, no_checkout);
case WRITE_TERMS:
if (argc != 2)
return error(_("--write-terms requires two arguments"));
diff --git a/builtin/blame.c b/builtin/blame.c
index 06a7163..6d798f9 100644
--- a/builtin/blame.c
+++ b/builtin/blame.c
@@ -850,6 +850,8 @@ int cmd_blame(int argc, const char **argv, const char *prefix)
case PARSE_OPT_HELP:
case PARSE_OPT_ERROR:
exit(129);
+ case PARSE_OPT_COMPLETE:
+ exit(0);
case PARSE_OPT_DONE:
if (ctx.argv[0])
dashdash_pos = ctx.cpidx;
diff --git a/builtin/branch.c b/builtin/branch.c
index 0c55f7f..1be7272 100644
--- a/builtin/branch.c
+++ b/builtin/branch.c
@@ -783,7 +783,8 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
* create_branch takes care of setting up the tracking
* info and making sure new_upstream is correct
*/
- create_branch(branch->name, new_upstream, 0, 0, 0, quiet, BRANCH_TRACK_OVERRIDE);
+ create_branch(the_repository, branch->name, new_upstream,
+ 0, 0, 0, quiet, BRANCH_TRACK_OVERRIDE);
} else if (unset_upstream) {
struct branch *branch = branch_get(argv[0]);
struct strbuf buf = STRBUF_INIT;
@@ -814,7 +815,8 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
if (track == BRANCH_TRACK_OVERRIDE)
die(_("the '--set-upstream' option is no longer supported. Please use '--track' or '--set-upstream-to' instead."));
- create_branch(argv[0], (argc == 2) ? argv[1] : head,
+ create_branch(the_repository,
+ argv[0], (argc == 2) ? argv[1] : head,
force, 0, reflog, quiet, track);
} else
diff --git a/builtin/bundle.c b/builtin/bundle.c
index d0de59b..9e9c65d 100644
--- a/builtin/bundle.c
+++ b/builtin/bundle.c
@@ -40,7 +40,7 @@ int cmd_bundle(int argc, const char **argv, const char *prefix)
usage(builtin_bundle_usage);
return 1;
}
- if (verify_bundle(&header, 1))
+ if (verify_bundle(the_repository, &header, 1))
return 1;
fprintf(stderr, _("%s is okay\n"), bundle_file);
return 0;
@@ -56,11 +56,12 @@ int cmd_bundle(int argc, const char **argv, const char *prefix)
}
if (!startup_info->have_repository)
die(_("Need a repository to create a bundle."));
- return !!create_bundle(&header, bundle_file, argc, argv);
+ return !!create_bundle(the_repository, &header,
+ bundle_file, argc, argv);
} else if (!strcmp(cmd, "unbundle")) {
if (!startup_info->have_repository)
die(_("Need a repository to unbundle."));
- return !!unbundle(&header, bundle_fd, 0) ||
+ return !!unbundle(the_repository, &header, bundle_fd, 0) ||
list_bundle_refs(&header, argc, argv);
} else
usage(builtin_bundle_usage);
diff --git a/builtin/checkout-index.c b/builtin/checkout-index.c
index eb74774..a2a726a 100644
--- a/builtin/checkout-index.c
+++ b/builtin/checkout-index.c
@@ -67,7 +67,8 @@ static int checkout_file(const char *name, const char *prefix)
continue;
did_checkout = 1;
if (checkout_entry(ce, &state,
- to_tempfile ? topath[ce_stage(ce)] : NULL) < 0)
+ to_tempfile ? topath[ce_stage(ce)] : NULL,
+ NULL) < 0)
errs++;
}
@@ -111,7 +112,8 @@ static void checkout_all(const char *prefix, int prefix_length)
write_tempfile_record(last_ce->name, prefix);
}
if (checkout_entry(ce, &state,
- to_tempfile ? topath[ce_stage(ce)] : NULL) < 0)
+ to_tempfile ? topath[ce_stage(ce)] : NULL,
+ NULL) < 0)
errs++;
last_ce = ce;
}
diff --git a/builtin/checkout.c b/builtin/checkout.c
index acdafc6..6fadf41 100644
--- a/builtin/checkout.c
+++ b/builtin/checkout.c
@@ -44,6 +44,7 @@ struct checkout_opts {
int ignore_skipworktree;
int ignore_other_worktrees;
int show_progress;
+ int count_checkout_paths;
/*
* If new checkout options are added, skip_merge_working_tree
* should be updated accordingly.
@@ -115,7 +116,8 @@ static int update_some(const struct object_id *oid, struct strbuf *base,
static int read_tree_some(struct tree *tree, const struct pathspec *pathspec)
{
- read_tree_recursive(tree, "", 0, 0, pathspec, update_some, NULL);
+ read_tree_recursive(the_repository, tree, "", 0, 0,
+ pathspec, update_some, NULL);
/* update the index with the given tree's info
* for all args, expanding wildcards, and exit
@@ -165,12 +167,13 @@ 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)
+ const struct checkout *state, int *nr_checkouts)
{
while (pos < active_nr &&
!strcmp(active_cache[pos]->name, ce->name)) {
if (ce_stage(active_cache[pos]) == stage)
- return checkout_entry(active_cache[pos], state, NULL);
+ return checkout_entry(active_cache[pos], state,
+ NULL, nr_checkouts);
pos++;
}
if (stage == 2)
@@ -179,7 +182,7 @@ static int checkout_stage(int stage, const struct cache_entry *ce, int pos,
return error(_("path '%s' does not have their version"), ce->name);
}
-static int checkout_merged(int pos, const struct checkout *state)
+static int checkout_merged(int pos, const struct checkout *state, int *nr_checkouts)
{
struct cache_entry *ce = active_cache[pos];
const char *path = ce->name;
@@ -242,7 +245,7 @@ static int checkout_merged(int pos, const struct checkout *state)
ce = make_transient_cache_entry(mode, &oid, path, 2);
if (!ce)
die(_("make_cache_entry failed for path '%s'"), path);
- status = checkout_entry(ce, state, NULL);
+ status = checkout_entry(ce, state, NULL, nr_checkouts);
discard_cache_entry(ce);
return status;
}
@@ -257,6 +260,7 @@ static int checkout_paths(const struct checkout_opts *opts,
struct commit *head;
int errs = 0;
struct lock_file lock_file = LOCK_INIT;
+ int nr_checkouts = 0;
if (opts->track != BRANCH_TRACK_UNSPECIFIED)
die(_("'%s' cannot be used with updating paths"), "--track");
@@ -371,17 +375,36 @@ static int checkout_paths(const struct checkout_opts *opts,
struct cache_entry *ce = active_cache[pos];
if (ce->ce_flags & CE_MATCHED) {
if (!ce_stage(ce)) {
- errs |= checkout_entry(ce, &state, NULL);
+ errs |= checkout_entry(ce, &state,
+ NULL, &nr_checkouts);
continue;
}
if (opts->writeout_stage)
- errs |= checkout_stage(opts->writeout_stage, ce, pos, &state);
+ errs |= checkout_stage(opts->writeout_stage,
+ ce, pos,
+ &state, &nr_checkouts);
else if (opts->merge)
- errs |= checkout_merged(pos, &state);
+ errs |= checkout_merged(pos, &state,
+ &nr_checkouts);
pos = skip_same_name(ce, pos) - 1;
}
}
- errs |= finish_delayed_checkout(&state);
+ errs |= finish_delayed_checkout(&state, &nr_checkouts);
+
+ if (opts->count_checkout_paths) {
+ if (opts->source_tree)
+ fprintf_ln(stderr, Q_("Checked out %d path out of %s",
+ "Checked out %d paths out of %s",
+ nr_checkouts),
+ nr_checkouts,
+ find_unique_abbrev(&opts->source_tree->object.oid,
+ DEFAULT_ABBREV));
+ else
+ fprintf_ln(stderr, Q_("Checked out %d path out of the index",
+ "Checked out %d paths out of the index",
+ nr_checkouts),
+ nr_checkouts);
+ }
if (write_locked_index(&the_index, &lock_file, COMMIT_LOCK))
die(_("unable to write new index file"));
@@ -753,7 +776,8 @@ static void update_refs_for_switch(const struct checkout_opts *opts,
free(refname);
}
else
- create_branch(opts->new_branch, new_branch_info->name,
+ create_branch(the_repository,
+ opts->new_branch, new_branch_info->name,
opts->new_branch_force ? 1 : 0,
opts->new_branch_force ? 1 : 0,
opts->new_branch_log,
@@ -811,7 +835,7 @@ static void update_refs_for_switch(const struct checkout_opts *opts,
delete_reflog(old_branch_info->path);
}
}
- remove_branch_state();
+ remove_branch_state(the_repository);
strbuf_release(&msg);
if (!opts->quiet &&
(new_branch_info->path || (!opts->force_detach && !strcmp(new_branch_info->name, "HEAD"))))
@@ -1064,6 +1088,7 @@ static int parse_branchname_arg(int argc, const char **argv,
has_dash_dash = 1; /* case (3) or (1) */
else if (dash_dash_pos >= 2)
die(_("only one reference expected, %d given."), dash_dash_pos);
+ opts->count_checkout_paths = !opts->quiet && !has_dash_dash;
if (!strcmp(arg, "-"))
arg = "@{-1}";
@@ -1079,9 +1104,12 @@ static int parse_branchname_arg(int argc, const char **argv,
*/
int recover_with_dwim = dwim_new_local_branch_ok;
- if (!has_dash_dash &&
- (check_filename(opts->prefix, arg) || !no_wildcard(arg)))
+ int could_be_checkout_paths = !has_dash_dash &&
+ check_filename(opts->prefix, arg);
+
+ if (!has_dash_dash && !no_wildcard(arg))
recover_with_dwim = 0;
+
/*
* Accept "git checkout foo" and "git checkout foo --"
* as candidates for dwim.
@@ -1094,6 +1122,10 @@ static int parse_branchname_arg(int argc, const char **argv,
const char *remote = unique_tracking_name(arg, rev,
dwim_remotes_matched);
if (remote) {
+ if (could_be_checkout_paths)
+ die(_("'%s' could be both a local file and a tracking branch.\n"
+ "Please use -- (and optionally --no-guess) to disambiguate"),
+ arg);
*new_branch = arg;
arg = remote;
/* DWIMmed to create local branch, case (3).(b) */
@@ -1228,7 +1260,7 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
struct checkout_opts opts;
struct branch_info new_branch_info;
char *conflict_style = NULL;
- int dwim_new_local_branch = 1;
+ int dwim_new_local_branch, no_dwim_new_local_branch = 0;
int dwim_remotes_matched = 0;
struct option options[] = {
OPT__QUIET(&opts.quiet, N_("suppress progress reporting")),
@@ -1258,8 +1290,8 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
OPT_BOOL('p', "patch", &opts.patch_mode, N_("select hunks interactively")),
OPT_BOOL(0, "ignore-skip-worktree-bits", &opts.ignore_skipworktree,
N_("do not limit pathspecs to sparse entries only")),
- OPT_HIDDEN_BOOL(0, "guess", &dwim_new_local_branch,
- N_("second guess 'git checkout <no-such-branch>'")),
+ OPT_BOOL(0, "no-guess", &no_dwim_new_local_branch,
+ N_("do not second guess 'git checkout <no-such-branch>'")),
OPT_BOOL(0, "ignore-other-worktrees", &opts.ignore_other_worktrees,
N_("do not check if another worktree is holding the given ref")),
{ OPTION_CALLBACK, 0, "recurse-submodules", NULL,
@@ -1282,6 +1314,7 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
argc = parse_options(argc, argv, prefix, options, checkout_usage,
PARSE_OPT_KEEP_DASHDASH);
+ dwim_new_local_branch = !no_dwim_new_local_branch;
if (opts.show_progress < 0) {
if (opts.quiet)
opts.show_progress = 0;
diff --git a/builtin/clone.c b/builtin/clone.c
index 15b142d..7c7f98c 100644
--- a/builtin/clone.c
+++ b/builtin/clone.c
@@ -548,7 +548,7 @@ static struct ref *find_remote_branch(const struct ref *refs, const char *branch
}
static struct ref *wanted_peer_refs(const struct ref *refs,
- struct refspec_item *refspec)
+ struct refspec *refspec)
{
struct ref *head = copy_ref(find_ref_by_name(refs, "HEAD"));
struct ref *local_refs = head;
@@ -569,13 +569,19 @@ static struct ref *wanted_peer_refs(const struct ref *refs,
warning(_("Could not find remote branch %s to clone."),
option_branch);
else {
- get_fetch_map(remote_head, refspec, &tail, 0);
+ int i;
+ for (i = 0; i < refspec->nr; i++)
+ get_fetch_map(remote_head, &refspec->items[i],
+ &tail, 0);
/* if --branch=tag, pull the requested tag explicitly */
get_fetch_map(remote_head, tag_refspec, &tail, 0);
}
- } else
- get_fetch_map(refs, refspec, &tail, 0);
+ } else {
+ int i;
+ for (i = 0; i < refspec->nr; i++)
+ get_fetch_map(refs, &refspec->items[i], &tail, 0);
+ }
if (!option_mirror && !option_single_branch && !option_no_tags)
get_fetch_map(refs, tag_refspec, &tail, 0);
@@ -890,7 +896,8 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
const struct ref *our_head_points_at;
struct ref *mapped_refs;
const struct ref *ref;
- struct strbuf key = STRBUF_INIT, value = STRBUF_INIT;
+ struct strbuf key = STRBUF_INIT;
+ struct strbuf default_refspec = STRBUF_INIT;
struct strbuf branch_top = STRBUF_INIT, reflog_msg = STRBUF_INIT;
struct transport *transport = NULL;
const char *src_ref_prefix = "refs/heads/";
@@ -898,7 +905,6 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
int err = 0, complete_refs_before_fetch = 1;
int submodule_progress;
- struct refspec rs = REFSPEC_INIT_FETCH;
struct argv_array ref_prefixes = ARGV_ARRAY_INIT;
fetch_if_missing = 0;
@@ -1067,7 +1073,6 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
strbuf_addf(&branch_top, "refs/remotes/%s/", option_origin);
}
- strbuf_addf(&value, "+%s*:%s*", src_ref_prefix, branch_top.buf);
strbuf_addf(&key, "remote.%s.url", option_origin);
git_config_set(key.buf, repo);
strbuf_reset(&key);
@@ -1081,11 +1086,12 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
if (option_required_reference.nr || option_optional_reference.nr)
setup_reference();
- refspec_append(&rs, value.buf);
+ remote = remote_get(option_origin);
- strbuf_reset(&value);
+ strbuf_addf(&default_refspec, "+%s*:%s*", src_ref_prefix,
+ branch_top.buf);
+ refspec_append(&remote->fetch, default_refspec.buf);
- remote = remote_get(option_origin);
transport = transport_get(remote, remote->url[0]);
transport_set_verbosity(transport, option_verbosity, option_progress);
transport->family = family;
@@ -1140,7 +1146,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
argv_array_push(&ref_prefixes, "HEAD");
- refspec_ref_prefixes(&rs, &ref_prefixes);
+ refspec_ref_prefixes(&remote->fetch, &ref_prefixes);
if (option_branch)
expand_ref_prefix(&ref_prefixes, option_branch);
if (!option_no_tags)
@@ -1149,7 +1155,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
refs = transport_get_remote_refs(transport, &ref_prefixes);
if (refs) {
- mapped_refs = wanted_peer_refs(refs, &rs.items[0]);
+ mapped_refs = wanted_peer_refs(refs, &remote->fetch);
/*
* transport_get_remote_refs() may return refs with null sha-1
* in mapped_refs (see struct transport->get_refs_list
@@ -1240,10 +1246,9 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
strbuf_release(&reflog_msg);
strbuf_release(&branch_top);
strbuf_release(&key);
- strbuf_release(&value);
+ strbuf_release(&default_refspec);
junk_mode = JUNK_LEAVE_ALL;
- refspec_clear(&rs);
argv_array_clear(&ref_prefixes);
return err;
}
diff --git a/builtin/commit.c b/builtin/commit.c
index c021b11..004b816 100644
--- a/builtin/commit.c
+++ b/builtin/commit.c
@@ -188,7 +188,7 @@ static void determine_whence(struct wt_status *s)
static void status_init_config(struct wt_status *s, config_fn_t fn)
{
- wt_status_prepare(s);
+ wt_status_prepare(the_repository, s);
init_diff_ui_defaults();
git_config(fn, s);
determine_whence(s);
@@ -911,7 +911,8 @@ static int prepare_to_commit(const char *index_file, const char *prefix,
if (ignore_submodule_arg &&
!strcmp(ignore_submodule_arg, "all"))
flags.ignore_submodules = 1;
- committable = index_differs_from(parent, &flags, 1);
+ committable = index_differs_from(the_repository,
+ parent, &flags, 1);
}
}
strbuf_release(&committer_ident);
@@ -1682,7 +1683,8 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
flags |= SUMMARY_INITIAL_COMMIT;
if (author_date_is_interesting())
flags |= SUMMARY_SHOW_AUTHOR_DATE;
- print_commit_summary(prefix, &oid, flags);
+ print_commit_summary(the_repository, prefix,
+ &oid, flags);
}
UNLEAK(err);
diff --git a/builtin/count-objects.c b/builtin/count-objects.c
index a7cad05..3fae474 100644
--- a/builtin/count-objects.c
+++ b/builtin/count-objects.c
@@ -78,10 +78,10 @@ static int count_cruft(const char *basename, const char *path, void *data)
return 0;
}
-static int print_alternate(struct alternate_object_database *alt, void *data)
+static int print_alternate(struct object_directory *odb, void *data)
{
printf("alternate: ");
- quote_c_style(alt->path, NULL, stdout, 0);
+ quote_c_style(odb->path, NULL, stdout, 0);
putchar('\n');
return 0;
}
diff --git a/builtin/difftool.c b/builtin/difftool.c
index 544b0e8..71318c2 100644
--- a/builtin/difftool.c
+++ b/builtin/difftool.c
@@ -323,7 +323,7 @@ static int checkout_path(unsigned mode, struct object_id *oid,
int ret;
ce = make_transient_cache_entry(mode, oid, path, 0);
- ret = checkout_entry(ce, state, NULL);
+ ret = checkout_entry(ce, state, NULL, NULL);
discard_cache_entry(ce);
return ret;
diff --git a/builtin/fast-export.c b/builtin/fast-export.c
index 5790f0d..9e28348 100644
--- a/builtin/fast-export.c
+++ b/builtin/fast-export.c
@@ -31,13 +31,16 @@ static const char *fast_export_usage[] = {
};
static int progress;
-static enum { ABORT, VERBATIM, WARN, WARN_STRIP, STRIP } signed_tag_mode = ABORT;
-static enum { ERROR, DROP, REWRITE } tag_of_filtered_mode = ERROR;
+static enum { SIGNED_TAG_ABORT, VERBATIM, WARN, WARN_STRIP, STRIP } signed_tag_mode = SIGNED_TAG_ABORT;
+static enum { TAG_FILTERING_ABORT, DROP, REWRITE } tag_of_filtered_mode = TAG_FILTERING_ABORT;
static int fake_missing_tagger;
static int use_done_feature;
static int no_data;
static int full_tree;
+static int reference_excluded_commits;
+static int show_original_ids;
static struct string_list extra_refs = STRING_LIST_INIT_NODUP;
+static struct string_list tag_refs = STRING_LIST_INIT_NODUP;
static struct refspec refspecs = REFSPEC_INIT_FETCH;
static int anonymize;
static struct revision_sources revision_sources;
@@ -46,7 +49,7 @@ static int parse_opt_signed_tag_mode(const struct option *opt,
const char *arg, int unset)
{
if (unset || !strcmp(arg, "abort"))
- signed_tag_mode = ABORT;
+ signed_tag_mode = SIGNED_TAG_ABORT;
else if (!strcmp(arg, "verbatim") || !strcmp(arg, "ignore"))
signed_tag_mode = VERBATIM;
else if (!strcmp(arg, "warn"))
@@ -64,7 +67,7 @@ static int parse_opt_tag_of_filtered_mode(const struct option *opt,
const char *arg, int unset)
{
if (unset || !strcmp(arg, "abort"))
- tag_of_filtered_mode = ERROR;
+ tag_of_filtered_mode = TAG_FILTERING_ABORT;
else if (!strcmp(arg, "drop"))
tag_of_filtered_mode = DROP;
else if (!strcmp(arg, "rewrite"))
@@ -187,6 +190,22 @@ static int get_object_mark(struct object *object)
return ptr_to_mark(decoration);
}
+static struct commit *rewrite_commit(struct commit *p)
+{
+ for (;;) {
+ if (p->parents && p->parents->next)
+ break;
+ if (p->object.flags & UNINTERESTING)
+ break;
+ if (!(p->object.flags & TREESAME))
+ break;
+ if (!p->parents)
+ return NULL;
+ p = p->parents->item;
+ }
+ return p;
+}
+
static void show_progress(void)
{
static int counter = 0;
@@ -243,7 +262,7 @@ static void export_blob(const struct object_id *oid)
if (!buf)
die("could not read blob %s", oid_to_hex(oid));
if (check_object_signature(oid, buf, size, type_name(type)) < 0)
- die("sha1 mismatch in blob %s", oid_to_hex(oid));
+ die("oid mismatch in blob %s", oid_to_hex(oid));
object = parse_object_buffer(the_repository, oid, type,
size, buf, &eaten);
}
@@ -253,7 +272,10 @@ static void export_blob(const struct object_id *oid)
mark_next_object(object);
- printf("blob\nmark :%"PRIu32"\ndata %"PRIuMAX"\n", last_idnum, (uintmax_t)size);
+ printf("blob\nmark :%"PRIu32"\n", last_idnum);
+ if (show_original_ids)
+ printf("original-oid %s\n", oid_to_hex(oid));
+ printf("data %"PRIuMAX"\n", (uintmax_t)size);
if (size && fwrite(buf, size, 1, stdout) != 1)
die_errno("could not write blob '%s'", oid_to_hex(oid));
printf("\n");
@@ -330,17 +352,18 @@ static void print_path(const char *path)
static void *generate_fake_oid(const void *old, size_t *len)
{
- static uint32_t counter = 1; /* avoid null sha1 */
- unsigned char *out = xcalloc(GIT_SHA1_RAWSZ, 1);
- put_be32(out + GIT_SHA1_RAWSZ - 4, counter++);
+ static uint32_t counter = 1; /* avoid null oid */
+ const unsigned hashsz = the_hash_algo->rawsz;
+ unsigned char *out = xcalloc(hashsz, 1);
+ put_be32(out + hashsz - 4, counter++);
return out;
}
-static const unsigned char *anonymize_sha1(const struct object_id *oid)
+static const struct object_id *anonymize_oid(const struct object_id *oid)
{
- static struct hashmap sha1s;
- size_t len = GIT_SHA1_RAWSZ;
- return anonymize_mem(&sha1s, generate_fake_oid, oid, &len);
+ static struct hashmap objs;
+ size_t len = the_hash_algo->rawsz;
+ return anonymize_mem(&objs, generate_fake_oid, oid, &len);
}
static void show_filemodify(struct diff_queue_struct *q,
@@ -399,9 +422,9 @@ static void show_filemodify(struct diff_queue_struct *q,
*/
if (no_data || S_ISGITLINK(spec->mode))
printf("M %06o %s ", spec->mode,
- sha1_to_hex(anonymize ?
- anonymize_sha1(&spec->oid) :
- spec->oid.hash));
+ oid_to_hex(anonymize ?
+ anonymize_oid(&spec->oid) :
+ &spec->oid));
else {
struct object *object = lookup_object(the_repository,
spec->oid.hash);
@@ -579,7 +602,8 @@ static void handle_commit(struct commit *commit, struct rev_info *rev,
message += 2;
if (commit->parents &&
- get_object_mark(&commit->parents->item->object) != 0 &&
+ (get_object_mark(&commit->parents->item->object) != 0 ||
+ reference_excluded_commits) &&
!full_tree) {
parse_commit_or_die(commit->parents->item);
diff_tree_oid(get_commit_tree_oid(commit->parents->item),
@@ -595,6 +619,13 @@ static void handle_commit(struct commit *commit, struct rev_info *rev,
export_blob(&diff_queued_diff.queue[i]->two->oid);
refname = *revision_sources_at(&revision_sources, commit);
+ /*
+ * FIXME: string_list_remove() below for each ref is overall
+ * O(N^2). Compared to a history walk and diffing trees, this is
+ * just lost in the noise in practice. However, theoretically a
+ * repo may have enough refs for this to become slow.
+ */
+ string_list_remove(&extra_refs, refname, 0);
if (anonymize) {
refname = anonymize_refname(refname);
anonymize_ident_line(&committer, &committer_end);
@@ -608,8 +639,10 @@ static void handle_commit(struct commit *commit, struct rev_info *rev,
reencoded = reencode_string(message, "UTF-8", encoding);
if (!commit->parents)
printf("reset %s\n", refname);
- printf("commit %s\nmark :%"PRIu32"\n%.*s\n%.*s\ndata %u\n%s",
- refname, last_idnum,
+ printf("commit %s\nmark :%"PRIu32"\n", refname, last_idnum);
+ if (show_original_ids)
+ printf("original-oid %s\n", oid_to_hex(&commit->object.oid));
+ printf("%.*s\n%.*s\ndata %u\n%s",
(int)(author_end - author), author,
(int)(committer_end - committer), committer,
(unsigned)(reencoded
@@ -620,13 +653,21 @@ static void handle_commit(struct commit *commit, struct rev_info *rev,
unuse_commit_buffer(commit, commit_buffer);
for (i = 0, p = commit->parents; p; p = p->next) {
- int mark = get_object_mark(&p->item->object);
- if (!mark)
+ struct object *obj = &p->item->object;
+ int mark = get_object_mark(obj);
+
+ if (!mark && !reference_excluded_commits)
continue;
if (i == 0)
- printf("from :%d\n", mark);
+ printf("from ");
+ else
+ printf("merge ");
+ if (mark)
+ printf(":%d\n", mark);
else
- printf("merge :%d\n", mark);
+ printf("%s\n", oid_to_hex(anonymize ?
+ anonymize_oid(&obj->oid) :
+ &obj->oid));
i++;
}
@@ -727,7 +768,7 @@ static void handle_tag(const char *name, struct tag *tag)
"\n-----BEGIN PGP SIGNATURE-----\n");
if (signature)
switch(signed_tag_mode) {
- case ABORT:
+ case SIGNED_TAG_ABORT:
die("encountered signed tag %s; use "
"--signed-tags=<mode> to handle it",
oid_to_hex(&tag->object.oid));
@@ -752,7 +793,7 @@ static void handle_tag(const char *name, struct tag *tag)
tagged_mark = get_object_mark(tagged);
if (!tagged_mark) {
switch(tag_of_filtered_mode) {
- case ABORT:
+ case TAG_FILTERING_ABORT:
die("tag %s tags unexported object; use "
"--tag-of-filtered-object=<mode> to handle it",
oid_to_hex(&tag->object.oid));
@@ -766,18 +807,12 @@ static void handle_tag(const char *name, struct tag *tag)
oid_to_hex(&tag->object.oid),
type_name(tagged->type));
}
- p = (struct commit *)tagged;
- for (;;) {
- if (p->parents && p->parents->next)
- break;
- if (p->object.flags & UNINTERESTING)
- break;
- if (!(p->object.flags & TREESAME))
- break;
- if (!p->parents)
- die("can't find replacement commit for tag %s",
- oid_to_hex(&tag->object.oid));
- p = p->parents->item;
+ p = rewrite_commit((struct commit *)tagged);
+ if (!p) {
+ printf("reset %s\nfrom %s\n\n",
+ name, oid_to_hex(&null_oid));
+ free(buf);
+ return;
}
tagged_mark = get_object_mark(&p->object);
}
@@ -785,8 +820,10 @@ static void handle_tag(const char *name, struct tag *tag)
if (starts_with(name, "refs/tags/"))
name += 10;
- printf("tag %s\nfrom :%d\n%.*s%sdata %d\n%.*s\n",
- name, tagged_mark,
+ printf("tag %s\nfrom :%d\n", name, tagged_mark);
+ if (show_original_ids)
+ printf("original-oid %s\n", oid_to_hex(&tag->object.oid));
+ printf("%.*s%sdata %d\n%.*s\n",
(int)(tagger_end - tagger), tagger,
tagger == tagger_end ? "" : "\n",
(int)message_size, (int)message_size, message ? message : "");
@@ -804,7 +841,7 @@ static struct commit *get_commit(struct rev_cmdline_entry *e, char *full_name)
/* handle nested tags */
while (tag && tag->object.type == OBJ_TAG) {
parse_object(the_repository, &tag->object.oid);
- string_list_append(&extra_refs, full_name)->util = tag;
+ string_list_append(&tag_refs, full_name)->util = tag;
tag = (struct tag *)tag->tagged;
}
if (!tag)
@@ -863,25 +900,30 @@ static void get_tags_and_duplicates(struct rev_cmdline_info *info)
}
/*
- * This ref will not be updated through a commit, lets make
- * sure it gets properly updated eventually.
+ * Make sure this ref gets properly updated eventually, whether
+ * through a commit or manually at the end.
*/
- if (*revision_sources_at(&revision_sources, commit) ||
- commit->object.flags & SHOWN)
+ if (e->item->type != OBJ_TAG)
string_list_append(&extra_refs, full_name)->util = commit;
+
if (!*revision_sources_at(&revision_sources, commit))
*revision_sources_at(&revision_sources, commit) = full_name;
}
+
+ string_list_sort(&extra_refs);
+ string_list_remove_duplicates(&extra_refs, 0);
}
-static void handle_tags_and_duplicates(void)
+static void handle_tags_and_duplicates(struct string_list *extras)
{
struct commit *commit;
int i;
- for (i = extra_refs.nr - 1; i >= 0; i--) {
- const char *name = extra_refs.items[i].string;
- struct object *object = extra_refs.items[i].util;
+ for (i = extras->nr - 1; i >= 0; i--) {
+ const char *name = extras->items[i].string;
+ struct object *object = extras->items[i].util;
+ int mark;
+
switch (object->type) {
case OBJ_TAG:
handle_tag(name, (struct tag *)object);
@@ -890,9 +932,45 @@ static void handle_tags_and_duplicates(void)
if (anonymize)
name = anonymize_refname(name);
/* create refs pointing to already seen commits */
- commit = (struct commit *)object;
- printf("reset %s\nfrom :%d\n\n", name,
- get_object_mark(&commit->object));
+ commit = rewrite_commit((struct commit *)object);
+ if (!commit) {
+ /*
+ * Neither this object nor any of its
+ * ancestors touch any relevant paths, so
+ * it has been filtered to nothing. Delete
+ * it.
+ */
+ printf("reset %s\nfrom %s\n\n",
+ name, oid_to_hex(&null_oid));
+ continue;
+ }
+
+ mark = get_object_mark(&commit->object);
+ if (!mark) {
+ /*
+ * Getting here means we have a commit which
+ * was excluded by a negative refspec (e.g.
+ * fast-export ^master master). If we are
+ * referencing excluded commits, set the ref
+ * to the exact commit. Otherwise, the user
+ * wants the branch exported but every commit
+ * in its history to be deleted, which basically
+ * just means deletion of the ref.
+ */
+ if (!reference_excluded_commits) {
+ /* delete the ref */
+ printf("reset %s\nfrom %s\n\n",
+ name, oid_to_hex(&null_oid));
+ continue;
+ }
+ /* set ref to commit using oid, not mark */
+ printf("reset %s\nfrom %s\n\n", name,
+ oid_to_hex(&commit->object.oid));
+ continue;
+ }
+
+ printf("reset %s\nfrom :%d\n\n", name, mark
+ );
show_progress();
break;
}
@@ -988,7 +1066,7 @@ static void handle_deletes(void)
continue;
printf("reset %s\nfrom %s\n\n",
- refspec->dst, sha1_to_hex(null_sha1));
+ refspec->dst, oid_to_hex(&null_oid));
}
}
@@ -1024,6 +1102,11 @@ int cmd_fast_export(int argc, const char **argv, const char *prefix)
OPT_STRING_LIST(0, "refspec", &refspecs_list, N_("refspec"),
N_("Apply refspec to exported refs")),
OPT_BOOL(0, "anonymize", &anonymize, N_("anonymize output")),
+ OPT_BOOL(0, "reference-excluded-parents",
+ &reference_excluded_commits, N_("Reference parents which are not in fast-export stream by object id")),
+ OPT_BOOL(0, "show-original-ids", &show_original_ids,
+ N_("Show original object ids of blobs/commits")),
+
OPT_END()
};
@@ -1080,7 +1163,8 @@ int cmd_fast_export(int argc, const char **argv, const char *prefix)
}
}
- handle_tags_and_duplicates();
+ handle_tags_and_duplicates(&extra_refs);
+ handle_tags_and_duplicates(&tag_refs);
handle_deletes();
if (export_filename && lastimportid != last_idnum)
diff --git a/builtin/fsck.c b/builtin/fsck.c
index 3c3e0f0..bf5ddff 100644
--- a/builtin/fsck.c
+++ b/builtin/fsck.c
@@ -51,16 +51,24 @@ static int name_objects;
static const char *describe_object(struct object *obj)
{
- static struct strbuf buf = STRBUF_INIT;
- char *name = name_objects ?
- lookup_decoration(fsck_walk_options.object_names, obj) : NULL;
+ static struct strbuf bufs[] = {
+ STRBUF_INIT, STRBUF_INIT, STRBUF_INIT, STRBUF_INIT
+ };
+ static int b = 0;
+ struct strbuf *buf;
+ char *name = NULL;
- strbuf_reset(&buf);
- strbuf_addstr(&buf, oid_to_hex(&obj->oid));
+ if (name_objects)
+ name = lookup_decoration(fsck_walk_options.object_names, obj);
+
+ buf = bufs + b;
+ b = (b + 1) % ARRAY_SIZE(bufs);
+ strbuf_reset(buf);
+ strbuf_addstr(buf, oid_to_hex(&obj->oid));
if (name)
- strbuf_addf(&buf, " (%s)", name);
+ strbuf_addf(buf, " (%s)", name);
- return buf.buf;
+ return buf->buf;
}
static const char *printable_type(struct object *obj)
@@ -76,7 +84,7 @@ static const char *printable_type(struct object *obj)
ret = type_name(obj->type);
if (!ret)
- ret = "unknown";
+ ret = _("unknown");
return ret;
}
@@ -104,25 +112,32 @@ static int fsck_config(const char *var, const char *value, void *cb)
return git_default_config(var, value, cb);
}
-static void objreport(struct object *obj, const char *msg_type,
- const char *err)
-{
- fprintf(stderr, "%s in %s %s: %s\n",
- msg_type, printable_type(obj), describe_object(obj), err);
-}
-
static int objerror(struct object *obj, const char *err)
{
errors_found |= ERROR_OBJECT;
- objreport(obj, "error", err);
+ /* TRANSLATORS: e.g. error in tree 01bfda: <more explanation> */
+ fprintf_ln(stderr, _("error in %s %s: %s"),
+ printable_type(obj), describe_object(obj), err);
return -1;
}
static int fsck_error_func(struct fsck_options *o,
struct object *obj, int type, const char *message)
{
- objreport(obj, (type == FSCK_WARN) ? "warning" : "error", message);
- return (type == FSCK_WARN) ? 0 : 1;
+ switch (type) {
+ case FSCK_WARN:
+ /* TRANSLATORS: e.g. warning in tree 01bfda: <more explanation> */
+ fprintf_ln(stderr, _("warning in %s %s: %s"),
+ printable_type(obj), describe_object(obj), message);
+ return 0;
+ case FSCK_ERROR:
+ /* TRANSLATORS: e.g. error in tree 01bfda: <more explanation> */
+ fprintf_ln(stderr, _("error in %s %s: %s"),
+ printable_type(obj), describe_object(obj), message);
+ return 1;
+ default:
+ BUG("%d (FSCK_IGNORE?) should never trigger this callback", type);
+ }
}
static struct object_array pending;
@@ -138,17 +153,18 @@ static int mark_object(struct object *obj, int type, void *data, struct fsck_opt
*/
if (!obj) {
/* ... these references to parent->fld are safe here */
- printf("broken link from %7s %s\n",
- printable_type(parent), describe_object(parent));
- printf("broken link from %7s %s\n",
- (type == OBJ_ANY ? "unknown" : type_name(type)), "unknown");
+ printf_ln(_("broken link from %7s %s"),
+ printable_type(parent), describe_object(parent));
+ printf_ln(_("broken link from %7s %s"),
+ (type == OBJ_ANY ? _("unknown") : type_name(type)),
+ _("unknown"));
errors_found |= ERROR_REACHABLE;
return 1;
}
if (type != OBJ_ANY && obj->type != type)
/* ... and the reference to parent is safe here */
- objerror(parent, "wrong object type in link");
+ objerror(parent, _("wrong object type in link"));
if (obj->flags & REACHABLE)
return 0;
@@ -164,10 +180,12 @@ static int mark_object(struct object *obj, int type, void *data, struct fsck_opt
if (!(obj->flags & HAS_OBJ)) {
if (parent && !has_object_file(&obj->oid)) {
- printf("broken link from %7s %s\n",
- printable_type(parent), describe_object(parent));
- printf(" to %7s %s\n",
- printable_type(obj), describe_object(obj));
+ printf_ln(_("broken link from %7s %s\n"
+ " to %7s %s"),
+ printable_type(parent),
+ describe_object(parent),
+ printable_type(obj),
+ describe_object(obj));
errors_found |= ERROR_REACHABLE;
}
return 1;
@@ -231,8 +249,8 @@ static void check_reachable_object(struct object *obj)
return;
if (has_object_pack(&obj->oid))
return; /* it is in pack - forget about it */
- printf("missing %s %s\n", printable_type(obj),
- describe_object(obj));
+ printf_ln(_("missing %s %s"), printable_type(obj),
+ describe_object(obj));
errors_found |= ERROR_REACHABLE;
return;
}
@@ -257,8 +275,8 @@ static void check_unreachable_object(struct object *obj)
* since this is something that is prunable.
*/
if (show_unreachable) {
- printf("unreachable %s %s\n", printable_type(obj),
- describe_object(obj));
+ printf_ln(_("unreachable %s %s"), printable_type(obj),
+ describe_object(obj));
return;
}
@@ -276,8 +294,8 @@ static void check_unreachable_object(struct object *obj)
*/
if (!(obj->flags & USED)) {
if (show_dangling)
- printf("dangling %s %s\n", printable_type(obj),
- describe_object(obj));
+ printf_ln(_("dangling %s %s"), printable_type(obj),
+ describe_object(obj));
if (write_lost_and_found) {
char *filename = git_pathdup("lost-found/%s/%s",
obj->type == OBJ_COMMIT ? "commit" : "other",
@@ -285,18 +303,18 @@ static void check_unreachable_object(struct object *obj)
FILE *f;
if (safe_create_leading_directories_const(filename)) {
- error("Could not create lost-found");
+ error(_("could not create lost-found"));
free(filename);
return;
}
f = xfopen(filename, "w");
if (obj->type == OBJ_BLOB) {
if (stream_blob_to_fd(fileno(f), &obj->oid, NULL, 1))
- die_errno("Could not write '%s'", filename);
+ die_errno(_("could not write '%s'"), filename);
} else
fprintf(f, "%s\n", describe_object(obj));
if (fclose(f))
- die_errno("Could not finish '%s'",
+ die_errno(_("could not finish '%s'"),
filename);
free(filename);
}
@@ -313,7 +331,7 @@ static void check_unreachable_object(struct object *obj)
static void check_object(struct object *obj)
{
if (verbose)
- fprintf(stderr, "Checking %s\n", describe_object(obj));
+ fprintf_ln(stderr, _("Checking %s"), describe_object(obj));
if (obj->flags & REACHABLE)
check_reachable_object(obj);
@@ -331,7 +349,7 @@ static void check_connectivity(void)
/* Look up all the requirements, warn about missing objects.. */
max = get_max_object_index();
if (verbose)
- fprintf(stderr, "Checking connectivity (%d objects)\n", max);
+ fprintf_ln(stderr, _("Checking connectivity (%d objects)"), max);
for (i = 0; i < max; i++) {
struct object *obj = get_indexed_object(i);
@@ -350,11 +368,11 @@ static int fsck_obj(struct object *obj, void *buffer, unsigned long size)
obj->flags |= SEEN;
if (verbose)
- fprintf(stderr, "Checking %s %s\n",
- printable_type(obj), describe_object(obj));
+ fprintf_ln(stderr, _("Checking %s %s"),
+ printable_type(obj), describe_object(obj));
if (fsck_walk(obj, NULL, &fsck_obj_options))
- objerror(obj, "broken links");
+ objerror(obj, _("broken links"));
err = fsck_object(obj, buffer, size, &fsck_obj_options);
if (err)
goto out;
@@ -363,17 +381,19 @@ static int fsck_obj(struct object *obj, void *buffer, unsigned long size)
struct commit *commit = (struct commit *) obj;
if (!commit->parents && show_root)
- printf("root %s\n", describe_object(&commit->object));
+ printf_ln(_("root %s"),
+ describe_object(&commit->object));
}
if (obj->type == OBJ_TAG) {
struct tag *tag = (struct tag *) obj;
if (show_tags && tag->tagged) {
- printf("tagged %s %s", printable_type(tag->tagged),
- describe_object(tag->tagged));
- printf(" (%s) in %s\n", tag->tag,
- describe_object(&tag->object));
+ printf_ln(_("tagged %s %s (%s) in %s"),
+ printable_type(tag->tagged),
+ describe_object(tag->tagged),
+ tag->tag,
+ describe_object(&tag->object));
}
}
@@ -397,7 +417,8 @@ static int fsck_obj_buffer(const struct object_id *oid, enum object_type type,
eaten);
if (!obj) {
errors_found |= ERROR_OBJECT;
- return error("%s: object corrupt or missing", oid_to_hex(oid));
+ return error(_("%s: object corrupt or missing"),
+ oid_to_hex(oid));
}
obj->flags &= ~(REACHABLE | SEEN);
obj->flags |= HAS_OBJ;
@@ -421,7 +442,8 @@ static void fsck_handle_reflog_oid(const char *refname, struct object_id *oid,
obj->flags |= USED;
mark_object_reachable(obj);
} else if (!is_promisor_object(oid)) {
- error("%s: invalid reflog entry %s", refname, oid_to_hex(oid));
+ error(_("%s: invalid reflog entry %s"),
+ refname, oid_to_hex(oid));
errors_found |= ERROR_REACHABLE;
}
}
@@ -434,8 +456,8 @@ static int fsck_handle_reflog_ent(struct object_id *ooid, struct object_id *noid
const char *refname = cb_data;
if (verbose)
- fprintf(stderr, "Checking reflog %s->%s\n",
- oid_to_hex(ooid), oid_to_hex(noid));
+ fprintf_ln(stderr, _("Checking reflog %s->%s"),
+ oid_to_hex(ooid), oid_to_hex(noid));
fsck_handle_reflog_oid(refname, ooid, 0);
fsck_handle_reflog_oid(refname, noid, timestamp);
@@ -468,13 +490,14 @@ static int fsck_handle_ref(const char *refname, const struct object_id *oid,
default_refs++;
return 0;
}
- error("%s: invalid sha1 pointer %s", refname, oid_to_hex(oid));
+ error(_("%s: invalid sha1 pointer %s"),
+ refname, oid_to_hex(oid));
errors_found |= ERROR_REACHABLE;
/* We'll continue with the rest despite the error.. */
return 0;
}
if (obj->type != OBJ_COMMIT && is_branch(refname)) {
- error("%s: not a commit", refname);
+ error(_("%s: not a commit"), refname);
errors_found |= ERROR_REFS;
}
default_refs++;
@@ -529,7 +552,7 @@ static void get_default_heads(void)
* "show_unreachable" flag.
*/
if (!default_refs) {
- fprintf(stderr, "notice: No default references\n");
+ fprintf_ln(stderr, _("notice: No default references"));
show_unreachable = 0;
}
}
@@ -544,7 +567,7 @@ static int fsck_loose(const struct object_id *oid, const char *path, void *data)
if (read_loose_object(path, oid, &type, &size, &contents) < 0) {
errors_found |= ERROR_OBJECT;
- error("%s: object corrupt or missing: %s",
+ error(_("%s: object corrupt or missing: %s"),
oid_to_hex(oid), path);
return 0; /* keep checking other objects */
}
@@ -557,7 +580,7 @@ static int fsck_loose(const struct object_id *oid, const char *path, void *data)
if (!obj) {
errors_found |= ERROR_OBJECT;
- error("%s: object could not be parsed: %s",
+ error(_("%s: object could not be parsed: %s"),
oid_to_hex(oid), path);
if (!eaten)
free(contents);
@@ -577,7 +600,7 @@ static int fsck_loose(const struct object_id *oid, const char *path, void *data)
static int fsck_cruft(const char *basename, const char *path, void *data)
{
if (!starts_with(basename, "tmp_obj_"))
- fprintf(stderr, "bad sha1 file: %s\n", path);
+ fprintf_ln(stderr, _("bad sha1 file: %s"), path);
return 0;
}
@@ -592,7 +615,7 @@ static void fsck_object_dir(const char *path)
struct progress *progress = NULL;
if (verbose)
- fprintf(stderr, "Checking object directory\n");
+ fprintf_ln(stderr, _("Checking object directory"));
if (show_progress)
progress = start_progress(_("Checking object directories"), 256);
@@ -610,29 +633,30 @@ static int fsck_head_link(const char *head_ref_name,
int null_is_error = 0;
if (verbose)
- fprintf(stderr, "Checking %s link\n", head_ref_name);
+ fprintf_ln(stderr, _("Checking %s link"), head_ref_name);
*head_points_at = resolve_ref_unsafe(head_ref_name, 0, head_oid, NULL);
if (!*head_points_at) {
errors_found |= ERROR_REFS;
- return error("Invalid %s", head_ref_name);
+ return error(_("invalid %s"), head_ref_name);
}
if (!strcmp(*head_points_at, head_ref_name))
/* detached HEAD */
null_is_error = 1;
else if (!starts_with(*head_points_at, "refs/heads/")) {
errors_found |= ERROR_REFS;
- return error("%s points to something strange (%s)",
+ return error(_("%s points to something strange (%s)"),
head_ref_name, *head_points_at);
}
if (is_null_oid(head_oid)) {
if (null_is_error) {
errors_found |= ERROR_REFS;
- return error("%s: detached HEAD points at nothing",
+ return error(_("%s: detached HEAD points at nothing"),
head_ref_name);
}
- fprintf(stderr, "notice: %s points to an unborn branch (%s)\n",
- head_ref_name, *head_points_at + 11);
+ fprintf_ln(stderr,
+ _("notice: %s points to an unborn branch (%s)"),
+ head_ref_name, *head_points_at + 11);
}
return 0;
}
@@ -643,12 +667,12 @@ static int fsck_cache_tree(struct cache_tree *it)
int err = 0;
if (verbose)
- fprintf(stderr, "Checking cache tree\n");
+ fprintf_ln(stderr, _("Checking cache tree"));
if (0 <= it->entry_count) {
struct object *obj = parse_object(the_repository, &it->oid);
if (!obj) {
- error("%s: invalid sha1 pointer in cache-tree",
+ error(_("%s: invalid sha1 pointer in cache-tree"),
oid_to_hex(&it->oid));
errors_found |= ERROR_REFS;
return 1;
@@ -659,7 +683,7 @@ static int fsck_cache_tree(struct cache_tree *it)
obj, xstrdup(":"));
mark_object_reachable(obj);
if (obj->type != OBJ_TREE)
- err |= objerror(obj, "non-tree in cache-tree");
+ err |= objerror(obj, _("non-tree in cache-tree"));
}
for (i = 0; i < it->subtree_nr; i++)
err |= fsck_cache_tree(it->down[i]->cache_tree);
@@ -715,7 +739,7 @@ static struct option fsck_opts[] = {
int cmd_fsck(int argc, const char **argv, const char *prefix)
{
int i;
- struct alternate_object_database *alt;
+ struct object_directory *odb;
/* fsck knows how to handle missing promisor objects */
fetch_if_missing = 0;
@@ -751,14 +775,9 @@ int cmd_fsck(int argc, const char **argv, const char *prefix)
for_each_loose_object(mark_loose_for_connectivity, NULL, 0);
for_each_packed_object(mark_packed_for_connectivity, NULL, 0);
} else {
- struct alternate_object_database *alt_odb_list;
-
- fsck_object_dir(get_object_directory());
-
prepare_alt_odb(the_repository);
- alt_odb_list = the_repository->objects->alt_odb_list;
- for (alt = alt_odb_list; alt; alt = alt->next)
- fsck_object_dir(alt->path);
+ for (odb = the_repository->objects->odb; odb; odb = odb->next)
+ fsck_object_dir(odb->path);
if (check_full) {
struct packed_git *p;
@@ -778,7 +797,8 @@ int cmd_fsck(int argc, const char **argv, const char *prefix)
for (p = get_all_packs(the_repository); p;
p = p->next) {
/* verify gives error messages itself */
- if (verify_pack(p, fsck_obj_buffer,
+ if (verify_pack(the_repository,
+ p, fsck_obj_buffer,
progress, count))
errors_found |= ERROR_PACK;
count += p->num_objects;
@@ -800,7 +820,7 @@ int cmd_fsck(int argc, const char **argv, const char *prefix)
if (!obj || !(obj->flags & HAS_OBJ)) {
if (is_promisor_object(&oid))
continue;
- error("%s: object missing", oid_to_hex(&oid));
+ error(_("%s: object missing"), oid_to_hex(&oid));
errors_found |= ERROR_OBJECT;
continue;
}
@@ -812,7 +832,7 @@ int cmd_fsck(int argc, const char **argv, const char *prefix)
mark_object_reachable(obj);
continue;
}
- error("invalid parameter: expected sha1, got '%s'", arg);
+ error(_("invalid parameter: expected sha1, got '%s'"), arg);
errors_found |= ERROR_OBJECT;
}
@@ -860,15 +880,13 @@ int cmd_fsck(int argc, const char **argv, const char *prefix)
struct child_process commit_graph_verify = CHILD_PROCESS_INIT;
const char *verify_argv[] = { "commit-graph", "verify", NULL, NULL, NULL };
- commit_graph_verify.argv = verify_argv;
- commit_graph_verify.git_cmd = 1;
- if (run_command(&commit_graph_verify))
- errors_found |= ERROR_COMMIT_GRAPH;
-
prepare_alt_odb(the_repository);
- for (alt = the_repository->objects->alt_odb_list; alt; alt = alt->next) {
+ for (odb = the_repository->objects->odb; odb; odb = odb->next) {
+ child_process_init(&commit_graph_verify);
+ commit_graph_verify.argv = verify_argv;
+ commit_graph_verify.git_cmd = 1;
verify_argv[2] = "--object-dir";
- verify_argv[3] = alt->path;
+ verify_argv[3] = odb->path;
if (run_command(&commit_graph_verify))
errors_found |= ERROR_COMMIT_GRAPH;
}
@@ -878,15 +896,13 @@ int cmd_fsck(int argc, const char **argv, const char *prefix)
struct child_process midx_verify = CHILD_PROCESS_INIT;
const char *midx_argv[] = { "multi-pack-index", "verify", NULL, NULL, NULL };
- midx_verify.argv = midx_argv;
- midx_verify.git_cmd = 1;
- if (run_command(&midx_verify))
- errors_found |= ERROR_COMMIT_GRAPH;
-
prepare_alt_odb(the_repository);
- for (alt = the_repository->objects->alt_odb_list; alt; alt = alt->next) {
+ for (odb = the_repository->objects->odb; odb; odb = odb->next) {
+ child_process_init(&midx_verify);
+ midx_verify.argv = midx_argv;
+ midx_verify.git_cmd = 1;
midx_argv[2] = "--object-dir";
- midx_argv[3] = alt->path;
+ midx_argv[3] = odb->path;
if (run_command(&midx_verify))
errors_found |= ERROR_COMMIT_GRAPH;
}
diff --git a/builtin/gc.c b/builtin/gc.c
index 871a56f..7696017 100644
--- a/builtin/gc.c
+++ b/builtin/gc.c
@@ -317,7 +317,7 @@ static void add_repack_all_option(struct string_list *keep_pack)
static void add_repack_incremental_option(void)
{
- argv_array_push(&repack, "--no-write-bitmap-index");
+ argv_array_push(&repack, "--no-write-bitmap-index");
}
static int need_to_gc(void)
diff --git a/builtin/grep.c b/builtin/grep.c
index 71df52a..4748195 100644
--- a/builtin/grep.c
+++ b/builtin/grep.c
@@ -437,7 +437,7 @@ static int grep_submodule(struct grep_opt *opt, struct repository *superproject,
* store is no longer global and instead is a member of the repository
* object.
*/
- add_to_alternates_memory(submodule.objects->objectdir);
+ add_to_alternates_memory(submodule.objects->odb->path);
grep_read_unlock();
if (oid) {
@@ -553,7 +553,8 @@ static int grep_tree(struct grep_opt *opt, const struct pathspec *pathspec,
if (match != all_entries_interesting) {
strbuf_addstr(&name, base->buf + tn_len);
- match = tree_entry_interesting(&entry, &name,
+ match = tree_entry_interesting(repo->index,
+ &entry, &name,
0, pathspec);
strbuf_setlen(&name, name_base_len);
diff --git a/builtin/log.c b/builtin/log.c
index e8e5106..3e145fe 100644
--- a/builtin/log.c
+++ b/builtin/log.c
@@ -641,8 +641,9 @@ int cmd_show(int argc, const char **argv, const char *prefix)
diff_get_color_opt(&rev.diffopt, DIFF_COMMIT),
name,
diff_get_color_opt(&rev.diffopt, DIFF_RESET));
- read_tree_recursive((struct tree *)o, "", 0, 0, &match_all,
- show_tree_object, rev.diffopt.file);
+ read_tree_recursive(the_repository, (struct tree *)o, "",
+ 0, 0, &match_all, show_tree_object,
+ rev.diffopt.file);
rev.shown_one = 1;
break;
case OBJ_COMMIT:
diff --git a/builtin/ls-files.c b/builtin/ls-files.c
index c70a9c7..7e0dcaa 100644
--- a/builtin/ls-files.c
+++ b/builtin/ls-files.c
@@ -441,7 +441,7 @@ void overlay_tree_on_index(struct index_state *istate,
PATHSPEC_PREFER_CWD, prefix, matchbuf);
} else
memset(&pathspec, 0, sizeof(pathspec));
- if (read_tree(tree, 1, &pathspec, istate))
+ if (read_tree(the_repository, tree, 1, &pathspec, istate))
die("unable to read tree entries %s", tree_name);
for (i = 0; i < istate->cache_nr; i++) {
diff --git a/builtin/ls-tree.c b/builtin/ls-tree.c
index 7d581d6..7cad3f2 100644
--- a/builtin/ls-tree.c
+++ b/builtin/ls-tree.c
@@ -185,5 +185,6 @@ int cmd_ls_tree(int argc, const char **argv, const char *prefix)
tree = parse_tree_indirect(&oid);
if (!tree)
die("not a tree object");
- return !!read_tree_recursive(tree, "", 0, 0, &pathspec, show_tree, NULL);
+ return !!read_tree_recursive(the_repository, tree, "", 0, 0,
+ &pathspec, show_tree, NULL);
}
diff --git a/builtin/merge-ours.c b/builtin/merge-ours.c
index c84c6e0..0b07263 100644
--- a/builtin/merge-ours.c
+++ b/builtin/merge-ours.c
@@ -26,7 +26,7 @@ int cmd_merge_ours(int argc, const char **argv, const char *prefix)
*/
if (read_cache() < 0)
die_errno("read_cache failed");
- if (index_differs_from("HEAD", NULL, 0))
+ if (index_differs_from(the_repository, "HEAD", NULL, 0))
exit(2);
exit(0);
}
diff --git a/builtin/merge-tree.c b/builtin/merge-tree.c
index 70f6fc9..4984b7e 100644
--- a/builtin/merge-tree.c
+++ b/builtin/merge-tree.c
@@ -346,7 +346,7 @@ static void merge_trees(struct tree_desc t[3], const char *base)
setup_traverse_info(&info, base);
info.fn = threeway_callback;
- traverse_trees(3, t, &info);
+ traverse_trees(&the_index, 3, t, &info);
}
static void *get_tree_descriptor(struct tree_desc *desc, const char *rev)
diff --git a/builtin/merge.c b/builtin/merge.c
index c3c976d..dc0b7cc 100644
--- a/builtin/merge.c
+++ b/builtin/merge.c
@@ -128,7 +128,7 @@ static int option_read_message(struct parse_opt_ctx_t *ctx,
ctx->argc--;
arg = *++ctx->argv;
} else
- return opterror(opt, "requires a value", 0);
+ return error(_("option `%s' requires a value"), opt->long_name);
if (buf->len)
strbuf_addch(buf, '\n');
@@ -578,7 +578,7 @@ static void parse_branch_merge_options(char *bmo)
argc = split_cmdline(bmo, &argv);
if (argc < 0)
die(_("Bad branch.%s.mergeoptions string: %s"), branch,
- split_cmdline_strerror(argc));
+ _(split_cmdline_strerror(argc)));
REALLOC_ARRAY(argv, argc + 2);
MOVE_ARRAY(argv + 1, argv, argc + 1);
argc++;
@@ -897,7 +897,7 @@ static int suggest_conflicts(void)
filename = git_path_merge_msg(the_repository);
fp = xfopen(filename, "a");
- append_conflicts_hint(&msgbuf);
+ append_conflicts_hint(&the_index, &msgbuf);
fputs(msgbuf.buf, fp);
strbuf_release(&msgbuf);
fclose(fp);
diff --git a/builtin/notes.c b/builtin/notes.c
index c78b7a0..4996a67 100644
--- a/builtin/notes.c
+++ b/builtin/notes.c
@@ -813,7 +813,7 @@ static int merge(int argc, const char **argv, const char *prefix)
usage_with_options(git_notes_merge_usage, options);
}
- init_notes_merge_options(&o);
+ init_notes_merge_options(the_repository, &o);
o.verbosity = verbosity + NOTES_MERGE_VERBOSITY_DEFAULT;
if (do_abort)
diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c
index 411aefd..889df2c 100644
--- a/builtin/pack-objects.c
+++ b/builtin/pack-objects.c
@@ -2610,7 +2610,7 @@ static void prepare_pack(int window, int depth)
unsigned n;
if (use_delta_islands)
- resolve_tree_islands(progress, &to_pack);
+ resolve_tree_islands(the_repository, progress, &to_pack);
get_object_details();
@@ -3084,14 +3084,16 @@ static void record_recent_commit(struct commit *commit, void *data)
static void get_object_list(int ac, const char **av)
{
struct rev_info revs;
+ struct setup_revision_opt s_r_opt = {
+ .allow_exclude_promisor_objects = 1,
+ };
char line[1000];
int flags = 0;
int save_warning;
repo_init_revisions(the_repository, &revs, NULL);
save_commit_buffer = 0;
- revs.allow_exclude_promisor_objects_opt = 1;
- setup_revisions(ac, av, &revs, NULL);
+ setup_revisions(ac, av, &revs, &s_r_opt);
/* make sure shallows are read */
is_repository_shallow(the_repository);
@@ -3131,7 +3133,7 @@ static void get_object_list(int ac, const char **av)
return;
if (use_delta_islands)
- load_delta_islands();
+ load_delta_islands(the_repository);
if (prepare_revision_walk(&revs))
die(_("revision walk setup failed"));
@@ -3470,7 +3472,7 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix)
}
}
- prepare_packing_data(&to_pack);
+ prepare_packing_data(the_repository, &to_pack);
if (progress)
progress_state = start_progress(_("Enumerating objects"), 0);
diff --git a/builtin/prune.c b/builtin/prune.c
index e42653b..1ec9ddd 100644
--- a/builtin/prune.c
+++ b/builtin/prune.c
@@ -120,7 +120,6 @@ int cmd_prune(int argc, const char **argv, const char *prefix)
save_commit_buffer = 0;
read_replace_refs = 0;
ref_paranoia = 1;
- revs.allow_exclude_promisor_objects_opt = 1;
repo_init_revisions(the_repository, &revs, prefix);
argc = parse_options(argc, argv, prefix, options, prune_usage, 0);
diff --git a/builtin/pull.c b/builtin/pull.c
index 1b90622..74808b9 100644
--- a/builtin/pull.c
+++ b/builtin/pull.c
@@ -899,7 +899,8 @@ int cmd_pull(int argc, const char **argv, const char *prefix)
die(_("Updating an unborn branch with changes added to the index."));
if (!autostash)
- require_clean_work_tree(N_("pull with rebase"),
+ require_clean_work_tree(the_repository,
+ N_("pull with rebase"),
_("please commit or stash them."), 1, 0);
if (get_rebase_fork_point(&rebase_fork_point, repo, *refspecs))
diff --git a/builtin/push.c b/builtin/push.c
index 8bb8a08..ee1e842 100644
--- a/builtin/push.c
+++ b/builtin/push.c
@@ -355,7 +355,8 @@ static int push_with_options(struct transport *transport, struct refspec *rs,
if (verbosity > 0)
fprintf(stderr, _("Pushing to %s\n"), transport->url);
- err = transport_push(transport, rs, flags, &reject_reasons);
+ err = transport_push(the_repository, transport,
+ rs, flags, &reject_reasons);
if (err != 0) {
fprintf(stderr, "%s", push_get_color(PUSH_COLOR_ERROR));
error(_("failed to push some refs to '%s'"), transport->url);
diff --git a/builtin/read-tree.c b/builtin/read-tree.c
index 183ee8c..ac255ad 100644
--- a/builtin/read-tree.c
+++ b/builtin/read-tree.c
@@ -258,7 +258,9 @@ int cmd_read_tree(int argc, const char **argv, const char *unused_prefix)
* what came from the tree.
*/
if (nr_trees == 1 && !opts.prefix)
- prime_cache_tree(&the_index, trees[0]);
+ prime_cache_tree(the_repository,
+ the_repository->index,
+ trees[0]);
if (write_locked_index(&the_index, &lock_file, COMMIT_LOCK))
die("unable to write new index file");
diff --git a/builtin/rebase--interactive.c b/builtin/rebase--interactive.c
index a2ab68e..dd2a55a 100644
--- a/builtin/rebase--interactive.c
+++ b/builtin/rebase--interactive.c
@@ -105,7 +105,7 @@ static int do_interactive_rebase(struct replay_opts *opts, unsigned flags,
if (restrict_revision)
argv_array_push(&make_script_args, restrict_revision);
- ret = sequencer_make_script(todo_list,
+ ret = sequencer_make_script(the_repository, todo_list,
make_script_args.argc, make_script_args.argv,
flags);
fclose(todo_list);
@@ -114,7 +114,8 @@ static int do_interactive_rebase(struct replay_opts *opts, unsigned flags,
error(_("could not generate todo list"));
else {
discard_cache();
- ret = complete_action(opts, flags, shortrevisions, onto_name, onto,
+ ret = complete_action(the_repository, opts, flags,
+ shortrevisions, onto_name, onto,
head_hash, cmd, autosquash);
}
@@ -232,14 +233,14 @@ int cmd_rebase__interactive(int argc, const char **argv, const char *prefix)
case SKIP: {
struct string_list merge_rr = STRING_LIST_INIT_DUP;
- rerere_clear(&merge_rr);
+ rerere_clear(the_repository, &merge_rr);
/* fallthrough */
case CONTINUE:
- ret = sequencer_continue(&opts);
+ ret = sequencer_continue(the_repository, &opts);
break;
}
case EDIT_TODO:
- ret = edit_todo_list(flags);
+ ret = edit_todo_list(the_repository, flags);
break;
case SHOW_CURRENT_PATCH: {
struct child_process cmd = CHILD_PROCESS_INIT;
@@ -252,16 +253,16 @@ int cmd_rebase__interactive(int argc, const char **argv, const char *prefix)
}
case SHORTEN_OIDS:
case EXPAND_OIDS:
- ret = transform_todos(flags);
+ ret = transform_todos(the_repository, flags);
break;
case CHECK_TODO_LIST:
- ret = check_todo_list();
+ ret = check_todo_list(the_repository);
break;
case REARRANGE_SQUASH:
- ret = rearrange_squash();
+ ret = rearrange_squash(the_repository);
break;
case ADD_EXEC:
- ret = sequencer_add_exec_commands(cmd);
+ ret = sequencer_add_exec_commands(the_repository, cmd);
break;
default:
BUG("invalid command '%d'", command);
diff --git a/builtin/rebase.c b/builtin/rebase.c
index b5c99ec..00de703 100644
--- a/builtin/rebase.c
+++ b/builtin/rebase.c
@@ -598,7 +598,7 @@ static int reset_head(struct object_id *oid, const char *action,
}
tree = parse_tree_indirect(oid);
- prime_cache_tree(the_repository->index, tree);
+ prime_cache_tree(the_repository, the_repository->index, tree);
if (write_locked_index(the_repository->index, &lock, COMMIT_LOCK) < 0) {
ret = error(_("could not write index"));
@@ -1024,7 +1024,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
&lock_file);
rollback_lock_file(&lock_file);
- if (has_unstaged_changes(1)) {
+ if (has_unstaged_changes(the_repository, 1)) {
puts(_("You must edit all merge conflicts and then\n"
"mark them as resolved using git add"));
exit(1);
@@ -1039,13 +1039,13 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
options.action = "skip";
set_reflog_action(&options);
- rerere_clear(&merge_rr);
+ rerere_clear(the_repository, &merge_rr);
string_list_clear(&merge_rr, 1);
if (reset_head(NULL, "reset", NULL, RESET_HEAD_HARD,
NULL, NULL) < 0)
die(_("could not discard worktree changes"));
- remove_branch_state();
+ remove_branch_state(the_repository);
if (read_basic_state(&options))
exit(1);
goto run_rebase;
@@ -1055,7 +1055,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
options.action = "abort";
set_reflog_action(&options);
- rerere_clear(&merge_rr);
+ rerere_clear(the_repository, &merge_rr);
string_list_clear(&merge_rr, 1);
if (read_basic_state(&options))
@@ -1065,7 +1065,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
NULL, NULL) < 0)
die(_("could not move back to %s"),
oid_to_hex(&options.orig_head));
- remove_branch_state();
+ remove_branch_state(the_repository);
ret = finish_rebase(&options);
goto cleanup;
}
@@ -1381,7 +1381,8 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
update_index_if_able(&the_index, &lock_file);
rollback_lock_file(&lock_file);
- if (has_unstaged_changes(1) || has_uncommitted_changes(1)) {
+ if (has_unstaged_changes(the_repository, 1) ||
+ has_uncommitted_changes(the_repository, 1)) {
const char *autostash =
state_dir_path("autostash", &options);
struct child_process stash = CHILD_PROCESS_INIT;
@@ -1427,7 +1428,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix)
}
}
- if (require_clean_work_tree("rebase",
+ if (require_clean_work_tree(the_repository, "rebase",
_("Please commit or stash them."), 1, 1)) {
ret = 1;
goto cleanup;
diff --git a/builtin/reflog.c b/builtin/reflog.c
index 7a85e4b..64a8df4 100644
--- a/builtin/reflog.c
+++ b/builtin/reflog.c
@@ -14,11 +14,15 @@
/* NEEDSWORK: switch to using parse_options */
static const char reflog_expire_usage[] =
-"git reflog expire [--expire=<time>] [--expire-unreachable=<time>] [--rewrite] [--updateref] [--stale-fix] [--dry-run | -n] [--verbose] [--all] <refs>...";
+N_("git reflog expire [--expire=<time>] "
+ "[--expire-unreachable=<time>] "
+ "[--rewrite] [--updateref] [--stale-fix] [--dry-run | -n] "
+ "[--verbose] [--all] <refs>...");
static const char reflog_delete_usage[] =
-"git reflog delete [--rewrite] [--updateref] [--dry-run | -n] [--verbose] <refs>...";
+N_("git reflog delete [--rewrite] [--updateref] "
+ "[--dry-run | -n] [--verbose] <refs>...");
static const char reflog_exists_usage[] =
-"git reflog exists <ref>";
+N_("git reflog exists <ref>");
static timestamp_t default_reflog_expire;
static timestamp_t default_reflog_expire_unreachable;
@@ -585,7 +589,7 @@ static int cmd_reflog_expire(int argc, const char **argv, const char *prefix)
break;
}
else if (arg[0] == '-')
- usage(reflog_expire_usage);
+ usage(_(reflog_expire_usage));
else
break;
}
@@ -598,7 +602,7 @@ static int cmd_reflog_expire(int argc, const char **argv, const char *prefix)
if (cb.cmd.stalefix) {
repo_init_revisions(the_repository, &cb.cmd.revs, prefix);
if (flags & EXPIRE_REFLOGS_VERBOSE)
- printf("Marking reachable objects...");
+ printf(_("Marking reachable objects..."));
mark_reachable_objects(&cb.cmd.revs, 0, 0, NULL);
if (flags & EXPIRE_REFLOGS_VERBOSE)
putchar('\n');
@@ -636,7 +640,7 @@ static int cmd_reflog_expire(int argc, const char **argv, const char *prefix)
char *ref;
struct object_id oid;
if (!dwim_log(argv[i], strlen(argv[i]), &oid, &ref)) {
- status |= error("%s points nowhere!", argv[i]);
+ status |= error(_("%s points nowhere!"), argv[i]);
continue;
}
set_reflog_expiry_param(&cb.cmd, explicit_expiry, ref);
@@ -682,13 +686,13 @@ static int cmd_reflog_delete(int argc, const char **argv, const char *prefix)
break;
}
else if (arg[0] == '-')
- usage(reflog_delete_usage);
+ usage(_(reflog_delete_usage));
else
break;
}
if (argc - i < 1)
- return error("Nothing to delete?");
+ return error(_("no reflog specified to delete"));
for ( ; i < argc; i++) {
const char *spec = strstr(argv[i], "@{");
@@ -697,12 +701,12 @@ static int cmd_reflog_delete(int argc, const char **argv, const char *prefix)
int recno;
if (!spec) {
- status |= error("Not a reflog: %s", argv[i]);
+ status |= error(_("not a reflog: %s"), argv[i]);
continue;
}
if (!dwim_log(argv[i], spec - argv[i], &oid, &ref)) {
- status |= error("no reflog for '%s'", argv[i]);
+ status |= error(_("no reflog for '%s'"), argv[i]);
continue;
}
@@ -737,7 +741,7 @@ static int cmd_reflog_exists(int argc, const char **argv, const char *prefix)
break;
}
else if (arg[0] == '-')
- usage(reflog_exists_usage);
+ usage(_(reflog_exists_usage));
else
break;
}
@@ -745,10 +749,10 @@ static int cmd_reflog_exists(int argc, const char **argv, const char *prefix)
start = i;
if (argc - start != 1)
- usage(reflog_exists_usage);
+ usage(_(reflog_exists_usage));
if (check_refname_format(argv[start], REFNAME_ALLOW_ONELEVEL))
- die("invalid ref format: %s", argv[start]);
+ die(_("invalid ref format: %s"), argv[start]);
return !reflog_exists(argv[start]);
}
@@ -757,12 +761,12 @@ static int cmd_reflog_exists(int argc, const char **argv, const char *prefix)
*/
static const char reflog_usage[] =
-"git reflog [ show | expire | delete | exists ]";
+N_("git reflog [ show | expire | delete | exists ]");
int cmd_reflog(int argc, const char **argv, const char *prefix)
{
if (argc > 1 && !strcmp(argv[1], "-h"))
- usage(reflog_usage);
+ usage(_(reflog_usage));
/* With no command, we default to showing it. */
if (argc < 2 || *argv[1] == '-')
diff --git a/builtin/repack.c b/builtin/repack.c
index 4558368..2a1c7b2 100644
--- a/builtin/repack.c
+++ b/builtin/repack.c
@@ -197,7 +197,7 @@ static int write_oid(const struct object_id *oid, struct packed_git *pack,
if (cmd->in == -1) {
if (start_command(cmd))
- die("Could not start pack-objects to repack promisor objects");
+ die(_("could not start pack-objects to repack promisor objects"));
}
xwrite(cmd->in, oid_to_hex(oid), GIT_SHA1_HEXSZ);
@@ -236,7 +236,7 @@ static void repack_promisor_objects(const struct pack_objects_args *args,
char *promisor_name;
int fd;
if (line.len != the_hash_algo->hexsz)
- die("repack: Expecting full hex object ID lines only from pack-objects.");
+ die(_("repack: Expecting full hex object ID lines only from pack-objects."));
string_list_append(names, line.buf);
/*
@@ -247,13 +247,13 @@ static void repack_promisor_objects(const struct pack_objects_args *args,
line.buf);
fd = open(promisor_name, O_CREAT|O_EXCL|O_WRONLY, 0600);
if (fd < 0)
- die_errno("unable to create '%s'", promisor_name);
+ die_errno(_("unable to create '%s'"), promisor_name);
close(fd);
free(promisor_name);
}
fclose(out);
if (finish_command(&cmd))
- die("Could not finish pack-objects to repack promisor objects");
+ die(_("could not finish pack-objects to repack promisor objects"));
}
#define ALL_INTO_ONE 1
@@ -408,7 +408,7 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
out = xfdopen(cmd.out, "r");
while (strbuf_getline_lf(&line, out) != EOF) {
if (line.len != the_hash_algo->hexsz)
- die("repack: Expecting full hex object ID lines only from pack-objects.");
+ die(_("repack: Expecting full hex object ID lines only from pack-objects."));
string_list_append(&names, line.buf);
}
fclose(out);
@@ -417,7 +417,7 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
return ret;
if (!names.nr && !po_args.quiet)
- printf("Nothing new to pack.\n");
+ printf_ln(_("Nothing new to pack."));
/*
* Ok we have prepared all new packfiles.
@@ -476,13 +476,13 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
if (rollback_failure.nr) {
int i;
fprintf(stderr,
- "WARNING: Some packs in use have been renamed by\n"
- "WARNING: prefixing old- to their name, in order to\n"
- "WARNING: replace them with the new version of the\n"
- "WARNING: file. But the operation failed, and the\n"
- "WARNING: attempt to rename them back to their\n"
- "WARNING: original names also failed.\n"
- "WARNING: Please rename them in %s manually:\n", packdir);
+ _("WARNING: Some packs in use have been renamed by\n"
+ "WARNING: prefixing old- to their name, in order to\n"
+ "WARNING: replace them with the new version of the\n"
+ "WARNING: file. But the operation failed, and the\n"
+ "WARNING: attempt to rename them back to their\n"
+ "WARNING: original names also failed.\n"
+ "WARNING: Please rename them in %s manually:\n"), packdir);
for (i = 0; i < rollback_failure.nr; i++)
fprintf(stderr, "WARNING: old-%s -> %s\n",
rollback_failure.items[i].string,
diff --git a/builtin/rerere.c b/builtin/rerere.c
index d78eeae..fd3be17 100644
--- a/builtin/rerere.c
+++ b/builtin/rerere.c
@@ -83,11 +83,12 @@ int cmd_rerere(int argc, const char **argv, const char *prefix)
}
if (!strcmp(argv[0], "clear")) {
- rerere_clear(&merge_rr);
+ rerere_clear(the_repository, &merge_rr);
} else if (!strcmp(argv[0], "gc"))
- rerere_gc(&merge_rr);
+ rerere_gc(the_repository, &merge_rr);
else if (!strcmp(argv[0], "status")) {
- if (setup_rerere(&merge_rr, flags | RERERE_READONLY) < 0)
+ if (setup_rerere(the_repository, &merge_rr,
+ flags | RERERE_READONLY) < 0)
return 0;
for (i = 0; i < merge_rr.nr; i++)
printf("%s\n", merge_rr.items[i].string);
@@ -102,7 +103,8 @@ int cmd_rerere(int argc, const char **argv, const char *prefix)
merge_rr.items[i].util = NULL;
}
} else if (!strcmp(argv[0], "diff")) {
- if (setup_rerere(&merge_rr, flags | RERERE_READONLY) < 0)
+ if (setup_rerere(the_repository, &merge_rr,
+ flags | RERERE_READONLY) < 0)
return 0;
for (i = 0; i < merge_rr.nr; i++) {
const char *path = merge_rr.items[i].string;
diff --git a/builtin/reset.c b/builtin/reset.c
index 5816696..59898c9 100644
--- a/builtin/reset.c
+++ b/builtin/reset.c
@@ -95,7 +95,7 @@ static int reset_index(const struct object_id *oid, int reset_type, int quiet)
if (reset_type == MIXED || reset_type == HARD) {
tree = parse_tree_indirect(oid);
- prime_cache_tree(&the_index, tree);
+ prime_cache_tree(the_repository, the_repository->index, tree);
}
ret = 0;
@@ -413,7 +413,7 @@ int cmd_reset(int argc, const char **argv, const char *prefix)
print_new_head_line(lookup_commit_reference(the_repository, &oid));
}
if (!pathspec.nr)
- remove_branch_state();
+ remove_branch_state(the_repository);
return update_ref_status;
}
diff --git a/builtin/rev-list.c b/builtin/rev-list.c
index 2880ed3..51e9e12 100644
--- a/builtin/rev-list.c
+++ b/builtin/rev-list.c
@@ -361,6 +361,9 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)
{
struct rev_info revs;
struct rev_list_info info;
+ struct setup_revision_opt s_r_opt = {
+ .allow_exclude_promisor_objects = 1,
+ };
int i;
int bisect_list = 0;
int bisect_show_vars = 0;
@@ -374,7 +377,6 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)
git_config(git_default_config, NULL);
repo_init_revisions(the_repository, &revs, prefix);
revs.abbrev = DEFAULT_ABBREV;
- revs.allow_exclude_promisor_objects_opt = 1;
revs.commit_format = CMIT_FMT_UNSPECIFIED;
revs.do_not_die_on_missing_tree = 1;
@@ -406,7 +408,7 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)
}
}
- argc = setup_revisions(argc, argv, &revs, NULL);
+ argc = setup_revisions(argc, argv, &revs, &s_r_opt);
memset(&info, 0, sizeof(info));
info.revs = &revs;
diff --git a/builtin/revert.c b/builtin/revert.c
index c93393c..a47b53c 100644
--- a/builtin/revert.c
+++ b/builtin/revert.c
@@ -69,7 +69,8 @@ static int option_parse_m(const struct option *opt,
replay->mainline = strtol(arg, &end, 10);
if (*end || replay->mainline <= 0)
- return opterror(opt, "expects a number greater than zero", 0);
+ return error(_("option `%s' expects a number greater than zero"),
+ opt->long_name);
return 0;
}
@@ -195,14 +196,14 @@ static int run_sequencer(int argc, const char **argv, struct replay_opts *opts)
if (cmd == 'q') {
int ret = sequencer_remove_state(opts);
if (!ret)
- remove_branch_state();
+ remove_branch_state(the_repository);
return ret;
}
if (cmd == 'c')
- return sequencer_continue(opts);
+ return sequencer_continue(the_repository, opts);
if (cmd == 'a')
- return sequencer_rollback(opts);
- return sequencer_pick_revisions(opts);
+ return sequencer_rollback(the_repository, opts);
+ return sequencer_pick_revisions(the_repository, opts);
}
int cmd_revert(int argc, const char **argv, const char *prefix)
diff --git a/builtin/shortlog.c b/builtin/shortlog.c
index 88f88e9..65cd413 100644
--- a/builtin/shortlog.c
+++ b/builtin/shortlog.c
@@ -287,6 +287,8 @@ int cmd_shortlog(int argc, const char **argv, const char *prefix)
case PARSE_OPT_HELP:
case PARSE_OPT_ERROR:
exit(129);
+ case PARSE_OPT_COMPLETE:
+ exit(0);
case PARSE_OPT_DONE:
goto parse_done;
}
diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c
index d38113a..b45514b 100644
--- a/builtin/submodule--helper.c
+++ b/builtin/submodule--helper.c
@@ -1265,19 +1265,20 @@ struct submodule_alternate_setup {
SUBMODULE_ALTERNATE_ERROR_IGNORE, NULL }
static int add_possible_reference_from_superproject(
- struct alternate_object_database *alt, void *sas_cb)
+ struct object_directory *odb, void *sas_cb)
{
struct submodule_alternate_setup *sas = sas_cb;
+ size_t len;
/*
* If the alternate object store is another repository, try the
* standard layout with .git/(modules/<name>)+/objects
*/
- if (ends_with(alt->path, "/objects")) {
+ if (strip_suffix(odb->path, "/objects", &len)) {
char *sm_alternate;
struct strbuf sb = STRBUF_INIT;
struct strbuf err = STRBUF_INIT;
- strbuf_add(&sb, alt->path, strlen(alt->path) - strlen("objects"));
+ strbuf_add(&sb, odb->path, len);
/*
* We need to end the new path with '/' to mark it as a dir,
@@ -1285,7 +1286,7 @@ static int add_possible_reference_from_superproject(
* as the last part of a missing submodule reference would
* be taken as a file name.
*/
- strbuf_addf(&sb, "modules/%s/", sas->submodule_name);
+ strbuf_addf(&sb, "/modules/%s/", sas->submodule_name);
sm_alternate = compute_alternate_path(sb.buf, &err);
if (sm_alternate) {
diff --git a/builtin/update-index.c b/builtin/update-index.c
index 31e7cce..e19da77 100644
--- a/builtin/update-index.c
+++ b/builtin/update-index.c
@@ -1086,6 +1086,8 @@ int cmd_update_index(int argc, const char **argv, const char *prefix)
case PARSE_OPT_HELP:
case PARSE_OPT_ERROR:
exit(129);
+ case PARSE_OPT_COMPLETE:
+ exit(0);
case PARSE_OPT_NON_OPTION:
case PARSE_OPT_DONE:
{
diff --git a/bundle.c b/bundle.c
index 88c3e16..37b1daa 100644
--- a/bundle.c
+++ b/bundle.c
@@ -127,7 +127,9 @@ static int list_refs(struct ref_list *r, int argc, const char **argv)
/* Remember to update object flag allocation in object.h */
#define PREREQ_MARK (1u<<16)
-int verify_bundle(struct bundle_header *header, int verbose)
+int verify_bundle(struct repository *r,
+ struct bundle_header *header,
+ int verbose)
{
/*
* Do fast check, then if any prereqs are missing then go line by line
@@ -140,10 +142,10 @@ int verify_bundle(struct bundle_header *header, int verbose)
int i, ret = 0, req_nr;
const char *message = _("Repository lacks these prerequisite commits:");
- repo_init_revisions(the_repository, &revs, NULL);
+ repo_init_revisions(r, &revs, NULL);
for (i = 0; i < p->nr; i++) {
struct ref_list_entry *e = p->list + i;
- struct object *o = parse_object(the_repository, &e->oid);
+ struct object *o = parse_object(r, &e->oid);
if (o) {
o->flags |= PREREQ_MARK;
add_pending_object(&revs, o, e->name);
@@ -168,7 +170,7 @@ int verify_bundle(struct bundle_header *header, int verbose)
for (i = 0; i < p->nr; i++) {
struct ref_list_entry *e = p->list + i;
- struct object *o = parse_object(the_repository, &e->oid);
+ struct object *o = parse_object(r, &e->oid);
assert(o); /* otherwise we'd have returned early */
if (o->flags & SHOWN)
continue;
@@ -180,7 +182,7 @@ int verify_bundle(struct bundle_header *header, int verbose)
/* Clean up objects used, as they will be reused. */
for (i = 0; i < p->nr; i++) {
struct ref_list_entry *e = p->list + i;
- commit = lookup_commit_reference_gently(the_repository, &e->oid, 1);
+ commit = lookup_commit_reference_gently(r, &e->oid, 1);
if (commit)
clear_commit_marks(commit, ALL_REV_FLAGS);
}
@@ -389,8 +391,7 @@ static int write_bundle_refs(int bundle_fd, struct rev_info *revs)
* in terms of a tag (e.g. v2.0 from the range
* "v1.0..v2.0")?
*/
- struct commit *one = lookup_commit_reference(the_repository,
- &oid);
+ struct commit *one = lookup_commit_reference(revs->repo, &oid);
struct object *obj;
if (e->item == &(one->object)) {
@@ -423,8 +424,8 @@ static int write_bundle_refs(int bundle_fd, struct rev_info *revs)
return ref_count;
}
-int create_bundle(struct bundle_header *header, const char *path,
- int argc, const char **argv)
+int create_bundle(struct repository *r, struct bundle_header *header,
+ const char *path, int argc, const char **argv)
{
struct lock_file lock = LOCK_INIT;
int bundle_fd = -1;
@@ -444,7 +445,7 @@ int create_bundle(struct bundle_header *header, const char *path,
/* init revs to list objects for pack-objects later */
save_commit_buffer = 0;
- repo_init_revisions(the_repository, &revs, NULL);
+ repo_init_revisions(r, &revs, NULL);
/* write prerequisites */
if (compute_and_write_prerequisites(bundle_fd, &revs, argc, argv))
@@ -479,7 +480,8 @@ err:
return -1;
}
-int unbundle(struct bundle_header *header, int bundle_fd, int flags)
+int unbundle(struct repository *r, struct bundle_header *header,
+ int bundle_fd, int flags)
{
const char *argv_index_pack[] = {"index-pack",
"--fix-thin", "--stdin", NULL, NULL};
@@ -488,7 +490,7 @@ int unbundle(struct bundle_header *header, int bundle_fd, int flags)
if (flags & BUNDLE_VERBOSE)
argv_index_pack[3] = "-v";
- if (verify_bundle(header, 0))
+ if (verify_bundle(r, header, 0))
return -1;
ip.argv = argv_index_pack;
ip.in = bundle_fd;
diff --git a/bundle.h b/bundle.h
index e9a4cb6..781e6f5 100644
--- a/bundle.h
+++ b/bundle.h
@@ -18,11 +18,12 @@ struct bundle_header {
int is_bundle(const char *path, int quiet);
int read_bundle_header(const char *path, struct bundle_header *header);
-int create_bundle(struct bundle_header *header, const char *path,
- int argc, const char **argv);
-int verify_bundle(struct bundle_header *header, int verbose);
+int create_bundle(struct repository *r, struct bundle_header *header,
+ const char *path, int argc, const char **argv);
+int verify_bundle(struct repository *r, struct bundle_header *header, int verbose);
#define BUNDLE_VERBOSE 1
-int unbundle(struct bundle_header *header, int bundle_fd, int flags);
+int unbundle(struct repository *r, struct bundle_header *header,
+ int bundle_fd, int flags);
int list_bundle_refs(struct bundle_header *header,
int argc, const char **argv);
diff --git a/cache-tree.c b/cache-tree.c
index 9d454d2..eabb8fb 100644
--- a/cache-tree.c
+++ b/cache-tree.c
@@ -448,7 +448,7 @@ int cache_tree_update(struct index_state *istate, int flags)
}
static void write_one(struct strbuf *buffer, struct cache_tree *it,
- const char *path, int pathlen)
+ const char *path, int pathlen)
{
int i;
@@ -659,7 +659,9 @@ out:
return ret;
}
-static void prime_cache_tree_rec(struct cache_tree *it, struct tree *tree)
+static void prime_cache_tree_rec(struct repository *r,
+ struct cache_tree *it,
+ struct tree *tree)
{
struct tree_desc desc;
struct name_entry entry;
@@ -673,24 +675,25 @@ static void prime_cache_tree_rec(struct cache_tree *it, struct tree *tree)
cnt++;
else {
struct cache_tree_sub *sub;
- struct tree *subtree = lookup_tree(the_repository,
- entry.oid);
+ struct tree *subtree = lookup_tree(r, entry.oid);
if (!subtree->object.parsed)
parse_tree(subtree);
sub = cache_tree_sub(it, entry.path);
sub->cache_tree = cache_tree();
- prime_cache_tree_rec(sub->cache_tree, subtree);
+ prime_cache_tree_rec(r, sub->cache_tree, subtree);
cnt += sub->cache_tree->entry_count;
}
}
it->entry_count = cnt;
}
-void prime_cache_tree(struct index_state *istate, struct tree *tree)
+void prime_cache_tree(struct repository *r,
+ struct index_state *istate,
+ struct tree *tree)
{
cache_tree_free(&istate->cache_tree);
istate->cache_tree = cache_tree();
- prime_cache_tree_rec(istate->cache_tree, tree);
+ prime_cache_tree_rec(r, istate->cache_tree, tree);
istate->cache_changed |= CACHE_TREE_CHANGED;
}
@@ -726,7 +729,8 @@ int cache_tree_matches_traversal(struct cache_tree *root,
return 0;
}
-static void verify_one(struct index_state *istate,
+static void verify_one(struct repository *r,
+ struct index_state *istate,
struct cache_tree *it,
struct strbuf *path)
{
@@ -736,13 +740,13 @@ static void verify_one(struct index_state *istate,
for (i = 0; i < it->subtree_nr; i++) {
strbuf_addf(path, "%s/", it->down[i]->name);
- verify_one(istate, it->down[i]->cache_tree, path);
+ verify_one(r, istate, it->down[i]->cache_tree, path);
strbuf_setlen(path, len);
}
if (it->entry_count < 0 ||
/* no verification on tests (t7003) that replace trees */
- lookup_replace_object(the_repository, &it->oid) != &it->oid)
+ lookup_replace_object(r, &it->oid) != &it->oid)
return;
if (path->len) {
@@ -793,12 +797,12 @@ static void verify_one(struct index_state *istate,
strbuf_release(&tree_buf);
}
-void cache_tree_verify(struct index_state *istate)
+void cache_tree_verify(struct repository *r, struct index_state *istate)
{
struct strbuf path = STRBUF_INIT;
if (!istate->cache_tree)
return;
- verify_one(istate, istate->cache_tree, &path);
+ verify_one(r, istate, istate->cache_tree, &path);
strbuf_release(&path);
}
diff --git a/cache-tree.h b/cache-tree.h
index 0ab6784..3262091 100644
--- a/cache-tree.h
+++ b/cache-tree.h
@@ -32,7 +32,7 @@ struct cache_tree *cache_tree_read(const char *buffer, unsigned long size);
int cache_tree_fully_valid(struct cache_tree *);
int cache_tree_update(struct index_state *, int);
-void cache_tree_verify(struct index_state *);
+void cache_tree_verify(struct repository *, struct index_state *);
/* bitmasks to write_cache_as_tree flags */
#define WRITE_TREE_MISSING_OK 1
@@ -47,7 +47,7 @@ void cache_tree_verify(struct index_state *);
#define WRITE_TREE_PREFIX_ERROR (-3)
int write_index_as_tree(struct object_id *oid, struct index_state *index_state, const char *index_path, int flags, const char *prefix);
-void prime_cache_tree(struct index_state *, struct tree *);
+void prime_cache_tree(struct repository *, struct index_state *, struct tree *);
int cache_tree_matches_traversal(struct cache_tree *, struct name_entry *ent, struct traverse_info *info);
diff --git a/cache.h b/cache.h
index ca36b44..49713cc 100644
--- a/cache.h
+++ b/cache.h
@@ -1539,9 +1539,9 @@ struct checkout {
#define CHECKOUT_INIT { NULL, "" }
#define TEMPORARY_FILENAME_LENGTH 25
-extern int checkout_entry(struct cache_entry *ce, const struct checkout *state, char *topath);
+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);
+extern int finish_delayed_checkout(struct checkout *state, int *nr_checkouts);
struct cache_def {
struct strbuf path;
diff --git a/combine-diff.c b/combine-diff.c
index ad7752e..a143c00 100644
--- a/combine-diff.c
+++ b/combine-diff.c
@@ -996,7 +996,7 @@ static void show_patch_diff(struct combine_diff_path *elem, int num_parent,
if (!userdiff)
userdiff = userdiff_find_by_name("default");
if (opt->flags.allow_textconv)
- textconv = userdiff_get_textconv(userdiff);
+ textconv = userdiff_get_textconv(opt->repo, userdiff);
/* Read the result of merge first */
if (!working_tree_file)
diff --git a/commit-graph.c b/commit-graph.c
index 40c855f..5c8fb4b 100644
--- a/commit-graph.c
+++ b/commit-graph.c
@@ -230,8 +230,7 @@ static void prepare_commit_graph_one(struct repository *r, const char *obj_dir)
*/
static int prepare_commit_graph(struct repository *r)
{
- struct alternate_object_database *alt;
- char *obj_dir;
+ struct object_directory *odb;
int config_value;
if (r->objects->commit_graph_attempted)
@@ -252,13 +251,11 @@ static int prepare_commit_graph(struct repository *r)
if (!commit_graph_compatible(r))
return 0;
- obj_dir = r->objects->objectdir;
- prepare_commit_graph_one(r, obj_dir);
prepare_alt_odb(r);
- for (alt = r->objects->alt_odb_list;
- !r->objects->commit_graph && alt;
- alt = alt->next)
- prepare_commit_graph_one(r, alt->path);
+ for (odb = r->objects->odb;
+ !r->objects->commit_graph && odb;
+ odb = odb->next)
+ prepare_commit_graph_one(r, odb->path);
return !!r->objects->commit_graph;
}
@@ -641,26 +638,29 @@ static void add_missing_parents(struct packed_oid_list *oids, struct commit *com
static void close_reachable(struct packed_oid_list *oids, int report_progress)
{
- int i;
+ int i, j;
struct commit *commit;
struct progress *progress = NULL;
- int j = 0;
if (report_progress)
progress = start_delayed_progress(
- _("Annotating commits in commit graph"), 0);
+ _("Loading known commits in commit graph"), j = 0);
for (i = 0; i < oids->nr; i++) {
display_progress(progress, ++j);
commit = lookup_commit(the_repository, &oids->list[i]);
if (commit)
commit->object.flags |= UNINTERESTING;
}
+ stop_progress(&progress);
/*
* As this loop runs, oids->nr may grow, but not more
* than the number of missing commits in the reachable
* closure.
*/
+ if (report_progress)
+ progress = start_delayed_progress(
+ _("Expanding reachable commits in commit graph"), j = 0);
for (i = 0; i < oids->nr; i++) {
display_progress(progress, ++j);
commit = lookup_commit(the_repository, &oids->list[i]);
@@ -668,7 +668,11 @@ static void close_reachable(struct packed_oid_list *oids, int report_progress)
if (commit && !parse_commit(commit))
add_missing_parents(oids, commit);
}
+ stop_progress(&progress);
+ if (report_progress)
+ progress = start_delayed_progress(
+ _("Clearing commit marks in commit graph"), j = 0);
for (i = 0; i < oids->nr; i++) {
display_progress(progress, ++j);
commit = lookup_commit(the_repository, &oids->list[i]);
diff --git a/compat/cygwin.c b/compat/cygwin.c
deleted file mode 100644
index b9862d6..0000000
--- a/compat/cygwin.c
+++ /dev/null
@@ -1,19 +0,0 @@
-#include "../git-compat-util.h"
-#include "../cache.h"
-
-int cygwin_offset_1st_component(const char *path)
-{
- const char *pos = path;
- /* unc paths */
- if (is_dir_sep(pos[0]) && is_dir_sep(pos[1])) {
- /* skip server name */
- pos = strchr(pos + 2, '/');
- if (!pos)
- return 0; /* Error: malformed unc path */
-
- do {
- pos++;
- } while (*pos && pos[0] != '/');
- }
- return pos + is_dir_sep(*pos) - path;
-}
diff --git a/compat/cygwin.h b/compat/cygwin.h
deleted file mode 100644
index 8e52de4..0000000
--- a/compat/cygwin.h
+++ /dev/null
@@ -1,2 +0,0 @@
-int cygwin_offset_1st_component(const char *path);
-#define offset_1st_component cygwin_offset_1st_component
diff --git a/compat/mingw.c b/compat/mingw.c
index 34b3880..b459e1a 100644
--- a/compat/mingw.c
+++ b/compat/mingw.c
@@ -350,7 +350,7 @@ static inline int needs_hiding(const char *path)
return 0;
/* We cannot use basename(), as it would remove trailing slashes */
- mingw_skip_dos_drive_prefix((char **)&path);
+ win32_skip_dos_drive_prefix((char **)&path);
if (!*path)
return 0;
@@ -2275,33 +2275,6 @@ pid_t waitpid(pid_t pid, int *status, int options)
return -1;
}
-int mingw_skip_dos_drive_prefix(char **path)
-{
- int ret = has_dos_drive_prefix(*path);
- *path += ret;
- return ret;
-}
-
-int mingw_offset_1st_component(const char *path)
-{
- char *pos = (char *)path;
-
- /* unc paths */
- if (!skip_dos_drive_prefix(&pos) &&
- is_dir_sep(pos[0]) && is_dir_sep(pos[1])) {
- /* skip server name */
- pos = strpbrk(pos + 2, "\\/");
- if (!pos)
- return 0; /* Error: malformed unc path */
-
- do {
- pos++;
- } while (*pos && !is_dir_sep(*pos));
- }
-
- return pos + is_dir_sep(*pos) - path;
-}
-
int xutftowcsn(wchar_t *wcs, const char *utfs, size_t wcslen, int utflen)
{
int upos = 0, wpos = 0;
diff --git a/compat/mingw.h b/compat/mingw.h
index 8c24dda..30d9fb3 100644
--- a/compat/mingw.h
+++ b/compat/mingw.h
@@ -443,32 +443,12 @@ HANDLE winansi_get_osfhandle(int fd);
* git specific compatibility
*/
-#define has_dos_drive_prefix(path) \
- (isalpha(*(path)) && (path)[1] == ':' ? 2 : 0)
-int mingw_skip_dos_drive_prefix(char **path);
-#define skip_dos_drive_prefix mingw_skip_dos_drive_prefix
-static inline int mingw_is_dir_sep(int c)
-{
- return c == '/' || c == '\\';
-}
-#define is_dir_sep mingw_is_dir_sep
-static inline char *mingw_find_last_dir_sep(const char *path)
-{
- char *ret = NULL;
- for (; *path; ++path)
- if (is_dir_sep(*path))
- ret = (char *)path;
- return ret;
-}
static inline void convert_slashes(char *path)
{
for (; *path; path++)
if (*path == '\\')
*path = '/';
}
-#define find_last_dir_sep mingw_find_last_dir_sep
-int mingw_offset_1st_component(const char *path);
-#define offset_1st_component mingw_offset_1st_component
#define PATH_SEP ';'
extern char *mingw_query_user_email(void);
#define query_user_email mingw_query_user_email
diff --git a/compat/win32/path-utils.c b/compat/win32/path-utils.c
new file mode 100644
index 0000000..d9d3641
--- /dev/null
+++ b/compat/win32/path-utils.c
@@ -0,0 +1,28 @@
+#include "../../git-compat-util.h"
+
+int win32_skip_dos_drive_prefix(char **path)
+{
+ int ret = has_dos_drive_prefix(*path);
+ *path += ret;
+ return ret;
+}
+
+int win32_offset_1st_component(const char *path)
+{
+ char *pos = (char *)path;
+
+ /* unc paths */
+ if (!skip_dos_drive_prefix(&pos) &&
+ is_dir_sep(pos[0]) && is_dir_sep(pos[1])) {
+ /* skip server name */
+ pos = strpbrk(pos + 2, "\\/");
+ if (!pos)
+ return 0; /* Error: malformed unc path */
+
+ do {
+ pos++;
+ } while (*pos && !is_dir_sep(*pos));
+ }
+
+ return pos + is_dir_sep(*pos) - path;
+}
diff --git a/compat/win32/path-utils.h b/compat/win32/path-utils.h
new file mode 100644
index 0000000..0f70d43
--- /dev/null
+++ b/compat/win32/path-utils.h
@@ -0,0 +1,20 @@
+#define has_dos_drive_prefix(path) \
+ (isalpha(*(path)) && (path)[1] == ':' ? 2 : 0)
+int win32_skip_dos_drive_prefix(char **path);
+#define skip_dos_drive_prefix win32_skip_dos_drive_prefix
+static inline int win32_is_dir_sep(int c)
+{
+ return c == '/' || c == '\\';
+}
+#define is_dir_sep win32_is_dir_sep
+static inline char *win32_find_last_dir_sep(const char *path)
+{
+ char *ret = NULL;
+ for (; *path; ++path)
+ if (is_dir_sep(*path))
+ ret = (char *)path;
+ return ret;
+}
+#define find_last_dir_sep win32_find_last_dir_sep
+int win32_offset_1st_component(const char *path);
+#define offset_1st_component win32_offset_1st_component
diff --git a/config.mak.uname b/config.mak.uname
index 3ee7da0..e391431 100644
--- a/config.mak.uname
+++ b/config.mak.uname
@@ -187,7 +187,7 @@ ifeq ($(uname_O),Cygwin)
UNRELIABLE_FSTAT = UnfortunatelyYes
OBJECT_CREATION_USES_RENAMES = UnfortunatelyNeedsTo
MMAP_PREVENTS_DELETE = UnfortunatelyYes
- COMPAT_OBJS += compat/cygwin.o
+ COMPAT_OBJS += compat/win32/path-utils.o
FREAD_READS_DIRECTORIES = UnfortunatelyYes
endif
ifeq ($(uname_S),FreeBSD)
@@ -233,6 +233,7 @@ ifeq ($(uname_S),OpenBSD)
HAVE_BSD_SYSCTL = YesPlease
HAVE_BSD_KERN_PROC_SYSCTL = YesPlease
PROCFS_EXECUTABLE_PATH = /proc/curproc/file
+ FREAD_READS_DIRECTORIES = UnfortunatelyYes
endif
ifeq ($(uname_S),MirBSD)
NO_STRCASESTR = YesPlease
@@ -527,6 +528,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/path-utils.o \
compat/win32/pthread.o compat/win32/syslog.o \
compat/win32/dirent.o
BASIC_CFLAGS += -DWIN32 -DPROTECT_NTFS_DEFAULT=1
diff --git a/convert.c b/convert.c
index e084822..5f60c11 100644
--- a/convert.c
+++ b/convert.c
@@ -705,7 +705,7 @@ static int filter_buffer_or_fd(int in, int out, void *data)
}
static int apply_single_file_filter(const char *path, const char *src, size_t len, int fd,
- struct strbuf *dst, const char *cmd)
+ struct strbuf *dst, const char *cmd)
{
/*
* Create a pipeline to have the command filter the buffer's
@@ -1091,7 +1091,7 @@ static int count_ident(const char *cp, unsigned long size)
}
static int ident_to_git(const char *path, const char *src, size_t len,
- struct strbuf *buf, int ident)
+ struct strbuf *buf, int ident)
{
char *dst, *dollar;
@@ -1135,7 +1135,7 @@ static int ident_to_git(const char *path, const char *src, size_t len,
}
static int ident_to_worktree(const char *path, const char *src, size_t len,
- struct strbuf *buf, int ident)
+ struct strbuf *buf, int ident)
{
struct object_id oid;
char *to_free = NULL, *dollar, *spc;
diff --git a/delta-islands.c b/delta-islands.c
index 8e5018e..191a930 100644
--- a/delta-islands.c
+++ b/delta-islands.c
@@ -190,13 +190,15 @@ static void set_island_marks(struct object *obj, struct island_bitmap *marks)
island_bitmap_or(b, marks);
}
-static void mark_remote_island_1(struct remote_island *rl, int is_core_island)
+static void mark_remote_island_1(struct repository *r,
+ struct remote_island *rl,
+ int is_core_island)
{
uint32_t i;
for (i = 0; i < rl->oids.nr; ++i) {
struct island_bitmap *marks;
- struct object *obj = parse_object(the_repository, &rl->oids.oid[i]);
+ struct object *obj = parse_object(r, &rl->oids.oid[i]);
if (!obj)
continue;
@@ -211,7 +213,7 @@ static void mark_remote_island_1(struct remote_island *rl, int is_core_island)
while (obj && obj->type == OBJ_TAG) {
obj = ((struct tag *)obj)->tagged;
if (obj) {
- parse_object(the_repository, &obj->oid);
+ parse_object(r, &obj->oid);
marks = create_or_get_island_marks(obj);
island_bitmap_set(marks, island_counter);
}
@@ -237,7 +239,9 @@ static int tree_depth_compare(const void *a, const void *b)
return todo_a->depth - todo_b->depth;
}
-void resolve_tree_islands(int progress, struct packing_data *to_pack)
+void resolve_tree_islands(struct repository *r,
+ int progress,
+ struct packing_data *to_pack)
{
struct progress *progress_state = NULL;
struct tree_islands_todo *todo;
@@ -281,7 +285,7 @@ void resolve_tree_islands(int progress, struct packing_data *to_pack)
root_marks = kh_value(island_marks, pos);
- tree = lookup_tree(the_repository, &ent->idx.oid);
+ tree = lookup_tree(r, &ent->idx.oid);
if (!tree || parse_tree(tree) < 0)
die(_("bad tree object %s"), oid_to_hex(&ent->idx.oid));
@@ -292,7 +296,7 @@ void resolve_tree_islands(int progress, struct packing_data *to_pack)
if (S_ISGITLINK(entry.mode))
continue;
- obj = lookup_object(the_repository, entry.oid->hash);
+ obj = lookup_object(r, entry.oid->hash);
if (!obj)
continue;
@@ -415,7 +419,7 @@ static struct remote_island *get_core_island(void)
return NULL;
}
-static void deduplicate_islands(void)
+static void deduplicate_islands(struct repository *r)
{
struct remote_island *island, *core = NULL, **list;
unsigned int island_count, dst, src, ref, i = 0;
@@ -444,20 +448,20 @@ static void deduplicate_islands(void)
core = get_core_island();
for (i = 0; i < island_count; ++i) {
- mark_remote_island_1(list[i], core && list[i]->hash == core->hash);
+ mark_remote_island_1(r, list[i], core && list[i]->hash == core->hash);
}
free(list);
}
-void load_delta_islands(void)
+void load_delta_islands(struct repository *r)
{
island_marks = kh_init_sha1();
remote_islands = kh_init_str();
git_config(island_config_callback, NULL);
for_each_ref(find_island_for_ref, NULL);
- deduplicate_islands();
+ deduplicate_islands(r);
fprintf(stderr, _("Marked %d islands, done.\n"), island_counter);
}
diff --git a/delta-islands.h b/delta-islands.h
index b635cd0..3ac8045 100644
--- a/delta-islands.h
+++ b/delta-islands.h
@@ -1,14 +1,17 @@
#ifndef DELTA_ISLANDS_H
#define DELTA_ISLANDS_H
+struct commit;
struct object_id;
struct packing_data;
-struct commit;
+struct repository;
int island_delta_cmp(const struct object_id *a, const struct object_id *b);
int in_same_island(const struct object_id *, const struct object_id *);
-void resolve_tree_islands(int progress, struct packing_data *to_pack);
-void load_delta_islands(void);
+void resolve_tree_islands(struct repository *r,
+ int progress,
+ struct packing_data *to_pack);
+void load_delta_islands(struct repository *r);
void propagate_island_marks(struct commit *commit);
int compute_pack_layers(struct packing_data *to_pack);
diff --git a/diff-lib.c b/diff-lib.c
index 83fce51..23c8d35 100644
--- a/diff-lib.c
+++ b/diff-lib.c
@@ -542,7 +542,7 @@ int do_diff_cache(const struct object_id *tree_oid, struct diff_options *opt)
{
struct rev_info revs;
- repo_init_revisions(the_repository, &revs, NULL);
+ repo_init_revisions(opt->repo, &revs, NULL);
copy_pathspec(&revs.prune_data, &opt->pathspec);
revs.diffopt = *opt;
@@ -551,13 +551,14 @@ int do_diff_cache(const struct object_id *tree_oid, struct diff_options *opt)
return 0;
}
-int index_differs_from(const char *def, const struct diff_flags *flags,
+int index_differs_from(struct repository *r,
+ const char *def, const struct diff_flags *flags,
int ita_invisible_in_index)
{
struct rev_info rev;
struct setup_revision_opt opt;
- repo_init_revisions(the_repository, &rev, NULL);
+ repo_init_revisions(r, &rev, NULL);
memset(&opt, 0, sizeof(opt));
opt.def = def;
setup_revisions(0, NULL, &rev, &opt);
diff --git a/diff.c b/diff.c
index dc9965e..f1e901a 100644
--- a/diff.c
+++ b/diff.c
@@ -291,7 +291,7 @@ static int parse_color_moved(const char *arg)
return error(_("color moved setting must be one of 'no', 'default', 'blocks', 'zebra', 'dimmed-zebra', 'plain'"));
}
-static int parse_color_moved_ws(const char *arg)
+static unsigned parse_color_moved_ws(const char *arg)
{
int ret = 0;
struct string_list l = STRING_LIST_INIT_DUP;
@@ -312,15 +312,19 @@ static int parse_color_moved_ws(const char *arg)
ret |= XDF_IGNORE_WHITESPACE;
else if (!strcmp(sb.buf, "allow-indentation-change"))
ret |= COLOR_MOVED_WS_ALLOW_INDENTATION_CHANGE;
- else
- error(_("ignoring unknown color-moved-ws mode '%s'"), sb.buf);
+ else {
+ ret |= COLOR_MOVED_WS_ERROR;
+ error(_("unknown color-moved-ws mode '%s', possible values are 'ignore-space-change', 'ignore-space-at-eol', 'ignore-all-space', 'allow-indentation-change'"), sb.buf);
+ }
strbuf_release(&sb);
}
if ((ret & COLOR_MOVED_WS_ALLOW_INDENTATION_CHANGE) &&
- (ret & XDF_WHITESPACE_FLAGS))
- die(_("color-moved-ws: allow-indentation-change cannot be combined with other white space modes"));
+ (ret & XDF_WHITESPACE_FLAGS)) {
+ error(_("color-moved-ws: allow-indentation-change cannot be combined with other white space modes"));
+ ret |= COLOR_MOVED_WS_ERROR;
+ }
string_list_clear(&l, 0);
@@ -341,8 +345,8 @@ int git_diff_ui_config(const char *var, const char *value, void *cb)
return 0;
}
if (!strcmp(var, "diff.colormovedws")) {
- int cm = parse_color_moved_ws(value);
- if (cm < 0)
+ unsigned cm = parse_color_moved_ws(value);
+ if (cm & COLOR_MOVED_WS_ERROR)
return -1;
diff_color_moved_ws_default = cm;
return 0;
@@ -3313,14 +3317,14 @@ void diff_set_mnemonic_prefix(struct diff_options *options, const char *a, const
options->b_prefix = b;
}
-struct userdiff_driver *get_textconv(struct index_state *istate,
+struct userdiff_driver *get_textconv(struct repository *r,
struct diff_filespec *one)
{
if (!DIFF_FILE_VALID(one))
return NULL;
- diff_filespec_load_driver(one, istate);
- return userdiff_get_textconv(one->driver);
+ diff_filespec_load_driver(one, r->index);
+ return userdiff_get_textconv(r, one->driver);
}
static void builtin_diff(const char *name_a,
@@ -3369,8 +3373,8 @@ static void builtin_diff(const char *name_a,
}
if (o->flags.allow_textconv) {
- textconv_one = get_textconv(o->repo->index, one);
- textconv_two = get_textconv(o->repo->index, two);
+ textconv_one = get_textconv(o->repo, one);
+ textconv_two = get_textconv(o->repo, two);
}
/* Never use a non-valid filename anywhere if at all possible */
@@ -5034,10 +5038,13 @@ int diff_opt_parse(struct diff_options *options,
else if (skip_prefix(arg, "--color-moved=", &arg)) {
int cm = parse_color_moved(arg);
if (cm < 0)
- die("bad --color-moved argument: %s", arg);
+ return error("bad --color-moved argument: %s", arg);
options->color_moved = cm;
} else if (skip_prefix(arg, "--color-moved-ws=", &arg)) {
- options->color_moved_ws_handling = parse_color_moved_ws(arg);
+ unsigned cm = parse_color_moved_ws(arg);
+ if (cm & COLOR_MOVED_WS_ERROR)
+ return -1;
+ options->color_moved_ws_handling = cm;
} else if (skip_to_optional_arg_default(arg, "--color-words", &options->word_regex, NULL)) {
options->use_color = 1;
options->word_diff = DIFF_WORDS_COLOR;
@@ -6434,7 +6441,7 @@ int textconv_object(struct repository *r,
df = alloc_filespec(path);
fill_filespec(df, oid, oid_valid, mode);
- textconv = get_textconv(r->index, df);
+ textconv = get_textconv(r, df);
if (!textconv) {
free_filespec(df);
return 0;
diff --git a/diff.h b/diff.h
index ce5e8a8..b512d04 100644
--- a/diff.h
+++ b/diff.h
@@ -225,7 +225,8 @@ struct diff_options {
/* XDF_WHITESPACE_FLAGS regarding block detection are set at 2, 3, 4 */
#define COLOR_MOVED_WS_ALLOW_INDENTATION_CHANGE (1<<5)
- int color_moved_ws_handling;
+ #define COLOR_MOVED_WS_ERROR (1<<0)
+ unsigned color_moved_ws_handling;
struct repository *repo;
};
@@ -436,7 +437,8 @@ int diff_result_code(struct diff_options *, int);
void diff_no_index(struct repository *, struct rev_info *, int, const char **);
-int index_differs_from(const char *def, const struct diff_flags *flags,
+int index_differs_from(struct repository *r, const char *def,
+ const struct diff_flags *flags,
int ita_invisible_in_index);
/*
@@ -460,7 +462,7 @@ size_t fill_textconv(struct repository *r,
* and only if it has textconv enabled (otherwise return NULL). The result
* can be passed to fill_textconv().
*/
-struct userdiff_driver *get_textconv(struct index_state *istate,
+struct userdiff_driver *get_textconv(struct repository *r,
struct diff_filespec *one);
/*
diff --git a/diffcore-pickaxe.c b/diffcore-pickaxe.c
index 69fc55e..a9c6d60 100644
--- a/diffcore-pickaxe.c
+++ b/diffcore-pickaxe.c
@@ -140,8 +140,8 @@ static int pickaxe_match(struct diff_filepair *p, struct diff_options *o,
return 0;
if (o->flags.allow_textconv) {
- textconv_one = get_textconv(o->repo->index, p->one);
- textconv_two = get_textconv(o->repo->index, p->two);
+ textconv_one = get_textconv(o->repo, p->one);
+ textconv_two = get_textconv(o->repo, p->two);
}
/*
@@ -154,6 +154,12 @@ static int pickaxe_match(struct diff_filepair *p, struct diff_options *o,
if (textconv_one == textconv_two && diff_unmodified_pair(p))
return 0;
+ if ((o->pickaxe_opts & DIFF_PICKAXE_KIND_G) &&
+ !o->flags.text &&
+ ((!textconv_one && diff_filespec_is_binary(o->repo, p->one)) ||
+ (!textconv_two && diff_filespec_is_binary(o->repo, p->two))))
+ return 0;
+
mf1.size = fill_textconv(o->repo, textconv_one, p->one, &mf1.ptr);
mf2.size = fill_textconv(o->repo, textconv_two, p->two, &mf2.ptr);
diff --git a/dir.c b/dir.c
index ab6477d..2128448 100644
--- a/dir.c
+++ b/dir.c
@@ -276,44 +276,6 @@ static int do_read_blob(const struct object_id *oid, struct oid_stat *oid_stat,
#define DO_MATCH_DIRECTORY (1<<1)
#define DO_MATCH_SUBMODULE (1<<2)
-static int match_attrs(const struct index_state *istate,
- const char *name, int namelen,
- const struct pathspec_item *item)
-{
- int i;
- char *to_free = NULL;
-
- if (name[namelen])
- name = to_free = xmemdupz(name, namelen);
-
- git_check_attr(istate, name, item->attr_check);
-
- free(to_free);
-
- for (i = 0; i < item->attr_match_nr; i++) {
- const char *value;
- int matched;
- enum attr_match_mode match_mode;
-
- value = item->attr_check->items[i].value;
- match_mode = item->attr_match[i].match_mode;
-
- if (ATTR_TRUE(value))
- matched = (match_mode == MATCH_SET);
- else if (ATTR_FALSE(value))
- matched = (match_mode == MATCH_UNSET);
- else if (ATTR_UNSET(value))
- matched = (match_mode == MATCH_UNSPECIFIED);
- else
- matched = (match_mode == MATCH_VALUE &&
- !strcmp(item->attr_match[i].value, value));
- if (!matched)
- return 0;
- }
-
- return 1;
-}
-
/*
* Does 'match' match the given name?
* A match is found if
@@ -367,7 +329,8 @@ static int match_pathspec_item(const struct index_state *istate,
strncmp(item->match, name - prefix, item->prefix))
return 0;
- if (item->attr_match_nr && !match_attrs(istate, name, namelen, item))
+ if (item->attr_match_nr &&
+ !match_pathspec_attrs(istate, name, namelen, item))
return 0;
/* If the match was just the prefix, we matched */
diff --git a/entry.c b/entry.c
index 0a3c451..6fd72b3 100644
--- a/entry.c
+++ b/entry.c
@@ -161,7 +161,7 @@ static int remove_available_paths(struct string_list_item *item, void *cb_data)
return !available;
}
-int finish_delayed_checkout(struct checkout *state)
+int finish_delayed_checkout(struct checkout *state, int *nr_checkouts)
{
int errs = 0;
unsigned delayed_object_count;
@@ -226,7 +226,7 @@ int finish_delayed_checkout(struct checkout *state)
ce = index_file_exists(state->istate, path->string,
strlen(path->string), 0);
if (ce) {
- errs |= checkout_entry(ce, state, NULL);
+ errs |= checkout_entry(ce, state, NULL, nr_checkouts);
filtered_bytes += ce->ce_stat_data.sd_size;
display_throughput(progress, filtered_bytes);
} else
@@ -435,8 +435,8 @@ static void mark_colliding_entries(const struct checkout *state,
* its name is returned in topath[], which must be able to hold at
* least TEMPORARY_FILENAME_LENGTH bytes long.
*/
-int checkout_entry(struct cache_entry *ce,
- const struct checkout *state, char *topath)
+int checkout_entry(struct cache_entry *ce, const struct checkout *state,
+ char *topath, int *nr_checkouts)
{
static struct strbuf path = STRBUF_INIT;
struct stat st;
@@ -506,5 +506,7 @@ int checkout_entry(struct cache_entry *ce,
return 0;
create_directories(path.buf, path.len, state);
+ if (nr_checkouts)
+ (*nr_checkouts)++;
return write_entry(ce, path.buf, state, 0);
}
diff --git a/environment.c b/environment.c
index 3465597..0e37741 100644
--- a/environment.c
+++ b/environment.c
@@ -274,9 +274,9 @@ const char *get_git_work_tree(void)
char *get_object_directory(void)
{
- if (!the_repository->objects->objectdir)
+ if (!the_repository->objects->odb)
BUG("git environment hasn't been setup");
- return the_repository->objects->objectdir;
+ return the_repository->objects->odb->path;
}
int odb_mkstemp(struct strbuf *temp_filename, const char *pattern)
diff --git a/fast-import.c b/fast-import.c
index 6988668..b7ba755 100644
--- a/fast-import.c
+++ b/fast-import.c
@@ -1,157 +1,3 @@
-/*
-(See Documentation/git-fast-import.txt for maintained documentation.)
-Format of STDIN stream:
-
- stream ::= cmd*;
-
- cmd ::= new_blob
- | new_commit
- | new_tag
- | reset_branch
- | checkpoint
- | progress
- ;
-
- new_blob ::= 'blob' lf
- mark?
- file_content;
- file_content ::= data;
-
- new_commit ::= 'commit' sp ref_str lf
- mark?
- ('author' (sp name)? sp '<' email '>' sp when lf)?
- 'committer' (sp name)? sp '<' email '>' sp when lf
- commit_msg
- ('from' sp commit-ish lf)?
- ('merge' sp commit-ish lf)*
- (file_change | ls)*
- lf?;
- commit_msg ::= data;
-
- ls ::= 'ls' sp '"' quoted(path) '"' lf;
-
- file_change ::= file_clr
- | file_del
- | file_rnm
- | file_cpy
- | file_obm
- | file_inm;
- file_clr ::= 'deleteall' lf;
- file_del ::= 'D' sp path_str lf;
- file_rnm ::= 'R' sp path_str sp path_str lf;
- file_cpy ::= 'C' sp path_str sp path_str lf;
- file_obm ::= 'M' sp mode sp (hexsha1 | idnum) sp path_str lf;
- file_inm ::= 'M' sp mode sp 'inline' sp path_str lf
- data;
- note_obm ::= 'N' sp (hexsha1 | idnum) sp commit-ish lf;
- note_inm ::= 'N' sp 'inline' sp commit-ish lf
- data;
-
- new_tag ::= 'tag' sp tag_str lf
- 'from' sp commit-ish lf
- ('tagger' (sp name)? sp '<' email '>' sp when lf)?
- tag_msg;
- tag_msg ::= data;
-
- reset_branch ::= 'reset' sp ref_str lf
- ('from' sp commit-ish lf)?
- lf?;
-
- checkpoint ::= 'checkpoint' lf
- lf?;
-
- progress ::= 'progress' sp not_lf* lf
- lf?;
-
- # note: the first idnum in a stream should be 1 and subsequent
- # idnums should not have gaps between values as this will cause
- # the stream parser to reserve space for the gapped values. An
- # idnum can be updated in the future to a new object by issuing
- # a new mark directive with the old idnum.
- #
- mark ::= 'mark' sp idnum lf;
- data ::= (delimited_data | exact_data)
- lf?;
-
- # note: delim may be any string but must not contain lf.
- # data_line may contain any data but must not be exactly
- # delim.
- delimited_data ::= 'data' sp '<<' delim lf
- (data_line lf)*
- delim lf;
-
- # note: declen indicates the length of binary_data in bytes.
- # declen does not include the lf preceding the binary data.
- #
- exact_data ::= 'data' sp declen lf
- binary_data;
-
- # note: quoted strings are C-style quoting supporting \c for
- # common escapes of 'c' (e..g \n, \t, \\, \") or \nnn where nnn
- # is the signed byte value in octal. Note that the only
- # characters which must actually be escaped to protect the
- # stream formatting is: \, " and LF. Otherwise these values
- # are UTF8.
- #
- commit-ish ::= (ref_str | hexsha1 | sha1exp_str | idnum);
- ref_str ::= ref;
- sha1exp_str ::= sha1exp;
- tag_str ::= tag;
- path_str ::= path | '"' quoted(path) '"' ;
- mode ::= '100644' | '644'
- | '100755' | '755'
- | '120000'
- ;
-
- declen ::= # unsigned 32 bit value, ascii base10 notation;
- bigint ::= # unsigned integer value, ascii base10 notation;
- binary_data ::= # file content, not interpreted;
-
- when ::= raw_when | rfc2822_when;
- raw_when ::= ts sp tz;
- rfc2822_when ::= # Valid RFC 2822 date and time;
-
- sp ::= # ASCII space character;
- lf ::= # ASCII newline (LF) character;
-
- # note: a colon (':') must precede the numerical value assigned to
- # an idnum. This is to distinguish it from a ref or tag name as
- # GIT does not permit ':' in ref or tag strings.
- #
- idnum ::= ':' bigint;
- path ::= # GIT style file path, e.g. "a/b/c";
- ref ::= # GIT ref name, e.g. "refs/heads/MOZ_GECKO_EXPERIMENT";
- tag ::= # GIT tag name, e.g. "FIREFOX_1_5";
- sha1exp ::= # Any valid GIT SHA1 expression;
- hexsha1 ::= # SHA1 in hexadecimal format;
-
- # note: name and email are UTF8 strings, however name must not
- # contain '<' or lf and email must not contain any of the
- # following: '<', '>', lf.
- #
- name ::= # valid GIT author/committer name;
- email ::= # valid GIT author/committer email;
- ts ::= # time since the epoch in seconds, ascii base10 notation;
- tz ::= # GIT style timezone;
-
- # note: comments, get-mark, ls-tree, and cat-blob requests may
- # appear anywhere in the input, except within a data command. Any
- # form of the data command always escapes the related input from
- # comment processing.
- #
- # In case it is not clear, the '#' that starts the comment
- # must be the first character on that line (an lf
- # preceded it).
- #
-
- get_mark ::= 'get-mark' sp idnum lf;
- cat_blob ::= 'cat-blob' sp (hexsha1 | idnum) lf;
- ls_tree ::= 'ls' sp (hexsha1 | idnum) sp path_str lf;
-
- comment ::= '#' not_lf* lf;
- not_lf ::= # Any byte that is not ASCII newline (LF);
-*/
-
#include "builtin.h"
#include "cache.h"
#include "repository.h"
@@ -1968,6 +1814,13 @@ static void parse_mark(void)
next_mark = 0;
}
+static void parse_original_identifier(void)
+{
+ const char *v;
+ if (skip_prefix(command_buf.buf, "original-oid ", &v))
+ read_next_command();
+}
+
static int parse_data(struct strbuf *sb, uintmax_t limit, uintmax_t *len_res)
{
const char *data;
@@ -2110,6 +1963,7 @@ static void parse_new_blob(void)
{
read_next_command();
parse_mark();
+ parse_original_identifier();
parse_and_store_blob(&last_blob, NULL, next_mark);
}
@@ -2733,6 +2587,7 @@ static void parse_new_commit(const char *arg)
read_next_command();
parse_mark();
+ parse_original_identifier();
if (skip_prefix(command_buf.buf, "author ", &v)) {
author = parse_ident(v);
read_next_command();
@@ -2865,6 +2720,9 @@ static void parse_new_tag(const char *arg)
die("Invalid ref name or SHA1 expression: %s", from);
read_next_command();
+ /* original-oid ... */
+ parse_original_identifier();
+
/* tagger ... */
if (skip_prefix(command_buf.buf, "tagger ", &v)) {
tagger = parse_ident(v);
diff --git a/fetch-pack.c b/fetch-pack.c
index 9691046..dd6700b 100644
--- a/fetch-pack.c
+++ b/fetch-pack.c
@@ -637,23 +637,6 @@ struct loose_object_iter {
};
/*
- * If the number of refs is not larger than the number of loose objects,
- * this function stops inserting.
- */
-static int add_loose_objects_to_set(const struct object_id *oid,
- const char *path,
- void *data)
-{
- struct loose_object_iter *iter = data;
- oidset_insert(iter->loose_object_set, oid);
- if (iter->refs == NULL)
- return 1;
-
- iter->refs = iter->refs->next;
- return 0;
-}
-
-/*
* Mark recent commits available locally and reachable from a local ref as
* COMPLETE. If args->no_dependents is false, also mark COMPLETE remote refs as
* COMMON_REF (otherwise, we are not planning to participate in negotiation, and
@@ -670,30 +653,14 @@ static void mark_complete_and_common_ref(struct fetch_negotiator *negotiator,
struct ref *ref;
int old_save_commit_buffer = save_commit_buffer;
timestamp_t cutoff = 0;
- struct oidset loose_oid_set = OIDSET_INIT;
- int use_oidset = 0;
- struct loose_object_iter iter = {&loose_oid_set, *refs};
-
- /* Enumerate all loose objects or know refs are not so many. */
- use_oidset = !for_each_loose_object(add_loose_objects_to_set,
- &iter, 0);
save_commit_buffer = 0;
for (ref = *refs; ref; ref = ref->next) {
struct object *o;
- unsigned int flags = OBJECT_INFO_QUICK;
- if (use_oidset &&
- !oidset_contains(&loose_oid_set, &ref->old_oid)) {
- /*
- * I know this does not exist in the loose form,
- * so check if it exists in a non-loose form.
- */
- flags |= OBJECT_INFO_IGNORE_LOOSE;
- }
-
- if (!has_object_file_with_flags(&ref->old_oid, flags))
+ if (!has_object_file_with_flags(&ref->old_oid,
+ OBJECT_INFO_QUICK))
continue;
o = parse_object(the_repository, &ref->old_oid);
if (!o)
@@ -710,8 +677,6 @@ static void mark_complete_and_common_ref(struct fetch_negotiator *negotiator,
}
}
- oidset_clear(&loose_oid_set);
-
if (!args->deepen) {
for_each_ref(mark_complete_oid, NULL);
for_each_cached_alternate(NULL, mark_alternate_complete);
diff --git a/git-compat-util.h b/git-compat-util.h
index 09b0102..b8ace77 100644
--- a/git-compat-util.h
+++ b/git-compat-util.h
@@ -193,10 +193,11 @@
#endif
#if defined(__CYGWIN__)
-#include "compat/cygwin.h"
+#include "compat/win32/path-utils.h"
#endif
#if defined(__MINGW32__)
/* pull in Windows compatibility stuff */
+#include "compat/win32/path-utils.h"
#include "compat/mingw.h"
#elif defined(_MSC_VER)
#include "compat/msvc.h"
@@ -721,7 +722,7 @@ extern const char *githstrerror(int herror);
#ifdef NO_MEMMEM
#define memmem gitmemmem
void *gitmemmem(const void *haystack, size_t haystacklen,
- const void *needle, size_t needlelen);
+ const void *needle, size_t needlelen);
#endif
#ifdef OVERRIDE_STRDUP
diff --git a/git-stash.sh b/git-stash.sh
index 94793c1..789ce2f 100755
--- a/git-stash.sh
+++ b/git-stash.sh
@@ -55,6 +55,20 @@ untracked_files () {
git ls-files -o $z $excl_opt -- "$@"
}
+prepare_fallback_ident () {
+ if ! git -c user.useconfigonly=yes var GIT_COMMITTER_IDENT >/dev/null 2>&1
+ then
+ GIT_AUTHOR_NAME="git stash"
+ GIT_AUTHOR_EMAIL=git@stash
+ GIT_COMMITTER_NAME="git stash"
+ GIT_COMMITTER_EMAIL=git@stash
+ export GIT_AUTHOR_NAME
+ export GIT_AUTHOR_EMAIL
+ export GIT_COMMITTER_NAME
+ export GIT_COMMITTER_EMAIL
+ fi
+}
+
clear_stash () {
if test $# != 0
then
@@ -67,6 +81,9 @@ clear_stash () {
}
create_stash () {
+
+ prepare_fallback_ident
+
stash_msg=
untracked=
while test $# != 0
diff --git a/git.c b/git.c
index 2f604a4..4d53a3d 100644
--- a/git.c
+++ b/git.c
@@ -338,27 +338,27 @@ static int handle_alias(int *argcp, const char ***argv)
if (ret >= 0) /* normal exit */
exit(ret);
- die_errno("while expanding alias '%s': '%s'",
- alias_command, alias_string + 1);
+ die_errno(_("while expanding alias '%s': '%s'"),
+ alias_command, alias_string + 1);
}
count = split_cmdline(alias_string, &new_argv);
if (count < 0)
- die("Bad alias.%s string: %s", alias_command,
- split_cmdline_strerror(count));
+ die(_("bad alias.%s string: %s"), alias_command,
+ _(split_cmdline_strerror(count)));
option_count = handle_options(&new_argv, &count, &envchanged);
if (envchanged)
- die("alias '%s' changes environment variables.\n"
- "You can use '!git' in the alias to do this",
- alias_command);
+ die(_("alias '%s' changes environment variables.\n"
+ "You can use '!git' in the alias to do this"),
+ alias_command);
memmove(new_argv - option_count, new_argv,
count * sizeof(char *));
new_argv -= option_count;
if (count < 1)
- die("empty alias for %s", alias_command);
+ die(_("empty alias for %s"), alias_command);
if (!strcmp(alias_command, new_argv[0]))
- die("recursive alias: %s", alias_command);
+ die(_("recursive alias: %s"), alias_command);
trace_argv_printf(new_argv,
"trace: alias expansion: %s =>",
@@ -409,7 +409,7 @@ static int run_builtin(struct cmd_struct *p, int argc, const char **argv)
if (!help && get_super_prefix()) {
if (!(p->option & SUPPORT_SUPER_PREFIX))
- die("%s doesn't support --super-prefix", p->cmd);
+ die(_("%s doesn't support --super-prefix"), p->cmd);
}
if (!help && p->option & NEED_WORK_TREE)
@@ -433,11 +433,11 @@ static int run_builtin(struct cmd_struct *p, int argc, const char **argv)
/* Check for ENOSPC and EIO errors.. */
if (fflush(stdout))
- die_errno("write failure on standard output");
+ die_errno(_("write failure on standard output"));
if (ferror(stdout))
- die("unknown write failure on standard output");
+ die(_("unknown write failure on standard output"));
if (fclose(stdout))
- die_errno("close failed on standard output");
+ die_errno(_("close failed on standard output"));
return 0;
}
@@ -654,7 +654,7 @@ static void execv_dashed_external(const char **argv)
int status;
if (get_super_prefix())
- die("%s doesn't support --super-prefix", argv[0]);
+ die(_("%s doesn't support --super-prefix"), argv[0]);
if (use_pager == -1 && !is_builtin(argv[0]))
use_pager = check_pager_config(argv[0]);
@@ -766,7 +766,7 @@ int cmd_main(int argc, const char **argv)
if (skip_prefix(cmd, "git-", &cmd)) {
argv[0] = cmd;
handle_builtin(argc, argv);
- die("cannot handle %s as a builtin", cmd);
+ die(_("cannot handle %s as a builtin"), cmd);
}
/* Look for flags.. */
@@ -779,7 +779,7 @@ int cmd_main(int argc, const char **argv)
} else {
/* The user didn't specify a command; give them help */
commit_pager_choice();
- printf("usage: %s\n\n", git_usage_string);
+ printf(_("usage: %s\n\n"), git_usage_string);
list_common_cmds_help();
printf("\n%s\n", _(git_more_info_string));
exit(1);
diff --git a/grep.c b/grep.c
index 4db1510..0d50598 100644
--- a/grep.c
+++ b/grep.c
@@ -1805,7 +1805,7 @@ static int grep_source_1(struct grep_opt *opt, struct grep_source *gs, int colle
* is not thread-safe.
*/
grep_attr_lock();
- textconv = userdiff_get_textconv(gs->driver);
+ textconv = userdiff_get_textconv(opt->repo, gs->driver);
grep_attr_unlock();
}
diff --git a/help.c b/help.c
index 4745b32..ff05fd2 100644
--- a/help.c
+++ b/help.c
@@ -83,8 +83,9 @@ static void print_command_list(const struct cmdname_help *cmds,
for (i = 0; cmds[i].name; i++) {
if (cmds[i].category & mask) {
+ size_t len = strlen(cmds[i].name);
printf(" %s ", cmds[i].name);
- mput_char(' ', longest - strlen(cmds[i].name));
+ mput_char(' ', longest > len ? longest - len : 1);
puts(_(cmds[i].help));
}
}
@@ -526,6 +527,13 @@ void list_all_cmds_help(void)
git_config(get_alias, &alias_list);
string_list_sort(&alias_list);
+
+ for (i = 0; i < alias_list.nr; i++) {
+ size_t len = strlen(alias_list.items[i].string);
+ if (longest < len)
+ longest = len;
+ }
+
if (alias_list.nr) {
printf("\n%s\n", _("Command aliases"));
ALLOC_ARRAY(aliases, alias_list.nr + 1);
diff --git a/help.h b/help.h
index 9eab6a3..a141e20 100644
--- a/help.h
+++ b/help.h
@@ -15,7 +15,7 @@ struct cmdnames {
static inline void mput_char(char c, unsigned int num)
{
- while(num--)
+ while (num--)
putchar(c);
}
diff --git a/http-backend.c b/http-backend.c
index 9e894f1..29e68e3 100644
--- a/http-backend.c
+++ b/http-backend.c
@@ -486,6 +486,8 @@ static void run_service(const char **argv, int buffer_input)
if (buffer_input || gzipped_request || req_len >= 0)
cld.in = -1;
cld.git_cmd = 1;
+ cld.clean_on_exit = 1;
+ cld.wait_after_clean = 1;
if (start_command(&cld))
exit(1);
diff --git a/http-walker.c b/http-walker.c
index b3334bf..0a392c8 100644
--- a/http-walker.c
+++ b/http-walker.c
@@ -547,7 +547,7 @@ static int fetch_object(struct walker *walker, unsigned char *sha1)
ret = error("File %s has bad hash", hex);
} else if (req->rename < 0) {
struct strbuf buf = STRBUF_INIT;
- sha1_file_name(the_repository, &buf, req->sha1);
+ loose_object_path(the_repository, &buf, req->sha1);
ret = error("unable to write sha1 filename %s", buf.buf);
strbuf_release(&buf);
}
diff --git a/http.c b/http.c
index eacc2a7..0b6807c 100644
--- a/http.c
+++ b/http.c
@@ -48,6 +48,7 @@ char curl_errorstr[CURL_ERROR_SIZE];
static int curl_ssl_verify = -1;
static int curl_ssl_try;
+static const char *curl_http_version = NULL;
static const char *ssl_cert;
static const char *ssl_cipherlist;
static const char *ssl_version;
@@ -284,6 +285,9 @@ static void process_curl_messages(void)
static int http_options(const char *var, const char *value, void *cb)
{
+ if (!strcmp("http.version", var)) {
+ return git_config_string(&curl_http_version, var, value);
+ }
if (!strcmp("http.sslverify", var)) {
curl_ssl_verify = git_config_bool(var, value);
return 0;
@@ -789,6 +793,31 @@ static long get_curl_allowed_protocols(int from_user)
}
#endif
+#if LIBCURL_VERSION_NUM >=0x072f00
+static int get_curl_http_version_opt(const char *version_string, long *opt)
+{
+ int i;
+ static struct {
+ const char *name;
+ long opt_token;
+ } choice[] = {
+ { "HTTP/1.1", CURL_HTTP_VERSION_1_1 },
+ { "HTTP/2", CURL_HTTP_VERSION_2 }
+ };
+
+ for (i = 0; i < ARRAY_SIZE(choice); i++) {
+ if (!strcmp(version_string, choice[i].name)) {
+ *opt = choice[i].opt_token;
+ return 0;
+ }
+ }
+
+ warning("unknown value given to http.version: '%s'", version_string);
+ return -1; /* not found */
+}
+
+#endif
+
static CURL *get_curl_handle(void)
{
CURL *result = curl_easy_init();
@@ -806,6 +835,16 @@ static CURL *get_curl_handle(void)
curl_easy_setopt(result, CURLOPT_SSL_VERIFYHOST, 2);
}
+#if LIBCURL_VERSION_NUM >= 0x072f00 // 7.47.0
+ if (curl_http_version) {
+ long opt;
+ if (!get_curl_http_version_opt(curl_http_version, &opt)) {
+ /* Set request use http version */
+ curl_easy_setopt(result, CURLOPT_HTTP_VERSION, opt);
+ }
+ }
+#endif
+
#if LIBCURL_VERSION_NUM >= 0x070907
curl_easy_setopt(result, CURLOPT_NETRC, CURL_NETRC_OPTIONAL);
#endif
@@ -2314,7 +2353,7 @@ struct http_object_request *new_http_object_request(const char *base_url,
hashcpy(freq->sha1, sha1);
freq->localfile = -1;
- sha1_file_name(the_repository, &filename, sha1);
+ loose_object_path(the_repository, &filename, sha1);
strbuf_addf(&freq->tmpfile, "%s.temp", filename.buf);
strbuf_addf(&prevfile, "%s.prev", filename.buf);
@@ -2465,7 +2504,7 @@ int finish_http_object_request(struct http_object_request *freq)
unlink_or_warn(freq->tmpfile.buf);
return -1;
}
- sha1_file_name(the_repository, &filename, freq->sha1);
+ loose_object_path(the_repository, &filename, freq->sha1);
freq->rename = finalize_object_file(freq->tmpfile.buf, filename.buf);
strbuf_release(&filename);
diff --git a/line-log.c b/line-log.c
index d1d429d..24e2173 100644
--- a/line-log.c
+++ b/line-log.c
@@ -479,7 +479,7 @@ static struct commit *check_single_commit(struct rev_info *revs)
struct object *obj = revs->pending.objects[i].item;
if (obj->flags & UNINTERESTING)
continue;
- obj = deref_tag(the_repository, obj, NULL, 0);
+ obj = deref_tag(revs->repo, obj, NULL, 0);
if (obj->type != OBJ_COMMIT)
die("Non commit %s?", revs->pending.objects[i].name);
if (commit)
diff --git a/list-objects-filter.c b/list-objects-filter.c
index 765f3df..a62624a 100644
--- a/list-objects-filter.c
+++ b/list-objects-filter.c
@@ -34,6 +34,7 @@ struct filter_blobs_none_data {
};
static enum list_objects_filter_result filter_blobs_none(
+ struct repository *r,
enum list_objects_filter_situation filter_situation,
struct object *obj,
const char *pathname,
@@ -88,6 +89,7 @@ struct filter_trees_none_data {
};
static enum list_objects_filter_result filter_trees_none(
+ struct repository *r,
enum list_objects_filter_situation filter_situation,
struct object *obj,
const char *pathname,
@@ -144,6 +146,7 @@ struct filter_blobs_limit_data {
};
static enum list_objects_filter_result filter_blobs_limit(
+ struct repository *r,
enum list_objects_filter_situation filter_situation,
struct object *obj,
const char *pathname,
@@ -171,7 +174,7 @@ static enum list_objects_filter_result filter_blobs_limit(
assert(obj->type == OBJ_BLOB);
assert((obj->flags & SEEN) == 0);
- t = oid_object_info(the_repository, &obj->oid, &object_length);
+ t = oid_object_info(r, &obj->oid, &object_length);
if (t != OBJ_BLOB) { /* probably OBJ_NONE */
/*
* We DO NOT have the blob locally, so we cannot
@@ -249,6 +252,7 @@ struct filter_sparse_data {
};
static enum list_objects_filter_result filter_sparse(
+ struct repository *r,
enum list_objects_filter_situation filter_situation,
struct object *obj,
const char *pathname,
@@ -268,7 +272,7 @@ static enum list_objects_filter_result filter_sparse(
dtype = DT_DIR;
val = is_excluded_from_list(pathname, strlen(pathname),
filename, &dtype, &filter_data->el,
- &the_index);
+ r->index);
if (val < 0)
val = filter_data->array_frame[filter_data->nr].defval;
@@ -331,7 +335,7 @@ static enum list_objects_filter_result filter_sparse(
dtype = DT_REG;
val = is_excluded_from_list(pathname, strlen(pathname),
filename, &dtype, &filter_data->el,
- &the_index);
+ r->index);
if (val < 0)
val = frame->defval;
if (val > 0) {
diff --git a/list-objects-filter.h b/list-objects-filter.h
index 52b4a84..1d45a4a 100644
--- a/list-objects-filter.h
+++ b/list-objects-filter.h
@@ -4,6 +4,7 @@
struct list_objects_filter_options;
struct object;
struct oidset;
+struct repository;
/*
* During list-object traversal we allow certain objects to be
@@ -60,6 +61,7 @@ enum list_objects_filter_situation {
};
typedef enum list_objects_filter_result (*filter_object_fn)(
+ struct repository *r,
enum list_objects_filter_situation filter_situation,
struct object *obj,
const char *pathname,
diff --git a/list-objects.c b/list-objects.c
index c41cc80..4e27897 100644
--- a/list-objects.c
+++ b/list-objects.c
@@ -55,7 +55,8 @@ static void process_blob(struct traversal_context *ctx,
pathlen = path->len;
strbuf_addstr(path, name);
if ((obj->flags & NOT_USER_GIVEN) && ctx->filter_fn)
- r = ctx->filter_fn(LOFS_BLOB, obj,
+ r = ctx->filter_fn(ctx->revs->repo,
+ LOFS_BLOB, obj,
path->buf, &path->buf[pathlen],
ctx->filter_data);
if (r & LOFR_MARK_SEEN)
@@ -113,7 +114,8 @@ static void process_tree_contents(struct traversal_context *ctx,
while (tree_entry(&desc, &entry)) {
if (match != all_entries_interesting) {
- match = tree_entry_interesting(&entry, base, 0,
+ match = tree_entry_interesting(ctx->revs->repo->index,
+ &entry, base, 0,
&ctx->revs->diffopt.pathspec);
if (match == all_entries_not_interesting)
break;
@@ -122,7 +124,7 @@ static void process_tree_contents(struct traversal_context *ctx,
}
if (S_ISDIR(entry.mode)) {
- struct tree *t = lookup_tree(the_repository, entry.oid);
+ struct tree *t = lookup_tree(ctx->revs->repo, entry.oid);
t->object.flags |= NOT_USER_GIVEN;
process_tree(ctx, t, base, entry.path);
}
@@ -130,7 +132,7 @@ static void process_tree_contents(struct traversal_context *ctx,
process_gitlink(ctx, entry.oid->hash,
base, entry.path);
else {
- struct blob *b = lookup_blob(the_repository, entry.oid);
+ struct blob *b = lookup_blob(ctx->revs->repo, entry.oid);
b->object.flags |= NOT_USER_GIVEN;
process_blob(ctx, b, base, entry.path);
}
@@ -175,7 +177,8 @@ static void process_tree(struct traversal_context *ctx,
strbuf_addstr(base, name);
if ((obj->flags & NOT_USER_GIVEN) && ctx->filter_fn)
- r = ctx->filter_fn(LOFS_BEGIN_TREE, obj,
+ r = ctx->filter_fn(ctx->revs->repo,
+ LOFS_BEGIN_TREE, obj,
base->buf, &base->buf[baselen],
ctx->filter_data);
if (r & LOFR_MARK_SEEN)
@@ -191,7 +194,8 @@ static void process_tree(struct traversal_context *ctx,
process_tree_contents(ctx, tree, base);
if ((obj->flags & NOT_USER_GIVEN) && ctx->filter_fn) {
- r = ctx->filter_fn(LOFS_END_TREE, obj,
+ r = ctx->filter_fn(ctx->revs->repo,
+ LOFS_END_TREE, obj,
base->buf, &base->buf[baselen],
ctx->filter_data);
if (r & LOFR_MARK_SEEN)
diff --git a/ll-merge.c b/ll-merge.c
index 3c8fb91..5b8d46a 100644
--- a/ll-merge.c
+++ b/ll-merge.c
@@ -384,7 +384,9 @@ int ll_merge(mmbuffer_t *result_buf,
if (opts->virtual_ancestor) {
if (driver->recursive)
driver = find_ll_merge_driver(driver->recursive);
- marker_size += 2;
+ }
+ if (opts->extra_marker_size) {
+ marker_size += opts->extra_marker_size;
}
return driver->fn(driver, result_buf, path, ancestor, ancestor_label,
ours, our_label, theirs, their_label,
diff --git a/ll-merge.h b/ll-merge.h
index 6c6e22e..b9e2af1 100644
--- a/ll-merge.h
+++ b/ll-merge.h
@@ -13,6 +13,7 @@ struct ll_merge_options {
unsigned virtual_ancestor : 1;
unsigned variant : 2; /* favor ours, favor theirs, or union merge */
unsigned renormalize : 1;
+ unsigned extra_marker_size;
long xdl_opts;
};
diff --git a/merge-recursive.c b/merge-recursive.c
index acc2f64..59ba4b4 100644
--- a/merge-recursive.c
+++ b/merge-recursive.c
@@ -186,6 +186,7 @@ static int oid_eq(const struct object_id *a, const struct object_id *b)
enum rename_type {
RENAME_NORMAL = 0,
RENAME_VIA_DIR,
+ RENAME_ADD,
RENAME_DELETE,
RENAME_ONE_FILE_TO_ONE,
RENAME_ONE_FILE_TO_TWO,
@@ -228,6 +229,7 @@ static inline void setup_rename_conflict_info(enum rename_type rename_type,
struct stage_data *src_entry1,
struct stage_data *src_entry2)
{
+ int ostage1 = 0, ostage2;
struct rename_conflict_info *ci;
/*
@@ -264,18 +266,22 @@ static inline void setup_rename_conflict_info(enum rename_type rename_type,
dst_entry2->rename_conflict_info = ci;
}
- if (rename_type == RENAME_TWO_FILES_TO_ONE) {
- /*
- * For each rename, there could have been
- * modifications on the side of history where that
- * file was not renamed.
- */
- int ostage1 = o->branch1 == branch1 ? 3 : 2;
- int ostage2 = ostage1 ^ 1;
+ /*
+ * For each rename, there could have been
+ * modifications on the side of history where that
+ * file was not renamed.
+ */
+ if (rename_type == RENAME_ADD ||
+ rename_type == RENAME_TWO_FILES_TO_ONE) {
+ ostage1 = o->branch1 == branch1 ? 3 : 2;
ci->ren1_other.path = pair1->one->path;
oidcpy(&ci->ren1_other.oid, &src_entry1->stages[ostage1].oid);
ci->ren1_other.mode = src_entry1->stages[ostage1].mode;
+ }
+
+ if (rename_type == RENAME_TWO_FILES_TO_ONE) {
+ ostage2 = ostage1 ^ 1;
ci->ren2_other.path = pair2->one->path;
oidcpy(&ci->ren2_other.oid, &src_entry2->stages[ostage2].oid);
@@ -463,7 +469,8 @@ static void get_files_dirs(struct merge_options *o, struct tree *tree)
{
struct pathspec match_all;
memset(&match_all, 0, sizeof(match_all));
- read_tree_recursive(tree, "", 0, 0, &match_all, save_files_dirs, o);
+ read_tree_recursive(the_repository, tree, "", 0, 0,
+ &match_all, save_files_dirs, o);
}
static int get_tree_entry_if_blob(const struct object_id *tree,
@@ -690,27 +697,6 @@ static int update_stages(struct merge_options *opt, const char *path,
return 0;
}
-static int update_stages_for_stage_data(struct merge_options *opt,
- const char *path,
- const struct stage_data *stage_data)
-{
- struct diff_filespec o, a, b;
-
- o.mode = stage_data->stages[1].mode;
- oidcpy(&o.oid, &stage_data->stages[1].oid);
-
- a.mode = stage_data->stages[2].mode;
- oidcpy(&a.oid, &stage_data->stages[2].oid);
-
- b.mode = stage_data->stages[3].mode;
- oidcpy(&b.oid, &stage_data->stages[3].oid);
-
- return update_stages(opt, path,
- is_null_oid(&o.oid) ? NULL : &o,
- is_null_oid(&a.oid) ? NULL : &a,
- is_null_oid(&b.oid) ? NULL : &b);
-}
-
static void update_entry(struct stage_data *entry,
struct diff_filespec *o,
struct diff_filespec *a,
@@ -1058,7 +1044,8 @@ static int merge_3way(struct merge_options *o,
const struct diff_filespec *a,
const struct diff_filespec *b,
const char *branch1,
- const char *branch2)
+ const char *branch2,
+ const int extra_marker_size)
{
mmfile_t orig, src1, src2;
struct ll_merge_options ll_opts = {0};
@@ -1066,6 +1053,7 @@ static int merge_3way(struct merge_options *o,
int merge_status;
ll_opts.renormalize = o->renormalize;
+ ll_opts.extra_marker_size = extra_marker_size;
ll_opts.xdl_opts = o->xdl_opts;
if (o->call_depth) {
@@ -1301,6 +1289,7 @@ static int merge_mode_and_contents(struct merge_options *o,
const char *filename,
const char *branch1,
const char *branch2,
+ const int extra_marker_size,
struct merge_file_info *result)
{
if (o->branch1 != branch1) {
@@ -1311,7 +1300,8 @@ static int merge_mode_and_contents(struct merge_options *o,
*/
return merge_mode_and_contents(o, one, b, a,
filename,
- branch2, branch1, result);
+ branch2, branch1,
+ extra_marker_size, result);
}
result->merge = 0;
@@ -1352,7 +1342,8 @@ static int merge_mode_and_contents(struct merge_options *o,
int ret = 0, merge_status;
merge_status = merge_3way(o, &result_buf, one, a, b,
- branch1, branch2);
+ branch1, branch2,
+ extra_marker_size);
if ((merge_status < 0) || !result_buf.ptr)
ret = err(o, _("Failed to execute internal merge"));
@@ -1555,80 +1546,203 @@ static struct diff_filespec *filespec_from_entry(struct diff_filespec *target,
return target;
}
-static int handle_file(struct merge_options *o,
- struct diff_filespec *rename,
- int stage,
- struct rename_conflict_info *ci)
+static int handle_file_collision(struct merge_options *o,
+ const char *collide_path,
+ const char *prev_path1,
+ const char *prev_path2,
+ const char *branch1, const char *branch2,
+ const struct object_id *a_oid,
+ unsigned int a_mode,
+ const struct object_id *b_oid,
+ unsigned int b_mode)
{
- char *dst_name = rename->path;
- struct stage_data *dst_entry;
- const char *cur_branch, *other_branch;
- struct diff_filespec other;
- struct diff_filespec *add;
- int ret;
+ struct merge_file_info mfi;
+ struct diff_filespec null, a, b;
+ char *alt_path = NULL;
+ const char *update_path = collide_path;
- if (stage == 2) {
- dst_entry = ci->dst_entry1;
- cur_branch = ci->branch1;
- other_branch = ci->branch2;
- } else {
- dst_entry = ci->dst_entry2;
- cur_branch = ci->branch2;
- other_branch = ci->branch1;
+ /*
+ * It's easiest to get the correct things into stage 2 and 3, and
+ * to make sure that the content merge puts HEAD before the other
+ * branch if we just ensure that branch1 == o->branch1. So, simply
+ * flip arguments around if we don't have that.
+ */
+ if (branch1 != o->branch1) {
+ return handle_file_collision(o, collide_path,
+ prev_path2, prev_path1,
+ branch2, branch1,
+ b_oid, b_mode,
+ a_oid, a_mode);
}
- add = filespec_from_entry(&other, dst_entry, stage ^ 1);
- if (add) {
- int ren_src_was_dirty = was_dirty(o, rename->path);
- char *add_name = unique_path(o, rename->path, other_branch);
- if (update_file(o, 0, &add->oid, add->mode, add_name))
- return -1;
+ /*
+ * In the recursive case, we just opt to undo renames
+ */
+ if (o->call_depth && (prev_path1 || prev_path2)) {
+ /* Put first file (a_oid, a_mode) in its original spot */
+ if (prev_path1) {
+ if (update_file(o, 1, a_oid, a_mode, prev_path1))
+ return -1;
+ } else {
+ if (update_file(o, 1, a_oid, a_mode, collide_path))
+ return -1;
+ }
- if (ren_src_was_dirty) {
- output(o, 1, _("Refusing to lose dirty file at %s"),
- rename->path);
+ /* Put second file (b_oid, b_mode) in its original spot */
+ if (prev_path2) {
+ if (update_file(o, 1, b_oid, b_mode, prev_path2))
+ return -1;
+ } else {
+ if (update_file(o, 1, b_oid, b_mode, collide_path))
+ return -1;
}
+
+ /* Don't leave something at collision path if unrenaming both */
+ if (prev_path1 && prev_path2)
+ remove_file(o, 1, collide_path, 0);
+
+ return 0;
+ }
+
+ /* Remove rename sources if rename/add or rename/rename(2to1) */
+ if (prev_path1)
+ remove_file(o, 1, prev_path1,
+ o->call_depth || would_lose_untracked(prev_path1));
+ if (prev_path2)
+ remove_file(o, 1, prev_path2,
+ o->call_depth || would_lose_untracked(prev_path2));
+
+ /*
+ * Remove the collision path, if it wouldn't cause dirty contents
+ * or an untracked file to get lost. We'll either overwrite with
+ * merged contents, or just write out to differently named files.
+ */
+ if (was_dirty(o, collide_path)) {
+ output(o, 1, _("Refusing to lose dirty file at %s"),
+ collide_path);
+ update_path = alt_path = unique_path(o, collide_path, "merged");
+ } else if (would_lose_untracked(collide_path)) {
/*
- * Because the double negatives somehow keep confusing me...
- * 1) update_wd iff !ren_src_was_dirty.
- * 2) no_wd iff !update_wd
- * 3) so, no_wd == !!ren_src_was_dirty == ren_src_was_dirty
+ * Only way we get here is if both renames were from
+ * a directory rename AND user had an untracked file
+ * at the location where both files end up after the
+ * two directory renames. See testcase 10d of t6043.
*/
- remove_file(o, 0, rename->path, ren_src_was_dirty);
- dst_name = unique_path(o, rename->path, cur_branch);
+ output(o, 1, _("Refusing to lose untracked file at "
+ "%s, even though it's in the way."),
+ collide_path);
+ update_path = alt_path = unique_path(o, collide_path, "merged");
} else {
- if (dir_in_way(rename->path, !o->call_depth, 0)) {
- dst_name = unique_path(o, rename->path, cur_branch);
- output(o, 1, _("%s is a directory in %s adding as %s instead"),
- rename->path, other_branch, dst_name);
- } else if (!o->call_depth &&
- would_lose_untracked(rename->path)) {
- dst_name = unique_path(o, rename->path, cur_branch);
- output(o, 1, _("Refusing to lose untracked file at %s; "
- "adding as %s instead"),
- rename->path, dst_name);
- }
+ /*
+ * FIXME: It's possible that the two files are identical
+ * and that the current working copy happens to match, in
+ * which case we are unnecessarily touching the working
+ * tree file. It's not a likely enough scenario that I
+ * want to code up the checks for it and a better fix is
+ * available if we restructure how unpack_trees() and
+ * merge-recursive interoperate anyway, so punting for
+ * now...
+ */
+ remove_file(o, 0, collide_path, 0);
}
- if ((ret = update_file(o, 0, &rename->oid, rename->mode, dst_name)))
- ; /* fall through, do allow dst_name to be released */
- else if (stage == 2)
- ret = update_stages(o, rename->path, NULL, rename, add);
- else
- ret = update_stages(o, rename->path, NULL, add, rename);
- if (dst_name != rename->path)
- free(dst_name);
+ /* Store things in diff_filespecs for functions that need it */
+ memset(&a, 0, sizeof(struct diff_filespec));
+ memset(&b, 0, sizeof(struct diff_filespec));
+ null.path = a.path = b.path = (char *)collide_path;
+ oidcpy(&null.oid, &null_oid);
+ null.mode = 0;
+ oidcpy(&a.oid, a_oid);
+ a.mode = a_mode;
+ a.oid_valid = 1;
+ oidcpy(&b.oid, b_oid);
+ b.mode = b_mode;
+ b.oid_valid = 1;
- return ret;
+ if (merge_mode_and_contents(o, &null, &a, &b, collide_path,
+ branch1, branch2, o->call_depth * 2, &mfi))
+ return -1;
+ mfi.clean &= !alt_path;
+ if (update_file(o, mfi.clean, &mfi.oid, mfi.mode, update_path))
+ return -1;
+ if (!mfi.clean && !o->call_depth &&
+ update_stages(o, collide_path, NULL, &a, &b))
+ return -1;
+ free(alt_path);
+ /*
+ * FIXME: If both a & b both started with conflicts (only possible
+ * if they came from a rename/rename(2to1)), but had IDENTICAL
+ * contents including those conflicts, then in the next line we claim
+ * it was clean. If someone cares about this case, we should have the
+ * caller notify us if we started with conflicts.
+ */
+ return mfi.clean;
+}
+
+static int handle_rename_add(struct merge_options *o,
+ struct rename_conflict_info *ci)
+{
+ /* a was renamed to c, and a separate c was added. */
+ struct diff_filespec *a = ci->pair1->one;
+ struct diff_filespec *c = ci->pair1->two;
+ char *path = c->path;
+ char *prev_path_desc;
+ struct merge_file_info mfi;
+
+ int other_stage = (ci->branch1 == o->branch1 ? 3 : 2);
+
+ output(o, 1, _("CONFLICT (rename/add): "
+ "Rename %s->%s in %s. Added %s in %s"),
+ a->path, c->path, ci->branch1,
+ c->path, ci->branch2);
+
+ prev_path_desc = xstrfmt("version of %s from %s", path, a->path);
+ if (merge_mode_and_contents(o, a, c, &ci->ren1_other, prev_path_desc,
+ o->branch1, o->branch2,
+ 1 + o->call_depth * 2, &mfi))
+ return -1;
+ free(prev_path_desc);
+
+ return handle_file_collision(o,
+ c->path, a->path, NULL,
+ ci->branch1, ci->branch2,
+ &mfi.oid, mfi.mode,
+ &ci->dst_entry1->stages[other_stage].oid,
+ ci->dst_entry1->stages[other_stage].mode);
+}
+
+static char *find_path_for_conflict(struct merge_options *o,
+ const char *path,
+ const char *branch1,
+ const char *branch2)
+{
+ char *new_path = NULL;
+ if (dir_in_way(path, !o->call_depth, 0)) {
+ new_path = unique_path(o, path, branch1);
+ output(o, 1, _("%s is a directory in %s adding "
+ "as %s instead"),
+ path, branch2, new_path);
+ } else if (would_lose_untracked(path)) {
+ new_path = unique_path(o, path, branch1);
+ output(o, 1, _("Refusing to lose untracked file"
+ " at %s; adding as %s instead"),
+ path, new_path);
+ }
+
+ return new_path;
}
static int handle_rename_rename_1to2(struct merge_options *o,
struct rename_conflict_info *ci)
{
/* One file was renamed in both branches, but to different names. */
+ struct merge_file_info mfi;
+ struct diff_filespec other;
+ struct diff_filespec *add;
struct diff_filespec *one = ci->pair1->one;
struct diff_filespec *a = ci->pair1->two;
struct diff_filespec *b = ci->pair2->two;
+ char *path_desc;
output(o, 1, _("CONFLICT (rename/rename): "
"Rename \"%s\"->\"%s\" in branch \"%s\" "
@@ -1636,14 +1750,16 @@ static int handle_rename_rename_1to2(struct merge_options *o,
one->path, a->path, ci->branch1,
one->path, b->path, ci->branch2,
o->call_depth ? _(" (left unresolved)") : "");
- if (o->call_depth) {
- struct merge_file_info mfi;
- struct diff_filespec other;
- struct diff_filespec *add;
- if (merge_mode_and_contents(o, one, a, b, one->path,
- ci->branch1, ci->branch2, &mfi))
- return -1;
+ path_desc = xstrfmt("%s and %s, both renamed from %s",
+ a->path, b->path, one->path);
+ if (merge_mode_and_contents(o, one, a, b, path_desc,
+ ci->branch1, ci->branch2,
+ o->call_depth * 2, &mfi))
+ return -1;
+ free(path_desc);
+
+ if (o->call_depth) {
/*
* FIXME: For rename/add-source conflicts (if we could detect
* such), this is wrong. We should instead find a unique
@@ -1675,8 +1791,50 @@ static int handle_rename_rename_1to2(struct merge_options *o,
}
else
remove_file_from_cache(b->path);
- } else if (handle_file(o, a, 2, ci) || handle_file(o, b, 3, ci))
- return -1;
+ } else {
+ /*
+ * For each destination path, we need to see if there is a
+ * rename/add collision. If not, we can write the file out
+ * to the specified location.
+ */
+ add = filespec_from_entry(&other, ci->dst_entry1, 2 ^ 1);
+ if (add) {
+ if (handle_file_collision(o, a->path,
+ NULL, NULL,
+ ci->branch1, ci->branch2,
+ &mfi.oid, mfi.mode,
+ &add->oid, add->mode) < 0)
+ return -1;
+ } else {
+ char *new_path = find_path_for_conflict(o, a->path,
+ ci->branch1,
+ ci->branch2);
+ if (update_file(o, 0, &mfi.oid, mfi.mode, new_path ? new_path : a->path))
+ return -1;
+ free(new_path);
+ if (update_stages(o, a->path, NULL, a, NULL))
+ return -1;
+ }
+
+ add = filespec_from_entry(&other, ci->dst_entry2, 3 ^ 1);
+ if (add) {
+ if (handle_file_collision(o, b->path,
+ NULL, NULL,
+ ci->branch1, ci->branch2,
+ &add->oid, add->mode,
+ &mfi.oid, mfi.mode) < 0)
+ return -1;
+ } else {
+ char *new_path = find_path_for_conflict(o, b->path,
+ ci->branch2,
+ ci->branch1);
+ if (update_file(o, 0, &mfi.oid, mfi.mode, new_path ? new_path : b->path))
+ return -1;
+ free(new_path);
+ if (update_stages(o, b->path, NULL, NULL, b))
+ return -1;
+ }
+ }
return 0;
}
@@ -1694,7 +1852,6 @@ static int handle_rename_rename_2to1(struct merge_options *o,
char *path_side_2_desc;
struct merge_file_info mfi_c1;
struct merge_file_info mfi_c2;
- int ret;
output(o, 1, _("CONFLICT (rename/rename): "
"Rename %s->%s in %s. "
@@ -1702,79 +1859,22 @@ static int handle_rename_rename_2to1(struct merge_options *o,
a->path, c1->path, ci->branch1,
b->path, c2->path, ci->branch2);
- remove_file(o, 1, a->path, o->call_depth || would_lose_untracked(a->path));
- remove_file(o, 1, b->path, o->call_depth || would_lose_untracked(b->path));
-
path_side_1_desc = xstrfmt("version of %s from %s", path, a->path);
path_side_2_desc = xstrfmt("version of %s from %s", path, b->path);
if (merge_mode_and_contents(o, a, c1, &ci->ren1_other, path_side_1_desc,
- o->branch1, o->branch2, &mfi_c1) ||
+ o->branch1, o->branch2,
+ 1 + o->call_depth * 2, &mfi_c1) ||
merge_mode_and_contents(o, b, &ci->ren2_other, c2, path_side_2_desc,
- o->branch1, o->branch2, &mfi_c2))
+ o->branch1, o->branch2,
+ 1 + o->call_depth * 2, &mfi_c2))
return -1;
free(path_side_1_desc);
free(path_side_2_desc);
- if (o->call_depth) {
- /*
- * If mfi_c1.clean && mfi_c2.clean, then it might make
- * sense to do a two-way merge of those results. But, I
- * think in all cases, it makes sense to have the virtual
- * merge base just undo the renames; they can be detected
- * again later for the non-recursive merge.
- */
- remove_file(o, 0, path, 0);
- ret = update_file(o, 0, &mfi_c1.oid, mfi_c1.mode, a->path);
- if (!ret)
- ret = update_file(o, 0, &mfi_c2.oid, mfi_c2.mode,
- b->path);
- } else {
- char *new_path1 = unique_path(o, path, ci->branch1);
- char *new_path2 = unique_path(o, path, ci->branch2);
- output(o, 1, _("Renaming %s to %s and %s to %s instead"),
- a->path, new_path1, b->path, new_path2);
- if (was_dirty(o, path))
- output(o, 1, _("Refusing to lose dirty file at %s"),
- path);
- else if (would_lose_untracked(path))
- /*
- * Only way we get here is if both renames were from
- * a directory rename AND user had an untracked file
- * at the location where both files end up after the
- * two directory renames. See testcase 10d of t6043.
- */
- output(o, 1, _("Refusing to lose untracked file at "
- "%s, even though it's in the way."),
- path);
- else
- remove_file(o, 0, path, 0);
- ret = update_file(o, 0, &mfi_c1.oid, mfi_c1.mode, new_path1);
- if (!ret)
- ret = update_file(o, 0, &mfi_c2.oid, mfi_c2.mode,
- new_path2);
- /*
- * unpack_trees() actually populates the index for us for
- * "normal" rename/rename(2to1) situtations so that the
- * correct entries are at the higher stages, which would
- * make the call below to update_stages_for_stage_data
- * unnecessary. However, if either of the renames came
- * from a directory rename, then unpack_trees() will not
- * have gotten the right data loaded into the index, so we
- * need to do so now. (While it'd be tempting to move this
- * call to update_stages_for_stage_data() to
- * apply_directory_rename_modifications(), that would break
- * our intermediate calls to would_lose_untracked() since
- * those rely on the current in-memory index. See also the
- * big "NOTE" in update_stages()).
- */
- if (update_stages_for_stage_data(o, path, ci->dst_entry1))
- ret = -1;
-
- free(new_path2);
- free(new_path1);
- }
-
- return ret;
+ return handle_file_collision(o, path, a->path, b->path,
+ ci->branch1, ci->branch2,
+ &mfi_c1.oid, mfi_c1.mode,
+ &mfi_c2.oid, mfi_c2.mode);
}
/*
@@ -2732,47 +2832,23 @@ static int process_renames(struct merge_options *o,
0 /* update_wd */))
clean_merge = -1;
} else if (!oid_eq(&dst_other.oid, &null_oid)) {
- clean_merge = 0;
- try_merge = 1;
- output(o, 1, _("CONFLICT (rename/add): Rename %s->%s in %s. "
- "%s added in %s"),
- ren1_src, ren1_dst, branch1,
- ren1_dst, branch2);
- if (o->call_depth) {
- struct merge_file_info mfi;
- struct diff_filespec one, a, b;
-
- oidcpy(&one.oid, &null_oid);
- one.mode = 0;
- one.path = ren1->pair->two->path;
-
- oidcpy(&a.oid, &ren1->pair->two->oid);
- a.mode = ren1->pair->two->mode;
- a.path = one.path;
-
- oidcpy(&b.oid, &dst_other.oid);
- b.mode = dst_other.mode;
- b.path = one.path;
-
- if (merge_mode_and_contents(o, &one, &a, &b, ren1_dst,
- branch1, branch2,
- &mfi)) {
- clean_merge = -1;
- goto cleanup_and_return;
- }
- output(o, 1, _("Adding merged %s"), ren1_dst);
- if (update_file(o, 0, &mfi.oid,
- mfi.mode, ren1_dst))
- clean_merge = -1;
- try_merge = 0;
- } else {
- char *new_path = unique_path(o, ren1_dst, branch2);
- output(o, 1, _("Adding as %s instead"), new_path);
- if (update_file(o, 0, &dst_other.oid,
- dst_other.mode, new_path))
- clean_merge = -1;
- free(new_path);
- }
+ /*
+ * Probably not a clean merge, but it's
+ * premature to set clean_merge to 0 here,
+ * because if the rename merges cleanly and
+ * the merge exactly matches the newly added
+ * file, then the merge will be clean.
+ */
+ setup_rename_conflict_info(RENAME_ADD,
+ ren1->pair,
+ NULL,
+ branch1,
+ branch2,
+ ren1->dst_entry,
+ NULL,
+ o,
+ ren1->src_entry,
+ NULL);
} else
try_merge = 1;
@@ -3053,7 +3129,8 @@ static int handle_content_merge(struct merge_options *o,
df_conflict_remains = 1;
}
if (merge_mode_and_contents(o, &one, &a, &b, path,
- o->branch1, o->branch2, &mfi))
+ o->branch1, o->branch2,
+ o->call_depth * 2, &mfi))
return -1;
/*
@@ -3183,6 +3260,15 @@ static int process_entry(struct merge_options *o,
conflict_info->branch2))
clean_merge = -1;
break;
+ case RENAME_ADD:
+ /*
+ * Probably unclean merge, but if the renamed file
+ * merges cleanly and the result can then be
+ * two-way merged cleanly with the added file, I
+ * guess it's a clean merge?
+ */
+ clean_merge = handle_rename_add(o, conflict_info);
+ break;
case RENAME_DELETE:
clean_merge = 0;
if (handle_rename_delete(o,
@@ -3197,9 +3283,14 @@ static int process_entry(struct merge_options *o,
clean_merge = -1;
break;
case RENAME_TWO_FILES_TO_ONE:
- clean_merge = 0;
- if (handle_rename_rename_2to1(o, conflict_info))
- clean_merge = -1;
+ /*
+ * Probably unclean merge, but if the two renamed
+ * files merge cleanly and the two resulting files
+ * can then be two-way merged cleanly, I guess it's
+ * a clean merge?
+ */
+ clean_merge = handle_rename_rename_2to1(o,
+ conflict_info);
break;
default:
entry->processed = 0;
@@ -3267,14 +3358,27 @@ static int process_entry(struct merge_options *o,
clean_merge = -1;
}
} else if (a_oid && b_oid) {
- /* Case C: Added in both (check for same permissions) and */
- /* case D: Modified in both, but differently. */
- int is_dirty = 0; /* unpack_trees would have bailed if dirty */
- clean_merge = handle_content_merge(o, path, is_dirty,
- o_oid, o_mode,
- a_oid, a_mode,
- b_oid, b_mode,
- NULL);
+ if (!o_oid) {
+ /* Case C: Added in both (check for same permissions) */
+ output(o, 1,
+ _("CONFLICT (add/add): Merge conflict in %s"),
+ path);
+ clean_merge = handle_file_collision(o,
+ path, NULL, NULL,
+ o->branch1,
+ o->branch2,
+ a_oid, a_mode,
+ b_oid, b_mode);
+ } else {
+ /* case D: Modified in both, but differently. */
+ int is_dirty = 0; /* unpack_trees would have bailed if dirty */
+ clean_merge = handle_content_merge(o, path,
+ is_dirty,
+ o_oid, o_mode,
+ a_oid, a_mode,
+ b_oid, b_mode,
+ NULL);
+ }
} else if (!o_oid && !a_oid && !b_oid) {
/*
* this entry was deleted altogether. a_mode == 0 means
diff --git a/midx.c b/midx.c
index 2a6a24f..8a505fd 100644
--- a/midx.c
+++ b/midx.c
@@ -931,7 +931,7 @@ cleanup:
void clear_midx_file(struct repository *r)
{
- char *midx = get_midx_filename(r->objects->objectdir);
+ char *midx = get_midx_filename(r->objects->odb->path);
if (r->objects && r->objects->multi_pack_index) {
close_midx(r->objects->multi_pack_index);
diff --git a/notes-cache.c b/notes-cache.c
index d87e7ca..2473314 100644
--- a/notes-cache.c
+++ b/notes-cache.c
@@ -5,7 +5,9 @@
#include "commit.h"
#include "refs.h"
-static int notes_cache_match_validity(const char *ref, const char *validity)
+static int notes_cache_match_validity(struct repository *r,
+ const char *ref,
+ const char *validity)
{
struct object_id oid;
struct commit *commit;
@@ -16,7 +18,7 @@ static int notes_cache_match_validity(const char *ref, const char *validity)
if (read_ref(ref, &oid) < 0)
return 0;
- commit = lookup_commit_reference_gently(the_repository, &oid, 1);
+ commit = lookup_commit_reference_gently(r, &oid, 1);
if (!commit)
return 0;
@@ -30,8 +32,8 @@ static int notes_cache_match_validity(const char *ref, const char *validity)
return ret;
}
-void notes_cache_init(struct notes_cache *c, const char *name,
- const char *validity)
+void notes_cache_init(struct repository *r, struct notes_cache *c,
+ const char *name, const char *validity)
{
struct strbuf ref = STRBUF_INIT;
int flags = NOTES_INIT_WRITABLE;
@@ -40,7 +42,7 @@ void notes_cache_init(struct notes_cache *c, const char *name,
c->validity = xstrdup(validity);
strbuf_addf(&ref, "refs/notes/%s", name);
- if (!notes_cache_match_validity(ref.buf, validity))
+ if (!notes_cache_match_validity(r, ref.buf, validity))
flags |= NOTES_INIT_EMPTY;
init_notes(&c->tree, ref.buf, combine_notes_overwrite, flags);
strbuf_release(&ref);
diff --git a/notes-cache.h b/notes-cache.h
index aeeee84..56f8c98 100644
--- a/notes-cache.h
+++ b/notes-cache.h
@@ -3,13 +3,15 @@
#include "notes.h"
+struct repository;
+
struct notes_cache {
struct notes_tree tree;
char *validity;
};
-void notes_cache_init(struct notes_cache *c, const char *name,
- const char *validity);
+void notes_cache_init(struct repository *r, struct notes_cache *c,
+ const char *name, const char *validity);
int notes_cache_write(struct notes_cache *c);
char *notes_cache_get(struct notes_cache *c, struct object_id *oid, size_t
diff --git a/notes-merge.c b/notes-merge.c
index bd05d50..72688d3 100644
--- a/notes-merge.c
+++ b/notes-merge.c
@@ -18,11 +18,13 @@ struct notes_merge_pair {
struct object_id obj, base, local, remote;
};
-void init_notes_merge_options(struct notes_merge_options *o)
+void init_notes_merge_options(struct repository *r,
+ struct notes_merge_options *o)
{
memset(o, 0, sizeof(struct notes_merge_options));
strbuf_init(&(o->commit_msg), 0);
o->verbosity = NOTES_MERGE_VERBOSITY_DEFAULT;
+ o->repo = r;
}
static int path_to_oid(const char *path, struct object_id *oid)
@@ -127,7 +129,7 @@ static struct notes_merge_pair *diff_tree_remote(struct notes_merge_options *o,
trace_printf("\tdiff_tree_remote(base = %.7s, remote = %.7s)\n",
oid_to_hex(base), oid_to_hex(remote));
- repo_diff_setup(the_repository, &opt);
+ repo_diff_setup(o->repo, &opt);
opt.flags.recursive = 1;
opt.output_format = DIFF_FORMAT_NO_OUTPUT;
diff_setup_done(&opt);
@@ -190,7 +192,7 @@ static void diff_tree_local(struct notes_merge_options *o,
trace_printf("\tdiff_tree_local(len = %i, base = %.7s, local = %.7s)\n",
len, oid_to_hex(base), oid_to_hex(local));
- repo_diff_setup(the_repository, &opt);
+ repo_diff_setup(o->repo, &opt);
opt.flags.recursive = 1;
opt.output_format = DIFF_FORMAT_NO_OUTPUT;
diff_setup_done(&opt);
@@ -350,7 +352,7 @@ static int ll_merge_in_worktree(struct notes_merge_options *o,
status = ll_merge(&result_buf, oid_to_hex(&p->obj), &base, NULL,
&local, o->local_ref, &remote, o->remote_ref,
- &the_index, NULL);
+ o->repo->index, NULL);
free(base.ptr);
free(local.ptr);
@@ -556,7 +558,7 @@ int notes_merge(struct notes_merge_options *o,
else if (!check_refname_format(o->local_ref, 0) &&
is_null_oid(&local_oid))
local = NULL; /* local_oid == null_oid indicates unborn ref */
- else if (!(local = lookup_commit_reference(the_repository, &local_oid)))
+ else if (!(local = lookup_commit_reference(o->repo, &local_oid)))
die("Could not parse local commit %s (%s)",
oid_to_hex(&local_oid), o->local_ref);
trace_printf("\tlocal commit: %.7s\n", oid_to_hex(&local_oid));
@@ -574,7 +576,7 @@ int notes_merge(struct notes_merge_options *o,
die("Failed to resolve remote notes ref '%s'",
o->remote_ref);
}
- } else if (!(remote = lookup_commit_reference(the_repository, &remote_oid))) {
+ } else if (!(remote = lookup_commit_reference(o->repo, &remote_oid))) {
die("Could not parse remote commit %s (%s)",
oid_to_hex(&remote_oid), o->remote_ref);
}
@@ -711,7 +713,7 @@ int notes_merge_commit(struct notes_merge_options *o,
/* write file as blob, and add to partial_tree */
if (stat(path.buf, &st))
die_errno("Failed to stat '%s'", path.buf);
- if (index_path(&the_index, &blob_oid, path.buf, &st, HASH_WRITE_OBJECT))
+ if (index_path(o->repo->index, &blob_oid, path.buf, &st, HASH_WRITE_OBJECT))
die("Failed to write blob object from '%s'", path.buf);
if (add_note(partial_tree, &obj_oid, &blob_oid, NULL))
die("Failed to add resolved note '%s' to notes tree",
diff --git a/notes-merge.h b/notes-merge.h
index 6c74e93..99f9c70 100644
--- a/notes-merge.h
+++ b/notes-merge.h
@@ -6,6 +6,7 @@
struct commit;
struct object_id;
+struct repository;
#define NOTES_MERGE_WORKTREE "NOTES_MERGE_WORKTREE"
@@ -15,6 +16,7 @@ enum notes_merge_verbosity {
};
struct notes_merge_options {
+ struct repository *repo;
const char *local_ref;
const char *remote_ref;
struct strbuf commit_msg;
@@ -23,7 +25,8 @@ struct notes_merge_options {
unsigned has_worktree:1;
};
-void init_notes_merge_options(struct notes_merge_options *o);
+void init_notes_merge_options(struct repository *r,
+ struct notes_merge_options *o);
/*
* Merge notes from o->remote_ref into o->local_ref
diff --git a/object-store.h b/object-store.h
index 63b7605..60758ef 100644
--- a/object-store.h
+++ b/object-store.h
@@ -7,19 +7,17 @@
#include "sha1-array.h"
#include "strbuf.h"
-struct alternate_object_database {
- struct alternate_object_database *next;
-
- /* see alt_scratch_buf() */
- struct strbuf scratch;
- size_t base_len;
+struct object_directory {
+ struct object_directory *next;
/*
- * Used to store the results of readdir(3) calls when searching
- * for unique abbreviated hashes. This cache is never
- * invalidated, thus it's racy and not necessarily accurate.
- * That's fine for its purpose; don't use it for tasks requiring
- * greater accuracy!
+ * Used to store the results of readdir(3) calls when we are OK
+ * sacrificing accuracy due to races for speed. That includes
+ * object existence with OBJECT_INFO_QUICK, as well as
+ * our search for unique abbreviated hashes. Don't use it for tasks
+ * requiring greater accuracy!
+ *
+ * Be sure to call odb_load_loose_cache() before using.
*/
char loose_objects_subdir_seen[256];
struct oid_array loose_objects_cache;
@@ -28,20 +26,15 @@ struct alternate_object_database {
* Path to the alternative object store. If this is a relative path,
* it is relative to the current working directory.
*/
- char path[FLEX_ARRAY];
+ char *path;
};
+
void prepare_alt_odb(struct repository *r);
char *compute_alternate_path(const char *path, struct strbuf *err);
-typedef int alt_odb_fn(struct alternate_object_database *, void *);
+typedef int alt_odb_fn(struct object_directory *, void *);
int foreach_alt_odb(alt_odb_fn, void*);
/*
- * Allocate a "struct alternate_object_database" but do _not_ actually
- * add it to the list of alternates.
- */
-struct alternate_object_database *alloc_alt_odb(const char *dir);
-
-/*
* Add the directory to the on-disk alternates file; the new entry will also
* take effect in the current process.
*/
@@ -55,12 +48,11 @@ void add_to_alternates_file(const char *dir);
void add_to_alternates_memory(const char *dir);
/*
- * Returns a scratch strbuf pre-filled with the alternate object directory,
- * including a trailing slash, which can be used to access paths in the
- * alternate. Always use this over direct access to alt->scratch, as it
- * cleans up any previous use of the scratch buffer.
+ * Populate an odb's loose object cache for one particular subdirectory (i.e.,
+ * the one that corresponds to the first byte of objects you're interested in,
+ * from 0 to 255 inclusive).
*/
-struct strbuf *alt_scratch_buf(struct alternate_object_database *alt);
+void odb_load_loose_cache(struct object_directory *odb, int subdir_nr);
struct packed_git {
struct packed_git *next;
@@ -92,17 +84,21 @@ struct multi_pack_index;
struct raw_object_store {
/*
- * Path to the repository's object store.
- * Cannot be NULL after initialization.
+ * Set of all object directories; the main directory is first (and
+ * cannot be NULL after initialization). Subsequent directories are
+ * alternates.
*/
- char *objectdir;
+ struct object_directory *odb;
+ struct object_directory **odb_tail;
+ int loaded_alternates;
- /* Path to extra alternate object database if not NULL */
+ /*
+ * A list of alternate object directories loaded from the environment;
+ * this should not generally need to be accessed directly, but will
+ * populate the "odb" list when prepare_alt_odb() is run.
+ */
char *alternate_db;
- struct alternate_object_database *alt_odb_list;
- struct alternate_object_database **alt_odb_tail;
-
/*
* Objects that should be substituted by other objects
* (see git-replace(1)).
@@ -157,7 +153,7 @@ void raw_object_store_clear(struct raw_object_store *o);
* Put in `buf` the name of the file in the local object database that
* would be used to store a loose object with the specified sha1.
*/
-void sha1_file_name(struct repository *r, struct strbuf *buf, const unsigned char *sha1);
+const char *loose_object_path(struct repository *r, struct strbuf *buf, const unsigned char *sha1);
void *map_sha1_file(struct repository *r, const unsigned char *sha1, unsigned long *size);
diff --git a/object.c b/object.c
index e541605..79d6360 100644
--- a/object.c
+++ b/object.c
@@ -482,27 +482,26 @@ struct raw_object_store *raw_object_store_new(void)
return o;
}
-static void free_alt_odb(struct alternate_object_database *alt)
+static void free_object_directory(struct object_directory *odb)
{
- strbuf_release(&alt->scratch);
- oid_array_clear(&alt->loose_objects_cache);
- free(alt);
+ free(odb->path);
+ oid_array_clear(&odb->loose_objects_cache);
+ free(odb);
}
-static void free_alt_odbs(struct raw_object_store *o)
+static void free_object_directories(struct raw_object_store *o)
{
- while (o->alt_odb_list) {
- struct alternate_object_database *next;
+ while (o->odb) {
+ struct object_directory *next;
- next = o->alt_odb_list->next;
- free_alt_odb(o->alt_odb_list);
- o->alt_odb_list = next;
+ next = o->odb->next;
+ free_object_directory(o->odb);
+ o->odb = next;
}
}
void raw_object_store_clear(struct raw_object_store *o)
{
- FREE_AND_NULL(o->objectdir);
FREE_AND_NULL(o->alternate_db);
oidmap_free(o->replace_map, 1);
@@ -512,8 +511,9 @@ void raw_object_store_clear(struct raw_object_store *o)
o->commit_graph = NULL;
o->commit_graph_attempted = 0;
- free_alt_odbs(o);
- o->alt_odb_tail = NULL;
+ free_object_directories(o);
+ o->odb_tail = NULL;
+ o->loaded_alternates = 0;
INIT_LIST_HEAD(&o->packed_git_mru);
close_all_packs(o);
diff --git a/pack-bitmap-write.c b/pack-bitmap-write.c
index 9d1b951..5566e94 100644
--- a/pack-bitmap-write.c
+++ b/pack-bitmap-write.c
@@ -77,7 +77,7 @@ void bitmap_writer_build_type_index(struct packing_data *to_pack,
break;
default:
- real_type = oid_object_info(the_repository,
+ real_type = oid_object_info(to_pack->repo,
&entry->idx.oid, NULL);
break;
}
@@ -262,7 +262,7 @@ void bitmap_writer_build(struct packing_data *to_pack)
if (writer.show_progress)
writer.progress = start_progress("Building bitmaps", writer.selected_nr);
- repo_init_revisions(the_repository, &revs, NULL);
+ repo_init_revisions(to_pack->repo, &revs, NULL);
revs.tag_objects = 1;
revs.tree_objects = 1;
revs.blob_objects = 1;
@@ -363,7 +363,7 @@ static int date_compare(const void *_a, const void *_b)
void bitmap_writer_reuse_bitmaps(struct packing_data *to_pack)
{
struct bitmap_index *bitmap_git;
- if (!(bitmap_git = prepare_bitmap_git()))
+ if (!(bitmap_git = prepare_bitmap_git(to_pack->repo)))
return;
writer.reused = kh_init_sha1();
diff --git a/pack-bitmap.c b/pack-bitmap.c
index 5848cc9..4695aaf 100644
--- a/pack-bitmap.c
+++ b/pack-bitmap.c
@@ -328,14 +328,15 @@ failed:
return -1;
}
-static int open_pack_bitmap(struct bitmap_index *bitmap_git)
+static int open_pack_bitmap(struct repository *r,
+ struct bitmap_index *bitmap_git)
{
struct packed_git *p;
int ret = -1;
assert(!bitmap_git->map);
- for (p = get_all_packs(the_repository); p; p = p->next) {
+ for (p = get_all_packs(r); p; p = p->next) {
if (open_pack_bitmap_1(bitmap_git, p) == 0)
ret = 0;
}
@@ -343,11 +344,11 @@ static int open_pack_bitmap(struct bitmap_index *bitmap_git)
return ret;
}
-struct bitmap_index *prepare_bitmap_git(void)
+struct bitmap_index *prepare_bitmap_git(struct repository *r)
{
struct bitmap_index *bitmap_git = xcalloc(1, sizeof(*bitmap_git));
- if (!open_pack_bitmap(bitmap_git) && !load_pack_bitmap(bitmap_git))
+ if (!open_pack_bitmap(r, bitmap_git) && !load_pack_bitmap(bitmap_git))
return bitmap_git;
free_bitmap_index(bitmap_git);
@@ -690,7 +691,7 @@ struct bitmap_index *prepare_bitmap_walk(struct rev_info *revs)
struct bitmap_index *bitmap_git = xcalloc(1, sizeof(*bitmap_git));
/* try to open a bitmapped pack, but don't parse it yet
* because we may not need to use it */
- if (open_pack_bitmap(bitmap_git) < 0)
+ if (open_pack_bitmap(revs->repo, bitmap_git) < 0)
goto cleanup;
for (i = 0; i < revs->pending.nr; ++i) {
@@ -955,7 +956,7 @@ void test_bitmap_walk(struct rev_info *revs)
struct bitmap_test_data tdata;
struct bitmap_index *bitmap_git;
- if (!(bitmap_git = prepare_bitmap_git()))
+ if (!(bitmap_git = prepare_bitmap_git(revs->repo)))
die("failed to load bitmap indexes");
if (revs->pending.nr != 1)
diff --git a/pack-bitmap.h b/pack-bitmap.h
index 189dd68..8418ba8 100644
--- a/pack-bitmap.h
+++ b/pack-bitmap.h
@@ -6,6 +6,7 @@
#include "pack-objects.h"
struct commit;
+struct repository;
struct rev_info;
struct bitmap_disk_header {
@@ -39,7 +40,7 @@ typedef int (*show_reachable_fn)(
struct bitmap_index;
-struct bitmap_index *prepare_bitmap_git(void);
+struct bitmap_index *prepare_bitmap_git(struct repository *r);
void count_bitmap_commit_list(struct bitmap_index *, uint32_t *commits,
uint32_t *trees, uint32_t *blobs, uint32_t *tags);
void traverse_bitmap_commit_list(struct bitmap_index *,
diff --git a/pack-check.c b/pack-check.c
index fa5f0ff..2cc3603 100644
--- a/pack-check.c
+++ b/pack-check.c
@@ -48,7 +48,8 @@ int check_pack_crc(struct packed_git *p, struct pack_window **w_curs,
return data_crc != ntohl(*index_crc);
}
-static int verify_packfile(struct packed_git *p,
+static int verify_packfile(struct repository *r,
+ struct packed_git *p,
struct pack_window **w_curs,
verify_fn fn,
struct progress *progress, uint32_t base_count)
@@ -135,7 +136,7 @@ static int verify_packfile(struct packed_git *p,
data = NULL;
data_valid = 0;
} else {
- data = unpack_entry(the_repository, p, entries[i].offset, &type, &size);
+ data = unpack_entry(r, p, entries[i].offset, &type, &size);
data_valid = 1;
}
@@ -186,7 +187,7 @@ int verify_pack_index(struct packed_git *p)
return err;
}
-int verify_pack(struct packed_git *p, verify_fn fn,
+int verify_pack(struct repository *r, struct packed_git *p, verify_fn fn,
struct progress *progress, uint32_t base_count)
{
int err = 0;
@@ -196,7 +197,7 @@ int verify_pack(struct packed_git *p, verify_fn fn,
if (!p->index_data)
return -1;
- err |= verify_packfile(p, &w_curs, fn, progress, base_count);
+ err |= verify_packfile(r, p, &w_curs, fn, progress, base_count);
unuse_pack(&w_curs);
return err;
diff --git a/pack-objects.c b/pack-objects.c
index b6cdbb0..9c45842 100644
--- a/pack-objects.c
+++ b/pack-objects.c
@@ -99,7 +99,7 @@ static void prepare_in_pack_by_idx(struct packing_data *pdata)
* (i.e. in_pack_idx also zero) should return NULL.
*/
mapping[cnt++] = NULL;
- for (p = get_all_packs(the_repository); p; p = p->next, cnt++) {
+ for (p = get_all_packs(pdata->repo); p; p = p->next, cnt++) {
if (cnt == nr) {
free(mapping);
return;
@@ -133,8 +133,10 @@ void oe_map_new_pack(struct packing_data *pack,
}
/* assume pdata is already zero'd by caller */
-void prepare_packing_data(struct packing_data *pdata)
+void prepare_packing_data(struct repository *r, struct packing_data *pdata)
{
+ pdata->repo = r;
+
if (git_env_bool("GIT_TEST_FULL_IN_PACK_ARRAY", 0)) {
/*
* do not initialize in_pack_by_idx[] to force the
diff --git a/pack-objects.h b/pack-objects.h
index dc869f2..3cd8d1f 100644
--- a/pack-objects.h
+++ b/pack-objects.h
@@ -5,6 +5,8 @@
#include "thread-utils.h"
#include "pack.h"
+struct repository;
+
#define DEFAULT_DELTA_CACHE_SIZE (256 * 1024 * 1024)
#define OE_DFS_STATE_BITS 2
@@ -127,6 +129,7 @@ struct object_entry {
};
struct packing_data {
+ struct repository *repo;
struct object_entry *objects;
uint32_t nr_objects, nr_alloc;
@@ -163,7 +166,7 @@ struct packing_data {
unsigned char *layer;
};
-void prepare_packing_data(struct packing_data *pdata);
+void prepare_packing_data(struct repository *r, struct packing_data *pdata);
static inline void packing_data_lock(struct packing_data *pdata)
{
diff --git a/pack.h b/pack.h
index 34a9d45..da99fdd 100644
--- a/pack.h
+++ b/pack.h
@@ -4,6 +4,8 @@
#include "object.h"
#include "csum-file.h"
+struct repository;
+
/*
* Packed object header
*/
@@ -80,7 +82,7 @@ typedef int (*verify_fn)(const struct object_id *, enum object_type, unsigned lo
extern const char *write_idx_file(const char *index_name, struct pack_idx_entry **objects, int nr_objects, const struct pack_idx_option *, const unsigned char *sha1);
extern int check_pack_crc(struct packed_git *p, struct pack_window **w_curs, off_t offset, off_t len, unsigned int nr);
extern int verify_pack_index(struct packed_git *);
-extern int verify_pack(struct packed_git *, verify_fn fn, struct progress *, uint32_t);
+extern int verify_pack(struct repository *, struct packed_git *, verify_fn fn, struct progress *, uint32_t);
extern off_t write_pack_header(struct hashfile *f, uint32_t);
extern void fixup_pack_header_footer(int, unsigned char *, const char *, uint32_t, unsigned char *, off_t);
extern char *index_pack_lockfile(int fd);
diff --git a/packfile.c b/packfile.c
index d1e6683..8c6b47c 100644
--- a/packfile.c
+++ b/packfile.c
@@ -971,16 +971,16 @@ static void prepare_packed_git_mru(struct repository *r)
static void prepare_packed_git(struct repository *r)
{
- struct alternate_object_database *alt;
+ struct object_directory *odb;
if (r->objects->packed_git_initialized)
return;
- prepare_multi_pack_index_one(r, r->objects->objectdir, 1);
- prepare_packed_git_one(r, r->objects->objectdir, 1);
+
prepare_alt_odb(r);
- for (alt = r->objects->alt_odb_list; alt; alt = alt->next) {
- prepare_multi_pack_index_one(r, alt->path, 0);
- prepare_packed_git_one(r, alt->path, 0);
+ for (odb = r->objects->odb; odb; odb = odb->next) {
+ int local = (odb == r->objects->odb);
+ prepare_multi_pack_index_one(r, odb->path, local);
+ prepare_packed_git_one(r, odb->path, local);
}
rearrange_packed_git(r);
@@ -992,6 +992,14 @@ static void prepare_packed_git(struct repository *r)
void reprepare_packed_git(struct repository *r)
{
+ struct object_directory *odb;
+
+ for (odb = r->objects->odb; odb; odb = odb->next) {
+ oid_array_clear(&odb->loose_objects_cache);
+ memset(&odb->loose_objects_subdir_seen, 0,
+ sizeof(odb->loose_objects_subdir_seen));
+ }
+
r->objects->approximate_object_count_valid = 0;
r->objects->packed_git_initialized = 0;
prepare_packed_git(r);
diff --git a/parse-options-cb.c b/parse-options-cb.c
index 8c9edce..e2f3eae 100644
--- a/parse-options-cb.c
+++ b/parse-options-cb.c
@@ -18,7 +18,8 @@ int parse_opt_abbrev_cb(const struct option *opt, const char *arg, int unset)
} else {
v = strtol(arg, (char **)&arg, 10);
if (*arg)
- return opterror(opt, "expects a numerical value", 0);
+ return error(_("option `%s' expects a numerical value"),
+ opt->long_name);
if (v && v < MINIMUM_ABBREV)
v = MINIMUM_ABBREV;
else if (v > 40)
@@ -47,8 +48,8 @@ int parse_opt_color_flag_cb(const struct option *opt, const char *arg,
arg = unset ? "never" : (const char *)opt->defval;
value = git_config_colorbool(NULL, arg);
if (value < 0)
- return opterror(opt,
- "expects \"always\", \"auto\", or \"never\"", 0);
+ return error(_("option `%s' expects \"always\", \"auto\", or \"never\""),
+ opt->long_name);
*(int *)opt->value = value;
return 0;
}
diff --git a/parse-options.c b/parse-options.c
index 3b874a8..9f84bac 100644
--- a/parse-options.c
+++ b/parse-options.c
@@ -32,7 +32,7 @@ static int get_arg(struct parse_opt_ctx_t *p, const struct option *opt,
p->argc--;
*arg = *++p->argv;
} else
- return opterror(opt, "requires a value", flags);
+ return error(_("%s requires a value"), optname(opt, flags));
return 0;
}
@@ -49,7 +49,6 @@ static int opt_command_mode_error(const struct option *opt,
int flags)
{
const struct option *that;
- struct strbuf message = STRBUF_INIT;
struct strbuf that_name = STRBUF_INIT;
/*
@@ -67,13 +66,13 @@ static int opt_command_mode_error(const struct option *opt,
strbuf_addf(&that_name, "--%s", that->long_name);
else
strbuf_addf(&that_name, "-%c", that->short_name);
- strbuf_addf(&message, ": incompatible with %s", that_name.buf);
+ error(_("%s is incompatible with %s"),
+ optname(opt, flags), that_name.buf);
strbuf_release(&that_name);
- opterror(opt, message.buf, flags);
- strbuf_release(&message);
return -1;
}
- return opterror(opt, ": incompatible with something else", flags);
+ return error(_("%s : incompatible with something else"),
+ optname(opt, flags));
}
static int get_value(struct parse_opt_ctx_t *p,
@@ -86,11 +85,11 @@ static int get_value(struct parse_opt_ctx_t *p,
int err;
if (unset && p->opt)
- return opterror(opt, "takes no value", flags);
+ return error(_("%s takes no value"), optname(opt, flags));
if (unset && (opt->flags & PARSE_OPT_NONEG))
- return opterror(opt, "isn't available", flags);
+ return error(_("%s isn't available"), optname(opt, flags));
if (!(flags & OPT_SHORT) && p->opt && (opt->flags & PARSE_OPT_NOARG))
- return opterror(opt, "takes no value", flags);
+ return error(_("%s takes no value"), optname(opt, flags));
switch (opt->type) {
case OPTION_LOWLEVEL_CALLBACK:
@@ -176,7 +175,8 @@ static int get_value(struct parse_opt_ctx_t *p,
return -1;
*(int *)opt->value = strtol(arg, (char **)&s, 10);
if (*s)
- return opterror(opt, "expects a numerical value", flags);
+ return error(_("%s expects a numerical value"),
+ optname(opt, flags));
return 0;
case OPTION_MAGNITUDE:
@@ -191,13 +191,13 @@ static int get_value(struct parse_opt_ctx_t *p,
if (get_arg(p, opt, flags, &arg))
return -1;
if (!git_parse_ulong(arg, opt->value))
- return opterror(opt,
- "expects a non-negative integer value with an optional k/m/g suffix",
- flags);
+ return error(_("%s expects a non-negative integer value"
+ " with an optional k/m/g suffix"),
+ optname(opt, flags));
return 0;
default:
- die("should not happen, someone must be hit on the forehead");
+ BUG("opt->type %d should not happen", opt->type);
}
}
@@ -236,7 +236,7 @@ static int parse_short_opt(struct parse_opt_ctx_t *p, const struct option *optio
}
static int parse_long_opt(struct parse_opt_ctx_t *p, const char *arg,
- const struct option *options)
+ const struct option *options)
{
const struct option *all_opts = options;
const char *arg_end = strchrnul(arg, '=');
@@ -257,7 +257,8 @@ again:
if (!rest)
continue;
if (*rest == '=')
- return opterror(options, "takes no value", flags);
+ return error(_("%s takes no value"),
+ optname(options, flags));
if (*rest)
continue;
p->out[p->cpidx++] = arg - 2;
@@ -318,8 +319,8 @@ is_abbreviated:
}
if (ambiguous_option) {
- error("Ambiguous option: %s "
- "(could be --%s%s or --%s%s)",
+ error(_("ambiguous option: %s "
+ "(could be --%s%s or --%s%s)"),
arg,
(ambiguous_flags & OPT_UNSET) ? "no-" : "",
ambiguous_option->long_name,
@@ -352,7 +353,7 @@ static void check_typos(const char *arg, const struct option *options)
return;
if (starts_with(arg, "no-")) {
- error ("did you mean `--%s` (with two dashes ?)", arg);
+ error(_("did you mean `--%s` (with two dashes ?)"), arg);
exit(129);
}
@@ -360,7 +361,7 @@ static void check_typos(const char *arg, const struct option *options)
if (!options->long_name)
continue;
if (starts_with(options->long_name, arg)) {
- error ("did you mean `--%s` (with two dashes ?)", arg);
+ error(_("did you mean `--%s` (with two dashes ?)"), arg);
exit(129);
}
}
@@ -423,7 +424,7 @@ void parse_options_start(struct parse_opt_ctx_t *ctx,
ctx->flags = flags;
if ((flags & PARSE_OPT_KEEP_UNKNOWN) &&
(flags & PARSE_OPT_STOP_AT_NON_OPTION))
- die("STOP_AT_NON_OPTION and KEEP_UNKNOWN don't go together");
+ BUG("STOP_AT_NON_OPTION and KEEP_UNKNOWN don't go together");
parse_options_check(options);
}
@@ -516,7 +517,7 @@ static int show_gitcomp(struct parse_opt_ctx_t *ctx,
show_negated_gitcomp(original_opts, -1);
show_negated_gitcomp(original_opts, nr_noopts);
fputc('\n', stdout);
- exit(0);
+ return PARSE_OPT_COMPLETE;
}
static int usage_with_options_internal(struct parse_opt_ctx_t *,
@@ -638,16 +639,18 @@ int parse_options(int argc, const char **argv, const char *prefix,
case PARSE_OPT_HELP:
case PARSE_OPT_ERROR:
exit(129);
+ case PARSE_OPT_COMPLETE:
+ exit(0);
case PARSE_OPT_NON_OPTION:
case PARSE_OPT_DONE:
break;
default: /* PARSE_OPT_UNKNOWN */
if (ctx.argv[0][1] == '-') {
- error("unknown option `%s'", ctx.argv[0] + 2);
+ error(_("unknown option `%s'"), ctx.argv[0] + 2);
} else if (isascii(*ctx.opt)) {
- error("unknown switch `%c'", *ctx.opt);
+ error(_("unknown switch `%c'"), *ctx.opt);
} else {
- error("unknown non-ascii option in string: `%s'",
+ error(_("unknown non-ascii option in string: `%s'"),
ctx.argv[0]);
}
usage_with_options(usagestr, options);
@@ -773,12 +776,17 @@ void NORETURN usage_msg_opt(const char *msg,
usage_with_options(usagestr, options);
}
-#undef opterror
-int opterror(const struct option *opt, const char *reason, int flags)
+const char *optname(const struct option *opt, int flags)
{
+ static struct strbuf sb = STRBUF_INIT;
+
+ strbuf_reset(&sb);
if (flags & OPT_SHORT)
- return error("switch `%c' %s", opt->short_name, reason);
- if (flags & OPT_UNSET)
- return error("option `no-%s' %s", opt->long_name, reason);
- return error("option `%s' %s", opt->long_name, reason);
+ strbuf_addf(&sb, "switch `%c'", opt->short_name);
+ else if (flags & OPT_UNSET)
+ strbuf_addf(&sb, "option `no-%s'", opt->long_name);
+ else
+ strbuf_addf(&sb, "option `%s'", opt->long_name);
+
+ return sb.buf;
}
diff --git a/parse-options.h b/parse-options.h
index 6c4fe20..14fe324 100644
--- a/parse-options.h
+++ b/parse-options.h
@@ -175,21 +175,18 @@ struct option {
* Returns the number of arguments left in argv[].
*/
extern int parse_options(int argc, const char **argv, const char *prefix,
- const struct option *options,
- const char * const usagestr[], int flags);
+ const struct option *options,
+ const char * const usagestr[], int flags);
extern NORETURN void usage_with_options(const char * const *usagestr,
- const struct option *options);
+ const struct option *options);
extern 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);
-extern int opterror(const struct option *opt, const char *reason, int flags);
-#if defined(__GNUC__)
-#define opterror(o,r,f) (opterror((o),(r),(f)), const_error())
-#endif
+const char *optname(const struct option *opt, int flags);
/*
* Use these assertions for callbacks that expect to be called with NONEG and
@@ -208,6 +205,7 @@ extern int opterror(const struct option *opt, const char *reason, int flags);
/*----- incremental advanced APIs -----*/
enum {
+ PARSE_OPT_COMPLETE = -2,
PARSE_OPT_HELP = -1,
PARSE_OPT_DONE,
PARSE_OPT_NON_OPTION,
diff --git a/path.c b/path.c
index dc3294c..03ab712 100644
--- a/path.c
+++ b/path.c
@@ -385,7 +385,7 @@ static void adjust_git_path(const struct repository *repo,
strbuf_splice(buf, 0, buf->len,
repo->index_file, strlen(repo->index_file));
else if (dir_prefix(base, "objects"))
- replace_dir(buf, git_dir_len + 7, repo->objects->objectdir);
+ replace_dir(buf, git_dir_len + 7, repo->objects->odb->path);
else if (git_hooks_path && dir_prefix(base, "hooks"))
replace_dir(buf, git_dir_len + 5, git_hooks_path);
else if (repo->different_commondir)
diff --git a/pathspec.c b/pathspec.c
index 6f00599..e85298f 100644
--- a/pathspec.c
+++ b/pathspec.c
@@ -659,3 +659,41 @@ void clear_pathspec(struct pathspec *pathspec)
FREE_AND_NULL(pathspec->items);
pathspec->nr = 0;
}
+
+int match_pathspec_attrs(const struct index_state *istate,
+ const char *name, int namelen,
+ const struct pathspec_item *item)
+{
+ int i;
+ char *to_free = NULL;
+
+ if (name[namelen])
+ name = to_free = xmemdupz(name, namelen);
+
+ git_check_attr(istate, name, item->attr_check);
+
+ free(to_free);
+
+ for (i = 0; i < item->attr_match_nr; i++) {
+ const char *value;
+ int matched;
+ enum attr_match_mode match_mode;
+
+ value = item->attr_check->items[i].value;
+ match_mode = item->attr_match[i].match_mode;
+
+ if (ATTR_TRUE(value))
+ matched = (match_mode == MATCH_SET);
+ else if (ATTR_FALSE(value))
+ matched = (match_mode == MATCH_UNSET);
+ else if (ATTR_UNSET(value))
+ matched = (match_mode == MATCH_UNSPECIFIED);
+ else
+ matched = (match_mode == MATCH_VALUE &&
+ !strcmp(item->attr_match[i].value, value));
+ if (!matched)
+ return 0;
+ }
+
+ return 1;
+}
diff --git a/pathspec.h b/pathspec.h
index a6525a6..1c18a2c 100644
--- a/pathspec.h
+++ b/pathspec.h
@@ -80,13 +80,13 @@ struct pathspec {
* Any arguments used are copied. It is safe for the caller to modify
* or free 'prefix' and 'args' after calling this function.
*/
-extern void parse_pathspec(struct pathspec *pathspec,
- unsigned magic_mask,
- unsigned flags,
- const char *prefix,
- const char **args);
-extern void copy_pathspec(struct pathspec *dst, const struct pathspec *src);
-extern void clear_pathspec(struct pathspec *);
+void parse_pathspec(struct pathspec *pathspec,
+ unsigned magic_mask,
+ unsigned flags,
+ const char *prefix,
+ const char **args);
+void copy_pathspec(struct pathspec *dst, const struct pathspec *src);
+void clear_pathspec(struct pathspec *);
static inline int ps_strncmp(const struct pathspec_item *item,
const char *s1, const char *s2, size_t n)
@@ -106,10 +106,13 @@ static inline int ps_strcmp(const struct pathspec_item *item,
return strcmp(s1, s2);
}
-extern void add_pathspec_matches_against_index(const struct pathspec *pathspec,
- const struct index_state *istate,
- char *seen);
-extern char *find_pathspecs_matching_against_index(const struct pathspec *pathspec,
- const struct index_state *istate);
+void add_pathspec_matches_against_index(const struct pathspec *pathspec,
+ const struct index_state *istate,
+ char *seen);
+char *find_pathspecs_matching_against_index(const struct pathspec *pathspec,
+ const struct index_state *istate);
+int match_pathspec_attrs(const struct index_state *istate,
+ const char *name, int namelen,
+ const struct pathspec_item *item);
#endif /* PATHSPEC_H */
diff --git a/po/bg.po b/po/bg.po
index cc6bc1a..814d40a 100644
--- a/po/bg.po
+++ b/po/bg.po
@@ -13,7 +13,7 @@
# dangling objects обект извън клон
# fast-forward превъртане
# tree-level merge тривиално сливане (различни файлове са променяни, слива се като дърво)
-# automatic merge автоманично сливаве (еднакви файлове са променяни, но в неприпокриващи се части)
+# automatic merge автоматично сливане (еднакви файлове са променяни, но в неприпокриващи се части)
# real merge същинско сливане (а не превъртане)
# three-way merge тройно сливане
# octopus merge множествено сливане
@@ -22,7 +22,7 @@
# merge base база за сливане
# force (push) принудително изтласквам
# stash/index индекс
-# squash commit вкарвам подаване в преднходното
+# squash commit вкарвам подаване в предходното
# fixup commit вкарвам подаване в предходното без следа
# root commit начално подаване
# remote-tracking branch следящ клон
@@ -77,7 +77,7 @@
# term управляваща дума (за git-bisect)
# mergetag етикет при сливане
# packfile пакет
-# promisory гаратиращ, гарант promisory packfile гарантиращ пакет, promisory remote хранилище-гарант
+# promisory гарантиращ, гарант promisory packfile гарантиращ пакет, promisory remote хранилище-гарант
# delta - разлика, делта, обект-разлика
# peeled tag - проследен етикет - когато етикет сочи към друг етикет, а не подаване и проследяваме подобно на символна връзка
# strip - премахвам (за компонент при филтриране)
@@ -87,7 +87,7 @@
# binary patch двоична кръпка
# reverse-apply прилагам в обратна посока
# todo file файл с команди
-# todo command запланувава команда
+# todo command запланувана команда
# alternate алтернативен източник
# superproject обхващащ проект
# split index разделяне на индекса
@@ -117,7 +117,16 @@
# fork създаване на процес
# capabilities възможности
# remote-helper насрещна помощна програма
-#
+# command alias псевдоним на команда
+# rerere преизползване на запазена корекция на сливане с конфликт
+# preimage предварителен вариант
+# offset отместване
+# multi-pack-index индекс за множество пакети
+# range diff диапазонна разлика
+# inter diff разлика в разликите
+# ssl backend реализация на SSL
+# delta island група разлики
+# island marks граници на групите
# ------------------------
# „$var“ - може да не сработва за shell има gettext и eval_gettext - проверка - намират се лесно по „$
# ------------------------
@@ -134,10 +143,10 @@
# for i in `sort -u FILES`; do cnt=`grep $i FILES | wc -l`; echo $cnt $i ;done | sort -n
msgid ""
msgstr ""
-"Project-Id-Version: git master\n"
+"Project-Id-Version: git 2.20\n"
"Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n"
-"POT-Creation-Date: 2018-09-04 08:50+0800\n"
-"PO-Revision-Date: 2018-09-09 11:28+0200\n"
+"POT-Creation-Date: 2018-12-02 10:55+0800\n"
+"PO-Revision-Date: 2018-12-02 13:41+0100\n"
"Last-Translator: Alexander Shopov <ash@kambanaria.org>\n"
"Language-Team: Bulgarian <dict@fsa-bg.org>\n"
"Language: bg\n"
@@ -146,37 +155,37 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-#: advice.c:97
+#: advice.c:99
#, c-format
msgid "%shint: %.*s%s\n"
msgstr "%sподсказка: %.*s%s\n"
-#: advice.c:150
+#: advice.c:152
msgid "Cherry-picking is not possible because you have unmerged files."
msgstr "Отбирането на подавания е блокирано от неслети файлове."
-#: advice.c:152
+#: advice.c:154
msgid "Committing is not possible because you have unmerged files."
msgstr "Подаването е блокирано от неслети файлове."
-#: advice.c:154
+#: advice.c:156
msgid "Merging is not possible because you have unmerged files."
msgstr "Сливането е блокирано от неслети файлове."
-#: advice.c:156
+#: advice.c:158
msgid "Pulling is not possible because you have unmerged files."
msgstr "Издърпването е блокирано от неслети файлове."
-#: advice.c:158
+#: advice.c:160
msgid "Reverting is not possible because you have unmerged files."
msgstr "Отмяната е блокирана от неслети файлове."
-#: advice.c:160
+#: advice.c:162
#, c-format
msgid "It is not possible to %s because you have unmerged files."
msgstr "Действието „%s“ е блокирано от неслети файлове."
-#: advice.c:168
+#: advice.c:170
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."
@@ -184,23 +193,23 @@ msgstr ""
"Редактирайте ги в работното дърво, и тогава ползвайте „git add/rm ФАЙЛ“,\n"
"за да отбележите коригирането им. След това извършете подаването."
-#: advice.c:176
+#: advice.c:178
msgid "Exiting because of an unresolved conflict."
msgstr "Изход от програмата заради некоригиран конфликт."
-#: advice.c:181 builtin/merge.c:1286
+#: advice.c:183 builtin/merge.c:1289
msgid "You have not concluded your merge (MERGE_HEAD exists)."
msgstr "Не сте завършили сливане. (Указателят „MERGE_HEAD“ съществува)."
-#: advice.c:183
+#: advice.c:185
msgid "Please, commit your changes before merging."
msgstr "Промените трябва да се подадат преди сливане."
-#: advice.c:184
+#: advice.c:186
msgid "Exiting because of unfinished merge."
msgstr "Изход от програмата заради незавършено сливане."
-#: advice.c:190
+#: advice.c:192
#, c-format
msgid ""
"Note: checking out '%s'.\n"
@@ -307,22 +316,22 @@ msgstr ""
msgid "invalid mode on line %d: %s"
msgstr "грешен режим на ред №%d: %s"
-#: apply.c:1306
+#: apply.c:1307
#, c-format
msgid "inconsistent header lines %d and %d"
msgstr "несъвместими заглавни части на редове №%d и №%d"
-#: apply.c:1478
+#: apply.c:1479
#, c-format
msgid "recount: unexpected line: %.*s"
msgstr "при повторното преброяване бе получен неочакван ред: „%.*s“"
-#: apply.c:1547
+#: apply.c:1548
#, c-format
msgid "patch fragment without header at line %d: %.*s"
msgstr "част от кръпка без заглавна част на ред %d: %.*s"
-#: apply.c:1567
+#: apply.c:1568
#, c-format
msgid ""
"git diff header lacks filename information when removing %d leading pathname "
@@ -337,71 +346,71 @@ msgstr[1] ""
"След съкращаването на първите %d части от компонентите на пътя, в заглавната "
"част на „git diff“ липсва информация за име на файл (ред: %d)"
-#: apply.c:1580
+#: apply.c:1581
#, c-format
msgid "git diff header lacks filename information (line %d)"
msgstr ""
"в заглавната част на „git diff“ липсва информация за име на файл (ред: %d)"
-#: apply.c:1768
+#: apply.c:1769
msgid "new file depends on old contents"
msgstr "новият файл зависи от старото съдържание на файла"
-#: apply.c:1770
+#: apply.c:1771
msgid "deleted file still has contents"
msgstr "изтритият файл не е празен"
-#: apply.c:1804
+#: apply.c:1805
#, c-format
msgid "corrupt patch at line %d"
msgstr "грешка в кръпката на ред %d"
-#: apply.c:1841
+#: apply.c:1842
#, c-format
msgid "new file %s depends on old contents"
msgstr "новият файл „%s“ зависи от старото съдържание на файла"
-#: apply.c:1843
+#: apply.c:1844
#, c-format
msgid "deleted file %s still has contents"
msgstr "изтритият файл „%s“ не е празен"
-#: apply.c:1846
+#: apply.c:1847
#, c-format
msgid "** warning: file %s becomes empty but is not deleted"
msgstr "● предупреждение: файлът „%s“ вече е празен, но не е изтрит"
-#: apply.c:1993
+#: apply.c:1994
#, c-format
msgid "corrupt binary patch at line %d: %.*s"
msgstr "грешка в двоичната кръпка на ред %d: %.*s"
-#: apply.c:2030
+#: apply.c:2031
#, c-format
msgid "unrecognized binary patch at line %d"
msgstr "неразпозната двоичната кръпка на ред %d"
-#: apply.c:2190
+#: apply.c:2193
#, c-format
msgid "patch with only garbage at line %d"
msgstr "кръпката е с изцяло повредени данни на ред %d"
-#: apply.c:2276
+#: apply.c:2279
#, c-format
msgid "unable to read symlink %s"
msgstr "символната връзка „%s“ не може да бъде прочетена"
-#: apply.c:2280
+#: apply.c:2283
#, c-format
msgid "unable to open or read %s"
msgstr "файлът „%s“ не може да бъде отворен или прочетен"
-#: apply.c:2939
+#: apply.c:2942
#, c-format
msgid "invalid start of line: '%c'"
msgstr "неправилно начало на ред: „%c“"
-#: apply.c:3060
+#: apply.c:3063
#, c-format
msgid "Hunk #%d succeeded at %d (offset %d line)."
msgid_plural "Hunk #%d succeeded at %d (offset %d lines)."
@@ -410,13 +419,13 @@ msgstr[0] ""
msgstr[1] ""
"%d-то парче код бе успешно приложено на ред %d (отместване от %d реда)."
-#: apply.c:3072
+#: apply.c:3075
#, c-format
msgid "Context reduced to (%ld/%ld) to apply fragment at %d"
msgstr ""
"Контекстът е намален на (%ld/%ld) за прилагането на парчето код на ред %d"
-#: apply.c:3078
+#: apply.c:3081
#, c-format
msgid ""
"while searching for:\n"
@@ -425,316 +434,316 @@ msgstr ""
"при търсене за:\n"
"%.*s"
-#: apply.c:3100
+#: apply.c:3103
#, c-format
msgid "missing binary patch data for '%s'"
msgstr "липсват данните за двоичната кръпка за „%s“"
-#: apply.c:3108
+#: apply.c:3111
#, c-format
msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'"
msgstr ""
"двоичната кръпка не може да се приложи в обратна посока, когато обратното "
"парче за „%s“ липсва"
-#: apply.c:3154
+#: apply.c:3158
#, c-format
msgid "cannot apply binary patch to '%s' without full index line"
msgstr "към „%s“ не може да се приложи двоична кръпка без пълен индекс"
-#: apply.c:3164
+#: apply.c:3168
#, c-format
msgid ""
"the patch applies to '%s' (%s), which does not match the current contents."
msgstr "кръпката съответства на „%s“ (%s), който не съвпада по съдържание."
-#: apply.c:3172
+#: apply.c:3176
#, c-format
msgid "the patch applies to an empty '%s' but it is not empty"
msgstr "кръпката съответства на „%s“, който трябва да е празен, но не е"
-#: apply.c:3190
+#: apply.c:3194
#, c-format
msgid "the necessary postimage %s for '%s' cannot be read"
msgstr ""
"необходимият резултат след операцията — „%s“ за „%s“ не може да бъде "
"прочетен"
-#: apply.c:3203
+#: apply.c:3207
#, c-format
msgid "binary patch does not apply to '%s'"
msgstr "двоичната кръпка не може да бъде приложена върху „%s“"
-#: apply.c:3209
+#: apply.c:3213
#, c-format
msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)"
msgstr ""
"двоичната кръпка за „%s“ води до неправилни резултати (очакваше се: „%s“, а "
"бе получено: „%s“)"
-#: apply.c:3230
+#: apply.c:3234
#, c-format
msgid "patch failed: %s:%ld"
msgstr "неуспешно прилагане на кръпка: „%s:%ld“"
-#: apply.c:3352
+#: apply.c:3356
#, c-format
msgid "cannot checkout %s"
msgstr "„%s“ не може да се изтегли"
-#: apply.c:3404 apply.c:3415 apply.c:3461 setup.c:278
+#: apply.c:3408 apply.c:3419 apply.c:3465 midx.c:58 setup.c:278
#, c-format
msgid "failed to read %s"
msgstr "файлът „%s“ не може да бъде прочетен"
-#: apply.c:3412
+#: apply.c:3416
#, c-format
msgid "reading from '%s' beyond a symbolic link"
msgstr "изчитане на „%s“ след проследяване на символна връзка"
-#: apply.c:3441 apply.c:3681
+#: apply.c:3445 apply.c:3688
#, c-format
msgid "path %s has been renamed/deleted"
msgstr "обектът с път „%s“ е преименуван или изтрит"
-#: apply.c:3524 apply.c:3696
+#: apply.c:3531 apply.c:3703
#, c-format
msgid "%s: does not exist in index"
msgstr "„%s“ не съществува в индекса"
-#: apply.c:3533 apply.c:3704
+#: apply.c:3540 apply.c:3711
#, c-format
msgid "%s: does not match index"
msgstr "„%s“ не съответства на индекса"
-#: apply.c:3568
+#: apply.c:3575
msgid "repository lacks the necessary blob to fall back on 3-way merge."
msgstr ""
"в хранилището липсват необходимите обекти-BLOB, за да се премине към тройно "
"сливане."
-#: apply.c:3571
+#: apply.c:3578
#, c-format
msgid "Falling back to three-way merge...\n"
msgstr "Преминаване към тройно сливане…\n"
-#: apply.c:3587 apply.c:3591
+#: apply.c:3594 apply.c:3598
#, c-format
msgid "cannot read the current contents of '%s'"
msgstr "текущото съдържание на „%s“ не може да бъде прочетено"
-#: apply.c:3603
+#: apply.c:3610
#, c-format
msgid "Failed to fall back on three-way merge...\n"
msgstr "Неуспешно преминаване към тройно сливане…\n"
-#: apply.c:3617
+#: apply.c:3624
#, c-format
msgid "Applied patch to '%s' with conflicts.\n"
msgstr "Конфликти при прилагането на кръпката към „%s“.\n"
-#: apply.c:3622
+#: apply.c:3629
#, c-format
msgid "Applied patch to '%s' cleanly.\n"
msgstr "Кръпката бе приложена чисто към „%s“.\n"
-#: apply.c:3648
+#: apply.c:3655
msgid "removal patch leaves file contents"
msgstr "изтриващата кръпка оставя файла непразен"
-#: apply.c:3721
+#: apply.c:3728
#, c-format
msgid "%s: wrong type"
msgstr "„%s“: неправилен вид"
-#: apply.c:3723
+#: apply.c:3730
#, c-format
msgid "%s has type %o, expected %o"
msgstr "„%s“ е от вид „%o“, а се очакваше „%o“"
-#: apply.c:3874 apply.c:3876
+#: apply.c:3881 apply.c:3883
#, c-format
msgid "invalid path '%s'"
msgstr "неправилен път: „%s“"
-#: apply.c:3932
+#: apply.c:3939
#, c-format
msgid "%s: already exists in index"
msgstr "„%s“: вече съществува в индекса"
-#: apply.c:3935
+#: apply.c:3942
#, c-format
msgid "%s: already exists in working directory"
msgstr "„%s“: вече съществува в работното дърво"
-#: apply.c:3955
+#: apply.c:3962
#, c-format
msgid "new mode (%o) of %s does not match old mode (%o)"
msgstr "новите права за достъп (%o) на „%s“ не съвпадат със старите (%o)"
-#: apply.c:3960
+#: apply.c:3967
#, c-format
msgid "new mode (%o) of %s does not match old mode (%o) of %s"
msgstr ""
"новите права за достъп (%o) на „%s“ не съвпадат със старите (%o) на „%s“"
-#: apply.c:3980
+#: apply.c:3987
#, c-format
msgid "affected file '%s' is beyond a symbolic link"
msgstr "засегнатият файл „%s“ е след символна връзка"
-#: apply.c:3984
+#: apply.c:3991
#, c-format
msgid "%s: patch does not apply"
msgstr "Кръпката „%s“ не може да бъде приложена"
-#: apply.c:3999
+#: apply.c:4006
#, c-format
msgid "Checking patch %s..."
msgstr "Проверяване на кръпката „%s“…"
-#: apply.c:4091
+#: apply.c:4098
#, c-format
msgid "sha1 information is lacking or useless for submodule %s"
msgstr ""
"информацията за сумата по SHA1 за подмодула липсва или не е достатъчна (%s)."
-#: apply.c:4098
+#: apply.c:4105
#, c-format
msgid "mode change for %s, which is not in current HEAD"
msgstr "смяна на режима на достъпа на „%s“, който не е в текущия връх „HEAD“"
-#: apply.c:4101
+#: apply.c:4108
#, c-format
msgid "sha1 information is lacking or useless (%s)."
msgstr "информацията за сумата по SHA1 липсва или не е достатъчна (%s)."
-#: apply.c:4106 builtin/checkout.c:237 builtin/reset.c:140
+#: apply.c:4113 builtin/checkout.c:244 builtin/reset.c:142
#, c-format
msgid "make_cache_entry failed for path '%s'"
msgstr "неуспешно създаване на запис в кеша чрез „make_cache_entry“ за „%s“"
-#: apply.c:4110
+#: apply.c:4117
#, c-format
msgid "could not add %s to temporary index"
msgstr "„%s“ не може да се добави към временния индекс"
-#: apply.c:4120
+#: apply.c:4127
#, c-format
msgid "could not write temporary index to %s"
msgstr "временният индекс не може да се запази в „%s“"
-#: apply.c:4258
+#: apply.c:4265
#, c-format
msgid "unable to remove %s from index"
msgstr "„%s“ не може да се извади от индекса"
-#: apply.c:4292
+#: apply.c:4299
#, c-format
msgid "corrupt patch for submodule %s"
msgstr "повредена кръпка за модула „%s“"
-#: apply.c:4298
+#: apply.c:4305
#, c-format
msgid "unable to stat newly created file '%s'"
msgstr ""
"не може да се получи информация чрез „stat“ за новосъздадения файл „%s“"
-#: apply.c:4306
+#: apply.c:4313
#, c-format
msgid "unable to create backing store for newly created file %s"
msgstr ""
"не може да се за създаде мястото за съхранение на новосъздадения файл „%s“"
-#: apply.c:4312 apply.c:4457
+#: apply.c:4319 apply.c:4464
#, c-format
msgid "unable to add cache entry for %s"
msgstr "не може да се добави запис в кеша за „%s“"
-#: apply.c:4355
+#: apply.c:4362
#, c-format
msgid "failed to write to '%s'"
msgstr "в „%s“ не може да се пише"
-#: apply.c:4359
+#: apply.c:4366
#, c-format
msgid "closing file '%s'"
msgstr "затваряне на файла „%s“"
-#: apply.c:4429
+#: apply.c:4436
#, c-format
msgid "unable to write file '%s' mode %o"
msgstr "файлът „%s“ не може да се запише с режим на достъп „%o“"
-#: apply.c:4527
+#: apply.c:4534
#, c-format
msgid "Applied patch %s cleanly."
msgstr "Кръпката „%s“ бе приложена чисто."
-#: apply.c:4535
+#: apply.c:4542
msgid "internal error"
msgstr "вътрешна грешка"
-#: apply.c:4538
+#: apply.c:4545
#, c-format
msgid "Applying patch %%s with %d reject..."
msgid_plural "Applying patch %%s with %d rejects..."
msgstr[0] "Прилагане на кръпката „%%s“ с %d отхвърлено парче…"
msgstr[1] "Прилагане на кръпката „%%s“ с %d отхвърлени парчета…"
-#: apply.c:4549
+#: apply.c:4556
#, c-format
msgid "truncating .rej filename to %.*s.rej"
msgstr "съкращаване на името на файла с отхвърлените парчета на „ %.*s.rej“"
-#: apply.c:4557 builtin/fetch.c:780 builtin/fetch.c:1048
+#: apply.c:4564 builtin/fetch.c:843 builtin/fetch.c:1122
#, c-format
msgid "cannot open %s"
msgstr "„%s“ не може да бъде отворен"
-#: apply.c:4571
+#: apply.c:4578
#, c-format
msgid "Hunk #%d applied cleanly."
msgstr "%d-то парче бе успешно приложено."
-#: apply.c:4575
+#: apply.c:4582
#, c-format
msgid "Rejected hunk #%d."
msgstr "%d-то парче бе отхвърлено."
-#: apply.c:4685
+#: apply.c:4692
#, c-format
msgid "Skipped patch '%s'."
msgstr "Пропусната кръпка: „%s“"
-#: apply.c:4693
+#: apply.c:4700
msgid "unrecognized input"
msgstr "непознат вход"
-#: apply.c:4712
+#: apply.c:4719
msgid "unable to read index file"
msgstr "индексът не може да бъде записан"
-#: apply.c:4849
+#: apply.c:4874
#, c-format
msgid "can't open patch '%s': %s"
msgstr "кръпката „%s“ не може да бъде отворена: %s"
-#: apply.c:4876
+#: apply.c:4901
#, c-format
msgid "squelched %d whitespace error"
msgid_plural "squelched %d whitespace errors"
msgstr[0] "пренебрегната е %d грешка в знаците за интервали"
msgstr[1] "пренебрегнати са %d грешки в знаците за интервали"
-#: apply.c:4882 apply.c:4897
+#: apply.c:4907 apply.c:4922
#, c-format
msgid "%d line adds whitespace errors."
msgid_plural "%d lines add whitespace errors."
msgstr[0] "%d ред добавя грешки в знаците за интервали."
msgstr[1] "%d реда добавят грешки в знаците за интервали."
-#: apply.c:4890
+#: apply.c:4915
#, c-format
msgid "%d line applied after fixing whitespace errors."
msgid_plural "%d lines applied after fixing whitespace errors."
@@ -743,144 +752,145 @@ msgstr[0] ""
msgstr[1] ""
"Добавени са %d реда след корекцията на грешките в знаците за интервали."
-#: apply.c:4906 builtin/add.c:539 builtin/mv.c:300 builtin/rm.c:389
+#: apply.c:4931 builtin/add.c:538 builtin/mv.c:300 builtin/rm.c:389
msgid "Unable to write new index file"
msgstr "Новият индекс не може да бъде записан"
-#: apply.c:4933 apply.c:4936 builtin/am.c:2254 builtin/am.c:2257
-#: builtin/clone.c:121 builtin/fetch.c:115 builtin/merge.c:260
-#: builtin/pull.c:198 builtin/submodule--helper.c:406
-#: builtin/submodule--helper.c:1355 builtin/submodule--helper.c:1358
-#: builtin/submodule--helper.c:1729 builtin/submodule--helper.c:1732
-#: builtin/submodule--helper.c:1952 git-add--interactive.perl:197
+#: 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
msgid "path"
msgstr "път"
-#: apply.c:4934
+#: apply.c:4959
msgid "don't apply changes matching the given path"
msgstr "без прилагане на промените напасващи на дадения път"
-#: apply.c:4937
+#: apply.c:4962
msgid "apply changes matching the given path"
msgstr "прилагане на промените напасващи на дадения път"
-#: apply.c:4939 builtin/am.c:2263
+#: apply.c:4964 builtin/am.c:2218
msgid "num"
msgstr "БРОЙ"
-#: apply.c:4940
+#: apply.c:4965
msgid "remove <num> leading slashes from traditional diff paths"
msgstr "премахване на този БРОЙ водещи елементи от пътищата в разликата"
-#: apply.c:4943
+#: apply.c:4968
msgid "ignore additions made by the patch"
msgstr "игнориране на редовете добавени от тази кръпка"
-#: apply.c:4945
+#: apply.c:4970
msgid "instead of applying the patch, output diffstat for the input"
msgstr "извеждане на статистика на промените без прилагане на кръпката"
-#: apply.c:4949
+#: apply.c:4974
msgid "show number of added and deleted lines in decimal notation"
msgstr "извеждане на броя на добавените и изтритите редове"
-#: apply.c:4951
+#: apply.c:4976
msgid "instead of applying the patch, output a summary for the input"
msgstr "извеждане на статистика на входните данни без прилагане на кръпката"
-#: apply.c:4953
+#: apply.c:4978
msgid "instead of applying the patch, see if the patch is applicable"
msgstr "проверка дали кръпката може да се приложи, без действително прилагане"
-#: apply.c:4955
+#: apply.c:4980
msgid "make sure the patch is applicable to the current index"
msgstr "проверка дали кръпката може да бъде приложена към текущия индекс"
-#: apply.c:4957
+#: apply.c:4982
msgid "mark new files with `git add --intent-to-add`"
msgstr "отбелязване на новите файлове с „git add --intent-to-add“"
-#: apply.c:4959
+#: apply.c:4984
msgid "apply a patch without touching the working tree"
msgstr "прилагане на кръпката без промяна на работното дърво"
-#: apply.c:4961
+#: apply.c:4986
msgid "accept a patch that touches outside the working area"
msgstr "прилагане на кръпка, която променя и файлове извън работното дърво"
-#: apply.c:4964
+#: apply.c:4989
msgid "also apply the patch (use with --stat/--summary/--check)"
msgstr ""
"кръпката да бъде приложена. Опцията се комбинира с „--check“/„--stat“/„--"
"summary“"
-#: apply.c:4966
+#: apply.c:4991
msgid "attempt three-way merge if a patch does not apply"
msgstr "пробване с тройно сливане, ако кръпката не може да се приложи директно"
-#: apply.c:4968
+#: apply.c:4993
msgid "build a temporary index based on embedded index information"
msgstr ""
"създаване на временен индекс на база на включената информация за индекса"
-#: apply.c:4971 builtin/checkout-index.c:168 builtin/ls-files.c:516
+#: apply.c:4996 builtin/checkout-index.c:170 builtin/ls-files.c:523
msgid "paths are separated with NUL character"
msgstr "разделяне на пътищата с нулевия знак „NUL“"
-#: apply.c:4973
+#: apply.c:4998
msgid "ensure at least <n> lines of context match"
msgstr "да се осигури контекст от поне такъв БРОЙ съвпадащи редове"
-#: apply.c:4974 builtin/am.c:2242 builtin/interpret-trailers.c:95
-#: builtin/interpret-trailers.c:97 builtin/interpret-trailers.c:99
-#: builtin/pack-objects.c:3202
+#: apply.c:4999 builtin/am.c:2197 builtin/interpret-trailers.c:97
+#: builtin/interpret-trailers.c:99 builtin/interpret-trailers.c:101
+#: builtin/pack-objects.c:3312 builtin/rebase.c:857
msgid "action"
msgstr "действие"
-#: apply.c:4975
+#: apply.c:5000
msgid "detect new or modified lines that have whitespace errors"
msgstr "засичане на нови или променени редове с грешки в знаците за интервали"
-#: apply.c:4978 apply.c:4981
+#: apply.c:5003 apply.c:5006
msgid "ignore changes in whitespace when finding context"
msgstr ""
"игнориране на промените в знаците за интервали при откриване на контекста"
-#: apply.c:4984
+#: apply.c:5009
msgid "apply the patch in reverse"
msgstr "прилагане на кръпката в обратна посока"
-#: apply.c:4986
+#: apply.c:5011
msgid "don't expect at least one line of context"
msgstr "без изискване на дори и един ред контекст"
-#: apply.c:4988
+#: apply.c:5013
msgid "leave the rejected hunks in corresponding *.rej files"
msgstr "оставяне на отхвърлените парчета във файлове с разширение „.rej“"
-#: apply.c:4990
+#: apply.c:5015
msgid "allow overlapping hunks"
msgstr "позволяване на застъпващи се парчета"
-#: apply.c:4991 builtin/add.c:290 builtin/check-ignore.c:21
-#: builtin/commit.c:1301 builtin/count-objects.c:98 builtin/fsck.c:671
-#: builtin/log.c:1914 builtin/mv.c:122 builtin/read-tree.c:124
+#: 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
msgid "be verbose"
msgstr "повече подробности"
-#: apply.c:4993
+#: apply.c:5018
msgid "tolerate incorrectly detected missing new-line at the end of file"
msgstr "пренебрегване на неправилно липсващ знак за нов ред в края на файл"
-#: apply.c:4996
+#: apply.c:5021
msgid "do not trust the line counts in the hunk headers"
msgstr "без доверяване на номерата на редовете в заглавните части на парчетата"
-#: apply.c:4998 builtin/am.c:2251
+#: apply.c:5023 builtin/am.c:2206
msgid "root"
msgstr "НАЧАЛНА_ДИРЕКТОРИЯ"
-#: apply.c:4999
+#: apply.c:5024
msgid "prepend <root> to all filenames"
msgstr "добавяне на тази НАЧАЛНА_ДИРЕКТОРИЯ към имената на всички файлове"
@@ -903,114 +913,114 @@ msgstr ""
msgid "git archive --remote <repo> [--exec <cmd>] --list"
msgstr "git archive --remote ХРАНИЛИЩЕ [--exec КОМАНДА] --list"
-#: archive.c:363 builtin/add.c:176 builtin/add.c:515 builtin/rm.c:298
+#: archive.c:370 builtin/add.c:176 builtin/add.c:514 builtin/rm.c:298
#, c-format
msgid "pathspec '%s' did not match any files"
msgstr "пътят „%s“ не съвпада с никой файл"
-#: archive.c:446
+#: archive.c:453
msgid "fmt"
msgstr "ФОРМАТ"
-#: archive.c:446
+#: archive.c:453
msgid "archive format"
msgstr "ФОРМАТ на архива"
-#: archive.c:447 builtin/log.c:1473
+#: archive.c:454 builtin/log.c:1536
msgid "prefix"
msgstr "ПРЕФИКС"
-#: archive.c:448
+#: archive.c:455
msgid "prepend prefix to each pathname in the archive"
msgstr "добавяне на този ПРЕФИКС към всеки път в архива"
-#: archive.c:449 builtin/blame.c:816 builtin/blame.c:817 builtin/config.c:126
-#: builtin/fast-export.c:1013 builtin/fast-export.c:1015 builtin/grep.c:873
-#: builtin/hash-object.c:104 builtin/ls-files.c:552 builtin/ls-files.c:555
-#: builtin/notes.c:407 builtin/notes.c:570 builtin/read-tree.c:119
-#: parse-options.h:165
+#: 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
+#: parse-options.h:162
msgid "file"
msgstr "ФАЙЛ"
-#: archive.c:450 builtin/archive.c:89
+#: archive.c:457 builtin/archive.c:89
msgid "write the archive to this file"
msgstr "запазване на архива в този ФАЙЛ"
-#: archive.c:452
+#: archive.c:459
msgid "read .gitattributes in working directory"
msgstr "изчитане на „.gitattributes“ в работната директория"
-#: archive.c:453
+#: archive.c:460
msgid "report archived files on stderr"
msgstr "извеждане на архивираните файлове на стандартната грешка"
-#: archive.c:454
+#: archive.c:461
msgid "store only"
msgstr "само съхранение без компресиране"
-#: archive.c:455
+#: archive.c:462
msgid "compress faster"
msgstr "бързо компресиране"
-#: archive.c:463
+#: archive.c:470
msgid "compress better"
msgstr "добро компресиране"
-#: archive.c:466
+#: archive.c:473
msgid "list supported archive formats"
msgstr "извеждане на списъка с поддържаните формати"
-#: archive.c:468 builtin/archive.c:90 builtin/clone.c:111 builtin/clone.c:114
-#: builtin/submodule--helper.c:1367 builtin/submodule--helper.c:1738
+#: 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
msgid "repo"
msgstr "хранилище"
-#: archive.c:469 builtin/archive.c:91
+#: archive.c:476 builtin/archive.c:91
msgid "retrieve the archive from remote repository <repo>"
msgstr "изтегляне на архива от отдалеченото ХРАНИЛИЩЕ"
-#: archive.c:470 builtin/archive.c:92 builtin/difftool.c:714
-#: builtin/notes.c:491
+#: archive.c:477 builtin/archive.c:92 builtin/difftool.c:714
+#: builtin/notes.c:496
msgid "command"
msgstr "команда"
-#: archive.c:471 builtin/archive.c:93
+#: archive.c:478 builtin/archive.c:93
msgid "path to the remote git-upload-archive command"
msgstr "път към отдалечената команда „git-upload-archive“"
-#: archive.c:478
+#: archive.c:485
msgid "Unexpected option --remote"
msgstr "Неочаквана опция „--remote“"
-#: archive.c:480
+#: archive.c:487
msgid "Option --exec can only be used together with --remote"
msgstr "Опцията „--exec“ изисква „--remote“"
-#: archive.c:482
+#: archive.c:489
msgid "Unexpected option --output"
msgstr "Неочаквана опция „--output“"
-#: archive.c:504
+#: archive.c:511
#, c-format
msgid "Unknown archive format '%s'"
msgstr "Непознат формат на архив: „%s“"
-#: archive.c:511
+#: archive.c:518
#, c-format
msgid "Argument not supported for format '%s': -%d"
msgstr "Аргументът не се поддържа за форма̀та „%s“: -%d"
-#: archive-tar.c:125 archive-zip.c:344
+#: archive-tar.c:125 archive-zip.c:345
#, c-format
msgid "cannot stream blob %s"
msgstr "обектът-BLOB „%s“ не може да бъде обработен"
-#: archive-tar.c:260 archive-zip.c:361
+#: archive-tar.c:260 archive-zip.c:363
#, c-format
msgid "unsupported file mode: 0%o (SHA1: %s)"
msgstr "неподдържани права за достъп до файл: 0%o (SHA1: %s)"
-#: archive-tar.c:287 archive-zip.c:352
+#: archive-tar.c:287 archive-zip.c:353
#, c-format
msgid "cannot read %s"
msgstr "обектът „%s“ не може да бъде прочетен"
@@ -1029,32 +1039,32 @@ msgstr "дескрипторът не може да бъде пренасоче
msgid "'%s' filter reported error"
msgstr "филтърът „%s“ върна грешка"
-#: archive-zip.c:313
+#: archive-zip.c:314
#, c-format
msgid "path is not valid UTF-8: %s"
msgstr "пътят не е правилно кодиран в UTF-8: %s"
-#: archive-zip.c:317
+#: archive-zip.c:318
#, c-format
msgid "path too long (%d chars, SHA1: %s): %s"
msgstr "твърде дълъг път (%d знака, SHA1: %s): %s"
-#: archive-zip.c:470 builtin/pack-objects.c:216 builtin/pack-objects.c:219
+#: archive-zip.c:474 builtin/pack-objects.c:224 builtin/pack-objects.c:227
#, c-format
msgid "deflate error (%d)"
msgstr "грешка при декомпресиране с „deflate“ (%d)"
-#: archive-zip.c:605
+#: archive-zip.c:609
#, c-format
msgid "timestamp too large for this system: %<PRIuMAX>"
msgstr "времевата стойност е твърде голяма за тази система: %<PRIuMAX>"
-#: attr.c:218
+#: attr.c:212
#, c-format
msgid "%.*s is not a valid attribute name"
msgstr "„%.*s“ е неправилно име за атрибут"
-#: attr.c:415
+#: attr.c:409
msgid ""
"Negative patterns are ignored in git attributes\n"
"Use '\\!' for literal leading exclamation."
@@ -1062,22 +1072,22 @@ msgstr ""
"Отрицателните шаблони се игнорират в атрибутите на git.\n"
"Ако ви трябва начална удивителна, ползвайте „\\!“."
-#: bisect.c:467
+#: bisect.c:468
#, c-format
msgid "Badly quoted content in file '%s': %s"
msgstr "Неправилно цитирано съдържание във файла „%s“: %s"
-#: bisect.c:675
+#: bisect.c:676
#, c-format
msgid "We cannot bisect more!\n"
msgstr "Повече не може да се търси двоично!\n"
-#: bisect.c:729
+#: bisect.c:730
#, c-format
msgid "Not a valid commit name %s"
msgstr "Неправилно име на подаване „%s“"
-#: bisect.c:753
+#: bisect.c:754
#, c-format
msgid ""
"The merge base %s is bad.\n"
@@ -1086,7 +1096,7 @@ msgstr ""
"Неправилна база за сливане: %s.\n"
"Следователно грешката е коригирана между „%s“ и [%s].\n"
-#: bisect.c:758
+#: bisect.c:759
#, c-format
msgid ""
"The merge base %s is new.\n"
@@ -1095,7 +1105,7 @@ msgstr ""
"Нова база за сливане: %s.\n"
"Свойството е променено между „%s“ и [%s].\n"
-#: bisect.c:763
+#: bisect.c:764
#, c-format
msgid ""
"The merge base %s is %s.\n"
@@ -1104,7 +1114,7 @@ msgstr ""
"Базата за сливане „%s“ е %s.\n"
"Следователно първото %s подаване е между „%s“ и [%s].\n"
-#: bisect.c:771
+#: bisect.c:772
#, c-format
msgid ""
"Some %s revs are not ancestors of the %s rev.\n"
@@ -1115,7 +1125,7 @@ msgstr ""
"Двоичното търсене с git bisect няма да работи правилно.\n"
"Дали не сте объркали указателите „%s“ и „%s“?\n"
-#: bisect.c:784
+#: bisect.c:785
#, c-format
msgid ""
"the merge base between %s and [%s] must be skipped.\n"
@@ -1126,36 +1136,36 @@ msgstr ""
"Не може да сме сигурни, че първото %s подаване е между „%s“ и „%s“.\n"
"Двоичното търсене продължава."
-#: bisect.c:817
+#: bisect.c:818
#, c-format
msgid "Bisecting: a merge base must be tested\n"
msgstr "Двоично търсене: трябва да се провери база за сливане\n"
-#: bisect.c:857
+#: bisect.c:858
#, c-format
msgid "a %s revision is needed"
msgstr "необходима е версия „%s“"
-#: bisect.c:876 builtin/notes.c:177 builtin/tag.c:237
+#: bisect.c:877 builtin/notes.c:177 builtin/tag.c:237
#, c-format
msgid "could not create file '%s'"
msgstr "файлът „%s“ не може да бъде създаден"
-#: bisect.c:927 builtin/merge.c:137
+#: bisect.c:928 builtin/merge.c:138
#, c-format
msgid "could not read file '%s'"
msgstr "файлът „%s“ не може да бъде прочетен"
-#: bisect.c:957
+#: bisect.c:958
msgid "reading bisect refs failed"
msgstr "неуспешно прочитане на указателите за двоично търсене"
-#: bisect.c:976
+#: bisect.c:977
#, c-format
msgid "%s was both %s and %s\n"
msgstr "„%s“ e както „%s“, така и „%s“\n"
-#: bisect.c:984
+#: bisect.c:985
#, c-format
msgid ""
"No testable commit found.\n"
@@ -1164,7 +1174,7 @@ msgstr ""
"Липсва подходящо за тестване подаване.\n"
"Проверете параметрите за пътищата.\n"
-#: bisect.c:1003
+#: bisect.c:1004
#, c-format
msgid "(roughly %d step)"
msgid_plural "(roughly %d steps)"
@@ -1174,48 +1184,48 @@ msgstr[1] "(приблизително %d стъпки)"
#. TRANSLATORS: the last %s will be replaced with "(roughly %d
#. steps)" translation.
#.
-#: bisect.c:1009
+#: bisect.c:1010
#, 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:1784
+#: blame.c:1787
msgid "--contents and --reverse do not blend well."
msgstr "Опциите „--contents“ и „--reverse“ са несъвместими"
-#: blame.c:1798
+#: blame.c:1801
msgid "cannot use --contents with final commit object name"
msgstr "Опцията „--contents“ е несъвместима с име на обект от крайно подаване"
-#: blame.c:1819
+#: blame.c:1822
msgid "--reverse and --first-parent together require specified latest commit"
msgstr ""
"Едновременното задаване на опциите „--reverse“ и „--first-parent“ изисква "
"указването на крайно подаване"
-#: blame.c:1828 bundle.c:162 ref-filter.c:2154 sequencer.c:1874
-#: sequencer.c:3772 builtin/commit.c:994 builtin/log.c:372 builtin/log.c:926
-#: builtin/log.c:1381 builtin/log.c:1713 builtin/log.c:1963 builtin/merge.c:404
-#: builtin/pack-objects.c:3029 builtin/pack-objects.c:3044
+#: 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
+#: builtin/pack-objects.c:3137 builtin/pack-objects.c:3152
#: builtin/shortlog.c:192
msgid "revision walk setup failed"
msgstr "неуспешно настройване на обхождането на версиите"
-#: blame.c:1846
+#: blame.c:1849
msgid ""
"--reverse --first-parent together require range along first-parent chain"
msgstr ""
"Едновременното задаване на опциите „--reverse“ и „--first-parent“ изисква "
"указването на диапазон по веригата на първите наследници"
-#: blame.c:1857
+#: blame.c:1860
#, c-format
msgid "no such path %s in %s"
msgstr "няма път на име „%s“ в „%s“"
-#: blame.c:1868
+#: blame.c:1871
#, c-format
msgid "cannot read blob %s for path %s"
msgstr "обектът-BLOB „%s“ в пътя %s не може да бъде прочетен"
@@ -1368,7 +1378,8 @@ msgstr "Файлът „%s“ не изглежда да е пратка на gi
msgid "unrecognized header: %s%s (%d)"
msgstr "непозната заглавна част: %s%s (%d)"
-#: bundle.c:90 sequencer.c:2092 sequencer.c:2578 builtin/commit.c:768
+#: bundle.c:90 rerere.c:480 rerere.c:690 sequencer.c:2182 sequencer.c:2722
+#: builtin/commit.c:774
#, c-format
msgid "could not open '%s'"
msgstr "„%s“ не може да се отвори"
@@ -1395,39 +1406,43 @@ msgid_plural "The bundle requires these %d refs:"
msgstr[0] "Пратката изисква следния указател:"
msgstr[1] "Пратката изисква следните %d указатели:"
-#: bundle.c:260
+#: bundle.c:267
+msgid "unable to dup bundle descriptor"
+msgstr "неуспешно дублиране на дескриптора на пратката с „dup“"
+
+#: bundle.c:274
msgid "Could not spawn pack-objects"
msgstr "Командата „git pack-objects“ не може да бъде стартирана"
-#: bundle.c:271
+#: bundle.c:285
msgid "pack-objects died"
msgstr "Командата „git pack-objects“ не завърши успешно"
-#: bundle.c:313
+#: bundle.c:327
msgid "rev-list died"
msgstr "Командата „git rev-list“ не завърши успешно"
-#: bundle.c:362
+#: bundle.c:376
#, c-format
msgid "ref '%s' is excluded by the rev-list options"
msgstr ""
"указателят „%s“ не е бил включен поради опциите зададени на „git rev-list“"
-#: bundle.c:453 builtin/log.c:187 builtin/log.c:1618 builtin/shortlog.c:304
+#: bundle.c:456 builtin/log.c:192 builtin/log.c:1688 builtin/shortlog.c:304
#, c-format
msgid "unrecognized argument: %s"
msgstr "непознат аргумент: %s"
-#: bundle.c:461
+#: bundle.c:464
msgid "Refusing to create empty bundle."
msgstr "Създаването на празна пратка е невъзможно."
-#: bundle.c:473
+#: bundle.c:474
#, c-format
msgid "cannot create '%s'"
msgstr "Файлът „%s“ не може да бъде създаден"
-#: bundle.c:501
+#: bundle.c:498
msgid "index-pack died"
msgstr "Командата „git index-pack“ не завърши успешно"
@@ -1436,19 +1451,19 @@ msgstr "Командата „git index-pack“ не завърши успешн
msgid "invalid color value: %.*s"
msgstr "неправилна стойност за цвят: %.*s"
-#: commit.c:48 sequencer.c:2384 builtin/am.c:422 builtin/am.c:466
-#: builtin/am.c:1438 builtin/am.c:2072 builtin/replace.c:376
+#: 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
#: builtin/replace.c:448
#, c-format
msgid "could not parse %s"
msgstr "„%s“ не може да се анализира"
-#: commit.c:50
+#: commit.c:52
#, c-format
msgid "%s %s is not a commit!"
msgstr "%s %s не е подаване!"
-#: commit.c:191
+#: commit.c:193
msgid ""
"Support for <GIT_DIR>/info/grafts is deprecated\n"
"and will be removed in a future Git version.\n"
@@ -1471,7 +1486,29 @@ msgstr ""
"\n"
" git config advice.graftFileDeprecated false"
-#: commit.c:1629
+#: commit.c:1115
+#, c-format
+msgid "Commit %s has an untrusted GPG signature, allegedly by %s."
+msgstr ""
+"Подаването „%s“ е с недоверен подпис от GPG, който твърди, че е на „%s“."
+
+#: commit.c:1118
+#, c-format
+msgid "Commit %s has a bad GPG signature allegedly by %s."
+msgstr ""
+"Подаването „%s“ е с неправилен подпис от GPG, който твърди, че е на „%s“."
+
+#: commit.c:1121
+#, c-format
+msgid "Commit %s does not have a GPG signature."
+msgstr "Подаването „%s“ е без подпис от GPG."
+
+#: commit.c:1124
+#, c-format
+msgid "Commit %s has a good GPG signature by %s\n"
+msgstr "Подаването „%s“ е с коректен подпис от GPG на „%s“.\n"
+
+#: commit.c:1378
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"
@@ -1481,74 +1518,90 @@ msgstr ""
"Може да поправите подаването заедно със съобщението или може да\n"
"зададете ползваното кодиране в настройката „i18n.commitencoding“.\n"
-#: commit-graph.c:83
+#: commit-graph.c:108
#, c-format
msgid "graph file %s is too small"
msgstr "файлът с гра̀фа на подаванията „%s“ е твърде малък"
-#: commit-graph.c:90
+#: commit-graph.c:115
#, c-format
msgid "graph signature %X does not match signature %X"
msgstr "отпечатъкът на гра̀фа с подаванията %X не съвпада с %X"
-#: commit-graph.c:97
+#: commit-graph.c:122
#, c-format
msgid "graph version %X does not match version %X"
msgstr "версията на гра̀фа с подаванията %X не съвпада с %X"
-#: commit-graph.c:104
+#: commit-graph.c:129
#, c-format
msgid "hash version %X does not match version %X"
msgstr "версията на отпечатъка на гра̀фа с подаванията %X не съвпада с %X"
-#: commit-graph.c:128
+#: commit-graph.c:153
#, c-format
msgid "improper chunk offset %08x%08x"
msgstr "неправилно отместване на откъс: %08x%08x"
-#: commit-graph.c:164
+#: commit-graph.c:189
#, c-format
msgid "chunk id %08x appears multiple times"
msgstr "откъсът %08x се явява многократно"
-#: commit-graph.c:261
+#: commit-graph.c:308
#, c-format
msgid "could not find commit %s"
msgstr "подаването „%s“ не може да бъде открито"
-#: commit-graph.c:565 builtin/pack-objects.c:2568
+#: commit-graph.c:617 builtin/pack-objects.c:2652
#, c-format
msgid "unable to get type of object %s"
msgstr "видът на обекта „%s“ не може да бъде определен"
-#: commit-graph.c:730
+#: commit-graph.c:651
+msgid "Annotating commits in commit graph"
+msgstr "Анотиране на подаванията в гра̀фа"
+
+#: commit-graph.c:691
+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:812
#, c-format
msgid "error adding pack %s"
msgstr "грешка при добавяне на пакетен файл „%s“"
-#: commit-graph.c:732
+#: commit-graph.c:814
#, c-format
msgid "error opening index for %s"
msgstr "грешка при отваряне на индекса на „%s“"
-#: commit-graph.c:773
+#: commit-graph.c:868
#, c-format
msgid "the commit graph format cannot write %d commits"
msgstr "форматът на гра̀фа с подаванията не може да запише %d подавания"
-#: commit-graph.c:800
+#: commit-graph.c:895
msgid "too many commits to write graph"
msgstr "прекалено много подавания за записване на гра̀фа"
-#: commit-graph.c:806
+#: commit-graph.c:902 midx.c:769
#, c-format
msgid "unable to create leading directories of %s"
msgstr "родителските директории на „%s“ не могат да бъдат създадени"
-#: commit-graph.c:904
+#: commit-graph.c:1002
msgid "the commit-graph file has incorrect checksum and is likely corrupt"
msgstr "графът с подаванията е с грешна сума за проверка — вероятно е повреден"
+#: commit-graph.c:1046
+msgid "Verifying commits in commit graph"
+msgstr "Проверка на подаванията в гра̀фа"
+
#: compat/obstack.c:405 compat/obstack.c:407
msgid "memory exhausted"
msgstr "паметта свърши"
@@ -1591,7 +1644,7 @@ msgstr "ключът не съдържа раздел: „%s“"
msgid "key does not contain variable name: %s"
msgstr "ключът не съдържа име на променлива: „%s“"
-#: config.c:378 sequencer.c:2206
+#: config.c:378 sequencer.c:2296
#, c-format
msgid "invalid key: %s"
msgstr "неправилен ключ: „%s“"
@@ -1713,17 +1766,17 @@ msgstr "настройката „core.commentChar“ трябва да е са
msgid "invalid mode for object creation: %s"
msgstr "неправилен режим за създаването на обекти: %s"
-#: config.c:1403
+#: config.c:1395
#, c-format
msgid "malformed value for %s"
msgstr "неправилна стойност за „%s“"
-#: config.c:1429
+#: config.c:1421
#, c-format
msgid "malformed value for %s: %s"
msgstr "неправилна стойност за „%s“: „%s“"
-#: config.c:1430
+#: config.c:1422
msgid "must be one of nothing, matching, simple, upstream or current"
msgstr ""
"трябва да е една от следните стойности: „nothing“ (без изтласкване при липса "
@@ -1731,139 +1784,139 @@ msgstr ""
"„simple“ (клонът със същото име, от който се издърпва), „upstream“ (клонът, "
"от който се издърпва) или „current“ (клонът със същото име)"
-#: config.c:1489 builtin/pack-objects.c:3279
+#: config.c:1481 builtin/pack-objects.c:3391
#, c-format
msgid "bad pack compression level %d"
msgstr "неправилно ниво на компресиране при пакетиране: %d"
-#: config.c:1610
+#: config.c:1602
#, c-format
msgid "unable to load config blob object '%s'"
msgstr "обектът-BLOB „%s“ с конфигурации не може да се зареди"
-#: config.c:1613
+#: config.c:1605
#, c-format
msgid "reference '%s' does not point to a blob"
msgstr "указателят „%s“ не сочи към обект-BLOB"
-#: config.c:1630
+#: config.c:1622
#, c-format
msgid "unable to resolve config blob '%s'"
msgstr "обектът-BLOB „%s“ с конфигурации не може да бъде открит"
-#: config.c:1660
+#: config.c:1652
#, c-format
msgid "failed to parse %s"
msgstr "„%s“ не може да бъде анализиран"
-#: config.c:1700
+#: config.c:1705
msgid "unable to parse command-line config"
msgstr "неправилни настройки от командния ред"
-#: config.c:2032
+#: config.c:2037
msgid "unknown error occurred while reading the configuration files"
msgstr "неочаквана грешка при изчитането на конфигурационните файлове"
-#: config.c:2202
+#: config.c:2207
#, c-format
msgid "Invalid %s: '%s'"
msgstr "Неправилен %s: „%s“"
-#: config.c:2245
+#: config.c:2250
#, c-format
msgid "unknown core.untrackedCache value '%s'; using 'keep' default value"
msgstr ""
"непозната стойност „%s“ за настройката „core.untrackedCache“. Ще се ползва "
"стандартната стойност „keep“ (запазване)"
-#: config.c:2271
+#: config.c:2276
#, c-format
msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100"
msgstr ""
"стойността на „splitIndex.maxPercentChange“ трябва да е между 1 и 100, а не "
"%d"
-#: config.c:2296
+#: config.c:2322
#, c-format
msgid "unable to parse '%s' from command-line config"
msgstr "неразпозната стойност „%s“ от командния ред"
-#: config.c:2298
+#: config.c:2324
#, c-format
msgid "bad config variable '%s' in file '%s' at line %d"
msgstr "неправилна настройка „%s“ във файла „%s“ на ред №%d"
-#: config.c:2379
+#: config.c:2405
#, c-format
msgid "invalid section name '%s'"
msgstr "неправилно име на раздел: „%s“"
-#: config.c:2411
+#: config.c:2437
#, c-format
msgid "%s has multiple values"
msgstr "зададени са няколко стойности за „%s“"
-#: config.c:2440
+#: config.c:2466
#, c-format
msgid "failed to write new configuration file %s"
msgstr "новият конфигурационен файл „%s“ не може да бъде запазен"
-#: config.c:2691 config.c:3015
+#: config.c:2717 config.c:3041
#, c-format
msgid "could not lock config file %s"
msgstr "конфигурационният файл „%s“ не може да бъде заключен"
-#: config.c:2702
+#: config.c:2728
#, c-format
msgid "opening %s"
msgstr "отваряне на „%s“"
-#: config.c:2737 builtin/config.c:324
+#: config.c:2763 builtin/config.c:327
#, c-format
msgid "invalid pattern: %s"
msgstr "неправилен шаблон: %s"
-#: config.c:2762
+#: config.c:2788
#, c-format
msgid "invalid config file %s"
msgstr "неправилен конфигурационен файл: „%s“"
-#: config.c:2775 config.c:3028
+#: config.c:2801 config.c:3054
#, c-format
msgid "fstat on %s failed"
msgstr "неуспешно изпълнение на „fstat“ върху „%s“"
-#: config.c:2786
+#: config.c:2812
#, c-format
msgid "unable to mmap '%s'"
msgstr "неуспешно изпълнение на „mmap“ върху „%s“"
-#: config.c:2795 config.c:3033
+#: config.c:2821 config.c:3059
#, c-format
msgid "chmod on %s failed"
msgstr "неуспешна смяна на права с „chmod“ върху „%s“"
-#: config.c:2880 config.c:3130
+#: config.c:2906 config.c:3156
#, c-format
msgid "could not write config file %s"
msgstr "конфигурационният файл „%s“ не може да бъде записан"
-#: config.c:2914
+#: config.c:2940
#, c-format
msgid "could not set '%s' to '%s'"
msgstr "„%s“ не може да се зададе да е „%s“"
-#: config.c:2916 builtin/remote.c:781
+#: config.c:2942 builtin/remote.c:782
#, c-format
msgid "could not unset '%s'"
msgstr "„%s“ не може да се премахне"
-#: config.c:3006
+#: config.c:3032
#, c-format
msgid "invalid section name: %s"
msgstr "неправилно име на раздел: %s"
-#: config.c:3173
+#: config.c:3199
#, c-format
msgid "missing value for '%s'"
msgstr "липсва стойност за „%s“"
@@ -1917,7 +1970,7 @@ msgstr "протоколна грешка: очаква се SHA1 на плит
msgid "repository on the other end cannot be shallow"
msgstr "отсрещното хранилище не може да е плитко"
-#: connect.c:310 fetch-pack.c:183 builtin/archive.c:63
+#: connect.c:310 fetch-pack.c:182 builtin/archive.c:63
#, c-format
msgid "remote error: %s"
msgstr "отдалечена грешка: %s"
@@ -2037,7 +2090,7 @@ msgstr "необичайният път „%s“ е блокиран"
msgid "unable to fork"
msgstr "неуспешно създаване на процес"
-#: connected.c:68 builtin/fsck.c:203 builtin/prune.c:146
+#: connected.c:68 builtin/fsck.c:202 builtin/prune.c:147
msgid "Checking connectivity"
msgstr "Проверка на връзката"
@@ -2179,12 +2232,12 @@ msgstr ""
msgid "true/false are no valid working-tree-encodings"
msgstr "„true“/„false“ не може да са кодирания на работното дърво"
-#: convert.c:1402 convert.c:1436
+#: convert.c:1398 convert.c:1432
#, c-format
msgid "%s: clean filter '%s' failed"
msgstr "%s: неуспешно изпълнение на декодиращ филтър „%s“"
-#: convert.c:1480
+#: convert.c:1476
#, c-format
msgid "%s: smudge filter %s failed"
msgstr "%s: неуспешно изпълнение на кодиращ филтър „%s“"
@@ -2257,12 +2310,38 @@ msgid_plural "%<PRIuMAX> years ago"
msgstr[0] "преди %<PRIuMAX> година"
msgstr[1] "преди %<PRIuMAX> години"
+#: delta-islands.c:268
+msgid "Propagating island marks"
+msgstr "Разпространяване на границите на групите"
+
+#: delta-islands.c:286
+#, c-format
+msgid "bad tree object %s"
+msgstr "неправилен обект-дърво: %s"
+
+#: delta-islands.c:330
+#, c-format
+msgid "failed to load island regex for '%s': %s"
+msgstr "регулярният израз на групата за „%s“, не може да бъде зареден: „%s“"
+
+#: delta-islands.c:386
+#, c-format
+msgid "island regex from config has too many capture groups (max=%d)"
+msgstr ""
+"регулярният израз на групата в конфигурационния файл съдържа повече от "
+"максимално поддържаните (%d) прихващащи групи"
+
+#: delta-islands.c:462
+#, c-format
+msgid "Marked %d islands, done.\n"
+msgstr "Отбелязани са %d групи, работата приключи.\n"
+
#: diffcore-order.c:24
#, c-format
msgid "failed to read orderfile '%s'"
msgstr "файлът с подредбата на съответствията „%s“ не може да бъде прочетен"
-#: diffcore-rename.c:536
+#: diffcore-rename.c:544
msgid "Performing inexact rename detection"
msgstr "Търсене на преименувания на обекти съчетани с промени"
@@ -2319,27 +2398,27 @@ msgstr ""
"Грешки в настройката „diff.dirstat“:\n"
"%s"
-#: diff.c:4096
+#: diff.c:4140
#, c-format
msgid "external diff died, stopping at %s"
msgstr ""
"външната програма за разлики завърши неуспешно. Спиране на работата при „%s“"
-#: diff.c:4427
+#: diff.c:4482
msgid "--name-only, --name-status, --check and -s are mutually exclusive"
msgstr ""
"Опциите „--name-only“, „--name-status“, „--check“ и „-s“ са несъвместими "
"една с друга"
-#: diff.c:4430
+#: diff.c:4485
msgid "-G, -S and --find-object are mutually exclusive"
msgstr "Опциите „-G“, „-S“ и „--find-object“ са несъвместими една с друга"
-#: diff.c:4508
+#: diff.c:4563
msgid "--follow requires exactly one pathspec"
msgstr "Опцията „--follow“ изисква точно един път"
-#: diff.c:4674
+#: diff.c:4729
#, c-format
msgid ""
"Failed to parse --dirstat/-X option parameter:\n"
@@ -2348,68 +2427,68 @@ msgstr ""
"Неразпознат параметър към опцията „--dirstat/-X“:\n"
"%s"
-#: diff.c:4688
+#: diff.c:4743
#, c-format
msgid "Failed to parse --submodule option parameter: '%s'"
msgstr "Неразпознат параметър към опцията „--submodule“: „%s“"
-#: diff.c:5766
+#: diff.c:5823
msgid "inexact rename detection was skipped due to too many files."
msgstr ""
"търсенето на преименувания на обекти съчетани с промени се прескача поради "
"многото файлове."
-#: diff.c:5769
+#: diff.c:5826
msgid "only found copies from modified paths due to too many files."
msgstr ""
"установени са точните копия на променените пътища поради многото файлове."
-#: diff.c:5772
+#: diff.c:5829
#, c-format
msgid ""
"you may want to set your %s variable to at least %d and retry the command."
msgstr "задайте променливата „%s“ да е поне %d и отново изпълнете командата."
-#: dir.c:569
+#: dir.c:576
#, c-format
msgid "pathspec '%s' did not match any file(s) known to git"
msgstr "пътят „%s“ не съвпада с никой файл в git"
-#: dir.c:958
+#: dir.c:965
#, c-format
msgid "cannot use %s as an exclude file"
msgstr "„%s“ не може да се ползва за игнорираните файлове (като gitignore)"
-#: dir.c:1873
+#: dir.c:1880
#, c-format
msgid "could not open directory '%s'"
msgstr "директорията „%s“ не може да бъде отворена"
-#: dir.c:2115
+#: dir.c:2122
msgid "failed to get kernel name and information"
msgstr "името и версията на ядрото не бяха получени"
-#: dir.c:2239
+#: dir.c:2246
msgid "untracked cache is disabled on this system or location"
msgstr ""
"кешът за неследените файлове е изключен на тази система или местоположение"
-#: dir.c:3037
+#: dir.c:3047
#, c-format
msgid "index file corrupt in repo %s"
msgstr "файлът с индекса е повреден в хранилището „%s“"
-#: dir.c:3082 dir.c:3087
+#: dir.c:3092 dir.c:3097
#, c-format
msgid "could not create directories for %s"
msgstr "директориите за „%s“ не може да бъдат създадени"
-#: dir.c:3116
+#: dir.c:3126
#, c-format
msgid "could not migrate git directory from '%s' to '%s'"
msgstr "директорията на git не може да се мигрира от „%s“ до „%s“"
-#: editor.c:61
+#: editor.c:73
#, c-format
msgid "hint: Waiting for your editor to close the file...%c"
msgstr "Подсказка: чака се редакторът ви да затвори файла …%c"
@@ -2418,7 +2497,7 @@ msgstr "Подсказка: чака се редакторът ви да зат
msgid "Filtering content"
msgstr "Филтриране на съдържанието"
-#: entry.c:437
+#: entry.c:465
#, c-format
msgid "could not stat file '%s'"
msgstr "неуспешно изпълнение на „stat“ върху файла „%s“"
@@ -2442,78 +2521,78 @@ msgstr "прекалено много аргументи за изпълнени
msgid "Remote with no URL"
msgstr "Липсва адрес за отдалеченото хранилище"
-#: fetch-pack.c:152
+#: fetch-pack.c:151
msgid "git fetch-pack: expected shallow list"
msgstr "git fetch-pack: очаква се плитък списък"
-#: fetch-pack.c:164
+#: fetch-pack.c:163
msgid "git fetch-pack: expected ACK/NAK, got a flush packet"
msgstr ""
"git fetch-pack: очаква се „ACK“/„NAK“, а бе получен изчистващ пакет „flush“"
-#: fetch-pack.c:184
+#: fetch-pack.c:183
#, c-format
msgid "git fetch-pack: expected ACK/NAK, got '%s'"
msgstr "git fetch-pack: очаква се „ACK“/„NAK“, а бе получено „%s“"
-#: fetch-pack.c:254
+#: fetch-pack.c:253
msgid "--stateless-rpc requires multi_ack_detailed"
msgstr "опцията „--stateless-rpc“ изисква „multi_ack_detailed“"
-#: fetch-pack.c:342 fetch-pack.c:1257
+#: fetch-pack.c:347 fetch-pack.c:1277
#, c-format
msgid "invalid shallow line: %s"
msgstr "неправилен плитък ред: „%s“"
-#: fetch-pack.c:348 fetch-pack.c:1263
+#: fetch-pack.c:353 fetch-pack.c:1283
#, c-format
msgid "invalid unshallow line: %s"
msgstr "неправилен неплитък ред: „%s“"
-#: fetch-pack.c:350 fetch-pack.c:1265
+#: fetch-pack.c:355 fetch-pack.c:1285
#, c-format
msgid "object not found: %s"
msgstr "обектът „%s“ липсва"
-#: fetch-pack.c:353 fetch-pack.c:1268
+#: fetch-pack.c:358 fetch-pack.c:1288
#, c-format
msgid "error in object: %s"
msgstr "грешка в обекта: „%s“"
-#: fetch-pack.c:355 fetch-pack.c:1270
+#: fetch-pack.c:360 fetch-pack.c:1290
#, c-format
msgid "no shallow found: %s"
msgstr "не е открит плитък обект: %s"
-#: fetch-pack.c:358 fetch-pack.c:1273
+#: fetch-pack.c:363 fetch-pack.c:1293
#, c-format
msgid "expected shallow/unshallow, got %s"
msgstr "очаква се плитък или не обект, а бе получено: „%s“"
-#: fetch-pack.c:399
+#: fetch-pack.c:404
#, c-format
msgid "got %s %d %s"
msgstr "получено бе %s %d %s"
-#: fetch-pack.c:416
+#: fetch-pack.c:421
#, c-format
msgid "invalid commit %s"
msgstr "неправилно подаване: „%s“"
-#: fetch-pack.c:447
+#: fetch-pack.c:452
msgid "giving up"
msgstr "преустановяване"
-#: fetch-pack.c:459 progress.c:229
+#: fetch-pack.c:464 progress.c:229
msgid "done"
msgstr "действието завърши"
-#: fetch-pack.c:471
+#: fetch-pack.c:476
#, c-format
msgid "got %s (%d) %s"
msgstr "получено бе %s (%d) %s"
-#: fetch-pack.c:517
+#: fetch-pack.c:522
#, c-format
msgid "Marking %s as complete"
msgstr "Отбелязване на „%s“ като пълно"
@@ -2581,7 +2660,7 @@ msgstr "Сървърът поддържа „allow-reachable-sha1-in-want“"
msgid "Server supports ofs-delta"
msgstr "Сървърът поддържа „ofs-delta“"
-#: fetch-pack.c:971 fetch-pack.c:1150
+#: fetch-pack.c:971 fetch-pack.c:1158
msgid "Server supports filter"
msgstr "Сървърът поддържа филтри"
@@ -2602,85 +2681,96 @@ msgstr "Сървърът не поддържа опцията „--shallow-exclu
msgid "Server does not support --deepen"
msgstr "Сървърът не поддържа опцията „--deepen“"
-#: fetch-pack.c:1004
+#: fetch-pack.c:1008
msgid "no common commits"
msgstr "няма общи подавания"
-#: fetch-pack.c:1016 fetch-pack.c:1393
+#: fetch-pack.c:1020 fetch-pack.c:1418
msgid "git fetch-pack: fetch failed."
msgstr "git fetch-pack: неуспешно доставяне."
-#: fetch-pack.c:1145
+#: fetch-pack.c:1153
msgid "Server does not support shallow requests"
msgstr "Сървърът не поддържа плитки заявки"
-#: fetch-pack.c:1191
+#: fetch-pack.c:1199
#, c-format
msgid "error reading section header '%s'"
msgstr "грешка при прочитане на заглавната част на раздел „%s“"
-#: fetch-pack.c:1197
+#: fetch-pack.c:1205
#, c-format
msgid "expected '%s', received '%s'"
msgstr "очаква се „%s“, а бе получено „%s“"
-#: fetch-pack.c:1236
+#: fetch-pack.c:1244
#, c-format
msgid "unexpected acknowledgment line: '%s'"
msgstr "неочакван ред за потвърждение: „%s“"
-#: fetch-pack.c:1241
+#: fetch-pack.c:1249
#, c-format
msgid "error processing acks: %d"
msgstr "грешка при обработка на потвържденията: %d"
-#: fetch-pack.c:1278
+#: fetch-pack.c:1259
+msgid "expected packfile to be sent after 'ready'"
+msgstr ""
+"очакваше се пакетният файл да бъде изпратен след отговор за готовност (ready)"
+
+#: fetch-pack.c:1261
+msgid "expected no other sections to be sent after no 'ready'"
+msgstr ""
+"очакваше се след липса на отговор за готовност (ready) да не се се пращат "
+"други раздели"
+
+#: fetch-pack.c:1298
#, c-format
msgid "error processing shallow info: %d"
msgstr "грешка при обработка на информация за дълбочината/плиткостта: %d"
-#: fetch-pack.c:1294
+#: fetch-pack.c:1314
#, c-format
msgid "expected wanted-ref, got '%s'"
msgstr "очаква се искан указател, а бе получено: „%s“"
-#: fetch-pack.c:1304
+#: fetch-pack.c:1324
#, c-format
msgid "unexpected wanted-ref: '%s'"
msgstr "неочакван искан указател: „%s“"
-#: fetch-pack.c:1308
+#: fetch-pack.c:1328
#, c-format
msgid "error processing wanted refs: %d"
msgstr "грешка при обработката на исканите указатели: %d"
-#: fetch-pack.c:1603
+#: fetch-pack.c:1642
msgid "no matching remote head"
msgstr "не може да бъде открит подходящ връх от отдалеченото хранилище"
-#: fetch-pack.c:1621 builtin/clone.c:664
+#: fetch-pack.c:1660 builtin/clone.c:664
msgid "remote did not send all necessary objects"
msgstr "отдалеченото хранилище не изпрати всички необходими обекти."
-#: fetch-pack.c:1647
+#: fetch-pack.c:1686
#, c-format
msgid "no such remote ref %s"
msgstr "такъв отдалечен указател няма: %s"
-#: fetch-pack.c:1650
+#: fetch-pack.c:1689
#, c-format
msgid "Server does not allow request for unadvertised object %s"
msgstr "Сървърът не позволява заявка за необявен „%s“"
-#: gpg-interface.c:253
+#: gpg-interface.c:318
msgid "gpg failed to sign the data"
msgstr "Програмата „gpg“ не подписа данните."
-#: gpg-interface.c:279
+#: gpg-interface.c:344
msgid "could not create temporary file"
msgstr "не може да се създаде временен файл"
-#: gpg-interface.c:282
+#: gpg-interface.c:347
#, c-format
msgid "failed writing detached signature to '%s'"
msgstr "Програмата не успя да запише самостоятелния подпис в „%s“"
@@ -2690,18 +2780,18 @@ msgstr "Програмата не успя да запише самостоят
msgid "ignore invalid color '%.*s' in log.graphColors"
msgstr "прескачане на неправилния цвят „%.*s“ в „log.graphColors“"
-#: grep.c:2115
+#: grep.c:2113
#, c-format
msgid "'%s': unable to read %s"
msgstr "„%s“: файлът сочен от „%s“ не може да бъде прочетен"
-#: grep.c:2132 setup.c:164 builtin/clone.c:410 builtin/diff.c:81
+#: grep.c:2130 setup.c:164 builtin/clone.c:410 builtin/diff.c:81
#: builtin/rm.c:134
#, c-format
msgid "failed to stat '%s'"
msgstr "не може да бъде получена информация чрез „stat“ за „%s“"
-#: grep.c:2143
+#: grep.c:2141
#, c-format
msgid "'%s': short read"
msgstr "„%s“: изчитането върна по-малко байтове от очакваното"
@@ -2758,29 +2848,41 @@ msgstr "Команди от ниско ниво/Синхронизация на
msgid "Low-level Commands / Internal Helpers"
msgstr "Команди от ниско ниво/Допълнителни инструменти"
-#: help.c:293
+#: help.c:296
#, c-format
msgid "available git commands in '%s'"
msgstr "налични команди на git от „%s“"
-#: help.c:300
+#: help.c:303
msgid "git commands available from elsewhere on your $PATH"
msgstr "команди на git от други директории от „$PATH“"
-#: help.c:309
+#: help.c:312
msgid "These are common Git commands used in various situations:"
msgstr "Това са най-често използваните команди на Git:"
-#: help.c:358 git.c:90
+#: help.c:361 git.c:90
#, c-format
msgid "unsupported command listing type '%s'"
msgstr "неподдържан списък от команди „%s“"
-#: help.c:405
+#: help.c:408
msgid "The common Git guides are:"
msgstr "Популярните въведения в Git са:"
-#: help.c:552
+#: help.c:517
+msgid "See 'git help <command>' to read about a specific subcommand"
+msgstr "За повече информация за КОМАНДА изпълнете „git help КОМАНДА“"
+
+#: help.c:522
+msgid "External commands"
+msgstr "Външни команди"
+
+#: help.c:530
+msgid "Command aliases"
+msgstr "Псевдоними на командите"
+
+#: help.c:594
#, c-format
msgid ""
"'%s' appears to be a git command, but we were not\n"
@@ -2789,36 +2891,36 @@ msgstr ""
"Изглежда, че „%s“ е команда на git, но тя не може да\n"
"бъде изпълнена. Вероятно пакетът „git-%s“ е повреден."
-#: help.c:611
+#: help.c:653
msgid "Uh oh. Your system reports no Git commands at all."
msgstr "Странно, изглежда, че на системата ви няма нито една команда на git."
-#: help.c:633
+#: help.c:675
#, c-format
msgid "WARNING: You called a Git command named '%s', which does not exist."
msgstr ""
"ПРЕДУПРЕЖДЕНИЕ: Пробвахте да изпълните команда на Git на име „%s“, а такава "
"не съществува."
-#: help.c:638
+#: help.c:680
#, c-format
msgid "Continuing under the assumption that you meant '%s'."
msgstr ""
"Изпълнението автоматично продължава, като се счита, че имате предвид „%s“."
-#: help.c:643
+#: help.c:685
#, c-format
msgid "Continuing in %0.1f seconds, assuming that you meant '%s'."
msgstr ""
"Изпълнението автоматично ще продължи след %0.1f сек., като се счита, че "
"имате предвид „%s“."
-#: help.c:651
+#: help.c:693
#, c-format
msgid "git: '%s' is not a git command. See 'git --help'."
msgstr "git: „%s“ не е команда на git. Погледнете изхода от „git --help“."
-#: help.c:655
+#: help.c:697
msgid ""
"\n"
"The most similar command is"
@@ -2832,16 +2934,16 @@ msgstr[1] ""
"\n"
"Най-близките команди са"
-#: help.c:670
+#: help.c:712
msgid "git version [<options>]"
msgstr "git version [ОПЦИЯ…]"
-#: help.c:738
+#: help.c:780
#, c-format
msgid "%s: %s - %s"
msgstr "%s: %s — %s"
-#: help.c:742
+#: help.c:784
msgid ""
"\n"
"Did you mean this?"
@@ -2855,7 +2957,7 @@ msgstr[1] ""
"\n"
"Команди с подобно име са:"
-#: ident.c:342
+#: ident.c:345
msgid ""
"\n"
"*** Please tell me who you are.\n"
@@ -2882,46 +2984,50 @@ msgstr ""
"хранилище.\n"
"\n"
-#: ident.c:366
+#: ident.c:369
msgid "no email was given and auto-detection is disabled"
msgstr "липсва адрес за е-поща, а автоматичното отгатване е изключено"
-#: ident.c:371
+#: ident.c:374
#, c-format
msgid "unable to auto-detect email address (got '%s')"
msgstr ""
"адресът за е-поща не може да бъде отгатнат (най-доброто предположение бе "
"„%s“)"
-#: ident.c:381
+#: ident.c:384
msgid "no name was given and auto-detection is disabled"
msgstr "липсва име, а автоматичното отгатване е изключено"
-#: ident.c:387
+#: ident.c:390
#, c-format
msgid "unable to auto-detect name (got '%s')"
msgstr "името не може да бъде отгатнато (най-доброто предположение бе „%s“)"
-#: ident.c:395
+#: ident.c:398
#, c-format
msgid "empty ident name (for <%s>) not allowed"
msgstr "не може да се ползва празно име като идентификатор (за <%s>)"
-#: ident.c:401
+#: ident.c:404
#, c-format
msgid "name consists only of disallowed characters: %s"
msgstr "името съдържа само непозволени знаци: „%s“"
-#: ident.c:416 builtin/commit.c:600
+#: ident.c:419 builtin/commit.c:606
#, c-format
msgid "invalid date format: %s"
msgstr "неправилен формат на дата: %s"
-#: list-objects-filter-options.c:36
+#: list-objects-filter-options.c:35
msgid "multiple filter-specs cannot be combined"
msgstr "не може да комбинирате множество филтри"
-#: list-objects-filter-options.c:126
+#: list-objects-filter-options.c:58
+msgid "only 'tree:0' is supported"
+msgstr "поддържа се единствено „tree:0“"
+
+#: list-objects-filter-options.c:137
msgid "cannot change partial clone promisor remote"
msgstr "не може да промените хранилището-гарант на непълно хранилище"
@@ -2949,129 +3055,129 @@ msgstr ""
msgid "Unable to create '%s.lock': %s"
msgstr "Файлът-ключалка „%s.lock“ не може да бъде създаден: %s"
-#: merge.c:40
+#: merge.c:41
msgid "failed to read the cache"
msgstr "кешът не може да бъде прочетен"
-#: merge.c:105 builtin/am.c:1946 builtin/am.c:1980 builtin/checkout.c:380
-#: builtin/checkout.c:608 builtin/clone.c:763
+#: 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
msgid "unable to write new index file"
msgstr "неуспешно записване на новия индекс"
-#: merge-recursive.c:303
+#: merge-recursive.c:323
msgid "(bad commit)\n"
msgstr "(лошо подаване)\n"
-#: merge-recursive.c:325
+#: merge-recursive.c:345
#, c-format
msgid "add_cacheinfo failed for path '%s'; merge aborting."
msgstr ""
"неуспешно изпълнение на „add_cacheinfo“ за пътя „%s“. Сливането е "
"преустановено."
-#: merge-recursive.c:333
+#: merge-recursive.c:353
#, c-format
msgid "add_cacheinfo failed to refresh for path '%s'; merge aborting."
msgstr ""
"неуспешно изпълнение на „add_cacheinfo“ за обновяването на пътя „%s“. "
"Сливането е преустановено."
-#: merge-recursive.c:415
+#: merge-recursive.c:435
msgid "error building trees"
msgstr "грешка при изграждане на дърветата"
-#: merge-recursive.c:886
+#: merge-recursive.c:906
#, c-format
msgid "failed to create path '%s'%s"
msgstr "грешка при създаването на пътя „%s“%s"
-#: merge-recursive.c:897
+#: merge-recursive.c:917
#, c-format
msgid "Removing %s to make room for subdirectory\n"
msgstr "Изтриване на „%s“, за да се освободи място за поддиректория\n"
-#: merge-recursive.c:911 merge-recursive.c:930
+#: merge-recursive.c:931 merge-recursive.c:950
msgid ": perhaps a D/F conflict?"
msgstr ": възможно е да има конфликт директория/файл."
-#: merge-recursive.c:920
+#: merge-recursive.c:940
#, c-format
msgid "refusing to lose untracked file at '%s'"
msgstr ""
"преустановяване на действието, за да не се изтрие неследеният файл „%s“"
-#: merge-recursive.c:962 builtin/cat-file.c:39
+#: merge-recursive.c:982 builtin/cat-file.c:39
#, c-format
msgid "cannot read object %s '%s'"
msgstr "обектът „%s“ (%s) не може да бъде прочетен"
-#: merge-recursive.c:964
+#: merge-recursive.c:984
#, c-format
msgid "blob expected for %s '%s'"
msgstr "обектът „%s“ (%s) се очакваше да е BLOB, а не е"
-#: merge-recursive.c:988
+#: merge-recursive.c:1008
#, c-format
msgid "failed to open '%s': %s"
msgstr "„%s“ не може да се отвори: %s"
-#: merge-recursive.c:999
+#: merge-recursive.c:1019
#, c-format
msgid "failed to symlink '%s': %s"
msgstr "неуспешно създаване на символната връзка „%s“: %s"
-#: merge-recursive.c:1004
+#: merge-recursive.c:1024
#, c-format
msgid "do not know what to do with %06o %s '%s'"
msgstr ""
"не е ясно какво да се прави с обекта „%2$s“ (%3$s) с права за достъп „%1$06o“"
-#: merge-recursive.c:1191
+#: merge-recursive.c:1212
#, c-format
msgid "Failed to merge submodule %s (not checked out)"
msgstr "Неуспешно сливане на подмодула „%s“ (не е изтеглен)"
-#: merge-recursive.c:1198
+#: merge-recursive.c:1219
#, c-format
msgid "Failed to merge submodule %s (commits not present)"
msgstr "Неуспешно сливане на подмодула „%s“ (няма подавания)"
-#: merge-recursive.c:1205
+#: merge-recursive.c:1226
#, c-format
msgid "Failed to merge submodule %s (commits don't follow merge-base)"
msgstr ""
"Подмодулът „%s“ не може да бъде слят (базата за сливане не предшества "
"подаванията)"
-#: merge-recursive.c:1213 merge-recursive.c:1225
+#: merge-recursive.c:1234 merge-recursive.c:1246
#, c-format
msgid "Fast-forwarding submodule %s to the following commit:"
msgstr "Превъртане на подмодула „%s“ до следното подаване:"
-#: merge-recursive.c:1216 merge-recursive.c:1228
+#: merge-recursive.c:1237 merge-recursive.c:1249
#, c-format
msgid "Fast-forwarding submodule %s"
msgstr "Превъртане на подмодула „%s“"
-#: merge-recursive.c:1250
+#: merge-recursive.c:1271
#, c-format
msgid "Failed to merge submodule %s (merge following commits not found)"
msgstr ""
"Неуспешно сливане на подмодула „%s“ (липсва сливането, което се предшества "
"от подаванията)"
-#: merge-recursive.c:1254
+#: merge-recursive.c:1275
#, c-format
msgid "Failed to merge submodule %s (not fast-forward)"
msgstr "Неуспешно сливане на подмодула „%s“ (не е превъртане)"
-#: merge-recursive.c:1255
+#: merge-recursive.c:1276
msgid "Found a possible merge resolution for the submodule:\n"
msgstr ""
"Открито е сливане, което може да решава проблема със сливането на "
"подмодула:\n"
-#: merge-recursive.c:1258
+#: merge-recursive.c:1279
#, c-format
msgid ""
"If this is correct simply add it to the index for example\n"
@@ -3087,31 +3193,31 @@ msgstr ""
"\n"
"Това приема предложеното.\n"
-#: merge-recursive.c:1267
+#: merge-recursive.c:1288
#, c-format
msgid "Failed to merge submodule %s (multiple merges found)"
msgstr "Неуспешно сливане на подмодула „%s“ (открити са множество сливания)"
-#: merge-recursive.c:1326
+#: merge-recursive.c:1358
msgid "Failed to execute internal merge"
msgstr "Неуспешно вътрешно сливане"
-#: merge-recursive.c:1331
+#: merge-recursive.c:1363
#, c-format
msgid "Unable to add %s to database"
msgstr "„%s“ не може да се добави в базата с данни"
-#: merge-recursive.c:1363
+#: merge-recursive.c:1395
#, c-format
msgid "Auto-merging %s"
msgstr "Автоматично сливане на „%s“"
-#: merge-recursive.c:1434
+#: merge-recursive.c:1416
#, c-format
msgid "Error: Refusing to lose untracked file at %s; writing to %s instead."
msgstr "Грешка: за да не се изтрие неследеният файл „%s“, се записва в „%s“."
-#: merge-recursive.c:1501
+#: merge-recursive.c:1483
#, c-format
msgid ""
"CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -3120,7 +3226,7 @@ msgstr ""
"КОНФЛИКТ (%s/изтриване): „%s“ е изтрит в %s, а „%s“ в %s. Версия %s на „%s“ "
"е оставена в дървото."
-#: merge-recursive.c:1506
+#: merge-recursive.c:1488
#, c-format
msgid ""
"CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -3129,7 +3235,7 @@ msgstr ""
"КОНФЛИКТ (%s/изтриване): „%s“ е изтрит в %s, а „%s“ е преименуван на „%s“ в "
"%s. Версия %s на „%s“ е оставена в дървото."
-#: merge-recursive.c:1513
+#: merge-recursive.c:1495
#, c-format
msgid ""
"CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left "
@@ -3138,7 +3244,7 @@ msgstr ""
"КОНФЛИКТ (%s/изтриване): „%s“ е изтрит в %s, а „%s“ в %s. Версия %s на „%s“ "
"е оставена в дървото: %s."
-#: merge-recursive.c:1518
+#: merge-recursive.c:1500
#, c-format
msgid ""
"CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s "
@@ -3147,33 +3253,33 @@ msgstr ""
"КОНФЛИКТ (%s/изтриване): „%s“ е изтрит в %s, а „%s“ е преименуван на „%s“ в "
"%s. Версия %s на „%s“ е оставена в дървото: %s."
-#: merge-recursive.c:1552
+#: merge-recursive.c:1534
msgid "rename"
msgstr "преименуване"
-#: merge-recursive.c:1552
+#: merge-recursive.c:1534
msgid "renamed"
msgstr "преименуван"
-#: merge-recursive.c:1606 merge-recursive.c:1762 merge-recursive.c:2394
-#: merge-recursive.c:3129
+#: merge-recursive.c:1588 merge-recursive.c:1737 merge-recursive.c:2369
+#: merge-recursive.c:3124
#, c-format
msgid "Refusing to lose dirty file at %s"
msgstr "Преустановяване на действието, за да не се изгуби промененият „%s“"
-#: merge-recursive.c:1620
+#: merge-recursive.c:1602
#, c-format
msgid "%s is a directory in %s adding as %s instead"
msgstr "„%s“ е директория в „%s“, затова се добавя като „%s“"
-#: merge-recursive.c:1625
+#: merge-recursive.c:1607
#, c-format
msgid "Refusing to lose untracked file at %s; adding as %s instead"
msgstr ""
"Преустановяване на действието, за да не се изгуби неследеният файл „%s“. "
"Вместо него се добавя „%s“"
-#: merge-recursive.c:1651
+#: merge-recursive.c:1633
#, c-format
msgid ""
"CONFLICT (rename/rename): Rename \"%s\"->\"%s\" in branch \"%s\" rename \"%s"
@@ -3182,29 +3288,29 @@ msgstr ""
"КОНФЛИКТ (преименуване/преименуване): „%s“ е преименуван на „%s“ в клон "
"„%s“, а „%s“ е преименуван на „%s“ в „%s“/%s."
-#: merge-recursive.c:1656
+#: merge-recursive.c:1638
msgid " (left unresolved)"
msgstr " (некоригиран конфликт)"
-#: merge-recursive.c:1720
+#: merge-recursive.c:1699
#, 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:1759
+#: merge-recursive.c:1734
#, c-format
msgid "Renaming %s to %s and %s to %s instead"
msgstr "Преименуване на „%s“ на „%s“, а „%s“ на „%s“"
-#: merge-recursive.c:1771
+#: 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:1977
+#: merge-recursive.c:1952
#, c-format
msgid ""
"CONFLICT (directory rename split): Unclear where to place %s because "
@@ -3215,7 +3321,7 @@ msgstr ""
"постави „%s“, защото няколко нови директории поделят съдържанието на "
"директория „%s“, като никоя не съдържа мнозинство от файловете ѝ."
-#: merge-recursive.c:2009
+#: merge-recursive.c:1984
#, c-format
msgid ""
"CONFLICT (implicit dir rename): Existing file/dir at %s in the way of "
@@ -3224,7 +3330,7 @@ msgstr ""
"КОНФЛИКТ (косвено преименуване на директория): следният файл или директория "
"„%s“ не позволяват косвеното преименуване на следния път/ища: %s."
-#: merge-recursive.c:2019
+#: merge-recursive.c:1994
#, c-format
msgid ""
"CONFLICT (implicit dir rename): Cannot map more than one path to %s; "
@@ -3234,7 +3340,7 @@ msgstr ""
"съответства на „%s“. Косвено преименуване на директория води до поставянето "
"на тези пътища там: %s."
-#: merge-recursive.c:2111
+#: merge-recursive.c:2086
#, c-format
msgid ""
"CONFLICT (rename/rename): Rename directory %s->%s in %s. Rename directory %s-"
@@ -3243,7 +3349,7 @@ msgstr ""
"КОНФЛИКТ (преименуване/преименуване): „%s“ е преименуван на „%s“ в клон "
"„%s“, а „%s“ е преименуван на „%s“ в „%s“"
-#: merge-recursive.c:2356
+#: merge-recursive.c:2331
#, c-format
msgid ""
"WARNING: Avoiding applying %s -> %s rename to %s, because %s itself was "
@@ -3252,89 +3358,89 @@ msgstr ""
"ПРЕДУПРЕЖДЕНИЕ: прескачане на преименуването на „%s“ на „%s“ в „%s“, защото "
"„%s“ също е с променено име."
-#: merge-recursive.c:2762
+#: 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:2777
+#: merge-recursive.c:2763
#, c-format
msgid "Adding merged %s"
msgstr "Добавяне на слетия „%s“"
-#: merge-recursive.c:2784 merge-recursive.c:3132
+#: merge-recursive.c:2770 merge-recursive.c:3127
#, c-format
msgid "Adding as %s instead"
msgstr "Добавяне като „%s“"
-#: merge-recursive.c:2941
+#: merge-recursive.c:2934
#, c-format
msgid "cannot read object %s"
msgstr "обектът „%s“ не може да се прочете"
-#: merge-recursive.c:2944
+#: merge-recursive.c:2937
#, c-format
msgid "object %s is not a blob"
msgstr "обектът „%s“ не е BLOB"
-#: merge-recursive.c:3013
+#: merge-recursive.c:3006
msgid "modify"
msgstr "промяна"
-#: merge-recursive.c:3013
+#: merge-recursive.c:3006
msgid "modified"
msgstr "променен"
-#: merge-recursive.c:3024
+#: merge-recursive.c:3017
msgid "content"
msgstr "съдържание"
-#: merge-recursive.c:3031
+#: merge-recursive.c:3024
msgid "add/add"
msgstr "добавяне/добавяне"
-#: merge-recursive.c:3076
+#: merge-recursive.c:3071
#, c-format
msgid "Skipped %s (merged same as existing)"
msgstr "Прескачане на „%s“ (слетият резултат е идентичен със сегашния)"
-#: merge-recursive.c:3098 git-submodule.sh:865
+#: merge-recursive.c:3093 git-submodule.sh:858
msgid "submodule"
msgstr "ПОДМОДУЛ"
-#: merge-recursive.c:3099
+#: merge-recursive.c:3094
#, c-format
msgid "CONFLICT (%s): Merge conflict in %s"
msgstr "КОНФЛИКТ (%s): Конфликт при сливане на „%s“"
-#: merge-recursive.c:3221
+#: merge-recursive.c:3216
#, c-format
msgid "Removing %s"
msgstr "Изтриване на „%s“"
-#: merge-recursive.c:3247
+#: merge-recursive.c:3242
msgid "file/directory"
msgstr "файл/директория"
-#: merge-recursive.c:3253
+#: merge-recursive.c:3248
msgid "directory/file"
msgstr "директория/файл"
-#: merge-recursive.c:3260
+#: merge-recursive.c:3255
#, 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:3269
+#: merge-recursive.c:3264
#, c-format
msgid "Adding %s"
msgstr "Добавяне на „%s“"
-#: merge-recursive.c:3303
+#: merge-recursive.c:3300
#, c-format
msgid ""
"Your local changes to the following files would be overwritten by merge:\n"
@@ -3343,40 +3449,179 @@ msgstr ""
"Сливането ще презапише локалните промени на тези файлове:\n"
" %s"
-#: merge-recursive.c:3314
+#: merge-recursive.c:3311
msgid "Already up to date!"
msgstr "Вече е обновено!"
-#: merge-recursive.c:3323
+#: merge-recursive.c:3320
#, c-format
msgid "merging of trees %s and %s failed"
msgstr "неуспешно сливане на дърветата „%s“ и „%s“"
-#: merge-recursive.c:3422
+#: merge-recursive.c:3419
msgid "Merging:"
msgstr "Сливане:"
-#: merge-recursive.c:3435
+#: merge-recursive.c:3432
#, c-format
msgid "found %u common ancestor:"
msgid_plural "found %u common ancestors:"
msgstr[0] "открит е %u общ предшественик:"
msgstr[1] "открити са %u общи предшественици:"
-#: merge-recursive.c:3474
+#: merge-recursive.c:3471
msgid "merge returned no commit"
msgstr "сливането не върна подаване"
-#: merge-recursive.c:3540
+#: merge-recursive.c:3537
#, c-format
msgid "Could not parse object '%s'"
msgstr "Неуспешен анализ на обекта „%s“"
-#: merge-recursive.c:3556 builtin/merge.c:689 builtin/merge.c:846
+#: merge-recursive.c:3553 builtin/merge.c:691 builtin/merge.c:849
msgid "Unable to write index."
msgstr "Индексът не може да бъде прочетен"
-#: notes-merge.c:274
+#: midx.c:65
+#, c-format
+msgid "multi-pack-index file %s is too small"
+msgstr "файлът с индекса за множество пакети „%s“ е твърде малък"
+
+#: midx.c:81
+#, c-format
+msgid "multi-pack-index signature 0x%08x does not match signature 0x%08x"
+msgstr "отпечатъкът на индекса за множество пакети 0x%08x не съвпада с 0x%08x"
+
+#: midx.c:86
+#, c-format
+msgid "multi-pack-index version %d not recognized"
+msgstr "непозната версия на индекс за множество пакети — %d"
+
+#: midx.c:91
+#, c-format
+msgid "hash version %u does not match"
+msgstr "версията на отпечатъка %u не съвпада"
+
+#: midx.c:105
+msgid "invalid chunk offset (too large)"
+msgstr "неправилно (прекалено голямо) отместване на откъс"
+
+#: midx.c:129
+msgid "terminating multi-pack-index chunk id appears earlier than expected"
+msgstr ""
+"идентификаторът за краен откъс на индекс за множество пакети се явява по-"
+"рано от очакваното"
+
+#: midx.c:142
+msgid "multi-pack-index missing required pack-name chunk"
+msgstr "липсва откъс (pack-name) от индекс за множество пакети"
+
+#: midx.c:144
+msgid "multi-pack-index missing required OID fanout chunk"
+msgstr "липсва откъс (OID fanout) от индекс за множество пакети"
+
+#: midx.c:146
+msgid "multi-pack-index missing required OID lookup chunk"
+msgstr "липсва откъс (OID lookup) от индекс за множество пакети"
+
+#: midx.c:148
+msgid "multi-pack-index missing required object offsets chunk"
+msgstr "липсва откъс за отместванията на обекти от индекс за множество пакети"
+
+#: midx.c:162
+#, c-format
+msgid "multi-pack-index pack names out of order: '%s' before '%s'"
+msgstr ""
+"неправилна подредба на имената в индекс за множество пакети: „%s“ се появи "
+"преди „%s“"
+
+#: midx.c:205
+#, c-format
+msgid "bad pack-int-id: %u (%u total packs)"
+msgstr ""
+"неправилен идентификатор на пакет (pack-int-id): %u (от общо %u пакети)"
+
+#: midx.c:246
+msgid "multi-pack-index stores a 64-bit offset, but off_t is too small"
+msgstr ""
+"индексът за множество пакети съдържа 64-битови отмествания, но размерът на "
+"„off_t“ е недостатъчен"
+
+#: midx.c:271
+msgid "error preparing packfile from multi-pack-index"
+msgstr ""
+"грешка при създаването на пакетен файл на базата на индекс за множество "
+"пакети"
+
+#: midx.c:407
+#, c-format
+msgid "failed to add packfile '%s'"
+msgstr "пакетният файл „%s“ не може да бъде добавен"
+
+#: midx.c:413
+#, c-format
+msgid "failed to open pack-index '%s'"
+msgstr "индексът за пакети „%s“ не може да бъде отворен"
+
+#: midx.c:507
+#, c-format
+msgid "failed to locate object %d in packfile"
+msgstr "обект %d в пакетния файл липсва"
+
+#: midx.c:943
+#, c-format
+msgid "failed to clear multi-pack-index at %s"
+msgstr "индексът за множество пакети не може да бъде изчистен при „%s“"
+
+#: midx.c:981
+#, c-format
+msgid ""
+"oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]"
+msgstr ""
+"неправилна подредба на откъси (OID fanout): fanout[%d] = %<PRIx32> > "
+"%<PRIx32> = fanout[%d]"
+
+#: midx.c:992
+#, c-format
+msgid "oid lookup out of order: oid[%d] = %s >= %s = oid[%d]"
+msgstr ""
+"неправилна подредба на откъси (OID lookup): oid[%d] = %s >= %s = oid[%d]"
+
+#: midx.c:996
+msgid "Verifying object offsets"
+msgstr "Проверка на отместването на обекти"
+
+#: midx.c:1004
+#, c-format
+msgid "failed to load pack entry for oid[%d] = %s"
+msgstr "записът в пакета за обекта oid[%d] = %s не може да бъде зареден"
+
+#: midx.c:1010
+#, c-format
+msgid "failed to load pack-index for packfile %s"
+msgstr "индексът на пакета „%s“ не може да бъде зареден"
+
+#: midx.c:1019
+#, c-format
+msgid "incorrect object offset for oid[%d] = %s: %<PRIx64> != %<PRIx64>"
+msgstr "неправилно отместване на обект за oid[%d] = %s: %<PRIx64> != %<PRIx64>"
+
+#: name-hash.c:532
+#, c-format
+msgid "unable to create lazy_dir thread: %s"
+msgstr "не може да се създаде нишка за директории: %s"
+
+#: name-hash.c:554
+#, c-format
+msgid "unable to create lazy_name thread: %s"
+msgstr "не може да се създаде нишка за имена: %s"
+
+#: name-hash.c:560
+#, c-format
+msgid "unable to join lazy_name thread: %s"
+msgstr "не може да се изчака нишка за имена: %s"
+
+#: notes-merge.c:275
#, c-format
msgid ""
"You have not concluded your previous notes merge (%s exists).\n"
@@ -3393,7 +3638,7 @@ msgstr ""
"\n"
" git notes merge --abort"
-#: notes-merge.c:281
+#: notes-merge.c:282
#, c-format
msgid "You have not concluded your notes merge (%s exists)."
msgstr ""
@@ -3449,19 +3694,19 @@ msgstr "обектът „%s“ не може да бъде анализиран
msgid "sha1 mismatch %s"
msgstr "разлика в SHA1: „%s“"
-#: packfile.c:563
+#: packfile.c:607
msgid "offset before end of packfile (broken .idx?)"
msgstr ""
"отместване преди края на пакетния файл (възможно е индексът да е повреден)"
-#: packfile.c:1745
+#: packfile.c:1864
#, c-format
msgid "offset before start of pack index for %s (corrupt index?)"
msgstr ""
"отместване преди началото на индекса на пакетния файл „%s“ (възможно е "
"индексът да е повреден)"
-#: packfile.c:1749
+#: packfile.c:1868
#, c-format
msgid "offset beyond end of pack index for %s (truncated index?)"
msgstr ""
@@ -3494,17 +3739,17 @@ msgstr " %s"
msgid "-NUM"
msgstr "-ЧИСЛО"
-#: parse-options-cb.c:44
+#: parse-options-cb.c:37
#, c-format
msgid "malformed expiration date '%s'"
msgstr "неправилна дата на срок: „%s“"
-#: parse-options-cb.c:112
+#: parse-options-cb.c:109
#, c-format
msgid "malformed object name '%s'"
msgstr "неправилно име на обект „%s“"
-#: path.c:892
+#: path.c:894
#, c-format
msgid "Could not make %s writable by group"
msgstr "Не могат да се дадат права за запис в директорията „%s“ на групата"
@@ -3623,34 +3868,47 @@ msgstr "протоколна грешка: неправилeн знак за д
msgid "protocol error: bad line length %d"
msgstr "протоколна грешка: неправилна дължина на ред: %d"
+#: preload-index.c:118
+msgid "Refreshing index"
+msgstr "Обновяване на индекса"
+
+#: preload-index.c:137
+#, c-format
+msgid "unable to create threaded lstat: %s"
+msgstr "не може да се създаде нишка за изпълнението на „lstat“: %s"
+
#: pretty.c:962
msgid "unable to parse --pretty format"
msgstr "аргументът към опцията „--pretty“ не може да се анализира"
-#: range-diff.c:48
+#: range-diff.c:56
msgid "could not start `log`"
msgstr "командата за журнала с подавания „log“ не може да се стартира"
-#: range-diff.c:51
+#: range-diff.c:59
msgid "could not read `log` output"
msgstr ""
"изходът от командата за журнала с подавания „log“ не може да се прочете"
-#: range-diff.c:66 sequencer.c:4540
+#: range-diff.c:74 sequencer.c:4764
#, c-format
msgid "could not parse commit '%s'"
msgstr "подаването „%s“ не може да бъде анализирано"
-#: range-diff.c:196
+#: range-diff.c:224
msgid "failed to generate diff"
msgstr "неуспешно търсене на разлика"
-#: range-diff.c:421 range-diff.c:423
+#: range-diff.c:455 range-diff.c:457
#, c-format
msgid "could not parse log for '%s'"
msgstr "журналът с подаванията на „%s“ не може да бъде анализиран"
-#: read-cache.c:1579
+#: read-cache.c:1490
+msgid "Refresh index"
+msgstr "Обновяване на индекса"
+
+#: read-cache.c:1604
#, c-format
msgid ""
"index.version set, but the value is invalid.\n"
@@ -3659,7 +3917,7 @@ msgstr ""
"Зададена е неправилна стойност на настройката „index.version“.\n"
"Ще се ползва версия %i"
-#: read-cache.c:1589
+#: read-cache.c:1614
#, c-format
msgid ""
"GIT_INDEX_VERSION set, but the value is invalid.\n"
@@ -3669,135 +3927,269 @@ msgstr ""
"„GIT_INDEX_VERSION“.\n"
"Ще се ползва версия %i"
-#: read-cache.c:2580 sequencer.c:4503 wrapper.c:658 builtin/merge.c:1083
+#: read-cache.c:1792
+#, c-format
+msgid "malformed name field in the index, near path '%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
+msgid "index file corrupt"
+msgstr "файлът с индекса е повреден"
+
+#: read-cache.c:2101
+#, c-format
+msgid "unable to create load_cache_entries thread: %s"
+msgstr "не може да се създаде нишка за зареждане на обектите от кеша: %s"
+
+#: read-cache.c:2114
+#, c-format
+msgid "unable to join load_cache_entries thread: %s"
+msgstr "не може да се изчака нишка за зареждане на обектите от кеша: %s"
+
+#: read-cache.c:2201
+#, c-format
+msgid "unable to create load_index_extensions thread: %s"
+msgstr ""
+"не може да се създаде нишка за зареждане на разширенията на индекса: %s"
+
+#: read-cache.c:2228
+#, 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
#, c-format
msgid "could not close '%s'"
msgstr "„%s“ не може да се затвори"
-#: read-cache.c:2653 sequencer.c:2113 sequencer.c:3374
+#: read-cache.c:3055 sequencer.c:2203 sequencer.c:3592
#, c-format
msgid "could not stat '%s'"
msgstr "неуспешно изпълнение на „stat“ върху „%s“"
-#: read-cache.c:2666
+#: read-cache.c:3068
#, c-format
msgid "unable to open git dir: %s"
msgstr "не може да се отвори директорията на git: %s"
-#: read-cache.c:2678
+#: read-cache.c:3080
#, c-format
msgid "unable to unlink: %s"
msgstr "неуспешно изтриване на „%s“"
+#: rebase-interactive.c:10
+msgid ""
+"\n"
+"Commands:\n"
+"p, pick <commit> = use commit\n"
+"r, reword <commit> = use commit, but edit the commit message\n"
+"e, edit <commit> = use commit, but stop for amending\n"
+"s, squash <commit> = use commit, but meld into previous commit\n"
+"f, fixup <commit> = like \"squash\", but discard this commit's log message\n"
+"x, exec <command> = run command (the rest of the line) using shell\n"
+"b, break = stop here (continue rebase later with 'git rebase --continue')\n"
+"d, drop <commit> = remove commit\n"
+"l, label <label> = label current HEAD with a name\n"
+"t, reset <label> = reset HEAD to a label\n"
+"m, merge [-C <commit> | -c <commit>] <label> [# <oneline>]\n"
+". create a merge commit using the original merge commit's\n"
+". message (or the oneline, if no original merge commit was\n"
+". specified). Use -c <commit> to reword the commit message.\n"
+"\n"
+"These lines can be re-ordered; they are executed from top to bottom.\n"
+msgstr ""
+"\n"
+"Команди:\n"
+" p, pick ПОДАВАНЕ — прилагане на подаването\n"
+" r, reword ПОДАВАНЕ — прилагане на подаването, но смяна на съобщението му\n"
+" e, edit ПОДАВАНЕ — прилагане на подаването и спиране при него за още "
+"промени\n"
+" s, squash ПОДАВАНЕ — вкарване на подаването в предходното му\n"
+" f, fixup ПОДАВАНЕ — вкарване на подаването в предходното му, без смяна на\n"
+" съобщението\n"
+" x, exec ПОДАВАНЕ — изпълнение на команда към обвивката: останалата част "
+"на\n"
+" реда\n"
+" b, break — спиране (може да продължите пребазирането с командата\n"
+" „git rebase --continue“)\n"
+" d, drop ПОДАВАНЕ — прескачане на подаването\n"
+" l, label ЕТИКЕТ — задаване на етикет на указаното от HEAD\n"
+" t, reset ЕТИКЕТ — зануляване на HEAD към ЕТИКЕТа\n"
+" m, merge [-C ПОДАВАНЕ | -c ПОДАВАНЕ] ЕТИКЕТ [# ЕДИН_РЕД]\n"
+" — създаване на подаване със сливане със съобщението от\n"
+" първоначалното подаване (или съобщението от ЕДИН_РЕД,\n"
+" ако не е зададено подаване със сливане. С опцията\n"
+" „-c ПОДАВАНЕ“, може да смените съобщението.\n"
+"\n"
+"Може да променяте последователността на редовете — те се изпълняват\n"
+"последователно отгоре-надолу.\n"
+
+#: rebase-interactive.c:31 git-rebase--preserve-merges.sh:173
+msgid ""
+"\n"
+"Do not remove any line. Use 'drop' explicitly to remove a commit.\n"
+msgstr ""
+"\n"
+"Не изтривайте редове. Подаванията могат да се прескачат с командата "
+"„drop“.\n"
+
+#: rebase-interactive.c:34 git-rebase--preserve-merges.sh:177
+msgid ""
+"\n"
+"If you remove a line here THAT COMMIT WILL BE LOST.\n"
+msgstr ""
+"\n"
+"Ако изтриете ред, съответстващото му подаване ще бъде ИЗТРИТО.\n"
+
+#: rebase-interactive.c:40 git-rebase--preserve-merges.sh:816
+msgid ""
+"\n"
+"You are editing the todo file of an ongoing interactive rebase.\n"
+"To continue rebase after editing, run:\n"
+" git rebase --continue\n"
+"\n"
+msgstr ""
+"\n"
+"В момента редактирате файла с командите на текущото интерактивно "
+"пребазиране.\n"
+"За да продължите пребазирането след това, изпълнете:\n"
+" git rebase --continue\n"
+"\n"
+
+#: rebase-interactive.c:45 git-rebase--preserve-merges.sh:893
+msgid ""
+"\n"
+"However, if you remove everything, the rebase will be aborted.\n"
+"\n"
+msgstr ""
+"\n"
+"Ако изтриете всичко, пребазирането ще бъде преустановено.\n"
+"\n"
+
+#: rebase-interactive.c:51 git-rebase--preserve-merges.sh:900
+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
+#, c-format
+msgid "could not read '%s'."
+msgstr "от „%s“ не може да се чете."
+
#: refs.c:192
#, c-format
msgid "%s does not point to a valid object!"
msgstr "„%s“ не сочи към позволен обект!"
-#: refs.c:579
+#: refs.c:583
#, c-format
msgid "ignoring dangling symref %s"
msgstr "игнориране на указател на обект извън клон „%s“"
-#: refs.c:581 ref-filter.c:2067
+#: refs.c:585 ref-filter.c:1951
#, c-format
msgid "ignoring broken ref %s"
msgstr "игнориране на повредения указател „%s“"
-#: refs.c:685
+#: refs.c:711
#, c-format
msgid "could not open '%s' for writing: %s"
msgstr "„%s“ не може да бъде отворен за запис: %s"
-#: refs.c:695 refs.c:746
+#: refs.c:721 refs.c:772
#, c-format
msgid "could not read ref '%s'"
msgstr "указателят „%s“ не може да се прочете"
-#: refs.c:701
+#: refs.c:727
#, c-format
msgid "ref '%s' already exists"
msgstr "указателят „%s“ вече съществува"
-#: refs.c:706
+#: refs.c:732
#, c-format
msgid "unexpected object ID when writing '%s'"
msgstr "неочакван идентификатор на обект при записването на „%s“"
-#: refs.c:714 sequencer.c:385 sequencer.c:2366 sequencer.c:2492
-#: sequencer.c:2506 sequencer.c:2733 sequencer.c:4501 sequencer.c:4564
+#: refs.c:740 sequencer.c:394 sequencer.c:2510 sequencer.c:2636
+#: sequencer.c:2650 sequencer.c:2877 sequencer.c:4725 sequencer.c:4788
#: wrapper.c:656
#, c-format
msgid "could not write to '%s'"
msgstr "в „%s“ не може да се пише"
-#: refs.c:741 sequencer.c:4499 sequencer.c:4558 wrapper.c:225 wrapper.c:395
-#: builtin/am.c:780
+#: refs.c:767 sequencer.c:4723 sequencer.c:4782 wrapper.c:225 wrapper.c:395
+#: builtin/am.c:728
#, c-format
msgid "could not open '%s' for writing"
msgstr "„%s“ не може да бъде отворен за запис"
-#: refs.c:748
+#: refs.c:774
#, c-format
msgid "unexpected object ID when deleting '%s'"
msgstr "неочакван идентификатор на обект при изтриването на „%s“"
-#: refs.c:879
+#: refs.c:905
#, c-format
msgid "log for ref %s has gap after %s"
msgstr "има пропуски в журнала с подаванията за указателя „%s“ след „%s“"
-#: refs.c:885
+#: refs.c:911
#, c-format
msgid "log for ref %s unexpectedly ended on %s"
msgstr "журналът с подаванията за указателя „%s“ свършва неочаквано след „%s“"
-#: refs.c:943
+#: refs.c:969
#, c-format
msgid "log for %s is empty"
msgstr "журналът с подаванията за указателя „%s“ е празен"
-#: refs.c:1035
+#: refs.c:1061
#, c-format
msgid "refusing to update ref with bad name '%s'"
msgstr "указател не може да се обнови с грешно име „%s“"
-#: refs.c:1111
+#: refs.c:1137
#, c-format
msgid "update_ref failed for ref '%s': %s"
msgstr "неуспешно обновяване на указателя „%s“: %s"
-#: refs.c:1853
+#: refs.c:1911
#, c-format
msgid "multiple updates for ref '%s' not allowed"
msgstr "не са позволени повече от една промени на указателя „%s“"
-#: refs.c:1885
+#: refs.c:1943
msgid "ref updates forbidden inside quarantine environment"
msgstr "обновяванията на указатели са забранени в среди под карантина"
-#: refs.c:1981 refs.c:2011
+#: refs.c:2039 refs.c:2069
#, c-format
msgid "'%s' exists; cannot create '%s'"
msgstr "„%s“ съществува, не може да се създаде „%s“"
-#: refs.c:1987 refs.c:2022
+#: refs.c:2045 refs.c:2080
#, c-format
msgid "cannot process '%s' and '%s' at the same time"
msgstr "невъзможно е едновременно да се обработват „%s“ и „%s“"
-#: refs/files-backend.c:1191
+#: refs/files-backend.c:1228
#, c-format
msgid "could not remove reference %s"
msgstr "Указателят „%s“ не може да бъде изтрит"
-#: refs/files-backend.c:1205 refs/packed-backend.c:1532
+#: refs/files-backend.c:1242 refs/packed-backend.c:1532
#: refs/packed-backend.c:1542
#, c-format
msgid "could not delete reference %s: %s"
msgstr "Указателят „%s“ не може да бъде изтрит: %s"
-#: refs/files-backend.c:1208 refs/packed-backend.c:1545
+#: refs/files-backend.c:1245 refs/packed-backend.c:1545
#, c-format
msgid "could not delete references: %s"
msgstr "Указателите не може да бъдат изтрити: %s"
@@ -3807,191 +4199,197 @@ msgstr "Указателите не може да бъдат изтрити: %s"
msgid "invalid refspec '%s'"
msgstr "неправилен указател: „%s“"
-#: ref-filter.c:38 wt-status.c:1850
+#: ref-filter.c:39 wt-status.c:1855
msgid "gone"
msgstr "изтрит"
-#: ref-filter.c:39
+#: ref-filter.c:40
#, c-format
msgid "ahead %d"
msgstr "напред с %d"
-#: ref-filter.c:40
+#: ref-filter.c:41
#, c-format
msgid "behind %d"
msgstr "назад с %d"
-#: ref-filter.c:41
+#: ref-filter.c:42
#, c-format
msgid "ahead %d, behind %d"
msgstr "напред с %d, назад с %d"
-#: ref-filter.c:137
+#: ref-filter.c:138
#, c-format
msgid "expected format: %%(color:<color>)"
msgstr "очакван формат: %%(color:ЦВЯТ)"
-#: ref-filter.c:139
+#: ref-filter.c:140
#, c-format
msgid "unrecognized color: %%(color:%s)"
msgstr "непознат цвят: %%(color:%s)"
-#: ref-filter.c:161
+#: ref-filter.c:162
#, c-format
msgid "Integer value expected refname:lstrip=%s"
msgstr "очаква се цяло число за „refname:lstrip=%s“"
-#: ref-filter.c:165
+#: ref-filter.c:166
#, c-format
msgid "Integer value expected refname:rstrip=%s"
msgstr "очаква се цяло число за „refname:rstrip=%s“"
-#: ref-filter.c:167
+#: ref-filter.c:168
#, c-format
msgid "unrecognized %%(%s) argument: %s"
msgstr "непознат аргумент за „%%(%s)“: %s"
-#: ref-filter.c:222
+#: ref-filter.c:223
#, c-format
msgid "%%(objecttype) does not take arguments"
msgstr "%%(objecttype) не приема аргументи"
-#: ref-filter.c:234
+#: ref-filter.c:235
#, c-format
msgid "%%(objectsize) does not take arguments"
msgstr "%%(objectsize) не приема аргументи"
-#: ref-filter.c:246
+#: ref-filter.c:247
#, c-format
msgid "%%(body) does not take arguments"
msgstr "%%(body) не приема аргументи"
-#: ref-filter.c:255
+#: ref-filter.c:256
#, c-format
msgid "%%(subject) does not take arguments"
msgstr "%%(subject) не приема аргументи"
-#: ref-filter.c:275
+#: ref-filter.c:278
#, c-format
msgid "unknown %%(trailers) argument: %s"
msgstr "непознат аргумент „%%(trailers)“: %s"
-#: ref-filter.c:304
+#: ref-filter.c:307
#, c-format
msgid "positive value expected contents:lines=%s"
msgstr "очаква се положителна стойност за „contents:lines=%s“"
-#: ref-filter.c:306
+#: ref-filter.c:309
#, c-format
msgid "unrecognized %%(contents) argument: %s"
msgstr "непознат аргумент за %%(contents): %s"
-#: ref-filter.c:321
+#: ref-filter.c:324
#, c-format
msgid "positive value expected objectname:short=%s"
msgstr "очаква се положителна стойност за „objectname:short=%s“"
-#: ref-filter.c:325
+#: ref-filter.c:328
#, c-format
msgid "unrecognized %%(objectname) argument: %s"
msgstr "непознат аргумент за %%(objectname): %s"
-#: ref-filter.c:355
+#: ref-filter.c:358
#, c-format
msgid "expected format: %%(align:<width>,<position>)"
msgstr "очакван формат: %%(align:ШИРОЧИНА,ПОЗИЦИЯ)"
-#: ref-filter.c:367
+#: ref-filter.c:370
#, c-format
msgid "unrecognized position:%s"
msgstr "непозната позиция: %s"
-#: ref-filter.c:374
+#: ref-filter.c:377
#, c-format
msgid "unrecognized width:%s"
msgstr "непозната широчина: %s"
-#: ref-filter.c:383
+#: ref-filter.c:386
#, c-format
msgid "unrecognized %%(align) argument: %s"
msgstr "непознат аргумент за %%(align): %s"
-#: ref-filter.c:391
+#: ref-filter.c:394
#, c-format
msgid "positive width expected with the %%(align) atom"
msgstr "очаква се положителна широчина с лексемата „%%(align)“"
-#: ref-filter.c:409
+#: ref-filter.c:412
#, c-format
msgid "unrecognized %%(if) argument: %s"
msgstr "непознат аргумент за „%%(if)“: %s"
-#: ref-filter.c:505
+#: ref-filter.c:508
#, c-format
msgid "malformed field name: %.*s"
msgstr "неправилно име на обект: „%.*s“"
-#: ref-filter.c:532
+#: ref-filter.c:535
#, c-format
msgid "unknown field name: %.*s"
msgstr "непознато име на обект: „%.*s“"
-#: ref-filter.c:656
+#: ref-filter.c:539
+#, c-format
+msgid ""
+"not a git repository, but the field '%.*s' requires access to object data"
+msgstr "не е хранилище на git, а полето „%.*s“ изисква достъп данни на обектни"
+
+#: ref-filter.c:663
#, c-format
msgid "format: %%(if) atom used without a %%(then) atom"
msgstr "формат: лексемата %%(if) е използвана без съответната ѝ %%(then)"
-#: ref-filter.c:719
+#: ref-filter.c:726
#, c-format
msgid "format: %%(then) atom used without an %%(if) atom"
msgstr "формат: лексемата %%(then) е използвана без съответната ѝ %%(if)"
-#: ref-filter.c:721
+#: ref-filter.c:728
#, c-format
msgid "format: %%(then) atom used more than once"
msgstr "формат: лексемата %%(then) е използвана повече от един път"
-#: ref-filter.c:723
+#: ref-filter.c:730
#, c-format
msgid "format: %%(then) atom used after %%(else)"
msgstr "формат: лексемата %%(then) е използвана след %%(else)"
-#: ref-filter.c:751
+#: ref-filter.c:758
#, c-format
msgid "format: %%(else) atom used without an %%(if) atom"
msgstr "формат: лексемата %%(else) е използвана без съответната ѝ %%(if)"
-#: ref-filter.c:753
+#: ref-filter.c:760
#, c-format
msgid "format: %%(else) atom used without a %%(then) atom"
msgstr "формат: лексемата %%(else) е използвана без съответната ѝ %%(then)"
-#: ref-filter.c:755
+#: ref-filter.c:762
#, c-format
msgid "format: %%(else) atom used more than once"
msgstr "формат: лексемата %%(else) е използвана повече от един път"
-#: ref-filter.c:770
+#: ref-filter.c:777
#, c-format
msgid "format: %%(end) atom used without corresponding atom"
msgstr "формат: лексемата %%(end) е използвана без съответната ѝ"
-#: ref-filter.c:827
+#: ref-filter.c:834
#, c-format
msgid "malformed format string %s"
msgstr "неправилен форматиращ низ „%s“"
-#: ref-filter.c:1416
+#: ref-filter.c:1424
#, c-format
msgid "(no branch, rebasing %s)"
msgstr "(извън клон, пребазиране на „%s“)"
-#: ref-filter.c:1419
+#: ref-filter.c:1427
#, c-format
msgid "(no branch, rebasing detached HEAD %s)"
msgstr "(извън клон, пребазиране на несвързан указател „HEAD“ при „%s“)"
-#: ref-filter.c:1422
+#: ref-filter.c:1430
#, c-format
msgid "(no branch, bisect started on %s)"
msgstr "(извън клон, двоично търсене от „%s“)"
@@ -3999,7 +4397,7 @@ msgstr "(извън клон, двоично търсене от „%s“)"
#. TRANSLATORS: make sure this matches "HEAD
#. detached at " in wt-status.c
#.
-#: ref-filter.c:1430
+#: ref-filter.c:1438
#, c-format
msgid "(HEAD detached at %s)"
msgstr "(Указателят „HEAD“ не е свързан и е при „%s“)"
@@ -4007,144 +4405,144 @@ msgstr "(Указателят „HEAD“ не е свързан и е при „
#. TRANSLATORS: make sure this matches "HEAD
#. detached from " in wt-status.c
#.
-#: ref-filter.c:1437
+#: ref-filter.c:1445
#, c-format
msgid "(HEAD detached from %s)"
msgstr "Указателят „HEAD“ не е свързан и е отделѐн от „%s“"
-#: ref-filter.c:1441
+#: ref-filter.c:1449
msgid "(no branch)"
msgstr "(извън клон)"
-#: ref-filter.c:1475 ref-filter.c:1623
+#: ref-filter.c:1483 ref-filter.c:1638
#, c-format
msgid "missing object %s for %s"
msgstr "обектът „%s“ липсва за „%s“"
-#: ref-filter.c:1483
+#: ref-filter.c:1491
#, c-format
msgid "parse_object_buffer failed on %s for %s"
msgstr "неуспешно анализиране чрез „parse_object_buffer“ на „%s“ за „%s“"
-#: ref-filter.c:1980
+#: ref-filter.c:1857
#, c-format
msgid "malformed object at '%s'"
msgstr "обект със сгрешен формат при „%s“"
-#: ref-filter.c:2062
+#: ref-filter.c:1946
#, c-format
msgid "ignoring ref with broken name %s"
msgstr "игнориране на указателя с грешно име „%s“"
-#: ref-filter.c:2340
+#: ref-filter.c:2232
#, c-format
msgid "format: %%(end) atom missing"
msgstr "грешка във форма̀та: липсва лексемата %%(end)"
-#: ref-filter.c:2444
+#: ref-filter.c:2338
#, c-format
msgid "malformed object name %s"
msgstr "неправилно име на обект „%s“"
-#: remote.c:606
+#: remote.c:607
#, c-format
msgid "Cannot fetch both %s and %s to %s"
msgstr "Невъзможно е да се доставят едновременно и „%s“, и „%s“ към „%s“"
-#: remote.c:610
+#: remote.c:611
#, c-format
msgid "%s usually tracks %s, not %s"
msgstr "„%s“ обикновено следи „%s“, а не „%s“"
-#: remote.c:614
+#: remote.c:615
#, c-format
msgid "%s tracks both %s and %s"
msgstr "„%s“ следи както „%s“, така и „%s“"
-#: remote.c:622
+#: remote.c:623
msgid "Internal error"
msgstr "Вътрешна грешка"
-#: remote.c:1536 remote.c:1637
+#: remote.c:1569 remote.c:1670
msgid "HEAD does not point to a branch"
msgstr "Указателят „HEAD“ не сочи към клон"
-#: remote.c:1545
+#: remote.c:1578
#, c-format
msgid "no such branch: '%s'"
msgstr "няма клон на име „%s“"
-#: remote.c:1548
+#: remote.c:1581
#, c-format
msgid "no upstream configured for branch '%s'"
msgstr "не е зададен клон-източник за клона „%s“"
-#: remote.c:1554
+#: remote.c:1587
#, c-format
msgid "upstream branch '%s' not stored as a remote-tracking branch"
msgstr "клонът-източник „%s“ не е съхранен като следящ клон"
-#: remote.c:1569
+#: remote.c:1602
#, c-format
msgid "push destination '%s' on remote '%s' has no local tracking branch"
msgstr ""
"липсва локален следящ клон за местоположението за изтласкване „%s“ в "
"хранилището „%s“"
-#: remote.c:1581
+#: remote.c:1614
#, c-format
msgid "branch '%s' has no remote for pushing"
msgstr "няма информация клонът „%s“ да следи някой друг"
-#: remote.c:1591
+#: remote.c:1624
#, c-format
msgid "push refspecs for '%s' do not include '%s'"
msgstr "указателят за изтласкване на „%s“ не включва „%s“"
-#: remote.c:1604
+#: remote.c:1637
msgid "push has no destination (push.default is 'nothing')"
msgstr "указателят за изтласкване не включва цел („push.default“ е „nothing“)"
-#: remote.c:1626
+#: remote.c:1659
msgid "cannot resolve 'simple' push to a single destination"
msgstr "простото (simple) изтласкване не съответства на една цел"
-#: remote.c:1951
+#: remote.c:1935
#, c-format
msgid "Your branch is based on '%s', but the upstream is gone.\n"
msgstr "Този клон следи „%s“, но следеният клон е изтрит.\n"
-#: remote.c:1955
+#: remote.c:1939
msgid " (use \"git branch --unset-upstream\" to fixup)\n"
msgstr " (за да коригирате това, използвайте „git branch --unset-upstream“)\n"
-#: remote.c:1958
+#: remote.c:1942
#, c-format
msgid "Your branch is up to date with '%s'.\n"
msgstr "Клонът е актуализиран към „%s“.\n"
-#: remote.c:1962
+#: remote.c:1946
#, c-format
msgid "Your branch and '%s' refer to different commits.\n"
msgstr "Клонът ви и „%s“ сочат към различни подавания.\n"
-#: remote.c:1965
+#: remote.c:1949
#, c-format
msgid " (use \"%s\" for details)\n"
msgstr " (за повече информация ползвайте „%s“)\n"
-#: remote.c:1969
+#: remote.c:1953
#, 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:1975
+#: remote.c:1959
msgid " (use \"git push\" to publish your local commits)\n"
msgstr " (публикувайте локалните си промени чрез „git push“)\n"
-#: remote.c:1978
+#: remote.c:1962
#, c-format
msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n"
msgid_plural ""
@@ -4152,11 +4550,11 @@ msgid_plural ""
msgstr[0] "Клонът ви е с %2$d подаване зад „%1$s“ и може да бъде превъртян.\n"
msgstr[1] "Клонът ви е с %2$d подавания зад „%1$s“ и може да бъде превъртян.\n"
-#: remote.c:1986
+#: remote.c:1970
msgid " (use \"git pull\" to update your local branch)\n"
msgstr " (обновете локалния си клон чрез „git pull“)\n"
-#: remote.c:1989
+#: remote.c:1973
#, c-format
msgid ""
"Your branch and '%s' have diverged,\n"
@@ -4171,43 +4569,149 @@ msgstr[1] ""
"Текущият клон се е отделил от „%s“,\n"
"двата имат съответно по %d и %d несъвпадащи подавания.\n"
-#: remote.c:1999
+#: remote.c:1983
msgid " (use \"git pull\" to merge the remote branch into yours)\n"
msgstr " (слейте отдалечения клон в локалния чрез „git pull“)\n"
-#: replace-object.c:20
+#: replace-object.c:21
#, c-format
msgid "bad replace ref name: %s"
msgstr "неправилно име на указател за замяна: „%s“"
-#: replace-object.c:29
+#: replace-object.c:30
#, c-format
msgid "duplicate replace ref: %s"
msgstr "повтарящ се указател за замяна: „%s“"
-#: replace-object.c:72
+#: replace-object.c:73
#, c-format
msgid "replace depth too high for object %s"
msgstr "дълбочината на замяна е прекалено голяма за обекта: „%s“"
-#: revision.c:2305
+#: rerere.c:217 rerere.c:226 rerere.c:229
+msgid "corrupt MERGE_RR"
+msgstr "повреден „MERGE_RR“ (запис за коригиране на конфликт)"
+
+#: rerere.c:264 rerere.c:269
+msgid "unable to write rerere record"
+msgstr "приложеното коригиране на конфликт не може да бъде записано"
+
+#: rerere.c:485 rerere.c:692 sequencer.c:3136 sequencer.c:3162
+#, c-format
+msgid "could not write '%s'"
+msgstr "„%s“ не може да се запише"
+
+#: rerere.c:495
+#, c-format
+msgid "there were errors while writing '%s' (%s)"
+msgstr "грешки при записването на „%s“ (%s)"
+
+#: rerere.c:498
+#, c-format
+msgid "failed to flush '%s'"
+msgstr "грешка при изчистването на буферите при записването на „%s“"
+
+#: rerere.c:503 rerere.c:1039
+#, c-format
+msgid "could not parse conflict hunks in '%s'"
+msgstr "парчетата с конфликти в „%s“ не може да се анализират"
+
+#: rerere.c:684
+#, c-format
+msgid "failed utime() on '%s'"
+msgstr "неуспешно задаване на време на достъп/създаване чрез „utime“ на „%s“"
+
+#: rerere.c:694
+#, c-format
+msgid "writing '%s' failed"
+msgstr "неуспешен запис на „%s“"
+
+#: rerere.c:714
+#, c-format
+msgid "Staged '%s' using previous resolution."
+msgstr ""
+"„%s“ е добавен към индекса с преизползване на запазена корекция при сливане"
+
+#: rerere.c:753
+#, c-format
+msgid "Recorded resolution for '%s'."
+msgstr "Корекцията на конфликта при сливане на „%s“ е запазена."
+
+#: rerere.c:788
+#, c-format
+msgid "Resolved '%s' using previous resolution."
+msgstr ""
+"Конфликтът при сливане на „%s“ е коригиран с преизползване на предишна "
+"корекция."
+
+#: rerere.c:803
+#, c-format
+msgid "cannot unlink stray '%s'"
+msgstr "излишният обект „%s“ не може да се изтрие"
+
+#: rerere.c:807
+#, c-format
+msgid "Recorded preimage for '%s'"
+msgstr "Предварителният вариант на „%s“ е запазен"
+
+#: rerere.c:881 submodule.c:1763 builtin/submodule--helper.c:1413
+#: builtin/submodule--helper.c:1423
+#, c-format
+msgid "could not create directory '%s'"
+msgstr "Директорията „%s“ не може да бъде създадена"
+
+#: rerere.c:1057
+#, c-format
+msgid "failed to update conflicted state in '%s'"
+msgstr "конфликтът в „%s“ не може да се обнови"
+
+#: rerere.c:1068 rerere.c:1075
+#, c-format
+msgid "no remembered resolution for '%s'"
+msgstr "липсва запазена корекция на конфликт при „%s“"
+
+#: rerere.c:1077
+#, c-format
+msgid "cannot unlink '%s'"
+msgstr "„%s“ не може да се изтрие"
+
+#: rerere.c:1087
+#, c-format
+msgid "Updated preimage for '%s'"
+msgstr "Предварителният вариант на „%s“ е обновен"
+
+#: rerere.c:1096
+#, c-format
+msgid "Forgot resolution for '%s'\n"
+msgstr "Запазената корекция на конфликт при „%s“ е премахната\n"
+
+#: rerere.c:1199
+msgid "unable to open rr-cache directory"
+msgstr "директорията „rr-cache“ не може да се отвори"
+
+#: revision.c:2324
msgid "your current branch appears to be broken"
msgstr "Текущият клон е повреден"
-#: revision.c:2308
+#: revision.c:2327
#, c-format
msgid "your current branch '%s' does not have any commits yet"
msgstr "Текущият клон „%s“ е без подавания "
-#: revision.c:2505
+#: revision.c:2523
msgid "--first-parent is incompatible with --bisect"
msgstr "опциите „--first-parent“ и „--bisect“ са несъвместими"
-#: run-command.c:728
+#: run-command.c:740
msgid "open /dev/null failed"
msgstr "неуспешно отваряне на „/dev/null“"
-#: run-command.c:1271
+#: run-command.c:1229
+#, c-format
+msgid "cannot create async thread: %s"
+msgstr "не може да се създаде асинхронна нишка: %s"
+
+#: run-command.c:1293
#, c-format
msgid ""
"The '%s' hook was ignored because it's not set as executable.\n"
@@ -4234,15 +4738,15 @@ msgstr ""
msgid "remote unpack failed: %s"
msgstr "неуспешно отдалечено разпакетиране: %s"
-#: send-pack.c:309
+#: send-pack.c:308
msgid "failed to sign the push certificate"
msgstr "сертификатът за изтласкване не може да бъде подписан"
-#: send-pack.c:422
+#: send-pack.c:421
msgid "the receiving end does not support --signed push"
msgstr "отсрещната страна не поддържа изтласкване с опцията „--signed“"
-#: send-pack.c:424
+#: send-pack.c:423
msgid ""
"not sending a push certificate since the receiving end does not support --"
"signed push"
@@ -4250,42 +4754,42 @@ msgstr ""
"отсрещната страна не поддържа изтласкване с опцията „--signed“, затова не се "
"използва сертификат"
-#: send-pack.c:436
+#: send-pack.c:435
msgid "the receiving end does not support --atomic push"
msgstr "получаващата страна не поддържа изтласкване с опцията „--atomic“"
-#: send-pack.c:441
+#: send-pack.c:440
msgid "the receiving end does not support push options"
msgstr "отсрещната страна не поддържа опции при изтласкване"
-#: sequencer.c:177
+#: sequencer.c:183
#, c-format
msgid "invalid commit message cleanup mode '%s'"
msgstr "несъществуващ режим на изчистване „%s“ на съобщение при подаване"
-#: sequencer.c:278
+#: sequencer.c:287
#, c-format
msgid "could not delete '%s'"
msgstr "„%s“ не може да бъде изтрит"
-#: sequencer.c:304
+#: sequencer.c:313
msgid "revert"
msgstr "отмяна"
-#: sequencer.c:306
+#: sequencer.c:315
msgid "cherry-pick"
msgstr "отбиране"
-#: sequencer.c:308
+#: sequencer.c:317
msgid "rebase -i"
msgstr "rebase -i"
-#: sequencer.c:310
+#: sequencer.c:319
#, c-format
msgid "unknown action: %d"
msgstr "неизвестно действие: %d"
-#: sequencer.c:367
+#: sequencer.c:376
msgid ""
"after resolving the conflicts, mark the corrected paths\n"
"with 'git add <paths>' or 'git rm <paths>'"
@@ -4293,7 +4797,7 @@ msgstr ""
"след коригирането на конфликтите, отбележете съответните\n"
"пътища с „git add ПЪТ…“ или „git rm ПЪТ…“."
-#: sequencer.c:370
+#: sequencer.c:379
msgid ""
"after resolving the conflicts, mark the corrected paths\n"
"with 'git add <paths>' or 'git rm <paths>'\n"
@@ -4303,39 +4807,39 @@ msgstr ""
"пътища с „git add ПЪТ…“ или „git rm ПЪТ…“, след което\n"
"подайте резултата с командата „git commit'“."
-#: sequencer.c:383 sequencer.c:2488
+#: sequencer.c:392 sequencer.c:2632
#, c-format
msgid "could not lock '%s'"
msgstr "„%s“ не може да се заключи"
-#: sequencer.c:390
+#: sequencer.c:399
#, c-format
msgid "could not write eol to '%s'"
msgstr "краят на ред не може да се запише в „%s“"
-#: sequencer.c:395 sequencer.c:2371 sequencer.c:2494 sequencer.c:2508
-#: sequencer.c:2741
+#: sequencer.c:404 sequencer.c:2515 sequencer.c:2638 sequencer.c:2652
+#: sequencer.c:2885
#, c-format
msgid "failed to finalize '%s'"
msgstr "„%s“ не може да се завърши"
-#: sequencer.c:418 sequencer.c:816 sequencer.c:1505 sequencer.c:2391
-#: sequencer.c:2723 sequencer.c:2827 builtin/am.c:260 builtin/commit.c:740
-#: builtin/merge.c:1081
+#: 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
#, c-format
msgid "could not read '%s'"
msgstr "файлът „%s“ не може да бъде прочетен"
-#: sequencer.c:444
+#: sequencer.c:453
#, c-format
msgid "your local changes would be overwritten by %s."
msgstr "локалните ви промени ще бъдат презаписани при %s."
-#: sequencer.c:448
+#: sequencer.c:457
msgid "commit your changes or stash them to proceed."
msgstr "подайте или скатайте промените, за да продължите"
-#: sequencer.c:477
+#: sequencer.c:486
#, c-format
msgid "%s: fast-forward"
msgstr "%s: превъртане"
@@ -4343,35 +4847,70 @@ msgstr "%s: превъртане"
#. TRANSLATORS: %s will be "revert", "cherry-pick" or
#. "rebase -i".
#.
-#: sequencer.c:566
+#: sequencer.c:575
#, c-format
msgid "%s: Unable to write new index file"
msgstr "%s: новият индекс не може да бъде запазен"
-#: sequencer.c:582
+#: sequencer.c:591
msgid "unable to update cache tree"
msgstr "дървото на кеша не може да бъде обновено"
-#: sequencer.c:595
+#: sequencer.c:604
msgid "could not resolve HEAD commit"
msgstr "подаването, сочено от указателя „HEAD“, не може да бъде открито"
-#: sequencer.c:723 sequencer.c:740
+#: sequencer.c:684
#, c-format
-msgid "could not parse '%s' (looking for '%s')"
-msgstr "„%s“ не може да се анализира (търси се „%s“)"
+msgid "no key present in '%.*s'"
+msgstr "в „%.*s“ няма ключове"
-#: sequencer.c:731
+#: sequencer.c:695
#, c-format
-msgid "bad quoting on %s value in '%s'"
-msgstr "лошо цитиране на стойността на „%s“ в „%s“"
+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
+#, c-format
+msgid "could not open '%s' for reading"
+msgstr "файлът не може да бъде прочетен: „%s“"
+
+#: sequencer.c:742
+msgid "'GIT_AUTHOR_NAME' already given"
+msgstr "настройката за автор „GIT_AUTHOR_NAME“ вече е зададена"
#: sequencer.c:747
+msgid "'GIT_AUTHOR_EMAIL' already given"
+msgstr "настройката за е-поща „GIT_AUTHOR_EMAIL“ вече е зададена"
+
+#: sequencer.c:752
+msgid "'GIT_AUTHOR_DATE' already given"
+msgstr "настройката за дата „GIT_AUTHOR_DATE“ вече е зададена"
+
+#: sequencer.c:756
+#, c-format
+msgid "unknown variable '%s'"
+msgstr "непозната променлива „%s“"
+
+#: sequencer.c:761
+msgid "missing 'GIT_AUTHOR_NAME'"
+msgstr "настройката за автор „GIT_AUTHOR_NAME“ липсва"
+
+#: sequencer.c:763
+msgid "missing 'GIT_AUTHOR_EMAIL'"
+msgstr "настройката за е-поща „GIT_AUTHOR_EMAIL“ липсва"
+
+#: sequencer.c:765
+msgid "missing 'GIT_AUTHOR_DATE'"
+msgstr "настройката за дата „GIT_AUTHOR_DATE“ липсва"
+
+#: sequencer.c:825
#, c-format
msgid "invalid date format '%s' in '%s'"
msgstr "неправилен формат на дата „%s“ в „%s“"
-#: sequencer.c:761
+#: sequencer.c:842
#, c-format
msgid ""
"you have staged changes in your working tree\n"
@@ -4400,17 +4939,17 @@ msgstr ""
"\n"
" git rebase --continue\n"
-#: sequencer.c:830
+#: sequencer.c:935
msgid "writing root commit"
msgstr "запазване на начално подаване"
-#: sequencer.c:1055
+#: sequencer.c:1142
msgid "'prepare-commit-msg' hook failed"
msgstr ""
"неуспешно изпълнение на куката при промяна на съобщението при подаване "
"(prepare-commit-msg)"
-#: sequencer.c:1062
+#: sequencer.c:1149
msgid ""
"Your name and email address were configured automatically based\n"
"on your username and hostname. Please check that they are accurate.\n"
@@ -4439,7 +4978,7 @@ msgstr ""
"\n"
" git commit --amend --reset-author\n"
-#: sequencer.c:1075
+#: 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"
@@ -4465,316 +5004,311 @@ msgstr ""
"\n"
" git commit --amend --reset-author\n"
-#: sequencer.c:1115
+#: sequencer.c:1202
msgid "couldn't look up newly created commit"
msgstr "току що създаденото подаване не може да бъде открито"
-#: sequencer.c:1117
+#: sequencer.c:1204
msgid "could not parse newly created commit"
msgstr "току що създаденото подаване не може да бъде анализирано"
-#: sequencer.c:1163
+#: sequencer.c:1250
msgid "unable to resolve HEAD after creating commit"
msgstr ""
"състоянието сочено от указателя „HEAD“ не може да бъде открито след "
"подаването"
-#: sequencer.c:1165
+#: sequencer.c:1252
msgid "detached HEAD"
msgstr "несвързан връх „HEAD“"
-#: sequencer.c:1169
+#: sequencer.c:1256
msgid " (root-commit)"
msgstr " (начално подаване)"
-#: sequencer.c:1190
+#: sequencer.c:1277
msgid "could not parse HEAD"
msgstr "указателят „HEAD“ не може да бъде анализиран"
-#: sequencer.c:1192
+#: sequencer.c:1279
#, c-format
msgid "HEAD %s is not a commit!"
msgstr "указателят „HEAD“ „%s“ сочи към нещо, което не е подаване!"
-#: sequencer.c:1196 builtin/commit.c:1528
+#: sequencer.c:1283 builtin/commit.c:1543
msgid "could not parse HEAD commit"
msgstr "върховото подаване „HEAD“ не може да бъде прочетено"
-#: sequencer.c:1247 sequencer.c:1845
+#: sequencer.c:1334 sequencer.c:1934
msgid "unable to parse commit author"
msgstr "авторът на подаването не може да бъде анализиран"
-#: sequencer.c:1257 builtin/am.c:1632 builtin/merge.c:675
+#: sequencer.c:1344 builtin/am.c:1585 builtin/merge.c:677
msgid "git write-tree failed to write a tree"
msgstr "Командата „git write-tree“ не успя да запише обект-дърво"
-#: sequencer.c:1274 sequencer.c:1329
+#: sequencer.c:1361 sequencer.c:1416
#, c-format
msgid "unable to read commit message from '%s'"
msgstr "съобщението за подаване не може да бъде прочетено от „%s“"
-#: sequencer.c:1296 builtin/am.c:1653 builtin/commit.c:1631 builtin/merge.c:855
-#: builtin/merge.c:880
+#: sequencer.c:1383 builtin/am.c:1606 builtin/commit.c:1646 builtin/merge.c:858
+#: builtin/merge.c:883
msgid "failed to write commit object"
msgstr "обектът за подаването не може да бъде записан"
-#: sequencer.c:1356
+#: sequencer.c:1443
#, c-format
msgid "could not parse commit %s"
msgstr "подаването „%s“ не може да бъде анализирано"
-#: sequencer.c:1361
+#: sequencer.c:1448
#, c-format
msgid "could not parse parent commit %s"
msgstr "родителското подаване „%s“ не може да бъде анализирано"
-#: sequencer.c:1457 sequencer.c:1565
+#: sequencer.c:1546 sequencer.c:1654
#, c-format
msgid "unknown command: %d"
msgstr "непозната команда: %d"
-#: sequencer.c:1512 sequencer.c:1537
+#: sequencer.c:1601 sequencer.c:1626
#, c-format
msgid "This is a combination of %d commits."
msgstr "Това е обединение от %d подавания"
-#: sequencer.c:1522 sequencer.c:4520
+#: sequencer.c:1611 sequencer.c:4744
msgid "need a HEAD to fixup"
msgstr "За вкарване в предходното подаване ви трябва указател „HEAD“"
-#: sequencer.c:1524 sequencer.c:2768
+#: sequencer.c:1613 sequencer.c:2912
msgid "could not read HEAD"
msgstr "указателят „HEAD“ не може да се прочете"
-#: sequencer.c:1526
+#: sequencer.c:1615
msgid "could not read HEAD's commit message"
msgstr ""
"съобщението за подаване към указателя „HEAD“ не може да бъде прочетено: %s"
-#: sequencer.c:1532
+#: sequencer.c:1621
#, c-format
msgid "cannot write '%s'"
msgstr "„%s“ не може да се запази"
-#: sequencer.c:1539 git-rebase--preserve-merges.sh:441
+#: sequencer.c:1628 git-rebase--preserve-merges.sh:441
msgid "This is the 1st commit message:"
msgstr "Това е 1-то съобщение при подаване:"
-#: sequencer.c:1547
+#: sequencer.c:1636
#, c-format
msgid "could not read commit message of %s"
msgstr "съобщението за подаване към „%s“ не може да бъде прочетено"
-#: sequencer.c:1554
+#: sequencer.c:1643
#, c-format
msgid "This is the commit message #%d:"
msgstr "Това е съобщение при подаване №%d:"
-#: sequencer.c:1560
+#: sequencer.c:1649
#, c-format
msgid "The commit message #%d will be skipped:"
msgstr "Съобщение при подаване №%d ще бъде прескочено:"
-#: sequencer.c:1643
+#: sequencer.c:1732
msgid "your index file is unmerged."
msgstr "индексът не е слят."
-#: sequencer.c:1650
+#: sequencer.c:1739
msgid "cannot fixup root commit"
msgstr "началното подаване не може да се вкара в предходното му"
-#: sequencer.c:1669
+#: sequencer.c:1758
#, c-format
msgid "commit %s is a merge but no -m option was given."
msgstr "подаването „%s“ е сливане, но не е дадена опцията „-m“"
-#: sequencer.c:1677
+#: sequencer.c:1766
#, c-format
msgid "commit %s does not have parent %d"
msgstr "подаването „%s“ няма родител %d"
-#: sequencer.c:1681
+#: sequencer.c:1770
#, c-format
msgid "mainline was specified but commit %s is not a merge."
msgstr "указано е базово подаване, но подаването „%s“ не е сливане."
-#: sequencer.c:1687
+#: sequencer.c:1776
#, 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:1706
+#: sequencer.c:1795
#, c-format
msgid "%s: cannot parse parent commit %s"
msgstr "%s: неразпозната стойност за родителското подаване „%s“"
-#: sequencer.c:1771
+#: sequencer.c:1860
#, c-format
msgid "could not rename '%s' to '%s'"
msgstr "„%s“ не може да се преименува на „%s“"
-#: sequencer.c:1826
+#: sequencer.c:1915
#, c-format
msgid "could not revert %s... %s"
msgstr "подаването „%s“… не може да бъде отменено: „%s“"
-#: sequencer.c:1827
+#: sequencer.c:1916
#, c-format
msgid "could not apply %s... %s"
msgstr "подаването „%s“… не може да бъде приложено: „%s“"
-#: sequencer.c:1885
+#: sequencer.c:1974
#, c-format
msgid "git %s: failed to read the index"
msgstr "git %s: неуспешно изчитане на индекса"
-#: sequencer.c:1892
+#: sequencer.c:1981
#, c-format
msgid "git %s: failed to refresh the index"
msgstr "git %s: неуспешно обновяване на индекса"
-#: sequencer.c:1972
+#: sequencer.c:2062
#, c-format
msgid "%s does not accept arguments: '%s'"
msgstr "„%s“ не приема аргументи: „%s“"
-#: sequencer.c:1981
+#: sequencer.c:2071
#, c-format
msgid "missing arguments for %s"
msgstr "„%s“ изисква аргументи"
-#: sequencer.c:2040
+#: sequencer.c:2130
#, c-format
msgid "invalid line %d: %.*s"
msgstr "неправилен ред %d: %.*s"
-#: sequencer.c:2048
+#: sequencer.c:2138
#, c-format
msgid "cannot '%s' without a previous commit"
msgstr "Без предишно подаване не може да се изпълни „%s“"
-#: sequencer.c:2096 sequencer.c:4277 sequencer.c:4333
-#, c-format
-msgid "could not read '%s'."
-msgstr "от „%s“ не може да се чете."
-
-#: sequencer.c:2119
+#: sequencer.c:2209
msgid "please fix this using 'git rebase --edit-todo'."
msgstr "коригирайте това чрез „git rebase --edit-todo“."
-#: sequencer.c:2121
+#: sequencer.c:2211
#, c-format
msgid "unusable instruction sheet: '%s'"
msgstr "неизползваем файл с описание на предстоящите действия: „%s“"
-#: sequencer.c:2126
+#: sequencer.c:2216
msgid "no commits parsed."
msgstr "никое от подаванията не може да се разпознае."
-#: sequencer.c:2137
+#: sequencer.c:2227
msgid "cannot cherry-pick during a revert."
msgstr ""
"по време на отмяна на подаване не може да се извърши отбиране на подаване."
-#: sequencer.c:2139
+#: sequencer.c:2229
msgid "cannot revert during a cherry-pick."
msgstr "по време на отбиране не може да се извърши отмяна на подаване."
-#: sequencer.c:2209
+#: sequencer.c:2299
#, c-format
msgid "invalid value for %s: %s"
msgstr "неправилна стойност за „%s“: „%s“"
-#: sequencer.c:2285
+#: sequencer.c:2380
msgid "unusable squash-onto"
msgstr "подаването, в което другите да се вкарат, не може да се използва"
-#: sequencer.c:2301
+#: sequencer.c:2396
#, c-format
msgid "malformed options sheet: '%s'"
msgstr "неправилен файл с опции: „%s“"
-#: sequencer.c:2335 sequencer.c:3775
+#: sequencer.c:2479 sequencer.c:4005
msgid "empty commit set passed"
msgstr "зададено е празно множество от подавания"
-#: sequencer.c:2343
+#: sequencer.c:2487
msgid "a cherry-pick or revert is already in progress"
msgstr ""
"в момента вече се извършва отбиране на подавания или пребазиране на клона"
-#: sequencer.c:2344
+#: sequencer.c:2488
msgid "try \"git cherry-pick (--continue | --quit | --abort)\""
msgstr "използвайте „git cherry-pick (--continue | --quit | --abort)“"
-#: sequencer.c:2347
+#: sequencer.c:2491
#, c-format
msgid "could not create sequencer directory '%s'"
msgstr "директорията за секвенсора „%s“ не може да бъде създадена"
-#: sequencer.c:2361
+#: sequencer.c:2505
msgid "could not lock HEAD"
msgstr "указателят „HEAD“ не може да се заключи"
-#: sequencer.c:2416 sequencer.c:3543
+#: sequencer.c:2560 sequencer.c:3761
msgid "no cherry-pick or revert in progress"
msgstr ""
"в момента не се извършва отбиране на подавания или пребазиране на клона"
-#: sequencer.c:2418
+#: sequencer.c:2562
msgid "cannot resolve HEAD"
msgstr "Подаването сочено от указателя „HEAD“ не може да бъде открито"
-#: sequencer.c:2420 sequencer.c:2455
+#: sequencer.c:2564 sequencer.c:2599
msgid "cannot abort from a branch yet to be born"
msgstr ""
"действието не може да бъде преустановено, когато сте на клон, който тепърва "
"предстои да бъде създаден"
-#: sequencer.c:2441 builtin/grep.c:721
+#: sequencer.c:2585 builtin/grep.c:721
#, c-format
msgid "cannot open '%s'"
msgstr "„%s“ не може да бъде отворен"
-#: sequencer.c:2443
+#: sequencer.c:2587
#, c-format
msgid "cannot read '%s': %s"
msgstr "„%s“ не може да бъде прочетен: %s"
-#: sequencer.c:2444
+#: sequencer.c:2588
msgid "unexpected end of file"
msgstr "неочакван край на файл"
-#: sequencer.c:2450
+#: sequencer.c:2594
#, c-format
msgid "stored pre-cherry-pick HEAD file '%s' is corrupt"
msgstr ""
"запазеният преди започването на отбирането файл за указателя „HEAD“ — „%s“ е "
"повреден"
-#: sequencer.c:2461
+#: sequencer.c:2605
msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!"
msgstr ""
"Изглежда указателят „HEAD“ е променен. Проверете към какво сочи.\n"
"Не се правят промени."
-#: sequencer.c:2565 sequencer.c:3461
+#: sequencer.c:2709 sequencer.c:3679
#, c-format
msgid "could not update %s"
msgstr "„%s“ не може да се обнови"
-#: sequencer.c:2603 sequencer.c:3441
+#: sequencer.c:2747 sequencer.c:3659
msgid "cannot read HEAD"
msgstr "указателят „HEAD“ не може да бъде прочетен"
-#: sequencer.c:2618
+#: sequencer.c:2762
#, c-format
msgid "unable to copy '%s' to '%s'"
msgstr "„%s“ не може да се копира като „%s“"
-#: sequencer.c:2626
+#: sequencer.c:2770
#, c-format
msgid ""
"You can amend the commit now, with\n"
@@ -4793,26 +5327,27 @@ msgstr ""
"\n"
" git rebase --continue\n"
-#: sequencer.c:2636
+#: sequencer.c:2780
#, c-format
msgid "Could not apply %s... %.*s"
msgstr "Подаването „%s“… не може да бъде приложено: „%.*s“"
-#: sequencer.c:2643
+#: sequencer.c:2787
#, c-format
msgid "Could not merge %.*s"
msgstr "Невъзможно сливане на „%.*s“"
-#: sequencer.c:2654 sequencer.c:2658 builtin/difftool.c:640
+#: sequencer.c:2798 sequencer.c:2802 builtin/difftool.c:640
#, c-format
msgid "could not copy '%s' to '%s'"
msgstr "„%s“ не може да се копира като „%s“"
-#: sequencer.c:2680 sequencer.c:3095
+#: sequencer.c:2824 sequencer.c:3242 builtin/rebase.c:580 builtin/rebase.c:1019
+#: builtin/rebase.c:1372 builtin/rebase.c:1426
msgid "could not read index"
msgstr "индексът не може да бъде прочетен"
-#: sequencer.c:2685
+#: sequencer.c:2829
#, c-format
msgid ""
"execution failed: %s\n"
@@ -4827,11 +5362,11 @@ msgstr ""
" git rebase --continue\n"
"\n"
-#: sequencer.c:2691
+#: sequencer.c:2835
msgid "and made changes to the index and/or the working tree\n"
msgstr "и промени индекса и/или работното дърво\n"
-#: sequencer.c:2697
+#: sequencer.c:2841
#, c-format
msgid ""
"execution succeeded: %s\n"
@@ -4848,81 +5383,76 @@ msgstr ""
" git rebase --continue\n"
"\n"
-#: sequencer.c:2758
+#: sequencer.c:2902
#, c-format
msgid "illegal label name: '%.*s'"
msgstr "неправилно име на етикет: „%.*s“"
-#: sequencer.c:2810
+#: sequencer.c:2954
msgid "writing fake root commit"
msgstr "запазване на фалшиво начално подаване"
-#: sequencer.c:2815
+#: sequencer.c:2959
msgid "writing squash-onto"
msgstr "запазване на подаването, в което другите да се вкарат"
-#: sequencer.c:2850
+#: sequencer.c:2997 builtin/rebase.c:585 builtin/rebase.c:591
#, c-format
msgid "failed to find tree of %s"
msgstr "дървото, сочено от „%s“, не може да бъде открито"
-#: sequencer.c:2868
+#: sequencer.c:3015 builtin/rebase.c:604
msgid "could not write index"
msgstr "индексът не може да бъде записан"
-#: sequencer.c:2895
+#: sequencer.c:3042
#, c-format
msgid "could not resolve '%s'"
msgstr "„%s“ не може да бъде открит"
-#: sequencer.c:2921
+#: sequencer.c:3068
msgid "cannot merge without a current revision"
msgstr "без текущо подаване не може да се слива"
-#: sequencer.c:2943
+#: sequencer.c:3090
#, c-format
msgid "unable to parse '%.*s'"
msgstr "„%.*s“ не може да се анализира"
-#: sequencer.c:2952
+#: sequencer.c:3099
#, c-format
msgid "nothing to merge: '%.*s'"
msgstr "няма нищо за сливане: „%.*s“"
-#: sequencer.c:2964
+#: sequencer.c:3111
msgid "octopus merge cannot be executed on top of a [new root]"
msgstr "върху начално подаване не може да се извърши множествено сливане"
-#: sequencer.c:2979
+#: sequencer.c:3126
#, c-format
msgid "could not get commit message of '%s'"
msgstr "съобщението за подаване към „%s“ не може да бъде получено"
-#: sequencer.c:2989 sequencer.c:3015
-#, c-format
-msgid "could not write '%s'"
-msgstr "„%s“ не може да се запише"
-
-#: sequencer.c:3127
+#: sequencer.c:3274
#, c-format
msgid "could not even attempt to merge '%.*s'"
msgstr "сливането на „%.*s“ не може даже да започне"
-#: sequencer.c:3143
+#: sequencer.c:3290
msgid "merge: Unable to write new index file"
msgstr "сливане: новият индекс не може да бъде запазен"
-#: sequencer.c:3211
+#: sequencer.c:3358 builtin/rebase.c:268
#, c-format
msgid "Applied autostash.\n"
msgstr "Автоматично скатаното е приложено.\n"
-#: sequencer.c:3223
+#: sequencer.c:3370
#, c-format
msgid "cannot store %s"
msgstr "„%s“ не може да бъде запазен"
-#: sequencer.c:3226 git-rebase.sh:188
+#: sequencer.c:3373 builtin/rebase.c:284
#, c-format
msgid ""
"Applying autostash resulted in conflicts.\n"
@@ -4933,7 +5463,31 @@ msgstr ""
"надеждно скатани. Можете да пробвате да ги приложите чрез „git stash pop“\n"
"или да ги изхвърлите чрез „git stash drop“, когато поискате.\n"
-#: sequencer.c:3257
+#: sequencer.c:3427
+#, c-format
+msgid "could not checkout %s"
+msgstr "„%s“ не може да се изтегли"
+
+#: sequencer.c:3441
+#, c-format
+msgid "%s: not a valid OID"
+msgstr "„%s“ е неправилен идентификатор на обект"
+
+#: sequencer.c:3446 git-rebase--preserve-merges.sh:724
+msgid "could not detach HEAD"
+msgstr "указателят „HEAD“ не може да се отдели"
+
+#: sequencer.c:3461
+#, c-format
+msgid "Stopped at HEAD\n"
+msgstr "Бе спряно при „HEAD“\n"
+
+#: sequencer.c:3463
+#, c-format
+msgid "Stopped at %s\n"
+msgstr "Бе спряно при „%s“\n"
+
+#: sequencer.c:3471
#, c-format
msgid ""
"Could not execute the todo command\n"
@@ -4956,48 +5510,48 @@ msgstr ""
" git rebase --edit-todo\n"
" git rebase --continue\n"
-#: sequencer.c:3325
+#: sequencer.c:3543
#, c-format
msgid "Stopped at %s... %.*s\n"
msgstr "Спиране при „%s“… %.*s\n"
-#: sequencer.c:3404
+#: sequencer.c:3622
#, c-format
msgid "unknown command %d"
msgstr "непозната команда %d"
-#: sequencer.c:3449
+#: sequencer.c:3667
msgid "could not read orig-head"
msgstr "указателят за „orig-head“ не може да се прочете"
-#: sequencer.c:3454 sequencer.c:4517
+#: sequencer.c:3672 sequencer.c:4741
msgid "could not read 'onto'"
msgstr "указателят за „onto“ не може да се прочете"
-#: sequencer.c:3468
+#: sequencer.c:3686
#, c-format
msgid "could not update HEAD to %s"
msgstr "„HEAD“ не може да бъде обновен до „%s“"
-#: sequencer.c:3554
+#: sequencer.c:3772
msgid "cannot rebase: You have unstaged changes."
msgstr "не може да пребазирате, защото има промени, които не са в индекса."
-#: sequencer.c:3563
+#: sequencer.c:3781
msgid "cannot amend non-existing commit"
msgstr "несъществуващо подаване не може да се поправи"
-#: sequencer.c:3565
+#: sequencer.c:3783
#, c-format
msgid "invalid file: '%s'"
msgstr "неправилен файл: „%s“"
-#: sequencer.c:3567
+#: sequencer.c:3785
#, c-format
msgid "invalid contents: '%s'"
msgstr "неправилно съдържание: „%s“"
-#: sequencer.c:3570
+#: sequencer.c:3788
msgid ""
"\n"
"You have uncommitted changes in your working tree. Please, commit them\n"
@@ -5007,47 +5561,47 @@ msgstr ""
"В работното дърво има неподадени промени. Първо ги подайте, а след това\n"
"отново изпълнете „git rebase --continue“."
-#: sequencer.c:3595 sequencer.c:3633
+#: sequencer.c:3824 sequencer.c:3862
#, c-format
msgid "could not write file: '%s'"
msgstr "файлът „%s“ не може да бъде записан"
-#: sequencer.c:3648
+#: sequencer.c:3877
msgid "could not remove CHERRY_PICK_HEAD"
msgstr "указателят „CHERRY_PICK_HEAD“ не може да бъде изтрит"
-#: sequencer.c:3655
+#: sequencer.c:3884
msgid "could not commit staged changes."
msgstr "промените в индекса не могат да бъдат подадени."
-#: sequencer.c:3752
+#: sequencer.c:3982
#, c-format
msgid "%s: can't cherry-pick a %s"
msgstr "%s: не може да се отбере „%s“"
-#: sequencer.c:3756
+#: sequencer.c:3986
#, c-format
msgid "%s: bad revision"
msgstr "%s: неправилна версия"
-#: sequencer.c:3791
+#: sequencer.c:4021
msgid "can't revert as initial commit"
msgstr "първоначалното подаване не може да бъде отменено"
-#: sequencer.c:4238
+#: sequencer.c:4466
msgid "make_script: unhandled options"
msgstr "make_script: неподдържани опции"
-#: sequencer.c:4241
+#: sequencer.c:4469
msgid "make_script: error preparing revisions"
msgstr "make_script: грешка при подготовката на версии"
-#: sequencer.c:4281 sequencer.c:4337
+#: sequencer.c:4509 sequencer.c:4565 sequencer.c:4840
#, c-format
msgid "unusable todo list: '%s'"
msgstr "неуспешно изтриване на списъка за изпълнение: „%s“"
-#: sequencer.c:4396
+#: sequencer.c:4620
#, c-format
msgid ""
"unrecognized setting %s for option rebase.missingCommitsCheck. Ignoring."
@@ -5055,7 +5609,7 @@ msgstr ""
"Непозната стойност „%s“ за настройката „rebase.missingCommitsCheck“. "
"Настройката се прескача."
-#: sequencer.c:4466
+#: sequencer.c:4690
#, c-format
msgid ""
"Warning: some commits may have been dropped accidentally.\n"
@@ -5064,7 +5618,7 @@ msgstr ""
"Предупреждение: някои подавания може да са пропуснати.\n"
"Пропуснати подавания (новите са най-отгоре):\n"
-#: sequencer.c:4473
+#: sequencer.c:4697
#, c-format
msgid ""
"To avoid this message, use \"drop\" to explicitly remove a commit.\n"
@@ -5081,7 +5635,7 @@ msgstr ""
"предупреждение)\n"
"или „error“ (считане за грешка).\n"
-#: sequencer.c:4486
+#: sequencer.c:4710
#, c-format
msgid ""
"You can fix this with 'git rebase --edit-todo' and then run 'git rebase --"
@@ -5092,7 +5646,31 @@ msgstr ""
"continue“ след това.\n"
"Може и да преустановите пребазирането с командата „git rebase --abort“.\n"
-#: sequencer.c:4660
+#: sequencer.c:4848 sequencer.c:4886
+msgid "nothing to do"
+msgstr "няма какво да се прави"
+
+#: sequencer.c:4852
+#, 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
+#, c-format
+msgid "could not copy '%s' to '%s'."
+msgstr "„%s“ не може да се копира като „%s“."
+
+#: sequencer.c:4868 sequencer.c:4897
+msgid "could not transform the todo list"
+msgstr "файлът с командите не може да се обработи"
+
+#: sequencer.c:4900
+msgid "could not skip unnecessary pick commands"
+msgstr "излишните команди за отбиране не бяха прескочени"
+
+#: sequencer.c:4983
msgid "the script was already rearranged."
msgstr "скриптът вече е преподреден."
@@ -5151,86 +5729,86 @@ msgstr ""
msgid "this operation must be run in a work tree"
msgstr "тази команда трябва да се изпълни в работно дърво"
-#: setup.c:503
+#: setup.c:527
#, c-format
msgid "Expected git repo version <= %d, found %d"
msgstr "Очаква се версия на хранилището на git <= %d, а не %d"
-#: setup.c:511
+#: setup.c:535
msgid "unknown repository extensions found:"
msgstr "открити са непознати разширения в хранилището:"
-#: setup.c:530
+#: setup.c:554
#, c-format
msgid "error opening '%s'"
msgstr "„%s“ не може да се отвори"
-#: setup.c:532
+#: setup.c:556
#, c-format
msgid "too large to be a .git file: '%s'"
msgstr "прекалено голям файл „.git“: „%s“"
-#: setup.c:534
+#: setup.c:558
#, c-format
msgid "error reading %s"
msgstr "грешка при прочитане на „%s“"
-#: setup.c:536
+#: setup.c:560
#, c-format
msgid "invalid gitfile format: %s"
msgstr "неправилен формат на gitfile: %s"
-#: setup.c:538
+#: setup.c:562
#, c-format
msgid "no path in gitfile: %s"
msgstr "липсва път в gitfile: „%s“"
-#: setup.c:540
+#: setup.c:564
#, c-format
msgid "not a git repository: %s"
msgstr "не е хранилище на Git: %s"
-#: setup.c:639
+#: setup.c:663
#, c-format
msgid "'$%s' too big"
msgstr "„%s“ е прекалено голям"
-#: setup.c:653
+#: setup.c:677
#, c-format
msgid "not a git repository: '%s'"
msgstr "не е хранилище на git: „%s“"
-#: setup.c:682 setup.c:684 setup.c:715
+#: setup.c:706 setup.c:708 setup.c:739
#, c-format
msgid "cannot chdir to '%s'"
msgstr "не може да се влезе в директорията „%s“"
-#: setup.c:687 setup.c:743 setup.c:753 setup.c:792 setup.c:800 setup.c:815
+#: setup.c:711 setup.c:767 setup.c:777 setup.c:816 setup.c:824 setup.c:839
msgid "cannot come back to cwd"
msgstr "процесът не може да се върне към предишната работна директория"
-#: setup.c:813
+#: setup.c:837
#, c-format
msgid "not a git repository (or any of the parent directories): %s"
msgstr ""
"нито тази, нито която и да е от по-горните директории, не е хранилище на "
"git: %s"
-#: setup.c:824
+#: setup.c:848
#, c-format
msgid "failed to stat '%*s%s%s'"
msgstr "не може да бъде получена информация чрез „stat“ за „%*s%s%s“"
-#: setup.c:1054
+#: setup.c:1078
msgid "Unable to read current working directory"
msgstr "Текущата работна директория не може да бъде прочетена"
-#: setup.c:1066 setup.c:1072
+#: setup.c:1090 setup.c:1096
#, c-format
msgid "cannot change to '%s'"
msgstr "не може да се влезе в директорията „%s“"
-#: setup.c:1085
+#: setup.c:1109
#, c-format
msgid ""
"not a git repository (or any parent up to mount point %s)\n"
@@ -5241,7 +5819,7 @@ msgstr ""
"Git работи в рамките на една файлова система, защото променливата на средата "
"„GIT_DISCOVERY_ACROSS_FILESYSTEM“ не е зададена."
-#: setup.c:1168
+#: setup.c:1192
#, c-format
msgid ""
"problem with core.sharedRepository filemode value (0%.3o).\n"
@@ -5251,15 +5829,15 @@ msgstr ""
"(0%.3o).\n"
"Собственикът на файла трябва да има права за писане и четене."
-#: setup.c:1211
+#: setup.c:1235
msgid "open /dev/null or dup failed"
msgstr "неуспешно изпълнение на „open“ или „dup“ върху „/dev/null“"
-#: setup.c:1226
+#: setup.c:1250
msgid "fork failed"
msgstr "неуспешно създаване на процес чрез „fork“"
-#: setup.c:1231
+#: setup.c:1255
msgid "setsid failed"
msgstr "неуспешно изпълнение на „setsid“"
@@ -5339,12 +5917,12 @@ msgstr "неуспешно изпълнение на „mmap“"
msgid "object file %s is empty"
msgstr "файлът с обектите „%s“ е празен"
-#: sha1-file.c:1093 sha1-file.c:2206
+#: sha1-file.c:1093 sha1-file.c:2215
#, c-format
msgid "corrupt loose object '%s'"
msgstr "непакетираният обект „%s“ е повреден"
-#: sha1-file.c:1095 sha1-file.c:2210
+#: sha1-file.c:1095 sha1-file.c:2219
#, c-format
msgid "garbage at end of loose object '%s'"
msgstr "грешни данни в края на непакетирания обект „%s“"
@@ -5443,7 +6021,7 @@ msgstr "неуспешно приключване на „deflate“ върху
msgid "confused by unstable object source data for %s"
msgstr "грешка поради нестабилния източник данни за обектите „%s“"
-#: sha1-file.c:1685 builtin/pack-objects.c:899
+#: sha1-file.c:1685 builtin/pack-objects.c:918
#, c-format
msgid "failed utime() on %s"
msgstr "неуспешно задаване на време на достъп/създаване чрез „utime“ на „%s“"
@@ -5461,76 +6039,76 @@ msgstr "повредено подаване"
msgid "corrupt tag"
msgstr "повреден етикет"
-#: sha1-file.c:1906
+#: sha1-file.c:1912
#, c-format
msgid "read error while indexing %s"
msgstr "грешка при четене по време на индексиране на „%s“"
-#: sha1-file.c:1909
+#: sha1-file.c:1915
#, c-format
msgid "short read while indexing %s"
msgstr "непълно прочитане по време на индексиране на „%s“"
-#: sha1-file.c:1980 sha1-file.c:1989
+#: sha1-file.c:1988 sha1-file.c:1997
#, c-format
msgid "%s: failed to insert into database"
msgstr "„%s“ не може да се вмъкне в базата от данни"
-#: sha1-file.c:1995
+#: sha1-file.c:2003
#, c-format
msgid "%s: unsupported file type"
msgstr "неподдържан вид файл: „%s“"
-#: sha1-file.c:2019
+#: sha1-file.c:2027
#, c-format
msgid "%s is not a valid object"
msgstr "„%s“ е неправилен обект"
-#: sha1-file.c:2021
+#: sha1-file.c:2029
#, c-format
msgid "%s is not a valid '%s' object"
msgstr "„%s“ е неправилен обект от вид „%s“"
-#: sha1-file.c:2048 builtin/index-pack.c:158
+#: sha1-file.c:2056 builtin/index-pack.c:154
#, c-format
msgid "unable to open %s"
msgstr "обектът „%s“ не може да бъде отворен"
-#: sha1-file.c:2217 sha1-file.c:2269
+#: sha1-file.c:2226 sha1-file.c:2278
#, c-format
msgid "sha1 mismatch for %s (expected %s)"
msgstr "неправилна сума по SHA1 за „%s“ (трябва да е %s)"
-#: sha1-file.c:2241
+#: sha1-file.c:2250
#, c-format
msgid "unable to mmap %s"
msgstr "неуспешно изпълнение на „mmap“ върху „%s“"
-#: sha1-file.c:2246
+#: sha1-file.c:2255
#, c-format
msgid "unable to unpack header of %s"
msgstr "заглавната част на „%s“ не може да бъде разпакетирана"
-#: sha1-file.c:2252
+#: sha1-file.c:2261
#, c-format
msgid "unable to parse header of %s"
msgstr "заглавната част на „%s“ не може да бъде анализирана"
-#: sha1-file.c:2263
+#: sha1-file.c:2272
#, c-format
msgid "unable to unpack contents of %s"
msgstr "съдържанието на „%s“ не може да бъде разпакетирано"
-#: sha1-name.c:444
+#: sha1-name.c:476
#, c-format
msgid "short SHA1 %s is ambiguous"
msgstr "късият SHA1 „%s“ не е еднозначен"
-#: sha1-name.c:455
+#: sha1-name.c:487
msgid "The candidates are:"
msgstr "Възможностите са:"
-#: sha1-name.c:699
+#: sha1-name.c:770
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"
@@ -5554,81 +6132,71 @@ msgstr ""
"спрете това съобщение като изпълните командата:\n"
"„git config advice.objectNameWarning false“"
-#: submodule.c:97 submodule.c:131
+#: submodule.c:116 submodule.c:145
msgid "Cannot change unmerged .gitmodules, resolve merge conflicts first"
msgstr ""
"Неслетите файлове „.gitmodules“ не могат да бъдат променяни. Първо "
"коригирайте конфликтите"
-#: submodule.c:101 submodule.c:135
+#: submodule.c:120 submodule.c:149
#, c-format
msgid "Could not find section in .gitmodules where path=%s"
msgstr "Във файла „.gitmodules“ липсва раздел за директория „path=%s“"
-#: submodule.c:109
-#, c-format
-msgid "Could not update .gitmodules entry %s"
-msgstr "Записът „%s“ във файла „.gitmodules“ не може да бъде променен"
-
-#: submodule.c:142
+#: submodule.c:156
#, c-format
msgid "Could not remove .gitmodules entry for %s"
msgstr "Записът „%s“ във файла „.gitmodules“ не може да бъде изтрит"
-#: submodule.c:153
+#: submodule.c:167
msgid "staging updated .gitmodules failed"
msgstr "неуспешно добавяне на променения файл „.gitmodules“ в индекса"
-#: submodule.c:315
+#: submodule.c:329
#, c-format
msgid "in unpopulated submodule '%s'"
msgstr "в неподготвения подмодул „%s“"
-#: submodule.c:346
+#: submodule.c:360
#, c-format
msgid "Pathspec '%s' is in submodule '%.*s'"
msgstr "Пътят „%s“ е в подмодула „%.*s“"
-#: submodule.c:839
+#: submodule.c:857
#, c-format
msgid "submodule entry '%s' (%s) is a %s, not a commit"
msgstr "записът за подмодула „%s“ (%s) е %s, а не подаване!"
-#: submodule.c:1071 builtin/branch.c:670 builtin/submodule--helper.c:1888
+#: submodule.c:1097 builtin/branch.c:656 builtin/submodule--helper.c:1985
msgid "Failed to resolve HEAD as a valid ref."
msgstr "Не може да се открие към какво сочи указателят „HEAD“"
-#: submodule.c:1377
+#: submodule.c:1404
#, c-format
msgid "'%s' not recognized as a git repository"
msgstr "„%s“ не е хранилище на git"
-#: submodule.c:1515
+#: submodule.c:1542
#, c-format
msgid "could not start 'git status' in submodule '%s'"
msgstr "командата „git status“ не може да се изпълни в подмодула „%s“"
-#: submodule.c:1528
+#: submodule.c:1555
#, c-format
msgid "could not run 'git status' in submodule '%s'"
msgstr "командата „git status“ не може да се изпълни в подмодула „%s“"
-#: submodule.c:1543
-#, c-format
-msgid "Could not unset core.worktree setting in submodule '%s'"
-msgstr "Настройката „core.worktree“ не може да се махне в подмодула „%s“"
-
-#: submodule.c:1633
+#: submodule.c:1648
#, c-format
msgid "submodule '%s' has dirty index"
msgstr "индексът на подмодула „%s“ не е чист"
-#: submodule.c:1685
+#: submodule.c:1700
#, c-format
msgid "Submodule '%s' could not be updated."
msgstr "Подмодулът „%s“ не може да се обнови."
-#: submodule.c:1734
+#: submodule.c:1747
#, c-format
msgid ""
"relocate_gitdir for submodule '%s' with more than one worktree not supported"
@@ -5636,18 +6204,12 @@ msgstr ""
"не се поддържа „relocate_gitdir“ за подмодула „%s“, който има повече от едно "
"работно дърво"
-#: submodule.c:1746 submodule.c:1802
+#: submodule.c:1759 submodule.c:1815
#, c-format
msgid "could not lookup name for submodule '%s'"
msgstr "името на подмодула „%s“ не може да бъде намерено"
-#: submodule.c:1750 builtin/submodule--helper.c:1406
-#: builtin/submodule--helper.c:1416
-#, c-format
-msgid "could not create directory '%s'"
-msgstr "Директорията „%s“ не може да бъде създадена"
-
-#: submodule.c:1753
+#: submodule.c:1766
#, c-format
msgid ""
"Migrating git directory of '%s%s' from\n"
@@ -5658,34 +6220,46 @@ msgstr ""
"„%s“ към\n"
"„%s“\n"
-#: submodule.c:1837
+#: submodule.c:1850
#, c-format
msgid "could not recurse into submodule '%s'"
msgstr "неуспешна обработка на поддиректориите в подмодула „%s“"
-#: submodule.c:1881
+#: submodule.c:1894
msgid "could not start ls-files in .."
msgstr "„ls-stat“ не може да се стартира в „..“"
-#: submodule.c:1920
+#: submodule.c:1933
#, c-format
msgid "ls-tree returned unexpected return code %d"
msgstr "„ls-tree“ завърши с неочакван изходен код: %d"
-#: submodule-config.c:231
+#: submodule-config.c:232
#, c-format
msgid "ignoring suspicious submodule name: %s"
msgstr "игнориране на подозрително име на подмодул: „%s“"
-#: submodule-config.c:295
+#: submodule-config.c:296
msgid "negative values not allowed for submodule.fetchjobs"
msgstr "настройката „submodule.fetchjobs“ не приема отрицателни стойности"
-#: submodule-config.c:468
+#: submodule-config.c:390
+#, c-format
+msgid "ignoring '%s' which may be interpreted as a command-line option: %s"
+msgstr ""
+"„%s“ се прескача, защото е възможно да се тълкува като опция за командния "
+"ред: %s"
+
+#: submodule-config.c:479
#, c-format
msgid "invalid value for %s"
msgstr "Неправилна стойност за „%s“"
+#: submodule-config.c:754
+#, c-format
+msgid "Could not update .gitmodules entry %s"
+msgstr "Записът „%s“ във файла „.gitmodules“ не може да бъде променен"
+
#: trailer.c:238
#, c-format
msgid "running trailer command '%s' failed"
@@ -5697,7 +6271,7 @@ msgstr "неуспешно изпълнение на завършващата к
msgid "unknown value '%s' for key '%s'"
msgstr "непозната стойност „%s“ за настройката „%s“"
-#: trailer.c:539 trailer.c:544 builtin/remote.c:294
+#: trailer.c:539 trailer.c:544 builtin/remote.c:295
#, c-format
msgid "more than one %s"
msgstr "стойността „%s“ се повтаря в настройките"
@@ -5716,26 +6290,26 @@ msgstr "входният файл „%s“ не може да бъде проч
msgid "could not read from stdin"
msgstr "от стандартния вход не може да се чете"
-#: trailer.c:1008 builtin/am.c:47
+#: trailer.c:1011 builtin/am.c:47
#, c-format
msgid "could not stat %s"
msgstr "Не може да се получи информация чрез „stat“ за „%s“"
-#: trailer.c:1010
+#: trailer.c:1013
#, c-format
msgid "file %s is not a regular file"
msgstr "„%s“ не е обикновен файл"
-#: trailer.c:1012
+#: trailer.c:1015
#, c-format
msgid "file %s is not writable by user"
msgstr "„%s“: няма права за записване на файла"
-#: trailer.c:1024
+#: trailer.c:1027
msgid "could not open temporary file"
msgstr "временният файл не може да се отвори"
-#: trailer.c:1064
+#: trailer.c:1067
#, c-format
msgid "could not rename temporary file to %s"
msgstr "временният файл не може да се преименува на „%s“"
@@ -5755,29 +6329,29 @@ msgstr "пратката на git „%s“ не може да бъде проч
msgid "transport: invalid depth option '%s'"
msgstr "transport: неправилна опция за дълбочина: %s"
-#: transport.c:586
+#: transport.c:616
msgid "could not parse transport.color.* config"
msgstr "стойността на настройката „transport.color.*“ не може да се разпознае"
-#: transport.c:659
+#: transport.c:689
msgid "support for protocol v2 not implemented yet"
msgstr "протокол версия 2 все още не се поддържа"
-#: transport.c:785
+#: transport.c:816
#, c-format
msgid "unknown value for config '%s': %s"
msgstr "непозната стойност за настройката „%s“: „%s“"
-#: transport.c:851
+#: transport.c:882
#, c-format
msgid "transport '%s' not allowed"
msgstr "преносът по „%s“ не е позволен"
-#: transport.c:903
+#: transport.c:936
msgid "git-over-rsync is no longer supported"
msgstr "командата „git-over-rsync“ вече не се поддържа"
-#: transport.c:998
+#: transport.c:1031
#, c-format
msgid ""
"The following submodule paths contain changes that can\n"
@@ -5786,7 +6360,7 @@ msgstr ""
"Следните пътища за подмодули съдържат промени,\n"
"които липсват от всички отдалечени хранилища:\n"
-#: transport.c:1002
+#: transport.c:1035
#, c-format
msgid ""
"\n"
@@ -5811,19 +6385,19 @@ msgstr ""
" git push\n"
"\n"
-#: transport.c:1010
+#: transport.c:1043
msgid "Aborting."
msgstr "Преустановяване на действието."
-#: transport.c:1148
+#: transport.c:1182
msgid "failed to push all needed submodules"
msgstr "неуспешно изтласкване на всички необходими подмодули"
-#: transport.c:1270 transport-helper.c:643
+#: transport.c:1315 transport-helper.c:643
msgid "operation not supported by protocol"
msgstr "опцията не се поддържа от протокола"
-#: transport.c:1352
+#: transport.c:1419
#, c-format
msgid "invalid line while parsing alternate refs: %s"
msgstr "неправилен ред при анализа на алтернативните указатели: „%s“"
@@ -5965,42 +6539,42 @@ msgstr ""
msgid "malformed response in ref list: %s"
msgstr "неправилен отговор в списъка с указатели: „%s“"
-#: transport-helper.c:1230
+#: transport-helper.c:1231
#, c-format
msgid "read(%s) failed"
msgstr "неуспешно четене на „%s“"
-#: transport-helper.c:1257
+#: transport-helper.c:1258
#, c-format
msgid "write(%s) failed"
msgstr "неуспешен запис в „%s“"
-#: transport-helper.c:1306
+#: transport-helper.c:1307
#, c-format
msgid "%s thread failed"
msgstr "неуспешно изпълнение на нишката „%s“"
-#: transport-helper.c:1310
+#: transport-helper.c:1311
#, c-format
msgid "%s thread failed to join: %s"
msgstr "завършването на нишката „%s“ не може да се изчака: „%s“"
-#: transport-helper.c:1329 transport-helper.c:1333
+#: transport-helper.c:1330 transport-helper.c:1334
#, c-format
msgid "can't start thread for copying data: %s"
msgstr "неуспешно стартиране на нишка за копиране на данните: „%s“"
-#: transport-helper.c:1370
+#: transport-helper.c:1371
#, c-format
msgid "%s process failed to wait"
msgstr "процесът на „%s“ не успя да изчака чрез „waitpid“"
-#: transport-helper.c:1374
+#: transport-helper.c:1375
#, c-format
msgid "%s process failed"
msgstr "неуспешно изпълнение на „%s“"
-#: transport-helper.c:1392 transport-helper.c:1401
+#: transport-helper.c:1393 transport-helper.c:1402
msgid "can't start thread for copying data"
msgstr "неуспешно стартиране на нишка за копиране на данните"
@@ -6248,6 +6822,16 @@ msgstr "Преустановяване на действието\n"
msgid "Checking out files"
msgstr "Изтегляне на файлове"
+#: unpack-trees.c:368
+msgid ""
+"the following paths have collided (e.g. case-sensitive paths\n"
+"on a case-insensitive filesystem) and only one from the same\n"
+"colliding group is in the working tree:\n"
+msgstr ""
+"следните пътища са в конфликт (напр. при разлика в регистъра\n"
+"във файлови системи, които не различават главни от малки букви)\n"
+"и само един от участниците в конфликта е в работното дърво:\n"
+
#: urlmatch.c:163
msgid "invalid URL scheme name or missing '://' suffix"
msgstr "неправилна схема за адрес или суфиксът „://“ липсва"
@@ -6277,33 +6861,33 @@ msgstr "неправилен номер на порт"
msgid "invalid '..' path segment"
msgstr "неправилна част от пътя „..“"
-#: worktree.c:245 builtin/am.c:2147
+#: worktree.c:249 builtin/am.c:2100
#, c-format
msgid "failed to read '%s'"
msgstr "„%s“ не може да бъде прочетен"
-#: worktree.c:291
+#: worktree.c:295
#, c-format
msgid "'%s' at main working tree is not the repository directory"
msgstr "„%s“ в основното работно дърво не е директорията на хранилището"
-#: worktree.c:302
+#: worktree.c:306
#, c-format
msgid "'%s' file does not contain absolute path to the working tree location"
msgstr ""
"файлът „%s“ не съдържа абсолютния път към местоположението на работното дърво"
-#: worktree.c:314
+#: worktree.c:318
#, c-format
msgid "'%s' does not exist"
msgstr "„%s“ не съществува."
-#: worktree.c:320
+#: worktree.c:324
#, c-format
msgid "'%s' is not a .git file, error code %d"
msgstr "„%s“ не е файл на .git, код за грешка: %d"
-#: worktree.c:328
+#: worktree.c:332
#, c-format
msgid "'%s' does not point back to '%s'"
msgstr "„%s“ не сочи към обратно към „%s“"
@@ -6313,12 +6897,6 @@ msgstr "„%s“ не сочи към обратно към „%s“"
msgid "could not open '%s' for reading and writing"
msgstr "„%s“ не може да бъде отворен и за четене, и за запис"
-#: wrapper.c:227 wrapper.c:397 builtin/am.c:321 builtin/am.c:771
-#: builtin/am.c:863 builtin/merge.c:1078
-#, c-format
-msgid "could not open '%s' for reading"
-msgstr "файлът не може да бъде прочетен: „%s“"
-
#: wrapper.c:424 wrapper.c:624
#, c-format
msgid "unable to access '%s'"
@@ -6358,11 +6936,11 @@ msgid " (use \"git rm <file>...\" to mark resolution)"
msgstr ""
" (използвайте „git rm ФАЙЛ…“, за да укажете разрешаването на конфликта)"
-#: wt-status.c:202 wt-status.c:1015
+#: wt-status.c:202 wt-status.c:1042
msgid "Changes to be committed:"
msgstr "Промени, които ще бъдат подадени:"
-#: wt-status.c:220 wt-status.c:1024
+#: wt-status.c:220 wt-status.c:1051
msgid "Changes not staged for commit:"
msgstr "Промени, които не са в индекса за подаване:"
@@ -6467,22 +7045,22 @@ msgstr "променено съдържание, "
msgid "untracked content, "
msgstr "неследено съдържание, "
-#: wt-status.c:853
+#: wt-status.c:880
#, 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:885
+#: wt-status.c:912
msgid "Submodules changed but not updated:"
msgstr "Подмодулите са променени, но не са обновени:"
-#: wt-status.c:887
+#: wt-status.c:914
msgid "Submodule changes to be committed:"
msgstr "Промени в подмодулите за подаване:"
-#: wt-status.c:969
+#: wt-status.c:996
msgid ""
"Do not modify or remove the line above.\n"
"Everything below it will be ignored."
@@ -6490,241 +7068,241 @@ msgstr ""
"Не променяйте и не изтривайте горния ред.\n"
"Всичко отдолу ще бъде изтрито."
-#: wt-status.c:1084
+#: wt-status.c:1097
msgid "You have unmerged paths."
msgstr "Някои пътища не са слети."
-#: wt-status.c:1087
+#: wt-status.c:1100
msgid " (fix conflicts and run \"git commit\")"
msgstr " (коригирайте конфликтите и изпълнете „git commit“)"
-#: wt-status.c:1089
+#: wt-status.c:1102
msgid " (use \"git merge --abort\" to abort the merge)"
msgstr " (използвайте „git merge --abort“, за да преустановите сливането)"
-#: wt-status.c:1094
+#: wt-status.c:1106
msgid "All conflicts fixed but you are still merging."
msgstr "Всички конфликти са решени, но продължавате сливането."
-#: wt-status.c:1097
+#: wt-status.c:1109
msgid " (use \"git commit\" to conclude merge)"
msgstr " (използвайте „git commit“, за да завършите сливането)"
-#: wt-status.c:1107
+#: wt-status.c:1118
msgid "You are in the middle of an am session."
msgstr "В момента прилагате поредица от кръпки чрез „git am“."
-#: wt-status.c:1110
+#: wt-status.c:1121
msgid "The current patch is empty."
msgstr "Текущата кръпка е празна."
-#: wt-status.c:1114
+#: wt-status.c:1125
msgid " (fix conflicts and then run \"git am --continue\")"
msgstr " (коригирайте конфликтите и изпълнете „git am --continue“)"
-#: wt-status.c:1116
+#: wt-status.c:1127
msgid " (use \"git am --skip\" to skip this patch)"
msgstr " (използвайте „git am --skip“, за да пропуснете тази кръпка)"
-#: wt-status.c:1118
+#: wt-status.c:1129
msgid " (use \"git am --abort\" to restore the original branch)"
msgstr ""
" (използвайте „git am --abort“, за да възстановите първоначалния клон)"
-#: wt-status.c:1250
+#: wt-status.c:1260
msgid "git-rebase-todo is missing."
msgstr "„git-rebase-todo“ липсва."
-#: wt-status.c:1252
+#: wt-status.c:1262
msgid "No commands done."
msgstr "Не са изпълнени команди."
-#: wt-status.c:1255
+#: wt-status.c:1265
#, 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:1266
+#: wt-status.c:1276
#, c-format
msgid " (see more in file %s)"
msgstr " повече информация има във файла „%s“)"
-#: wt-status.c:1271
+#: wt-status.c:1281
msgid "No commands remaining."
msgstr "Не остават повече команди."
-#: wt-status.c:1274
+#: wt-status.c:1284
#, 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:1282
+#: wt-status.c:1292
msgid " (use \"git rebase --edit-todo\" to view and edit)"
msgstr ""
" (използвайте „git rebase --edit-todo“, за да разгледате и редактирате)"
-#: wt-status.c:1295
+#: wt-status.c:1304
#, c-format
msgid "You are currently rebasing branch '%s' on '%s'."
msgstr "В момента пребазирате клона „%s“ върху „%s“."
-#: wt-status.c:1300
+#: wt-status.c:1309
msgid "You are currently rebasing."
msgstr "В момента пребазирате."
-#: wt-status.c:1314
+#: wt-status.c:1322
msgid " (fix conflicts and then run \"git rebase --continue\")"
msgstr " (коригирайте конфликтите и използвайте „git rebase --continue“)"
-#: wt-status.c:1316
+#: wt-status.c:1324
msgid " (use \"git rebase --skip\" to skip this patch)"
msgstr " (използвайте „git rebase --skip“, за да пропуснете тази кръпка)"
-#: wt-status.c:1318
+#: wt-status.c:1326
msgid " (use \"git rebase --abort\" to check out the original branch)"
msgstr ""
" (използвайте „git rebase --abort“, за да възстановите първоначалния клон)"
-#: wt-status.c:1324
+#: wt-status.c:1333
msgid " (all conflicts fixed: run \"git rebase --continue\")"
msgstr " (всички конфликти са коригирани: изпълнете „git rebase --continue“)"
-#: wt-status.c:1328
+#: wt-status.c:1337
#, c-format
msgid ""
"You are currently splitting a commit while rebasing branch '%s' on '%s'."
msgstr "В момента разделяте подаване докато пребазирате клона „%s“ върху „%s“."
-#: wt-status.c:1333
+#: wt-status.c:1342
msgid "You are currently splitting a commit during a rebase."
msgstr "В момента разделяте подаване докато пребазирате."
-#: wt-status.c:1336
+#: wt-status.c:1345
msgid " (Once your working directory is clean, run \"git rebase --continue\")"
msgstr ""
" (След като работното ви дърво стане чисто, използвайте „git rebase --"
"continue“)"
-#: wt-status.c:1340
+#: wt-status.c:1349
#, c-format
msgid "You are currently editing a commit while rebasing branch '%s' on '%s'."
msgstr ""
"В момента редактирате подаване докато пребазирате клона „%s“ върху „%s“."
-#: wt-status.c:1345
+#: wt-status.c:1354
msgid "You are currently editing a commit during a rebase."
msgstr "В момента редактирате подаване докато пребазирате."
-#: wt-status.c:1348
+#: wt-status.c:1357
msgid " (use \"git commit --amend\" to amend the current commit)"
msgstr ""
" (използвайте „git commit --amend“, за да редактирате текущото подаване)"
-#: wt-status.c:1350
+#: wt-status.c:1359
msgid ""
" (use \"git rebase --continue\" once you are satisfied with your changes)"
msgstr ""
" (използвайте „git rebase --continue“, след като завършите промените си)"
-#: wt-status.c:1360
+#: wt-status.c:1368
#, c-format
msgid "You are currently cherry-picking commit %s."
msgstr "В момента отбирате подаването „%s“."
-#: wt-status.c:1365
+#: wt-status.c:1373
msgid " (fix conflicts and run \"git cherry-pick --continue\")"
msgstr " (коригирайте конфликтите и изпълнете „git cherry-pick --continue“)"
-#: wt-status.c:1368
+#: wt-status.c:1376
msgid " (all conflicts fixed: run \"git cherry-pick --continue\")"
msgstr ""
" (всички конфликти са коригирани, изпълнете „git cherry-pick --continue“)"
-#: wt-status.c:1370
+#: wt-status.c:1378
msgid " (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)"
msgstr ""
" (използвайте „git cherry-pick --abort“, за да отмените всички действия с "
"отбиране)"
-#: wt-status.c:1379
+#: wt-status.c:1386
#, c-format
msgid "You are currently reverting commit %s."
msgstr "В момента отменяте подаване „%s“."
-#: wt-status.c:1384
+#: wt-status.c:1391
msgid " (fix conflicts and run \"git revert --continue\")"
msgstr " (коригирайте конфликтите и изпълнете „git revert --continue“)"
-#: wt-status.c:1387
+#: wt-status.c:1394
msgid " (all conflicts fixed: run \"git revert --continue\")"
msgstr " (всички конфликти са коригирани, изпълнете „git revert --continue“)"
-#: wt-status.c:1389
+#: wt-status.c:1396
msgid " (use \"git revert --abort\" to cancel the revert operation)"
msgstr ""
" (използвайте „git revert --abort“, за да преустановите отмяната на "
"подаване)"
-#: wt-status.c:1400
+#: wt-status.c:1406
#, c-format
msgid "You are currently bisecting, started from branch '%s'."
msgstr "В момента търсите двоично, като сте стартирали от клон „%s“."
-#: wt-status.c:1404
+#: wt-status.c:1410
msgid "You are currently bisecting."
msgstr "В момента търсите двоично."
-#: wt-status.c:1407
+#: wt-status.c:1413
msgid " (use \"git bisect reset\" to get back to the original branch)"
msgstr ""
" (използвайте „git bisect reset“, за да се върнете към първоначалното "
"състояние и клон)"
-#: wt-status.c:1604
+#: wt-status.c:1611
msgid "On branch "
msgstr "На клон "
-#: wt-status.c:1610
+#: wt-status.c:1618
msgid "interactive rebase in progress; onto "
msgstr "извършвате интерактивно пребазиране върху "
-#: wt-status.c:1612
+#: wt-status.c:1620
msgid "rebase in progress; onto "
msgstr "извършвате пребазиране върху "
-#: wt-status.c:1617
+#: wt-status.c:1625
msgid "HEAD detached at "
msgstr "Указателят „HEAD“ не е свързан и е при "
-#: wt-status.c:1619
+#: wt-status.c:1627
msgid "HEAD detached from "
msgstr "Указателят „HEAD“ не е свързан и е отделѐн от "
-#: wt-status.c:1622
+#: wt-status.c:1630
msgid "Not currently on any branch."
msgstr "Извън всички клони."
-#: wt-status.c:1642
+#: wt-status.c:1647
msgid "Initial commit"
msgstr "Първоначално подаване"
-#: wt-status.c:1643
+#: wt-status.c:1648
msgid "No commits yet"
msgstr "Все още липсват подавания"
-#: wt-status.c:1657
+#: wt-status.c:1662
msgid "Untracked files"
msgstr "Неследени файлове"
-#: wt-status.c:1659
+#: wt-status.c:1664
msgid "Ignored files"
msgstr "Игнорирани файлове"
-#: wt-status.c:1663
+#: wt-status.c:1668
#, c-format
msgid ""
"It took %.2f seconds to enumerate untracked files. 'status -uno'\n"
@@ -6736,32 +7314,32 @@ msgstr ""
"изпълнението, но не трябва да забравяте ръчно да добавяте новите файлове.\n"
"За повече подробности погледнете „git status help“."
-#: wt-status.c:1669
+#: wt-status.c:1674
#, c-format
msgid "Untracked files not listed%s"
msgstr "Неследените файлове не са изведени%s"
-#: wt-status.c:1671
+#: wt-status.c:1676
msgid " (use -u option to show untracked files)"
msgstr " (използвайте опцията „-u“, за да изведете неследените файлове)"
-#: wt-status.c:1677
+#: wt-status.c:1682
msgid "No changes"
msgstr "Няма промени"
-#: wt-status.c:1682
+#: wt-status.c:1687
#, 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:1685
+#: wt-status.c:1690
#, c-format
msgid "no changes added to commit\n"
msgstr "към индекса за подаване не са добавени промени\n"
-#: wt-status.c:1688
+#: wt-status.c:1693
#, c-format
msgid ""
"nothing added to commit but untracked files present (use \"git add\" to "
@@ -6770,75 +7348,70 @@ msgstr ""
"към индекса за подаване не са добавени промени, но има нови файлове "
"(използвайте „git add“, за да започне тяхното следене)\n"
-#: wt-status.c:1691
+#: wt-status.c:1696
#, c-format
msgid "nothing added to commit but untracked files present\n"
msgstr "към индекса за подаване не са добавени промени, но има нови файлове\n"
-#: wt-status.c:1694
+#: wt-status.c:1699
#, c-format
msgid "nothing to commit (create/copy files and use \"git add\" to track)\n"
msgstr ""
"липсват каквито и да е промени (създайте или копирайте файлове и използвайте "
"„git add“, за да започне тяхното следене)\n"
-#: wt-status.c:1697 wt-status.c:1702
+#: wt-status.c:1702 wt-status.c:1707
#, c-format
msgid "nothing to commit\n"
msgstr "липсват каквито и да е промени\n"
-#: wt-status.c:1700
+#: wt-status.c:1705
#, c-format
msgid "nothing to commit (use -u to show untracked files)\n"
msgstr ""
"липсват каквито и да е промени (използвайте опцията „-u“, за да се изведат и "
"неследените файлове)\n"
-#: wt-status.c:1704
+#: wt-status.c:1709
#, c-format
msgid "nothing to commit, working tree clean\n"
msgstr "липсват каквито и да е промени, работното дърво е чисто\n"
-#: wt-status.c:1817
+#: wt-status.c:1822
msgid "No commits yet on "
msgstr "Все още липсват подавания в "
-#: wt-status.c:1821
+#: wt-status.c:1826
msgid "HEAD (no branch)"
msgstr "HEAD (извън клон)"
-#: wt-status.c:1852
+#: wt-status.c:1857
msgid "different"
msgstr "различен"
-#: wt-status.c:1854 wt-status.c:1862
+#: wt-status.c:1859 wt-status.c:1867
msgid "behind "
msgstr "назад с "
-#: wt-status.c:1857 wt-status.c:1860
+#: wt-status.c:1862 wt-status.c:1865
msgid "ahead "
msgstr "напред с "
#. TRANSLATORS: the action is e.g. "pull with rebase"
-#: wt-status.c:2376
+#: wt-status.c:2374
#, c-format
msgid "cannot %s: You have unstaged changes."
msgstr "не може да извършите „%s“, защото има промени, които не са в индекса."
-#: wt-status.c:2382
+#: wt-status.c:2380
msgid "additionally, your index contains uncommitted changes."
msgstr "освен това в индекса има неподадени промени."
-#: wt-status.c:2384
+#: wt-status.c:2382
#, c-format
msgid "cannot %s: Your index contains uncommitted changes."
msgstr "не може да извършите „%s“, защото в индекса има неподадени промени."
-#: compat/precompose_utf8.c:58 builtin/clone.c:443
-#, c-format
-msgid "failed to unlink '%s'"
-msgstr "неуспешно изтриване на „%s“"
-
#: builtin/add.c:24
msgid "git add [<options>] [--] <pathspec>..."
msgstr "git add [ОПЦИЯ…] [--] ПЪТ…"
@@ -6848,7 +7421,7 @@ msgstr "git add [ОПЦИЯ…] [--] ПЪТ…"
msgid "unexpected diff status %c"
msgstr "неочакван изходен код при генериране на разлика: %c"
-#: builtin/add.c:88 builtin/commit.c:279
+#: builtin/add.c:88 builtin/commit.c:284
msgid "updating files failed"
msgstr "неуспешно обновяване на файловете"
@@ -6861,7 +7434,7 @@ msgstr "изтриване на „%s“\n"
msgid "Unstaged changes after refreshing the index:"
msgstr "Промени, които и след обновяването на индекса не са добавени към него:"
-#: builtin/add.c:233 builtin/rev-parse.c:893
+#: builtin/add.c:233 builtin/rev-parse.c:895
msgid "Could not read the index"
msgstr "Индексът не може да бъде прочетен"
@@ -6897,9 +7470,9 @@ msgid "The following paths are ignored by one of your .gitignore files:\n"
msgstr ""
"Следните пътища ще бъдат игнорирани според някой от файловете „.gitignore“:\n"
-#: builtin/add.c:289 builtin/clean.c:906 builtin/fetch.c:134 builtin/mv.c:123
-#: builtin/prune-packed.c:56 builtin/pull.c:212 builtin/push.c:557
-#: builtin/remote.c:1344 builtin/rm.c:240 builtin/send-pack.c:165
+#: 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
msgid "dry run"
msgstr "пробно изпълнение"
@@ -6907,7 +7480,7 @@ msgstr "пробно изпълнение"
msgid "interactive picking"
msgstr "интерактивно отбиране на промени"
-#: builtin/add.c:293 builtin/checkout.c:1144 builtin/reset.c:302
+#: builtin/add.c:293 builtin/checkout.c:1258 builtin/reset.c:305
msgid "select hunks interactively"
msgstr "интерактивен избор на парчета код"
@@ -6956,7 +7529,7 @@ msgstr ""
"проверка, че при пробно изпълнение всички файлове, дори и изтритите, се "
"игнорират"
-#: builtin/add.c:308 builtin/update-index.c:973
+#: builtin/add.c:308 builtin/update-index.c:990
msgid "override the executable bit of the listed files"
msgstr "изрично задаване на стойността на флага дали файлът е изпълним"
@@ -7032,115 +7605,114 @@ msgstr "Нищо не е зададено и нищо не е добавено.\
msgid "Maybe you wanted to say 'git add .'?\n"
msgstr "Вероятно искахте да използвате „git add .“?\n"
-#: builtin/add.c:449 builtin/check-ignore.c:177 builtin/checkout.c:282
-#: builtin/checkout.c:485 builtin/clean.c:953 builtin/commit.c:338
-#: builtin/diff-tree.c:115 builtin/grep.c:492 builtin/mv.c:144
-#: builtin/reset.c:241 builtin/rm.c:270 builtin/submodule--helper.c:329
-msgid "index file corrupt"
-msgstr "файлът с индекса е повреден"
-
-#: builtin/am.c:415
+#: builtin/am.c:363
msgid "could not parse author script"
msgstr "скриптът за автор не може да се анализира"
-#: builtin/am.c:499
+#: builtin/am.c:447
#, c-format
msgid "'%s' was deleted by the applypatch-msg hook"
msgstr "„%s“ бе изтрит от куката „applypatch-msg“"
-#: builtin/am.c:540
+#: builtin/am.c:488
#, c-format
msgid "Malformed input line: '%s'."
msgstr "Даденият входен ред е с неправилен формат: „%s“."
-#: builtin/am.c:577
+#: builtin/am.c:525
#, c-format
msgid "Failed to copy notes from '%s' to '%s'"
msgstr "Бележката не може да се копира от „%s“ към „%s“"
-#: builtin/am.c:603
+#: builtin/am.c:551
msgid "fseek failed"
msgstr "неуспешно изпълнение на „fseek“"
-#: builtin/am.c:791
+#: builtin/am.c:739
#, c-format
msgid "could not parse patch '%s'"
msgstr "кръпката „%s“ не може да се анализира"
-#: builtin/am.c:856
+#: builtin/am.c:804
msgid "Only one StGIT patch series can be applied at once"
msgstr ""
"Само една поредица от кръпки от „StGIT“ може да бъде прилагана в даден момент"
-#: builtin/am.c:904
+#: builtin/am.c:852
msgid "invalid timestamp"
msgstr "неправилна стойност за време"
-#: builtin/am.c:909 builtin/am.c:921
+#: builtin/am.c:857 builtin/am.c:869
msgid "invalid Date line"
msgstr "неправилен ред за дата „Date“"
-#: builtin/am.c:916
+#: builtin/am.c:864
msgid "invalid timezone offset"
msgstr "неправилно отместване на часовия пояс"
-#: builtin/am.c:1009
+#: builtin/am.c:957
msgid "Patch format detection failed."
msgstr "Форматът на кръпката не може да бъде определен."
-#: builtin/am.c:1014 builtin/clone.c:408
+#: builtin/am.c:962 builtin/clone.c:408
#, c-format
msgid "failed to create directory '%s'"
msgstr "директорията „%s“ не може да бъде създадена"
-#: builtin/am.c:1019
+#: builtin/am.c:967
msgid "Failed to split patches."
msgstr "Кръпките не могат да бъдат разделени."
-#: builtin/am.c:1149 builtin/commit.c:364
+#: builtin/am.c:1097 builtin/commit.c:369
msgid "unable to write index file"
msgstr "индексът не може да бъде записан"
-#: builtin/am.c:1163
+#: builtin/am.c:1111
#, c-format
msgid "When you have resolved this problem, run \"%s --continue\"."
msgstr "След коригирането на този проблем изпълнете „%s --continue“."
-#: builtin/am.c:1164
+#: builtin/am.c:1112
#, c-format
msgid "If you prefer to skip this patch, run \"%s --skip\" instead."
msgstr "Ако предпочитате да прескочите тази кръпка, изпълнете „%s --skip“."
-#: builtin/am.c:1165
+#: builtin/am.c:1113
#, c-format
msgid "To restore the original branch and stop patching, run \"%s --abort\"."
msgstr "За да се върнете към първоначалното състояние, изпълнете „%s --abort“."
-#: builtin/am.c:1272
+#: builtin/am.c:1196
+msgid "Patch sent with format=flowed; space at the end of lines might be lost."
+msgstr ""
+"Кръпката е пратена с форматиране „format=flowed“. Празните знаци в края на "
+"редовете може да се загубят."
+
+#: builtin/am.c:1224
msgid "Patch is empty."
msgstr "Кръпката е празна."
-#: builtin/am.c:1338
+#: builtin/am.c:1290
#, c-format
msgid "invalid ident line: %.*s"
msgstr "грешен ред с идентичност: %.*s"
-#: builtin/am.c:1360
+#: builtin/am.c:1312
#, c-format
msgid "unable to parse commit %s"
msgstr "подаването не може да бъде анализирано: %s"
-#: builtin/am.c:1556
+#: builtin/am.c:1508
msgid "Repository lacks necessary blobs to fall back on 3-way merge."
msgstr ""
"В хранилището липсват необходимите обекти-BLOB, за да се премине към тройно "
"сливане."
-#: builtin/am.c:1558
+#: builtin/am.c:1510
msgid "Using index info to reconstruct a base tree..."
msgstr "Базовото дърво се реконструира от информацията в индекса…"
-#: builtin/am.c:1577
+#: builtin/am.c:1529
msgid ""
"Did you hand edit your patch?\n"
"It does not apply to blobs recorded in its index."
@@ -7148,30 +7720,30 @@ msgstr ""
"Кръпката не може да се приложи към обектите-BLOB в индекса.\n"
"Да не би да сте я редактирали на ръка?"
-#: builtin/am.c:1583
+#: builtin/am.c:1535
msgid "Falling back to patching base and 3-way merge..."
msgstr "Преминаване към прилагане на кръпка към базата и тройно сливане…"
-#: builtin/am.c:1608
+#: builtin/am.c:1561
msgid "Failed to merge in the changes."
msgstr "Неуспешно сливане на промените."
-#: builtin/am.c:1640
+#: builtin/am.c:1593
msgid "applying to an empty history"
msgstr "прилагане върху празна история"
-#: builtin/am.c:1686 builtin/am.c:1690
+#: builtin/am.c:1639 builtin/am.c:1643
#, c-format
msgid "cannot resume: %s does not exist."
msgstr "не може да се продължи — „%s“ не съществува."
-#: builtin/am.c:1706
+#: builtin/am.c:1659
msgid "cannot be interactive without stdin connected to a terminal."
msgstr ""
"За интерактивно изпълнение е необходимо стандартният\n"
"вход да е свързан с терминал, а в момента не е."
-#: builtin/am.c:1711
+#: builtin/am.c:1664
msgid "Commit Body is:"
msgstr "Тялото на кръпката за прилагане е:"
@@ -7179,39 +7751,39 @@ msgstr "Тялото на кръпката за прилагане е:"
#. in your translation. The program will only accept English
#. input at this point.
#.
-#: builtin/am.c:1721
+#: builtin/am.c:1674
msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: "
msgstr ""
"Прилагане? „y“ — да/„n“ — не/„e“ — редактиране/„v“ — преглед/„a“ — приемане "
"на всичко:"
-#: builtin/am.c:1771
+#: builtin/am.c:1724
#, c-format
msgid "Dirty index: cannot apply patches (dirty: %s)"
msgstr ""
"Индексът не е чист: кръпките не могат да бъдат приложени (замърсени са: %s)"
-#: builtin/am.c:1811 builtin/am.c:1879
+#: builtin/am.c:1764 builtin/am.c:1832
#, c-format
msgid "Applying: %.*s"
msgstr "Прилагане: %.*s"
-#: builtin/am.c:1828
+#: builtin/am.c:1781
msgid "No changes -- Patch already applied."
msgstr "Без промени — кръпката вече е приложена."
-#: builtin/am.c:1834
+#: builtin/am.c:1787
#, c-format
msgid "Patch failed at %s %.*s"
msgstr "Неуспешно прилагане на кръпка при %s %.*s“"
-#: builtin/am.c:1838
+#: builtin/am.c:1791
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:1882
+#: builtin/am.c:1835
msgid ""
"No changes - did you forget to use 'git add'?\n"
"If there is nothing left to stage, chances are that something else\n"
@@ -7221,7 +7793,7 @@ msgstr ""
"Ако няма друга промяна за включване в индекса, най-вероятно някоя друга\n"
"кръпка е довела до същите промени и в такъв случай просто пропуснете тази."
-#: builtin/am.c:1889
+#: builtin/am.c:1842
msgid ""
"You still have unmerged paths in your index.\n"
"You should 'git add' each file with resolved conflicts to mark them as "
@@ -7232,17 +7804,17 @@ msgstr ""
"След корекция на конфликтите изпълнете „git add“ върху поправените файлове.\n"
"За да приемете „изтрити от тях“, изпълнете „git rm“ върху изтритите файлове."
-#: builtin/am.c:1996 builtin/am.c:2000 builtin/am.c:2012 builtin/reset.c:324
-#: builtin/reset.c:332
+#: builtin/am.c:1949 builtin/am.c:1953 builtin/am.c:1965 builtin/reset.c:328
+#: builtin/reset.c:336
#, c-format
msgid "Could not parse object '%s'."
msgstr "„%s“ не е разпознат като обект."
-#: builtin/am.c:2048
+#: builtin/am.c:2001
msgid "failed to clean index"
msgstr "индексът не може да бъде изчистен"
-#: builtin/am.c:2083
+#: builtin/am.c:2036
msgid ""
"You seem to have moved HEAD since the last 'am' failure.\n"
"Not rewinding to ORIG_HEAD"
@@ -7253,148 +7825,149 @@ msgstr ""
"сочи към\n"
"„ORIG_HEAD“"
-#: builtin/am.c:2174
+#: builtin/am.c:2129
#, c-format
msgid "Invalid value for --patch-format: %s"
msgstr "Неправилна стойност за „--patch-format“: „%s“"
-#: builtin/am.c:2210
+#: builtin/am.c:2165
msgid "git am [<options>] [(<mbox> | <Maildir>)...]"
msgstr "git am [ОПЦИЯ…] [(ФАЙЛ_С_ПОЩА|ДИРЕКТОРИЯ_С_ПОЩА)…]"
-#: builtin/am.c:2211
+#: builtin/am.c:2166
msgid "git am [<options>] (--continue | --skip | --abort)"
msgstr "git am [ОПЦИЯ…] (--continue | --quit | --abort)"
-#: builtin/am.c:2217
+#: builtin/am.c:2172
msgid "run interactively"
msgstr "интерактивна работа"
-#: builtin/am.c:2219
+#: builtin/am.c:2174
msgid "historical option -- no-op"
msgstr "изоставена опция, съществува по исторически причини, нищо не прави"
-#: builtin/am.c:2221
+#: builtin/am.c:2176
msgid "allow fall back on 3way merging if needed"
msgstr "да се преминава към тройно сливане при нужда."
-#: builtin/am.c:2222 builtin/init-db.c:485 builtin/prune-packed.c:58
-#: builtin/repack.c:299
+#: builtin/am.c:2177 builtin/init-db.c:486 builtin/prune-packed.c:58
+#: builtin/repack.c:306
msgid "be quiet"
msgstr "без извеждане на информация"
-#: builtin/am.c:2224
+#: builtin/am.c:2179
msgid "add a Signed-off-by line to the commit message"
msgstr "добавяне на ред за подпис „Signed-off-by“ в съобщението за подаване"
-#: builtin/am.c:2227
+#: builtin/am.c:2182
msgid "recode into utf8 (default)"
msgstr "прекодиране в UTF-8 (стандартно)"
-#: builtin/am.c:2229
+#: builtin/am.c:2184
msgid "pass -k flag to git-mailinfo"
msgstr "подаване на опцията „-k“ на командата „git-mailinfo“"
-#: builtin/am.c:2231
+#: builtin/am.c:2186
msgid "pass -b flag to git-mailinfo"
msgstr "подаване на опцията „-b“ на командата „git-mailinfo“"
-#: builtin/am.c:2233
+#: builtin/am.c:2188
msgid "pass -m flag to git-mailinfo"
msgstr "подаване на опцията „-m“ на командата „git-mailinfo“"
-#: builtin/am.c:2235
+#: builtin/am.c:2190
msgid "pass --keep-cr flag to git-mailsplit for mbox format"
msgstr ""
"подаване на опцията „--keep-cr“ на командата „git-mailsplit“ за формат „mbox“"
-#: builtin/am.c:2238
+#: builtin/am.c:2193
msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr"
msgstr ""
"без подаване на опцията „--keep-cr“ на командата „git-mailsplit“ независимо "
"от „am.keepcr“"
-#: builtin/am.c:2241
+#: builtin/am.c:2196
msgid "strip everything before a scissors line"
msgstr "пропускане на всичко преди реда за отрязване"
-#: builtin/am.c:2243 builtin/am.c:2246 builtin/am.c:2249 builtin/am.c:2252
-#: builtin/am.c:2255 builtin/am.c:2258 builtin/am.c:2261 builtin/am.c:2264
-#: builtin/am.c:2270
+#: 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
msgid "pass it through git-apply"
msgstr "прекарване през „git-apply“"
-#: builtin/am.c:2260 builtin/commit.c:1332 builtin/fmt-merge-msg.c:670
-#: builtin/fmt-merge-msg.c:673 builtin/grep.c:857 builtin/merge.c:237
-#: builtin/pull.c:150 builtin/pull.c:208 builtin/repack.c:308
-#: builtin/repack.c:312 builtin/repack.c:314 builtin/show-branch.c:650
-#: builtin/show-ref.c:170 builtin/tag.c:384 parse-options.h:144
-#: parse-options.h:146 parse-options.h:258
+#: 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/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
msgid "n"
msgstr "БРОЙ"
-#: builtin/am.c:2266 builtin/branch.c:651 builtin/for-each-ref.c:38
-#: builtin/replace.c:543 builtin/tag.c:420 builtin/verify-tag.c:39
+#: builtin/am.c:2221 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:2267
+#: builtin/am.c:2222
msgid "format the patch(es) are in"
msgstr "формат на кръпките"
-#: builtin/am.c:2273
+#: builtin/am.c:2228
msgid "override error message when patch failure occurs"
msgstr "избрано от вас съобщение за грешка при прилагане на кръпки"
-#: builtin/am.c:2275
+#: builtin/am.c:2230
msgid "continue applying patches after resolving a conflict"
msgstr "продължаване на прилагането на кръпки след коригирането на конфликт"
-#: builtin/am.c:2278
+#: builtin/am.c:2233
msgid "synonyms for --continue"
-msgstr "синоними на „--continue“"
+msgstr "псевдоними на „--continue“"
-#: builtin/am.c:2281
+#: builtin/am.c:2236
msgid "skip the current patch"
msgstr "прескачане на текущата кръпка"
-#: builtin/am.c:2284
+#: builtin/am.c:2239
msgid "restore the original branch and abort the patching operation."
msgstr ""
"възстановяване на първоначалното състояние на клона и преустановяване на "
"прилагането на кръпката."
-#: builtin/am.c:2287
+#: builtin/am.c:2242
msgid "abort the patching operation but keep HEAD where it is."
msgstr ""
"преустановяване на прилагането на кръпката без промяна към кое сочи „HEAD“."
-#: builtin/am.c:2290
+#: builtin/am.c:2245
msgid "show the patch being applied."
msgstr "показване на прилаганата кръпка."
-#: builtin/am.c:2294
+#: builtin/am.c:2249
msgid "lie about committer date"
msgstr "дата за подаване различна от първоначалната"
-#: builtin/am.c:2296
+#: builtin/am.c:2251
msgid "use current timestamp for author date"
msgstr "използване на текущото време като това за автор"
-#: builtin/am.c:2298 builtin/commit.c:1468 builtin/merge.c:271
-#: builtin/pull.c:183 builtin/revert.c:113 builtin/tag.c:400
+#: 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
msgid "key-id"
msgstr "ИДЕНТИФИКАТОР_НА_КЛЮЧ"
-#: builtin/am.c:2299
+#: builtin/am.c:2254 builtin/rebase.c:899 builtin/rebase--interactive.c:184
msgid "GPG-sign commits"
msgstr "подписване на подаванията с GPG"
-#: builtin/am.c:2302
+#: builtin/am.c:2257
msgid "(internal use for git-rebase)"
msgstr "(ползва се вътрешно за „git-rebase“)"
-#: builtin/am.c:2320
+#: builtin/am.c:2275
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."
@@ -7402,18 +7975,18 @@ msgstr ""
"Опциите „-b“/„--binary“ отдавна не правят нищо и\n"
"ще бъдат премахнати в бъдеще. Не ги ползвайте."
-#: builtin/am.c:2327
+#: builtin/am.c:2282
msgid "failed to read the index"
msgstr "неуспешно изчитане на индекса"
-#: builtin/am.c:2342
+#: builtin/am.c:2297
#, c-format
msgid "previous rebase directory %s still exists but mbox given."
msgstr ""
"предишната директория за пребазиране „%s“ все още съществува, а е зададен "
"файл „mbox“."
-#: builtin/am.c:2366
+#: builtin/am.c:2321
#, c-format
msgid ""
"Stray %s directory found.\n"
@@ -7422,7 +7995,7 @@ msgstr ""
"Открита е излишна директория „%s“.\n"
"Можете да я изтриете с командата „git am --abort“."
-#: builtin/am.c:2372
+#: builtin/am.c:2327
msgid "Resolve operation not in progress, we are not resuming."
msgstr "В момента не тече операция по коригиране и няма как да се продължи."
@@ -7551,134 +8124,134 @@ msgstr "неправилен цвят „%s“ в „color.blame.repeatedLines
msgid "invalid value for blame.coloring"
msgstr "неправилна стойност за „blame.coloring“"
-#: builtin/blame.c:789
+#: builtin/blame.c:793
msgid "Show blame entries as we find them, incrementally"
msgstr "Извеждане на анотациите с намирането им, последователно"
-#: builtin/blame.c:790
+#: builtin/blame.c:794
msgid "Show blank SHA-1 for boundary commits (Default: off)"
msgstr ""
"Извеждане на празни суми по SHA1 за граничните подавания (стандартно опцията "
"е изключена)"
-#: builtin/blame.c:791
+#: builtin/blame.c:795
msgid "Do not treat root commits as boundaries (Default: off)"
msgstr ""
"Началните подавания да не се считат за гранични (стандартно опцията е "
"изключена)"
-#: builtin/blame.c:792
+#: builtin/blame.c:796
msgid "Show work cost statistics"
msgstr "Извеждане на статистика за извършените действия"
-#: builtin/blame.c:793
+#: builtin/blame.c:797
msgid "Force progress reporting"
msgstr "Принудително извеждане на напредъка"
-#: builtin/blame.c:794
+#: builtin/blame.c:798
msgid "Show output score for blame entries"
msgstr "Извеждане на допълнителна информация за определянето на анотациите"
-#: builtin/blame.c:795
+#: builtin/blame.c:799
msgid "Show original filename (Default: auto)"
msgstr ""
"Извеждане на първоначалното име на файл (стандартно това е автоматично)"
-#: builtin/blame.c:796
+#: builtin/blame.c:800
msgid "Show original linenumber (Default: off)"
msgstr ""
"Извеждане на първоначалният номер на ред (стандартно опцията е изключена)"
-#: builtin/blame.c:797
+#: builtin/blame.c:801
msgid "Show in a format designed for machine consumption"
msgstr "Извеждане във формат за по-нататъшна обработка"
-#: builtin/blame.c:798
+#: builtin/blame.c:802
msgid "Show porcelain format with per-line commit information"
msgstr ""
"Извеждане във формат за команди от потребителско ниво с информация на всеки "
"ред"
-#: builtin/blame.c:799
+#: builtin/blame.c:803
msgid "Use the same output mode as git-annotate (Default: off)"
msgstr ""
"Използване на същия формат като „git-annotate“ (стандартно опцията е "
"изключена)"
-#: builtin/blame.c:800
+#: builtin/blame.c:804
msgid "Show raw timestamp (Default: off)"
msgstr "Извеждане на неформатирани времена (стандартно опцията е изключена)"
-#: builtin/blame.c:801
+#: builtin/blame.c:805
msgid "Show long commit SHA1 (Default: off)"
msgstr "Извеждане на пълните суми по SHA1 (стандартно опцията е изключена)"
-#: builtin/blame.c:802
+#: builtin/blame.c:806
msgid "Suppress author name and timestamp (Default: off)"
msgstr "Без име на автор и време на промяна (стандартно опцията е изключена)"
-#: builtin/blame.c:803
+#: builtin/blame.c:807
msgid "Show author email instead of name (Default: off)"
msgstr ""
"Извеждане на е-пощата на автора, а не името му (стандартно опцията е "
"изключена)"
-#: builtin/blame.c:804
+#: builtin/blame.c:808
msgid "Ignore whitespace differences"
msgstr "Без разлики в знаците за интервали"
-#: builtin/blame.c:805
+#: builtin/blame.c:809
msgid "color redundant metadata from previous line differently"
msgstr ""
"оцветяване на повтарящите се метаданни от предишния ред в различен цвят"
-#: builtin/blame.c:806
+#: builtin/blame.c:810
msgid "color lines by age"
msgstr "оцветяване на редовете по възраст"
-#: builtin/blame.c:813
+#: builtin/blame.c:817
msgid "Use an experimental heuristic to improve diffs"
msgstr "Подобряване на разликите чрез експериментална евристика"
-#: builtin/blame.c:815
+#: builtin/blame.c:819
msgid "Spend extra cycles to find better match"
msgstr "Допълнителни изчисления за по-добри резултати"
-#: builtin/blame.c:816
+#: builtin/blame.c:820
msgid "Use revisions from <file> instead of calling git-rev-list"
msgstr "Изчитане на версиите от ФАЙЛ, а не чрез изпълнение на „git-rev-list“"
-#: builtin/blame.c:817
+#: builtin/blame.c:821
msgid "Use <file>'s contents as the final image"
msgstr "Използване на съдържанието на ФАЙЛа като крайно положение"
-#: builtin/blame.c:818 builtin/blame.c:819
+#: builtin/blame.c:822 builtin/blame.c:823
msgid "score"
msgstr "напасване на редовете"
-#: builtin/blame.c:818
+#: builtin/blame.c:822
msgid "Find line copies within and across files"
msgstr ""
"Търсене на копирани редове както в рамките на един файл, така и от един файл "
"към друг"
-#: builtin/blame.c:819
+#: builtin/blame.c:823
msgid "Find line movements within and across files"
msgstr ""
"Търсене на преместени редове както в рамките на един файл, така и от един "
"файл към друг"
-#: builtin/blame.c:820
+#: builtin/blame.c:824
msgid "n,m"
msgstr "n,m"
-#: builtin/blame.c:820
+#: builtin/blame.c:824
msgid "Process only line range n,m, counting from 1"
msgstr ""
"Информация само за редовете в диапазона от n до m включително. Броенето "
"започва от 1"
-#: builtin/blame.c:869
+#: builtin/blame.c:873
msgid "--progress can't be used with --incremental or porcelain formats"
msgstr ""
"опцията „--progress“ е несъвместима с „--incremental“ и форма̀та на командите "
@@ -7692,46 +8265,46 @@ msgstr ""
#. your language may need more or fewer display
#. columns.
#.
-#: builtin/blame.c:920
+#: builtin/blame.c:924
msgid "4 years, 11 months ago"
msgstr "преди 4 години и 11 месеца"
-#: builtin/blame.c:1007
+#: builtin/blame.c:1011
#, 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:1053
+#: builtin/blame.c:1057
msgid "Blaming lines"
msgstr "Анотирани редове"
-#: builtin/branch.c:28
+#: builtin/branch.c:29
msgid "git branch [<options>] [-r | -a] [--merged | --no-merged]"
msgstr "git branch [ОПЦИЯ…] [-r | -a] [--merged | --no-merged]"
-#: builtin/branch.c:29
+#: builtin/branch.c:30
msgid "git branch [<options>] [-l] [-f] <branch-name> [<start-point>]"
msgstr "git branch [ОПЦИЯ…] [-l] [-f] ИМЕ_НА_КЛОН [НАЧАЛО]"
-#: builtin/branch.c:30
+#: builtin/branch.c:31
msgid "git branch [<options>] [-r] (-d | -D) <branch-name>..."
msgstr "git branch [ОПЦИЯ…] [-r] (-d | -D) ИМЕ_НА_КЛОН…"
-#: builtin/branch.c:31
+#: builtin/branch.c:32
msgid "git branch [<options>] (-m | -M) [<old-branch>] <new-branch>"
msgstr "git branch [ОПЦИЯ…] (-m | -M) [СТАР_КЛОН] НОВ_КЛОН"
-#: builtin/branch.c:32
+#: builtin/branch.c:33
msgid "git branch [<options>] (-c | -C) [<old-branch>] <new-branch>"
msgstr "git branch [ОПЦИЯ…] (-c | -C) [СТАР_КЛОН] НОВ_КЛОН"
-#: builtin/branch.c:33
+#: builtin/branch.c:34
msgid "git branch [<options>] [-r | -a] [--points-at]"
msgstr "git branch [ОПЦИЯ…] [-r | -a] [--points-at]"
-#: builtin/branch.c:34
+#: builtin/branch.c:35
msgid "git branch [<options>] [-r | -a] [--format]"
msgstr "git branch [ОПЦИЯ…] [-r | -a] [--format]"
@@ -7884,193 +8457,189 @@ msgstr ""
" %s\n"
"Редовете, които започват с „%c“, ще бъдат пропуснати.\n"
-#: builtin/branch.c:602
+#: builtin/branch.c:594
msgid "Generic options"
msgstr "Общи настройки"
-#: builtin/branch.c:604
+#: builtin/branch.c:596
msgid "show hash and subject, give twice for upstream branch"
msgstr ""
"извеждане на хеша и темата. Повтарянето на опцията прибавя отдалечените "
"клони"
-#: builtin/branch.c:605
+#: builtin/branch.c:597
msgid "suppress informational messages"
msgstr "без информационни съобщения"
-#: builtin/branch.c:606
+#: builtin/branch.c:598
msgid "set up tracking mode (see git-pull(1))"
msgstr "задаване на режима на следене (виж git-pull(1))"
-#: builtin/branch.c:608
+#: builtin/branch.c:600
msgid "do not use"
msgstr "да не се ползва"
-#: builtin/branch.c:610
+#: builtin/branch.c:602 builtin/rebase--interactive.c:180
msgid "upstream"
msgstr "клон-източник"
-#: builtin/branch.c:610
+#: builtin/branch.c:602
msgid "change the upstream info"
msgstr "смяна на клона-източник"
-#: builtin/branch.c:611
+#: builtin/branch.c:603
msgid "Unset the upstream info"
msgstr "без клон-източник"
-#: builtin/branch.c:612
+#: builtin/branch.c:604
msgid "use colored output"
msgstr "цветен изход"
-#: builtin/branch.c:613
+#: builtin/branch.c:605
msgid "act on remote-tracking branches"
msgstr "действие върху следящите клони"
-#: builtin/branch.c:615 builtin/branch.c:617
+#: builtin/branch.c:607 builtin/branch.c:609
msgid "print only branches that contain the commit"
msgstr "извеждане само на клоните, които съдържат това ПОДАВАНЕ"
-#: builtin/branch.c:616 builtin/branch.c:618
+#: builtin/branch.c:608 builtin/branch.c:610
msgid "print only branches that don't contain the commit"
msgstr "извеждане само на клоните, които не съдържат това ПОДАВАНЕ"
-#: builtin/branch.c:621
+#: builtin/branch.c:613
msgid "Specific git-branch actions:"
msgstr "Специални действия на „git-branch“:"
-#: builtin/branch.c:622
+#: builtin/branch.c:614
msgid "list both remote-tracking and local branches"
msgstr "извеждане както на следящите, така и на локалните клони"
-#: builtin/branch.c:624
+#: builtin/branch.c:616
msgid "delete fully merged branch"
msgstr "изтриване на клони, които са напълно слети"
-#: builtin/branch.c:625
+#: builtin/branch.c:617
msgid "delete branch (even if not merged)"
msgstr "изтриване и на клони, които не са напълно слети"
-#: builtin/branch.c:626
+#: builtin/branch.c:618
msgid "move/rename a branch and its reflog"
msgstr ""
"преместване/преименуване на клон и принадлежащият му журнал на указателите"
-#: builtin/branch.c:627
+#: builtin/branch.c:619
msgid "move/rename a branch, even if target exists"
msgstr "преместване/преименуване на клон, дори ако има вече клон с такова име"
-#: builtin/branch.c:628
+#: builtin/branch.c:620
msgid "copy a branch and its reflog"
msgstr "копиране на клон и принадлежащия му журнал на указателите"
-#: builtin/branch.c:629
+#: builtin/branch.c:621
msgid "copy a branch, even if target exists"
msgstr "копиране на клон, дори ако има вече клон с такова име"
-#: builtin/branch.c:630
+#: builtin/branch.c:622
msgid "list branch names"
msgstr "извеждане на имената на клоните"
-#: builtin/branch.c:631
+#: builtin/branch.c:623
msgid "create the branch's reflog"
msgstr "създаване на журнала на указателите на клона"
-#: builtin/branch.c:634
-msgid "deprecated synonym for --create-reflog"
-msgstr "синоним на „--create-reflog“ (остаряло)"
-
-#: builtin/branch.c:639
+#: builtin/branch.c:625
msgid "edit the description for the branch"
msgstr "редактиране на описанието на клона"
-#: builtin/branch.c:640
+#: builtin/branch.c:626
msgid "force creation, move/rename, deletion"
msgstr "принудително създаване, преместване, преименуване, изтриване"
-#: builtin/branch.c:641
+#: builtin/branch.c:627
msgid "print only branches that are merged"
msgstr "извеждане само на слетите клони"
-#: builtin/branch.c:642
+#: builtin/branch.c:628
msgid "print only branches that are not merged"
msgstr "извеждане само на неслетите клони"
-#: builtin/branch.c:643
+#: builtin/branch.c:629
msgid "list branches in columns"
msgstr "извеждане по колони"
-#: builtin/branch.c:644 builtin/for-each-ref.c:40 builtin/ls-remote.c:70
-#: builtin/tag.c:413
+#: builtin/branch.c:630 builtin/for-each-ref.c:40 builtin/ls-remote.c:70
+#: builtin/tag.c:415
msgid "key"
msgstr "КЛЮЧ"
-#: builtin/branch.c:645 builtin/for-each-ref.c:41 builtin/ls-remote.c:71
-#: builtin/tag.c:414
+#: builtin/branch.c:631 builtin/for-each-ref.c:41 builtin/ls-remote.c:71
+#: builtin/tag.c:416
msgid "field name to sort on"
msgstr "име на полето, по което да е подредбата"
-#: builtin/branch.c:647 builtin/for-each-ref.c:43 builtin/notes.c:410
-#: builtin/notes.c:413 builtin/notes.c:573 builtin/notes.c:576
-#: builtin/tag.c:416
+#: 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/tag.c:418
msgid "object"
msgstr "ОБЕКТ"
-#: builtin/branch.c:648
+#: builtin/branch.c:634
msgid "print only branches of the object"
msgstr "извеждане само на клоните на ОБЕКТА"
-#: builtin/branch.c:650 builtin/for-each-ref.c:49 builtin/tag.c:423
+#: builtin/branch.c:636 builtin/for-each-ref.c:49 builtin/tag.c:425
msgid "sorting and filtering are case insensitive"
msgstr "подредбата и филтрирането третират еднакво малките и главните букви"
-#: builtin/branch.c:651 builtin/for-each-ref.c:38 builtin/tag.c:421
+#: builtin/branch.c:637 builtin/for-each-ref.c:38 builtin/tag.c:423
#: builtin/verify-tag.c:39
msgid "format to use for the output"
msgstr "ФОРМАТ за изхода"
-#: builtin/branch.c:674 builtin/clone.c:739
+#: builtin/branch.c:660 builtin/clone.c:739
msgid "HEAD not found below refs/heads!"
msgstr "В директорията „refs/heads“ липсва файл „HEAD“"
-#: builtin/branch.c:697
+#: builtin/branch.c:683
msgid "--column and --verbose are incompatible"
msgstr "Опциите „--column“ и „--verbose“ са несъвместими"
-#: builtin/branch.c:717 builtin/branch.c:769 builtin/branch.c:778
+#: builtin/branch.c:698 builtin/branch.c:749 builtin/branch.c:758
msgid "branch name required"
msgstr "Необходимо е име на клон"
-#: builtin/branch.c:745
+#: builtin/branch.c:725
msgid "Cannot give description to detached HEAD"
msgstr "Не може да зададете описание на несвързан „HEAD“"
-#: builtin/branch.c:750
+#: builtin/branch.c:730
msgid "cannot edit description of more than one branch"
msgstr "Не може да редактирате описанието на повече от един клон едновременно"
-#: builtin/branch.c:757
+#: builtin/branch.c:737
#, c-format
msgid "No commit on branch '%s' yet."
msgstr "В клона „%s“ все още няма подавания."
-#: builtin/branch.c:760
+#: builtin/branch.c:740
#, c-format
msgid "No branch named '%s'."
msgstr "Липсва клон на име „%s“."
-#: builtin/branch.c:775
+#: builtin/branch.c:755
msgid "too many branches for a copy operation"
msgstr "прекалено много клони за копиране"
-#: builtin/branch.c:784
+#: builtin/branch.c:764
msgid "too many arguments for a rename operation"
msgstr "прекалено много аргументи към командата за преименуване"
-#: builtin/branch.c:789
+#: builtin/branch.c:769
msgid "too many arguments to set new upstream"
msgstr "прекалено много аргументи към командата за следене"
-#: builtin/branch.c:793
+#: builtin/branch.c:773
#, c-format
msgid ""
"could not set upstream of HEAD to %s when it does not point to any branch."
@@ -8078,35 +8647,35 @@ msgstr ""
"Следеното от „HEAD“ не може да се зададе да е „%s“, защото то не сочи към "
"никой клон."
-#: builtin/branch.c:796 builtin/branch.c:818 builtin/branch.c:834
+#: builtin/branch.c:776 builtin/branch.c:798
#, c-format
msgid "no such branch '%s'"
msgstr "Няма клон на име „%s“."
-#: builtin/branch.c:800
+#: builtin/branch.c:780
#, c-format
msgid "branch '%s' does not exist"
msgstr "Не съществува клон на име „%s“."
-#: builtin/branch.c:812
+#: builtin/branch.c:792
msgid "too many arguments to unset upstream"
msgstr "прекалено много аргументи към командата за спиране на следене"
-#: builtin/branch.c:816
+#: builtin/branch.c:796
msgid "could not unset upstream of HEAD when it does not point to any branch."
msgstr ""
"Следеното от „HEAD“ не може да махне, защото то не сочи към никой клон."
-#: builtin/branch.c:822
+#: builtin/branch.c:802
#, c-format
msgid "Branch '%s' has no upstream information"
msgstr "Няма информация клонът „%s“ да следи някой друг"
-#: builtin/branch.c:837
+#: builtin/branch.c:812
msgid "-a and -r options to 'git branch' do not make sense with a branch name"
msgstr "Опциите „-a“ и „-r“ на „git branch“ са несъвместими с име на клон"
-#: builtin/branch.c:840
+#: builtin/branch.c:815
msgid ""
"the '--set-upstream' option is no longer supported. Please use '--track' or "
"'--set-upstream-to' instead."
@@ -8127,7 +8696,7 @@ msgstr "За създаването на пратка е необходимо х
msgid "Need a repository to unbundle."
msgstr "За приемането на пратка е необходимо хранилище."
-#: builtin/cat-file.c:577
+#: builtin/cat-file.c:587
msgid ""
"git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
"p | <type> | --textconv | --filters) [--path=<path>] <object>"
@@ -8135,7 +8704,7 @@ msgstr ""
"git cat-file (-t [--allow-unknown-type] | -s [--allow-unknown-type] | -e | -"
"p | ВИД | --textconv --filters) [--path=ПЪТ] ОБЕКТ"
-#: builtin/cat-file.c:578
+#: builtin/cat-file.c:588
msgid ""
"git cat-file (--batch | --batch-check) [--follow-symlinks] [--textconv | --"
"filters]"
@@ -8143,75 +8712,79 @@ msgstr ""
"git cat-file (--batch | --batch-check) [--follow-symlinks] [--textconv | --"
"filters]"
-#: builtin/cat-file.c:615
+#: builtin/cat-file.c:609
+msgid "only one batch option may be specified"
+msgstr "може да укажете само една пакетна опция"
+
+#: builtin/cat-file.c:627
msgid "<type> can be one of: blob, tree, commit, tag"
msgstr ""
"ВИДът може да е: „blob“ (BLOB), „tree“ (дърво), „commit“ (подаване), "
"„tag“ (етикет)"
-#: builtin/cat-file.c:616
+#: builtin/cat-file.c:628
msgid "show object type"
msgstr "извеждане на вида на обект"
-#: builtin/cat-file.c:617
+#: builtin/cat-file.c:629
msgid "show object size"
msgstr "извеждане на размера на обект"
-#: builtin/cat-file.c:619
+#: builtin/cat-file.c:631
msgid "exit with zero when there's no error"
msgstr "изход с 0, когато няма грешка"
-#: builtin/cat-file.c:620
+#: builtin/cat-file.c:632
msgid "pretty-print object's content"
msgstr "форматирано извеждане на съдържанието на обекта"
-#: builtin/cat-file.c:622
+#: builtin/cat-file.c:634
msgid "for blob objects, run textconv on object's content"
msgstr ""
"да се стартира програмата зададена в настройката „textconv“ за преобразуване "
"на съдържанието на обекта-BLOB"
-#: builtin/cat-file.c:624
+#: builtin/cat-file.c:636
msgid "for blob objects, run filters on object's content"
msgstr ""
"да се стартират програмите за преобразуване на съдържанието на обектите-BLOB"
-#: builtin/cat-file.c:625 git-submodule.sh:864
+#: builtin/cat-file.c:637 git-submodule.sh:857
msgid "blob"
msgstr "обект-BLOB"
-#: builtin/cat-file.c:626
+#: builtin/cat-file.c:638
msgid "use a specific path for --textconv/--filters"
msgstr "опциите „--textconv“/„--filters“ изискват път"
-#: builtin/cat-file.c:628
+#: builtin/cat-file.c:640
msgid "allow -s and -t to work with broken/corrupt objects"
msgstr "позволяване на опциите „-s“ и „-t“ да работят с повредени обекти"
-#: builtin/cat-file.c:629
+#: builtin/cat-file.c:641
msgid "buffer --batch output"
msgstr "буфериране на изхода от „--batch“"
-#: builtin/cat-file.c:631
+#: builtin/cat-file.c:643
msgid "show info and content of objects fed from the standard input"
msgstr ""
"извеждане на информация и съдържание на обектите подадени на стандартния вход"
-#: builtin/cat-file.c:634
+#: builtin/cat-file.c:647
msgid "show info about objects fed from the standard input"
msgstr "извеждане на информация за обектите подадени на стандартния вход"
-#: builtin/cat-file.c:637
+#: builtin/cat-file.c:651
msgid "follow in-tree symlinks (used with --batch or --batch-check)"
msgstr ""
"следване на символните връзки сочещи в дървото (ползва се с „--batch“ или „--"
"batch-check“)"
-#: builtin/cat-file.c:639
+#: builtin/cat-file.c:653
msgid "show all objects with --batch or --batch-check"
msgstr "извеждане на всички обекти с „--batch“ или „--batch-check“"
-#: builtin/cat-file.c:641
+#: builtin/cat-file.c:655
msgid "do not order --batch-all-objects output"
msgstr "без подреждане на изхода от „--batch-all-objects“"
@@ -8239,8 +8812,8 @@ msgstr "изчитане на имената на файловете от ста
msgid "terminate input and output records by a NUL character"
msgstr "разделяне на входните и изходните записи с нулевия знак „NUL“"
-#: builtin/check-ignore.c:20 builtin/checkout.c:1120 builtin/gc.c:503
-#: builtin/worktree.c:447
+#: builtin/check-ignore.c:20 builtin/checkout.c:1234 builtin/gc.c:517
+#: builtin/worktree.c:495
msgid "suppress progress reporting"
msgstr "без показване на напредъка"
@@ -8297,161 +8870,161 @@ msgstr "не са указани контакти"
msgid "git checkout-index [<options>] [--] [<file>...]"
msgstr "git checkout-index [ОПЦИЯ…] [--] [ФАЙЛ…]"
-#: builtin/checkout-index.c:143
+#: builtin/checkout-index.c:145
msgid "stage should be between 1 and 3 or all"
msgstr "етапът трябва да е „1“, „2“, „3“ или „all“ (всички)"
-#: builtin/checkout-index.c:159
+#: builtin/checkout-index.c:161
msgid "check out all files in the index"
msgstr "изтегляне на всички файлове в индекса"
-#: builtin/checkout-index.c:160
+#: builtin/checkout-index.c:162
msgid "force overwrite of existing files"
msgstr "презаписване на файловете, дори и да съществуват"
-#: builtin/checkout-index.c:162
+#: builtin/checkout-index.c:164
msgid "no warning for existing files and files not in index"
msgstr "без предупреждения при липсващи файлове и файлове не в индекса"
-#: builtin/checkout-index.c:164
+#: builtin/checkout-index.c:166
msgid "don't checkout new files"
msgstr "без изтегляне на нови файлове"
-#: builtin/checkout-index.c:166
+#: builtin/checkout-index.c:168
msgid "update stat information in the index file"
msgstr "обновяване на информацията получена чрез „stat“ за файловете в индекса"
-#: builtin/checkout-index.c:170
+#: builtin/checkout-index.c:172
msgid "read list of paths from the standard input"
msgstr "изчитане на пътищата от стандартния вход"
-#: builtin/checkout-index.c:172
+#: builtin/checkout-index.c:174
msgid "write the content to temporary files"
msgstr "записване на съдържанието във временни файлове"
-#: builtin/checkout-index.c:173 builtin/column.c:31
-#: builtin/submodule--helper.c:1361 builtin/submodule--helper.c:1364
-#: builtin/submodule--helper.c:1372 builtin/submodule--helper.c:1736
-#: builtin/worktree.c:620
+#: 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
msgid "string"
msgstr "НИЗ"
-#: builtin/checkout-index.c:174
+#: builtin/checkout-index.c:176
msgid "when creating files, prepend <string>"
msgstr "при създаването на нови файлове да се добавя префикса НИЗ"
-#: builtin/checkout-index.c:176
+#: builtin/checkout-index.c:178
msgid "copy out the files from named stage"
msgstr "копиране на файловете от това състояние на сливане"
-#: builtin/checkout.c:29
+#: builtin/checkout.c:31
msgid "git checkout [<options>] <branch>"
msgstr "git checkout [ОПЦИЯ…] КЛОН"
-#: builtin/checkout.c:30
+#: builtin/checkout.c:32
msgid "git checkout [<options>] [<branch>] -- <file>..."
msgstr "git checkout [ОПЦИЯ…] [КЛОН] -- ФАЙЛ…"
-#: builtin/checkout.c:138 builtin/checkout.c:171
+#: builtin/checkout.c:144 builtin/checkout.c:177
#, c-format
msgid "path '%s' does not have our version"
msgstr "вашата версия липсва в пътя „%s“"
-#: builtin/checkout.c:140 builtin/checkout.c:173
+#: builtin/checkout.c:146 builtin/checkout.c:179
#, c-format
msgid "path '%s' does not have their version"
msgstr "чуждата версия липсва в пътя „%s“"
-#: builtin/checkout.c:156
+#: builtin/checkout.c:162
#, c-format
msgid "path '%s' does not have all necessary versions"
msgstr "някоя от необходимите версии липсва в пътя „%s“"
-#: builtin/checkout.c:200
+#: builtin/checkout.c:206
#, c-format
msgid "path '%s' does not have necessary versions"
msgstr "някоя от необходимите версии липсва в пътя „%s“"
-#: builtin/checkout.c:217
+#: builtin/checkout.c:224
#, c-format
msgid "path '%s': cannot merge"
msgstr "пътят „%s“ не може да бъде слян"
-#: builtin/checkout.c:233
+#: builtin/checkout.c:240
#, c-format
msgid "Unable to add merge result for '%s'"
msgstr "Резултатът за „%s“ не може да бъде слян"
-#: builtin/checkout.c:255 builtin/checkout.c:258 builtin/checkout.c:261
-#: builtin/checkout.c:264
+#: builtin/checkout.c:262 builtin/checkout.c:265 builtin/checkout.c:268
+#: builtin/checkout.c:271
#, c-format
msgid "'%s' cannot be used with updating paths"
msgstr "Опцията „%s“ е несъвместима с обновяването на пътища"
-#: builtin/checkout.c:267 builtin/checkout.c:270
+#: builtin/checkout.c:274 builtin/checkout.c:277
#, c-format
msgid "'%s' cannot be used with %s"
msgstr "Опцията „%s“ е несъвместима с „%s“"
-#: builtin/checkout.c:273
+#: builtin/checkout.c:280
#, c-format
msgid "Cannot update paths and switch to branch '%s' at the same time."
msgstr ""
"Невъзможно е едновременно да обновявате пътища и да преминете към клона „%s“."
-#: builtin/checkout.c:342 builtin/checkout.c:349
+#: builtin/checkout.c:349 builtin/checkout.c:356
#, c-format
msgid "path '%s' is unmerged"
msgstr "пътят „%s“ не е слят"
-#: builtin/checkout.c:508
+#: builtin/checkout.c:608
msgid "you need to resolve your current index first"
msgstr "първо трябва да коригирате индекса си"
-#: builtin/checkout.c:645
+#: builtin/checkout.c:745
#, c-format
msgid "Can not do reflog for '%s': %s\n"
msgstr "Журналът на указателите за „%s“ не може да се проследи: %s\n"
-#: builtin/checkout.c:686
+#: builtin/checkout.c:786
msgid "HEAD is now at"
msgstr "Указателят „HEAD“ в момента сочи към"
-#: builtin/checkout.c:690 builtin/clone.c:692
+#: builtin/checkout.c:790 builtin/clone.c:692
msgid "unable to update HEAD"
msgstr "Указателят „HEAD“ не може да бъде обновен"
-#: builtin/checkout.c:694
+#: builtin/checkout.c:794
#, c-format
msgid "Reset branch '%s'\n"
msgstr "Зануляване на клона „%s“\n"
-#: builtin/checkout.c:697
+#: builtin/checkout.c:797
#, c-format
msgid "Already on '%s'\n"
msgstr "Вече сте на „%s“\n"
-#: builtin/checkout.c:701
+#: builtin/checkout.c:801
#, c-format
msgid "Switched to and reset branch '%s'\n"
msgstr "Преминаване към клона „%s“ и зануляване на промените\n"
-#: builtin/checkout.c:703 builtin/checkout.c:1052
+#: builtin/checkout.c:803 builtin/checkout.c:1166
#, c-format
msgid "Switched to a new branch '%s'\n"
msgstr "Преминахте към новия клон „%s“\n"
-#: builtin/checkout.c:705
+#: builtin/checkout.c:805
#, c-format
msgid "Switched to branch '%s'\n"
msgstr "Преминахте към клона „%s“\n"
-#: builtin/checkout.c:756
+#: builtin/checkout.c:856
#, c-format
msgid " ... and %d more.\n"
msgstr "… и още %d.\n"
-#: builtin/checkout.c:762
+#: builtin/checkout.c:862
#, c-format
msgid ""
"Warning: you are leaving %d commit behind, not connected to\n"
@@ -8473,7 +9046,7 @@ msgstr[1] ""
"\n"
"%s\n"
-#: builtin/checkout.c:781
+#: builtin/checkout.c:881
#, c-format
msgid ""
"If you want to keep it by creating a new branch, this may be a good time\n"
@@ -8500,164 +9073,164 @@ msgstr[1] ""
" git branch ИМЕ_НА_НОВИЯ_КЛОН %s\n"
"\n"
-#: builtin/checkout.c:813
+#: builtin/checkout.c:913
msgid "internal error in revision walk"
msgstr "вътрешна грешка при обхождането на версиите"
-#: builtin/checkout.c:817
+#: builtin/checkout.c:917
msgid "Previous HEAD position was"
msgstr "Преди това „HEAD“ сочеше към"
-#: builtin/checkout.c:845 builtin/checkout.c:1047
+#: builtin/checkout.c:945 builtin/checkout.c:1161
msgid "You are on a branch yet to be born"
msgstr "В момента сте на клон, който предстои да бъде създаден"
-#: builtin/checkout.c:952
+#: builtin/checkout.c:1066
#, c-format
msgid "only one reference expected, %d given."
msgstr "очакваше се един указател, а сте подали %d."
-#: builtin/checkout.c:993 builtin/worktree.c:241 builtin/worktree.c:396
+#: builtin/checkout.c:1107 builtin/worktree.c:289 builtin/worktree.c:444
#, c-format
msgid "invalid reference: %s"
msgstr "неправилен указател: %s"
-#: builtin/checkout.c:1022
+#: builtin/checkout.c:1136
#, c-format
msgid "reference is not a tree: %s"
msgstr "указателят не сочи към обект-дърво: %s"
-#: builtin/checkout.c:1061
+#: builtin/checkout.c:1175
msgid "paths cannot be used with switching branches"
msgstr "задаването на път е несъвместимо с преминаването от един клон към друг"
-#: builtin/checkout.c:1064 builtin/checkout.c:1068
+#: builtin/checkout.c:1178 builtin/checkout.c:1182
#, c-format
msgid "'%s' cannot be used with switching branches"
msgstr "опцията „%s“ е несъвместима с преминаването от един клон към друг"
-#: builtin/checkout.c:1072 builtin/checkout.c:1075 builtin/checkout.c:1080
-#: builtin/checkout.c:1083
+#: builtin/checkout.c:1186 builtin/checkout.c:1189 builtin/checkout.c:1194
+#: builtin/checkout.c:1197
#, c-format
msgid "'%s' cannot be used with '%s'"
msgstr "опцията „%s“ е несъвместима с „%s“"
-#: builtin/checkout.c:1088
+#: builtin/checkout.c:1202
#, c-format
msgid "Cannot switch branch to a non-commit '%s'"
msgstr ""
"За да преминете към клон, подайте указател, който сочи към подаване. „%s“ "
"не е такъв"
-#: builtin/checkout.c:1121 builtin/checkout.c:1123 builtin/clone.c:119
-#: builtin/remote.c:168 builtin/remote.c:170 builtin/worktree.c:440
-#: builtin/worktree.c:442
+#: 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
msgid "branch"
msgstr "клон"
-#: builtin/checkout.c:1122
+#: builtin/checkout.c:1236
msgid "create and checkout a new branch"
msgstr "създаване и преминаване към нов клон"
-#: builtin/checkout.c:1124
+#: builtin/checkout.c:1238
msgid "create/reset and checkout a branch"
msgstr "създаване/зануляване на клон и преминаване към него"
-#: builtin/checkout.c:1125
+#: builtin/checkout.c:1239
msgid "create reflog for new branch"
msgstr "създаване на журнал на указателите за нов клон"
-#: builtin/checkout.c:1126 builtin/worktree.c:444
+#: builtin/checkout.c:1240 builtin/worktree.c:492
msgid "detach HEAD at named commit"
msgstr "отделяне на указателя „HEAD“ към указаното подаване"
-#: builtin/checkout.c:1127
+#: builtin/checkout.c:1241
msgid "set upstream info for new branch"
msgstr "задаване на кой клон бива следен при създаването на новия клон"
-#: builtin/checkout.c:1129
+#: builtin/checkout.c:1243
msgid "new-branch"
msgstr "НОВ_КЛОН"
-#: builtin/checkout.c:1129
+#: builtin/checkout.c:1243
msgid "new unparented branch"
msgstr "нов клон без родител"
-#: builtin/checkout.c:1131
+#: builtin/checkout.c:1245
msgid "checkout our version for unmerged files"
msgstr "изтегляне на вашата версия на неслетите файлове"
-#: builtin/checkout.c:1134
+#: builtin/checkout.c:1248
msgid "checkout their version for unmerged files"
msgstr "изтегляне на чуждата версия на неслетите файлове"
-#: builtin/checkout.c:1136
+#: builtin/checkout.c:1250
msgid "force checkout (throw away local modifications)"
msgstr "принудително изтегляне (вашите промени ще бъдат занулени)"
-#: builtin/checkout.c:1138
+#: builtin/checkout.c:1252
msgid "perform a 3-way merge with the new branch"
msgstr "извършване на тройно сливане с новия клон"
-#: builtin/checkout.c:1140 builtin/merge.c:273
+#: builtin/checkout.c:1254 builtin/merge.c:275
msgid "update ignored files (default)"
msgstr "обновяване на игнорираните файлове (стандартно)"
-#: builtin/checkout.c:1142 builtin/log.c:1510 parse-options.h:264
+#: builtin/checkout.c:1256 builtin/log.c:1573 parse-options.h:274
msgid "style"
msgstr "СТИЛ"
-#: builtin/checkout.c:1143
+#: builtin/checkout.c:1257
msgid "conflict style (merge or diff3)"
msgstr "действие при конфликт (сливане или тройна разлика)"
-#: builtin/checkout.c:1146
+#: builtin/checkout.c:1260
msgid "do not limit pathspecs to sparse entries only"
msgstr "без ограничаване на изброените пътища само до частично изтеглените"
-#: builtin/checkout.c:1148
+#: builtin/checkout.c:1262
msgid "second guess 'git checkout <no-such-branch>'"
msgstr ""
"опит за отгатване на име на клон след неуспешен опит с „git checkout "
"НЕСЪЩЕСТВУВАЩ_КЛОН“"
-#: builtin/checkout.c:1150
+#: builtin/checkout.c:1264
msgid "do not check if another worktree is holding the given ref"
msgstr "без проверка дали друго работно дърво държи указателя"
-#: builtin/checkout.c:1154 builtin/clone.c:86 builtin/fetch.c:138
-#: builtin/merge.c:270 builtin/pull.c:128 builtin/push.c:572
+#: 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/send-pack.c:174
msgid "force progress reporting"
msgstr "извеждане на напредъка"
-#: builtin/checkout.c:1184
+#: builtin/checkout.c:1298
msgid "-b, -B and --orphan are mutually exclusive"
msgstr "Опциите „-b“, „-B“ и „--orphan“ са несъвместими една с друга"
-#: builtin/checkout.c:1201
+#: builtin/checkout.c:1315
msgid "--track needs a branch name"
msgstr "опцията „--track“ изисква име на клон"
-#: builtin/checkout.c:1206
+#: builtin/checkout.c:1320
msgid "missing branch name; try -b"
msgstr "липсва име на клон, използвайте опцията „-b“"
-#: builtin/checkout.c:1243
+#: builtin/checkout.c:1357
msgid "invalid path specification"
msgstr "указан е неправилен път"
-#: builtin/checkout.c:1250
+#: builtin/checkout.c:1364
#, c-format
msgid "'%s' is not a commit and a branch '%s' cannot be created from it"
msgstr "„%s“ не е подаване, затова от него не може да се създаде клон „%s“"
-#: builtin/checkout.c:1254
+#: builtin/checkout.c:1368
#, c-format
msgid "git checkout: --detach does not take a path argument '%s'"
msgstr "git checkout: опцията „--detach“ не приема аргумент-път „%s“"
-#: builtin/checkout.c:1258
+#: builtin/checkout.c:1372
msgid ""
"git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
"checking out of the index."
@@ -8665,7 +9238,7 @@ msgstr ""
"git checkout: опциите „--ours“/„--theirs“, „--force“ и „--merge“\n"
"са несъвместими с изтегляне от индекса."
-#: builtin/checkout.c:1278
+#: builtin/checkout.c:1392
#, c-format
msgid ""
"'%s' matched more than one remote tracking branch.\n"
@@ -8725,7 +9298,7 @@ msgstr "Хранилището „%s“ ще бъде прескочено\n"
msgid "failed to remove %s"
msgstr "файлът „%s“ не може да бъде изтрит"
-#: builtin/clean.c:297 git-add--interactive.perl:579
+#: builtin/clean.c:298 git-add--interactive.perl:579
#, c-format
msgid ""
"Prompt help:\n"
@@ -8738,7 +9311,7 @@ msgstr ""
"ПРЕФИКС — избор на единствен обект по този уникален префикс\n"
" — (празно) нищо да не се избира\n"
-#: builtin/clean.c:301 git-add--interactive.perl:588
+#: builtin/clean.c:302 git-add--interactive.perl:588
#, c-format
msgid ""
"Prompt help:\n"
@@ -8759,39 +9332,39 @@ msgstr ""
"* — избиране на всички обекти\n"
" — (празно) завършване на избирането\n"
-#: builtin/clean.c:517 git-add--interactive.perl:554
+#: builtin/clean.c:518 git-add--interactive.perl:554
#: git-add--interactive.perl:559
#, c-format, perl-format
msgid "Huh (%s)?\n"
msgstr "Неправилен избор (%s).\n"
-#: builtin/clean.c:659
+#: builtin/clean.c:660
#, c-format
msgid "Input ignore patterns>> "
msgstr "Шаблони за игнорирани елементи≫ "
-#: builtin/clean.c:696
+#: builtin/clean.c:697
#, c-format
msgid "WARNING: Cannot find items matched by: %s"
msgstr "ПРЕДУПРЕЖДЕНИЕ: Никой обект не напасва на „%s“"
-#: builtin/clean.c:717
+#: builtin/clean.c:718
msgid "Select items to delete"
msgstr "Избиране на обекти за изтриване"
#. TRANSLATORS: Make sure to keep [y/N] as is
-#: builtin/clean.c:758
+#: builtin/clean.c:759
#, c-format
msgid "Remove %s [y/N]? "
msgstr "Да се изтрие ли „%s“? „y“ — да, „N“ — НЕ"
#
-#: builtin/clean.c:783 git-add--interactive.perl:1717
+#: builtin/clean.c:784 git-add--interactive.perl:1717
#, c-format
msgid "Bye.\n"
msgstr "Изход.\n"
-#: builtin/clean.c:791
+#: builtin/clean.c:792
msgid ""
"clean - start cleaning\n"
"filter by pattern - exclude items from deletion\n"
@@ -8809,64 +9382,64 @@ msgstr ""
"help — този край\n"
"? — подсказка за шаблоните"
-#: builtin/clean.c:818 git-add--interactive.perl:1793
+#: builtin/clean.c:819 git-add--interactive.perl:1793
msgid "*** Commands ***"
msgstr "●●● Команди ●●●"
-#: builtin/clean.c:819 git-add--interactive.perl:1790
+#: builtin/clean.c:820 git-add--interactive.perl:1790
msgid "What now"
msgstr "Избор на следващо действие"
-#: builtin/clean.c:827
+#: builtin/clean.c:828
msgid "Would remove the following item:"
msgid_plural "Would remove the following items:"
msgstr[0] "Следният обект ще бъде изтрит:"
msgstr[1] "Следните обекти ще бъдат изтрити:"
-#: builtin/clean.c:843
+#: builtin/clean.c:844
msgid "No more files to clean, exiting."
msgstr "Файловете за изчистване свършиха. Изход от програмата."
-#: builtin/clean.c:905
+#: builtin/clean.c:906
msgid "do not print names of files removed"
msgstr "без извеждане на имената на файловете, които ще бъдат изтрити"
-#: builtin/clean.c:907
+#: builtin/clean.c:908
msgid "force"
msgstr "принудително изтриване"
-#: builtin/clean.c:908
+#: builtin/clean.c:909
msgid "interactive cleaning"
msgstr "интерактивно изтриване"
-#: builtin/clean.c:910
+#: builtin/clean.c:911
msgid "remove whole directories"
msgstr "изтриване на цели директории"
-#: builtin/clean.c:911 builtin/describe.c:545 builtin/describe.c:547
-#: builtin/grep.c:875 builtin/log.c:161 builtin/log.c:163
-#: builtin/ls-files.c:549 builtin/name-rev.c:415 builtin/name-rev.c:417
-#: builtin/show-ref.c:177
+#: 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/show-ref.c:178
msgid "pattern"
msgstr "ШАБЛОН"
-#: builtin/clean.c:912
+#: builtin/clean.c:913
msgid "add <pattern> to ignore rules"
msgstr "добавяне на ШАБЛОН от файлове, които да не се трият"
-#: builtin/clean.c:913
+#: builtin/clean.c:914
msgid "remove ignored files, too"
msgstr "изтриване и на игнорираните файлове"
-#: builtin/clean.c:915
+#: builtin/clean.c:916
msgid "remove only ignored files"
msgstr "изтриване само на игнорирани файлове"
-#: builtin/clean.c:933
+#: builtin/clean.c:934
msgid "-x and -X cannot be used together"
msgstr "опциите „-x“ и „-X“ са несъвместими"
-#: builtin/clean.c:937
+#: builtin/clean.c:938
msgid ""
"clean.requireForce set to true and neither -i, -n, nor -f given; refusing to "
"clean"
@@ -8874,7 +9447,7 @@ msgstr ""
"Настройката „clean.requireForce“ е зададена като истина, което изисква някоя "
"от опциите „-i“, „-n“ или „-f“. Няма да се извърши изчистване"
-#: builtin/clean.c:940
+#: builtin/clean.c:941
msgid ""
"clean.requireForce defaults to true and neither -i, -n, nor -f given; "
"refusing to clean"
@@ -8891,7 +9464,7 @@ msgstr "git clone [ОПЦИЯ…] [--] ХРАНИЛИЩЕ [ДИРЕКТОРИЯ]
msgid "don't create a checkout"
msgstr "без създаване на работно дърво"
-#: builtin/clone.c:89 builtin/clone.c:91 builtin/init-db.c:480
+#: builtin/clone.c:89 builtin/clone.c:91 builtin/init-db.c:481
msgid "create a bare repository"
msgstr "създаване на голо хранилище"
@@ -8924,26 +9497,26 @@ msgstr "инициализиране на подмодулите при това
msgid "number of submodules cloned in parallel"
msgstr "брой подмодули, клонирани паралелно"
-#: builtin/clone.c:109 builtin/init-db.c:477
+#: builtin/clone.c:109 builtin/init-db.c:478
msgid "template-directory"
msgstr "директория с шаблони"
-#: builtin/clone.c:110 builtin/init-db.c:478
+#: builtin/clone.c:110 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:1368
-#: builtin/submodule--helper.c:1739
+#: builtin/clone.c:112 builtin/clone.c:114 builtin/submodule--helper.c:1375
+#: builtin/submodule--helper.c:1856
msgid "reference repository"
msgstr "еталонно хранилище"
-#: builtin/clone.c:116 builtin/submodule--helper.c:1370
-#: builtin/submodule--helper.c:1741
+#: builtin/clone.c:116 builtin/submodule--helper.c:1377
+#: builtin/submodule--helper.c:1858
msgid "use --reference only while cloning"
msgstr "опцията „--reference“ може да се използва само при клониране"
-#: builtin/clone.c:117 builtin/column.c:27 builtin/merge-file.c:44
-#: builtin/pack-objects.c:3191 builtin/repack.c:320
+#: builtin/clone.c:117 builtin/column.c:27 builtin/merge-file.c:46
+#: builtin/pack-objects.c:3301 builtin/repack.c:329
msgid "name"
msgstr "ИМЕ"
@@ -8959,8 +9532,8 @@ msgstr "изтегляне на този КЛОН, а не соченият от
msgid "path to git-upload-pack on the remote"
msgstr "път към командата „git-upload-pack“ на отдалеченото хранилище"
-#: builtin/clone.c:123 builtin/fetch.c:139 builtin/grep.c:814
-#: builtin/pull.c:216
+#: builtin/clone.c:123 builtin/fetch.c:142 builtin/grep.c:825
+#: builtin/pull.c:217
msgid "depth"
msgstr "ДЪЛБОЧИНА"
@@ -8968,8 +9541,7 @@ msgstr "ДЪЛБОЧИНА"
msgid "create a shallow clone of that depth"
msgstr "плитко клониране до тази ДЪЛБОЧИНА"
-#: builtin/clone.c:125 builtin/fetch.c:141 builtin/pack-objects.c:3182
-#: parse-options.h:154
+#: builtin/clone.c:125 builtin/fetch.c:144 builtin/pack-objects.c:3292
msgid "time"
msgstr "ВРЕМЕ"
@@ -8977,11 +9549,12 @@ msgstr "ВРЕМЕ"
msgid "create a shallow clone since a specific time"
msgstr "плитко клониране до момент във времето"
-#: builtin/clone.c:127 builtin/fetch.c:143 builtin/fetch.c:166
+#: builtin/clone.c:127 builtin/fetch.c:146 builtin/fetch.c:169
+#: builtin/rebase.c:831
msgid "revision"
msgstr "версия"
-#: builtin/clone.c:128 builtin/fetch.c:144
+#: builtin/clone.c:128 builtin/fetch.c:147
msgid "deepen history of shallow clone, excluding rev"
msgstr "задълбочаване на историята на плитко хранилище до изключващ указател"
@@ -9000,11 +9573,11 @@ msgstr ""
msgid "any cloned submodules will be shallow"
msgstr "всички клонирани подмодули ще са плитки"
-#: builtin/clone.c:135 builtin/init-db.c:486
+#: builtin/clone.c:135 builtin/init-db.c:487
msgid "gitdir"
msgstr "СЛУЖЕБНА_ДИРЕКТОРИЯ"
-#: builtin/clone.c:136 builtin/init-db.c:487
+#: builtin/clone.c:136 builtin/init-db.c:488
msgid "separate git dir from working tree"
msgstr "отделна СЛУЖЕБНА_ДИРЕКТОРИЯ за git извън работното дърво"
@@ -9016,12 +9589,12 @@ msgstr "КЛЮЧ=СТОЙНОСТ"
msgid "set config inside the new repository"
msgstr "задаване на настройките на новото хранилище"
-#: builtin/clone.c:139 builtin/fetch.c:162 builtin/pull.c:229
+#: builtin/clone.c:139 builtin/fetch.c:165 builtin/pull.c:230
#: builtin/push.c:583
msgid "use IPv4 addresses only"
msgstr "само адреси IPv4"
-#: builtin/clone.c:141 builtin/fetch.c:164 builtin/pull.c:232
+#: builtin/clone.c:141 builtin/fetch.c:167 builtin/pull.c:233
#: builtin/push.c:585
msgid "use IPv6 addresses only"
msgstr "само адреси IPv6"
@@ -9055,6 +9628,11 @@ msgstr "„%s“ съществува и не е директория"
msgid "failed to stat %s\n"
msgstr "не може да бъде получена информация чрез „stat“ за „%s“\n"
+#: builtin/clone.c:443
+#, c-format
+msgid "failed to unlink '%s'"
+msgstr "неуспешно изтриване на „%s“"
+
#: builtin/clone.c:448
#, c-format
msgid "failed to create link '%s'"
@@ -9099,81 +9677,81 @@ msgstr ""
"указателят „HEAD“ от отдалеченото хранилище сочи към нещо,\n"
"което не съществува. Не може да се изтегли определен клон.\n"
-#: builtin/clone.c:760
+#: builtin/clone.c:761
msgid "unable to checkout working tree"
msgstr "работното дърво не може да бъде подготвено"
-#: builtin/clone.c:805
+#: builtin/clone.c:806
msgid "unable to write parameters to config file"
msgstr "настройките не могат да бъдат записани в конфигурационния файл"
-#: builtin/clone.c:868
+#: builtin/clone.c:869
msgid "cannot repack to clean up"
msgstr "не може да се извърши пакетиране за изчистване на файловете"
-#: builtin/clone.c:870
+#: builtin/clone.c:871
msgid "cannot unlink temporary alternates file"
msgstr "временният файл за алтернативни обекти не може да бъде изтрит"
-#: builtin/clone.c:910 builtin/receive-pack.c:1935
+#: builtin/clone.c:911 builtin/receive-pack.c:1941
msgid "Too many arguments."
msgstr "Прекалено много аргументи."
-#: builtin/clone.c:914
+#: builtin/clone.c:915
msgid "You must specify a repository to clone."
msgstr "Трябва да укажете кое хранилище искате да клонирате."
-#: builtin/clone.c:927
+#: builtin/clone.c:928
#, c-format
msgid "--bare and --origin %s options are incompatible."
msgstr "опциите „--bare“ и „--origin %s“ са несъвместими."
-#: builtin/clone.c:930
+#: builtin/clone.c:931
msgid "--bare and --separate-git-dir are incompatible."
msgstr "опциите „--bare“ и „--separate-git-dir“ са несъвместими."
-#: builtin/clone.c:943
+#: builtin/clone.c:944
#, c-format
msgid "repository '%s' does not exist"
msgstr "не съществува хранилище „%s“"
-#: builtin/clone.c:949 builtin/fetch.c:1512
+#: builtin/clone.c:950 builtin/fetch.c:1606
#, c-format
msgid "depth %s is not a positive number"
msgstr "дълбочината трябва да е положително цяло число, а не „%s“"
-#: builtin/clone.c:959
+#: builtin/clone.c:960
#, c-format
msgid "destination path '%s' already exists and is not an empty directory."
msgstr "целевият път „%s“ съществува и не е празна директория."
-#: builtin/clone.c:969
+#: builtin/clone.c:970
#, c-format
msgid "working tree '%s' already exists."
msgstr "в „%s“ вече съществува работно дърво."
-#: builtin/clone.c:984 builtin/clone.c:1005 builtin/difftool.c:271
-#: builtin/worktree.c:247 builtin/worktree.c:277
+#: builtin/clone.c:985 builtin/clone.c:1006 builtin/difftool.c:271
+#: builtin/worktree.c:295 builtin/worktree.c:325
#, c-format
msgid "could not create leading directories of '%s'"
msgstr "родителските директории на „%s“ не могат да бъдат създадени"
-#: builtin/clone.c:989
+#: builtin/clone.c:990
#, c-format
msgid "could not create work tree dir '%s'"
msgstr "работното дърво в „%s“ не може да бъде създадено."
-#: builtin/clone.c:1009
+#: builtin/clone.c:1010
#, c-format
msgid "Cloning into bare repository '%s'...\n"
msgstr "Клониране и създаване на голо хранилище в „%s“…\n"
-#: builtin/clone.c:1011
+#: builtin/clone.c:1012
#, c-format
msgid "Cloning into '%s'...\n"
msgstr "Клониране и създаване на хранилище в „%s“…\n"
-#: builtin/clone.c:1035
+#: builtin/clone.c:1036
msgid ""
"clone --recursive is not compatible with both --reference and --reference-if-"
"able"
@@ -9181,44 +9759,44 @@ msgstr ""
"Опцията „--recursive“ е несъвместима с опциите „--reference“ и „--reference-"
"if-able“"
-#: builtin/clone.c:1096
+#: builtin/clone.c:1097
msgid "--depth is ignored in local clones; use file:// instead."
msgstr ""
"При локално клониране опцията „--depth“ се прескача. Ползвайте схемата "
"„file://“."
-#: builtin/clone.c:1098
+#: builtin/clone.c:1099
msgid "--shallow-since is ignored in local clones; use file:// instead."
msgstr ""
"При локално клониране опцията „--shallow-since“ се прескача. Ползвайте "
"схемата „file://“."
-#: builtin/clone.c:1100
+#: builtin/clone.c:1101
msgid "--shallow-exclude is ignored in local clones; use file:// instead."
msgstr ""
"При локално клониране опцията „--shallow-exclude“ се прескача. Ползвайте "
"схемата „file://“."
-#: builtin/clone.c:1102
+#: builtin/clone.c:1103
msgid "--filter is ignored in local clones; use file:// instead."
msgstr ""
"При локално клониране опцията „--filter“ се прескача. Ползвайте схемата "
"„file://“."
-#: builtin/clone.c:1105
+#: builtin/clone.c:1106
msgid "source repository is shallow, ignoring --local"
msgstr "клонираното хранилище е плитко, затова опцията „--local“ се прескача"
-#: builtin/clone.c:1110
+#: builtin/clone.c:1111
msgid "--local is ignored"
msgstr "опцията „--local“ се прескача"
-#: builtin/clone.c:1180 builtin/clone.c:1188
+#: builtin/clone.c:1181 builtin/clone.c:1189
#, c-format
msgid "Remote branch %s not found in upstream %s"
msgstr "Отдалеченият клон „%s“ липсва в клонираното хранилище „%s“"
-#: builtin/clone.c:1191
+#: builtin/clone.c:1192
msgid "You appear to have cloned an empty repository."
msgstr "Изглежда клонирахте празно хранилище."
@@ -9254,15 +9832,15 @@ msgstr "Поле в знаци между колоните"
msgid "--command must be the first argument"
msgstr "опцията „--command“ трябва да е първият аргумент"
-#: builtin/commit.c:38
+#: builtin/commit.c:40
msgid "git commit [<options>] [--] <pathspec>..."
msgstr "git commit [ОПЦИЯ…] [--] ПЪТ…"
-#: builtin/commit.c:43
+#: builtin/commit.c:45
msgid "git status [<options>] [--] <pathspec>..."
msgstr "git status [ОПЦИЯ…] [--] ПЪТ…"
-#: builtin/commit.c:48
+#: builtin/commit.c:50
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"
@@ -9274,7 +9852,7 @@ msgstr ""
"с опцията „--allow-empty“, или да го изтриете от историята с командата:\n"
"„git reset HEAD^“.\n"
-#: builtin/commit.c:53
+#: builtin/commit.c:55
msgid ""
"The previous cherry-pick is now empty, possibly due to conflict resolution.\n"
"If you wish to commit it anyway, use:\n"
@@ -9289,11 +9867,11 @@ msgstr ""
" git commit --allow-empty\n"
"\n"
-#: builtin/commit.c:60
+#: builtin/commit.c:62
msgid "Otherwise, please use 'git reset'\n"
msgstr "В противен случай използвайте командата „git reset“\n"
-#: builtin/commit.c:63
+#: builtin/commit.c:65
msgid ""
"If you wish to skip this commit, use:\n"
"\n"
@@ -9309,61 +9887,61 @@ msgstr ""
"Чрез командата „git cherry-pick --continue“ ще продължите отбирането на\n"
"останалите подавания.\n"
-#: builtin/commit.c:306
+#: builtin/commit.c:311
msgid "failed to unpack HEAD tree object"
msgstr "върховото дърво (HEAD tree object) не може да бъде извадено от пакет"
-#: builtin/commit.c:347
+#: builtin/commit.c:352
msgid "unable to create temporary index"
msgstr "временният индекс не може да бъде създаден"
-#: builtin/commit.c:353
+#: builtin/commit.c:358
msgid "interactive add failed"
msgstr "неуспешно интерактивно добавяне"
-#: builtin/commit.c:366
+#: builtin/commit.c:371
msgid "unable to update temporary index"
msgstr "временният индекс не може да бъде обновен"
-#: builtin/commit.c:368
+#: builtin/commit.c:373
msgid "Failed to update main cache tree"
msgstr "Дървото на основния кеш не може да бъде обновено"
-#: builtin/commit.c:393 builtin/commit.c:416 builtin/commit.c:462
+#: builtin/commit.c:398 builtin/commit.c:421 builtin/commit.c:467
msgid "unable to write new_index file"
msgstr "новият индекс не може да бъде записан"
-#: builtin/commit.c:445
+#: builtin/commit.c:450
msgid "cannot do a partial commit during a merge."
msgstr "по време на сливане не може да се извърши частично подаване."
-#: builtin/commit.c:447
+#: builtin/commit.c:452
msgid "cannot do a partial commit during a cherry-pick."
msgstr "по време на отбиране не може да се извърши частично подаване."
-#: builtin/commit.c:455
+#: builtin/commit.c:460
msgid "cannot read the index"
msgstr "индексът не може да бъде прочетен"
-#: builtin/commit.c:474
+#: builtin/commit.c:479
msgid "unable to write temporary index file"
msgstr "временният индекс не може да бъде записан"
-#: builtin/commit.c:571
+#: builtin/commit.c:577
#, c-format
msgid "commit '%s' lacks author header"
msgstr "заглавната част за автор в подаването „%s“ липсва"
-#: builtin/commit.c:573
+#: builtin/commit.c:579
#, c-format
msgid "commit '%s' has malformed author line"
msgstr "заглавната част за автор в подаването „%s“ е неправилна"
-#: builtin/commit.c:592
+#: builtin/commit.c:598
msgid "malformed --author parameter"
msgstr "неправилен параметър към опцията „--author“"
-#: builtin/commit.c:644
+#: builtin/commit.c:650
msgid ""
"unable to select a comment character that is not used\n"
"in the current commit message"
@@ -9371,38 +9949,38 @@ msgstr ""
"не може да се избере знак за коментар — в текущото съобщение за подаване са "
"използвани всички подобни знаци"
-#: builtin/commit.c:681 builtin/commit.c:714 builtin/commit.c:1042
+#: builtin/commit.c:687 builtin/commit.c:720 builtin/commit.c:1049
#, c-format
msgid "could not lookup commit %s"
msgstr "следното подаване не може да бъде открито: %s"
-#: builtin/commit.c:693 builtin/shortlog.c:317
+#: builtin/commit.c:699 builtin/shortlog.c:317
#, c-format
msgid "(reading log message from standard input)\n"
msgstr "(изчитане на съобщението за подаване от стандартния вход)\n"
-#: builtin/commit.c:695
+#: builtin/commit.c:701
msgid "could not read log from standard input"
msgstr "съобщението за подаване не бе прочетено стандартния вход"
-#: builtin/commit.c:699
+#: builtin/commit.c:705
#, c-format
msgid "could not read log file '%s'"
msgstr "файлът със съобщението за подаване „%s“ не може да бъде прочетен"
-#: builtin/commit.c:728 builtin/commit.c:736
+#: builtin/commit.c:734 builtin/commit.c:742
msgid "could not read SQUASH_MSG"
msgstr "съобщението за вкарване SQUASH_MSG не може да бъде прочетено"
-#: builtin/commit.c:733
+#: builtin/commit.c:739
msgid "could not read MERGE_MSG"
msgstr "съобщението за сливане MERGE_MSG не може да бъде прочетено"
-#: builtin/commit.c:787
+#: builtin/commit.c:793
msgid "could not write commit template"
msgstr "шаблонът за подаване не може да бъде запазен"
-#: builtin/commit.c:805
+#: builtin/commit.c:811
#, c-format
msgid ""
"\n"
@@ -9417,7 +9995,7 @@ msgstr ""
" %s\n"
"и опитайте отново.\n"
-#: builtin/commit.c:810
+#: builtin/commit.c:816
#, c-format
msgid ""
"\n"
@@ -9433,7 +10011,7 @@ msgstr ""
" %s\n"
"и опитайте отново.\n"
-#: builtin/commit.c:823
+#: builtin/commit.c:829
#, c-format
msgid ""
"Please enter the commit message for your changes. Lines starting\n"
@@ -9442,7 +10020,7 @@ msgstr ""
"Въведете съобщението за подаване на промените. Редовете, които започват\n"
"с „%c“, ще бъдат пропуснати, а празно съобщение преустановява подаването.\n"
-#: builtin/commit.c:831
+#: builtin/commit.c:837
#, c-format
msgid ""
"Please enter the commit message for your changes. Lines starting\n"
@@ -9453,154 +10031,155 @@ msgstr ""
"с „%c“, също ще бъдат включени — може да ги изтриете вие. Празно \n"
"съобщение преустановява подаването.\n"
-#: builtin/commit.c:848
+#: builtin/commit.c:854
#, c-format
msgid "%sAuthor: %.*s <%.*s>"
msgstr "%sАвтор: %.*s <%.*s>"
-#: builtin/commit.c:856
+#: builtin/commit.c:862
#, c-format
msgid "%sDate: %s"
msgstr "%sДата: %s"
-#: builtin/commit.c:863
+#: builtin/commit.c:869
#, c-format
msgid "%sCommitter: %.*s <%.*s>"
msgstr "%sПодаващ: %.*s <%.*s>"
-#: builtin/commit.c:880
+#: builtin/commit.c:887
msgid "Cannot read index"
msgstr "Индексът не може да бъде прочетен"
-#: builtin/commit.c:946
+#: builtin/commit.c:953
msgid "Error building trees"
msgstr "Грешка при изграждане на дърветата"
-#: builtin/commit.c:960 builtin/tag.c:258
+#: builtin/commit.c:967 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:1004
+#: builtin/commit.c:1011
#, c-format
msgid "--author '%s' is not 'Name <email>' and matches no existing author"
msgstr ""
"Опцията „--author '%s'“ не отговаря на форма̀та „Име <е-поща>“ и не съвпада с "
"никой автор"
-#: builtin/commit.c:1018
+#: builtin/commit.c:1025
#, c-format
msgid "Invalid ignored mode '%s'"
msgstr "Неправилен режим за игнорираните файлове: „%s“"
-#: builtin/commit.c:1032 builtin/commit.c:1269
+#: builtin/commit.c:1039 builtin/commit.c:1276
#, c-format
msgid "Invalid untracked files mode '%s'"
msgstr "Неправилен режим за неследените файлове: „%s“"
-#: builtin/commit.c:1070
+#: builtin/commit.c:1077
msgid "--long and -z are incompatible"
msgstr "Опциите „--long“ и „-z“ са несъвместими."
-#: builtin/commit.c:1103
+#: builtin/commit.c:1110
msgid "Using both --reset-author and --author does not make sense"
msgstr "Опциите „--reset-author“ и „--author“ са несъвместими."
-#: builtin/commit.c:1112
+#: builtin/commit.c:1119
msgid "You have nothing to amend."
msgstr "Няма какво да бъде поправено."
-#: builtin/commit.c:1115
+#: builtin/commit.c:1122
msgid "You are in the middle of a merge -- cannot amend."
msgstr "В момента се извършва сливане, не можете да поправяте."
-#: builtin/commit.c:1117
+#: builtin/commit.c:1124
msgid "You are in the middle of a cherry-pick -- cannot amend."
msgstr "В момента се извършва отбиране на подаване, не можете да поправяте."
-#: builtin/commit.c:1120
+#: builtin/commit.c:1127
msgid "Options --squash and --fixup cannot be used together"
msgstr "Опциите „--squash“ и „--fixup“ са несъвместими."
-#: builtin/commit.c:1130
+#: builtin/commit.c:1137
msgid "Only one of -c/-C/-F/--fixup can be used."
msgstr "Опциите „-c“, „-C“, „-F“ и „--fixup““ са несъвместими."
-#: builtin/commit.c:1132
+#: builtin/commit.c:1139
msgid "Option -m cannot be combined with -c/-C/-F."
msgstr "Опцията „-m“ е несъвместима с „-c“, „-C“ и „-F“."
-#: builtin/commit.c:1140
+#: builtin/commit.c:1147
msgid "--reset-author can be used only with -C, -c or --amend."
msgstr ""
"Опцията „--reset-author“ може да се използва само заедно с „-C“, „-c“ или\n"
"„--amend“."
-#: builtin/commit.c:1157
+#: builtin/commit.c:1164
msgid "Only one of --include/--only/--all/--interactive/--patch can be used."
msgstr ""
"Опциите „--include“, „--only“, „--all“, „--interactive“ и „--patch“ са\n"
"несъвместими."
-#: builtin/commit.c:1159
+#: builtin/commit.c:1166
msgid "No paths with --include/--only does not make sense."
msgstr "Опциите „--include“ и „--only“ изискват аргументи."
-#: builtin/commit.c:1173 builtin/tag.c:544
+#: builtin/commit.c:1180 builtin/tag.c:546
#, c-format
msgid "Invalid cleanup mode %s"
msgstr "Несъществуващ режим на изчистване „%s“"
-#: builtin/commit.c:1178
+#: builtin/commit.c:1185
msgid "Paths with -a does not make sense."
msgstr "Опцията „-a“ е несъвместима със задаването на пътища."
-#: builtin/commit.c:1303 builtin/commit.c:1480
+#: builtin/commit.c:1311 builtin/commit.c:1495
msgid "show status concisely"
msgstr "кратка информация за състоянието"
-#: builtin/commit.c:1305 builtin/commit.c:1482
+#: builtin/commit.c:1313 builtin/commit.c:1497
msgid "show branch information"
msgstr "информация за клоните"
-#: builtin/commit.c:1307
+#: builtin/commit.c:1315
msgid "show stash information"
msgstr "информация за скатаното"
-#: builtin/commit.c:1309 builtin/commit.c:1484
+#: builtin/commit.c:1317 builtin/commit.c:1499
msgid "compute full ahead/behind values"
msgstr "изчисляване на точните стойности напред/назад"
-#: builtin/commit.c:1311
+#: builtin/commit.c:1319
msgid "version"
msgstr "версия"
-#: builtin/commit.c:1311 builtin/commit.c:1486 builtin/push.c:558
-#: builtin/worktree.c:591
+#: builtin/commit.c:1319 builtin/commit.c:1501 builtin/push.c:558
+#: builtin/worktree.c:639
msgid "machine-readable output"
msgstr "формат на изхода за четене от програма"
-#: builtin/commit.c:1314 builtin/commit.c:1488
+#: builtin/commit.c:1322 builtin/commit.c:1503
msgid "show status in long format (default)"
msgstr "подробна информация за състоянието (стандартно)"
-#: builtin/commit.c:1317 builtin/commit.c:1491
+#: builtin/commit.c:1325 builtin/commit.c:1506
msgid "terminate entries with NUL"
msgstr "разделяне на елементите с нулевия знак „NUL“"
-#: builtin/commit.c:1319 builtin/commit.c:1323 builtin/commit.c:1494
-#: builtin/fast-export.c:1007 builtin/fast-export.c:1010 builtin/tag.c:398
+#: 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/tag.c:400
msgid "mode"
msgstr "РЕЖИМ"
-#: builtin/commit.c:1320 builtin/commit.c:1494
+#: builtin/commit.c:1328 builtin/commit.c:1509
msgid "show untracked files, optional modes: all, normal, no. (Default: all)"
msgstr ""
"извеждане на неследените файлове. Възможните РЕЖИМи са „all“ (подробна "
"информация), „normal“ (кратка информация), „no“ (без неследените файлове). "
"Стандартният РЕЖИМ е: „all“."
-#: builtin/commit.c:1324
+#: builtin/commit.c:1332
msgid ""
"show ignored files, optional modes: traditional, matching, no. (Default: "
"traditional)"
@@ -9609,11 +10188,11 @@ msgstr ""
"„traditional“ (традиционен), „matching“ (напасващи), „no“ (без игнорираните "
"файлове). Стандартният РЕЖИМ е: „traditional“."
-#: builtin/commit.c:1326 parse-options.h:167
+#: builtin/commit.c:1334 parse-options.h:164
msgid "when"
msgstr "КОГА"
-#: builtin/commit.c:1327
+#: builtin/commit.c:1335
msgid ""
"ignore changes to submodules, optional when: all, dirty, untracked. "
"(Default: all)"
@@ -9622,198 +10201,198 @@ msgstr ""
"една от „all“ (всички), „dirty“ (тези с неподадени промени), "
"„untracked“ (неследени)"
-#: builtin/commit.c:1329
+#: builtin/commit.c:1337
msgid "list untracked files in columns"
msgstr "извеждане на неследените файлове в колони"
-#: builtin/commit.c:1330
+#: builtin/commit.c:1338
msgid "do not detect renames"
msgstr "без засичане на преименуванията"
-#: builtin/commit.c:1332
+#: builtin/commit.c:1340
msgid "detect renames, optionally set similarity index"
msgstr "засичане на преименуванията, може да се зададе коефициент на прилика"
-#: builtin/commit.c:1352
+#: builtin/commit.c:1360
msgid "Unsupported combination of ignored and untracked-files arguments"
msgstr "Неподдържана комбинация от аргументи за игнорирани и неследени файлове"
-#: builtin/commit.c:1450
+#: builtin/commit.c:1465
msgid "suppress summary after successful commit"
msgstr "без информация след успешно подаване"
-#: builtin/commit.c:1451
+#: builtin/commit.c:1466
msgid "show diff in commit message template"
msgstr "добавяне на разликата към шаблона за съобщението при подаване"
-#: builtin/commit.c:1453
+#: builtin/commit.c:1468
msgid "Commit message options"
msgstr "Опции за съобщението при подаване"
-#: builtin/commit.c:1454 builtin/merge.c:261 builtin/tag.c:395
+#: builtin/commit.c:1469 builtin/merge.c:263 builtin/tag.c:397
msgid "read message from file"
msgstr "взимане на съобщението от ФАЙЛ"
-#: builtin/commit.c:1455
+#: builtin/commit.c:1470
msgid "author"
msgstr "АВТОР"
-#: builtin/commit.c:1455
+#: builtin/commit.c:1470
msgid "override author for commit"
msgstr "задаване на АВТОР за подаването"
-#: builtin/commit.c:1456 builtin/gc.c:504
+#: builtin/commit.c:1471 builtin/gc.c:518
msgid "date"
msgstr "ДАТА"
-#: builtin/commit.c:1456
+#: builtin/commit.c:1471
msgid "override date for commit"
msgstr "задаване на ДАТА за подаването"
-#: builtin/commit.c:1457 builtin/merge.c:257 builtin/notes.c:404
-#: builtin/notes.c:567 builtin/tag.c:393
+#: builtin/commit.c:1472 builtin/merge.c:259 builtin/notes.c:409
+#: builtin/notes.c:572 builtin/tag.c:395
msgid "message"
msgstr "СЪОБЩЕНИЕ"
-#: builtin/commit.c:1457
+#: builtin/commit.c:1472
msgid "commit message"
msgstr "СЪОБЩЕНИЕ при подаване"
-#: builtin/commit.c:1458 builtin/commit.c:1459 builtin/commit.c:1460
-#: builtin/commit.c:1461 parse-options.h:270 ref-filter.h:92
+#: builtin/commit.c:1473 builtin/commit.c:1474 builtin/commit.c:1475
+#: builtin/commit.c:1476 ref-filter.h:92 parse-options.h:280
msgid "commit"
msgstr "ПОДАВАНЕ"
-#: builtin/commit.c:1458
+#: builtin/commit.c:1473
msgid "reuse and edit message from specified commit"
msgstr "преизползване и редактиране на съобщението от указаното ПОДАВАНЕ"
-#: builtin/commit.c:1459
+#: builtin/commit.c:1474
msgid "reuse message from specified commit"
msgstr "преизползване на съобщението от указаното ПОДАВАНЕ"
-#: builtin/commit.c:1460
+#: builtin/commit.c:1475
msgid "use autosquash formatted message to fixup specified commit"
msgstr ""
"използване на автоматичното съобщение за вкарване на указаното ПОДАВАНЕ в "
"предходното без следа"
-#: builtin/commit.c:1461
+#: builtin/commit.c:1476
msgid "use autosquash formatted message to squash specified commit"
msgstr ""
"използване на автоматичното съобщение за вкарване на указаното ПОДАВАНЕ в "
"предното"
-#: builtin/commit.c:1462
+#: builtin/commit.c:1477
msgid "the commit is authored by me now (used with -C/-c/--amend)"
msgstr ""
"смяна на автора да съвпада с подаващия (използва се с „-C“/„-c“/„--amend“)"
-#: builtin/commit.c:1463 builtin/log.c:1457 builtin/merge.c:274
-#: builtin/pull.c:154 builtin/revert.c:106
+#: builtin/commit.c:1478 builtin/log.c:1520 builtin/merge.c:276
+#: builtin/pull.c:155 builtin/revert.c:106
msgid "add Signed-off-by:"
msgstr "добавяне на поле за подпис — „Signed-off-by:“"
-#: builtin/commit.c:1464
+#: builtin/commit.c:1479
msgid "use specified template file"
msgstr "използване на указания шаблонен ФАЙЛ"
-#: builtin/commit.c:1465
+#: builtin/commit.c:1480
msgid "force edit of commit"
msgstr "редактиране на подаване"
-#: builtin/commit.c:1466
+#: builtin/commit.c:1481
msgid "default"
msgstr "стандартно"
-#: builtin/commit.c:1466 builtin/tag.c:399
+#: builtin/commit.c:1481 builtin/tag.c:401
msgid "how to strip spaces and #comments from message"
msgstr "кои празни знаци и #коментари да се махат от съобщенията"
-#: builtin/commit.c:1467
+#: builtin/commit.c:1482
msgid "include status in commit message template"
msgstr "вмъкване на състоянието в шаблона за съобщението при подаване"
-#: builtin/commit.c:1469 builtin/merge.c:272 builtin/pull.c:184
+#: builtin/commit.c:1484 builtin/merge.c:274 builtin/pull.c:185
#: builtin/revert.c:114
msgid "GPG sign commit"
msgstr "подписване на подаването с GPG"
-#: builtin/commit.c:1472
+#: builtin/commit.c:1487
msgid "Commit contents options"
msgstr "Опции за избор на файлове при подаване"
-#: builtin/commit.c:1473
+#: builtin/commit.c:1488
msgid "commit all changed files"
msgstr "подаване на всички променени файлове"
-#: builtin/commit.c:1474
+#: builtin/commit.c:1489
msgid "add specified files to index for commit"
msgstr "добавяне на указаните файлове към индекса за подаване"
-#: builtin/commit.c:1475
+#: builtin/commit.c:1490
msgid "interactively add files"
msgstr "интерактивно добавяне на файлове"
-#: builtin/commit.c:1476
+#: builtin/commit.c:1491
msgid "interactively add changes"
msgstr "интерактивно добавяне на промени"
-#: builtin/commit.c:1477
+#: builtin/commit.c:1492
msgid "commit only specified files"
msgstr "подаване само на указаните файлове"
-#: builtin/commit.c:1478
+#: builtin/commit.c:1493
msgid "bypass pre-commit and commit-msg hooks"
msgstr ""
"без изпълнение на куките преди подаване и при промяна на съобщението за "
"подаване (pre-commit и commit-msg)"
-#: builtin/commit.c:1479
+#: builtin/commit.c:1494
msgid "show what would be committed"
msgstr "отпечатване на това, което би било подадено"
-#: builtin/commit.c:1492
+#: builtin/commit.c:1507
msgid "amend previous commit"
msgstr "поправяне на предишното подаване"
-#: builtin/commit.c:1493
+#: builtin/commit.c:1508
msgid "bypass post-rewrite hook"
msgstr "без изпълнение на куката след презаписване (post-rewrite)"
-#: builtin/commit.c:1498
+#: builtin/commit.c:1513
msgid "ok to record an empty change"
msgstr "позволяване на празни подавания"
-#: builtin/commit.c:1500
+#: builtin/commit.c:1515
msgid "ok to record a change with an empty message"
msgstr "позволяване на подавания с празни съобщения"
-#: builtin/commit.c:1573
+#: builtin/commit.c:1588
#, c-format
msgid "Corrupt MERGE_HEAD file (%s)"
msgstr "Повреден файл за върха за сливането „MERGE_HEAD“ (%s)"
-#: builtin/commit.c:1580
+#: builtin/commit.c:1595
msgid "could not read MERGE_MODE"
msgstr "режимът на сливане „MERGE_MODE“ не може да бъде прочетен"
-#: builtin/commit.c:1599
+#: builtin/commit.c:1614
#, c-format
msgid "could not read commit message: %s"
msgstr "съобщението за подаване не може да бъде прочетено: %s"
-#: builtin/commit.c:1610
+#: builtin/commit.c:1625
#, c-format
msgid "Aborting commit due to empty commit message.\n"
msgstr "Неизвършване на подаване поради празно съобщение.\n"
-#: builtin/commit.c:1615
+#: builtin/commit.c:1630
#, c-format
msgid "Aborting commit; you did not edit the message.\n"
msgstr "Неизвършване на подаване поради нередактирано съобщение.\n"
-#: builtin/commit.c:1650
+#: builtin/commit.c:1665
msgid ""
"repository has been updated, but unable to write\n"
"new_index file. Check that disk is not full and quota is\n"
@@ -9843,246 +10422,250 @@ msgstr ""
"git commit-graph write [--object-dir ДИР_ОБЕКТИ] [--append] [--reachable|--"
"stdin-packs|--stdin-commits]"
-#: builtin/commit-graph.c:48 builtin/commit-graph.c:77
-#: builtin/commit-graph.c:131 builtin/commit-graph.c:184 builtin/fetch.c:150
-#: builtin/log.c:1477
+#: 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
msgid "dir"
msgstr "директория"
-#: builtin/commit-graph.c:49 builtin/commit-graph.c:78
-#: builtin/commit-graph.c:132 builtin/commit-graph.c:185
+#: builtin/commit-graph.c:49 builtin/commit-graph.c:79
+#: builtin/commit-graph.c:133 builtin/commit-graph.c:191
msgid "The object directory to store the graph"
msgstr "ДИРекторията_с_ОБЕКТИ за запазване на гра̀фа"
-#: builtin/commit-graph.c:134
+#: builtin/commit-graph.c:135
msgid "start walk at all refs"
msgstr "обхождането да започне от всички указатели"
-#: builtin/commit-graph.c:136
+#: builtin/commit-graph.c:137
msgid "scan pack-indexes listed by stdin for commits"
msgstr ""
"проверка на подаванията за индексите на пакетите изброени на командния ред"
-#: builtin/commit-graph.c:138
+#: builtin/commit-graph.c:139
msgid "start walk at commits listed by stdin"
msgstr "започване на обхождането при подаванията подадени на стандартния вход"
-#: builtin/commit-graph.c:140
+#: builtin/commit-graph.c:141
msgid "include all commits already in the commit-graph file"
msgstr ""
"включване на всички подавания, които вече са във файла с гра̀фа на подаванията"
-#: builtin/commit-graph.c:149
+#: builtin/commit-graph.c:150
msgid "use at most one of --reachable, --stdin-commits, or --stdin-packs"
msgstr ""
"опциите „--reachable“, „--stdin-commits“ и „--stdin-packs“ са несъвместими"
-#: builtin/config.c:10
+#: builtin/config.c:11
msgid "git config [<options>]"
msgstr "git config [ОПЦИЯ…]"
-#: builtin/config.c:101
+#: builtin/config.c:103
#, c-format
msgid "unrecognized --type argument, %s"
msgstr "непознат аргумент „--type“: %s"
-#: builtin/config.c:113
+#: builtin/config.c:115
msgid "only one type at a time"
msgstr "само по един вид"
-#: builtin/config.c:122
+#: builtin/config.c:124
msgid "Config file location"
msgstr "Местоположение на конфигурационния файл"
-#: builtin/config.c:123
+#: builtin/config.c:125
msgid "use global config file"
msgstr "използване на глобалния конфигурационен файл"
-#: builtin/config.c:124
+#: builtin/config.c:126
msgid "use system config file"
msgstr "използване на системния конфигурационен файл"
-#: builtin/config.c:125
+#: builtin/config.c:127
msgid "use repository config file"
msgstr "използване на конфигурационния файл на хранилището"
-#: builtin/config.c:126
+#: builtin/config.c:128
+msgid "use per-worktree config file"
+msgstr "използване на конфигурационния файл на работното копие"
+
+#: builtin/config.c:129
msgid "use given config file"
msgstr "използване на зададения конфигурационен ФАЙЛ"
-#: builtin/config.c:127
+#: builtin/config.c:130
msgid "blob-id"
msgstr "ИДЕНТИФИКАТОР"
-#: builtin/config.c:127
+#: builtin/config.c:130
msgid "read config from given blob object"
msgstr ""
"изчитане на конфигурацията от BLOB с този ИДЕНТИФИКАТОР на съдържанието"
-#: builtin/config.c:128
+#: builtin/config.c:131
msgid "Action"
msgstr "Действие"
-#: builtin/config.c:129
+#: builtin/config.c:132
msgid "get value: name [value-regex]"
msgstr "извеждане на стойност: ИМЕ [РЕГУЛЯРЕН_ИЗРАЗ_ЗА_СТОЙНОСТТА]"
-#: builtin/config.c:130
+#: builtin/config.c:133
msgid "get all values: key [value-regex]"
msgstr "извеждане на всички стойности: ключ [РЕГУЛЯРЕН_ИЗРАЗ_ЗА_СТОЙНОСТТА]"
-#: builtin/config.c:131
+#: builtin/config.c:134
msgid "get values for regexp: name-regex [value-regex]"
msgstr ""
"извеждане на стойностите за РЕГУЛЯРНия_ИЗРАЗ: РЕГУЛЯРЕН_ИЗРАЗ_ЗА_ИМЕТО "
"[РЕГУЛЯРЕН_ИЗРАЗ_ЗА_СТОЙНОСТТА]"
-#: builtin/config.c:132
+#: builtin/config.c:135
msgid "get value specific for the URL: section[.var] URL"
msgstr "извеждане на стойността за указания адрес: РАЗДЕЛ[.ПРОМЕНЛИВА] АДРЕС"
-#: builtin/config.c:133
+#: builtin/config.c:136
msgid "replace all matching variables: name value [value_regex]"
msgstr ""
"замяна на всички съвпадащи променливи: ИМЕ СТОЙНОСТ "
"[РЕГУЛЯРЕН_ИЗРАЗ_ЗА_СТОЙНОСТТА]"
-#: builtin/config.c:134
+#: builtin/config.c:137
msgid "add a new variable: name value"
msgstr "добавяне на нова променлива: ИМЕ СТОЙНОСТ"
-#: builtin/config.c:135
+#: builtin/config.c:138
msgid "remove a variable: name [value-regex]"
msgstr "изтриване на променлива: ИМЕ [РЕГУЛЯРЕН_ИЗРАЗ_ЗА_СТОЙНОСТТА]"
-#: builtin/config.c:136
+#: builtin/config.c:139
msgid "remove all matches: name [value-regex]"
msgstr "изтриване на всички съвпадащи: ИМЕ [РЕГУЛЯРЕН_ИЗРАЗ_ЗА_СТОЙНОСТТА]"
-#: builtin/config.c:137
+#: builtin/config.c:140
msgid "rename section: old-name new-name"
msgstr "преименуване на раздел: СТАРО_ИМЕ НОВО_ИМЕ"
-#: builtin/config.c:138
+#: builtin/config.c:141
msgid "remove a section: name"
msgstr "изтриване на раздел: ИМЕ"
-#: builtin/config.c:139
+#: builtin/config.c:142
msgid "list all"
msgstr "изброяване на всички"
-#: builtin/config.c:140
+#: builtin/config.c:143
msgid "open an editor"
msgstr "отваряне на редактор"
-#: builtin/config.c:141
+#: builtin/config.c:144
msgid "find the color configured: slot [default]"
msgstr "извеждане на зададения цвят: номер [стандартно]"
-#: builtin/config.c:142
+#: builtin/config.c:145
msgid "find the color setting: slot [stdout-is-tty]"
msgstr "извеждане на зададения цвят: номер (стандартният изход е терминал)"
-#: builtin/config.c:143
+#: builtin/config.c:146
msgid "Type"
msgstr "Вид"
-#: builtin/config.c:144
+#: builtin/config.c:147
msgid "value is given this type"
msgstr "стойността е от този вид"
-#: builtin/config.c:145
+#: builtin/config.c:148
msgid "value is \"true\" or \"false\""
msgstr "СТОЙНОСТТА е „true“ (истина) или „false“ (лъжа)"
-#: builtin/config.c:146
+#: builtin/config.c:149
msgid "value is decimal number"
msgstr "СТОЙНОСТТА е цяло, десетично число"
-#: builtin/config.c:147
+#: builtin/config.c:150
msgid "value is --bool or --int"
msgstr "СТОЙНОСТТА е „--bool“ (булева) или „--int“ (десетично цяло число)"
-#: builtin/config.c:148
+#: builtin/config.c:151
msgid "value is a path (file or directory name)"
msgstr "СТОЙНОСТТА е път (до файл или директория)"
-#: builtin/config.c:149
+#: builtin/config.c:152
msgid "value is an expiry date"
msgstr "стойността е период на валидност/запазване"
-#: builtin/config.c:150
+#: builtin/config.c:153
msgid "Other"
msgstr "Други"
-#: builtin/config.c:151
+#: builtin/config.c:154
msgid "terminate values with NUL byte"
msgstr "разделяне на стойностите с нулевия знак „NUL“"
-#: builtin/config.c:152
+#: builtin/config.c:155
msgid "show variable names only"
msgstr "извеждане на имената на променливите"
-#: builtin/config.c:153
+#: builtin/config.c:156
msgid "respect include directives on lookup"
msgstr "при търсене да се уважат и директивите за включване"
-#: builtin/config.c:154
+#: builtin/config.c:157
msgid "show origin of config (file, standard input, blob, command line)"
msgstr ""
"извеждане на мястото на задаване на настройката (файл, стандартен вход, "
"обект-BLOB, команден ред)"
-#: builtin/config.c:155
+#: builtin/config.c:158
msgid "value"
msgstr "СТОЙНОСТ"
-#: builtin/config.c:155
+#: builtin/config.c:158
msgid "with --get, use default value when missing entry"
msgstr "с „--get“ се използва стандартна СТОЙНОСТ при липсваща"
-#: builtin/config.c:168
+#: builtin/config.c:171
#, c-format
msgid "wrong number of arguments, should be %d"
msgstr "неправилен брой аргументи, трябва да е точно %d"
-#: builtin/config.c:170
+#: builtin/config.c:173
#, c-format
msgid "wrong number of arguments, should be from %d to %d"
msgstr "неправилен брой аргументи, трябва да е от %d до %d включително"
-#: builtin/config.c:304
+#: builtin/config.c:307
#, c-format
msgid "invalid key pattern: %s"
msgstr "неправилен шаблон за ключ: „%s“"
-#: builtin/config.c:340
+#: builtin/config.c:343
#, c-format
msgid "failed to format default config value: %s"
msgstr "неуспешно форматиране на стандартната стойност на настройка: %s"
-#: builtin/config.c:397
+#: builtin/config.c:400
#, c-format
msgid "cannot parse color '%s'"
msgstr "„%s“ не може да се анализира като цвят"
-#: builtin/config.c:439
+#: builtin/config.c:442
msgid "unable to parse default color value"
msgstr "неразпозната стойност на стандартния цвят"
-#: builtin/config.c:492 builtin/config.c:724
+#: builtin/config.c:495 builtin/config.c:741
msgid "not in a git directory"
msgstr "не е в директория под Git"
-#: builtin/config.c:495
+#: builtin/config.c:498
msgid "writing to stdin is not supported"
msgstr "не се поддържа записване в стандартния вход"
-#: builtin/config.c:498
+#: builtin/config.c:501
msgid "writing config blobs is not supported"
msgstr "обекти-BLOB в настройките не се поддържат"
-#: builtin/config.c:583
+#: builtin/config.c:586
#, c-format
msgid ""
"# This is Git's per-user configuration file.\n"
@@ -10097,36 +10680,47 @@ msgstr ""
"#\tname = %s\n"
"#\temail = %s\n"
-#: builtin/config.c:606
+#: builtin/config.c:610
msgid "only one config file at a time"
msgstr "само по един конфигурационен файл"
-#: builtin/config.c:611
+#: builtin/config.c:615
msgid "--local can only be used inside a git repository"
msgstr "„--local“ може да се използва само в хранилище"
-#: builtin/config.c:614
+#: builtin/config.c:618
msgid "--blob can only be used inside a git repository"
msgstr "„--blob“ може да се използва само в хранилище"
-#: builtin/config.c:633
+#: builtin/config.c:637
msgid "$HOME not set"
msgstr "променливата „HOME“ не е зададена"
-#: builtin/config.c:670
+#: builtin/config.c:657
+msgid ""
+"--worktree cannot be used with multiple working trees unless the config\n"
+"extension worktreeConfig is enabled. Please read \"CONFIGURATION FILE\"\n"
+"section in \"git help worktree\" for details"
+msgstr ""
+"опцията „--worktre“ не приема множество работни дървета, преди\n"
+"включването на разширението в настройките „worktreeConfig“. За\n"
+"повече информация вижте раздела „CONFIGURATION FILE“ в\n"
+"„git help worktree“"
+
+#: builtin/config.c:687
msgid "--get-color and variable type are incoherent"
msgstr "опцията „--get-color“ не съответства на вида на променливата"
-#: builtin/config.c:675
+#: builtin/config.c:692
msgid "only one action at a time"
msgstr "само по едно действие"
-#: builtin/config.c:688
+#: builtin/config.c:705
msgid "--name-only is only applicable to --list or --get-regexp"
msgstr ""
"опцията „--name-only“ е приложима само към опциите „--list“ и „--get-regexp“"
-#: builtin/config.c:694
+#: builtin/config.c:711
msgid ""
"--show-origin is only applicable to --get, --get-all, --get-regexp, and --"
"list"
@@ -10134,33 +10728,33 @@ msgstr ""
"опцията „--show-origin“ е приложима само към опциите „--get“, „--get-all“, "
"„--get-regexp“ и „--list“"
-#: builtin/config.c:700
+#: builtin/config.c:717
msgid "--default is only applicable to --get"
msgstr "опцията „--default“ е приложима само към опцията „--get“"
-#: builtin/config.c:713
+#: builtin/config.c:730
#, c-format
msgid "unable to read config file '%s'"
msgstr "конфигурационният файл „%s“ не може да бъде прочетен"
-#: builtin/config.c:716
+#: builtin/config.c:733
msgid "error processing config file(s)"
msgstr "грешка при обработката на конфигурационен файл"
-#: builtin/config.c:726
+#: builtin/config.c:743
msgid "editing stdin is not supported"
msgstr "не се поддържа редактиране на стандартния вход"
-#: builtin/config.c:728
+#: builtin/config.c:745
msgid "editing blobs is not supported"
msgstr "не се поддържа редактиране на обекти-BLOB"
-#: builtin/config.c:742
+#: builtin/config.c:759
#, c-format
msgid "cannot create configuration file %s"
msgstr "конфигурационният файл „%s“ не може да бъде създаден"
-#: builtin/config.c:755
+#: builtin/config.c:772
#, c-format
msgid ""
"cannot overwrite multiple values with a single value\n"
@@ -10170,7 +10764,7 @@ msgstr ""
"За да промените „%s“, ползвайте регулярен израз или опциите „--add“ и „--"
"replace-all“."
-#: builtin/config.c:829 builtin/config.c:840
+#: builtin/config.c:846 builtin/config.c:857
#, c-format
msgid "no such section: %s"
msgstr "такъв раззел няма: %s"
@@ -10270,7 +10864,7 @@ msgstr ""
msgid "describe %s\n"
msgstr "описание на „%s“\n"
-#: builtin/describe.c:512 builtin/log.c:508
+#: builtin/describe.c:512 builtin/log.c:513
#, c-format
msgid "Not a valid object name %s"
msgstr "Неправилно име на обект „%s“"
@@ -10524,7 +11118,7 @@ msgstr "Използване на маркер за завършване на п
msgid "Skip output of blob data"
msgstr "Без извеждане на съдържанието на обектите-BLOB"
-#: builtin/fast-export.c:1024
+#: builtin/fast-export.c:1024 builtin/log.c:1588
msgid "refspec"
msgstr "УКАЗАТЕЛ_НА_ВЕРСИЯ"
@@ -10536,97 +11130,97 @@ msgstr "Прилагане на УКАЗАТЕЛя_НА_ВЕРСИЯ към из
msgid "anonymize output"
msgstr "анонимизиране на извежданата информация"
-#: builtin/fetch.c:27
+#: builtin/fetch.c:28
msgid "git fetch [<options>] [<repository> [<refspec>...]]"
msgstr "git fetch [ОПЦИЯ…] [ХРАНИЛИЩЕ [УКАЗАТЕЛ…]]"
-#: builtin/fetch.c:28
+#: builtin/fetch.c:29
msgid "git fetch [<options>] <group>"
msgstr "git fetch [ОПЦИЯ…] ГРУПА"
-#: builtin/fetch.c:29
+#: builtin/fetch.c:30
msgid "git fetch --multiple [<options>] [(<repository> | <group>)...]"
msgstr "git fetch --multiple [ОПЦИЯ…] [(ХРАНИЛИЩЕ | ГРУПА)…]"
-#: builtin/fetch.c:30
+#: builtin/fetch.c:31
msgid "git fetch --all [<options>]"
msgstr "git fetch --all [ОПЦИЯ…]"
-#: builtin/fetch.c:112 builtin/pull.c:193
+#: builtin/fetch.c:115 builtin/pull.c:194
msgid "fetch from all remotes"
msgstr "доставяне от всички отдалечени хранилища"
-#: builtin/fetch.c:114 builtin/pull.c:196
+#: builtin/fetch.c:117 builtin/pull.c:197
msgid "append to .git/FETCH_HEAD instead of overwriting"
msgstr "добавяне към „.git/FETCH_HEAD“ вместо замяна"
-#: builtin/fetch.c:116 builtin/pull.c:199
+#: builtin/fetch.c:119 builtin/pull.c:200
msgid "path to upload pack on remote end"
msgstr "отдалечен път, където да се качи пакетът"
-#: builtin/fetch.c:117 builtin/pull.c:201
-msgid "force overwrite of local branch"
-msgstr "принудително презаписване на локалния клон"
+#: builtin/fetch.c:120
+msgid "force overwrite of local reference"
+msgstr "принудително презаписване на локален указател"
-#: builtin/fetch.c:119
+#: builtin/fetch.c:122
msgid "fetch from multiple remotes"
msgstr "доставяне от множество отдалечени хранилища"
-#: builtin/fetch.c:121 builtin/pull.c:203
+#: builtin/fetch.c:124 builtin/pull.c:204
msgid "fetch all tags and associated objects"
msgstr "доставяне на всички етикети и принадлежащи обекти"
-#: builtin/fetch.c:123
+#: builtin/fetch.c:126
msgid "do not fetch all tags (--no-tags)"
msgstr "без доставянето на всички етикети „--no-tags“"
-#: builtin/fetch.c:125
+#: builtin/fetch.c:128
msgid "number of submodules fetched in parallel"
msgstr "брой подмодули доставени паралелно"
-#: builtin/fetch.c:127 builtin/pull.c:206
+#: builtin/fetch.c:130 builtin/pull.c:207
msgid "prune remote-tracking branches no longer on remote"
msgstr "окастряне на клоните следящи вече несъществуващи отдалечени клони"
-#: builtin/fetch.c:129
+#: builtin/fetch.c:132
msgid "prune local tags no longer on remote and clobber changed tags"
msgstr ""
"окастряне на локалните етикети, които вече не съществуват в отдалеченото "
"хранилище и махане на променените"
-#: builtin/fetch.c:130 builtin/fetch.c:153 builtin/pull.c:131
+#: builtin/fetch.c:133 builtin/fetch.c:156 builtin/pull.c:132
msgid "on-demand"
msgstr "ПРИ НУЖДА"
-#: builtin/fetch.c:131
+#: builtin/fetch.c:134
msgid "control recursive fetching of submodules"
msgstr "управление на рекурсивното доставяне на подмодулите"
-#: builtin/fetch.c:135 builtin/pull.c:214
+#: builtin/fetch.c:138 builtin/pull.c:215
msgid "keep downloaded pack"
msgstr "запазване на изтеглените пакети с обекти"
-#: builtin/fetch.c:137
+#: builtin/fetch.c:140
msgid "allow updating of HEAD ref"
msgstr "позволяване на обновяването на указателя „HEAD“"
-#: builtin/fetch.c:140 builtin/fetch.c:146 builtin/pull.c:217
+#: builtin/fetch.c:143 builtin/fetch.c:149 builtin/pull.c:218
msgid "deepen history of shallow clone"
msgstr "задълбочаване на историята на плитко хранилище"
-#: builtin/fetch.c:142
+#: builtin/fetch.c:145
msgid "deepen history of shallow repository based on time"
msgstr "задълбочаване на историята на плитко хранилище до определено време"
-#: builtin/fetch.c:148 builtin/pull.c:220
+#: builtin/fetch.c:151 builtin/pull.c:221
msgid "convert to a complete repository"
msgstr "превръщане в пълно хранилище"
-#: builtin/fetch.c:151
+#: builtin/fetch.c:154
msgid "prepend this to submodule path output"
msgstr "добавяне на това пред пътя на подмодула"
-#: builtin/fetch.c:154
+#: builtin/fetch.c:157
msgid ""
"default for recursive fetching of submodules (lower priority than config "
"files)"
@@ -10634,105 +11228,109 @@ msgstr ""
"стандартно рекурсивно изтегляне на подмодулите (файловете с настройки са с "
"приоритет)"
-#: builtin/fetch.c:158 builtin/pull.c:223
+#: builtin/fetch.c:161 builtin/pull.c:224
msgid "accept refs that update .git/shallow"
msgstr "приемане на указатели, които обновяват „.git/shallow“"
-#: builtin/fetch.c:159 builtin/pull.c:225
+#: builtin/fetch.c:162 builtin/pull.c:226
msgid "refmap"
msgstr "КАРТА_С_УКАЗАТЕЛИ"
-#: builtin/fetch.c:160 builtin/pull.c:226
+#: builtin/fetch.c:163 builtin/pull.c:227
msgid "specify fetch refmap"
msgstr "указване на КАРТАта_С_УКАЗАТЕЛИ за доставяне"
-#: builtin/fetch.c:161 builtin/ls-remote.c:77 builtin/push.c:582
+#: builtin/fetch.c:164 builtin/ls-remote.c:77 builtin/push.c:582
#: builtin/send-pack.c:172
msgid "server-specific"
msgstr "специфични за сървъра"
-#: builtin/fetch.c:161 builtin/ls-remote.c:77 builtin/push.c:582
+#: builtin/fetch.c:164 builtin/ls-remote.c:77 builtin/push.c:582
#: builtin/send-pack.c:173
msgid "option to transmit"
msgstr "опция за пренос"
-#: builtin/fetch.c:167
+#: builtin/fetch.c:170
msgid "report that we have only objects reachable from this object"
msgstr "докладване, че всички обекти могат са достижими при започване от този"
-#: builtin/fetch.c:418
+#: builtin/fetch.c:470
msgid "Couldn't find remote ref HEAD"
msgstr "Указателят „HEAD“ в отдалеченото хранилище не може да бъде открит"
-#: builtin/fetch.c:552
+#: builtin/fetch.c:609
#, c-format
msgid "configuration fetch.output contains invalid value %s"
msgstr "настройката „fetch.output“ е с неправилна стойност „%s“"
-#: builtin/fetch.c:645
+#: builtin/fetch.c:702
#, c-format
msgid "object %s not found"
msgstr "обектът „%s“ липсва"
-#: builtin/fetch.c:649
+#: builtin/fetch.c:706
msgid "[up to date]"
msgstr "[актуализиран]"
-#: builtin/fetch.c:662 builtin/fetch.c:744
+#: builtin/fetch.c:719 builtin/fetch.c:735 builtin/fetch.c:807
msgid "[rejected]"
msgstr "[отхвърлен]"
-#: builtin/fetch.c:663
+#: builtin/fetch.c:720
msgid "can't fetch in current branch"
msgstr "в текущия клон не може да се доставя"
-#: builtin/fetch.c:672
+#: builtin/fetch.c:730
msgid "[tag update]"
msgstr "[обновяване на етикетите]"
-#: builtin/fetch.c:673 builtin/fetch.c:708 builtin/fetch.c:724
-#: builtin/fetch.c:739
+#: builtin/fetch.c:731 builtin/fetch.c:771 builtin/fetch.c:787
+#: builtin/fetch.c:802
msgid "unable to update local ref"
msgstr "локален указател не може да бъде обновен"
-#: builtin/fetch.c:694
+#: builtin/fetch.c:735
+msgid "would clobber existing tag"
+msgstr "съществуващ етикет ще бъде презаписан"
+
+#: builtin/fetch.c:757
msgid "[new tag]"
msgstr "[нов етикет]"
-#: builtin/fetch.c:697
+#: builtin/fetch.c:760
msgid "[new branch]"
msgstr "[нов клон]"
-#: builtin/fetch.c:700
+#: builtin/fetch.c:763
msgid "[new ref]"
msgstr "[нов указател]"
-#: builtin/fetch.c:739
+#: builtin/fetch.c:802
msgid "forced update"
msgstr "принудително обновяване"
-#: builtin/fetch.c:744
+#: builtin/fetch.c:807
msgid "non-fast-forward"
msgstr "същинско сливане"
-#: builtin/fetch.c:790
+#: builtin/fetch.c:853
#, c-format
msgid "%s did not send all necessary objects\n"
msgstr "хранилището „%s“ не изпрати всички необходими обекти\n"
-#: builtin/fetch.c:811
+#: builtin/fetch.c:874
#, c-format
msgid "reject %s because shallow roots are not allowed to be updated"
msgstr ""
"отхвърляне на върха „%s“, защото плитките хранилища не могат да бъдат "
"обновявани"
-#: builtin/fetch.c:900 builtin/fetch.c:1011
+#: builtin/fetch.c:963 builtin/fetch.c:1085
#, c-format
msgid "From %.*s\n"
msgstr "От %.*s\n"
-#: builtin/fetch.c:911
+#: builtin/fetch.c:974
#, c-format
msgid ""
"some local refs could not be updated; try running\n"
@@ -10742,57 +11340,57 @@ msgstr ""
"„git remote prune %s“, за да премахнете остарелите клони, които\n"
"предизвикват конфликта"
-#: builtin/fetch.c:981
+#: builtin/fetch.c:1055
#, c-format
msgid " (%s will become dangling)"
msgstr " (обектът „%s“ ще се окаже извън клон)"
-#: builtin/fetch.c:982
+#: builtin/fetch.c:1056
#, c-format
msgid " (%s has become dangling)"
msgstr " (обектът „%s“ вече е извън клон)"
-#: builtin/fetch.c:1014
+#: builtin/fetch.c:1088
msgid "[deleted]"
msgstr "[изтрит]"
-#: builtin/fetch.c:1015 builtin/remote.c:1035
+#: builtin/fetch.c:1089 builtin/remote.c:1036
msgid "(none)"
msgstr "(нищо)"
-#: builtin/fetch.c:1038
+#: builtin/fetch.c:1112
#, c-format
msgid "Refusing to fetch into current branch %s of non-bare repository"
msgstr "Не може да доставите в текущия клон „%s“ на хранилище, което не е голо"
-#: builtin/fetch.c:1057
+#: builtin/fetch.c:1131
#, c-format
msgid "Option \"%s\" value \"%s\" is not valid for %s"
msgstr "Стойността „%2$s“ за опцията „%1$s“ не е съвместима с „%3$s“"
-#: builtin/fetch.c:1060
+#: builtin/fetch.c:1134
#, c-format
msgid "Option \"%s\" is ignored for %s\n"
msgstr "Опцията „%s“ се прескача при „%s“\n"
-#: builtin/fetch.c:1339
+#: builtin/fetch.c:1433
#, c-format
msgid "Fetching %s\n"
msgstr "Доставяне на „%s“\n"
-#: builtin/fetch.c:1341 builtin/remote.c:99
+#: builtin/fetch.c:1435 builtin/remote.c:100
#, c-format
msgid "Could not fetch %s"
msgstr "„%s“ не може да се достави"
-#: builtin/fetch.c:1387 builtin/fetch.c:1555
+#: builtin/fetch.c:1481 builtin/fetch.c:1649
msgid ""
"--filter can only be used with the remote configured in core.partialClone"
msgstr ""
"опцията „--filter“ може да се ползва само с отдалеченото хранилище указано в "
"настройката „core.partialClone“"
-#: builtin/fetch.c:1410
+#: builtin/fetch.c:1504
msgid ""
"No remote repository specified. Please, specify either a URL or a\n"
"remote name from which new revisions should be fetched."
@@ -10800,69 +11398,69 @@ msgstr ""
"Не сте указали отдалечено хранилище. Задайте или адрес, или име\n"
"на отдалечено хранилище, откъдето да се доставят новите версии."
-#: builtin/fetch.c:1447
+#: builtin/fetch.c:1541
msgid "You need to specify a tag name."
msgstr "Трябва да укажете име на етикет."
-#: builtin/fetch.c:1496
+#: builtin/fetch.c:1590
msgid "Negative depth in --deepen is not supported"
msgstr "Отрицателна дълбочина като аргумент на „--deepen“ не се поддържа"
-#: builtin/fetch.c:1498
+#: builtin/fetch.c:1592
msgid "--deepen and --depth are mutually exclusive"
msgstr "Опциите „--deepen“ и „--depth“ са несъвместими една с друга"
-#: builtin/fetch.c:1503
+#: builtin/fetch.c:1597
msgid "--depth and --unshallow cannot be used together"
msgstr "опциите „--depth“ и „--unshallow“ са несъвместими"
-#: builtin/fetch.c:1505
+#: builtin/fetch.c:1599
msgid "--unshallow on a complete repository does not make sense"
msgstr "не можете да използвате опцията „--unshallow“ върху пълно хранилище"
-#: builtin/fetch.c:1521
+#: builtin/fetch.c:1615
msgid "fetch --all does not take a repository argument"
msgstr "към „git fetch --all“ не можете да добавите аргумент — хранилище"
-#: builtin/fetch.c:1523
+#: builtin/fetch.c:1617
msgid "fetch --all does not make sense with refspecs"
msgstr ""
"към „git fetch --all“ не можете да добавите аргумент — указател на версия"
-#: builtin/fetch.c:1532
+#: builtin/fetch.c:1626
#, c-format
msgid "No such remote or remote group: %s"
msgstr "Няма нито отдалечено хранилище, нито група от хранилища на име „%s“"
-#: builtin/fetch.c:1539
+#: builtin/fetch.c:1633
msgid "Fetching a group and specifying refspecs does not make sense"
msgstr "Указването на група и указването на версия са несъвместими"
-#: builtin/fmt-merge-msg.c:17
+#: builtin/fmt-merge-msg.c:18
msgid ""
"git fmt-merge-msg [-m <message>] [--log[=<n>] | --no-log] [--file <file>]"
msgstr ""
"git fmt-merge-msg [-m СЪОБЩЕНИЕ] [--log[=БРОЙ] | --no-log] [--file ФАЙЛ]"
-#: builtin/fmt-merge-msg.c:671
+#: builtin/fmt-merge-msg.c:672
msgid "populate log with at most <n> entries from shortlog"
msgstr ""
"вмъкване на журнал състоящ се от не повече от БРОЙ записа от съкратения "
"журнал"
-#: builtin/fmt-merge-msg.c:674
+#: builtin/fmt-merge-msg.c:675
msgid "alias for --log (deprecated)"
-msgstr "синоним на „--log“ (остаряло)"
+msgstr "псевдоним на „--log“ (остаряло)"
-#: builtin/fmt-merge-msg.c:677
+#: builtin/fmt-merge-msg.c:678
msgid "text"
msgstr "ТЕКСТ"
-#: builtin/fmt-merge-msg.c:678
+#: builtin/fmt-merge-msg.c:679
msgid "use <text> as start of message"
msgstr "за начало на съобщението да се ползва ТЕКСТ"
-#: builtin/fmt-merge-msg.c:679
+#: builtin/fmt-merge-msg.c:680
msgid "file to read from"
msgstr "файл, от който да се чете"
@@ -10902,7 +11500,7 @@ msgstr "цитиране подходящо за tcl"
msgid "show only <n> matched refs"
msgstr "извеждане само на този БРОЙ напаснати указатели"
-#: builtin/for-each-ref.c:39 builtin/tag.c:422
+#: builtin/for-each-ref.c:39 builtin/tag.c:424
msgid "respect format colors"
msgstr "спазване на цветовете на форма̀та"
@@ -10926,64 +11524,64 @@ msgstr "извеждане само на указателите, които съ
msgid "print only refs which don't contain the commit"
msgstr "извеждане само на указателите, които не съдържат това ПОДАВАНЕ"
-#: builtin/fsck.c:574
+#: builtin/fsck.c:598
msgid "Checking object directories"
msgstr "Проверка на директориите с обекти"
-#: builtin/fsck.c:666
+#: builtin/fsck.c:693
msgid "git fsck [<options>] [<object>...]"
msgstr "git fsck [ОПЦИЯ…] [ОБЕКТ…]"
-#: builtin/fsck.c:672
+#: builtin/fsck.c:699
msgid "show unreachable objects"
msgstr "показване на недостижимите обекти"
-#: builtin/fsck.c:673
+#: builtin/fsck.c:700
msgid "show dangling objects"
msgstr "показване на обектите извън клоните"
-#: builtin/fsck.c:674
+#: builtin/fsck.c:701
msgid "report tags"
msgstr "показване на етикетите"
-#: builtin/fsck.c:675
+#: builtin/fsck.c:702
msgid "report root nodes"
msgstr "показване на кореновите възли"
-#: builtin/fsck.c:676
+#: builtin/fsck.c:703
msgid "make index objects head nodes"
msgstr "задаване на обект