From: Junio C Hamano Date: Sun, 4 Jun 2017 01:20:58 +0000 (+0900) Subject: Merge branch 'bw/submodule-with-bs-path' into maint X-Git-Tag: v2.13.1~37 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/c95f0d2f9d616132db863992959b05545f8578cc?hp=7f1b225153c9e75b805a262feb6796e3bf23dc3d Merge branch 'bw/submodule-with-bs-path' into maint A hotfix to a topic that is already in v2.13. * bw/submodule-with-bs-path: t7400: add !CYGWIN prerequisite to 'add with \\ in path' --- diff --git a/.travis.yml b/.travis.yml index c757a111ce..6dd73d1f02 100644 --- a/.travis.yml +++ b/.travis.yml @@ -39,6 +39,11 @@ env: matrix: include: + - env: GETTEXT_POISON=YesPlease + os: linux + compiler: + addons: + before_install: - env: Windows os: linux compiler: @@ -61,6 +66,7 @@ matrix: - > docker run --interactive + --env DEVELOPER --env DEFAULT_TEST_TARGET --env GIT_PROVE_OPTS --env GIT_TEST_OPTS @@ -71,6 +77,18 @@ matrix: # Use the following command to debug the docker build locally: # $ docker run -itv "${PWD}:/usr/src/git" --entrypoint /bin/bash daald/ubuntu32:xenial # root@container:/# /usr/src/git/ci/run-linux32-build.sh + - env: Static Analysis + os: linux + compiler: + addons: + apt: + packages: + - coccinelle + before_install: + script: + # "before_script" that builds Git is inherited from base job + - make coccicheck + after_failure: - env: Documentation os: linux compiler: clang @@ -121,12 +139,14 @@ before_install: p4 -V | grep Rev.; echo "$(tput setaf 6)Git-LFS Version$(tput sgr0)"; git-lfs version; - mkdir -p $HOME/travis-cache; - ln -s $HOME/travis-cache/.prove t/.prove; before_script: make --jobs=2 -script: make --quiet test +script: + - > + mkdir -p $HOME/travis-cache; + ln -s $HOME/travis-cache/.prove t/.prove; + make --quiet test; after_failure: - > diff --git a/Documentation/CodingGuidelines b/Documentation/CodingGuidelines index a4191aa388..2248cf7324 100644 --- a/Documentation/CodingGuidelines +++ b/Documentation/CodingGuidelines @@ -24,7 +24,7 @@ code. For Git in general, a few rough rules are: "Once it _is_ in the tree, it's not really worth the patch noise to go and fix it up." - Cf. http://article.gmane.org/gmane.linux.kernel/943020 + Cf. http://lkml.iu.edu/hypermail/linux/kernel/1001.3/01069.html Make your code readable and sensible, and don't try to be clever. diff --git a/Documentation/RelNotes/2.10.3.txt b/Documentation/RelNotes/2.10.3.txt index 277a2a18a7..ad6a01bf83 100644 --- a/Documentation/RelNotes/2.10.3.txt +++ b/Documentation/RelNotes/2.10.3.txt @@ -45,4 +45,11 @@ Fixes since v2.10.2 * Improve the rule to convert "unsigned char [20]" into "struct object_id *" in contrib/coccinelle/ + * "git-shell" rejects a request to serve a repository whose name + begins with a dash, which makes it no longer possible to get it + confused into spawning service programs like "git-upload-pack" with + an option like "--help", which in turn would spawn an interactive + pager, instead of working with the repository user asked to access + (i.e. the one whose name is "--help"). + Also contains minor documentation updates and code clean-ups. diff --git a/Documentation/RelNotes/2.11.2.txt b/Documentation/RelNotes/2.11.2.txt new file mode 100644 index 0000000000..7428851168 --- /dev/null +++ b/Documentation/RelNotes/2.11.2.txt @@ -0,0 +1,12 @@ +Git v2.11.2 Release Notes +========================= + +Fixes since v2.11.1 +------------------- + + * "git-shell" rejects a request to serve a repository whose name + begins with a dash, which makes it no longer possible to get it + confused into spawning service programs like "git-upload-pack" with + an option like "--help", which in turn would spawn an interactive + pager, instead of working with the repository user asked to access + (i.e. the one whose name is "--help"). diff --git a/Documentation/RelNotes/2.12.3.txt b/Documentation/RelNotes/2.12.3.txt index 73ce7daa5c..ebca846d5d 100644 --- a/Documentation/RelNotes/2.12.3.txt +++ b/Documentation/RelNotes/2.12.3.txt @@ -54,4 +54,11 @@ Fixes since v2.12.2 turn revealed incorrect expectations the tests make. These tests have been updated. + * "git-shell" rejects a request to serve a repository whose name + begins with a dash, which makes it no longer possible to get it + confused into spawning service programs like "git-upload-pack" with + an option like "--help", which in turn would spawn an interactive + pager, instead of working with the repository user asked to access + (i.e. the one whose name is "--help"). + Also contains various documentation updates and code clean-ups. diff --git a/Documentation/RelNotes/2.13.0.txt b/Documentation/RelNotes/2.13.0.txt index 3c92403c6b..aa99d4b3ce 100644 --- a/Documentation/RelNotes/2.13.0.txt +++ b/Documentation/RelNotes/2.13.0.txt @@ -176,6 +176,31 @@ UI, Workflows & Features * The default behaviour of "git log" in an interactive session has been changed to enable "--decorate". + * The output from "git status --short" has been extended to show + various kinds of dirtyness in submodules differently; instead of to + "M" for modified, 'm' and '?' can be shown to signal changes only + to the working tree of the submodule but not the commit that is + checked out. + + * Allow the http.postbuffer configuration variable to be set to a + size that can be expressed in size_t, which can be larger than + ulong on some platforms. + + * "git rebase" learns "--signoff" option. + + * The completion script (in contrib/) learned to complete "git push + --delete b" to complete branch name to be deleted. + + * "git worktree add --lock" allows to lock a worktree immediately + after it's created. This helps prevent a race between "git worktree + add; git worktree lock" and "git worktree prune". + + * Completion for "git checkout " that auto-creates the branch + out of a remote tracking branch can now be disabled, as this + completion often gets in the way when completing to checkout an + existing local branch that happens to share the same prefix with + bunch of remote tracking branches. + Performance, Internal Implementation, Development Support etc. @@ -236,8 +261,6 @@ Performance, Internal Implementation, Development Support etc. older one and the newer one interoperate happily has now become possible. - * "uchar [40]" to "struct object_id" conversion continues. - * "git tag --contains" used to (ab)use the object bits to keep track of the state of object reachability without clearing them after use; this has been cleaned up and made to use the newer commit-slab @@ -272,6 +295,44 @@ Performance, Internal Implementation, Development Support etc. * Define a new task in .travis.yml that triggers a test session on Windows run elsewhere. + * Conversion from uchar[20] to struct object_id continues. + + * The "submodule" specific field in the ref_store structure is + replaced with a more generic "gitdir" that can later be used also + when dealing with ref_store that represents the set of refs visible + from the other worktrees. + + * The string-list API used a custom reallocation strategy that was + very inefficient, instead of using the usual ALLOC_GROW() macro, + which has been fixed. + (merge 950a234cbd jh/string-list-micro-optim later to maint). + + * In a 2- and 3-way merge of trees, more than one source trees often + end up sharing an identical subtree; optimize by not reading the + same tree multiple times in such a case. + (merge d12a8cf0af jh/unpack-trees-micro-optim later to maint). + + * The index file has a trailing SHA-1 checksum to detect file + corruption, and historically we checked it every time the index + file is used. Omit the validation during normal use, and instead + verify only in "git fsck". + + * Having a git command on the upstream side of a pipe in a test + script will hide the exit status from the command, which may cause + us to fail to notice a breakage; rewrite tests in a script to avoid + this issue. + + * Travis CI learns to run coccicheck. + + * "git checkout" that handles a lot of paths has been optimized by + reducing the number of unnecessary checks of paths in the + has_dir_name() function. + + * The internals of the refs API around the cached refs has been + streamlined. + + * Output from perf tests have been updated to align their titles. + Also contains various documentation updates and code clean-ups. @@ -449,6 +510,82 @@ notes for details). certificate; this has been fixed. (merge f2214dede9 bc/push-cert-receive-fix later to maint). + * Update error handling for codepath that deals with corrupt loose + objects. + (merge 51054177b3 jk/loose-object-info-report-error later to maint). + + * "git diff --submodule=diff" learned to work better in a project + with a submodule that in turn has its own submodules. + (merge 17b254cda6 sb/show-diff-for-submodule-in-diff-fix later to maint). + + * Update the build dependency so that an update to /usr/bin/perl + etc. result in recomputation of perl.mak file. + (merge c59c4939c2 ab/regen-perl-mak-with-different-perl later to maint). + + * "git push --recurse-submodules --push-option=" learned to + propagate the push option recursively down to pushes in submodules. + + * If a patch e-mail had its first paragraph after an in-body header + indented (even after a blank line after the in-body header line), + the indented line was mistook as a continuation of the in-body + header. This has been fixed. + (merge fd1062e52e lt/mailinfo-in-body-header-continuation later to maint). + + * Clean up fallouts from recent tightening of the set-up sequence, + where Git barfs when repository information is accessed without + first ensuring that it was started in a repository. + (merge bccb22cbb1 jk/no-looking-at-dotgit-outside-repo later to maint). + + * "git p4" used "name-rev HEAD" when it wants to learn what branch is + checked out; it should use "symbolic-ref HEAD". + (merge eff451101d ld/p4-current-branch-fix later to maint). + + * "http.proxy" set to an empty string is used to disable the usage of + proxy. We broke this early last year. + (merge ae51d91105 sr/http-proxy-configuration-fix later to maint). + + * $GIT_DIR may in some cases be normalized with all symlinks resolved + while "gitdir" path expansion in the pattern does not receive the + same treatment, leading to incorrect mismatch. This has been fixed. + + * "git submodule" script does not work well with strange pathnames. + Protect it from a path with slashes in them, at least. + + * "git fetch-pack" was not prepared to accept ERR packet that the + upload-pack can send with a human-readable error message. It + showed the packet contents with ERR prefix, so there was no data + loss, but it was redundant to say "ERR" in an error message. + (merge 8e2c7bef03 jt/fetch-pack-error-reporting later to maint). + + * "ls-files --recurse-submodules" did not quite work well in a + project with nested submodules. + + * gethostname(2) may not NUL terminate the buffer if hostname does + not fit; unfortunately there is no easy way to see if our buffer + was too small, but at least this will make sure we will not end up + using garbage past the end of the buffer. + (merge 5781a9a270 dt/xgethostname-nul-termination later to maint). + + * A recent update broke "git add -p ../foo" from a subdirectory. + + * While handy, "git_path()" is a dangerous function to use as a + callsite that uses it safely one day can be broken by changes + to other code that calls it. Reduction of its use continues. + (merge 16d2676c9e jk/war-on-git-path later to maint). + + * The split-index code configuration code used an unsafe git_path() + function without copying its result out. + + * Many stale HTTP(s) links have been updated in our documentation. + (merge 613416f0be jk/update-links-in-docs later to maint). + + * "git-shell" rejects a request to serve a repository whose name + begins with a dash, which makes it no longer possible to get it + confused into spawning service programs like "git-upload-pack" with + an option like "--help", which in turn would spawn an interactive + pager, instead of working with the repository user asked to access + (i.e. the one whose name is "--help"). + * Other minor doc, test and build updates and code cleanups. (merge df2a6e38b7 jk/pager-in-use later to maint). (merge 75ec4a6cb0 ab/branch-list-doc later to maint). @@ -458,3 +595,24 @@ notes for details). (merge 48a96972fd ab/doc-submitting later to maint). (merge f5c2bc2b96 jk/make-coccicheck-detect-errors later to maint). (merge c105f563d1 cc/untracked later to maint). + (merge 8668976b53 jc/unused-symbols later to maint). + (merge fba275dc93 jc/bs-t-is-not-a-tab-for-sed later to maint). + (merge be6ed145de mm/ls-files-s-doc later to maint). + (merge 60b091c679 qp/bisect-docfix later to maint). + (merge 47242cd103 ah/diff-files-ours-theirs-doc later to maint). + (merge 35ad44cbd8 sb/submodule-rm-absorb later to maint). + (merge 0301f1fd92 va/i18n-perl-scripts later to maint). + (merge 733e064d98 vn/revision-shorthand-for-side-branch-log later to maint). + (merge 85999743e7 tb/doc-eol-normalization later to maint). + (merge 0747fb49fd jk/loose-object-fsck later to maint). + (merge d8f4481c4f jk/quarantine-received-objects later to maint). + (merge 7ba1ceef95 xy/format-patch-base later to maint). + (merge fa1912c89a rs/misc-cppcheck-fixes later to maint). + (merge f17d642d3b ab/push-cas-doc-n-test later to maint). + (merge 61e282425a ss/gitmodules-ignore-doc later to maint). + (merge 8d3047cd5b ss/submodule-shallow-doc later to maint). + (merge 1f9e18b772 jk/prio-queue-avoid-swap-with-self later to maint). + (merge 627fde1025 jk/submodule-init-segv-fix later to maint). + (merge d395745d81 rg/doc-pull-typofix later to maint). + (merge 01e60a9a22 rg/doc-submittingpatches-wordfix later to maint). + (merge 501d3cd7b8 sr/hooks-cwd-doc later to maint). diff --git a/Documentation/RelNotes/2.4.12.txt b/Documentation/RelNotes/2.4.12.txt new file mode 100644 index 0000000000..7d15f94725 --- /dev/null +++ b/Documentation/RelNotes/2.4.12.txt @@ -0,0 +1,12 @@ +Git v2.4.12 Release Notes +========================= + +Fixes since v2.4.11 +------------------- + + * "git-shell" rejects a request to serve a repository whose name + begins with a dash, which makes it no longer possible to get it + confused into spawning service programs like "git-upload-pack" with + an option like "--help", which in turn would spawn an interactive + pager, instead of working with the repository user asked to access + (i.e. the one whose name is "--help"). diff --git a/Documentation/RelNotes/2.5.6.txt b/Documentation/RelNotes/2.5.6.txt new file mode 100644 index 0000000000..9cd025bb1c --- /dev/null +++ b/Documentation/RelNotes/2.5.6.txt @@ -0,0 +1,12 @@ +Git v2.5.6 Release Notes +======================== + +Fixes since v2.5.5 +------------------ + + * "git-shell" rejects a request to serve a repository whose name + begins with a dash, which makes it no longer possible to get it + confused into spawning service programs like "git-upload-pack" with + an option like "--help", which in turn would spawn an interactive + pager, instead of working with the repository user asked to access + (i.e. the one whose name is "--help"). diff --git a/Documentation/RelNotes/2.6.7.txt b/Documentation/RelNotes/2.6.7.txt new file mode 100644 index 0000000000..1335de49a6 --- /dev/null +++ b/Documentation/RelNotes/2.6.7.txt @@ -0,0 +1,12 @@ +Git v2.6.7 Release Notes +======================== + +Fixes since v2.6.6 +------------------ + + * "git-shell" rejects a request to serve a repository whose name + begins with a dash, which makes it no longer possible to get it + confused into spawning service programs like "git-upload-pack" with + an option like "--help", which in turn would spawn an interactive + pager, instead of working with the repository user asked to access + (i.e. the one whose name is "--help"). diff --git a/Documentation/RelNotes/2.7.5.txt b/Documentation/RelNotes/2.7.5.txt new file mode 100644 index 0000000000..83559ce3b2 --- /dev/null +++ b/Documentation/RelNotes/2.7.5.txt @@ -0,0 +1,14 @@ +Git v2.7.5 Release Notes +======================== + +Fixes since v2.7.4 +------------------ + + * "git-shell" rejects a request to serve a repository whose name + begins with a dash, which makes it no longer possible to get it + confused into spawning service programs like "git-upload-pack" with + an option like "--help", which in turn would spawn an interactive + pager, instead of working with the repository user asked to access + (i.e. the one whose name is "--help"). + +Also contains a few fixes backported from later development tracks. diff --git a/Documentation/RelNotes/2.8.5.txt b/Documentation/RelNotes/2.8.5.txt new file mode 100644 index 0000000000..7bd179fa12 --- /dev/null +++ b/Documentation/RelNotes/2.8.5.txt @@ -0,0 +1,12 @@ +Git v2.8.5 Release Notes +======================== + +Fixes since v2.8.4 +------------------ + + * "git-shell" rejects a request to serve a repository whose name + begins with a dash, which makes it no longer possible to get it + confused into spawning service programs like "git-upload-pack" with + an option like "--help", which in turn would spawn an interactive + pager, instead of working with the repository user asked to access + (i.e. the one whose name is "--help"). diff --git a/Documentation/RelNotes/2.9.4.txt b/Documentation/RelNotes/2.9.4.txt index 01e864278b..9768293831 100644 --- a/Documentation/RelNotes/2.9.4.txt +++ b/Documentation/RelNotes/2.9.4.txt @@ -80,4 +80,11 @@ Fixes since v2.9.3 the file descriptor still open. Open tempfile with O_CLOEXEC flag to avoid this (on Windows, this is mapped to O_NOINHERIT). + * "git-shell" rejects a request to serve a repository whose name + begins with a dash, which makes it no longer possible to get it + confused into spawning service programs like "git-upload-pack" with + an option like "--help", which in turn would spawn an interactive + pager, instead of working with the repository user asked to access + (i.e. the one whose name is "--help"). + Also contains minor documentation updates and code clean-ups. diff --git a/Documentation/SubmittingPatches b/Documentation/SubmittingPatches index bc8ad00473..558d465b65 100644 --- a/Documentation/SubmittingPatches +++ b/Documentation/SubmittingPatches @@ -51,7 +51,7 @@ If your description starts to get too long, that's a sign that you probably need to split up your commit to finer grained pieces. That being said, patches which plainly describe the things that help reviewers check the patch, and future maintainers understand -the code, are the most beautiful patches. Descriptions that summarise +the code, are the most beautiful patches. Descriptions that summarize the point in the subject well, and describe the motivation for the change, the approach taken by the change, and if relevant how this differs substantially from the prior version, are all good things @@ -87,7 +87,7 @@ patches separate from other documentation changes. Oh, another thing. We are picky about whitespaces. Make sure your changes do not trigger errors with the sample pre-commit hook shipped in templates/hooks--pre-commit. To help ensure this does not happen, -run git diff --check on your changes before you commit. +run "git diff --check" on your changes before you commit. (2) Describe your changes well. @@ -111,10 +111,10 @@ Improve...". The body should provide a meaningful commit message, which: - . explains the problem the change tries to solve, iow, what is wrong + . explains the problem the change tries to solve, i.e. what is wrong with the current code without the change. - . justifies the way the change solves the problem, iow, why the + . justifies the way the change solves the problem, i.e. why the result with the change is better. . alternate solutions considered but discarded, if any. @@ -122,7 +122,7 @@ The body should provide a meaningful commit message, which: Describe your changes in imperative mood, e.g. "make xyzzy do frotz" instead of "[This patch] makes xyzzy do frotz" or "[I] changed xyzzy to do frotz", as if you are giving orders to the codebase to change -its behaviour. Try to make sure your explanation can be understood +its behavior. Try to make sure your explanation can be understood without external resources. Instead of giving a URL to a mailing list archive, summarize the relevant points of the discussion. @@ -261,7 +261,7 @@ smaller project it is a good discipline to follow it. The sign-off is a simple line at the end of the explanation for the patch, which certifies that you wrote it or otherwise have the right to pass it on as a open-source patch. The rules are -pretty simple: if you can certify the below: +pretty simple: if you can certify the below D-C-O: Developer's Certificate of Origin 1.1 diff --git a/Documentation/git-archimport.txt b/Documentation/git-archimport.txt index 163b9f6f41..ea70653369 100644 --- a/Documentation/git-archimport.txt +++ b/Documentation/git-archimport.txt @@ -96,7 +96,7 @@ OPTIONS pruned. -a:: - Attempt to auto-register archives at http://mirrors.sourcecontrol.net + Attempt to auto-register archives at `http://mirrors.sourcecontrol.net` This is particularly useful with the -D option. -t :: diff --git a/Documentation/git-bisect-lk2009.txt b/Documentation/git-bisect-lk2009.txt index e015f5b3cc..78479b003e 100644 --- a/Documentation/git-bisect-lk2009.txt +++ b/Documentation/git-bisect-lk2009.txt @@ -1347,12 +1347,12 @@ author to given a talk and for publishing this paper. References ---------- -- [[[1]]] http://www.nist.gov/public_affairs/releases/n02-10.htm['Software Errors Cost U.S. Economy $59.5 Billion Annually'. Nist News Release.] -- [[[2]]] http://java.sun.com/docs/codeconv/html/CodeConventions.doc.html#16712['Code Conventions for the Java Programming Language'. Sun Microsystems.] -- [[[3]]] http://en.wikipedia.org/wiki/Software_maintenance['Software maintenance'. Wikipedia.] -- [[[4]]] http://article.gmane.org/gmane.comp.version-control.git/45195/[Junio C Hamano. 'Automated bisect success story'. Gmane.] -- [[[5]]] http://lwn.net/Articles/317154/[Christian Couder. 'Fully automated bisecting with "git bisect run"'. LWN.net.] -- [[[6]]] http://lwn.net/Articles/277872/[Jonathan Corbet. 'Bisection divides users and developers'. LWN.net.] -- [[[7]]] http://article.gmane.org/gmane.linux.scsi/36652/[Ingo Molnar. 'Re: BUG 2.6.23-rc3 can't see sd partitions on Alpha'. Gmane.] -- [[[8]]] http://www.kernel.org/pub/software/scm/git/docs/git-bisect.html[Junio C Hamano and the git-list. 'git-bisect(1) Manual Page'. Linux Kernel Archives.] -- [[[9]]] http://github.com/Ealdwulf/bbchop[Ealdwulf. 'bbchop'. GitHub.] +- [[[1]]] https://www.nist.gov/sites/default/files/documents/director/planning/report02-3.pdf['The Economic Impacts of Inadequate Infratructure for Software Testing'. Nist Planning Report 02-3], see Executive Summary and Chapter 8. +- [[[2]]] http://www.oracle.com/technetwork/java/codeconvtoc-136057.html['Code Conventions for the Java Programming Language'. Sun Microsystems.] +- [[[3]]] https://en.wikipedia.org/wiki/Software_maintenance['Software maintenance'. Wikipedia.] +- [[[4]]] https://public-inbox.org/git/7vps5xsbwp.fsf_-_@assigned-by-dhcp.cox.net/[Junio C Hamano. 'Automated bisect success story'.] +- [[[5]]] https://lwn.net/Articles/317154/[Christian Couder. 'Fully automated bisecting with "git bisect run"'. LWN.net.] +- [[[6]]] https://lwn.net/Articles/277872/[Jonathan Corbet. 'Bisection divides users and developers'. LWN.net.] +- [[[7]]] http://marc.info/?l=linux-kernel&m=119702753411680&w=2[Ingo Molnar. 'Re: BUG 2.6.23-rc3 can't see sd partitions on Alpha'. Linux-kernel mailing list.] +- [[[8]]] https://www.kernel.org/pub/software/scm/git/docs/git-bisect.html[Junio C Hamano and the git-list. 'git-bisect(1) Manual Page'. Linux Kernel Archives.] +- [[[9]]] https://github.com/Ealdwulf/bbchop[Ealdwulf. 'bbchop'. GitHub.] diff --git a/Documentation/git-bisect.txt b/Documentation/git-bisect.txt index bdd915a66b..6c42abf070 100644 --- a/Documentation/git-bisect.txt +++ b/Documentation/git-bisect.txt @@ -137,7 +137,7 @@ respectively, in place of "good" and "bad". (But note that you cannot mix "good" and "bad" with "old" and "new" in a single session.) In this more general usage, you provide `git bisect` with a "new" -commit has some property and an "old" commit that doesn't have that +commit that has some property and an "old" commit that doesn't have that property. Each time `git bisect` checks out a commit, you test if that commit has the property. If it does, mark the commit as "new"; otherwise, mark it as "old". When the bisection is done, `git bisect` diff --git a/Documentation/git-commit.txt b/Documentation/git-commit.txt index ed0f5b94b3..afb06adba4 100644 --- a/Documentation/git-commit.txt +++ b/Documentation/git-commit.txt @@ -95,7 +95,7 @@ OPTIONS --reset-author:: When used with -C/-c/--amend options, or when committing after a - a conflicting cherry-pick, declare that the authorship of the + conflicting cherry-pick, declare that the authorship of the resulting commit now belongs to the committer. This also renews the author timestamp. @@ -112,7 +112,7 @@ OPTIONS `--dry-run`. --long:: - When doing a dry-run, give the output in a the long-format. + When doing a dry-run, give the output in the long-format. Implies `--dry-run`. -z:: diff --git a/Documentation/git-diff.txt b/Documentation/git-diff.txt index bbab35fcaf..b0c1bb95c8 100644 --- a/Documentation/git-diff.txt +++ b/Documentation/git-diff.txt @@ -97,6 +97,20 @@ OPTIONS :git-diff: 1 include::diff-options.txt[] +-1 --base:: +-2 --ours:: +-3 --theirs:: + Compare the working tree with the "base" version (stage #1), + "our branch" (stage #2) or "their branch" (stage #3). The + index contains these stages only for unmerged entries i.e. + while resolving conflicts. See linkgit:git-read-tree[1] + section "3-Way Merge" for detailed information. + +-0:: + Omit diff output for unmerged entries and just show + "Unmerged". Can be used only when comparing the working tree + with the index. + ...:: The parameters, when given, are used to limit the diff to the named paths (you can give directory diff --git a/Documentation/git-format-patch.txt b/Documentation/git-format-patch.txt index f7a069bb92..c890328b02 100644 --- a/Documentation/git-format-patch.txt +++ b/Documentation/git-format-patch.txt @@ -557,7 +557,7 @@ series A, B, C, the history would be like: ................................................ With `git format-patch --base=P -3 C` (or variants thereof, e.g. with -`--cover-letter` of using `Z..C` instead of `-3 C` to specify the +`--cover-letter` or using `Z..C` instead of `-3 C` to specify the range), the base tree information block is shown at the end of the first message the command outputs (either the first patch, or the cover letter), like this: diff --git a/Documentation/git-ls-files.txt b/Documentation/git-ls-files.txt index 1cab703f73..d153c17e06 100644 --- a/Documentation/git-ls-files.txt +++ b/Documentation/git-ls-files.txt @@ -57,7 +57,7 @@ OPTIONS -s:: --stage:: - Show staged contents' object name, mode bits and stage number in the output. + Show staged contents' mode bits, object name and stage number in the output. --directory:: If a whole directory is classified as "other", show just its diff --git a/Documentation/git-pull.txt b/Documentation/git-pull.txt index 4470e4b574..942af8e0f7 100644 --- a/Documentation/git-pull.txt +++ b/Documentation/git-pull.txt @@ -67,7 +67,7 @@ with uncommitted changes is discouraged: while possible, it leaves you in a state that may be hard to back out of in the case of a conflict. If any of the remote changes overlap with local uncommitted changes, -the merge will be automatically cancelled and the work tree untouched. +the merge will be automatically canceled and the work tree untouched. It is generally best to get any local changes in working order before pulling or stash them away with linkgit:git-stash[1]. @@ -210,7 +210,8 @@ EXAMPLES current branch: + ------------------------------------------------ -$ git pull, git pull origin +$ git pull +$ git pull origin ------------------------------------------------ + Normally the branch merged in is the HEAD of the remote repository, diff --git a/Documentation/git-push.txt b/Documentation/git-push.txt index 1624a35888..0a639664fd 100644 --- a/Documentation/git-push.txt +++ b/Documentation/git-push.txt @@ -217,6 +217,47 @@ with this feature. + "--no-force-with-lease" will cancel all the previous --force-with-lease on the command line. ++ +A general note on safety: supplying this option without an expected +value, i.e. as `--force-with-lease` or `--force-with-lease=` +interacts very badly with anything that implicitly runs `git fetch` on +the remote to be pushed to in the background, e.g. `git fetch origin` +on your repository in a cronjob. ++ +The protection it offers over `--force` is ensuring that subsequent +changes your work wasn't based on aren't clobbered, but this is +trivially defeated if some background process is updating refs in the +background. We don't have anything except the remote tracking info to +go by as a heuristic for refs you're expected to have seen & are +willing to clobber. ++ +If your editor or some other system is running `git fetch` in the +background for you a way to mitigate this is to simply set up another +remote: ++ + git remote add origin-push $(git config remote.origin.url) + git fetch origin-push ++ +Now when the background process runs `git fetch origin` the references +on `origin-push` won't be updated, and thus commands like: ++ + git push --force-with-lease origin-push ++ +Will fail unless you manually run `git fetch origin-push`. This method +is of course entirely defeated by something that runs `git fetch +--all`, in that case you'd need to either disable it or do something +more tedious like: ++ + git fetch # update 'master' from remote + git tag base master # mark our base point + git rebase -i master # rewrite some commits + git push --force-with-lease=master:base master:master ++ +I.e. create a `base` tag for versions of the upstream code that you've +seen and are willing to overwrite, then rewrite history, and finally +force push changes to `master` if the remote version is still at +`base`, regardless of what your local `remotes/origin/master` has been +updated to in the background. -f:: --force:: diff --git a/Documentation/git-rebase.txt b/Documentation/git-rebase.txt index 67d48e6883..53f4e14444 100644 --- a/Documentation/git-rebase.txt +++ b/Documentation/git-rebase.txt @@ -370,6 +370,11 @@ default is `--no-fork-point`, otherwise the default is `--fork-point`. of the rebased commits (see linkgit:git-am[1]). Incompatible with the --interactive option. +--signoff:: + This flag is passed to 'git am' to sign off all the rebased + commits (see linkgit:git-am[1]). Incompatible with the + --interactive option. + -i:: --interactive:: Make a list of the commits which are about to be rebased. Let the diff --git a/Documentation/git-receive-pack.txt b/Documentation/git-receive-pack.txt index 0ccd5fbc78..86a4b32f0f 100644 --- a/Documentation/git-receive-pack.txt +++ b/Documentation/git-receive-pack.txt @@ -114,6 +114,8 @@ will be performed, and the update, post-receive and post-update hooks will not be invoked either. This can be useful to quickly bail out if the update is not to be supported. +See the notes on the quarantine environment below. + update Hook ----------- Before each ref is updated, if $GIT_DIR/hooks/update file exists @@ -214,6 +216,33 @@ if the repository is packed and is served via a dumb transport. exec git update-server-info +Quarantine Environment +---------------------- + +When `receive-pack` takes in objects, they are placed into a temporary +"quarantine" directory within the `$GIT_DIR/objects` directory and +migrated into the main object store only after the `pre-receive` hook +has completed. If the push fails before then, the temporary directory is +removed entirely. + +This has a few user-visible effects and caveats: + + 1. Pushes which fail due to problems with the incoming pack, missing + objects, or due to the `pre-receive` hook will not leave any + on-disk data. This is usually helpful to prevent repeated failed + pushes from filling up your disk, but can make debugging more + challenging. + + 2. Any objects created by the `pre-receive` hook will be created in + the quarantine directory (and migrated only if it succeeds). + + 3. The `pre-receive` hook MUST NOT update any refs to point to + quarantined objects. Other programs accessing the repository will + not be able to see the objects (and if the pre-receive hook fails, + those refs would become corrupted). For safety, any ref updates + from within `pre-receive` are automatically rejected. + + SEE ALSO -------- linkgit:git-send-pack[1], linkgit:gitnamespaces[7] diff --git a/Documentation/git-status.txt b/Documentation/git-status.txt index ba873657cf..d70abc6afe 100644 --- a/Documentation/git-status.txt +++ b/Documentation/git-status.txt @@ -181,6 +181,17 @@ in which case `XY` are `!!`. ! ! ignored ------------------------------------------------- +Submodules have more state and instead report + M the submodule has a different HEAD than + recorded in the index + m the submodule has modified content + ? the submodule has untracked files +since modified content or untracked files in a submodule cannot be added +via `git add` in the superproject to prepare a commit. + +'m' and '?' are applied recursively. For example if a nested submodule +in a submodule contains an untracked file, this is reported as '?' as well. + If -b is used the short-format status is preceded by a line ## branchname tracking info @@ -210,6 +221,8 @@ field from the first filename). Third, filenames containing special characters are not specially formatted; no quoting or backslash-escaping is performed. +Any submodule changes are reported as modified `M` instead of `m` or single `?`. + Porcelain Format Version 2 ~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/Documentation/git-tools.txt b/Documentation/git-tools.txt index 2f4ff50156..d0fec4cddd 100644 --- a/Documentation/git-tools.txt +++ b/Documentation/git-tools.txt @@ -7,4 +7,4 @@ maintained here. These days, however, search engines fill that role much more efficiently, so this manually-maintained list has been retired. See also the `contrib/` area, and the Git wiki: -http://git.or.cz/gitwiki/InterfacesFrontendsAndTools +https://git.wiki.kernel.org/index.php/InterfacesFrontendsAndTools diff --git a/Documentation/git-worktree.txt b/Documentation/git-worktree.txt index 553cf8413f..b472acc356 100644 --- a/Documentation/git-worktree.txt +++ b/Documentation/git-worktree.txt @@ -9,7 +9,7 @@ git-worktree - Manage multiple working trees SYNOPSIS -------- [verse] -'git worktree add' [-f] [--detach] [--checkout] [-b ] [] +'git worktree add' [-f] [--detach] [--checkout] [--lock] [-b ] [] 'git worktree list' [--porcelain] 'git worktree lock' [--reason ] 'git worktree prune' [-n] [-v] [--expire ] @@ -107,6 +107,11 @@ OPTIONS such as configuring sparse-checkout. See "Sparse checkout" in linkgit:git-read-tree[1]. +--lock:: + Keep the working tree locked after creation. This is the + equivalent of `git worktree lock` after `git worktree add`, + but without race condition. + -n:: --dry-run:: With `prune`, do not remove anything; just report what it would diff --git a/Documentation/git.txt b/Documentation/git.txt index ecc1bb4bd7..fb10314c1d 100644 --- a/Documentation/git.txt +++ b/Documentation/git.txt @@ -44,54 +44,68 @@ unreleased) version of Git, that is available from the 'master' branch of the `git.git` repository. Documentation for older releases are available here: -* link:v2.12.2/git.html[documentation for release 2.12.2] +* link:v2.13.0/git.html[documentation for release 2.13] * release notes for - link:RelNotes/2.12.2.txt[2.12.2]. - link:RelNotes/2.12.1.txt[2.12.1]. + link:RelNotes/2.13.0.txt[2.13]. + + +* link:v2.12.3/git.html[documentation for release 2.12.3] + +* release notes for + link:RelNotes/2.12.3.txt[2.12.3], + link:RelNotes/2.12.2.txt[2.12.2], + link:RelNotes/2.12.1.txt[2.12.1], link:RelNotes/2.12.0.txt[2.12]. * link:v2.11.1/git.html[documentation for release 2.11.1] * release notes for + link:RelNotes/2.11.2.txt[2.11.2], link:RelNotes/2.11.1.txt[2.11.1], link:RelNotes/2.11.0.txt[2.11]. -* link:v2.10.2/git.html[documentation for release 2.10.2] +* link:v2.10.3/git.html[documentation for release 2.10.3] * release notes for + link:RelNotes/2.10.3.txt[2.10.3], link:RelNotes/2.10.2.txt[2.10.2], link:RelNotes/2.10.1.txt[2.10.1], link:RelNotes/2.10.0.txt[2.10]. -* link:v2.9.3/git.html[documentation for release 2.9.3] +* link:v2.9.4/git.html[documentation for release 2.9.4] * release notes for + link:RelNotes/2.9.4.txt[2.9.4], link:RelNotes/2.9.3.txt[2.9.3], link:RelNotes/2.9.2.txt[2.9.2], link:RelNotes/2.9.1.txt[2.9.1], link:RelNotes/2.9.0.txt[2.9]. -* link:v2.8.4/git.html[documentation for release 2.8.4] +* link:v2.8.5/git.html[documentation for release 2.8.5] * release notes for + link:RelNotes/2.8.5.txt[2.8.5], link:RelNotes/2.8.4.txt[2.8.4], link:RelNotes/2.8.3.txt[2.8.3], link:RelNotes/2.8.2.txt[2.8.2], link:RelNotes/2.8.1.txt[2.8.1], link:RelNotes/2.8.0.txt[2.8]. -* link:v2.7.3/git.html[documentation for release 2.7.3] +* link:v2.7.5/git.html[documentation for release 2.7.5] * release notes for + link:RelNotes/2.7.5.txt[2.7.5], + link:RelNotes/2.7.4.txt[2.7.4], link:RelNotes/2.7.3.txt[2.7.3], link:RelNotes/2.7.2.txt[2.7.2], link:RelNotes/2.7.1.txt[2.7.1], link:RelNotes/2.7.0.txt[2.7]. -* link:v2.6.6/git.html[documentation for release 2.6.6] +* link:v2.6.7/git.html[documentation for release 2.6.7] * release notes for + link:RelNotes/2.6.7.txt[2.6.7], link:RelNotes/2.6.6.txt[2.6.6], link:RelNotes/2.6.5.txt[2.6.5], link:RelNotes/2.6.4.txt[2.6.4], @@ -100,9 +114,10 @@ Documentation for older releases are available here: link:RelNotes/2.6.1.txt[2.6.1], link:RelNotes/2.6.0.txt[2.6]. -* link:v2.5.5/git.html[documentation for release 2.5.5] +* link:v2.5.6/git.html[documentation for release 2.5.6] * release notes for + link:RelNotes/2.5.6.txt[2.5.6], link:RelNotes/2.5.5.txt[2.5.5], link:RelNotes/2.5.4.txt[2.5.4], link:RelNotes/2.5.3.txt[2.5.3], @@ -110,9 +125,10 @@ Documentation for older releases are available here: link:RelNotes/2.5.1.txt[2.5.1], link:RelNotes/2.5.0.txt[2.5]. -* link:v2.4.11/git.html[documentation for release 2.4.11] +* link:v2.4.12/git.html[documentation for release 2.4.12] * release notes for + link:RelNotes/2.4.12.txt[2.4.12], link:RelNotes/2.4.11.txt[2.4.11], link:RelNotes/2.4.10.txt[2.4.10], link:RelNotes/2.4.9.txt[2.4.9], diff --git a/Documentation/gitattributes.txt b/Documentation/gitattributes.txt index a53d093ca1..4736483865 100644 --- a/Documentation/gitattributes.txt +++ b/Documentation/gitattributes.txt @@ -229,11 +229,9 @@ From a clean working directory: ------------------------------------------------- $ echo "* text=auto" >.gitattributes -$ rm .git/index # Remove the index to force Git to -$ git reset # re-scan the working directory +$ rm .git/index # Remove the index to re-scan the working directory +$ git add . $ git status # Show files that will be normalized -$ git add -u -$ git add .gitattributes $ git commit -m "Introduce end-of-line normalization" ------------------------------------------------- diff --git a/Documentation/gitcore-tutorial.txt b/Documentation/gitcore-tutorial.txt index 3a0ec8c53a..7577f27ec2 100644 --- a/Documentation/gitcore-tutorial.txt +++ b/Documentation/gitcore-tutorial.txt @@ -1429,7 +1429,7 @@ Although Git is a truly distributed system, it is often convenient to organize your project with an informal hierarchy of developers. Linux kernel development is run this way. There is a nice illustration (page 17, "Merges to Mainline") in -http://www.xenotime.net/linux/mentor/linux-mentoring-2006.pdf[Randy Dunlap's presentation]. +https://web.archive.org/web/20120915203609/http://www.xenotime.net/linux/mentor/linux-mentoring-2006.pdf[Randy Dunlap's presentation]. It should be stressed that this hierarchy is purely *informal*. There is nothing fundamental in Git that enforces the "chain of diff --git a/Documentation/githooks.txt b/Documentation/githooks.txt index 9565dc3fda..706091a569 100644 --- a/Documentation/githooks.txt +++ b/Documentation/githooks.txt @@ -22,8 +22,10 @@ changed via the `core.hooksPath` configuration variable (see linkgit:git-config[1]). Before Git invokes a hook, it changes its working directory to either -the root of the working tree in a non-bare repository, or to the -$GIT_DIR in a bare repository. +$GIT_DIR in a bare repository or the root of the working tree in a non-bare +repository. An exception are hooks triggered during a push ('pre-receive', +'update', 'post-receive', 'post-update', 'push-to-checkout') which are always +executed in $GIT_DIR. Hooks can get their arguments via the environment, command-line arguments, and stdin. See the documentation for each hook below for @@ -256,6 +258,9 @@ environment variables will not be set. If the client selects to use push options, but doesn't transmit any, the count variable will be set to zero, `GIT_PUSH_OPTION_COUNT=0`. +See the section on "Quarantine Environment" in +linkgit:git-receive-pack[1] for some caveats. + [[update]] update ~~~~~~ diff --git a/Documentation/gitmodules.txt b/Documentation/gitmodules.txt index 8f7c50f330..db5d47eb19 100644 --- a/Documentation/gitmodules.txt +++ b/Documentation/gitmodules.txt @@ -66,17 +66,26 @@ submodule..fetchRecurseSubmodules:: submodule..ignore:: Defines under what circumstances "git status" and the diff family show - a submodule as modified. When set to "all", it will never be considered - modified (but will nonetheless show up in the output of status and - commit when it has been staged), "dirty" will ignore all changes - to the submodules work tree and - takes only differences between the HEAD of the submodule and the commit - recorded in the superproject into account. "untracked" will additionally - let submodules with modified tracked files in their work tree show up. - Using "none" (the default when this option is not set) also shows - submodules that have untracked files in their work tree as changed. - If this option is also present in the submodules entry in .git/config of - the superproject, the setting there will override the one found in + a submodule as modified. The following values are supported: + + all;; The submodule will never be considered modified (but will + nonetheless show up in the output of status and commit when it has + been staged). + + dirty;; All changes to the submodule's work tree will be ignored, only + committed differences between the HEAD of the submodule and its + recorded state in the superproject are taken into account. + + untracked;; Only untracked files in submodules will be ignored. + Committed differences and modifications to tracked files will show + up. + + none;; No modifiations to submodules are ignored, all of committed + differences, and modifications to tracked and untracked files are + shown. This is the default option. + + If this option is also present in the submodules entry in .git/config + of the superproject, the setting there will override the one found in .gitmodules. Both settings can be overridden on the command line by using the "--ignore-submodule" option. The 'git submodule' commands are not @@ -84,8 +93,8 @@ submodule..ignore:: submodule..shallow:: When set to true, a clone of this submodule will be performed as a - shallow clone unless the user explicitly asks for a non-shallow - clone. + shallow clone (with a history depth of 1) unless the user explicitly + asks for a non-shallow clone. EXAMPLES diff --git a/Documentation/gitremote-helpers.txt b/Documentation/gitremote-helpers.txt index e4b785eb60..4a584f3c5d 100644 --- a/Documentation/gitremote-helpers.txt +++ b/Documentation/gitremote-helpers.txt @@ -463,7 +463,7 @@ set by Git if the remote helper has the 'option' capability. GPG sign pushes. 'option push-option :: - Transmit as a push option. As the a push option + Transmit as a push option. As the push option must not contain LF or NUL characters, the string is not encoded. SEE ALSO diff --git a/Documentation/gitweb.conf.txt b/Documentation/gitweb.conf.txt index e6320891b1..9c8982ec98 100644 --- a/Documentation/gitweb.conf.txt +++ b/Documentation/gitweb.conf.txt @@ -368,8 +368,8 @@ $logo_url:: $logo_label:: URI and label (title) for the Git logo link (or your site logo, if you chose to use different logo image). By default, these both - refer to Git homepage, http://git-scm.com[]; in the past, they pointed - to Git documentation at http://www.kernel.org[]. + refer to Git homepage, https://git-scm.com[]; in the past, they pointed + to Git documentation at https://www.kernel.org[]. Changing gitweb's look diff --git a/Documentation/howto/rebuild-from-update-hook.txt b/Documentation/howto/rebuild-from-update-hook.txt index 25378f68d3..db219f5c07 100644 --- a/Documentation/howto/rebuild-from-update-hook.txt +++ b/Documentation/howto/rebuild-from-update-hook.txt @@ -4,13 +4,13 @@ From: Junio C Hamano Date: Fri, 26 Aug 2005 18:19:10 -0700 Abstract: In this how-to article, JC talks about how he uses the post-update hook to automate Git documentation page - shown at http://www.kernel.org/pub/software/scm/git/docs/. + shown at https://www.kernel.org/pub/software/scm/git/docs/. Content-type: text/asciidoc How to rebuild from update hook =============================== -The pages under http://www.kernel.org/pub/software/scm/git/docs/ +The pages under https://www.kernel.org/pub/software/scm/git/docs/ are built from Documentation/ directory of the git.git project and needed to be kept up-to-date. The www.kernel.org/ servers are mirrored and I was told that the origin of the mirror is on diff --git a/Documentation/revisions.txt b/Documentation/revisions.txt index 75d211f1a8..61277469c8 100644 --- a/Documentation/revisions.txt +++ b/Documentation/revisions.txt @@ -295,7 +295,7 @@ The 'r1{caret}@' notation means all parents of 'r1'. The 'r1{caret}!' notation includes commit 'r1' but excludes all of its parents. By itself, this notation denotes the single commit 'r1'. -The '{caret}-{}' notation includes '' but excludes the th +The '{caret}-' notation includes '' but excludes the th parent (i.e. a shorthand for '{caret}..'), with '' = 1 if not given. This is typically useful for merge commits where you can just pass '{caret}-' to get all the commits in the branch @@ -337,7 +337,7 @@ Revision Range Summary as giving commit '' and then all its parents prefixed with '{caret}' to exclude them (and their ancestors). -'{caret}-{}', e.g. 'HEAD{caret}-, HEAD{caret}-2':: +'{caret}-', e.g. 'HEAD{caret}-, HEAD{caret}-2':: Equivalent to '{caret}..', with '' = 1 if not given. diff --git a/Documentation/technical/api-oid-array.txt b/Documentation/technical/api-oid-array.txt new file mode 100644 index 0000000000..b0c11f868d --- /dev/null +++ b/Documentation/technical/api-oid-array.txt @@ -0,0 +1,80 @@ +oid-array API +============== + +The oid-array API provides storage and manipulation of sets of object +identifiers. The emphasis is on storage and processing efficiency, +making them suitable for large lists. Note that the ordering of items is +not preserved over some operations. + +Data Structures +--------------- + +`struct oid_array`:: + + A single array of object IDs. This should be initialized by + assignment from `OID_ARRAY_INIT`. The `oid` member contains + the actual data. The `nr` member contains the number of items in + the set. The `alloc` and `sorted` members are used internally, + and should not be needed by API callers. + +Functions +--------- + +`oid_array_append`:: + Add an item to the set. The object ID will be placed at the end of + the array (but note that some operations below may lose this + ordering). + +`oid_array_lookup`:: + Perform a binary search of the array for a specific object ID. + If found, returns the offset (in number of elements) of the + object ID. If not found, returns a negative integer. If the array + is not sorted, this function has the side effect of sorting it. + +`oid_array_clear`:: + Free all memory associated with the array and return it to the + initial, empty state. + +`oid_array_for_each_unique`:: + Efficiently iterate over each unique element of the list, + executing the callback function for each one. If the array is + not sorted, this function has the side effect of sorting it. If + the callback returns a non-zero value, the iteration ends + immediately and the callback's return is propagated; otherwise, + 0 is returned. + +Examples +-------- + +----------------------------------------- +int print_callback(const struct object_id *oid, + void *data) +{ + printf("%s\n", oid_to_hex(oid)); + return 0; /* always continue */ +} + +void some_func(void) +{ + struct sha1_array hashes = OID_ARRAY_INIT; + struct object_id oid; + + /* Read objects into our set */ + while (read_object_from_stdin(oid.hash)) + oid_array_append(&hashes, &oid); + + /* Check if some objects are in our set */ + while (read_object_from_stdin(oid.hash)) { + if (oid_array_lookup(&hashes, &oid) >= 0) + printf("it's in there!\n"); + + /* + * Print the unique set of objects. We could also have + * avoided adding duplicate objects in the first place, + * but we would end up re-sorting the array repeatedly. + * Instead, this will sort once and then skip duplicates + * in linear time. + */ + oid_array_for_each_unique(&hashes, print_callback, NULL); +} +----------------------------------------- diff --git a/Documentation/technical/api-sha1-array.txt b/Documentation/technical/api-sha1-array.txt deleted file mode 100644 index dcc52943a5..0000000000 --- a/Documentation/technical/api-sha1-array.txt +++ /dev/null @@ -1,80 +0,0 @@ -sha1-array API -============== - -The sha1-array API provides storage and manipulation of sets of SHA-1 -identifiers. The emphasis is on storage and processing efficiency, -making them suitable for large lists. Note that the ordering of items is -not preserved over some operations. - -Data Structures ---------------- - -`struct sha1_array`:: - - A single array of SHA-1 hashes. This should be initialized by - assignment from `SHA1_ARRAY_INIT`. The `sha1` member contains - the actual data. The `nr` member contains the number of items in - the set. The `alloc` and `sorted` members are used internally, - and should not be needed by API callers. - -Functions ---------- - -`sha1_array_append`:: - Add an item to the set. The sha1 will be placed at the end of - the array (but note that some operations below may lose this - ordering). - -`sha1_array_lookup`:: - Perform a binary search of the array for a specific sha1. - If found, returns the offset (in number of elements) of the - sha1. If not found, returns a negative integer. If the array is - not sorted, this function has the side effect of sorting it. - -`sha1_array_clear`:: - Free all memory associated with the array and return it to the - initial, empty state. - -`sha1_array_for_each_unique`:: - Efficiently iterate over each unique element of the list, - executing the callback function for each one. If the array is - not sorted, this function has the side effect of sorting it. If - the callback returns a non-zero value, the iteration ends - immediately and the callback's return is propagated; otherwise, - 0 is returned. - -Examples --------- - ------------------------------------------ -int print_callback(const unsigned char sha1[20], - void *data) -{ - printf("%s\n", sha1_to_hex(sha1)); - return 0; /* always continue */ -} - -void some_func(void) -{ - struct sha1_array hashes = SHA1_ARRAY_INIT; - unsigned char sha1[20]; - - /* Read objects into our set */ - while (read_object_from_stdin(sha1)) - sha1_array_append(&hashes, sha1); - - /* Check if some objects are in our set */ - while (read_object_from_stdin(sha1)) { - if (sha1_array_lookup(&hashes, sha1) >= 0) - printf("it's in there!\n"); - - /* - * Print the unique set of objects. We could also have - * avoided adding duplicate objects in the first place, - * but we would end up re-sorting the array repeatedly. - * Instead, this will sort once and then skip duplicates - * in linear time. - */ - sha1_array_for_each_unique(&hashes, print_callback, NULL); -} ------------------------------------------ diff --git a/Documentation/technical/pack-protocol.txt b/Documentation/technical/pack-protocol.txt index c59ac9936a..5b0ba3ef20 100644 --- a/Documentation/technical/pack-protocol.txt +++ b/Documentation/technical/pack-protocol.txt @@ -351,14 +351,19 @@ ACK after 'done' if there is at least one common base and multi_ack or multi_ack_detailed is enabled. The server always sends NAK after 'done' if there is no common base found. +Instead of 'ACK' or 'NAK', the server may send an error message (for +example, if it does not recognize an object in a 'want' line received +from the client). + Then the server will start sending its packfile data. ---- - server-response = *ack_multi ack / nak + server-response = *ack_multi ack / nak / error-line ack_multi = PKT-LINE("ACK" SP obj-id ack_status) ack_status = "continue" / "common" / "ready" ack = PKT-LINE("ACK" SP obj-id) nak = PKT-LINE("NAK") + error-line = PKT-LINE("ERR" SP explanation-text) ---- A simple clone may look like this (with no 'have' lines): diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN index 817d1cf7ef..afcf9e9abf 100755 --- a/GIT-VERSION-GEN +++ b/GIT-VERSION-GEN @@ -1,7 +1,7 @@ #!/bin/sh GVF=GIT-VERSION-FILE -DEF_VER=v2.12.GIT +DEF_VER=v2.13.0 LF=' ' diff --git a/Makefile b/Makefile index 9b36068ac5..e35542e631 100644 --- a/Makefile +++ b/Makefile @@ -626,10 +626,12 @@ TEST_PROGRAMS_NEED_X += test-line-buffer TEST_PROGRAMS_NEED_X += test-match-trees TEST_PROGRAMS_NEED_X += test-mergesort TEST_PROGRAMS_NEED_X += test-mktemp +TEST_PROGRAMS_NEED_X += test-online-cpus TEST_PROGRAMS_NEED_X += test-parse-options TEST_PROGRAMS_NEED_X += test-path-utils TEST_PROGRAMS_NEED_X += test-prio-queue TEST_PROGRAMS_NEED_X += test-read-cache +TEST_PROGRAMS_NEED_X += test-ref-store TEST_PROGRAMS_NEED_X += test-regex TEST_PROGRAMS_NEED_X += test-revision-walking TEST_PROGRAMS_NEED_X += test-run-command @@ -637,6 +639,7 @@ TEST_PROGRAMS_NEED_X += test-scrap-cache-tree TEST_PROGRAMS_NEED_X += test-sha1 TEST_PROGRAMS_NEED_X += test-sha1-array TEST_PROGRAMS_NEED_X += test-sigchain +TEST_PROGRAMS_NEED_X += test-strcmp-offset TEST_PROGRAMS_NEED_X += test-string-list TEST_PROGRAMS_NEED_X += test-submodule-config TEST_PROGRAMS_NEED_X += test-subprocess @@ -814,6 +817,7 @@ LIB_OBJS += reflog-walk.o LIB_OBJS += refs.o LIB_OBJS += refs/files-backend.o LIB_OBJS += refs/iterator.o +LIB_OBJS += refs/ref-cache.o LIB_OBJS += ref-filter.o LIB_OBJS += remote.o LIB_OBJS += replace_object.o @@ -1851,6 +1855,7 @@ perl/perl.mak: perl/PM.stamp perl/PM.stamp: FORCE @$(FIND) perl -type f -name '*.pm' | sort >$@+ && \ + $(PERL_PATH) -V >>$@+ && \ { cmp $@+ $@ >/dev/null 2>/dev/null || mv $@+ $@; } && \ $(RM) $@+ diff --git a/bisect.c b/bisect.c index 30808cadf7..08c9fb7266 100644 --- a/bisect.c +++ b/bisect.c @@ -12,8 +12,8 @@ #include "sha1-array.h" #include "argv-array.h" -static struct sha1_array good_revs; -static struct sha1_array skipped_revs; +static struct oid_array good_revs; +static struct oid_array skipped_revs; static struct object_id *current_bad_oid; @@ -200,6 +200,7 @@ static struct commit_list *best_bisection_sorted(struct commit_list *list, int n { struct commit_list *p; struct commit_dist *array = xcalloc(nr, sizeof(*array)); + struct strbuf buf = STRBUF_INIT; int cnt, i; for (p = list, cnt = 0; p; p = p->next) { @@ -217,17 +218,18 @@ static struct commit_list *best_bisection_sorted(struct commit_list *list, int n } QSORT(array, cnt, compare_commit_dist); for (p = list, i = 0; i < cnt; i++) { - char buf[100]; /* enough for dist=%d */ struct object *obj = &(array[i].commit->object); - snprintf(buf, sizeof(buf), "dist=%d", array[i].distance); - add_name_decoration(DECORATION_NONE, buf, obj); + strbuf_reset(&buf); + strbuf_addf(&buf, "dist=%d", array[i].distance); + add_name_decoration(DECORATION_NONE, buf.buf, obj); p->item = array[i].commit; p = p->next; } if (p) p->next = NULL; + strbuf_release(&buf); free(array); return list; } @@ -413,9 +415,9 @@ static int register_ref(const char *refname, const struct object_id *oid, current_bad_oid = xmalloc(sizeof(*current_bad_oid)); oidcpy(current_bad_oid, oid); } else if (starts_with(refname, good_prefix.buf)) { - sha1_array_append(&good_revs, oid->hash); + oid_array_append(&good_revs, oid); } else if (starts_with(refname, "skip-")) { - sha1_array_append(&skipped_revs, oid->hash); + oid_array_append(&skipped_revs, oid); } strbuf_release(&good_prefix); @@ -430,6 +432,7 @@ static int read_bisect_refs(void) static GIT_PATH_FUNC(git_path_bisect_names, "BISECT_NAMES") static GIT_PATH_FUNC(git_path_bisect_expected_rev, "BISECT_EXPECTED_REV") +static GIT_PATH_FUNC(git_path_bisect_terms, "BISECT_TERMS") static void read_bisect_paths(struct argv_array *array) { @@ -451,13 +454,13 @@ static void read_bisect_paths(struct argv_array *array) fclose(fp); } -static char *join_sha1_array_hex(struct sha1_array *array, char delim) +static char *join_sha1_array_hex(struct oid_array *array, char delim) { struct strbuf joined_hexs = STRBUF_INIT; int i; for (i = 0; i < array->nr; i++) { - strbuf_addstr(&joined_hexs, sha1_to_hex(array->sha1[i])); + strbuf_addstr(&joined_hexs, oid_to_hex(array->oid + i)); if (i + 1 < array->nr) strbuf_addch(&joined_hexs, delim); } @@ -499,8 +502,7 @@ struct commit_list *filter_skipped(struct commit_list *list, while (list) { struct commit_list *next = list->next; list->next = NULL; - if (0 <= sha1_array_lookup(&skipped_revs, - list->item->object.oid.hash)) { + if (0 <= oid_array_lookup(&skipped_revs, &list->item->object.oid)) { if (skipped_first && !*skipped_first) *skipped_first = 1; /* Move current to tried list */ @@ -621,7 +623,7 @@ static void bisect_rev_setup(struct rev_info *revs, const char *prefix, argv_array_pushf(&rev_argv, bad_format, oid_to_hex(current_bad_oid)); for (i = 0; i < good_revs.nr; i++) argv_array_pushf(&rev_argv, good_format, - sha1_to_hex(good_revs.sha1[i])); + oid_to_hex(good_revs.oid + i)); argv_array_push(&rev_argv, "--"); if (read_paths) read_bisect_paths(&rev_argv); @@ -682,7 +684,7 @@ static int is_expected_rev(const struct object_id *oid) static int bisect_checkout(const unsigned char *bisect_rev, int no_checkout) { - char bisect_rev_hex[GIT_SHA1_HEXSZ + 1]; + char bisect_rev_hex[GIT_MAX_HEXSZ + 1]; memcpy(bisect_rev_hex, sha1_to_hex(bisect_rev), GIT_SHA1_HEXSZ + 1); update_ref(NULL, "BISECT_EXPECTED_REV", bisect_rev, NULL, 0, UPDATE_REFS_DIE_ON_ERR); @@ -701,11 +703,11 @@ static int bisect_checkout(const unsigned char *bisect_rev, int no_checkout) return run_command_v_opt(argv_show_branch, RUN_GIT_CMD); } -static struct commit *get_commit_reference(const unsigned char *sha1) +static struct commit *get_commit_reference(const struct object_id *oid) { - struct commit *r = lookup_commit_reference(sha1); + struct commit *r = lookup_commit_reference(oid->hash); if (!r) - die(_("Not a valid commit name %s"), sha1_to_hex(sha1)); + die(_("Not a valid commit name %s"), oid_to_hex(oid)); return r; } @@ -715,9 +717,9 @@ static struct commit **get_bad_and_good_commits(int *rev_nr) int i, n = 0; ALLOC_ARRAY(rev, 1 + good_revs.nr); - rev[n++] = get_commit_reference(current_bad_oid->hash); + rev[n++] = get_commit_reference(current_bad_oid); for (i = 0; i < good_revs.nr; i++) - rev[n++] = get_commit_reference(good_revs.sha1[i]); + rev[n++] = get_commit_reference(good_revs.oid + i); *rev_nr = n; return rev; @@ -754,9 +756,9 @@ static void handle_bad_merge_base(void) exit(1); } -static void handle_skipped_merge_base(const unsigned char *mb) +static void handle_skipped_merge_base(const struct object_id *mb) { - char *mb_hex = sha1_to_hex(mb); + char *mb_hex = oid_to_hex(mb); char *bad_hex = oid_to_hex(current_bad_oid); char *good_hex = join_sha1_array_hex(&good_revs, ' '); @@ -787,16 +789,16 @@ static void check_merge_bases(int no_checkout) result = get_merge_bases_many(rev[0], rev_nr - 1, rev + 1); for (; result; result = result->next) { - const unsigned char *mb = result->item->object.oid.hash; - if (!hashcmp(mb, current_bad_oid->hash)) { + const struct object_id *mb = &result->item->object.oid; + if (!oidcmp(mb, current_bad_oid)) { handle_bad_merge_base(); - } else if (0 <= sha1_array_lookup(&good_revs, mb)) { + } else if (0 <= oid_array_lookup(&good_revs, mb)) { continue; - } else if (0 <= sha1_array_lookup(&skipped_revs, mb)) { + } else if (0 <= oid_array_lookup(&skipped_revs, mb)) { handle_skipped_merge_base(mb); } else { printf(_("Bisecting: a merge base must be tested\n")); - exit(bisect_checkout(mb, no_checkout)); + exit(bisect_checkout(mb->hash, no_checkout)); } } @@ -905,7 +907,7 @@ static void show_diff_tree(const char *prefix, struct commit *commit) void read_bisect_terms(const char **read_bad, const char **read_good) { struct strbuf str = STRBUF_INIT; - const char *filename = git_path("BISECT_TERMS"); + const char *filename = git_path_bisect_terms(); FILE *fp = fopen(filename, "r"); if (!fp) { diff --git a/branch.c b/branch.c index 5c12036b02..ad5a2299ba 100644 --- a/branch.c +++ b/branch.c @@ -234,7 +234,7 @@ void create_branch(const char *name, const char *start_name, { struct commit *commit; unsigned char sha1[20]; - char *real_ref, msg[PATH_MAX + 20]; + char *real_ref; struct strbuf ref = STRBUF_INIT; int forcing = 0; int dont_change_ref = 0; @@ -290,19 +290,18 @@ void create_branch(const char *name, const char *start_name, die(_("Not a valid branch point: '%s'."), start_name); hashcpy(sha1, commit->object.oid.hash); - if (forcing) - snprintf(msg, sizeof msg, "branch: Reset to %s", - start_name); - else if (!dont_change_ref) - snprintf(msg, sizeof msg, "branch: Created from %s", - start_name); - if (reflog) log_all_ref_updates = LOG_REFS_NORMAL; if (!dont_change_ref) { struct ref_transaction *transaction; struct strbuf err = STRBUF_INIT; + char *msg; + + if (forcing) + msg = xstrfmt("branch: Reset to %s", start_name); + else + msg = xstrfmt("branch: Created from %s", start_name); transaction = ref_transaction_begin(&err); if (!transaction || @@ -313,6 +312,7 @@ void create_branch(const char *name, const char *start_name, die("%s", err.buf); ref_transaction_free(transaction); strbuf_release(&err); + free(msg); } if (real_ref && track) diff --git a/builtin/am.c b/builtin/am.c index f7a7a971fb..a95dd8b4e6 100644 --- a/builtin/am.c +++ b/builtin/am.c @@ -134,17 +134,15 @@ struct am_state { }; /** - * Initializes am_state with the default values. The state directory is set to - * dir. + * Initializes am_state with the default values. */ -static void am_state_init(struct am_state *state, const char *dir) +static void am_state_init(struct am_state *state) { int gpgsign; memset(state, 0, sizeof(*state)); - assert(dir); - state->dir = xstrdup(dir); + state->dir = git_pathdup("rebase-apply"); state->prec = 4; @@ -762,14 +760,18 @@ static int split_mail_conv(mail_conv_fn fn, struct am_state *state, mail = mkpath("%s/%0*d", state->dir, state->prec, i + 1); out = fopen(mail, "w"); - if (!out) + if (!out) { + if (in != stdin) + fclose(in); return error_errno(_("could not open '%s' for writing"), mail); + } ret = fn(out, in, keep_cr); fclose(out); - fclose(in); + if (in != stdin) + fclose(in); if (ret) return error(_("could not parse patch '%s'"), *paths); @@ -1181,42 +1183,39 @@ static void NORETURN die_user_resolve(const struct am_state *state) exit(128); } -static void am_signoff(struct strbuf *sb) +/** + * Appends signoff to the "msg" field of the am_state. + */ +static void am_append_signoff(struct am_state *state) { char *cp; struct strbuf mine = STRBUF_INIT; + struct strbuf sb = STRBUF_INIT; - /* Does it end with our own sign-off? */ + strbuf_attach(&sb, state->msg, state->msg_len, state->msg_len); + + /* our sign-off */ strbuf_addf(&mine, "\n%s%s\n", sign_off_header, fmt_name(getenv("GIT_COMMITTER_NAME"), getenv("GIT_COMMITTER_EMAIL"))); - if (mine.len < sb->len && - !strcmp(mine.buf, sb->buf + sb->len - mine.len)) + + /* Does sb end with it already? */ + if (mine.len < sb.len && + !strcmp(mine.buf, sb.buf + sb.len - mine.len)) goto exit; /* no need to duplicate */ /* Does it have any Signed-off-by: in the text */ - for (cp = sb->buf; + for (cp = sb.buf; cp && *cp && (cp = strstr(cp, sign_off_header)) != NULL; cp = strchr(cp, '\n')) { - if (sb->buf == cp || cp[-1] == '\n') + if (sb.buf == cp || cp[-1] == '\n') break; } - strbuf_addstr(sb, mine.buf + !!cp); + strbuf_addstr(&sb, mine.buf + !!cp); exit: strbuf_release(&mine); -} - -/** - * Appends signoff to the "msg" field of the am_state. - */ -static void am_append_signoff(struct am_state *state) -{ - struct strbuf sb = STRBUF_INIT; - - strbuf_attach(&sb, state->msg, state->msg_len, state->msg_len); - am_signoff(&sb); state->msg = strbuf_detach(&sb, &state->msg_len); } @@ -1321,9 +1320,6 @@ static int parse_mail(struct am_state *state, const char *mail) strbuf_addbuf(&msg, &mi.log_message); strbuf_stripspace(&msg, 0); - if (state->signoff) - am_signoff(&msg); - assert(!state->author_name); state->author_name = strbuf_detach(&author_name, NULL); @@ -1848,6 +1844,9 @@ static void am_run(struct am_state *state, int resume) if (skip) goto next; /* mail should be skipped */ + if (state->signoff) + am_append_signoff(state); + write_author_script(state); write_commit_msg(state); } @@ -2322,7 +2321,7 @@ int cmd_am(int argc, const char **argv, const char *prefix) git_config(git_am_config, NULL); - am_state_init(&state, git_path("rebase-apply")); + am_state_init(&state); in_progress = am_in_progress(&state); if (in_progress) diff --git a/builtin/blame.c b/builtin/blame.c index f7aa95f4ba..07506a3e45 100644 --- a/builtin/blame.c +++ b/builtin/blame.c @@ -1890,7 +1890,7 @@ static void emit_porcelain(struct scoreboard *sb, struct blame_entry *ent, int cnt; const char *cp; struct origin *suspect = ent->suspect; - char hex[GIT_SHA1_HEXSZ + 1]; + char hex[GIT_MAX_HEXSZ + 1]; oid_to_hex_r(hex, &suspect->commit->object.oid); printf("%s %d %d %d\n", @@ -1928,7 +1928,7 @@ static void emit_other(struct scoreboard *sb, struct blame_entry *ent, int opt) const char *cp; struct origin *suspect = ent->suspect; struct commit_info ci; - char hex[GIT_SHA1_HEXSZ + 1]; + char hex[GIT_MAX_HEXSZ + 1]; int show_raw_time = !!(opt & OUTPUT_RAW_TIMESTAMP); get_commit_info(suspect->commit, &ci, 1); diff --git a/builtin/branch.c b/builtin/branch.c index 0552c42ad1..48a513a84d 100644 --- a/builtin/branch.c +++ b/builtin/branch.c @@ -504,7 +504,7 @@ static void rename_branch(const char *oldname, const char *newname, int force) strbuf_release(&newsection); } -static const char edit_description[] = "BRANCH_DESCRIPTION"; +static GIT_PATH_FUNC(edit_description, "EDIT_DESCRIPTION") static int edit_branch_description(const char *branch_name) { @@ -519,9 +519,9 @@ static int edit_branch_description(const char *branch_name) " %s\n" "Lines starting with '%c' will be stripped.\n"), branch_name, comment_line_char); - write_file_buf(git_path(edit_description), buf.buf, buf.len); + write_file_buf(edit_description(), buf.buf, buf.len); strbuf_reset(&buf); - if (launch_editor(git_path(edit_description), &buf, NULL)) { + if (launch_editor(edit_description(), &buf, NULL)) { strbuf_release(&buf); return -1; } diff --git a/builtin/cat-file.c b/builtin/cat-file.c index 8b85cb8cf0..1890d7a639 100644 --- a/builtin/cat-file.c +++ b/builtin/cat-file.c @@ -401,10 +401,10 @@ struct object_cb_data { struct expand_data *expand; }; -static int batch_object_cb(const unsigned char sha1[20], void *vdata) +static int batch_object_cb(const struct object_id *oid, void *vdata) { struct object_cb_data *data = vdata; - hashcpy(data->expand->oid.hash, sha1); + oidcpy(&data->expand->oid, oid); batch_object_write(NULL, data->opt, data->expand); return 0; } @@ -413,7 +413,7 @@ static int batch_loose_object(const struct object_id *oid, const char *path, void *data) { - sha1_array_append(data, oid->hash); + oid_array_append(data, oid); return 0; } @@ -422,7 +422,7 @@ static int batch_packed_object(const struct object_id *oid, uint32_t pos, void *data) { - sha1_array_append(data, oid->hash); + oid_array_append(data, oid); return 0; } @@ -462,7 +462,7 @@ static int batch_objects(struct batch_options *opt) data.info.typep = &data.type; if (opt->all_objects) { - struct sha1_array sa = SHA1_ARRAY_INIT; + struct oid_array sa = OID_ARRAY_INIT; struct object_cb_data cb; for_each_loose_object(batch_loose_object, &sa, 0); @@ -470,9 +470,9 @@ static int batch_objects(struct batch_options *opt) cb.opt = opt; cb.expand = &data; - sha1_array_for_each_unique(&sa, batch_object_cb, &cb); + oid_array_for_each_unique(&sa, batch_object_cb, &cb); - sha1_array_clear(&sa); + oid_array_clear(&sa); return 0; } diff --git a/builtin/checkout.c b/builtin/checkout.c index 3ecc47bec0..bfa5419f33 100644 --- a/builtin/checkout.c +++ b/builtin/checkout.c @@ -908,11 +908,10 @@ static int check_tracking_name(struct remote *remote, void *cb_data) static const char *unique_tracking_name(const char *name, struct object_id *oid) { struct tracking_name_data cb_data = { NULL, NULL, NULL, 1 }; - char src_ref[PATH_MAX]; - snprintf(src_ref, PATH_MAX, "refs/heads/%s", name); - cb_data.src_ref = src_ref; + cb_data.src_ref = xstrfmt("refs/heads/%s", name); cb_data.dst_oid = oid; for_each_remote(check_tracking_name, &cb_data); + free(cb_data.src_ref); if (cb_data.unique) return cb_data.dst_ref; free(cb_data.dst_ref); diff --git a/builtin/commit.c b/builtin/commit.c index 4e288bc513..1d805f5da8 100644 --- a/builtin/commit.c +++ b/builtin/commit.c @@ -821,9 +821,9 @@ static int prepare_to_commit(const char *index_file, const char *prefix, "If this is not correct, please remove the file\n" " %s\n" "and try again.\n"), - git_path(whence == FROM_MERGE - ? "MERGE_HEAD" - : "CHERRY_PICK_HEAD")); + whence == FROM_MERGE ? + git_path_merge_head() : + git_path_cherry_pick_head()); } fprintf(s->fp, "\n"); @@ -1404,7 +1404,7 @@ int cmd_status(int argc, const char **argv, const char *prefix) static const char *implicit_ident_advice(void) { - char *user_config = expand_user_path("~/.gitconfig"); + char *user_config = expand_user_path("~/.gitconfig", 0); char *xdg_config = xdg_config_home("config"); int config_exists = file_exists(user_config) || file_exists(xdg_config); diff --git a/builtin/config.c b/builtin/config.c index 4f49a0edb9..3a554ad50c 100644 --- a/builtin/config.c +++ b/builtin/config.c @@ -26,7 +26,8 @@ static int use_global_config, use_system_config, use_local_config; static struct git_config_source given_config_source; static int actions, types; static int end_null; -static int respect_includes = -1; +static int respect_includes_opt = -1; +static struct config_options config_options; static int show_origin; #define ACTION_GET (1<<0) @@ -81,7 +82,7 @@ static struct option builtin_config_options[] = { OPT_GROUP(N_("Other")), OPT_BOOL('z', "null", &end_null, N_("terminate values with NUL byte")), OPT_BOOL(0, "name-only", &omit_values, N_("show variable names only")), - OPT_BOOL(0, "includes", &respect_includes, N_("respect include directives on lookup")), + OPT_BOOL(0, "includes", &respect_includes_opt, N_("respect include directives on lookup")), OPT_BOOL(0, "show-origin", &show_origin, N_("show origin of config (file, standard input, blob, command line)")), OPT_END(), }; @@ -242,7 +243,7 @@ static int get_value(const char *key_, const char *regex_) } git_config_with_options(collect_config, &values, - &given_config_source, respect_includes); + &given_config_source, &config_options); ret = !values.nr; @@ -320,7 +321,7 @@ static void get_color(const char *var, const char *def_color) get_color_found = 0; parsed_color[0] = '\0'; git_config_with_options(git_get_color_config, NULL, - &given_config_source, respect_includes); + &given_config_source, &config_options); if (!get_color_found && def_color) { if (color_parse(def_color, parsed_color) < 0) @@ -352,7 +353,7 @@ static int get_colorbool(const char *var, int print) get_diff_color_found = -1; get_color_ui_found = -1; git_config_with_options(git_get_colorbool_config, NULL, - &given_config_source, respect_includes); + &given_config_source, &config_options); if (get_colorbool_found < 0) { if (!strcmp(get_colorbool_slot, "color.diff")) @@ -441,7 +442,7 @@ static int get_urlmatch(const char *var, const char *url) } git_config_with_options(urlmatch_config_entry, &config, - &given_config_source, respect_includes); + &given_config_source, &config_options); ret = !values.nr; @@ -502,7 +503,7 @@ int cmd_config(int argc, const char **argv, const char *prefix) } if (use_global_config) { - char *user_config = expand_user_path("~/.gitconfig"); + char *user_config = expand_user_path("~/.gitconfig", 0); char *xdg_config = xdg_config_home("config"); if (!user_config) @@ -530,8 +531,10 @@ int cmd_config(int argc, const char **argv, const char *prefix) prefix_filename(prefix, given_config_source.file); } - if (respect_includes == -1) - respect_includes = !given_config_source.file; + if (respect_includes_opt == -1) + config_options.respect_includes = !given_config_source.file; + else + config_options.respect_includes = respect_includes_opt; if (end_null) { term = '\0'; @@ -578,7 +581,7 @@ int cmd_config(int argc, const char **argv, const char *prefix) check_argc(argc, 0, 0); if (git_config_with_options(show_all_config, NULL, &given_config_source, - respect_includes) < 0) { + &config_options) < 0) { if (given_config_source.file) die_errno("unable to read config file '%s'", given_config_source.file); @@ -597,8 +600,9 @@ int cmd_config(int argc, const char **argv, const char *prefix) if (given_config_source.blob) die("editing blobs is not supported"); git_config(git_default_config, NULL); - config_file = xstrdup(given_config_source.file ? - given_config_source.file : git_path("config")); + config_file = given_config_source.file ? + xstrdup(given_config_source.file) : + git_pathdup("config"); if (use_global_config) { int fd = open(config_file, O_CREAT | O_EXCL | O_WRONLY, 0666); if (fd >= 0) { diff --git a/builtin/diff.c b/builtin/diff.c index 3d64b85337..d184aafab9 100644 --- a/builtin/diff.c +++ b/builtin/diff.c @@ -21,7 +21,7 @@ #define DIFF_NO_INDEX_IMPLICIT 2 struct blobinfo { - unsigned char sha1[20]; + struct object_id oid; const char *name; unsigned mode; }; @@ -31,22 +31,22 @@ static const char builtin_diff_usage[] = static void stuff_change(struct diff_options *opt, unsigned old_mode, unsigned new_mode, - const unsigned char *old_sha1, - const unsigned char *new_sha1, - int old_sha1_valid, - int new_sha1_valid, + const struct object_id *old_oid, + const struct object_id *new_oid, + int old_oid_valid, + int new_oid_valid, const char *old_name, const char *new_name) { struct diff_filespec *one, *two; - if (!is_null_sha1(old_sha1) && !is_null_sha1(new_sha1) && - !hashcmp(old_sha1, new_sha1) && (old_mode == new_mode)) + if (!is_null_oid(old_oid) && !is_null_oid(new_oid) && + !oidcmp(old_oid, new_oid) && (old_mode == new_mode)) return; if (DIFF_OPT_TST(opt, REVERSE_DIFF)) { SWAP(old_mode, new_mode); - SWAP(old_sha1, new_sha1); + SWAP(old_oid, new_oid); SWAP(old_name, new_name); } @@ -57,8 +57,8 @@ static void stuff_change(struct diff_options *opt, one = alloc_filespec(old_name); two = alloc_filespec(new_name); - fill_filespec(one, old_sha1, old_sha1_valid, old_mode); - fill_filespec(two, new_sha1, new_sha1_valid, new_mode); + fill_filespec(one, old_oid->hash, old_oid_valid, old_mode); + fill_filespec(two, new_oid->hash, new_oid_valid, new_mode); diff_queue(&diff_queued_diff, one, two); } @@ -89,7 +89,7 @@ static int builtin_diff_b_f(struct rev_info *revs, stuff_change(&revs->diffopt, blob[0].mode, canon_mode(st.st_mode), - blob[0].sha1, null_sha1, + &blob[0].oid, &null_oid, 1, 0, path, path); diffcore_std(&revs->diffopt); @@ -114,7 +114,7 @@ static int builtin_diff_blobs(struct rev_info *revs, stuff_change(&revs->diffopt, blob[0].mode, blob[1].mode, - blob[0].sha1, blob[1].sha1, + &blob[0].oid, &blob[1].oid, 1, 1, blob[0].name, blob[1].name); diffcore_std(&revs->diffopt); @@ -160,7 +160,7 @@ static int builtin_diff_tree(struct rev_info *revs, struct object_array_entry *ent0, struct object_array_entry *ent1) { - const unsigned char *(sha1[2]); + const struct object_id *(oid[2]); int swap = 0; if (argc > 1) @@ -172,9 +172,9 @@ static int builtin_diff_tree(struct rev_info *revs, */ if (ent1->item->flags & UNINTERESTING) swap = 1; - sha1[swap] = ent0->item->oid.hash; - sha1[1 - swap] = ent1->item->oid.hash; - diff_tree_sha1(sha1[0], sha1[1], "", &revs->diffopt); + oid[swap] = &ent0->item->oid; + oid[1 - swap] = &ent1->item->oid; + diff_tree_sha1(oid[0]->hash, oid[1]->hash, "", &revs->diffopt); log_tree_diff_flush(revs); return 0; } @@ -184,7 +184,7 @@ static int builtin_diff_combined(struct rev_info *revs, struct object_array_entry *ent, int ents) { - struct sha1_array parents = SHA1_ARRAY_INIT; + struct oid_array parents = OID_ARRAY_INIT; int i; if (argc > 1) @@ -193,10 +193,10 @@ static int builtin_diff_combined(struct rev_info *revs, if (!revs->dense_combined_merges && !revs->combine_merges) revs->dense_combined_merges = revs->combine_merges = 1; for (i = 1; i < ents; i++) - sha1_array_append(&parents, ent[i].item->oid.hash); + oid_array_append(&parents, &ent[i].item->oid); diff_tree_combined(ent[0].item->oid.hash, &parents, revs->dense_combined_merges, revs); - sha1_array_clear(&parents); + oid_array_clear(&parents); return 0; } @@ -408,7 +408,7 @@ int cmd_diff(int argc, const char **argv, const char *prefix) } else if (obj->type == OBJ_BLOB) { if (2 <= blobs) die(_("more than two blobs given: '%s'"), name); - hashcpy(blob[blobs].sha1, obj->oid.hash); + hashcpy(blob[blobs].oid.hash, obj->oid.hash); blob[blobs].name = name; blob[blobs].mode = entry->mode; blobs++; diff --git a/builtin/difftool.c b/builtin/difftool.c index 25e54ad3ed..1354d0e462 100644 --- a/builtin/difftool.c +++ b/builtin/difftool.c @@ -297,6 +297,19 @@ static char *get_symlink(const struct object_id *oid, const char *path) return data; } +static int checkout_path(unsigned mode, struct object_id *oid, + const char *path, const struct checkout *state) +{ + struct cache_entry *ce; + int ret; + + ce = make_cache_entry(mode, oid->hash, path, 0, 0); + ret = checkout_entry(ce, state, NULL); + + free(ce); + return ret; +} + static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix, int argc, const char **argv) { @@ -305,8 +318,8 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix, struct strbuf rpath = STRBUF_INIT, buf = STRBUF_INIT; struct strbuf ldir = STRBUF_INIT, rdir = STRBUF_INIT; struct strbuf wtdir = STRBUF_INIT; + char *lbase_dir, *rbase_dir; size_t ldir_len, rdir_len, wtdir_len; - struct cache_entry *ce = xcalloc(1, sizeof(ce) + PATH_MAX + 1); const char *workdir, *tmp; int ret = 0, i; FILE *fp; @@ -339,11 +352,11 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix, memset(&wtindex, 0, sizeof(wtindex)); memset(&lstate, 0, sizeof(lstate)); - lstate.base_dir = ldir.buf; + lstate.base_dir = lbase_dir = xstrdup(ldir.buf); lstate.base_dir_len = ldir.len; lstate.force = 1; memset(&rstate, 0, sizeof(rstate)); - rstate.base_dir = rdir.buf; + rstate.base_dir = rbase_dir = xstrdup(rdir.buf); rstate.base_dir_len = rdir.len; rstate.force = 1; @@ -377,7 +390,6 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix, struct object_id loid, roid; char status; const char *src_path, *dst_path; - size_t src_path_len, dst_path_len; if (starts_with(info.buf, "::")) die(N_("combined diff formats('-c' and '--cc') are " @@ -390,17 +402,14 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix, if (strbuf_getline_nul(&lpath, fp)) break; src_path = lpath.buf; - src_path_len = lpath.len; i++; if (status != 'C' && status != 'R') { dst_path = src_path; - dst_path_len = src_path_len; } else { if (strbuf_getline_nul(&rpath, fp)) break; dst_path = rpath.buf; - dst_path_len = rpath.len; } if (S_ISGITLINK(lmode) || S_ISGITLINK(rmode)) { @@ -430,11 +439,7 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix, } if (lmode && status != 'C') { - ce->ce_mode = lmode; - oidcpy(&ce->oid, &loid); - strcpy(ce->name, src_path); - ce->ce_namelen = src_path_len; - if (checkout_entry(ce, &lstate, NULL)) + if (checkout_path(lmode, &loid, src_path, &lstate)) return error("could not write '%s'", src_path); } @@ -451,11 +456,7 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix, hashmap_add(&working_tree_dups, entry); if (!use_wt_file(workdir, dst_path, &roid)) { - ce->ce_mode = rmode; - oidcpy(&ce->oid, &roid); - strcpy(ce->name, dst_path); - ce->ce_namelen = dst_path_len; - if (checkout_entry(ce, &rstate, NULL)) + if (checkout_path(rmode, &roid, dst_path, &rstate)) return error("could not write '%s'", dst_path); } else if (!is_null_oid(&roid)) { @@ -625,7 +626,8 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix, exit_cleanup(tmpdir, rc); finish: - free(ce); + free(lbase_dir); + free(rbase_dir); strbuf_release(&ldir); strbuf_release(&rdir); strbuf_release(&wtdir); diff --git a/builtin/fetch-pack.c b/builtin/fetch-pack.c index 2a1c1c213f..366b9d13f9 100644 --- a/builtin/fetch-pack.c +++ b/builtin/fetch-pack.c @@ -50,7 +50,7 @@ int cmd_fetch_pack(int argc, const char **argv, const char *prefix) char **pack_lockfile_ptr = NULL; struct child_process *conn; struct fetch_pack_args args; - struct sha1_array shallow = SHA1_ARRAY_INIT; + struct oid_array shallow = OID_ARRAY_INIT; struct string_list deepen_not = STRING_LIST_INIT_DUP; packet_trace_identity("fetch-pack"); diff --git a/builtin/fetch.c b/builtin/fetch.c index b5ad09d046..5f2c2ab23e 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -421,7 +421,7 @@ static int s_update_ref(const char *action, struct ref *ref, int check_old) { - char msg[1024]; + char *msg; char *rla = getenv("GIT_REFLOG_ACTION"); struct ref_transaction *transaction; struct strbuf err = STRBUF_INIT; @@ -431,7 +431,7 @@ static int s_update_ref(const char *action, return 0; if (!rla) rla = default_rla.buf; - snprintf(msg, sizeof(msg), "%s: %s", rla, action); + msg = xstrfmt("%s: %s", rla, action); transaction = ref_transaction_begin(&err); if (!transaction || @@ -449,11 +449,13 @@ static int s_update_ref(const char *action, ref_transaction_free(transaction); strbuf_release(&err); + free(msg); return 0; fail: ref_transaction_free(transaction); error("%s", err.buf); strbuf_release(&err); + free(msg); return df_conflict ? STORE_REF_ERROR_DF_CONFLICT : STORE_REF_ERROR_OTHER; } @@ -659,7 +661,7 @@ static int update_local_ref(struct ref *ref, if ((recurse_submodules != RECURSE_SUBMODULES_OFF) && (recurse_submodules != RECURSE_SUBMODULES_ON)) - check_for_new_submodule_commits(ref->new_oid.hash); + check_for_new_submodule_commits(&ref->new_oid); r = s_update_ref(msg, ref, 0); format_display(display, r ? '!' : '*', what, r ? _("unable to update local ref") : NULL, @@ -675,7 +677,7 @@ static int update_local_ref(struct ref *ref, strbuf_add_unique_abbrev(&quickref, ref->new_oid.hash, DEFAULT_ABBREV); if ((recurse_submodules != RECURSE_SUBMODULES_OFF) && (recurse_submodules != RECURSE_SUBMODULES_ON)) - check_for_new_submodule_commits(ref->new_oid.hash); + check_for_new_submodule_commits(&ref->new_oid); r = s_update_ref("fast-forward", ref, 1); format_display(display, r ? '!' : ' ', quickref.buf, r ? _("unable to update local ref") : NULL, @@ -690,7 +692,7 @@ static int update_local_ref(struct ref *ref, strbuf_add_unique_abbrev(&quickref, ref->new_oid.hash, DEFAULT_ABBREV); if ((recurse_submodules != RECURSE_SUBMODULES_OFF) && (recurse_submodules != RECURSE_SUBMODULES_ON)) - check_for_new_submodule_commits(ref->new_oid.hash); + check_for_new_submodule_commits(&ref->new_oid); r = s_update_ref("forced-update", ref, 1); format_display(display, r ? '!' : '+', quickref.buf, r ? _("unable to update local ref") : _("forced update"), diff --git a/builtin/fsck.c b/builtin/fsck.c index f76e4163ab..b5e13a4556 100644 --- a/builtin/fsck.c +++ b/builtin/fsck.c @@ -771,6 +771,7 @@ int cmd_fsck(int argc, const char **argv, const char *prefix) } if (keep_cache_objects) { + verify_index_checksum = 1; read_cache(); for (i = 0; i < active_nr; i++) { unsigned int mode; diff --git a/builtin/gc.c b/builtin/gc.c index c2c61a57bb..91f7696a85 100644 --- a/builtin/gc.c +++ b/builtin/gc.c @@ -135,8 +135,6 @@ static int too_many_loose_objects(void) * distributed, we can check only one and get a reasonable * estimate. */ - char path[PATH_MAX]; - const char *objdir = get_object_directory(); DIR *dir; struct dirent *ent; int auto_threshold; @@ -146,11 +144,7 @@ static int too_many_loose_objects(void) if (gc_auto_threshold <= 0) return 0; - if (sizeof(path) <= snprintf(path, sizeof(path), "%s/17", objdir)) { - warning(_("insanely long object directory %.*s"), 50, objdir); - return 0; - } - dir = opendir(path); + dir = opendir(git_path("objects/17")); if (!dir) return 0; @@ -238,7 +232,7 @@ static int need_to_gc(void) static const char *lock_repo_for_gc(int force, pid_t* ret_pid) { static struct lock_file lock; - char my_host[128]; + char my_host[HOST_NAME_MAX + 1]; struct strbuf sb = STRBUF_INIT; struct stat st; uintmax_t pid; @@ -250,15 +244,19 @@ static const char *lock_repo_for_gc(int force, pid_t* ret_pid) /* already locked */ return NULL; - if (gethostname(my_host, sizeof(my_host))) + if (xgethostname(my_host, sizeof(my_host))) xsnprintf(my_host, sizeof(my_host), "unknown"); pidfile_path = git_pathdup("gc.pid"); fd = hold_lock_file_for_update(&lock, pidfile_path, LOCK_DIE_ON_ERROR); if (!force) { - static char locking_host[128]; + static char locking_host[HOST_NAME_MAX + 1]; + static char *scan_fmt; int should_exit; + + if (!scan_fmt) + scan_fmt = xstrfmt("%s %%%dc", "%"SCNuMAX, HOST_NAME_MAX); fp = fopen(pidfile_path, "r"); memset(locking_host, 0, sizeof(locking_host)); should_exit = @@ -274,7 +272,7 @@ static const char *lock_repo_for_gc(int force, pid_t* ret_pid) * running. */ time(NULL) - st.st_mtime <= 12 * 3600 && - fscanf(fp, "%"SCNuMAX" %127c", &pid, locking_host) == 2 && + fscanf(fp, scan_fmt, &pid, locking_host) == 2 && /* be gentle to concurrent "gc" on remote hosts */ (strcmp(locking_host, my_host) || !kill(pid, 0) || errno == EPERM); if (fp != NULL) diff --git a/builtin/grep.c b/builtin/grep.c index 65070c52fc..3ffb5b4e81 100644 --- a/builtin/grep.c +++ b/builtin/grep.c @@ -1299,6 +1299,7 @@ int cmd_grep(int argc, const char **argv, const char *prefix) hit |= wait_all(); if (hit && show_in_pager) run_pager(&opt, prefix); + clear_pathspec(&pathspec); free_grep_patterns(&opt); return !hit; } diff --git a/builtin/index-pack.c b/builtin/index-pack.c index 88d205f858..4ff567db47 100644 --- a/builtin/index-pack.c +++ b/builtin/index-pack.c @@ -307,14 +307,15 @@ static const char *open_pack_file(const char *pack_name) if (from_stdin) { input_fd = 0; if (!pack_name) { - static char tmp_file[PATH_MAX]; - output_fd = odb_mkstemp(tmp_file, sizeof(tmp_file), + struct strbuf tmp_file = STRBUF_INIT; + output_fd = odb_mkstemp(&tmp_file, "pack/tmp_pack_XXXXXX"); - pack_name = xstrdup(tmp_file); - } else + pack_name = strbuf_detach(&tmp_file, NULL); + } else { output_fd = open(pack_name, O_CREAT|O_EXCL|O_RDWR, 0600); - if (output_fd < 0) - die_errno(_("unable to create '%s'"), pack_name); + if (output_fd < 0) + die_errno(_("unable to create '%s'"), pack_name); + } nothread_data.pack_fd = output_fd; } else { input_fd = open(pack_name, O_RDONLY); @@ -809,6 +810,8 @@ static void sha1_object(const void *data, struct object_entry *obj_entry, unsigned long has_size; read_lock(); has_type = sha1_object_info(sha1, &has_size); + if (has_type < 0) + die(_("cannot read existing object info %s"), sha1_to_hex(sha1)); if (has_type != type || has_size != size) die(_("SHA1 COLLISION FOUND WITH %s !"), sha1_to_hex(sha1)); has_data = read_sha1_file(sha1, &has_type, &has_size); @@ -1442,10 +1445,11 @@ static void final(const char *final_pack_name, const char *curr_pack_name, if (!from_stdin) { printf("%s\n", sha1_to_hex(sha1)); } else { - char buf[48]; - int len = snprintf(buf, sizeof(buf), "%s\t%s\n", - report, sha1_to_hex(sha1)); - write_or_die(1, buf, len); + struct strbuf buf = STRBUF_INIT; + + strbuf_addf(&buf, "%s\t%s\n", report, sha1_to_hex(sha1)); + write_or_die(1, buf.buf, buf.len); + strbuf_release(&buf); /* * Let's just mimic git-unpack-objects here and write diff --git a/builtin/log.c b/builtin/log.c index b3b10cc1ed..ec3258368c 100644 --- a/builtin/log.c +++ b/builtin/log.c @@ -110,6 +110,8 @@ static void init_log_defaults(void) { init_grep_defaults(); init_diff_ui_defaults(); + + decoration_style = auto_decoration_style(); } static void cmd_log_init_defaults(struct rev_info *rev) @@ -410,8 +412,6 @@ static int git_log_config(const char *var, const char *value, void *cb) if (decoration_style < 0) decoration_style = 0; /* maybe warn? */ return 0; - } else { - decoration_style = auto_decoration_style(); } if (!strcmp(var, "log.showroot")) { default_show_root = git_config_bool(var, value); diff --git a/builtin/ls-files.c b/builtin/ls-files.c index d449e46db5..a6c70dbe9e 100644 --- a/builtin/ls-files.c +++ b/builtin/ls-files.c @@ -15,6 +15,7 @@ #include "string-list.h" #include "pathspec.h" #include "run-command.h" +#include "submodule.h" static int abbrev; static int show_deleted; @@ -202,6 +203,10 @@ static void show_gitlink(const struct cache_entry *ce) { struct child_process cp = CHILD_PROCESS_INIT; int status; + char *dir; + + prepare_submodule_repo_env(&cp.env_array); + argv_array_push(&cp.env_array, GIT_DIR_ENVIRONMENT); if (prefix_len) argv_array_pushf(&cp.env_array, "%s=%s", @@ -217,8 +222,10 @@ static void show_gitlink(const struct cache_entry *ce) argv_array_pushv(&cp.args, submodule_options.argv); cp.git_cmd = 1; - cp.dir = ce->name; + dir = mkpathdup("%s/%s", get_git_work_tree(), ce->name); + cp.dir = dir; status = run_command(&cp); + free(dir); if (status) exit(status); } diff --git a/builtin/ls-remote.c b/builtin/ls-remote.c index 66cdd45cc1..b2d7d5ce68 100644 --- a/builtin/ls-remote.c +++ b/builtin/ls-remote.c @@ -17,17 +17,19 @@ static const char * const ls_remote_usage[] = { static int tail_match(const char **pattern, const char *path) { const char *p; - char pathbuf[PATH_MAX]; + char *pathbuf; if (!pattern) return 1; /* no restriction */ - if (snprintf(pathbuf, sizeof(pathbuf), "/%s", path) > sizeof(pathbuf)) - return error("insanely long ref %.*s...", 20, path); + pathbuf = xstrfmt("/%s", path); while ((p = *(pattern++)) != NULL) { - if (!wildmatch(p, pathbuf, 0, NULL)) + if (!wildmatch(p, pathbuf, 0, NULL)) { + free(pathbuf); return 1; + } } + free(pathbuf); return 0; } diff --git a/builtin/merge-index.c b/builtin/merge-index.c index 2d1b6db6bd..c99443b095 100644 --- a/builtin/merge-index.c +++ b/builtin/merge-index.c @@ -9,7 +9,7 @@ static int merge_entry(int pos, const char *path) { int found; const char *arguments[] = { pgm, "", "", "", path, "", "", "", NULL }; - char hexbuf[4][GIT_SHA1_HEXSZ + 1]; + char hexbuf[4][GIT_MAX_HEXSZ + 1]; char ownbuf[4][60]; if (pos >= active_nr) diff --git a/builtin/merge.c b/builtin/merge.c index 95572b1810..703827f006 100644 --- a/builtin/merge.c +++ b/builtin/merge.c @@ -1255,7 +1255,7 @@ int cmd_merge(int argc, const char **argv, const char *prefix) if (verify_signatures) { for (p = remoteheads; p; p = p->next) { struct commit *commit = p->item; - char hex[GIT_SHA1_HEXSZ + 1]; + char hex[GIT_MAX_HEXSZ + 1]; struct signature_check signature_check; memset(&signature_check, 0, sizeof(signature_check)); diff --git a/builtin/name-rev.c b/builtin/name-rev.c index 8bdc3eaa6f..92a5d8a5d2 100644 --- a/builtin/name-rev.c +++ b/builtin/name-rev.c @@ -238,10 +238,9 @@ static const char *get_exact_ref_match(const struct object *o) return NULL; } -/* returns a static buffer */ -static const char *get_rev_name(const struct object *o) +/* may return a constant string or use "buf" as scratch space */ +static const char *get_rev_name(const struct object *o, struct strbuf *buf) { - static char buffer[1024]; struct rev_name *n; struct commit *c; @@ -258,10 +257,9 @@ static const char *get_rev_name(const struct object *o) int len = strlen(n->tip_name); if (len > 2 && !strcmp(n->tip_name + len - 2, "^0")) len -= 2; - snprintf(buffer, sizeof(buffer), "%.*s~%d", len, n->tip_name, - n->generation); - - return buffer; + strbuf_reset(buf); + strbuf_addf(buf, "%.*s~%d", len, n->tip_name, n->generation); + return buf->buf; } } @@ -271,10 +269,11 @@ static void show_name(const struct object *obj, { const char *name; const struct object_id *oid = &obj->oid; + struct strbuf buf = STRBUF_INIT; if (!name_only) printf("%s ", caller_name ? caller_name : oid_to_hex(oid)); - name = get_rev_name(obj); + name = get_rev_name(obj, &buf); if (name) printf("%s\n", name); else if (allow_undefined) @@ -283,6 +282,7 @@ static void show_name(const struct object *obj, printf("%s\n", find_unique_abbrev(oid->hash, DEFAULT_ABBREV)); else die("cannot describe '%s'", oid_to_hex(oid)); + strbuf_release(&buf); } static char const * const name_rev_usage[] = { @@ -294,6 +294,7 @@ static char const * const name_rev_usage[] = { static void name_rev_line(char *p, struct name_ref_data *data) { + struct strbuf buf = STRBUF_INIT; int forty = 0; char *p_start; for (p_start = p; *p; p++) { @@ -314,7 +315,7 @@ static void name_rev_line(char *p, struct name_ref_data *data) struct object *o = lookup_object(sha1); if (o) - name = get_rev_name(o); + name = get_rev_name(o, &buf); } *(p+1) = c; @@ -332,6 +333,8 @@ static void name_rev_line(char *p, struct name_ref_data *data) /* flush */ if (p_start != p) fwrite(p_start, p - p_start, 1, stdout); + + strbuf_release(&buf); } int cmd_name_rev(int argc, const char **argv, const char *prefix) diff --git a/builtin/notes.c b/builtin/notes.c index 0513f7455d..7b891471c4 100644 --- a/builtin/notes.c +++ b/builtin/notes.c @@ -554,7 +554,7 @@ static int append_edit(int argc, const char **argv, const char *prefix) struct notes_tree *t; unsigned char object[20], new_note[20]; const unsigned char *note; - char logmsg[100]; + char *logmsg; const char * const *usage; struct note_data d = { 0, 0, NULL, STRBUF_INIT }; struct option options[] = { @@ -618,17 +618,16 @@ static int append_edit(int argc, const char **argv, const char *prefix) write_note_data(&d, new_note); if (add_note(t, object, new_note, combine_notes_overwrite)) die("BUG: combine_notes_overwrite failed"); - snprintf(logmsg, sizeof(logmsg), "Notes added by 'git notes %s'", - argv[0]); + logmsg = xstrfmt("Notes added by 'git notes %s'", argv[0]); } else { fprintf(stderr, _("Removing note for object %s\n"), sha1_to_hex(object)); remove_note(t, object); - snprintf(logmsg, sizeof(logmsg), "Notes removed by 'git notes %s'", - argv[0]); + logmsg = xstrfmt("Notes removed by 'git notes %s'", argv[0]); } commit_notes(t, logmsg); + free(logmsg); free_note_data(&d); free_notes(t); return 0; diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c index 84af7c2324..0fe35d1b5a 100644 --- a/builtin/pack-objects.c +++ b/builtin/pack-objects.c @@ -2672,16 +2672,16 @@ static int has_sha1_pack_kept_or_nonlocal(const unsigned char *sha1) * * This is filled by get_object_list. */ -static struct sha1_array recent_objects; +static struct oid_array recent_objects; -static int loosened_object_can_be_discarded(const unsigned char *sha1, +static int loosened_object_can_be_discarded(const struct object_id *oid, unsigned long mtime) { if (!unpack_unreachable_expiration) return 0; if (mtime > unpack_unreachable_expiration) return 0; - if (sha1_array_lookup(&recent_objects, sha1) >= 0) + if (oid_array_lookup(&recent_objects, oid) >= 0) return 0; return 1; } @@ -2690,7 +2690,7 @@ static void loosen_unused_packed_objects(struct rev_info *revs) { struct packed_git *p; uint32_t i; - const unsigned char *sha1; + struct object_id oid; for (p = packed_git; p; p = p->next) { if (!p->pack_local || p->pack_keep) @@ -2700,11 +2700,11 @@ static void loosen_unused_packed_objects(struct rev_info *revs) die("cannot open pack index"); for (i = 0; i < p->num_objects; i++) { - sha1 = nth_packed_object_sha1(p, i); - if (!packlist_find(&to_pack, sha1, NULL) && - !has_sha1_pack_kept_or_nonlocal(sha1) && - !loosened_object_can_be_discarded(sha1, p->mtime)) - if (force_object_loose(sha1, p->mtime)) + nth_packed_object_oid(&oid, p, i); + if (!packlist_find(&to_pack, oid.hash, NULL) && + !has_sha1_pack_kept_or_nonlocal(oid.hash) && + !loosened_object_can_be_discarded(&oid, p->mtime)) + if (force_object_loose(oid.hash, p->mtime)) die("unable to force loose object"); } } @@ -2743,12 +2743,12 @@ static void record_recent_object(struct object *obj, const char *name, void *data) { - sha1_array_append(&recent_objects, obj->oid.hash); + oid_array_append(&recent_objects, &obj->oid); } static void record_recent_commit(struct commit *commit, void *data) { - sha1_array_append(&recent_objects, commit->object.oid.hash); + oid_array_append(&recent_objects, &commit->object.oid); } static void get_object_list(int ac, const char **av) @@ -2816,7 +2816,7 @@ static void get_object_list(int ac, const char **av) if (unpack_unreachable) loosen_unused_packed_objects(&revs); - sha1_array_clear(&recent_objects); + oid_array_clear(&recent_objects); } static int option_parse_index_version(const struct option *opt, diff --git a/builtin/pack-refs.c b/builtin/pack-refs.c index 39f9a55d16..b106a392a4 100644 --- a/builtin/pack-refs.c +++ b/builtin/pack-refs.c @@ -17,5 +17,5 @@ int cmd_pack_refs(int argc, const char **argv, const char *prefix) }; if (parse_options(argc, argv, prefix, opts, pack_refs_usage, 0)) usage_with_options(pack_refs_usage, opts); - return pack_refs(flags); + return refs_pack_refs(get_main_ref_store(), flags); } diff --git a/builtin/patch-id.c b/builtin/patch-id.c index a84d0003a3..81552e02e4 100644 --- a/builtin/patch-id.c +++ b/builtin/patch-id.c @@ -55,7 +55,7 @@ static int scan_hunk_header(const char *p, int *p_before, int *p_after) static void flush_one_hunk(struct object_id *result, git_SHA_CTX *ctx) { - unsigned char hash[GIT_SHA1_RAWSZ]; + unsigned char hash[GIT_MAX_RAWSZ]; unsigned short carry = 0; int i; diff --git a/builtin/pull.c b/builtin/pull.c index 3ecb881b0b..dd1a4a94e4 100644 --- a/builtin/pull.c +++ b/builtin/pull.c @@ -330,21 +330,21 @@ static int git_pull_config(const char *var, const char *value, void *cb) * Appends merge candidates from FETCH_HEAD that are not marked not-for-merge * into merge_heads. */ -static void get_merge_heads(struct sha1_array *merge_heads) +static void get_merge_heads(struct oid_array *merge_heads) { - const char *filename = git_path("FETCH_HEAD"); + const char *filename = git_path_fetch_head(); FILE *fp; struct strbuf sb = STRBUF_INIT; - unsigned char sha1[GIT_SHA1_RAWSZ]; + struct object_id oid; if (!(fp = fopen(filename, "r"))) die_errno(_("could not open '%s' for reading"), filename); while (strbuf_getline_lf(&sb, fp) != EOF) { - if (get_sha1_hex(sb.buf, sha1)) + if (get_oid_hex(sb.buf, &oid)) continue; /* invalid line: does not start with SHA1 */ if (starts_with(sb.buf + GIT_SHA1_HEXSZ, "\tnot-for-merge\t")) continue; /* ref is not-for-merge */ - sha1_array_append(merge_heads, sha1); + oid_array_append(merge_heads, &oid); } fclose(fp); strbuf_release(&sb); @@ -514,8 +514,8 @@ static int run_fetch(const char *repo, const char **refspecs) /** * "Pulls into void" by branching off merge_head. */ -static int pull_into_void(const unsigned char *merge_head, - const unsigned char *curr_head) +static int pull_into_void(const struct object_id *merge_head, + const struct object_id *curr_head) { /* * Two-way merge: we treat the index as based on an empty tree, @@ -523,10 +523,10 @@ static int pull_into_void(const unsigned char *merge_head, * index/worktree changes that the user already made on the unborn * branch. */ - if (checkout_fast_forward(EMPTY_TREE_SHA1_BIN, merge_head, 0)) + if (checkout_fast_forward(EMPTY_TREE_SHA1_BIN, merge_head->hash, 0)) return 1; - if (update_ref("initial pull", "HEAD", merge_head, curr_head, 0, UPDATE_REFS_DIE_ON_ERR)) + if (update_ref("initial pull", "HEAD", merge_head->hash, curr_head->hash, 0, UPDATE_REFS_DIE_ON_ERR)) return 1; return 0; @@ -647,7 +647,7 @@ static const char *get_tracking_branch(const char *remote, const char *refspec) * current branch forked from its remote tracking branch. Returns 0 on success, * -1 on failure. */ -static int get_rebase_fork_point(unsigned char *fork_point, const char *repo, +static int get_rebase_fork_point(struct object_id *fork_point, const char *repo, const char *refspec) { int ret; @@ -678,7 +678,7 @@ static int get_rebase_fork_point(unsigned char *fork_point, const char *repo, if (ret) goto cleanup; - ret = get_sha1_hex(sb.buf, fork_point); + ret = get_oid_hex(sb.buf, fork_point); if (ret) goto cleanup; @@ -691,24 +691,24 @@ static int get_rebase_fork_point(unsigned char *fork_point, const char *repo, * Sets merge_base to the octopus merge base of curr_head, merge_head and * fork_point. Returns 0 if a merge base is found, 1 otherwise. */ -static int get_octopus_merge_base(unsigned char *merge_base, - const unsigned char *curr_head, - const unsigned char *merge_head, - const unsigned char *fork_point) +static int get_octopus_merge_base(struct object_id *merge_base, + const struct object_id *curr_head, + const struct object_id *merge_head, + const struct object_id *fork_point) { struct commit_list *revs = NULL, *result; - commit_list_insert(lookup_commit_reference(curr_head), &revs); - commit_list_insert(lookup_commit_reference(merge_head), &revs); - if (!is_null_sha1(fork_point)) - commit_list_insert(lookup_commit_reference(fork_point), &revs); + commit_list_insert(lookup_commit_reference(curr_head->hash), &revs); + commit_list_insert(lookup_commit_reference(merge_head->hash), &revs); + if (!is_null_oid(fork_point)) + commit_list_insert(lookup_commit_reference(fork_point->hash), &revs); result = reduce_heads(get_octopus_merge_bases(revs)); free_commit_list(revs); if (!result) return 1; - hashcpy(merge_base, result->item->object.oid.hash); + oidcpy(merge_base, &result->item->object.oid); return 0; } @@ -717,16 +717,16 @@ static int get_octopus_merge_base(unsigned char *merge_base, * fork point calculated by get_rebase_fork_point(), runs git-rebase with the * appropriate arguments and returns its exit status. */ -static int run_rebase(const unsigned char *curr_head, - const unsigned char *merge_head, - const unsigned char *fork_point) +static int run_rebase(const struct object_id *curr_head, + const struct object_id *merge_head, + const struct object_id *fork_point) { int ret; - unsigned char oct_merge_base[GIT_SHA1_RAWSZ]; + struct object_id oct_merge_base; struct argv_array args = ARGV_ARRAY_INIT; - if (!get_octopus_merge_base(oct_merge_base, curr_head, merge_head, fork_point)) - if (!is_null_sha1(fork_point) && !hashcmp(oct_merge_base, fork_point)) + if (!get_octopus_merge_base(&oct_merge_base, curr_head, merge_head, fork_point)) + if (!is_null_oid(fork_point) && !oidcmp(&oct_merge_base, fork_point)) fork_point = NULL; argv_array_push(&args, "rebase"); @@ -754,12 +754,12 @@ static int run_rebase(const unsigned char *curr_head, warning(_("ignoring --verify-signatures for rebase")); argv_array_push(&args, "--onto"); - argv_array_push(&args, sha1_to_hex(merge_head)); + argv_array_push(&args, oid_to_hex(merge_head)); - if (fork_point && !is_null_sha1(fork_point)) - argv_array_push(&args, sha1_to_hex(fork_point)); + if (fork_point && !is_null_oid(fork_point)) + argv_array_push(&args, oid_to_hex(fork_point)); else - argv_array_push(&args, sha1_to_hex(merge_head)); + argv_array_push(&args, oid_to_hex(merge_head)); ret = run_command_v_opt(args.argv, RUN_GIT_CMD); argv_array_clear(&args); @@ -769,9 +769,9 @@ static int run_rebase(const unsigned char *curr_head, int cmd_pull(int argc, const char **argv, const char *prefix) { const char *repo, **refspecs; - struct sha1_array merge_heads = SHA1_ARRAY_INIT; - unsigned char orig_head[GIT_SHA1_RAWSZ], curr_head[GIT_SHA1_RAWSZ]; - unsigned char rebase_fork_point[GIT_SHA1_RAWSZ]; + struct oid_array merge_heads = OID_ARRAY_INIT; + struct object_id orig_head, curr_head; + struct object_id rebase_fork_point; if (!getenv("GIT_REFLOG_ACTION")) set_reflog_message(argc, argv); @@ -791,11 +791,11 @@ int cmd_pull(int argc, const char **argv, const char *prefix) if (read_cache_unmerged()) die_resolve_conflict("pull"); - if (file_exists(git_path("MERGE_HEAD"))) + if (file_exists(git_path_merge_head())) die_conclude_merge(); - if (get_sha1("HEAD", orig_head)) - hashclr(orig_head); + if (get_oid("HEAD", &orig_head)) + oidclr(&orig_head); if (!opt_rebase && opt_autostash != -1) die(_("--[no-]autostash option is only valid with --rebase.")); @@ -805,15 +805,15 @@ int cmd_pull(int argc, const char **argv, const char *prefix) if (opt_autostash != -1) autostash = opt_autostash; - if (is_null_sha1(orig_head) && !is_cache_unborn()) + if (is_null_oid(&orig_head) && !is_cache_unborn()) die(_("Updating an unborn branch with changes added to the index.")); if (!autostash) require_clean_work_tree(N_("pull with rebase"), _("please commit or stash them."), 1, 0); - if (get_rebase_fork_point(rebase_fork_point, repo, *refspecs)) - hashclr(rebase_fork_point); + if (get_rebase_fork_point(&rebase_fork_point, repo, *refspecs)) + oidclr(&rebase_fork_point); } if (run_fetch(repo, refspecs)) @@ -822,11 +822,11 @@ int cmd_pull(int argc, const char **argv, const char *prefix) if (opt_dry_run) return 0; - if (get_sha1("HEAD", curr_head)) - hashclr(curr_head); + if (get_oid("HEAD", &curr_head)) + oidclr(&curr_head); - if (!is_null_sha1(orig_head) && !is_null_sha1(curr_head) && - hashcmp(orig_head, curr_head)) { + if (!is_null_oid(&orig_head) && !is_null_oid(&curr_head) && + oidcmp(&orig_head, &curr_head)) { /* * The fetch involved updating the current branch. * @@ -837,15 +837,15 @@ int cmd_pull(int argc, const char **argv, const char *prefix) warning(_("fetch updated the current branch head.\n" "fast-forwarding your working tree from\n" - "commit %s."), sha1_to_hex(orig_head)); + "commit %s."), oid_to_hex(&orig_head)); - if (checkout_fast_forward(orig_head, curr_head, 0)) + if (checkout_fast_forward(orig_head.hash, curr_head.hash, 0)) die(_("Cannot fast-forward your working tree.\n" "After making sure that you saved anything precious from\n" "$ git diff %s\n" "output, run\n" "$ git reset --hard\n" - "to recover."), sha1_to_hex(orig_head)); + "to recover."), oid_to_hex(&orig_head)); } get_merge_heads(&merge_heads); @@ -853,10 +853,10 @@ int cmd_pull(int argc, const char **argv, const char *prefix) if (!merge_heads.nr) die_no_merge_candidates(repo, refspecs); - if (is_null_sha1(orig_head)) { + if (is_null_oid(&orig_head)) { if (merge_heads.nr > 1) die(_("Cannot merge multiple branches into empty head.")); - return pull_into_void(*merge_heads.sha1, curr_head); + return pull_into_void(merge_heads.oid, &curr_head); } if (opt_rebase && merge_heads.nr > 1) die(_("Cannot rebase onto multiple branches.")); @@ -865,15 +865,15 @@ int cmd_pull(int argc, const char **argv, const char *prefix) struct commit_list *list = NULL; struct commit *merge_head, *head; - head = lookup_commit_reference(orig_head); + head = lookup_commit_reference(orig_head.hash); commit_list_insert(head, &list); - merge_head = lookup_commit_reference(merge_heads.sha1[0]); + merge_head = lookup_commit_reference(merge_heads.oid[0].hash); if (is_descendant_of(merge_head, list)) { /* we can fast-forward this without invoking rebase */ opt_ff = "--ff-only"; return run_merge(); } - return run_rebase(curr_head, *merge_heads.sha1, rebase_fork_point); + return run_rebase(&curr_head, merge_heads.oid, &rebase_fork_point); } else { return run_merge(); } diff --git a/builtin/push.c b/builtin/push.c index 5c22e9f2e5..a597759d8f 100644 --- a/builtin/push.c +++ b/builtin/push.c @@ -510,8 +510,8 @@ int cmd_push(int argc, const char **argv, const char *prefix) int push_cert = -1; int rc; const char *repo = NULL; /* default repository */ - static struct string_list push_options = STRING_LIST_INIT_DUP; - static struct string_list_item *item; + struct string_list push_options = STRING_LIST_INIT_DUP; + const struct string_list_item *item; struct option options[] = { OPT__VERBOSITY(&verbosity), @@ -584,6 +584,7 @@ int cmd_push(int argc, const char **argv, const char *prefix) die(_("push options must not have new line characters")); rc = do_push(repo, flags, &push_options); + string_list_clear(&push_options, 0); if (rc == -1) usage_with_options(push_usage, options); else diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c index aca9c33d8d..f96834f42c 100644 --- a/builtin/receive-pack.c +++ b/builtin/receive-pack.c @@ -225,10 +225,10 @@ static int receive_pack_config(const char *var, const char *value, void *cb) return git_default_config(var, value, cb); } -static void show_ref(const char *path, const unsigned char *sha1) +static void show_ref(const char *path, const struct object_id *oid) { if (sent_capabilities) { - packet_write_fmt(1, "%s %s\n", sha1_to_hex(sha1), path); + packet_write_fmt(1, "%s %s\n", oid_to_hex(oid), path); } else { struct strbuf cap = STRBUF_INIT; @@ -244,7 +244,7 @@ static void show_ref(const char *path, const unsigned char *sha1) strbuf_addstr(&cap, " push-options"); strbuf_addf(&cap, " agent=%s", git_user_agent_sanitized()); packet_write_fmt(1, "%s %s%c%s\n", - sha1_to_hex(sha1), path, 0, cap.buf); + oid_to_hex(oid), path, 0, cap.buf); strbuf_release(&cap); sent_capabilities = 1; } @@ -271,7 +271,7 @@ static int show_ref_cb(const char *path_full, const struct object_id *oid, } else { oidset_insert(seen, oid); } - show_ref(path, oid->hash); + show_ref(path, oid); return 0; } @@ -284,7 +284,7 @@ static void show_one_alternate_ref(const char *refname, if (oidset_insert(seen, oid)) return; - show_ref(".have", oid->hash); + show_ref(".have", oid); } static void write_head_info(void) @@ -295,7 +295,7 @@ static void write_head_info(void) for_each_alternate_ref(show_one_alternate_ref, &seen); oidset_clear(&seen); if (!sent_capabilities) - show_ref("capabilities^{}", null_sha1); + show_ref("capabilities^{}", &null_oid); advertise_shallow_grafts(1); @@ -309,8 +309,8 @@ struct command { unsigned int skip_update:1, did_not_exist:1; int index; - unsigned char old_sha1[20]; - unsigned char new_sha1[20]; + struct object_id old_oid; + struct object_id new_oid; char ref_name[FLEX_ARRAY]; /* more */ }; @@ -723,7 +723,7 @@ static int feed_receive_hook(void *state_, const char **bufp, size_t *sizep) return -1; /* EOF */ strbuf_reset(&state->buf); strbuf_addf(&state->buf, "%s %s %s\n", - sha1_to_hex(cmd->old_sha1), sha1_to_hex(cmd->new_sha1), + oid_to_hex(&cmd->old_oid), oid_to_hex(&cmd->new_oid), cmd->ref_name); state->cmd = cmd->next; if (bufp) { @@ -764,15 +764,14 @@ static int run_update_hook(struct command *cmd) return 0; argv[1] = cmd->ref_name; - argv[2] = sha1_to_hex(cmd->old_sha1); - argv[3] = sha1_to_hex(cmd->new_sha1); + argv[2] = oid_to_hex(&cmd->old_oid); + argv[3] = oid_to_hex(&cmd->new_oid); argv[4] = NULL; proc.no_stdin = 1; proc.stdout_to_stderr = 1; proc.err = use_sideband ? -1 : 0; proc.argv = argv; - proc.env = tmp_objdir_env(tmp_objdir); code = start_command(&proc); if (code) @@ -831,7 +830,7 @@ static int command_singleton_iterator(void *cb_data, unsigned char sha1[20]); static int update_shallow_ref(struct command *cmd, struct shallow_info *si) { static struct lock_file shallow_lock; - struct sha1_array extra = SHA1_ARRAY_INIT; + struct oid_array extra = OID_ARRAY_INIT; struct check_connected_options opt = CHECK_CONNECTED_INIT; uint32_t mask = 1 << (cmd->index % 32); int i; @@ -842,13 +841,13 @@ static int update_shallow_ref(struct command *cmd, struct shallow_info *si) if (si->used_shallow[i] && (si->used_shallow[i][cmd->index / 32] & mask) && !delayed_reachability_test(si, i)) - sha1_array_append(&extra, si->shallow->sha1[i]); + oid_array_append(&extra, &si->shallow->oid[i]); opt.env = tmp_objdir_env(tmp_objdir); setup_alternate_shallow(&shallow_lock, &opt.shallow_file, &extra); if (check_connected(command_singleton_iterator, cmd, &opt)) { rollback_lock_file(&shallow_lock); - sha1_array_clear(&extra); + oid_array_clear(&extra); return -1; } @@ -859,10 +858,10 @@ static int update_shallow_ref(struct command *cmd, struct shallow_info *si) * not lose these new roots.. */ for (i = 0; i < extra.nr; i++) - register_shallow(extra.sha1[i]); + register_shallow(extra.oid[i].hash); si->shallow_ref[cmd->index] = 0; - sha1_array_clear(&extra); + oid_array_clear(&extra); return 0; } @@ -988,8 +987,8 @@ static const char *update(struct command *cmd, struct shallow_info *si) const char *name = cmd->ref_name; struct strbuf namespaced_name_buf = STRBUF_INIT; const char *namespaced_name, *ret; - unsigned char *old_sha1 = cmd->old_sha1; - unsigned char *new_sha1 = cmd->new_sha1; + struct object_id *old_oid = &cmd->old_oid; + struct object_id *new_oid = &cmd->new_oid; /* only refs/... are allowed */ if (!starts_with(name, "refs/") || check_refname_format(name + 5, 0)) { @@ -1014,20 +1013,20 @@ static const char *update(struct command *cmd, struct shallow_info *si) refuse_unconfigured_deny(); return "branch is currently checked out"; case DENY_UPDATE_INSTEAD: - ret = update_worktree(new_sha1); + ret = update_worktree(new_oid->hash); if (ret) return ret; break; } } - if (!is_null_sha1(new_sha1) && !has_sha1_file(new_sha1)) { + if (!is_null_oid(new_oid) && !has_object_file(new_oid)) { error("unpack should have generated %s, " - "but I can't find it!", sha1_to_hex(new_sha1)); + "but I can't find it!", oid_to_hex(new_oid)); return "bad pack"; } - if (!is_null_sha1(old_sha1) && is_null_sha1(new_sha1)) { + if (!is_null_oid(old_oid) && is_null_oid(new_oid)) { if (deny_deletes && starts_with(name, "refs/heads/")) { rp_error("denying ref deletion for %s", name); return "deletion prohibited"; @@ -1053,14 +1052,14 @@ static const char *update(struct command *cmd, struct shallow_info *si) } } - if (deny_non_fast_forwards && !is_null_sha1(new_sha1) && - !is_null_sha1(old_sha1) && + if (deny_non_fast_forwards && !is_null_oid(new_oid) && + !is_null_oid(old_oid) && starts_with(name, "refs/heads/")) { struct object *old_object, *new_object; struct commit *old_commit, *new_commit; - old_object = parse_object(old_sha1); - new_object = parse_object(new_sha1); + old_object = parse_object(old_oid->hash); + new_object = parse_object(new_oid->hash); if (!old_object || !new_object || old_object->type != OBJ_COMMIT || @@ -1081,10 +1080,10 @@ static const char *update(struct command *cmd, struct shallow_info *si) return "hook declined"; } - if (is_null_sha1(new_sha1)) { + if (is_null_oid(new_oid)) { struct strbuf err = STRBUF_INIT; - if (!parse_object(old_sha1)) { - old_sha1 = NULL; + if (!parse_object(old_oid->hash)) { + old_oid = NULL; if (ref_exists(name)) { rp_warning("Allowing deletion of corrupt ref."); } else { @@ -1094,7 +1093,7 @@ static const char *update(struct command *cmd, struct shallow_info *si) } if (ref_transaction_delete(transaction, namespaced_name, - old_sha1, + old_oid->hash, 0, "push", &err)) { rp_error("%s", err.buf); strbuf_release(&err); @@ -1111,7 +1110,7 @@ static const char *update(struct command *cmd, struct shallow_info *si) if (ref_transaction_update(transaction, namespaced_name, - new_sha1, old_sha1, + new_oid->hash, old_oid->hash, 0, "push", &err)) { rp_error("%s", err.buf); @@ -1162,7 +1161,7 @@ static void check_aliased_update(struct command *cmd, struct string_list *list) const char *dst_name; struct string_list_item *item; struct command *dst_cmd; - unsigned char sha1[GIT_SHA1_RAWSZ]; + unsigned char sha1[GIT_MAX_RAWSZ]; int flag; strbuf_addf(&buf, "%s%s", get_git_namespace(), cmd->ref_name); @@ -1187,8 +1186,8 @@ static void check_aliased_update(struct command *cmd, struct string_list *list) dst_cmd = (struct command *) item->util; - if (!hashcmp(cmd->old_sha1, dst_cmd->old_sha1) && - !hashcmp(cmd->new_sha1, dst_cmd->new_sha1)) + if (!oidcmp(&cmd->old_oid, &dst_cmd->old_oid) && + !oidcmp(&cmd->new_oid, &dst_cmd->new_oid)) return; dst_cmd->skip_update = 1; @@ -1196,11 +1195,11 @@ static void check_aliased_update(struct command *cmd, struct string_list *list) rp_error("refusing inconsistent update between symref '%s' (%s..%s) and" " its target '%s' (%s..%s)", cmd->ref_name, - find_unique_abbrev(cmd->old_sha1, DEFAULT_ABBREV), - find_unique_abbrev(cmd->new_sha1, DEFAULT_ABBREV), + find_unique_abbrev(cmd->old_oid.hash, DEFAULT_ABBREV), + find_unique_abbrev(cmd->new_oid.hash, DEFAULT_ABBREV), dst_cmd->ref_name, - find_unique_abbrev(dst_cmd->old_sha1, DEFAULT_ABBREV), - find_unique_abbrev(dst_cmd->new_sha1, DEFAULT_ABBREV)); + find_unique_abbrev(dst_cmd->old_oid.hash, DEFAULT_ABBREV), + find_unique_abbrev(dst_cmd->new_oid.hash, DEFAULT_ABBREV)); cmd->error_string = dst_cmd->error_string = "inconsistent aliased update"; @@ -1231,10 +1230,10 @@ static int command_singleton_iterator(void *cb_data, unsigned char sha1[20]) struct command **cmd_list = cb_data; struct command *cmd = *cmd_list; - if (!cmd || is_null_sha1(cmd->new_sha1)) + if (!cmd || is_null_oid(&cmd->new_oid)) return -1; /* end of list */ *cmd_list = NULL; /* this returns only one */ - hashcpy(sha1, cmd->new_sha1); + hashcpy(sha1, cmd->new_oid.hash); return 0; } @@ -1275,8 +1274,8 @@ static int iterate_receive_command_list(void *cb_data, unsigned char sha1[20]) if (shallow_update && data->si->shallow_ref[cmd->index]) /* to be checked in update_shallow_ref() */ continue; - if (!is_null_sha1(cmd->new_sha1) && !cmd->skip_update) { - hashcpy(sha1, cmd->new_sha1); + if (!is_null_oid(&cmd->new_oid) && !cmd->skip_update) { + hashcpy(sha1, cmd->new_oid.hash); *cmd_list = cmd->next; return 0; } @@ -1303,7 +1302,7 @@ static void reject_updates_to_hidden(struct command *commands) if (!ref_is_hidden(cmd->ref_name, refname_full.buf)) continue; - if (is_null_sha1(cmd->new_sha1)) + if (is_null_oid(&cmd->new_oid)) cmd->error_string = "deny deleting a hidden ref"; else cmd->error_string = "deny updating a hidden ref"; @@ -1486,23 +1485,23 @@ static struct command **queue_command(struct command **tail, const char *line, int linelen) { - unsigned char old_sha1[20], new_sha1[20]; + struct object_id old_oid, new_oid; struct command *cmd; const char *refname; int reflen; + const char *p; - if (linelen < 83 || - line[40] != ' ' || - line[81] != ' ' || - get_sha1_hex(line, old_sha1) || - get_sha1_hex(line + 41, new_sha1)) + if (parse_oid_hex(line, &old_oid, &p) || + *p++ != ' ' || + parse_oid_hex(p, &new_oid, &p) || + *p++ != ' ') die("protocol error: expected old/new/ref, got '%s'", line); - refname = line + 82; - reflen = linelen - 82; + refname = p; + reflen = linelen - (p - line); FLEX_ALLOC_MEM(cmd, ref_name, refname, reflen); - hashcpy(cmd->old_sha1, old_sha1); - hashcpy(cmd->new_sha1, new_sha1); + oidcpy(&cmd->old_oid, &old_oid); + oidcpy(&cmd->new_oid, &new_oid); *tail = cmd; return &cmd->next; } @@ -1529,7 +1528,7 @@ static void queue_commands_from_cert(struct command **tail, } } -static struct command *read_head_info(struct sha1_array *shallow) +static struct command *read_head_info(struct oid_array *shallow) { struct command *commands = NULL; struct command **p = &commands; @@ -1541,12 +1540,12 @@ static struct command *read_head_info(struct sha1_array *shallow) if (!line) break; - if (len == 48 && starts_with(line, "shallow ")) { - unsigned char sha1[20]; - if (get_sha1_hex(line + 8, sha1)) + if (len > 8 && starts_with(line, "shallow ")) { + struct object_id oid; + if (get_oid_hex(line + 8, &oid)) die("protocol error: expected shallow sha, got '%s'", line + 8); - sha1_array_append(shallow, sha1); + oid_array_append(shallow, &oid); continue; } @@ -1634,12 +1633,17 @@ static const char *parse_pack_header(struct pack_header *hdr) static const char *pack_lockfile; +static void push_header_arg(struct argv_array *args, struct pack_header *hdr) +{ + argv_array_pushf(args, "--pack_header=%"PRIu32",%"PRIu32, + ntohl(hdr->hdr_version), ntohl(hdr->hdr_entries)); +} + static const char *unpack(int err_fd, struct shallow_info *si) { struct pack_header hdr; const char *hdr_err; int status; - char hdr_arg[38]; struct child_process child = CHILD_PROCESS_INIT; int fsck_objects = (receive_fsck_objects >= 0 ? receive_fsck_objects @@ -1653,9 +1657,6 @@ static const char *unpack(int err_fd, struct shallow_info *si) close(err_fd); return hdr_err; } - snprintf(hdr_arg, sizeof(hdr_arg), - "--pack_header=%"PRIu32",%"PRIu32, - ntohl(hdr.hdr_version), ntohl(hdr.hdr_entries)); if (si->nr_ours || si->nr_theirs) { alt_shallow_file = setup_temporary_shallow(si->shallow); @@ -1679,7 +1680,8 @@ static const char *unpack(int err_fd, struct shallow_info *si) tmp_objdir_add_as_alternate(tmp_objdir); if (ntohl(hdr.hdr_entries) < unpack_limit) { - argv_array_pushl(&child.args, "unpack-objects", hdr_arg, NULL); + argv_array_push(&child.args, "unpack-objects"); + push_header_arg(&child.args, &hdr); if (quiet) argv_array_push(&child.args, "-q"); if (fsck_objects) @@ -1695,12 +1697,12 @@ static const char *unpack(int err_fd, struct shallow_info *si) if (status) return "unpack-objects abnormal exit"; } else { - char hostname[256]; + char hostname[HOST_NAME_MAX + 1]; - argv_array_pushl(&child.args, "index-pack", - "--stdin", hdr_arg, NULL); + argv_array_pushl(&child.args, "index-pack", "--stdin", NULL); + push_header_arg(&child.args, &hdr); - if (gethostname(hostname, sizeof(hostname))) + if (xgethostname(hostname, sizeof(hostname))) xsnprintf(hostname, sizeof(hostname), "localhost"); argv_array_pushf(&child.args, "--keep=receive-pack %"PRIuMAX" on %s", @@ -1804,7 +1806,7 @@ static void prepare_shallow_update(struct command *commands, static void update_shallow_info(struct command *commands, struct shallow_info *si, - struct sha1_array *ref) + struct oid_array *ref) { struct command *cmd; int *ref_status; @@ -1815,9 +1817,9 @@ static void update_shallow_info(struct command *commands, } for (cmd = commands; cmd; cmd = cmd->next) { - if (is_null_sha1(cmd->new_sha1)) + if (is_null_oid(&cmd->new_oid)) continue; - sha1_array_append(ref, cmd->new_sha1); + oid_array_append(ref, &cmd->new_oid); cmd->index = ref->nr - 1; } si->ref = ref; @@ -1830,7 +1832,7 @@ static void update_shallow_info(struct command *commands, ALLOC_ARRAY(ref_status, ref->nr); assign_shallow_commits_to_refs(si, NULL, ref_status); for (cmd = commands; cmd; cmd = cmd->next) { - if (is_null_sha1(cmd->new_sha1)) + if (is_null_oid(&cmd->new_oid)) continue; if (ref_status[cmd->index]) { cmd->error_string = "shallow update not allowed"; @@ -1868,7 +1870,7 @@ static int delete_only(struct command *commands) { struct command *cmd; for (cmd = commands; cmd; cmd = cmd->next) { - if (!is_null_sha1(cmd->new_sha1)) + if (!is_null_oid(&cmd->new_oid)) return 0; } return 1; @@ -1878,8 +1880,8 @@ int cmd_receive_pack(int argc, const char **argv, const char *prefix) { int advertise_refs = 0; struct command *commands; - struct sha1_array shallow = SHA1_ARRAY_INIT; - struct sha1_array ref = SHA1_ARRAY_INIT; + struct oid_array shallow = OID_ARRAY_INIT; + struct oid_array ref = OID_ARRAY_INIT; struct shallow_info si; struct option options[] = { @@ -1971,8 +1973,8 @@ int cmd_receive_pack(int argc, const char **argv, const char *prefix) } if (use_sideband) packet_flush(1); - sha1_array_clear(&shallow); - sha1_array_clear(&ref); + oid_array_clear(&shallow); + oid_array_clear(&ref); free((void *)push_cert_nonce); return 0; } diff --git a/builtin/replace.c b/builtin/replace.c index f83e7b8fc1..ab17668f43 100644 --- a/builtin/replace.c +++ b/builtin/replace.c @@ -93,28 +93,34 @@ typedef int (*each_replace_name_fn)(const char *name, const char *ref, static int for_each_replace_name(const char **argv, each_replace_name_fn fn) { const char **p, *full_hex; - char ref[PATH_MAX]; + struct strbuf ref = STRBUF_INIT; + size_t base_len; int had_error = 0; struct object_id oid; + strbuf_addstr(&ref, git_replace_ref_base); + base_len = ref.len; + for (p = argv; *p; p++) { if (get_oid(*p, &oid)) { error("Failed to resolve '%s' as a valid ref.", *p); had_error = 1; continue; } - full_hex = oid_to_hex(&oid); - snprintf(ref, sizeof(ref), "%s%s", git_replace_ref_base, full_hex); - /* read_ref() may reuse the buffer */ - full_hex = ref + strlen(git_replace_ref_base); - if (read_ref(ref, oid.hash)) { + + strbuf_setlen(&ref, base_len); + strbuf_addstr(&ref, oid_to_hex(&oid)); + full_hex = ref.buf + base_len; + + if (read_ref(ref.buf, oid.hash)) { error("replace ref '%s' not found.", full_hex); had_error = 1; continue; } - if (fn(full_hex, ref, &oid)) + if (fn(full_hex, ref.buf, &oid)) had_error = 1; } + strbuf_release(&ref); return had_error; } @@ -129,21 +135,18 @@ static int delete_replace_ref(const char *name, const char *ref, static void check_ref_valid(struct object_id *object, struct object_id *prev, - char *ref, - int ref_size, + struct strbuf *ref, int force) { - if (snprintf(ref, ref_size, - "%s%s", git_replace_ref_base, - oid_to_hex(object)) > ref_size - 1) - die("replace ref name too long: %.*s...", 50, ref); - if (check_refname_format(ref, 0)) - die("'%s' is not a valid ref name.", ref); - - if (read_ref(ref, prev->hash)) + strbuf_reset(ref); + strbuf_addf(ref, "%s%s", git_replace_ref_base, oid_to_hex(object)); + if (check_refname_format(ref->buf, 0)) + die("'%s' is not a valid ref name.", ref->buf); + + if (read_ref(ref->buf, prev->hash)) oidclr(prev); else if (!force) - die("replace ref '%s' already exists", ref); + die("replace ref '%s' already exists", ref->buf); } static int replace_object_oid(const char *object_ref, @@ -154,7 +157,7 @@ static int replace_object_oid(const char *object_ref, { struct object_id prev; enum object_type obj_type, repl_type; - char ref[PATH_MAX]; + struct strbuf ref = STRBUF_INIT; struct ref_transaction *transaction; struct strbuf err = STRBUF_INIT; @@ -167,16 +170,17 @@ static int replace_object_oid(const char *object_ref, object_ref, typename(obj_type), replace_ref, typename(repl_type)); - check_ref_valid(object, &prev, ref, sizeof(ref), force); + check_ref_valid(object, &prev, &ref, force); transaction = ref_transaction_begin(&err); if (!transaction || - ref_transaction_update(transaction, ref, repl->hash, prev.hash, + ref_transaction_update(transaction, ref.buf, repl->hash, prev.hash, 0, NULL, &err) || ref_transaction_commit(transaction, &err)) die("%s", err.buf); ref_transaction_free(transaction); + strbuf_release(&ref); return 0; } @@ -280,7 +284,7 @@ static int edit_and_replace(const char *object_ref, int force, int raw) char *tmpfile = git_pathdup("REPLACE_EDITOBJ"); enum object_type type; struct object_id old, new, prev; - char ref[PATH_MAX]; + struct strbuf ref = STRBUF_INIT; if (get_oid(object_ref, &old) < 0) die("Not a valid object name: '%s'", object_ref); @@ -289,7 +293,8 @@ static int edit_and_replace(const char *object_ref, int force, int raw) if (type < 0) die("unable to get object type for %s", oid_to_hex(&old)); - check_ref_valid(&old, &prev, ref, sizeof(ref), force); + check_ref_valid(&old, &prev, &ref, force); + strbuf_release(&ref); export_object(&old, type, raw, tmpfile); if (launch_editor(tmpfile, NULL, NULL) < 0) diff --git a/builtin/rev-list.c b/builtin/rev-list.c index 0aa93d5891..bcf77f0b8a 100644 --- a/builtin/rev-list.c +++ b/builtin/rev-list.c @@ -212,7 +212,7 @@ static void print_var_int(const char *var, int val) static int show_bisect_vars(struct rev_list_info *info, int reaches, int all) { int cnt, flags = info->flags; - char hex[GIT_SHA1_HEXSZ + 1] = ""; + char hex[GIT_MAX_HEXSZ + 1] = ""; struct commit_list *tried; struct rev_info *revs = info->revs; diff --git a/builtin/rev-parse.c b/builtin/rev-parse.c index 9e53a1a7ca..0513330910 100644 --- a/builtin/rev-parse.c +++ b/builtin/rev-parse.c @@ -205,21 +205,22 @@ static int anti_reference(const char *refname, const struct object_id *oid, int return 0; } -static int show_abbrev(const unsigned char *sha1, void *cb_data) +static int show_abbrev(const struct object_id *oid, void *cb_data) { - show_rev(NORMAL, sha1, NULL); + show_rev(NORMAL, oid->hash, NULL); return 0; } static void show_datestring(const char *flag, const char *datestr) { - static char buffer[100]; + char *buffer; /* date handling requires both flags and revs */ if ((filter & (DO_FLAGS | DO_REVS)) != (DO_FLAGS | DO_REVS)) return; - snprintf(buffer, sizeof(buffer), "%s%lu", flag, approxidate(datestr)); + buffer = xstrfmt("%s%lu", flag, approxidate(datestr)); show(buffer); + free(buffer); } static int show_file(const char *arg, int output_prefix) diff --git a/builtin/send-pack.c b/builtin/send-pack.c index 832fd7ed0a..b8e2e74fe0 100644 --- a/builtin/send-pack.c +++ b/builtin/send-pack.c @@ -131,8 +131,8 @@ int cmd_send_pack(int argc, const char **argv, const char *prefix) const char *dest = NULL; int fd[2]; struct child_process *conn; - struct sha1_array extra_have = SHA1_ARRAY_INIT; - struct sha1_array shallow = SHA1_ARRAY_INIT; + struct oid_array extra_have = OID_ARRAY_INIT; + struct oid_array shallow = OID_ARRAY_INIT; struct ref *remote_refs, *local_refs; int ret; int helper_status = 0; diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c index 85aafe46a4..566a5b6a6f 100644 --- a/builtin/submodule--helper.c +++ b/builtin/submodule--helper.c @@ -376,12 +376,12 @@ static void init_submodule(const char *path, const char *prefix, int quiet) strbuf_reset(&sb); strbuf_addf(&sb, "submodule.%s.url", sub->name); if (git_config_get_string(sb.buf, &url)) { - url = xstrdup(sub->url); - - if (!url) + if (!sub->url) die(_("No url found for submodule path '%s' in .gitmodules"), displaypath); + url = xstrdup(sub->url); + /* Possibly a url relative to parent */ if (starts_with_dot_dot_slash(url) || starts_with_dot_slash(url)) { @@ -1105,6 +1105,50 @@ static int resolve_remote_submodule_branch(int argc, const char **argv, return 0; } +static int push_check(int argc, const char **argv, const char *prefix) +{ + struct remote *remote; + + if (argc < 2) + die("submodule--helper push-check requires at least 1 argument"); + + /* + * The remote must be configured. + * This is to avoid pushing to the exact same URL as the parent. + */ + remote = pushremote_get(argv[1]); + if (!remote || remote->origin == REMOTE_UNCONFIGURED) + die("remote '%s' not configured", argv[1]); + + /* Check the refspec */ + if (argc > 2) { + int i, refspec_nr = argc - 2; + struct ref *local_refs = get_local_heads(); + struct refspec *refspec = parse_push_refspec(refspec_nr, + argv + 2); + + for (i = 0; i < refspec_nr; i++) { + struct refspec *rs = refspec + i; + + if (rs->pattern || rs->matching) + continue; + + /* + * LHS must match a single ref + * NEEDSWORK: add logic to special case 'HEAD' once + * working with submodules in a detached head state + * ceases to be the norm. + */ + if (count_refspec_match(rs->src, local_refs, NULL) != 1) + die("src refspec '%s' must name a ref", + rs->src); + } + free_refspec(refspec_nr, refspec); + } + + return 0; +} + static int absorb_git_dirs(int argc, const char **argv, const char *prefix) { int i; @@ -1145,7 +1189,7 @@ static int absorb_git_dirs(int argc, const char **argv, const char *prefix) static int is_active(int argc, const char **argv, const char *prefix) { if (argc != 2) - die("submodule--helper is-active takes exactly 1 arguments"); + die("submodule--helper is-active takes exactly 1 argument"); gitmodules_config(); @@ -1170,6 +1214,7 @@ static struct cmd_struct commands[] = { {"resolve-relative-url-test", resolve_relative_url_test, 0}, {"init", module_init, SUPPORT_SUPER_PREFIX}, {"remote-branch", resolve_remote_submodule_branch, 0}, + {"push-check", push_check, 0}, {"absorb-git-dirs", absorb_git_dirs, SUPPORT_SUPER_PREFIX}, {"is-active", is_active, 0}, }; diff --git a/builtin/tag.c b/builtin/tag.c index dbc6f5b74b..bdf1e88e93 100644 --- a/builtin/tag.c +++ b/builtin/tag.c @@ -72,25 +72,22 @@ static int for_each_tag_name(const char **argv, each_tag_name_fn fn, const void *cb_data) { const char **p; - char ref[PATH_MAX]; + struct strbuf ref = STRBUF_INIT; int had_error = 0; unsigned char sha1[20]; for (p = argv; *p; p++) { - if (snprintf(ref, sizeof(ref), "refs/tags/%s", *p) - >= sizeof(ref)) { - error(_("tag name too long: %.*s..."), 50, *p); - had_error = 1; - continue; - } - if (read_ref(ref, sha1)) { + strbuf_reset(&ref); + strbuf_addf(&ref, "refs/tags/%s", *p); + if (read_ref(ref.buf, sha1)) { error(_("tag '%s' not found."), *p); had_error = 1; continue; } - if (fn(*p, ref, sha1, cb_data)) + if (fn(*p, ref.buf, sha1, cb_data)) had_error = 1; } + strbuf_release(&ref); return had_error; } @@ -231,26 +228,22 @@ static void create_tag(const unsigned char *object, const char *tag, unsigned char *prev, unsigned char *result) { enum object_type type; - char header_buf[1024]; - int header_len; + struct strbuf header = STRBUF_INIT; char *path = NULL; type = sha1_object_info(object, NULL); if (type <= OBJ_NONE) die(_("bad object type.")); - header_len = snprintf(header_buf, sizeof(header_buf), - "object %s\n" - "type %s\n" - "tag %s\n" - "tagger %s\n\n", - sha1_to_hex(object), - typename(type), - tag, - git_committer_info(IDENT_STRICT)); - - if (header_len > sizeof(header_buf) - 1) - die(_("tag header too big.")); + strbuf_addf(&header, + "object %s\n" + "type %s\n" + "tag %s\n" + "tagger %s\n\n", + sha1_to_hex(object), + typename(type), + tag, + git_committer_info(IDENT_STRICT)); if (!opt->message_given) { int fd; @@ -288,7 +281,8 @@ static void create_tag(const unsigned char *object, const char *tag, if (!opt->message_given && !buf->len) die(_("no tag message?")); - strbuf_insert(buf, 0, header_buf, header_len); + strbuf_insert(buf, 0, header.buf, header.len); + strbuf_release(&header); if (build_tag_object(buf, opt->sign, result) < 0) { if (path) @@ -315,7 +309,7 @@ static void create_reflog_msg(const unsigned char *sha1, struct strbuf *sb) if (rla) { strbuf_addstr(sb, rla); } else { - strbuf_addstr(sb, _("tag: tagging ")); + strbuf_addstr(sb, "tag: tagging "); strbuf_add_unique_abbrev(sb, sha1, DEFAULT_ABBREV); } @@ -323,14 +317,14 @@ static void create_reflog_msg(const unsigned char *sha1, struct strbuf *sb) type = sha1_object_info(sha1, NULL); switch (type) { default: - strbuf_addstr(sb, _("object of unknown type")); + strbuf_addstr(sb, "object of unknown type"); break; case OBJ_COMMIT: if ((buf = read_sha1_file(sha1, &type, &size)) != NULL) { subject_len = find_commit_subject(buf, &subject_start); strbuf_insert(sb, sb->len, subject_start, subject_len); } else { - strbuf_addstr(sb, _("commit object")); + strbuf_addstr(sb, "commit object"); } free(buf); @@ -338,13 +332,13 @@ static void create_reflog_msg(const unsigned char *sha1, struct strbuf *sb) strbuf_addf(sb, ", %s", show_date(c->date, 0, DATE_MODE(SHORT))); break; case OBJ_TREE: - strbuf_addstr(sb, _("tree object")); + strbuf_addstr(sb, "tree object"); break; case OBJ_BLOB: - strbuf_addstr(sb, _("blob object")); + strbuf_addstr(sb, "blob object"); break; case OBJ_TAG: - strbuf_addstr(sb, _("other tag object")); + strbuf_addstr(sb, "other tag object"); break; } strbuf_addch(sb, ')'); diff --git a/builtin/worktree.c b/builtin/worktree.c index 9993ded41a..1722a9bdc2 100644 --- a/builtin/worktree.c +++ b/builtin/worktree.c @@ -24,6 +24,7 @@ struct add_opts { int force; int detach; int checkout; + int keep_locked; const char *new_branch; int force_new_branch; }; @@ -106,8 +107,7 @@ static void prune_worktrees(void) printf("%s\n", reason.buf); if (show_only) continue; - strbuf_reset(&path); - strbuf_addstr(&path, git_path("worktrees/%s", d->d_name)); + git_path_buf(&path, "worktrees/%s", d->d_name); ret = remove_dir_recursively(&path, 0); if (ret < 0 && errno == ENOTDIR) ret = unlink(path.buf); @@ -215,8 +215,7 @@ static int add_worktree(const char *path, const char *refname, } name = worktree_basename(path, &len); - strbuf_addstr(&sb_repo, - git_path("worktrees/%.*s", (int)(path + len - name), name)); + git_path_buf(&sb_repo, "worktrees/%.*s", (int)(path + len - name), name); len = sb_repo.len; if (safe_create_leading_directories_const(sb_repo.buf)) die_errno(_("could not create leading directories of '%s'"), @@ -242,7 +241,10 @@ static int add_worktree(const char *path, const char *refname, * after the preparation is over. */ strbuf_addf(&sb, "%s/locked", sb_repo.buf); - write_file(sb.buf, "initializing"); + if (!opts->keep_locked) + write_file(sb.buf, "initializing"); + else + write_file(sb.buf, "added with --lock"); strbuf_addf(&sb_git, "%s/.git", path); if (safe_create_leading_directories_const(sb_git.buf)) @@ -303,9 +305,11 @@ static int add_worktree(const char *path, const char *refname, junk_git_dir = NULL; done: - strbuf_reset(&sb); - strbuf_addf(&sb, "%s/locked", sb_repo.buf); - unlink_or_warn(sb.buf); + if (ret || !opts->keep_locked) { + strbuf_reset(&sb); + strbuf_addf(&sb, "%s/locked", sb_repo.buf); + unlink_or_warn(sb.buf); + } argv_array_clear(&child_env); strbuf_release(&sb); strbuf_release(&symref); @@ -328,6 +332,7 @@ static int add(int ac, const char **av, const char *prefix) N_("create or reset a branch")), OPT_BOOL(0, "detach", &opts.detach, N_("detach HEAD at named commit")), OPT_BOOL(0, "checkout", &opts.checkout, N_("populate the new working tree")), + OPT_BOOL(0, "lock", &opts.keep_locked, N_("keep the new working tree locked")), OPT_END() }; diff --git a/cache.h b/cache.h index 5c8078291c..e1f0e182ad 100644 --- a/cache.h +++ b/cache.h @@ -66,8 +66,12 @@ unsigned long git_deflate_bound(git_zstream *, unsigned long); #define GIT_SHA1_RAWSZ 20 #define GIT_SHA1_HEXSZ (2 * GIT_SHA1_RAWSZ) +/* The length in byte and in hex digits of the largest possible hash value. */ +#define GIT_MAX_RAWSZ GIT_SHA1_RAWSZ +#define GIT_MAX_HEXSZ GIT_SHA1_HEXSZ + struct object_id { - unsigned char hash[GIT_SHA1_RAWSZ]; + unsigned char hash[GIT_MAX_RAWSZ]; }; #if defined(DT_UNKNOWN) && !defined(NO_D_TYPE_IN_DIRENT) @@ -595,6 +599,7 @@ extern int write_locked_index(struct index_state *, struct lock_file *lock, unsi extern int discard_index(struct index_state *); extern int unmerged_index(const struct index_state *); extern int verify_path(const char *path); +extern int strcmp_offset(const char *s1, const char *s2, size_t *first_change); extern int index_dir_exists(struct index_state *istate, const char *name, int namelen); extern void adjust_dirname_case(struct index_state *istate, char *name); extern struct cache_entry *index_file_exists(struct index_state *istate, const char *name, int namelen, int igncase); @@ -706,6 +711,8 @@ extern void update_index_if_able(struct index_state *, struct lock_file *); extern int hold_locked_index(struct lock_file *, int); extern void set_alternate_index_output(const char *); +extern int verify_index_checksum; + /* Environment bits from configuration mechanism */ extern int trust_executable_bit; extern int trust_ctime; @@ -978,7 +985,7 @@ extern char *sha1_pack_index_name(const unsigned char *sha1); extern const char *find_unique_abbrev(const unsigned char *sha1, int len); extern int find_unique_abbrev_r(char *hex, const unsigned char *sha1, int len); -extern const unsigned char null_sha1[GIT_SHA1_RAWSZ]; +extern const unsigned char null_sha1[GIT_MAX_RAWSZ]; extern const struct object_id null_oid; static inline int hashcmp(const unsigned char *sha1, const unsigned char *sha2) @@ -1160,7 +1167,7 @@ typedef int create_file_fn(const char *path, void *cb); int raceproof_create_file(const char *path, create_file_fn fn, void *cb); int mkdir_in_gitdir(const char *path); -extern char *expand_user_path(const char *path); +extern char *expand_user_path(const char *path, int real_home); const char *enter_repo(const char *path, int strict); static inline int is_absolute_path(const char *path) { @@ -1360,7 +1367,7 @@ extern int get_sha1_with_context(const char *str, unsigned flags, unsigned char extern int get_oid(const char *str, struct object_id *oid); -typedef int each_abbrev_fn(const unsigned char *sha1, void *); +typedef int each_abbrev_fn(const struct object_id *oid, void *); extern int for_each_abbrev(const char *prefix, each_abbrev_fn, void *); extern int set_disambiguate_hint_config(const char *var, const char *value); @@ -1675,9 +1682,12 @@ extern struct packed_git *find_sha1_pack(const unsigned char *sha1, extern void pack_report(void); /* - * Create a temporary file rooted in the object database directory. + * Create a temporary file rooted in the object database directory, or + * die on failure. The filename is taken from "pattern", which should have the + * usual "XXXXXX" trailer, and the resulting filename is written into the + * "template" buffer. Returns the open descriptor. */ -extern int odb_mkstemp(char *template, size_t limit, const char *pattern); +extern int odb_mkstemp(struct strbuf *template, const char *pattern); /* * Generate the filename to be used for a pack file with checksum "sha1" and @@ -1882,6 +1892,11 @@ enum config_origin_type { CONFIG_ORIGIN_CMDLINE }; +struct config_options { + unsigned int respect_includes : 1; + const char *git_dir; +}; + typedef int (*config_fn_t)(const char *, const char *, void *); extern int git_default_config(const char *, const char *, void *); extern int git_config_from_file(config_fn_t fn, const char *, void *); @@ -1895,12 +1910,13 @@ extern void read_early_config(config_fn_t cb, void *data); extern void git_config(config_fn_t fn, void *); extern int git_config_with_options(config_fn_t fn, void *, struct git_config_source *config_source, - int respect_includes); + const struct config_options *opts); extern int git_parse_ulong(const char *, unsigned long *); extern int git_parse_maybe_bool(const char *); extern int git_config_int(const char *, const char *); extern int64_t git_config_int64(const char *, const char *); extern unsigned long git_config_ulong(const char *, const char *); +extern ssize_t git_config_ssize_t(const char *, const char *); extern int git_config_bool_or_int(const char *, const char *, int *); extern int git_config_bool(const char *, const char *); extern int git_config_maybe_bool(const char *, const char *); @@ -1947,6 +1963,7 @@ struct config_include_data { int depth; config_fn_t fn; void *data; + const struct config_options *opts; }; #define CONFIG_INCLUDE_INIT { 0 } extern int git_config_include(const char *name, const char *value, void *data); diff --git a/ci/run-windows-build.sh b/ci/run-windows-build.sh index 4e3a50b60e..d8f0d92f28 100755 --- a/ci/run-windows-build.sh +++ b/ci/run-windows-build.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash # -# Script to trigger the a Git for Windows build and test run. +# Script to trigger the Git for Windows build and test run. # Set the $GFW_CI_TOKEN as environment variable. # Pass the branch (only branches on https://github.com/git/git are # supported) and a commit hash. @@ -55,7 +55,7 @@ while true do LAST_STATUS=$STATUS STATUS=$(gfwci "action=status&buildId=$BUILD_ID") - test "$STATUS" = "$LAST_STATUS" || printf "\nStatus: $STATUS " + test "$STATUS" = "$LAST_STATUS" || printf "\nStatus: %s " "$STATUS" printf "." case "$STATUS" in diff --git a/combine-diff.c b/combine-diff.c index 59501db99a..2848034fe9 100644 --- a/combine-diff.c +++ b/combine-diff.c @@ -292,9 +292,10 @@ static char *grab_blob(const struct object_id *oid, unsigned int mode, enum object_type type; if (S_ISGITLINK(mode)) { - blob = xmalloc(100); - *size = snprintf(blob, 100, - "Subproject commit %s\n", oid_to_hex(oid)); + struct strbuf buf = STRBUF_INIT; + strbuf_addf(&buf, "Subproject commit %s\n", oid_to_hex(oid)); + *size = buf.len; + blob = strbuf_detach(&buf, NULL); } else if (is_null_oid(oid)) { /* deleted blob */ *size = 0; @@ -1311,7 +1312,7 @@ static const char *path_path(void *obj) /* find set of paths that every parent touches */ static struct combine_diff_path *find_paths_generic(const unsigned char *sha1, - const struct sha1_array *parents, struct diff_options *opt) + const struct oid_array *parents, struct diff_options *opt) { struct combine_diff_path *paths = NULL; int i, num_parent = parents->nr; @@ -1335,7 +1336,7 @@ static struct combine_diff_path *find_paths_generic(const unsigned char *sha1, opt->output_format = stat_opt; else opt->output_format = DIFF_FORMAT_NO_OUTPUT; - diff_tree_sha1(parents->sha1[i], sha1, "", opt); + diff_tree_sha1(parents->oid[i].hash, sha1, "", opt); diffcore_std(opt); paths = intersect_paths(paths, i, num_parent); @@ -1359,7 +1360,7 @@ static struct combine_diff_path *find_paths_generic(const unsigned char *sha1, * rename/copy detection, etc, comparing all trees simultaneously (= faster). */ static struct combine_diff_path *find_paths_multitree( - const unsigned char *sha1, const struct sha1_array *parents, + const unsigned char *sha1, const struct oid_array *parents, struct diff_options *opt) { int i, nparent = parents->nr; @@ -1369,7 +1370,7 @@ static struct combine_diff_path *find_paths_multitree( ALLOC_ARRAY(parents_sha1, nparent); for (i = 0; i < nparent; i++) - parents_sha1[i] = parents->sha1[i]; + parents_sha1[i] = parents->oid[i].hash; /* fake list head, so worker can assume it is non-NULL */ paths_head.next = NULL; @@ -1384,7 +1385,7 @@ static struct combine_diff_path *find_paths_multitree( void diff_tree_combined(const unsigned char *sha1, - const struct sha1_array *parents, + const struct oid_array *parents, int dense, struct rev_info *rev) { @@ -1462,7 +1463,7 @@ void diff_tree_combined(const unsigned char *sha1, if (stat_opt) { diffopts.output_format = stat_opt; - diff_tree_sha1(parents->sha1[0], sha1, "", &diffopts); + diff_tree_sha1(parents->oid[0].hash, sha1, "", &diffopts); diffcore_std(&diffopts); if (opt->orderfile) diffcore_order(opt->orderfile); @@ -1532,12 +1533,12 @@ void diff_tree_combined_merge(const struct commit *commit, int dense, struct rev_info *rev) { struct commit_list *parent = get_saved_parents(rev, commit); - struct sha1_array parents = SHA1_ARRAY_INIT; + struct oid_array parents = OID_ARRAY_INIT; while (parent) { - sha1_array_append(&parents, parent->item->object.oid.hash); + oid_array_append(&parents, &parent->item->object.oid); parent = parent->next; } diff_tree_combined(commit->object.oid.hash, &parents, dense, rev); - sha1_array_clear(&parents); + oid_array_clear(&parents); } diff --git a/commit.h b/commit.h index 528272ac9b..7b1986d5c8 100644 --- a/commit.h +++ b/commit.h @@ -261,7 +261,7 @@ extern struct commit_list *get_merge_bases_many_dirty(struct commit *one, int n, /* largest positive number a signed 32-bit integer can contain */ #define INFINITE_DEPTH 0x7fffffff -struct sha1_array; +struct oid_array; struct ref; extern int register_shallow(const unsigned char *sha1); extern int unregister_shallow(const unsigned char *sha1); @@ -273,18 +273,18 @@ extern struct commit_list *get_shallow_commits_by_rev_list( int ac, const char **av, int shallow_flag, int not_shallow_flag); extern void set_alternate_shallow_file(const char *path, int override); extern int write_shallow_commits(struct strbuf *out, int use_pack_protocol, - const struct sha1_array *extra); + const struct oid_array *extra); extern void setup_alternate_shallow(struct lock_file *shallow_lock, const char **alternate_shallow_file, - const struct sha1_array *extra); -extern const char *setup_temporary_shallow(const struct sha1_array *extra); + const struct oid_array *extra); +extern const char *setup_temporary_shallow(const struct oid_array *extra); extern void advertise_shallow_grafts(int); struct shallow_info { - struct sha1_array *shallow; + struct oid_array *shallow; int *ours, nr_ours; int *theirs, nr_theirs; - struct sha1_array *ref; + struct oid_array *ref; /* for receive-pack */ uint32_t **used_shallow; @@ -295,7 +295,7 @@ struct shallow_info { int nr_commits; }; -extern void prepare_shallow_info(struct shallow_info *, struct sha1_array *); +extern void prepare_shallow_info(struct shallow_info *, struct oid_array *); extern void clear_shallow_info(struct shallow_info *); extern void remove_nonexistent_theirs_shallow(struct shallow_info *); extern void assign_shallow_commits_to_refs(struct shallow_info *info, diff --git a/config.c b/config.c index 1a4d85537b..b4a3205da3 100644 --- a/config.c +++ b/config.c @@ -135,7 +135,7 @@ static int handle_path_include(const char *path, struct config_include_data *inc if (!path) return config_error_nonbool("include.path"); - expanded = expand_user_path(path); + expanded = expand_user_path(path, 0); if (!expanded) return error("could not expand include path '%s'", path); path = expanded; @@ -177,7 +177,7 @@ static int prepare_include_condition_pattern(struct strbuf *pat) char *expanded; int prefix = 0; - expanded = expand_user_path(pat->buf); + expanded = expand_user_path(pat->buf, 1); if (expanded) { strbuf_reset(pat); strbuf_addstr(pat, expanded); @@ -191,7 +191,7 @@ static int prepare_include_condition_pattern(struct strbuf *pat) return error(_("relative config include " "conditionals must come from files")); - strbuf_add_absolute_path(&path, cf->path); + strbuf_realpath(&path, cf->path, 1); slash = find_last_dir_sep(path.buf); if (!slash) die("BUG: how is this possible?"); @@ -207,13 +207,22 @@ static int prepare_include_condition_pattern(struct strbuf *pat) return prefix; } -static int include_by_gitdir(const char *cond, size_t cond_len, int icase) +static int include_by_gitdir(const struct config_options *opts, + const char *cond, size_t cond_len, int icase) { struct strbuf text = STRBUF_INIT; struct strbuf pattern = STRBUF_INIT; int ret = 0, prefix; + const char *git_dir; - strbuf_add_absolute_path(&text, get_git_dir()); + if (opts->git_dir) + git_dir = opts->git_dir; + else if (have_git_dir()) + git_dir = get_git_dir(); + else + goto done; + + strbuf_realpath(&text, git_dir, 1); strbuf_add(&pattern, cond, cond_len); prefix = prepare_include_condition_pattern(&pattern); @@ -242,13 +251,14 @@ static int include_by_gitdir(const char *cond, size_t cond_len, int icase) return ret; } -static int include_condition_is_true(const char *cond, size_t cond_len) +static int include_condition_is_true(const struct config_options *opts, + const char *cond, size_t cond_len) { if (skip_prefix_mem(cond, cond_len, "gitdir:", &cond, &cond_len)) - return include_by_gitdir(cond, cond_len, 0); + return include_by_gitdir(opts, cond, cond_len, 0); else if (skip_prefix_mem(cond, cond_len, "gitdir/i:", &cond, &cond_len)) - return include_by_gitdir(cond, cond_len, 1); + return include_by_gitdir(opts, cond, cond_len, 1); /* unknown conditionals are always false */ return 0; @@ -273,7 +283,7 @@ int git_config_include(const char *var, const char *value, void *data) ret = handle_path_include(value, inc); if (!parse_config_key(var, "includeif", &cond, &cond_len, &key) && - (cond && include_condition_is_true(cond, cond_len)) && + (cond && include_condition_is_true(inc->opts, cond, cond_len)) && !strcmp(key, "path")) ret = handle_path_include(value, inc); @@ -834,6 +844,15 @@ int git_parse_ulong(const char *value, unsigned long *ret) return 1; } +static int git_parse_ssize_t(const char *value, ssize_t *ret) +{ + intmax_t tmp; + if (!git_parse_signed(value, &tmp, maximum_signed_value_of_type(ssize_t))) + return 0; + *ret = tmp; + return 1; +} + NORETURN static void die_bad_number(const char *name, const char *value) { @@ -892,6 +911,14 @@ unsigned long git_config_ulong(const char *name, const char *value) return ret; } +ssize_t git_config_ssize_t(const char *name, const char *value) +{ + ssize_t ret; + if (!git_parse_ssize_t(value, &ret)) + die_bad_number(name, value); + return ret; +} + int git_parse_maybe_bool(const char *value) { if (!value) @@ -948,7 +975,7 @@ int git_config_pathname(const char **dest, const char *var, const char *value) { if (!value) return config_error_nonbool(var); - *dest = expand_user_path(value); + *dest = expand_user_path(value, 0); if (!*dest) die(_("failed to expand user dir in: '%s'"), value); return 0; @@ -1494,12 +1521,20 @@ int git_config_system(void) return !git_env_bool("GIT_CONFIG_NOSYSTEM", 0); } -static int do_git_config_sequence(config_fn_t fn, void *data) +static int do_git_config_sequence(const struct config_options *opts, + config_fn_t fn, void *data) { int ret = 0; char *xdg_config = xdg_config_home("config"); - char *user_config = expand_user_path("~/.gitconfig"); - char *repo_config = have_git_dir() ? git_pathdup("config") : NULL; + char *user_config = expand_user_path("~/.gitconfig", 0); + char *repo_config; + + if (opts->git_dir) + repo_config = mkpathdup("%s/config", opts->git_dir); + else if (have_git_dir()) + repo_config = git_pathdup("config"); + else + repo_config = NULL; current_parsing_scope = CONFIG_SCOPE_SYSTEM; if (git_config_system() && !access_or_die(git_etc_gitconfig(), R_OK, 0)) @@ -1530,13 +1565,14 @@ static int do_git_config_sequence(config_fn_t fn, void *data) int git_config_with_options(config_fn_t fn, void *data, struct git_config_source *config_source, - int respect_includes) + const struct config_options *opts) { struct config_include_data inc = CONFIG_INCLUDE_INIT; - if (respect_includes) { + if (opts->respect_includes) { inc.fn = fn; inc.data = data; + inc.opts = opts; fn = git_config_include; data = &inc; } @@ -1552,12 +1588,15 @@ int git_config_with_options(config_fn_t fn, void *data, else if (config_source && config_source->blob) return git_config_from_blob_ref(fn, config_source->blob, data); - return do_git_config_sequence(fn, data); + return do_git_config_sequence(opts, fn, data); } static void git_config_raw(config_fn_t fn, void *data) { - if (git_config_with_options(fn, data, NULL, 1) < 0) + struct config_options opts = {0}; + + opts.respect_includes = 1; + if (git_config_with_options(fn, data, NULL, &opts) < 0) /* * git_config_with_options() normally returns only * zero, as most errors are fatal, and @@ -1597,10 +1636,13 @@ static void configset_iter(struct config_set *cs, config_fn_t fn, void *data) void read_early_config(config_fn_t cb, void *data) { + struct config_options opts = {0}; struct strbuf buf = STRBUF_INIT; - git_config_with_options(cb, data, NULL, 1); + opts.respect_includes = 1; + if (have_git_dir()) + opts.git_dir = get_git_dir(); /* * When setup_git_directory() was not yet asked to discover the * GIT_DIR, we ask discover_git_directory() to figure out whether there @@ -1609,14 +1651,11 @@ void read_early_config(config_fn_t cb, void *data) * notably, the current working directory is still the same after the * call). */ - if (!have_git_dir() && discover_git_directory(&buf)) { - struct git_config_source repo_config; + else if (discover_git_directory(&buf)) + opts.git_dir = buf.buf; + + git_config_with_options(cb, data, NULL, &opts); - memset(&repo_config, 0, sizeof(repo_config)); - strbuf_addstr(&buf, "/config"); - repo_config.file = buf.buf; - git_config_with_options(cb, data, &repo_config, 1); - } strbuf_release(&buf); } diff --git a/config.mak.uname b/config.mak.uname index 399fe19271..192629f143 100644 --- a/config.mak.uname +++ b/config.mak.uname @@ -237,6 +237,7 @@ ifeq ($(uname_S),AIX) NO_MKDTEMP = YesPlease NO_STRLCPY = YesPlease NO_NSEC = YesPlease + NO_REGEX = NeedsStartEnd FREAD_READS_DIRECTORIES = UnfortunatelyYes INTERNAL_QSORT = UnfortunatelyYes NEEDS_LIBICONV = YesPlease diff --git a/connect.c b/connect.c index 7d65c1c736..cd21a1b6f7 100644 --- a/connect.c +++ b/connect.c @@ -111,8 +111,8 @@ static void annotate_refs_with_symref_info(struct ref *ref) */ struct ref **get_remote_heads(int in, char *src_buf, size_t src_len, struct ref **list, unsigned int flags, - struct sha1_array *extra_have, - struct sha1_array *shallow_points) + struct oid_array *extra_have, + struct oid_array *shallow_points) { struct ref **orig_list = list; @@ -153,7 +153,7 @@ struct ref **get_remote_heads(int in, char *src_buf, size_t src_len, die("protocol error: expected shallow sha-1, got '%s'", arg); if (!shallow_points) die("repository on the other end cannot be shallow"); - sha1_array_append(shallow_points, old_oid.hash); + oid_array_append(shallow_points, &old_oid); continue; } @@ -169,7 +169,7 @@ struct ref **get_remote_heads(int in, char *src_buf, size_t src_len, } if (extra_have && !strcmp(name, ".have")) { - sha1_array_append(extra_have, old_oid.hash); + oid_array_append(extra_have, &old_oid); continue; } @@ -730,7 +730,7 @@ static void handle_ssh_variant(const char *ssh_command, int is_cmdline, const char **ssh_argv; p = xstrdup(ssh_command); - if (split_cmdline(p, &ssh_argv)) { + if (split_cmdline(p, &ssh_argv) > 0) { variant = basename((char *)ssh_argv[0]); /* * At this point, variant points into the buffer @@ -738,8 +738,10 @@ static void handle_ssh_variant(const char *ssh_command, int is_cmdline, * any longer. */ free(ssh_argv); - } else + } else { + free(p); return; + } } if (!strcasecmp(variant, "plink") || diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash index 1150164d5c..af658995d5 100644 --- a/contrib/completion/git-completion.bash +++ b/contrib/completion/git-completion.bash @@ -28,6 +28,14 @@ # completion style. For example '!f() { : git commit ; ... }; f' will # tell the completion to use commit completion. This also works with aliases # of form "!sh -c '...'". For example, "!sh -c ': git commit ; ... '". +# +# You can set the following environment variables to influence the behavior of +# the completion routines: +# +# GIT_COMPLETION_CHECKOUT_NO_GUESS +# +# When set to "1", do not include "DWIM" suggestions in git-checkout +# completion (e.g., completing "foo" when "origin/foo" exists). case "$COMP_WORDBREAKS" in *:*) : great ;; @@ -709,6 +717,7 @@ __git_complete_remote_or_refspec () i="${words[c]}" case "$i" in --mirror) [ "$cmd" = "push" ] && no_complete_refspec=1 ;; + -d|--delete) [ "$cmd" = "push" ] && lhs=0 ;; --all) case "$cmd" in push) no_complete_refspec=1 ;; @@ -1248,7 +1257,8 @@ _git_checkout () # check if --track, --no-track, or --no-guess was specified # if so, disable DWIM mode local flags="--track --no-track --no-guess" track_opt="--track" - if [ -n "$(__git_find_on_cmdline "$flags")" ]; then + if [ "$GIT_COMPLETION_CHECKOUT_NO_GUESS" = "1" ] || + [ -n "$(__git_find_on_cmdline "$flags")" ]; then track_opt='' fi __git_complete_refs $track_opt diff --git a/contrib/git-resurrect.sh b/contrib/git-resurrect.sh index d7e97bbc76..8c171dd959 100755 --- a/contrib/git-resurrect.sh +++ b/contrib/git-resurrect.sh @@ -26,13 +26,13 @@ n,dry-run don't recreate the branch" . git-sh-setup search_reflog () { - sed -ne 's~^\([^ ]*\) .*\tcheckout: moving from '"$1"' .*~\1~p' \ + sed -ne 's~^\([^ ]*\) .* checkout: moving from '"$1"' .*~\1~p' \ < "$GIT_DIR"/logs/HEAD } search_reflog_merges () { git rev-parse $( - sed -ne 's~^[^ ]* \([^ ]*\) .*\tmerge '"$1"':.*~\1^2~p' \ + sed -ne 's~^[^ ]* \([^ ]*\) .* merge '"$1"':.*~\1^2~p' \ < "$GIT_DIR"/logs/HEAD ) } diff --git a/credential-cache.c b/credential-cache.c index 3cbd420019..91550bfb0b 100644 --- a/credential-cache.c +++ b/credential-cache.c @@ -87,7 +87,7 @@ static char *get_socket_path(void) { struct stat sb; char *old_dir, *socket; - old_dir = expand_user_path("~/.git-credential-cache"); + old_dir = expand_user_path("~/.git-credential-cache", 0); if (old_dir && !stat(old_dir, &sb) && S_ISDIR(sb.st_mode)) socket = xstrfmt("%s/socket", old_dir); else diff --git a/credential-store.c b/credential-store.c index 55ca1b1334..ac295420dd 100644 --- a/credential-store.c +++ b/credential-store.c @@ -168,7 +168,7 @@ int cmd_main(int argc, const char **argv) if (file) { string_list_append(&fns, file); } else { - if ((file = expand_user_path("~/.git-credentials"))) + if ((file = expand_user_path("~/.git-credentials", 0))) string_list_append_nodup(&fns, file); file = xdg_config_home("credentials"); if (file) diff --git a/daemon.c b/daemon.c index 473e6b6b63..ac7181a483 100644 --- a/daemon.c +++ b/daemon.c @@ -4,10 +4,6 @@ #include "strbuf.h" #include "string-list.h" -#ifndef HOST_NAME_MAX -#define HOST_NAME_MAX 256 -#endif - #ifdef NO_INITGROUPS #define initgroups(x, y) (0) /* nothing */ #endif @@ -449,46 +445,42 @@ static void copy_to_log(int fd) fclose(fp); } -static int run_service_command(const char **argv) +static int run_service_command(struct child_process *cld) { - struct child_process cld = CHILD_PROCESS_INIT; - - cld.argv = argv; - cld.git_cmd = 1; - cld.err = -1; - if (start_command(&cld)) + argv_array_push(&cld->args, "."); + cld->git_cmd = 1; + cld->err = -1; + if (start_command(cld)) return -1; close(0); close(1); - copy_to_log(cld.err); + copy_to_log(cld->err); - return finish_command(&cld); + return finish_command(cld); } static int upload_pack(void) { - /* Timeout as string */ - char timeout_buf[64]; - const char *argv[] = { "upload-pack", "--strict", NULL, ".", NULL }; - - argv[2] = timeout_buf; - - snprintf(timeout_buf, sizeof timeout_buf, "--timeout=%u", timeout); - return run_service_command(argv); + struct child_process cld = CHILD_PROCESS_INIT; + argv_array_pushl(&cld.args, "upload-pack", "--strict", NULL); + argv_array_pushf(&cld.args, "--timeout=%u", timeout); + return run_service_command(&cld); } static int upload_archive(void) { - static const char *argv[] = { "upload-archive", ".", NULL }; - return run_service_command(argv); + struct child_process cld = CHILD_PROCESS_INIT; + argv_array_push(&cld.args, "upload-archive"); + return run_service_command(&cld); } static int receive_pack(void) { - static const char *argv[] = { "receive-pack", ".", NULL }; - return run_service_command(argv); + struct child_process cld = CHILD_PROCESS_INIT; + argv_array_push(&cld.args, "receive-pack"); + return run_service_command(&cld); } static struct daemon_service daemon_service[] = { diff --git a/diff.c b/diff.c index 58cb72d7e7..74283d9001 100644 --- a/diff.c +++ b/diff.c @@ -398,7 +398,7 @@ static struct diff_tempfile { */ const char *name; - char hex[GIT_SHA1_HEXSZ + 1]; + char hex[GIT_MAX_HEXSZ + 1]; char mode[10]; /* @@ -911,7 +911,7 @@ static int fn_out_diff_words_write_helper(FILE *fp, /* * '--color-words' algorithm can be described as: * - * 1. collect a the minus/plus lines of a diff hunk, divided into + * 1. collect the minus/plus lines of a diff hunk, divided into * minus-lines and plus-lines; * * 2. break both minus-lines and plus-lines into words and @@ -4219,7 +4219,7 @@ const char *diff_aligned_abbrev(const struct object_id *oid, int len) * uniqueness across all objects (statistically speaking). */ if (abblen < GIT_SHA1_HEXSZ - 3) { - static char hex[GIT_SHA1_HEXSZ + 1]; + static char hex[GIT_MAX_HEXSZ + 1]; if (len < abblen && abblen <= len + 2) xsnprintf(hex, sizeof(hex), "%s%.*s", abbrev, len+3-abblen, ".."); else @@ -4570,6 +4570,19 @@ static void patch_id_consume(void *priv, char *line, unsigned long len) data->patchlen += new_len; } +static void patch_id_add_string(git_SHA_CTX *ctx, const char *str) +{ + git_SHA1_Update(ctx, str, strlen(str)); +} + +static void patch_id_add_mode(git_SHA_CTX *ctx, unsigned mode) +{ + /* large enough for 2^32 in octal */ + char buf[12]; + int len = xsnprintf(buf, sizeof(buf), "%06o", mode); + git_SHA1_Update(ctx, buf, len); +} + /* returns 0 upon success, and writes result into sha1 */ static int diff_get_patch_id(struct diff_options *options, unsigned char *sha1, int diff_header_only) { @@ -4577,7 +4590,6 @@ static int diff_get_patch_id(struct diff_options *options, unsigned char *sha1, int i; git_SHA_CTX ctx; struct patch_id_t data; - char buffer[PATH_MAX * 4 + 20]; git_SHA1_Init(&ctx); memset(&data, 0, sizeof(struct patch_id_t)); @@ -4609,36 +4621,30 @@ static int diff_get_patch_id(struct diff_options *options, unsigned char *sha1, len1 = remove_space(p->one->path, strlen(p->one->path)); len2 = remove_space(p->two->path, strlen(p->two->path)); - if (p->one->mode == 0) - len1 = snprintf(buffer, sizeof(buffer), - "diff--gita/%.*sb/%.*s" - "newfilemode%06o" - "---/dev/null" - "+++b/%.*s", - len1, p->one->path, - len2, p->two->path, - p->two->mode, - len2, p->two->path); - else if (p->two->mode == 0) - len1 = snprintf(buffer, sizeof(buffer), - "diff--gita/%.*sb/%.*s" - "deletedfilemode%06o" - "---a/%.*s" - "+++/dev/null", - len1, p->one->path, - len2, p->two->path, - p->one->mode, - len1, p->one->path); - else - len1 = snprintf(buffer, sizeof(buffer), - "diff--gita/%.*sb/%.*s" - "---a/%.*s" - "+++b/%.*s", - len1, p->one->path, - len2, p->two->path, - len1, p->one->path, - len2, p->two->path); - git_SHA1_Update(&ctx, buffer, len1); + patch_id_add_string(&ctx, "diff--git"); + patch_id_add_string(&ctx, "a/"); + git_SHA1_Update(&ctx, p->one->path, len1); + patch_id_add_string(&ctx, "b/"); + git_SHA1_Update(&ctx, p->two->path, len2); + + if (p->one->mode == 0) { + patch_id_add_string(&ctx, "newfilemode"); + patch_id_add_mode(&ctx, p->two->mode); + patch_id_add_string(&ctx, "---/dev/null"); + patch_id_add_string(&ctx, "+++b/"); + git_SHA1_Update(&ctx, p->two->path, len2); + } else if (p->two->mode == 0) { + patch_id_add_string(&ctx, "deletedfilemode"); + patch_id_add_mode(&ctx, p->one->mode); + patch_id_add_string(&ctx, "---a/"); + git_SHA1_Update(&ctx, p->one->path, len1); + patch_id_add_string(&ctx, "+++/dev/null"); + } else { + patch_id_add_string(&ctx, "---a/"); + git_SHA1_Update(&ctx, p->one->path, len1); + patch_id_add_string(&ctx, "+++b/"); + git_SHA1_Update(&ctx, p->two->path, len2); + } if (diff_header_only) continue; diff --git a/diff.h b/diff.h index e9ccb38c26..5be1ee77a7 100644 --- a/diff.h +++ b/diff.h @@ -14,7 +14,7 @@ struct diff_queue_struct; struct strbuf; struct diff_filespec; struct userdiff_driver; -struct sha1_array; +struct oid_array; struct commit; struct combine_diff_path; @@ -236,7 +236,7 @@ struct combine_diff_path { extern void show_combined_diff(struct combine_diff_path *elem, int num_parent, int dense, struct rev_info *); -extern void diff_tree_combined(const unsigned char *sha1, const struct sha1_array *parents, int dense, struct rev_info *rev); +extern void diff_tree_combined(const unsigned char *sha1, const struct oid_array *parents, int dense, struct rev_info *rev); extern void diff_tree_combined_merge(const struct commit *commit, int dense, struct rev_info *rev); diff --git a/environment.c b/environment.c index a17d96aa85..ff6e4f06e9 100644 --- a/environment.c +++ b/environment.c @@ -277,7 +277,7 @@ char *get_object_directory(void) return git_object_dir; } -int odb_mkstemp(char *template, size_t limit, const char *pattern) +int odb_mkstemp(struct strbuf *template, const char *pattern) { int fd; /* @@ -285,18 +285,16 @@ int odb_mkstemp(char *template, size_t limit, const char *pattern) * restrictive except to remove write permission. */ int mode = 0444; - snprintf(template, limit, "%s/%s", - get_object_directory(), pattern); - fd = git_mkstemp_mode(template, mode); + git_path_buf(template, "objects/%s", pattern); + fd = git_mkstemp_mode(template->buf, mode); if (0 <= fd) return fd; /* slow path */ /* some mkstemp implementations erase template on failure */ - snprintf(template, limit, "%s/%s", - get_object_directory(), pattern); - safe_create_leading_directories(template); - return xmkstemp_mode(template, mode); + git_path_buf(template, "objects/%s", pattern); + safe_create_leading_directories(template->buf); + return xmkstemp_mode(template->buf, mode); } int odb_pack_keep(const char *name) diff --git a/fast-import.c b/fast-import.c index f6f416f20a..cf58f875b8 100644 --- a/fast-import.c +++ b/fast-import.c @@ -890,14 +890,15 @@ static struct tree_content *dup_tree_content(struct tree_content *s) static void start_packfile(void) { - static char tmp_file[PATH_MAX]; + struct strbuf tmp_file = STRBUF_INIT; struct packed_git *p; struct pack_header hdr; int pack_fd; - pack_fd = odb_mkstemp(tmp_file, sizeof(tmp_file), - "pack/tmp_pack_XXXXXX"); - FLEX_ALLOC_STR(p, pack_name, tmp_file); + pack_fd = odb_mkstemp(&tmp_file, "pack/tmp_pack_XXXXXX"); + FLEX_ALLOC_STR(p, pack_name, tmp_file.buf); + strbuf_release(&tmp_file); + p->pack_fd = pack_fd; p->do_not_close = 1; pack_file = sha1fd(pack_fd, p->pack_name); @@ -3201,7 +3202,7 @@ static char* make_fast_import_path(const char *path) { if (!relative_marks_paths || is_absolute_path(path)) return xstrdup(path); - return xstrdup(git_path("info/fast-import/%s", path)); + return git_pathdup("info/fast-import/%s", path); } static void option_import_marks(const char *marks, diff --git a/fetch-pack.c b/fetch-pack.c index d07d85ce30..afb8b05024 100644 --- a/fetch-pack.c +++ b/fetch-pack.c @@ -276,6 +276,8 @@ static enum ack_type get_ack(int fd, unsigned char *result_sha1) return ACK; } } + if (skip_prefix(line, "ERR ", &arg)) + die(_("remote error: %s"), arg); die(_("git fetch-pack: expected ACK/NAK, got '%s'"), line); } @@ -802,8 +804,8 @@ static int get_pack(struct fetch_pack_args *args, if (args->use_thin_pack) argv_array_push(&cmd.args, "--fix-thin"); if (args->lock_pack || unpack_limit) { - char hostname[256]; - if (gethostname(hostname, sizeof(hostname))) + char hostname[HOST_NAME_MAX + 1]; + if (xgethostname(hostname, sizeof(hostname))) xsnprintf(hostname, sizeof(hostname), "localhost"); argv_array_pushf(&cmd.args, "--keep=fetch-pack %"PRIuMAX " on %s", @@ -1015,7 +1017,7 @@ static void update_shallow(struct fetch_pack_args *args, struct ref **sought, int nr_sought, struct shallow_info *si) { - struct sha1_array ref = SHA1_ARRAY_INIT; + struct oid_array ref = OID_ARRAY_INIT; int *status; int i; @@ -1038,18 +1040,18 @@ static void update_shallow(struct fetch_pack_args *args, * shallow points that exist in the pack (iow in repo * after get_pack() and reprepare_packed_git()) */ - struct sha1_array extra = SHA1_ARRAY_INIT; - unsigned char (*sha1)[20] = si->shallow->sha1; + struct oid_array extra = OID_ARRAY_INIT; + struct object_id *oid = si->shallow->oid; for (i = 0; i < si->shallow->nr; i++) - if (has_sha1_file(sha1[i])) - sha1_array_append(&extra, sha1[i]); + if (has_object_file(&oid[i])) + oid_array_append(&extra, &oid[i]); if (extra.nr) { setup_alternate_shallow(&shallow_lock, &alternate_shallow_file, &extra); commit_lock_file(&shallow_lock); } - sha1_array_clear(&extra); + oid_array_clear(&extra); return; } @@ -1060,7 +1062,7 @@ static void update_shallow(struct fetch_pack_args *args, if (!si->nr_ours && !si->nr_theirs) return; for (i = 0; i < nr_sought; i++) - sha1_array_append(&ref, sought[i]->old_oid.hash); + oid_array_append(&ref, &sought[i]->old_oid); si->ref = &ref; if (args->update_shallow) { @@ -1070,23 +1072,23 @@ static void update_shallow(struct fetch_pack_args *args, * shallow roots that are actually reachable from new * refs. */ - struct sha1_array extra = SHA1_ARRAY_INIT; - unsigned char (*sha1)[20] = si->shallow->sha1; + struct oid_array extra = OID_ARRAY_INIT; + struct object_id *oid = si->shallow->oid; assign_shallow_commits_to_refs(si, NULL, NULL); if (!si->nr_ours && !si->nr_theirs) { - sha1_array_clear(&ref); + oid_array_clear(&ref); return; } for (i = 0; i < si->nr_ours; i++) - sha1_array_append(&extra, sha1[si->ours[i]]); + oid_array_append(&extra, &oid[si->ours[i]]); for (i = 0; i < si->nr_theirs; i++) - sha1_array_append(&extra, sha1[si->theirs[i]]); + oid_array_append(&extra, &oid[si->theirs[i]]); setup_alternate_shallow(&shallow_lock, &alternate_shallow_file, &extra); commit_lock_file(&shallow_lock); - sha1_array_clear(&extra); - sha1_array_clear(&ref); + oid_array_clear(&extra); + oid_array_clear(&ref); return; } @@ -1102,7 +1104,7 @@ static void update_shallow(struct fetch_pack_args *args, sought[i]->status = REF_STATUS_REJECT_SHALLOW; } free(status); - sha1_array_clear(&ref); + oid_array_clear(&ref); } struct ref *fetch_pack(struct fetch_pack_args *args, @@ -1110,7 +1112,7 @@ struct ref *fetch_pack(struct fetch_pack_args *args, const struct ref *ref, const char *dest, struct ref **sought, int nr_sought, - struct sha1_array *shallow, + struct oid_array *shallow, char **pack_lockfile) { struct ref *ref_cpy; diff --git a/fetch-pack.h b/fetch-pack.h index a2d46e6e75..b6aeb43a8e 100644 --- a/fetch-pack.h +++ b/fetch-pack.h @@ -4,7 +4,7 @@ #include "string-list.h" #include "run-command.h" -struct sha1_array; +struct oid_array; struct fetch_pack_args { const char *uploadpack; @@ -42,7 +42,7 @@ struct ref *fetch_pack(struct fetch_pack_args *args, const char *dest, struct ref **sought, int nr_sought, - struct sha1_array *shallow, + struct oid_array *shallow, char **pack_lockfile); /* diff --git a/fsck.c b/fsck.c index 939792752b..e6152e4e6d 100644 --- a/fsck.c +++ b/fsck.c @@ -132,10 +132,10 @@ static int fsck_msg_type(enum fsck_msg_id msg_id, static void init_skiplist(struct fsck_options *options, const char *path) { - static struct sha1_array skiplist = SHA1_ARRAY_INIT; + static struct oid_array skiplist = OID_ARRAY_INIT; int sorted, fd; - char buffer[41]; - unsigned char sha1[20]; + char buffer[GIT_MAX_HEXSZ + 1]; + struct object_id oid; if (options->skiplist) sorted = options->skiplist->sorted; @@ -148,17 +148,18 @@ static void init_skiplist(struct fsck_options *options, const char *path) if (fd < 0) die("Could not open skip list: %s", path); for (;;) { + const char *p; int result = read_in_full(fd, buffer, sizeof(buffer)); if (result < 0) die_errno("Could not read '%s'", path); if (!result) break; - if (get_sha1_hex(buffer, sha1) || buffer[40] != '\n') + if (parse_oid_hex(buffer, &oid, &p) || *p != '\n') die("Invalid SHA-1: %s", buffer); - sha1_array_append(&skiplist, sha1); + oid_array_append(&skiplist, &oid); if (sorted && skiplist.nr > 1 && - hashcmp(skiplist.sha1[skiplist.nr - 2], - sha1) > 0) + oidcmp(&skiplist.oid[skiplist.nr - 2], + &oid) > 0) sorted = 0; } close(fd); @@ -279,7 +280,7 @@ static int report(struct fsck_options *options, struct object *object, return 0; if (options->skiplist && object && - sha1_array_lookup(options->skiplist, object->oid.hash) >= 0) + oid_array_lookup(options->skiplist, &object->oid) >= 0) return 0; if (msg_type == FSCK_FATAL) diff --git a/fsck.h b/fsck.h index 1891c1863b..4525510d99 100644 --- a/fsck.h +++ b/fsck.h @@ -34,7 +34,7 @@ struct fsck_options { fsck_error error_func; unsigned strict:1; int *msg_type; - struct sha1_array *skiplist; + struct oid_array *skiplist; struct decoration *object_names; }; diff --git a/git-add--interactive.perl b/git-add--interactive.perl index 77b4ed53a8..709a5f6ce6 100755 --- a/git-add--interactive.perl +++ b/git-add--interactive.perl @@ -1040,7 +1040,7 @@ sub color_diff { marked for applying."), checkout_index => N__( "If the patch applies cleanly, the edited hunk will immediately be -marked for discarding"), +marked for discarding."), checkout_head => N__( "If the patch applies cleanly, the edited hunk will immediately be marked for discarding."), diff --git a/git-compat-util.h b/git-compat-util.h index 8a4a3f85e7..bd04564a69 100644 --- a/git-compat-util.h +++ b/git-compat-util.h @@ -884,6 +884,12 @@ static inline size_t xsize_t(off_t len) __attribute__((format (printf, 3, 4))) extern int xsnprintf(char *dst, size_t max, const char *fmt, ...); +#ifndef HOST_NAME_MAX +#define HOST_NAME_MAX 256 +#endif + +extern int xgethostname(char *buf, size_t len); + /* in ctype.c, for kwset users */ extern const unsigned char tolower_trans_tbl[256]; diff --git a/git-p4.py b/git-p4.py index eab319d76e..8d151da91b 100755 --- a/git-p4.py +++ b/git-p4.py @@ -160,17 +160,42 @@ def p4_write_pipe(c, stdin): real_cmd = p4_build_cmd(c) return write_pipe(real_cmd, stdin) -def read_pipe(c, ignore_error=False): +def read_pipe_full(c): + """ Read output from command. Returns a tuple + of the return status, stdout text and stderr + text. + """ if verbose: sys.stderr.write('Reading pipe: %s\n' % str(c)) expand = isinstance(c,basestring) p = subprocess.Popen(c, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=expand) (out, err) = p.communicate() - if p.returncode != 0 and not ignore_error: - die('Command failed: %s\nError: %s' % (str(c), err)) + return (p.returncode, out, err) + +def read_pipe(c, ignore_error=False): + """ Read output from command. Returns the output text on + success. On failure, terminates execution, unless + ignore_error is True, when it returns an empty string. + """ + (retcode, out, err) = read_pipe_full(c) + if retcode != 0: + if ignore_error: + out = "" + else: + die('Command failed: %s\nError: %s' % (str(c), err)) return out +def read_pipe_text(c): + """ Read output from a command with trailing whitespace stripped. + On error, returns None. + """ + (retcode, out, err) = read_pipe_full(c) + if retcode != 0: + return None + else: + return out.rstrip() + def p4_read_pipe(c, ignore_error=False): real_cmd = p4_build_cmd(c) return read_pipe(real_cmd, ignore_error) @@ -577,12 +602,7 @@ def p4Where(depotPath): return clientPath def currentGitBranch(): - retcode = system(["git", "symbolic-ref", "-q", "HEAD"], ignore_error=True) - if retcode != 0: - # on a detached head - return None - else: - return read_pipe(["git", "name-rev", "HEAD"]).split(" ")[1].strip() + return read_pipe_text(["git", "symbolic-ref", "--short", "-q", "HEAD"]) def isValidGitDir(path): return git_dir(path) != None diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh index 2c9c0165b5..90b1fbe9cf 100644 --- a/git-rebase--interactive.sh +++ b/git-rebase--interactive.sh @@ -5,7 +5,7 @@ # Copyright (c) 2006 Johannes E. Schindelin # # The original idea comes from Eric W. Biederman, in -# http://article.gmane.org/gmane.comp.version-control.git/22407 +# https://public-inbox.org/git/m1odwkyuf5.fsf_-_@ebiederm.dsl.xmission.com/ # # The file containing rebase commands, comments, and empty lines. # This file is created by "git rebase -i" then edited by the user. As diff --git a/git-rebase.sh b/git-rebase.sh index 48d7c5ded4..db1deed846 100755 --- a/git-rebase.sh +++ b/git-rebase.sh @@ -34,6 +34,7 @@ root! rebase all reachable commits up to the root(s) autosquash move commits that begin with squash!/fixup! under -i committer-date-is-author-date! passed to 'git am' ignore-date! passed to 'git am' +signoff passed to 'git am' whitespace=! passed to 'git apply' ignore-whitespace! passed to 'git apply' C=! passed to 'git apply' @@ -321,7 +322,7 @@ do --ignore-whitespace) git_am_opt="$git_am_opt $1" ;; - --committer-date-is-author-date|--ignore-date) + --committer-date-is-author-date|--ignore-date|--signoff|--no-signoff) git_am_opt="$git_am_opt $1" force_rebase=t ;; diff --git a/grep.c b/grep.c index 56ef0ecbff..47cee45067 100644 --- a/grep.c +++ b/grep.c @@ -1171,7 +1171,7 @@ static void show_line(struct grep_opt *opt, char *bol, char *eol, } if (opt->linenum) { char buf[32]; - snprintf(buf, sizeof(buf), "%d", lno); + xsnprintf(buf, sizeof(buf), "%d", lno); output_color(opt, buf, strlen(buf), opt->color_lineno); output_sep(opt, sign); } @@ -1653,7 +1653,7 @@ static int grep_source_1(struct grep_opt *opt, struct grep_source *gs, int colle opt->color_filename); output_sep(opt, ':'); } - snprintf(buf, sizeof(buf), "%u\n", count); + xsnprintf(buf, sizeof(buf), "%u\n", count); opt->output(opt, buf, strlen(buf)); return 1; } diff --git a/hex.c b/hex.c index eab7b626ee..28b44118cb 100644 --- a/hex.c +++ b/hex.c @@ -85,7 +85,7 @@ char *oid_to_hex_r(char *buffer, const struct object_id *oid) char *sha1_to_hex(const unsigned char *sha1) { static int bufno; - static char hexbuffer[4][GIT_SHA1_HEXSZ + 1]; + static char hexbuffer[4][GIT_MAX_HEXSZ + 1]; bufno = (bufno + 1) % ARRAY_SIZE(hexbuffer); return sha1_to_hex_r(hexbuffer[bufno], sha1); } diff --git a/http.c b/http.c index 96d84bbed3..d2e11ec6f0 100644 --- a/http.c +++ b/http.c @@ -19,7 +19,7 @@ long int git_curl_ipresolve; #endif int active_requests; int http_is_verbose; -size_t http_post_buffer = 16 * LARGE_PACKET_MAX; +ssize_t http_post_buffer = 16 * LARGE_PACKET_MAX; #if LIBCURL_VERSION_NUM >= 0x070a06 #define LIBCURL_CAN_HANDLE_AUTH_ANY @@ -331,7 +331,9 @@ static int http_options(const char *var, const char *value, void *cb) } if (!strcmp("http.postbuffer", var)) { - http_post_buffer = git_config_int(var, value); + http_post_buffer = git_config_ssize_t(var, value); + if (http_post_buffer < 0) + warning(_("negative value for http.postbuffer; defaulting to %d"), LARGE_PACKET_MAX); if (http_post_buffer < LARGE_PACKET_MAX) http_post_buffer = LARGE_PACKET_MAX; return 0; @@ -836,8 +838,14 @@ static CURL *get_curl_handle(void) } } - if (curl_http_proxy) { - curl_easy_setopt(result, CURLOPT_PROXY, curl_http_proxy); + if (curl_http_proxy && curl_http_proxy[0] == '\0') { + /* + * Handle case with the empty http.proxy value here to keep + * common code clean. + * NB: empty option disables proxying at all. + */ + curl_easy_setopt(result, CURLOPT_PROXY, ""); + } else if (curl_http_proxy) { #if LIBCURL_VERSION_NUM >= 0x071800 if (starts_with(curl_http_proxy, "socks5h")) curl_easy_setopt(result, @@ -861,6 +869,9 @@ static CURL *get_curl_handle(void) strbuf_release(&url); } + if (!proxy_auth.host) + die("Invalid proxy URL '%s'", curl_http_proxy); + curl_easy_setopt(result, CURLOPT_PROXY, proxy_auth.host); #if LIBCURL_VERSION_NUM >= 0x071304 var_override(&curl_no_proxy, getenv("NO_PROXY")); @@ -1366,9 +1377,9 @@ static int handle_curl_result(struct slot_results *results) * FAILONERROR it is lost, so we can give only the numeric * status code. */ - snprintf(curl_errorstr, sizeof(curl_errorstr), - "The requested URL returned error: %ld", - results->http_code); + xsnprintf(curl_errorstr, sizeof(curl_errorstr), + "The requested URL returned error: %ld", + results->http_code); } if (results->curl_result == CURLE_OK) { @@ -1410,8 +1421,8 @@ int run_one_slot(struct active_request_slot *slot, { slot->results = results; if (!start_active_slot(slot)) { - snprintf(curl_errorstr, sizeof(curl_errorstr), - "failed to start HTTP request"); + xsnprintf(curl_errorstr, sizeof(curl_errorstr), + "failed to start HTTP request"); return HTTP_START_FAILED; } diff --git a/http.h b/http.h index 02bccb7b0c..f7bd3b26b0 100644 --- a/http.h +++ b/http.h @@ -111,7 +111,7 @@ extern struct curl_slist *http_copy_default_headers(void); extern long int git_curl_ipresolve; extern int active_requests; extern int http_is_verbose; -extern size_t http_post_buffer; +extern ssize_t http_post_buffer; extern struct credential http_auth; extern char curl_errorstr[CURL_ERROR_SIZE]; diff --git a/ident.c b/ident.c index c0364fe3a1..bea871c8e0 100644 --- a/ident.c +++ b/ident.c @@ -120,9 +120,9 @@ static int canonical_name(const char *host, struct strbuf *out) static void add_domainname(struct strbuf *out, int *is_bogus) { - char buf[1024]; + char buf[HOST_NAME_MAX + 1]; - if (gethostname(buf, sizeof(buf))) { + if (xgethostname(buf, sizeof(buf))) { warning_errno("cannot get host name"); strbuf_addstr(out, "(none)"); *is_bogus = 1; diff --git a/imap-send.c b/imap-send.c index 5c7e27a894..857591660f 100644 --- a/imap-send.c +++ b/imap-send.c @@ -964,7 +964,7 @@ static struct imap_store *imap_open_store(struct imap_server_conf *srvc, char *f int gai; char portstr[6]; - snprintf(portstr, sizeof(portstr), "%d", srvc->port); + xsnprintf(portstr, sizeof(portstr), "%d", srvc->port); memset(&hints, 0, sizeof(hints)); hints.ai_socktype = SOCK_STREAM; diff --git a/mailinfo.c b/mailinfo.c index a489d9d0fb..68037758f2 100644 --- a/mailinfo.c +++ b/mailinfo.c @@ -757,8 +757,13 @@ static int handle_commit_msg(struct mailinfo *mi, struct strbuf *line) assert(!mi->filter_stage); if (mi->header_stage) { - if (!line->len || (line->len == 1 && line->buf[0] == '\n')) + if (!line->len || (line->len == 1 && line->buf[0] == '\n')) { + if (mi->inbody_header_accum.len) { + flush_inbody_header_accum(mi); + mi->header_stage = 0; + } return 0; + } } if (mi->use_inbody_headers && mi->header_stage) { diff --git a/name-hash.c b/name-hash.c index cac313c78d..39309efb7f 100644 --- a/name-hash.c +++ b/name-hash.c @@ -342,7 +342,9 @@ static int handle_range_dir( * Scan forward in the index array for index entries having the same * path prefix (that are also in this directory). */ - if (strncmp(istate->cache[k_start + 1]->name, prefix->buf, prefix->len) > 0) + if (k_start + 1 >= k_end) + k = k_end; + else if (strncmp(istate->cache[k_start + 1]->name, prefix->buf, prefix->len) > 0) k = k_start + 1; else if (strncmp(istate->cache[k_end - 1]->name, prefix->buf, prefix->len) == 0) k = k_end; diff --git a/notes-merge.c b/notes-merge.c index 5998605acc..32caaaff74 100644 --- a/notes-merge.c +++ b/notes-merge.c @@ -676,7 +676,7 @@ int notes_merge_commit(struct notes_merge_options *o, const char *msg = strstr(buffer, "\n\n"); int baselen; - strbuf_addstr(&path, git_path(NOTES_MERGE_WORKTREE)); + git_path_buf(&path, NOTES_MERGE_WORKTREE); if (o->verbosity >= 3) printf("Committing notes in notes merge worktree at %s\n", path.buf); @@ -741,7 +741,7 @@ int notes_merge_abort(struct notes_merge_options *o) struct strbuf buf = STRBUF_INIT; int ret; - strbuf_addstr(&buf, git_path(NOTES_MERGE_WORKTREE)); + git_path_buf(&buf, NOTES_MERGE_WORKTREE); if (o->verbosity >= 3) printf("Removing notes merge worktree at %s/*\n", buf.buf); ret = remove_dir_recursively(&buf, REMOVE_DIR_KEEP_TOPLEVEL); diff --git a/pack-bitmap-write.c b/pack-bitmap-write.c index 9705596014..e313f4f2bc 100644 --- a/pack-bitmap-write.c +++ b/pack-bitmap-write.c @@ -508,18 +508,16 @@ void bitmap_writer_finish(struct pack_idx_entry **index, const char *filename, uint16_t options) { - static char tmp_file[PATH_MAX]; static uint16_t default_version = 1; static uint16_t flags = BITMAP_OPT_FULL_DAG; + struct strbuf tmp_file = STRBUF_INIT; struct sha1file *f; struct bitmap_disk_header header; - int fd = odb_mkstemp(tmp_file, sizeof(tmp_file), "pack/tmp_bitmap_XXXXXX"); + int fd = odb_mkstemp(&tmp_file, "pack/tmp_bitmap_XXXXXX"); - if (fd < 0) - die_errno("unable to create '%s'", tmp_file); - f = sha1fd(fd, tmp_file); + f = sha1fd(fd, tmp_file.buf); memcpy(header.magic, BITMAP_IDX_SIGNATURE, sizeof(BITMAP_IDX_SIGNATURE)); header.version = htons(default_version); @@ -539,9 +537,11 @@ void bitmap_writer_finish(struct pack_idx_entry **index, sha1close(f, NULL, CSUM_FSYNC); - if (adjust_shared_perm(tmp_file)) + if (adjust_shared_perm(tmp_file.buf)) die_errno("unable to make temporary bitmap file readable"); - if (rename(tmp_file, filename)) + if (rename(tmp_file.buf, filename)) die_errno("unable to rename temporary bitmap file to '%s'", filename); + + strbuf_release(&tmp_file); } diff --git a/pack-write.c b/pack-write.c index c057513f12..fa97b72559 100644 --- a/pack-write.c +++ b/pack-write.c @@ -71,15 +71,15 @@ const char *write_idx_file(const char *index_name, struct pack_idx_entry **objec f = sha1fd_check(index_name); } else { if (!index_name) { - static char tmp_file[PATH_MAX]; - fd = odb_mkstemp(tmp_file, sizeof(tmp_file), "pack/tmp_idx_XXXXXX"); - index_name = xstrdup(tmp_file); + struct strbuf tmp_file = STRBUF_INIT; + fd = odb_mkstemp(&tmp_file, "pack/tmp_idx_XXXXXX"); + index_name = strbuf_detach(&tmp_file, NULL); } else { unlink(index_name); fd = open(index_name, O_CREAT|O_EXCL|O_WRONLY, 0600); + if (fd < 0) + die_errno("unable to create '%s'", index_name); } - if (fd < 0) - die_errno("unable to create '%s'", index_name); f = sha1fd(fd, index_name); } @@ -329,11 +329,11 @@ int encode_in_pack_object_header(unsigned char *hdr, int hdr_len, struct sha1file *create_tmp_packfile(char **pack_tmp_name) { - char tmpname[PATH_MAX]; + struct strbuf tmpname = STRBUF_INIT; int fd; - fd = odb_mkstemp(tmpname, sizeof(tmpname), "pack/tmp_pack_XXXXXX"); - *pack_tmp_name = xstrdup(tmpname); + fd = odb_mkstemp(&tmpname, "pack/tmp_pack_XXXXXX"); + *pack_tmp_name = strbuf_detach(&tmpname, NULL); return sha1fd(fd, *pack_tmp_name); } diff --git a/parse-options-cb.c b/parse-options-cb.c index b7d8f7dcb2..7419780a9b 100644 --- a/parse-options-cb.c +++ b/parse-options-cb.c @@ -96,17 +96,17 @@ int parse_opt_commits(const struct option *opt, const char *arg, int unset) int parse_opt_object_name(const struct option *opt, const char *arg, int unset) { - unsigned char sha1[20]; + struct object_id oid; if (unset) { - sha1_array_clear(opt->value); + oid_array_clear(opt->value); return 0; } if (!arg) return -1; - if (get_sha1(arg, sha1)) + if (get_oid(arg, &oid)) return error(_("malformed object name '%s'"), arg); - sha1_array_append(opt->value, sha1); + oid_array_append(opt->value, &oid); return 0; } diff --git a/patch-ids.c b/patch-ids.c index ce285c2e0c..fa8f11de82 100644 --- a/patch-ids.c +++ b/patch-ids.c @@ -71,7 +71,7 @@ static int init_patch_id_entry(struct patch_id *patch, struct commit *commit, struct patch_ids *ids) { - unsigned char header_only_patch_id[GIT_SHA1_RAWSZ]; + unsigned char header_only_patch_id[GIT_MAX_RAWSZ]; patch->commit = commit; if (commit_patch_id(commit, &ids->diffopts, header_only_patch_id, 1)) diff --git a/patch-ids.h b/patch-ids.h index 0f34ea11ea..b9e5751f8e 100644 --- a/patch-ids.h +++ b/patch-ids.h @@ -3,7 +3,7 @@ struct patch_id { struct hashmap_entry ent; - unsigned char patch_id[GIT_SHA1_RAWSZ]; + unsigned char patch_id[GIT_MAX_RAWSZ]; struct commit *commit; }; diff --git a/path.c b/path.c index 22248436bf..c1cb1cf627 100644 --- a/path.c +++ b/path.c @@ -471,39 +471,19 @@ const char *worktree_git_path(const struct worktree *wt, const char *fmt, ...) } /* Returns 0 on success, negative on failure. */ -#define SUBMODULE_PATH_ERR_NOT_CONFIGURED -1 static int do_submodule_path(struct strbuf *buf, const char *path, const char *fmt, va_list args) { - const char *git_dir; struct strbuf git_submodule_common_dir = STRBUF_INIT; struct strbuf git_submodule_dir = STRBUF_INIT; - const struct submodule *sub; - int err = 0; + int ret; - strbuf_addstr(buf, path); - strbuf_complete(buf, '/'); - strbuf_addstr(buf, ".git"); - - git_dir = read_gitfile(buf->buf); - if (git_dir) { - strbuf_reset(buf); - strbuf_addstr(buf, git_dir); - } - if (!is_git_directory(buf->buf)) { - gitmodules_config(); - sub = submodule_from_path(null_sha1, path); - if (!sub) { - err = SUBMODULE_PATH_ERR_NOT_CONFIGURED; - goto cleanup; - } - strbuf_reset(buf); - strbuf_git_path(buf, "%s/%s", "modules", sub->name); - } - - strbuf_addch(buf, '/'); - strbuf_addbuf(&git_submodule_dir, buf); + ret = submodule_to_gitdir(&git_submodule_dir, path); + if (ret) + goto cleanup; + strbuf_complete(&git_submodule_dir, '/'); + strbuf_addbuf(buf, &git_submodule_dir); strbuf_vaddf(buf, fmt, args); if (get_common_dir_noenv(&git_submodule_common_dir, git_submodule_dir.buf)) @@ -514,8 +494,7 @@ static int do_submodule_path(struct strbuf *buf, const char *path, cleanup: strbuf_release(&git_submodule_dir); strbuf_release(&git_submodule_common_dir); - - return err; + return ret; } char *git_pathdup_submodule(const char *path, const char *fmt, ...) @@ -638,8 +617,10 @@ static struct passwd *getpw_str(const char *username, size_t len) * Return a string with ~ and ~user expanded via getpw*. If buf != NULL, * then it is a newly allocated string. Returns NULL on getpw failure or * if path is NULL. + * + * If real_home is true, real_path($HOME) is used in the expansion. */ -char *expand_user_path(const char *path) +char *expand_user_path(const char *path, int real_home) { struct strbuf user_path = STRBUF_INIT; const char *to_copy = path; @@ -654,7 +635,10 @@ char *expand_user_path(const char *path) const char *home = getenv("HOME"); if (!home) goto return_null; - strbuf_addstr(&user_path, home); + if (real_home) + strbuf_addstr(&user_path, real_path(home)); + else + strbuf_addstr(&user_path, home); #ifdef GIT_WINDOWS_NATIVE convert_slashes(user_path.buf); #endif @@ -723,7 +707,7 @@ const char *enter_repo(const char *path, int strict) strbuf_add(&validated_path, path, len); if (used_path.buf[0] == '~') { - char *newpath = expand_user_path(used_path.buf); + char *newpath = expand_user_path(used_path.buf, 0); if (!newpath) return NULL; strbuf_attach(&used_path, newpath, strlen(newpath), diff --git a/pathspec.c b/pathspec.c index 303efda837..50f76fff45 100644 --- a/pathspec.c +++ b/pathspec.c @@ -505,7 +505,7 @@ static void init_pathspec_item(struct pathspec_item *item, unsigned flags, * original. Useful for passing to another command. */ if ((flags & PATHSPEC_PREFIX_ORIGIN) && - prefixlen && !get_literal_global()) { + !get_literal_global()) { struct strbuf sb = STRBUF_INIT; /* Preserve the actual prefix length of each pattern */ @@ -724,7 +724,7 @@ void clear_pathspec(struct pathspec *pathspec) free(pathspec->items[i].match); free(pathspec->items[i].original); - for (j = 0; j < pathspec->items[j].attr_match_nr; j++) + for (j = 0; j < pathspec->items[i].attr_match_nr; j++) free(pathspec->items[i].attr_match[j].value); free(pathspec->items[i].attr_match); diff --git a/po/bg.po b/po/bg.po index 148862ddd9..66e2b7ea25 100644 --- a/po/bg.po +++ b/po/bg.po @@ -9,7 +9,12 @@ # range диапазон # unreachable object недостижим обект # dangling objects обект извън клон -# fast-forward тривиално сливане +# fast-forward превъртане +# tree-level merge тривиално сливане (различни файлове са променяни, слива се като дърво) +# automatic merge автоманично сливаве (еднакви файлове са променяни, но в неприпокриващи се части) +# real merge същинско сливане (а не превъртане) +# three-way merge тройно сливане +# octopus merge множествено сливане # stale remote старо хранилище # rebase пребазирам # force (push) принудително изтласквам @@ -44,7 +49,6 @@ # topic branch тематичен клон # empty head връх без история # tree-ish указател към дърво -# three-way merge тройно сливане # dirty нечист, мръсен (файл, индекс) # fallback резервен вариант # pathspec magic опция за магически пътища @@ -53,6 +57,7 @@ # plumbing команди от системно ниво # porcelain команди от потребителско ниво # pack [noun] пакетен файл - fixme in glossary +# repack препакетирам # mainline базово подаване - при cherry-pick на merge - към коя версия да се изчислява разликата # token лексема # trailer епилог/завършек на съобщение @@ -73,9 +78,9 @@ # binary patch двоична кръпка # reverse-apply прилагам в обратна посока # todo file команден файл -# octopus merge множествено сливане # alternate алтернативен източник # superproject обхващащ проект +# split index разделяне на индекса # ---- # „$var“ - може да не сработва за shell има gettext и eval_gettext - проверка - намират се лесно по „$ # ======================== @@ -110,8 +115,8 @@ msgid "" msgstr "" "Project-Id-Version: git master\n" "Report-Msgid-Bugs-To: Git Mailing List \n" -"POT-Creation-Date: 2016-11-25 22:50+0800\n" -"PO-Revision-Date: 2017-01-28 19:34+0200\n" +"POT-Creation-Date: 2017-05-05 09:35+0800\n" +"PO-Revision-Date: 2017-05-07 09:24+0200\n" "Last-Translator: Alexander Shopov \n" "Language-Team: Bulgarian \n" "Language: bg\n" @@ -150,7 +155,6 @@ msgstr "Отмяната е блокирана от неслети файлов msgid "It is not possible to %s because you have unmerged files." msgstr "Действието „%s“ е блокирано от неслети файлове." -# TRANSFER #: advice.c:101 msgid "" "Fix them up in the work tree, and then use 'git add/rm '\n" @@ -163,7 +167,7 @@ msgstr "" msgid "Exiting because of an unresolved conflict." msgstr "Изход от програмата заради некоригиран конфликт." -#: advice.c:114 builtin/merge.c:1181 +#: advice.c:114 builtin/merge.c:1185 msgid "You have not concluded your merge (MERGE_HEAD exists)." msgstr "Не сте завършили сливане. (Указателят „MERGE_HEAD“ съществува)." @@ -351,22 +355,22 @@ msgstr "неразпозната двоичната кръпка на ред %d" msgid "patch with only garbage at line %d" msgstr "кръпката е с изцяло повредени данни на ред %d" -#: apply.c:2274 +#: apply.c:2265 #, c-format msgid "unable to read symlink %s" msgstr "символната връзка „%s“ не може да бъде прочетена" -#: apply.c:2278 +#: apply.c:2269 #, c-format msgid "unable to open or read %s" msgstr "файлът „%s“ не може да бъде отворен или прочетен" -#: apply.c:2931 +#: apply.c:2922 #, c-format msgid "invalid start of line: '%c'" msgstr "неправилно начало на ред: „%c“" -#: apply.c:3050 +#: apply.c:3041 #, c-format msgid "Hunk #%d succeeded at %d (offset %d line)." msgid_plural "Hunk #%d succeeded at %d (offset %d lines)." @@ -375,13 +379,13 @@ msgstr[0] "" msgstr[1] "" "%d-то парче код бе успешно приложено на ред %d (отместване от %d реда)." -#: apply.c:3062 +#: apply.c:3053 #, c-format msgid "Context reduced to (%ld/%ld) to apply fragment at %d" msgstr "" "Контекстът е намален на (%ld/%ld) за прилагането на парчето код на ред %d" -#: apply.c:3068 +#: apply.c:3059 #, c-format msgid "" "while searching for:\n" @@ -390,316 +394,316 @@ msgstr "" "при търсене за:\n" "%.*s" -#: apply.c:3090 +#: apply.c:3081 #, c-format msgid "missing binary patch data for '%s'" msgstr "липсват данните за двоичната кръпка за „%s“" -#: apply.c:3098 +#: apply.c:3089 #, c-format msgid "cannot reverse-apply a binary patch without the reverse hunk to '%s'" msgstr "" "двоичната кръпка не може да се приложи в обратна посока, когато обратното " "парче за „%s“ липсва" -#: apply.c:3144 +#: apply.c:3135 #, c-format msgid "cannot apply binary patch to '%s' without full index line" msgstr "към „%s“ не може да се приложи двоична кръпка без пълен индекс" -#: apply.c:3154 +#: apply.c:3145 #, c-format msgid "" "the patch applies to '%s' (%s), which does not match the current contents." msgstr "кръпката съответства на „%s“ (%s), който не съвпада по съдържание." -#: apply.c:3162 +#: apply.c:3153 #, c-format msgid "the patch applies to an empty '%s' but it is not empty" msgstr "кръпката съответства на „%s“, който трябва да е празен, но не е" -#: apply.c:3180 +#: apply.c:3171 #, c-format msgid "the necessary postimage %s for '%s' cannot be read" msgstr "" "необходимият резултат след операцията — „%s“ за „%s“ не може да бъде " "прочетен" -#: apply.c:3193 +#: apply.c:3184 #, c-format msgid "binary patch does not apply to '%s'" msgstr "двоичната кръпка не може да бъде приложена върху „%s“" -#: apply.c:3199 +#: apply.c:3190 #, c-format msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)" msgstr "" "двоичната кръпка за „%s“ води до неправилни резултати (очакваше се: „%s“, а " "бе получено: „%s“)" -#: apply.c:3220 +#: apply.c:3211 #, c-format msgid "patch failed: %s:%ld" msgstr "неуспешно прилагане на кръпка: „%s:%ld“" -#: apply.c:3342 +#: apply.c:3333 #, c-format msgid "cannot checkout %s" msgstr "„%s“ не може да се изтегли" -#: apply.c:3390 apply.c:3401 apply.c:3447 setup.c:248 +#: apply.c:3381 apply.c:3392 apply.c:3438 setup.c:253 #, c-format msgid "failed to read %s" msgstr "файлът „%s“ не може да бъде прочетен" -#: apply.c:3398 +#: apply.c:3389 #, c-format msgid "reading from '%s' beyond a symbolic link" msgstr "изчитане на „%s“ след проследяване на символна връзка" -#: apply.c:3427 apply.c:3667 +#: apply.c:3418 apply.c:3658 #, c-format msgid "path %s has been renamed/deleted" msgstr "обектът с път „%s“ е преименуван или изтрит" -#: apply.c:3510 apply.c:3681 +#: apply.c:3501 apply.c:3672 #, c-format msgid "%s: does not exist in index" msgstr "„%s“ не съществува в индекса" -#: apply.c:3519 apply.c:3689 +#: apply.c:3510 apply.c:3680 #, c-format msgid "%s: does not match index" msgstr "„%s“ не съответства на индекса" -#: apply.c:3554 +#: apply.c:3545 msgid "repository lacks the necessary blob to fall back on 3-way merge." msgstr "" "в хранилището липсват необходимите обекти BLOB, за да се премине към тройно " "сливане." -#: apply.c:3557 +#: apply.c:3548 #, c-format msgid "Falling back to three-way merge...\n" msgstr "Преминаване към тройно сливане…\n" -#: apply.c:3573 apply.c:3577 +#: apply.c:3564 apply.c:3568 #, c-format msgid "cannot read the current contents of '%s'" msgstr "текущото съдържание на „%s“ не може да бъде прочетено" -#: apply.c:3589 +#: apply.c:3580 #, c-format msgid "Failed to fall back on three-way merge...\n" msgstr "Неуспешно преминаване към тройно сливане…\n" -#: apply.c:3603 +#: apply.c:3594 #, c-format msgid "Applied patch to '%s' with conflicts.\n" msgstr "Конфликти при прилагането на кръпката към „%s“.\n" -#: apply.c:3608 +#: apply.c:3599 #, c-format msgid "Applied patch to '%s' cleanly.\n" msgstr "Кръпката бе приложена чисто към „%s“.\n" -#: apply.c:3634 +#: apply.c:3625 msgid "removal patch leaves file contents" msgstr "изтриващата кръпка оставя файла непразен" -#: apply.c:3706 +#: apply.c:3697 #, c-format msgid "%s: wrong type" msgstr "„%s“: неправилен вид" -#: apply.c:3708 +#: apply.c:3699 #, c-format msgid "%s has type %o, expected %o" msgstr "„%s“ е от вид „%o“, а се очакваше „%o“" -#: apply.c:3859 apply.c:3861 +#: apply.c:3850 apply.c:3852 #, c-format msgid "invalid path '%s'" msgstr "неправилен път: „%s“" -#: apply.c:3917 +#: apply.c:3908 #, c-format msgid "%s: already exists in index" msgstr "„%s“: вече съществува в индекса" -#: apply.c:3920 +#: apply.c:3911 #, c-format msgid "%s: already exists in working directory" msgstr "„%s“: вече съществува в работното дърво" -#: apply.c:3940 +#: apply.c:3931 #, c-format msgid "new mode (%o) of %s does not match old mode (%o)" msgstr "новите права за достъп (%o) на „%s“ не съвпадат със старите (%o)" -#: apply.c:3945 +#: apply.c:3936 #, c-format msgid "new mode (%o) of %s does not match old mode (%o) of %s" msgstr "" "новите права за достъп (%o) на „%s“ не съвпадат със старите (%o) на „%s“" -#: apply.c:3965 +#: apply.c:3956 #, c-format msgid "affected file '%s' is beyond a symbolic link" msgstr "засегнатият файл „%s“ е след символна връзка" -#: apply.c:3969 +#: apply.c:3960 #, c-format msgid "%s: patch does not apply" msgstr "Кръпката „%s“ не може да бъде приложена" -#: apply.c:3984 +#: apply.c:3975 #, c-format msgid "Checking patch %s..." msgstr "Проверяване на кръпката „%s“…" -#: apply.c:4075 +#: apply.c:4066 #, c-format msgid "sha1 information is lacking or useless for submodule %s" msgstr "" "информацията за сумата по SHA1 за подмодула липсва или не е достатъчна (%s)." -#: apply.c:4082 +#: apply.c:4073 #, c-format msgid "mode change for %s, which is not in current HEAD" msgstr "смяна на режима на достъпа на „%s“, който не е в текущия връх „HEAD“" -#: apply.c:4085 +#: apply.c:4076 #, c-format msgid "sha1 information is lacking or useless (%s)." msgstr "информацията за сумата по SHA1 липсва или не е достатъчна (%s)." -#: apply.c:4090 builtin/checkout.c:233 builtin/reset.c:135 +#: apply.c:4081 builtin/checkout.c:252 builtin/reset.c:135 #, c-format msgid "make_cache_entry failed for path '%s'" msgstr "неуспешно създаване на запис в кеша чрез „make_cache_entry“ за „%s“" -#: apply.c:4094 +#: apply.c:4085 #, c-format msgid "could not add %s to temporary index" msgstr "„%s“ не може да се добави към временния индекс" -#: apply.c:4104 +#: apply.c:4095 #, c-format msgid "could not write temporary index to %s" msgstr "временният индекс не може да се запази в „%s“" -#: apply.c:4242 +#: apply.c:4233 #, c-format msgid "unable to remove %s from index" msgstr "„%s“ не може да се извади от индекса" -#: apply.c:4277 +#: apply.c:4268 #, c-format msgid "corrupt patch for submodule %s" msgstr "повредена кръпка за модула „%s“" -#: apply.c:4283 +#: apply.c:4274 #, c-format msgid "unable to stat newly created file '%s'" msgstr "" "не може да се получи информация чрез „stat“ за новосъздадения файл „%s“" -#: apply.c:4291 +#: apply.c:4282 #, c-format msgid "unable to create backing store for newly created file %s" msgstr "" "не може да се за създаде мястото за съхранение на новосъздадения файл „%s“" -#: apply.c:4297 apply.c:4441 +#: apply.c:4288 apply.c:4432 #, c-format msgid "unable to add cache entry for %s" msgstr "не може да се добави запис в кеша за „%s“" -#: apply.c:4338 +#: apply.c:4329 #, c-format msgid "failed to write to '%s'" msgstr "в „%s“ не може да се пише" -#: apply.c:4342 +#: apply.c:4333 #, c-format msgid "closing file '%s'" msgstr "затваряне на файла „%s“" -#: apply.c:4412 +#: apply.c:4403 #, c-format msgid "unable to write file '%s' mode %o" msgstr "файлът „%s“ не може да се запише с режим на достъп „%o“" -#: apply.c:4510 +#: apply.c:4501 #, c-format msgid "Applied patch %s cleanly." msgstr "Кръпката „%s“ бе приложена чисто." -#: apply.c:4518 +#: apply.c:4509 msgid "internal error" msgstr "вътрешна грешка" -#: apply.c:4521 +#: apply.c:4512 #, 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:4532 +#: apply.c:4523 #, c-format msgid "truncating .rej filename to %.*s.rej" msgstr "съкращаване на името на файла с отхвърлените парчета на „ %.*s.rej“" -#: apply.c:4540 builtin/fetch.c:740 builtin/fetch.c:989 +#: apply.c:4531 builtin/fetch.c:739 builtin/fetch.c:988 #, c-format msgid "cannot open %s" msgstr "„%s“ не може да бъде отворен" -#: apply.c:4554 +#: apply.c:4545 #, c-format msgid "Hunk #%d applied cleanly." msgstr "%d-то парче бе успешно приложено." -#: apply.c:4558 +#: apply.c:4549 #, c-format msgid "Rejected hunk #%d." msgstr "%d-то парче бе отхвърлено." -#: apply.c:4668 +#: apply.c:4659 #, c-format msgid "Skipped patch '%s'." msgstr "Пропусната кръпка: „%s“" -#: apply.c:4676 +#: apply.c:4667 msgid "unrecognized input" msgstr "непознат вход" -#: apply.c:4695 +#: apply.c:4686 msgid "unable to read index file" msgstr "индексът не може да бъде записан" -#: apply.c:4833 +#: apply.c:4823 #, c-format msgid "can't open patch '%s': %s" msgstr "кръпката „%s“ не може да бъде отворена: %s" -#: apply.c:4858 +#: apply.c:4850 #, c-format msgid "squelched %d whitespace error" msgid_plural "squelched %d whitespace errors" msgstr[0] "пренебрегната е %d грешка в знаците за интервали" msgstr[1] "пренебрегнати са %d грешки в знаците за интервали" -#: apply.c:4864 apply.c:4879 +#: apply.c:4856 apply.c:4871 #, c-format msgid "%d line adds whitespace errors." msgid_plural "%d lines add whitespace errors." msgstr[0] "%d ред добавя грешки в знаците за интервали." msgstr[1] "%d реда добавят грешки в знаците за интервали." -#: apply.c:4872 +#: apply.c:4864 #, c-format msgid "%d line applied after fixing whitespace errors." msgid_plural "%d lines applied after fixing whitespace errors." @@ -708,137 +712,138 @@ msgstr[0] "" msgstr[1] "" "Добавени са %d реда след корекцията на грешките в знаците за интервали." -#: apply.c:4888 builtin/add.c:463 builtin/mv.c:286 builtin/rm.c:431 +#: apply.c:4880 builtin/add.c:463 builtin/mv.c:298 builtin/rm.c:391 msgid "Unable to write new index file" msgstr "Новият индекс не може да бъде записан" -#: apply.c:4919 apply.c:4922 builtin/am.c:2277 builtin/am.c:2280 -#: builtin/clone.c:95 builtin/fetch.c:98 builtin/pull.c:180 -#: builtin/submodule--helper.c:281 builtin/submodule--helper.c:407 -#: builtin/submodule--helper.c:589 builtin/submodule--helper.c:592 -#: builtin/submodule--helper.c:944 builtin/submodule--helper.c:947 +#: apply.c:4911 apply.c:4914 builtin/am.c:2276 builtin/am.c:2279 +#: builtin/clone.c:113 builtin/fetch.c:98 builtin/pull.c:180 +#: builtin/submodule--helper.c:304 builtin/submodule--helper.c:629 +#: builtin/submodule--helper.c:632 builtin/submodule--helper.c:973 +#: builtin/submodule--helper.c:976 builtin/submodule--helper.c:1161 +#: git-add--interactive.perl:239 msgid "path" msgstr "път" -#: apply.c:4920 +#: apply.c:4912 msgid "don't apply changes matching the given path" msgstr "без прилагане на промените напасващи на дадения път" -#: apply.c:4923 +#: apply.c:4915 msgid "apply changes matching the given path" msgstr "прилагане на промените напасващи на дадения път" -#: apply.c:4925 builtin/am.c:2286 +#: apply.c:4917 builtin/am.c:2285 msgid "num" msgstr "БРОЙ" -#: apply.c:4926 +#: apply.c:4918 msgid "remove leading slashes from traditional diff paths" msgstr "премахване на този БРОЙ водещи елементи от пътищата в разликата" -#: apply.c:4929 +#: apply.c:4921 msgid "ignore additions made by the patch" msgstr "игнориране на редовете добавени от тази кръпка" -#: apply.c:4931 +#: apply.c:4923 msgid "instead of applying the patch, output diffstat for the input" msgstr "извеждане на статистика на промените без прилагане на кръпката" -#: apply.c:4935 +#: apply.c:4927 msgid "show number of added and deleted lines in decimal notation" msgstr "извеждане на броя на добавените и изтритите редове" -#: apply.c:4937 +#: apply.c:4929 msgid "instead of applying the patch, output a summary for the input" msgstr "извеждане на статистика на входните данни без прилагане на кръпката" -#: apply.c:4939 +#: apply.c:4931 msgid "instead of applying the patch, see if the patch is applicable" msgstr "проверка дали кръпката може да се приложи, без действително прилагане" -#: apply.c:4941 +#: apply.c:4933 msgid "make sure the patch is applicable to the current index" msgstr "проверка дали кръпката може да бъде приложена към текущия индекс" -#: apply.c:4943 +#: apply.c:4935 msgid "apply a patch without touching the working tree" msgstr "прилагане на кръпката без промяна на работното дърво" -#: apply.c:4945 +#: apply.c:4937 msgid "accept a patch that touches outside the working area" msgstr "прилагане на кръпка, която променя и файлове извън работното дърво" -#: apply.c:4947 +#: apply.c:4939 msgid "also apply the patch (use with --stat/--summary/--check)" msgstr "" "кръпката да бъде приложена. Опцията се комбинира с „--check“/„--stat“/„--" "summary“" -#: apply.c:4949 +#: apply.c:4941 msgid "attempt three-way merge if a patch does not apply" msgstr "пробване с тройно сливане, ако кръпката не може да се приложи директно" -#: apply.c:4951 +#: apply.c:4943 msgid "build a temporary index based on embedded index information" msgstr "" "създаване на временен индекс на база на включената информация за индекса" -#: apply.c:4954 builtin/checkout-index.c:169 builtin/ls-files.c:505 +#: apply.c:4946 builtin/checkout-index.c:169 builtin/ls-files.c:515 msgid "paths are separated with NUL character" msgstr "разделяне на пътищата с нулевия знак „NUL“" -#: apply.c:4956 +#: apply.c:4948 msgid "ensure at least lines of context match" msgstr "да се осигури контекст от поне такъв БРОЙ съвпадащи редове" -#: apply.c:4957 builtin/am.c:2265 +#: apply.c:4949 builtin/am.c:2264 msgid "action" msgstr "действие" -#: apply.c:4958 +#: apply.c:4950 msgid "detect new or modified lines that have whitespace errors" msgstr "засичане на нови или променени редове с грешки в знаците за интервали" -#: apply.c:4961 apply.c:4964 +#: apply.c:4953 apply.c:4956 msgid "ignore changes in whitespace when finding context" msgstr "" "игнориране на промените в знаците за интервали при откриване на контекста" -#: apply.c:4967 +#: apply.c:4959 msgid "apply the patch in reverse" msgstr "прилагане на кръпката в обратна посока" -#: apply.c:4969 +#: apply.c:4961 msgid "don't expect at least one line of context" msgstr "без изискване на дори и един ред контекст" -#: apply.c:4971 +#: apply.c:4963 msgid "leave the rejected hunks in corresponding *.rej files" msgstr "оставяне на отхвърлените парчета във файлове с разширение „.rej“" -#: apply.c:4973 +#: apply.c:4965 msgid "allow overlapping hunks" msgstr "позволяване на застъпващи се парчета" -#: apply.c:4974 builtin/add.c:267 builtin/check-ignore.c:19 -#: builtin/commit.c:1339 builtin/count-objects.c:94 builtin/fsck.c:593 -#: builtin/log.c:1860 builtin/mv.c:110 builtin/read-tree.c:114 +#: apply.c:4966 builtin/add.c:267 builtin/check-ignore.c:19 +#: builtin/commit.c:1337 builtin/count-objects.c:94 builtin/fsck.c:651 +#: builtin/log.c:1867 builtin/mv.c:122 builtin/read-tree.c:134 msgid "be verbose" msgstr "повече подробности" -#: apply.c:4976 +#: apply.c:4968 msgid "tolerate incorrectly detected missing new-line at the end of file" msgstr "пренебрегване на неправилно липсващ знак за нов ред в края на файл" -#: apply.c:4979 +#: apply.c:4971 msgid "do not trust the line counts in the hunk headers" msgstr "без доверяване на номерата на редовете в заглавните части на парчетата" -#: apply.c:4981 builtin/am.c:2274 +#: apply.c:4973 builtin/am.c:2273 msgid "root" msgstr "НАЧАЛНА_ДИРЕКТОРИЯ" -#: apply.c:4982 +#: apply.c:4974 msgid "prepend to all filenames" msgstr "добавяне на тази НАЧАЛНА_ДИРЕКТОРИЯ към имената на всички файлове" @@ -861,103 +866,108 @@ msgstr "" msgid "git archive --remote [--exec ] --list" msgstr "git archive --remote ХРАНИЛИЩЕ [--exec КОМАНДА] --list" -#: archive.c:344 builtin/add.c:152 builtin/add.c:442 builtin/rm.c:327 +#: archive.c:332 builtin/add.c:152 builtin/add.c:442 builtin/rm.c:300 #, c-format msgid "pathspec '%s' did not match any files" msgstr "пътят „%s“ не съвпада с никой файл" -#: archive.c:429 +#: archive.c:417 msgid "fmt" msgstr "ФОРМАТ" -#: archive.c:429 +#: archive.c:417 msgid "archive format" msgstr "ФОРМАТ на архива" -#: archive.c:430 builtin/log.c:1429 +#: archive.c:418 builtin/log.c:1436 msgid "prefix" msgstr "ПРЕФИКС" -#: archive.c:431 +#: archive.c:419 msgid "prepend prefix to each pathname in the archive" msgstr "добавяне на този ПРЕФИКС към всеки път в архива" -#: archive.c:432 builtin/blame.c:2603 builtin/blame.c:2604 builtin/config.c:59 -#: builtin/fast-export.c:987 builtin/fast-export.c:989 builtin/grep.c:723 -#: builtin/hash-object.c:101 builtin/ls-files.c:539 builtin/ls-files.c:542 -#: builtin/notes.c:401 builtin/notes.c:564 builtin/read-tree.c:109 +#: archive.c:420 builtin/blame.c:2598 builtin/blame.c:2599 builtin/config.c:60 +#: builtin/fast-export.c:987 builtin/fast-export.c:989 builtin/grep.c:1061 +#: builtin/hash-object.c:101 builtin/ls-files.c:549 builtin/ls-files.c:552 +#: builtin/notes.c:401 builtin/notes.c:564 builtin/read-tree.c:129 #: parse-options.h:153 msgid "file" msgstr "ФАЙЛ" -#: archive.c:433 builtin/archive.c:89 +#: archive.c:421 builtin/archive.c:89 msgid "write the archive to this file" msgstr "запазване на архива в този ФАЙЛ" -#: archive.c:435 +#: archive.c:423 msgid "read .gitattributes in working directory" msgstr "изчитане на „.gitattributes“ в работната директория" -#: archive.c:436 +#: archive.c:424 msgid "report archived files on stderr" msgstr "извеждане на архивираните файлове на стандартната грешка" -#: archive.c:437 +#: archive.c:425 msgid "store only" msgstr "само съхранение без компресиране" -#: archive.c:438 +#: archive.c:426 msgid "compress faster" msgstr "бързо компресиране" -#: archive.c:446 +#: archive.c:434 msgid "compress better" msgstr "добро компресиране" -#: archive.c:449 +#: archive.c:437 msgid "list supported archive formats" msgstr "извеждане на списъка с поддържаните формати" -#: archive.c:451 builtin/archive.c:90 builtin/clone.c:85 builtin/clone.c:88 -#: builtin/submodule--helper.c:601 builtin/submodule--helper.c:953 +#: archive.c:439 builtin/archive.c:90 builtin/clone.c:103 builtin/clone.c:106 +#: builtin/submodule--helper.c:641 builtin/submodule--helper.c:982 msgid "repo" msgstr "хранилище" -#: archive.c:452 builtin/archive.c:91 +#: archive.c:440 builtin/archive.c:91 msgid "retrieve the archive from remote repository " msgstr "изтегляне на архива от отдалеченото ХРАНИЛИЩЕ" -#: archive.c:453 builtin/archive.c:92 builtin/notes.c:485 +#: archive.c:441 builtin/archive.c:92 builtin/notes.c:485 msgid "command" msgstr "команда" -#: archive.c:454 builtin/archive.c:93 +#: archive.c:442 builtin/archive.c:93 msgid "path to the remote git-upload-archive command" msgstr "път към отдалечената команда „git-upload-archive“" -#: archive.c:461 +#: archive.c:449 msgid "Unexpected option --remote" msgstr "Неочаквана опция „--remote“" -#: archive.c:463 +#: archive.c:451 msgid "Option --exec can only be used together with --remote" msgstr "Опцията „--exec“ изисква „--remote“" -#: archive.c:465 +#: archive.c:453 msgid "Unexpected option --output" msgstr "Неочаквана опция „--output“" -#: archive.c:487 +#: archive.c:475 #, c-format msgid "Unknown archive format '%s'" msgstr "Непознат формат на архив: „%s“" -#: archive.c:494 +#: archive.c:482 #, c-format msgid "Argument not supported for format '%s': -%d" msgstr "Аргументът не се поддържа за форма̀та „%s“: -%d" -#: attr.c:263 +#: attr.c:212 +#, c-format +msgid "%.*s is not a valid attribute name" +msgstr "„%.*s“ е неправилно име за атрибут" + +#: attr.c:408 msgid "" "Negative patterns are ignored in git attributes\n" "Use '\\!' for literal leading exclamation." @@ -965,27 +975,27 @@ msgstr "" "Отрицателните шаблони се игнорират в атрибутите на git.\n" "Ако ви трябва начална удивителна, ползвайте „\\!“." -#: bisect.c:441 +#: bisect.c:444 #, c-format msgid "Could not open file '%s'" msgstr "Файлът „%s“ не може да се отвори" -#: bisect.c:446 +#: bisect.c:449 #, c-format msgid "Badly quoted content in file '%s': %s" msgstr "Неправилно цитирано съдържание във файла „%s“: %s" -#: bisect.c:655 +#: bisect.c:657 #, c-format msgid "We cannot bisect more!\n" msgstr "Повече не може да се търси двоично!\n" -#: bisect.c:708 +#: bisect.c:710 #, c-format msgid "Not a valid commit name %s" msgstr "Неправилно име на подаване „%s“" -#: bisect.c:732 +#: bisect.c:734 #, c-format msgid "" "The merge base %s is bad.\n" @@ -994,7 +1004,7 @@ msgstr "" "Неправилна база за сливане: %s.\n" "Следователно грешката е коригирана между „%s“ и [%s].\n" -#: bisect.c:737 +#: bisect.c:739 #, c-format msgid "" "The merge base %s is new.\n" @@ -1003,7 +1013,7 @@ msgstr "" "Нова база за сливане: %s.\n" "Свойството е променено между „%s“ и [%s].\n" -#: bisect.c:742 +#: bisect.c:744 #, c-format msgid "" "The merge base %s is %s.\n" @@ -1012,10 +1022,10 @@ msgstr "" "Базата за сливане „%s“ е %s.\n" "Следователно първото %s подаване е между „%s“ и [%s].\n" -#: bisect.c:750 +#: bisect.c:752 #, c-format msgid "" -"Some %s revs are not ancestor of the %s rev.\n" +"Some %s revs are not ancestors of the %s rev.\n" "git bisect cannot work properly in this case.\n" "Maybe you mistook %s and %s revs?\n" msgstr "" @@ -1023,7 +1033,7 @@ msgstr "" "Двоичното търсене с git bisect няма да работи правилно.\n" "Дали не сте объркали указателите „%s“ и „%s“?\n" -#: bisect.c:763 +#: bisect.c:765 #, c-format msgid "" "the merge base between %s and [%s] must be skipped.\n" @@ -1034,36 +1044,36 @@ msgstr "" "Не може да сме сигурни, че първото %s подаване е между „%s“ и „%s“.\n" "Двоичното търсене продължава." -#: bisect.c:798 +#: bisect.c:800 #, c-format msgid "Bisecting: a merge base must be tested\n" msgstr "Двоично търсене: трябва да се провери база за сливане\n" -#: bisect.c:849 +#: bisect.c:851 #, c-format msgid "a %s revision is needed" msgstr "необходима е версия „%s“" -#: bisect.c:866 builtin/notes.c:174 builtin/tag.c:248 +#: bisect.c:868 builtin/notes.c:174 builtin/tag.c:255 #, c-format msgid "could not create file '%s'" msgstr "файлът „%s“ не може да бъде създаден" -#: bisect.c:917 +#: bisect.c:919 #, c-format msgid "could not read file '%s'" msgstr "файлът „%s“ не може да бъде прочетен" -#: bisect.c:947 +#: bisect.c:949 msgid "reading bisect refs failed" msgstr "неуспешно прочитане на указателите за двоично търсене" -#: bisect.c:967 +#: bisect.c:969 #, c-format msgid "%s was both %s and %s\n" msgstr "„%s“ e както „%s“, така и „%s“\n" -#: bisect.c:975 +#: bisect.c:977 #, c-format msgid "" "No testable commit found.\n" @@ -1072,7 +1082,7 @@ msgstr "" "Липсва подходящо за тестване подаване.\n" "Проверете параметрите за пътищата.\n" -#: bisect.c:994 +#: bisect.c:996 #, c-format msgid "(roughly %d step)" msgid_plural "(roughly %d steps)" @@ -1081,7 +1091,7 @@ msgstr[1] "(приблизително %d стъпки)" #. TRANSLATORS: the last %s will be replaced with #. "(roughly %d steps)" translation -#: bisect.c:998 +#: bisect.c:1000 #, 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" @@ -1222,7 +1232,7 @@ msgstr "Неправилно място за начало на клон: „%s msgid "'%s' is already checked out at '%s'" msgstr "„%s“ вече е изтеглен в „%s“" -#: branch.c:363 +#: branch.c:364 #, c-format msgid "HEAD of working tree %s is not updated" msgstr "Указателят „HEAD“ на работното дърво „%s“ не е обновен" @@ -1237,7 +1247,7 @@ msgstr "Файлът „%s“ не изглежда да е пратка на gi msgid "unrecognized header: %s%s (%d)" msgstr "непозната заглавна част: %s%s (%d)" -#: bundle.c:87 sequencer.c:963 builtin/commit.c:777 +#: bundle.c:87 sequencer.c:1341 sequencer.c:1767 builtin/commit.c:777 #, c-format msgid "could not open '%s'" msgstr "„%s“ не може да се отвори" @@ -1246,10 +1256,10 @@ msgstr "„%s“ не може да се отвори" msgid "Repository lacks these prerequisite commits:" msgstr "В хранилището липсват следните необходими подавания:" -#: bundle.c:163 ref-filter.c:1462 sequencer.c:830 sequencer.c:1374 -#: builtin/blame.c:2814 builtin/commit.c:1061 builtin/log.c:348 -#: builtin/log.c:890 builtin/log.c:1340 builtin/log.c:1666 builtin/log.c:1909 -#: builtin/merge.c:356 builtin/shortlog.c:170 +#: bundle.c:163 ref-filter.c:1852 sequencer.c:1162 sequencer.c:2321 +#: builtin/blame.c:2811 builtin/commit.c:1061 builtin/log.c:353 +#: builtin/log.c:897 builtin/log.c:1347 builtin/log.c:1673 builtin/log.c:1916 +#: builtin/merge.c:359 builtin/shortlog.c:176 msgid "revision walk setup failed" msgstr "неуспешно настройване на обхождането на версиите" @@ -1289,7 +1299,7 @@ msgid "ref '%s' is excluded by the rev-list options" msgstr "" "указателят „%s“ не е бил включен поради опциите зададени на „git rev-list“" -#: bundle.c:443 builtin/log.c:165 builtin/log.c:1572 builtin/shortlog.c:273 +#: bundle.c:443 builtin/log.c:170 builtin/log.c:1579 builtin/shortlog.c:281 #, c-format msgid "unrecognized argument: %s" msgstr "непознат аргумент: %s" @@ -1307,13 +1317,13 @@ msgstr "Файлът „%s“ не може да бъде създаден" msgid "index-pack died" msgstr "Командата „git index-pack“ не завърши успешно" -#: color.c:290 +#: color.c:300 #, c-format msgid "invalid color value: %.*s" msgstr "неправилна стойност за цвят: %.*s" -#: commit.c:40 builtin/am.c:421 builtin/am.c:457 builtin/am.c:1493 -#: builtin/am.c:2127 +#: commit.c:40 sequencer.c:1579 builtin/am.c:419 builtin/am.c:455 +#: builtin/am.c:1489 builtin/am.c:2126 #, c-format msgid "could not parse %s" msgstr "„%s“ не може да се анализира" @@ -1323,7 +1333,7 @@ msgstr "„%s“ не може да се анализира" msgid "%s %s is not a commit!" msgstr "%s %s не е подаване!" -#: commit.c:1514 +#: commit.c:1511 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" @@ -1337,123 +1347,156 @@ msgstr "" msgid "memory exhausted" msgstr "паметта свърши" -#: config.c:516 +#: config.c:191 +msgid "relative config include conditionals must come from files" +msgstr "относителните условни изрази за вмъкване трябва да идват от файлове" + +#: config.c:711 #, c-format msgid "bad config line %d in blob %s" msgstr "неправилен ред за настройки %d в BLOB „%s“" -#: config.c:520 +#: config.c:715 #, c-format msgid "bad config line %d in file %s" msgstr "неправилен ред за настройки %d във файла „%s“" -#: config.c:524 +#: config.c:719 #, c-format msgid "bad config line %d in standard input" msgstr "неправилен ред за настройки %d на стандартния вход" -#: config.c:528 +#: config.c:723 #, c-format msgid "bad config line %d in submodule-blob %s" msgstr "неправилен ред за настройки %d в BLOB за подмодул „%s“" -#: config.c:532 +#: config.c:727 #, c-format msgid "bad config line %d in command line %s" msgstr "неправилен ред за настройки %d на командния ред „%s“" -#: config.c:536 +#: config.c:731 #, c-format msgid "bad config line %d in %s" msgstr "неправилен ред за настройки %d в „%s“" -#: config.c:655 +#: config.c:859 msgid "out of range" msgstr "извън диапазона" -#: config.c:655 +#: config.c:859 msgid "invalid unit" msgstr "неправилна мерна единица" -#: config.c:661 +#: config.c:865 #, c-format msgid "bad numeric config value '%s' for '%s': %s" msgstr "неправилна числова стойност „%s“ за „%s“: %s" -#: config.c:666 +#: config.c:870 #, c-format msgid "bad numeric config value '%s' for '%s' in blob %s: %s" msgstr "неправилна числова стойност „%s“ за „%s“ в BLOB „%s“: %s" -#: config.c:669 +#: config.c:873 #, c-format msgid "bad numeric config value '%s' for '%s' in file %s: %s" msgstr "неправилна числова стойност „%s“ за „%s“ във файла „%s“: %s" -#: config.c:672 +#: config.c:876 #, c-format msgid "bad numeric config value '%s' for '%s' in standard input: %s" msgstr "неправилна числова стойност „%s“ за „%s“ на стандартния вход: %s" -#: config.c:675 +#: config.c:879 #, c-format msgid "bad numeric config value '%s' for '%s' in submodule-blob %s: %s" msgstr "неправилна числова стойност „%s“ за „%s“ в BLOB от подмодул „%s“: %s" -#: config.c:678 +#: config.c:882 #, c-format msgid "bad numeric config value '%s' for '%s' in command line %s: %s" msgstr "неправилна числова стойност „%s“ за „%s“ на командния ред „%s“: %s" -#: config.c:681 +#: config.c:885 #, c-format msgid "bad numeric config value '%s' for '%s' in %s: %s" msgstr "неправилна числова стойност „%s“ за „%s“ в %s: %s" -#: config.c:768 +#: config.c:980 #, c-format msgid "failed to expand user dir in: '%s'" msgstr "домашната папка на потребителя не може да бъде открита: „%s“" -#: config.c:852 config.c:863 +#: config.c:1075 config.c:1086 #, c-format msgid "bad zlib compression level %d" msgstr "неправилно ниво на компресиране: %d" -#: config.c:978 +#: config.c:1203 #, c-format msgid "invalid mode for object creation: %s" msgstr "неправилен режим за създаването на обекти: %s" -#: config.c:1312 +#: config.c:1359 +#, c-format +msgid "bad pack compression level %d" +msgstr "неправилно ниво на компресиране при пакетиране: %d" + +#: config.c:1557 msgid "unable to parse command-line config" msgstr "неправилни настройки от командния ред" -#: config.c:1362 +#: config.c:1611 msgid "unknown error occurred while reading the configuration files" msgstr "неочаквана грешка при изчитането на конфигурационните файлове" -#: config.c:1716 +#: config.c:1970 +#, c-format +msgid "Invalid %s: '%s'" +msgstr "Неправилен %s: „%s“" + +#: config.c:1991 +#, c-format +msgid "unknown core.untrackedCache value '%s'; using 'keep' default value" +msgstr "" +"непозната стойност „%s“ за настройката „core.untrackedCache“. Ще се ползва " +"стандартната стойност „keep“ (запазване)" + +#: config.c:2017 +#, c-format +msgid "splitIndex.maxPercentChange value '%d' should be between 0 and 100" +msgstr "" +"стойността на „splitIndex.maxPercentChange“ трябва да е между 1 и 100, а не " +"%d" + +#: config.c:2028 #, c-format msgid "unable to parse '%s' from command-line config" msgstr "неразпозната стойност „%s“ от командния ред" -#: config.c:1718 +#: config.c:2030 #, c-format msgid "bad config variable '%s' in file '%s' at line %d" msgstr "неправилна настройка „%s“ във файла „%s“ на ред №%d" -#: config.c:1777 +#: config.c:2089 #, c-format msgid "%s has multiple values" msgstr "зададени са няколко стойности за „%s“" -#: config.c:2311 +#: config.c:2423 config.c:2648 +#, c-format +msgid "fstat on %s failed" +msgstr "неуспешно изпълнение на „fstat“ върху „%s“" + +#: config.c:2541 #, c-format msgid "could not set '%s' to '%s'" msgstr "„%s“ не може да се зададе да е „%s“" -#: config.c:2313 +#: config.c:2543 builtin/remote.c:774 #, c-format msgid "could not unset '%s'" msgstr "„%s“ не може да се премахне" @@ -1474,7 +1517,7 @@ msgstr "" "Проверете дали то съществува и дали имате права\n" "за достъп." -#: connected.c:63 builtin/fsck.c:173 builtin/prune.c:140 +#: connected.c:63 builtin/fsck.c:190 builtin/prune.c:140 msgid "Checking connectivity" msgstr "Проверка на връзката" @@ -1616,12 +1659,12 @@ msgstr "" msgid " Unknown dirstat parameter '%s'\n" msgstr " Непознат параметър „%s“ за статистиката по директории'\n" -#: diff.c:283 +#: diff.c:281 #, c-format msgid "Unknown value for 'diff.submodule' config variable: '%s'" msgstr "Непозната стойност „%s“ за настройката „diff.submodule“" -#: diff.c:346 +#: diff.c:344 #, c-format msgid "" "Found errors in 'diff.dirstat' config variable:\n" @@ -1630,23 +1673,23 @@ msgstr "" "Грешки в настройката „diff.dirstat“:\n" "%s" -#: diff.c:3087 +#: diff.c:3102 #, c-format msgid "external diff died, stopping at %s" msgstr "" "външната програма за разлики завърши неуспешно. Спиране на работата при „%s“" -#: diff.c:3412 +#: diff.c:3428 msgid "--name-only, --name-status, --check and -s are mutually exclusive" msgstr "" "Опциите „--name-only“, „--name-status“, „--check“ и „-s“ са несъвместими " "една с друга" -#: diff.c:3502 +#: diff.c:3518 msgid "--follow requires exactly one pathspec" msgstr "Опцията „--follow“ изисква точно един път" -#: diff.c:3665 +#: diff.c:3681 #, c-format msgid "" "Failed to parse --dirstat/-X option parameter:\n" @@ -1655,204 +1698,234 @@ msgstr "" "Неразпознат параметър към опцията „--dirstat/-X“:\n" "%s" -#: diff.c:3679 +#: diff.c:3695 #, c-format msgid "Failed to parse --submodule option parameter: '%s'" msgstr "Неразпознат параметър към опцията „--submodule“: „%s“" -#: diff.c:4700 +#: diff.c:4719 msgid "inexact rename detection was skipped due to too many files." msgstr "" "търсенето на преименувания на обекти съчетани с промени се прескача поради " "многото файлове." -#: diff.c:4703 +#: diff.c:4722 msgid "only found copies from modified paths due to too many files." msgstr "" "установени са точните копия на променените пътища поради многото файлове." -#: diff.c:4706 +#: diff.c:4725 #, c-format msgid "" "you may want to set your %s variable to at least %d and retry the command." msgstr "задайте променливата „%s“ да е поне %d и отново изпълнете командата." -#: dir.c:1866 +#: dir.c:1899 msgid "failed to get kernel name and information" msgstr "името и версията на ядрото не бяха получени" -#: dir.c:1985 +#: dir.c:2018 msgid "Untracked cache is disabled on this system or location." msgstr "" "Кеша за неследените файлове е изключен на тази система или местоположение." -#: fetch-pack.c:213 +#: dir.c:2776 dir.c:2781 +#, c-format +msgid "could not create directories for %s" +msgstr "директориите за „%s“ не може да бъдат създадени" + +#: dir.c:2806 +#, c-format +msgid "could not migrate git directory from '%s' to '%s'" +msgstr "директорията на git не може да се мигрира от „%s“ до „%s“" + +#: entry.c:280 +#, c-format +msgid "could not stat file '%s'" +msgstr "неуспешно изпълнение на „stat“ върху файла „%s“" + +#: fetch-pack.c:249 msgid "git fetch-pack: expected shallow list" msgstr "git fetch-pack: очаква се плитък списък" -#: fetch-pack.c:225 +#: fetch-pack.c:261 msgid "git fetch-pack: expected ACK/NAK, got EOF" msgstr "git fetch-pack: очакваше се „ACK“/„NAK“, а бе получен „EOF“" -#: fetch-pack.c:243 +#: fetch-pack.c:280 builtin/archive.c:63 +#, c-format +msgid "remote error: %s" +msgstr "отдалечена грешка: %s" + +#: fetch-pack.c:281 #, c-format msgid "git fetch-pack: expected ACK/NAK, got '%s'" msgstr "git fetch-pack: очакваше се „ACK“/„NAK“, а бе получен „%s“" -#: fetch-pack.c:295 +#: fetch-pack.c:333 msgid "--stateless-rpc requires multi_ack_detailed" msgstr "опцията „--stateless-rpc“ изисква „multi_ack_detailed“" -#: fetch-pack.c:381 +#: fetch-pack.c:419 #, c-format msgid "invalid shallow line: %s" msgstr "неправилен плитък ред: „%s“" -#: fetch-pack.c:387 +#: fetch-pack.c:425 #, c-format msgid "invalid unshallow line: %s" msgstr "неправилен неплитък ред: „%s“" -#: fetch-pack.c:389 +#: fetch-pack.c:427 #, c-format msgid "object not found: %s" msgstr "обектът „%s“ липсва" -#: fetch-pack.c:392 +#: fetch-pack.c:430 #, c-format msgid "error in object: %s" msgstr "грешка в обекта: „%s“" -#: fetch-pack.c:394 +#: fetch-pack.c:432 #, c-format msgid "no shallow found: %s" msgstr "не е открит плитък обект: %s" -#: fetch-pack.c:397 +#: fetch-pack.c:435 #, c-format msgid "expected shallow/unshallow, got %s" msgstr "очаква се плитък или не обект, а бе получено: %s" -#: fetch-pack.c:436 +#: fetch-pack.c:474 #, c-format msgid "got %s %d %s" msgstr "получено бе %s %d %s" -#: fetch-pack.c:450 +#: fetch-pack.c:488 #, c-format msgid "invalid commit %s" msgstr "неправилно подаване: „%s“" -#: fetch-pack.c:483 +#: fetch-pack.c:521 msgid "giving up" msgstr "преустановяване" -#: fetch-pack.c:493 progress.c:235 +#: fetch-pack.c:531 progress.c:235 msgid "done" msgstr "действието завърши" -#: fetch-pack.c:505 +#: fetch-pack.c:543 #, c-format msgid "got %s (%d) %s" msgstr "получено бе %s (%d) %s" -#: fetch-pack.c:551 +#: fetch-pack.c:589 #, c-format msgid "Marking %s as complete" msgstr "Отбелязване на „%s“ като пълно" -#: fetch-pack.c:697 +#: fetch-pack.c:737 #, c-format msgid "already have %s (%s)" msgstr "вече има „%s“ (%s)" -#: fetch-pack.c:735 +#: fetch-pack.c:775 msgid "fetch-pack: unable to fork off sideband demultiplexer" msgstr "fetch-pack: не може да се създаде процес за демултиплексора" -#: fetch-pack.c:743 +#: fetch-pack.c:783 msgid "protocol error: bad pack header" msgstr "протоколна грешка: неправилна заглавна част на пакет" -#: fetch-pack.c:799 +#: fetch-pack.c:839 #, c-format msgid "fetch-pack: unable to fork off %s" msgstr "fetch-pack: не може да се създаде процес за „%s“" -#: fetch-pack.c:815 +#: fetch-pack.c:855 #, c-format msgid "%s failed" msgstr "неуспешно изпълнение на „%s“" -#: fetch-pack.c:817 +#: fetch-pack.c:857 msgid "error in sideband demultiplexer" msgstr "грешка в демултиплексора" -#: fetch-pack.c:844 +#: fetch-pack.c:884 msgid "Server does not support shallow clients" msgstr "Сървърът не поддържа плитки клиенти" -#: fetch-pack.c:848 +#: fetch-pack.c:888 msgid "Server supports multi_ack_detailed" msgstr "Сървърът поддържа „multi_ack_detailed“" -#: fetch-pack.c:851 +#: fetch-pack.c:891 msgid "Server supports no-done" msgstr "Сървърът поддържа „no-done“" -#: fetch-pack.c:857 +#: fetch-pack.c:897 msgid "Server supports multi_ack" msgstr "Сървърът поддържа „multi_ack“" -#: fetch-pack.c:861 +#: fetch-pack.c:901 msgid "Server supports side-band-64k" msgstr "Сървърът поддържа „side-band-64k“" -#: fetch-pack.c:865 +#: fetch-pack.c:905 msgid "Server supports side-band" msgstr "Сървърът поддържа „side-band“" -#: fetch-pack.c:869 +#: fetch-pack.c:909 msgid "Server supports allow-tip-sha1-in-want" msgstr "Сървърът поддържа „allow-tip-sha1-in-want“" -#: fetch-pack.c:873 +#: fetch-pack.c:913 msgid "Server supports allow-reachable-sha1-in-want" msgstr "Сървърът поддържа „allow-reachable-sha1-in-want“" -#: fetch-pack.c:883 +#: fetch-pack.c:923 msgid "Server supports ofs-delta" msgstr "Сървърът поддържа „ofs-delta“" -#: fetch-pack.c:890 +#: fetch-pack.c:930 #, c-format msgid "Server version is %.*s" msgstr "Версията на сървъра е: %.*s" -#: fetch-pack.c:896 +#: fetch-pack.c:936 msgid "Server does not support --shallow-since" msgstr "Сървърът не поддържа опцията „--shallow-since“" -#: fetch-pack.c:900 +#: fetch-pack.c:940 msgid "Server does not support --shallow-exclude" msgstr "Сървърът не поддържа опцията „--shallow-exclude“" -#: fetch-pack.c:902 +#: fetch-pack.c:942 msgid "Server does not support --deepen" msgstr "Сървърът не поддържа опцията „--deepen“" -#: fetch-pack.c:913 +#: fetch-pack.c:953 msgid "no common commits" msgstr "няма общи подавания" -#: fetch-pack.c:925 +#: fetch-pack.c:965 msgid "git fetch-pack: fetch failed." msgstr "git fetch-pack: неуспешно доставяне." -#: fetch-pack.c:1087 +#: fetch-pack.c:1127 msgid "no matching remote head" msgstr "не може да бъде открит подходящ връх от отдалеченото хранилище" +#: fetch-pack.c:1149 +#, c-format +msgid "no such remote ref %s" +msgstr "такъв отдалечен указател няма: %s" + +#: fetch-pack.c:1152 +#, c-format +msgid "Server does not allow request for unadvertised object %s" +msgstr "Сървърът не позволява заявка за необявен „%s“" + #: gpg-interface.c:185 msgid "gpg failed to sign the data" msgstr "Програмата „gpg“ не подписа данните." @@ -1866,35 +1939,40 @@ msgstr "не може да се създаде временен файл" msgid "failed writing detached signature to '%s'" msgstr "Програмата не успя да запише самостоятелния подпис в „%s“" -#: grep.c:1782 +#: graph.c:96 +#, c-format +msgid "ignore invalid color '%.*s' in log.graphColors" +msgstr "прескачане на неправилния цвят „%.*s“ в „log.graphColors“" + +#: grep.c:1796 #, c-format msgid "'%s': unable to read %s" msgstr "„%s“: файлът сочен от „%s“ не може да бъде прочетен" -#: grep.c:1799 builtin/clone.c:381 builtin/diff.c:84 builtin/rm.c:155 +#: grep.c:1813 builtin/clone.c:399 builtin/diff.c:81 builtin/rm.c:133 #, c-format msgid "failed to stat '%s'" msgstr "не може да бъде получена информация чрез „stat“ за „%s“" -#: grep.c:1810 +#: grep.c:1824 #, c-format msgid "'%s': short read" msgstr "„%s“: изчитането върна по-малко байтове от заявените" -#: help.c:203 +#: help.c:218 #, c-format msgid "available git commands in '%s'" msgstr "налични команди на git от „%s“" -#: help.c:210 +#: help.c:225 msgid "git commands available from elsewhere on your $PATH" msgstr "команди на git от други директории от „$PATH“" -#: help.c:241 +#: help.c:256 msgid "These are common Git commands used in various situations:" msgstr "Това са най-често използваните команди на Git:" -#: help.c:306 +#: help.c:321 #, c-format msgid "" "'%s' appears to be a git command, but we were not\n" @@ -1903,11 +1981,11 @@ msgstr "" "Изглежда, че „%s“ е команда на git, но тя не може да\n" "бъде изпълнена. Вероятно пакетът „git-%s“ е повреден." -#: help.c:361 +#: help.c:376 msgid "Uh oh. Your system reports no Git commands at all." msgstr "Странно, изглежда, че на системата ви няма нито една команда на git." -#: help.c:383 +#: help.c:398 #, c-format msgid "" "WARNING: You called a Git command named '%s', which does not exist.\n" @@ -1918,17 +1996,17 @@ msgstr "" "съществува. Изпълнението автоматично продължава, като се счита, че имате " "предвид „%s“" -#: help.c:388 +#: help.c:403 #, c-format msgid "in %0.1f seconds automatically..." msgstr "след %0.1f секунди…" -#: help.c:395 +#: help.c:410 #, c-format msgid "git: '%s' is not a git command. See 'git --help'." msgstr "git: „%s“ не е команда на git. Погледнете изхода от „git --help“." -#: help.c:399 help.c:465 +#: help.c:414 help.c:480 msgid "" "\n" "Did you mean this?" @@ -1942,12 +2020,12 @@ msgstr[1] "" "\n" "Команди с подобно име са:" -#: help.c:461 +#: help.c:476 #, c-format msgid "%s: %s - %s" msgstr "%s: %s — %s" -#: ident.c:334 +#: ident.c:343 msgid "" "\n" "*** Please tell me who you are.\n" @@ -1974,6 +2052,41 @@ msgstr "" "хранилище.\n" "\n" +#: ident.c:367 +msgid "no email was given and auto-detection is disabled" +msgstr "липсва адрес за е-поща, а автоматичното отгатване е изключено" + +#: ident.c:372 +#, c-format +msgid "unable to auto-detect email address (got '%s')" +msgstr "" +"адресът за е-поща не може да бъде отгатнат (най-доброто предположение бе " +"„%s“)" + +#: ident.c:382 +msgid "no name was given and auto-detection is disabled" +msgstr "липсва име, а автоматичното отгатване е изключено" + +#: ident.c:388 +#, c-format +msgid "unable to auto-detect name (got '%s')" +msgstr "името не може да бъде отгатнато (най-доброто предположение бе „%s“)" + +#: ident.c:396 +#, c-format +msgid "empty ident name (for <%s>) not allowed" +msgstr "не може да се ползва празно име като идентификатор (за <%s>)" + +#: ident.c:402 +#, c-format +msgid "name consists only of disallowed characters: %s" +msgstr "името съдържа само непозволени знаци: „%s“" + +#: ident.c:417 builtin/commit.c:611 +#, c-format +msgid "invalid date format: %s" +msgstr "неправилен формат на дата: %s" + #: lockfile.c:152 #, c-format msgid "" @@ -2002,8 +2115,8 @@ msgstr "Файлът-ключалка „%s.lock“ не може да бъде msgid "failed to read the cache" msgstr "кешът не може да бъде прочетен" -#: merge.c:96 builtin/am.c:2000 builtin/am.c:2035 builtin/checkout.c:374 -#: builtin/checkout.c:588 builtin/clone.c:731 +#: merge.c:96 builtin/am.c:1999 builtin/am.c:2034 builtin/checkout.c:393 +#: builtin/checkout.c:607 builtin/clone.c:749 msgid "unable to write new index file" msgstr "неуспешно записване на новия индекс" @@ -2011,71 +2124,71 @@ msgstr "неуспешно записване на новия индекс" msgid "(bad commit)\n" msgstr "(лошо подаване)\n" -#: merge-recursive.c:231 +#: merge-recursive.c:231 merge-recursive.c:239 #, c-format msgid "addinfo_cache failed for path '%s'" msgstr "неуспешно изпълнение на „addinfo_cache“ за пътя „%s“" -#: merge-recursive.c:301 +#: merge-recursive.c:303 msgid "error building trees" msgstr "грешка при изграждане на дърветата" -#: merge-recursive.c:720 +#: merge-recursive.c:727 #, c-format msgid "failed to create path '%s'%s" msgstr "грешка при създаването на пътя „%s“%s" -#: merge-recursive.c:731 +#: merge-recursive.c:738 #, c-format msgid "Removing %s to make room for subdirectory\n" msgstr "Изтриване на „%s“, за да се освободи място за поддиректория\n" -#: merge-recursive.c:745 merge-recursive.c:764 +#: merge-recursive.c:752 merge-recursive.c:771 msgid ": perhaps a D/F conflict?" msgstr ": възможно е да има конфликт директория/файл." -#: merge-recursive.c:754 +#: merge-recursive.c:761 #, c-format msgid "refusing to lose untracked file at '%s'" msgstr "" "преустановяване на действието, за да не се изтрие неследеният файл „%s“" -#: merge-recursive.c:796 builtin/cat-file.c:34 +#: merge-recursive.c:803 builtin/cat-file.c:34 #, c-format msgid "cannot read object %s '%s'" msgstr "обектът „%s“ (%s) не може да бъде прочетен" -#: merge-recursive.c:798 +#: merge-recursive.c:805 #, c-format msgid "blob expected for %s '%s'" msgstr "обектът „%s“ (%s) се очакваше да е BLOB, а не е" -#: merge-recursive.c:822 +#: merge-recursive.c:829 #, c-format msgid "failed to open '%s': %s" msgstr "„%s“ не може да се отвори: %s" -#: merge-recursive.c:833 +#: merge-recursive.c:840 #, c-format msgid "failed to symlink '%s': %s" msgstr "неуспешно създаване на символната връзка „%s“: %s" -#: merge-recursive.c:838 +#: merge-recursive.c:845 #, c-format msgid "do not know what to do with %06o %s '%s'" msgstr "" "не е ясно какво да се прави с обекта „%2$s“ (%3$s) с права за достъп „%1$06o“" -#: merge-recursive.c:978 +#: merge-recursive.c:985 msgid "Failed to execute internal merge" msgstr "Неуспешно вътрешно сливане" -#: merge-recursive.c:982 +#: merge-recursive.c:989 #, c-format msgid "Unable to add %s to database" msgstr "„%s“ не може да се добави в базата с данни" -#: merge-recursive.c:1081 merge-recursive.c:1095 +#: merge-recursive.c:1092 #, c-format msgid "" "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left " @@ -2084,7 +2197,16 @@ msgstr "" "КОНФЛИКТ (%s/изтриване): „%s“ е изтрит в %s, а „%s“ в %s. Версия %s на „%s“ " "е оставена в дървото." -#: merge-recursive.c:1087 merge-recursive.c:1100 +#: merge-recursive.c:1097 +#, c-format +msgid "" +"CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s " +"left in tree." +msgstr "" +"КОНФЛИКТ (%s/изтриване): „%s“ е изтрит в %s, а „%s“ е преименуван на „%s“ в " +"%s. Версия %s на „%s“ е оставена в дървото." + +#: merge-recursive.c:1104 #, c-format msgid "" "CONFLICT (%s/delete): %s deleted in %s and %s in %s. Version %s of %s left " @@ -2093,6 +2215,15 @@ msgstr "" "КОНФЛИКТ (%s/изтриване): „%s“ е изтрит в %s, а „%s“ в %s. Версия %s на „%s“ " "е оставена в дървото: %s." +#: merge-recursive.c:1109 +#, c-format +msgid "" +"CONFLICT (%s/delete): %s deleted in %s and %s to %s in %s. Version %s of %s " +"left in tree at %s." +msgstr "" +"КОНФЛИКТ (%s/изтриване): „%s“ е изтрит в %s, а „%s“ е преименуван на „%s“ в " +"%s. Версия %s на „%s“ е оставена в дървото: %s." + #: merge-recursive.c:1143 msgid "rename" msgstr "преименуване" @@ -2131,123 +2262,123 @@ msgstr "" msgid "Renaming %s to %s and %s to %s instead" msgstr "Преименуване на „%s“ на „%s“, а „%s“ на „%s“" -#: merge-recursive.c:1531 +#: merge-recursive.c:1528 #, c-format msgid "CONFLICT (rename/add): Rename %s->%s in %s. %s added in %s" msgstr "" "КОНФЛИКТ (преименуване/добавяне): „%s“ е преименуван на „%s“ в клон „%s“, а " "„%s“ е добавен в „%s“" -#: merge-recursive.c:1546 +#: merge-recursive.c:1543 #, c-format msgid "Adding merged %s" msgstr "Добавяне на слетия „%s“" -#: merge-recursive.c:1553 merge-recursive.c:1766 +#: merge-recursive.c:1550 merge-recursive.c:1780 #, c-format msgid "Adding as %s instead" msgstr "Добавяне като „%s“" -#: merge-recursive.c:1610 +#: merge-recursive.c:1607 #, c-format msgid "cannot read object %s" msgstr "обектът „%s“ не може да се прочете" -#: merge-recursive.c:1613 +#: merge-recursive.c:1610 #, c-format msgid "object %s is not a blob" msgstr "обектът „%s“ не е BLOB" -#: merge-recursive.c:1666 +#: merge-recursive.c:1679 msgid "modify" msgstr "промяна" -#: merge-recursive.c:1666 +#: merge-recursive.c:1679 msgid "modified" msgstr "променен" -#: merge-recursive.c:1676 +#: merge-recursive.c:1689 msgid "content" msgstr "съдържание" -#: merge-recursive.c:1683 +#: merge-recursive.c:1696 msgid "add/add" msgstr "добавяне/добавяне" -#: merge-recursive.c:1718 +#: merge-recursive.c:1732 #, c-format msgid "Skipped %s (merged same as existing)" msgstr "Прескачане на „%s“ (слетият резултат е идентичен със сегашния)" -#: merge-recursive.c:1732 +#: merge-recursive.c:1746 #, c-format msgid "Auto-merging %s" msgstr "Автоматично сливане на „%s“" -#: merge-recursive.c:1736 git-submodule.sh:924 +#: merge-recursive.c:1750 git-submodule.sh:944 msgid "submodule" msgstr "ПОДМОДУЛ" -#: merge-recursive.c:1737 +#: merge-recursive.c:1751 #, c-format msgid "CONFLICT (%s): Merge conflict in %s" msgstr "КОНФЛИКТ (%s): Конфликт при сливане на „%s“" -#: merge-recursive.c:1831 +#: merge-recursive.c:1845 #, c-format msgid "Removing %s" msgstr "Изтриване на „%s“" -#: merge-recursive.c:1857 +#: merge-recursive.c:1871 msgid "file/directory" msgstr "файл/директория" -#: merge-recursive.c:1863 +#: merge-recursive.c:1877 msgid "directory/file" msgstr "директория/файл" -#: merge-recursive.c:1868 +#: merge-recursive.c:1883 #, 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:1877 +#: merge-recursive.c:1892 #, c-format msgid "Adding %s" msgstr "Добавяне на „%s“" -#: merge-recursive.c:1914 +#: merge-recursive.c:1929 msgid "Already up-to-date!" msgstr "Вече е обновено!" -#: merge-recursive.c:1923 +#: merge-recursive.c:1938 #, c-format msgid "merging of trees %s and %s failed" msgstr "неуспешно сливане на дърветата „%s“ и „%s“" -#: merge-recursive.c:2006 +#: merge-recursive.c:2021 msgid "Merging:" msgstr "Сливане:" -#: merge-recursive.c:2019 +#: merge-recursive.c:2034 #, c-format msgid "found %u common ancestor:" msgid_plural "found %u common ancestors:" msgstr[0] "открит е %u общ предшественик:" msgstr[1] "открити са %u общи предшественици:" -#: merge-recursive.c:2058 +#: merge-recursive.c:2073 msgid "merge returned no commit" msgstr "сливането не върна подаване" -#: merge-recursive.c:2121 +#: merge-recursive.c:2136 #, c-format msgid "Could not parse object '%s'" msgstr "Неуспешен анализ на обекта „%s“" -#: merge-recursive.c:2135 builtin/merge.c:641 builtin/merge.c:788 +#: merge-recursive.c:2150 builtin/merge.c:645 builtin/merge.c:792 msgid "Unable to write index." msgstr "Индексът не може да бъде прочетен" @@ -2262,11 +2393,11 @@ msgstr "" "съществува).\n" "За да завършите предишното сливане, изпълнете:\n" "\n" -" git notes merge --commit\n" +" git notes merge --commit\n" "\n" "За да отмените предишното сливане, изпълнете:\n" "\n" -" git notes merge --abort" +" git notes merge --abort" #: notes-merge.c:280 #, c-format @@ -2297,7 +2428,7 @@ msgstr "" msgid "Bad %s value: '%s'" msgstr "Зададена е лоша стойност на променливата „%s“: „%s“" -#: object.c:242 +#: object.c:240 #, c-format msgid "unable to parse object: %s" msgstr "обектът „%s“ не може да бъде анализиран" @@ -2332,16 +2463,34 @@ msgstr "-ЧИСЛО" msgid "malformed object name '%s'" msgstr "неправилно име на обект „%s“" -#: path.c:826 +#: path.c:810 #, c-format msgid "Could not make %s writable by group" msgstr "Не могат да се дадат права за запис в директорията „%s“ на групата" -#: pathspec.c:133 +#: pathspec.c:125 +msgid "Escape character '\\' not allowed as last character in attr value" +msgstr "" +"Екраниращият знак „\\“не може да е последен знак в стойността на атрибут" + +#: pathspec.c:143 +msgid "Only one 'attr:' specification is allowed." +msgstr "Позволено е само едно указване на „attr:“." + +#: pathspec.c:146 +msgid "attr spec must not be empty" +msgstr "„attr:“ трябва да указва стойност" + +#: pathspec.c:189 +#, c-format +msgid "invalid attribute name %s" +msgstr "неправилно име на атрибут: „%s“" + +#: pathspec.c:254 msgid "global 'glob' and 'noglob' pathspec settings are incompatible" msgstr "глобалните настройки за пътища „glob“ и „noglob“ са несъвместими" -#: pathspec.c:143 +#: pathspec.c:261 msgid "" "global 'literal' pathspec setting is incompatible with all other global " "pathspec settings" @@ -2349,46 +2498,51 @@ msgstr "" "глобалната настройка за дословни пътища „literal“ е несъвместима с всички " "други глобални настройки за пътища" -#: pathspec.c:177 +#: pathspec.c:301 msgid "invalid parameter for pathspec magic 'prefix'" msgstr "неправилен параметър за опцията за магически пътища „prefix“" -#: pathspec.c:183 +#: pathspec.c:322 #, c-format msgid "Invalid pathspec magic '%.*s' in '%s'" msgstr "Неправилна стойност за опцията за магически пътища „%.*s“ в „%s“" -#: pathspec.c:187 +#: pathspec.c:327 #, c-format msgid "Missing ')' at the end of pathspec magic in '%s'" msgstr "Знакът „)“ липсва в опцията за магически пътища в „%s“" -#: pathspec.c:205 +#: pathspec.c:365 #, c-format msgid "Unimplemented pathspec magic '%c' in '%s'" msgstr "Магическите пътища „%c“ са без реализация за „%s“" -#: pathspec.c:230 +#: pathspec.c:421 pathspec.c:443 +#, c-format +msgid "Pathspec '%s' is in submodule '%.*s'" +msgstr "Пътят „%s“ е в подмодула „%.*s“" + +#: pathspec.c:483 #, c-format msgid "%s: 'literal' and 'glob' are incompatible" msgstr "%s: опциите „literal“ и „glob“ са несъвместими" -#: pathspec.c:241 +#: pathspec.c:496 #, c-format msgid "%s: '%s' is outside repository" msgstr "%s: „%s“ е извън хранилището" -#: pathspec.c:291 +#: pathspec.c:584 #, c-format -msgid "Pathspec '%s' is in submodule '%.*s'" -msgstr "Пътят „%s“ е в подмодула „%.*s“" +msgid "'%s' (mnemonic: '%c')" +msgstr "„%s“ (клавиш: „%c“)" -#: pathspec.c:353 +#: pathspec.c:594 #, c-format msgid "%s: pathspec magic not supported by this command: %s" msgstr "%s: магическите пътища не се поддържат от командата „%s“" -#: pathspec.c:408 +#: pathspec.c:644 msgid "" "empty strings as pathspecs will be made invalid in upcoming releases. please " "use . instead if you meant to match all paths" @@ -2397,24 +2551,16 @@ msgstr "" "следващи версии на Git. Ако искате съвпадение с всички пътища, използвайте: " "„.“" -#: pathspec.c:440 +#: pathspec.c:668 #, c-format msgid "pathspec '%s' is beyond a symbolic link" msgstr "пътят „%s“ е след символна връзка" -#: pathspec.c:449 -msgid "" -"There is nothing to exclude from by :(exclude) patterns.\n" -"Perhaps you forgot to add either ':/' or '.' ?" -msgstr "" -"Нищо не се изключва от шаблоните за изключване.\n" -"Това често се случва, ако сте забравили да добавите „:/“ или „.“." - -#: pretty.c:971 +#: pretty.c:982 msgid "unable to parse --pretty format" msgstr "аргументът към опцията „--pretty“ не може да се анализира" -#: read-cache.c:1315 +#: read-cache.c:1442 #, c-format msgid "" "index.version set, but the value is invalid.\n" @@ -2423,7 +2569,7 @@ msgstr "" "Зададена е неправилна стойност на настройката „index.version“.\n" "Ще се ползва версия %i" -#: read-cache.c:1325 +#: read-cache.c:1452 #, c-format msgid "" "GIT_INDEX_VERSION set, but the value is invalid.\n" @@ -2433,263 +2579,373 @@ msgstr "" "„GIT_INDEX_VERSION“.\n" "Ще се ползва версия %i" -#: refs.c:576 builtin/merge.c:840 +#: read-cache.c:2375 sequencer.c:1350 sequencer.c:2048 +#, c-format +msgid "could not stat '%s'" +msgstr "неуспешно изпълнение на „stat“ върху „%s“" + +#: read-cache.c:2388 +#, c-format +msgid "unable to open git dir: %s" +msgstr "не може да се отвори директорията на git: %s" + +#: read-cache.c:2400 +#, c-format +msgid "unable to unlink: %s" +msgstr "неуспешно изтриване на „%s“" + +#: refs.c:620 builtin/merge.c:844 #, c-format msgid "Could not open '%s' for writing" msgstr "„%s“ не може да бъде отворен за запис" -#: refs/files-backend.c:2481 +#: refs.c:1667 +msgid "ref updates forbidden inside quarantine environment" +msgstr "обновяванията на указатели са забранени в среди под карантина" + +#: refs/files-backend.c:1631 #, c-format msgid "could not delete reference %s: %s" msgstr "Указателят „%s“ не може да бъде изтрит: %s" -#: refs/files-backend.c:2484 +#: refs/files-backend.c:1634 #, c-format msgid "could not delete references: %s" msgstr "Указателите не може да бъдат изтрити: %s" -#: refs/files-backend.c:2493 +#: refs/files-backend.c:1643 #, c-format msgid "could not remove reference %s" msgstr "Указателят „%s“ не може да бъде изтрит" -#: ref-filter.c:55 +#: ref-filter.c:35 wt-status.c:1780 +msgid "gone" +msgstr "изтрит" + +#: ref-filter.c:36 +#, c-format +msgid "ahead %d" +msgstr "напред с %d" + +#: ref-filter.c:37 +#, c-format +msgid "behind %d" +msgstr "назад с %d" + +#: ref-filter.c:38 +#, c-format +msgid "ahead %d, behind %d" +msgstr "напред с %d, назад с %d" + +#: ref-filter.c:104 #, c-format msgid "expected format: %%(color:)" msgstr "очакван формат: %%(color:ЦВЯТ)" -#: ref-filter.c:57 +#: ref-filter.c:106 #, c-format msgid "unrecognized color: %%(color:%s)" msgstr "непознат цвят: %%(color:%s)" -#: ref-filter.c:71 +#: ref-filter.c:120 #, c-format -msgid "unrecognized format: %%(%s)" -msgstr "непознат формат: %%(%s)" +msgid "Integer value expected refname:lstrip=%s" +msgstr "очаква се цяло число за „refname:lstrip=%s“" -#: ref-filter.c:77 +#: ref-filter.c:124 +#, c-format +msgid "Integer value expected refname:rstrip=%s" +msgstr "очаква се цяло число за „refname:rstrip=%s“" + +#: ref-filter.c:126 +#, c-format +msgid "unrecognized %%(%s) argument: %s" +msgstr "непознат аргумент за „%%(%s)“: %s" + +#: ref-filter.c:166 #, c-format msgid "%%(body) does not take arguments" msgstr "%%(body) не приема аргументи" -#: ref-filter.c:84 +#: ref-filter.c:173 #, c-format msgid "%%(subject) does not take arguments" msgstr "%%(subject) не приема аргументи" -#: ref-filter.c:101 +#: ref-filter.c:180 +#, c-format +msgid "%%(trailers) does not take arguments" +msgstr "%%(trailers) не приема аргументи" + +#: ref-filter.c:199 #, c-format msgid "positive value expected contents:lines=%s" msgstr "очаква се положителна стойност за „contents:lines=%s“" -#: ref-filter.c:103 +#: ref-filter.c:201 #, c-format msgid "unrecognized %%(contents) argument: %s" msgstr "непознат аргумент за %%(contents): %s" -#: ref-filter.c:113 +#: ref-filter.c:214 +#, c-format +msgid "positive value expected objectname:short=%s" +msgstr "очаква се положителна стойност за „objectname:short=%s“" + +#: ref-filter.c:218 #, c-format msgid "unrecognized %%(objectname) argument: %s" msgstr "непознат аргумент за %%(objectname): %s" -#: ref-filter.c:135 +#: ref-filter.c:245 #, c-format msgid "expected format: %%(align:,)" msgstr "очакван формат: %%(align:ШИРОЧИНА,ПОЗИЦИЯ)" -#: ref-filter.c:147 +#: ref-filter.c:257 #, c-format msgid "unrecognized position:%s" msgstr "непозната позиция: %s" -#: ref-filter.c:151 +#: ref-filter.c:261 #, c-format msgid "unrecognized width:%s" msgstr "непозната широчина: %s" -#: ref-filter.c:157 +#: ref-filter.c:267 #, c-format msgid "unrecognized %%(align) argument: %s" msgstr "непознат аргумент за %%(align): %s" -#: ref-filter.c:161 +#: ref-filter.c:271 #, c-format msgid "positive width expected with the %%(align) atom" msgstr "очаква се положителна широчина с лексемата „%%(align)“" -#: ref-filter.c:244 +#: ref-filter.c:286 +#, c-format +msgid "unrecognized %%(if) argument: %s" +msgstr "непознат аргумент за „%%(if)“: %s" + +#: ref-filter.c:371 #, c-format msgid "malformed field name: %.*s" msgstr "неправилно име на обект: „%.*s“" -#: ref-filter.c:270 +#: ref-filter.c:397 #, c-format msgid "unknown field name: %.*s" msgstr "непознато име на обект: „%.*s“" -#: ref-filter.c:372 +#: ref-filter.c:501 +#, c-format +msgid "format: %%(if) atom used without a %%(then) atom" +msgstr "формат: лексемата %%(if) е използвана без съответната ѝ %%(then)" + +#: ref-filter.c:561 +#, c-format +msgid "format: %%(then) atom used without an %%(if) atom" +msgstr "формат: лексемата %%(then) е използвана без съответната ѝ %%(if)" + +#: ref-filter.c:563 +#, c-format +msgid "format: %%(then) atom used more than once" +msgstr "формат: лексемата %%(then) е използвана повече от един път" + +#: ref-filter.c:565 +#, c-format +msgid "format: %%(then) atom used after %%(else)" +msgstr "формат: лексемата %%(then) е използвана след %%(else)" + +#: ref-filter.c:591 +#, c-format +msgid "format: %%(else) atom used without an %%(if) atom" +msgstr "формат: лексемата %%(else) е използвана без съответната ѝ %%(if)" + +#: ref-filter.c:593 +#, c-format +msgid "format: %%(else) atom used without a %%(then) atom" +msgstr "формат: лексемата %%(else) е използвана без съответната ѝ %%(then)" + +#: ref-filter.c:595 +#, c-format +msgid "format: %%(else) atom used more than once" +msgstr "формат: лексемата %%(else) е използвана повече от един път" + +#: ref-filter.c:608 #, c-format msgid "format: %%(end) atom used without corresponding atom" -msgstr "грешка във форма̀та: лексемата %%(end) е използвана без съответната ѝ" +msgstr "формат: лексемата %%(end) е използвана без съответната ѝ" -#: ref-filter.c:424 +#: ref-filter.c:663 #, c-format msgid "malformed format string %s" msgstr "неправилен низ за форматиране „%s“" -#: ref-filter.c:878 -msgid ":strip= requires a positive integer argument" -msgstr "„:strip=“ изисква аргумент цяло, положително число" +#: ref-filter.c:1247 +#, c-format +msgid "(no branch, rebasing %s)" +msgstr "(извън клон, пребазиране на „%s“)" + +#: ref-filter.c:1250 +#, c-format +msgid "(no branch, bisect started on %s)" +msgstr "(извън клон, двоично търсене от „%s“)" -#: ref-filter.c:883 +#. TRANSLATORS: make sure this matches +#. "HEAD detached at " in wt-status.c +#: ref-filter.c:1256 #, c-format -msgid "ref '%s' does not have %ld components to :strip" -msgstr "указателят „%s“ не разполага с %ld компоненти за премахване (:strip)" +msgid "(HEAD detached at %s)" +msgstr "(Указателят „HEAD“ не е свързан и е при „%s“)" -#: ref-filter.c:1046 +#. TRANSLATORS: make sure this matches +#. "HEAD detached from " in wt-status.c +#: ref-filter.c:1261 #, c-format -msgid "unknown %.*s format %s" -msgstr "непознато „%.*s“, формат „%s“" +msgid "(HEAD detached from %s)" +msgstr "Указателят „HEAD“ не е свързан и е отделѐн от „%s“" + +#: ref-filter.c:1265 +msgid "(no branch)" +msgstr "(извън клон)" -#: ref-filter.c:1066 ref-filter.c:1097 +#: ref-filter.c:1420 ref-filter.c:1451 #, c-format msgid "missing object %s for %s" msgstr "обектът „%s“ липсва за „%s“" -#: ref-filter.c:1069 ref-filter.c:1100 +#: ref-filter.c:1423 ref-filter.c:1454 #, c-format msgid "parse_object_buffer failed on %s for %s" msgstr "неуспешно анализиране чрез „parse_object_buffer“ на „%s“ за „%s“" -#: ref-filter.c:1311 +#: ref-filter.c:1692 #, c-format msgid "malformed object at '%s'" msgstr "обект със сгрешен формат при „%s“" -#: ref-filter.c:1373 +#: ref-filter.c:1759 #, c-format msgid "ignoring ref with broken name %s" msgstr "игнориране на указателя с грешно име „%s“" -#: ref-filter.c:1378 +#: ref-filter.c:1764 #, c-format msgid "ignoring broken ref %s" msgstr "игнориране на повредения указател „%s“" -#: ref-filter.c:1633 +#: ref-filter.c:2028 #, c-format msgid "format: %%(end) atom missing" msgstr "грешка във форма̀та: липсва лексемата %%(end)" -#: ref-filter.c:1687 +#: ref-filter.c:2109 #, c-format msgid "malformed object name %s" msgstr "неправилно име на обект „%s“" -#: remote.c:746 +#: remote.c:754 #, c-format msgid "Cannot fetch both %s and %s to %s" msgstr "Невъзможно е да се доставят едновременно и „%s“, и „%s“ към „%s“" -#: remote.c:750 +#: remote.c:758 #, c-format msgid "%s usually tracks %s, not %s" msgstr "„%s“ обикновено следи „%s“, а не „%s“" -#: remote.c:754 +#: remote.c:762 #, c-format msgid "%s tracks both %s and %s" msgstr "„%s“ следи както „%s“, така и „%s“" -#: remote.c:762 +#: remote.c:770 msgid "Internal error" msgstr "Вътрешна грешка" -#: remote.c:1677 remote.c:1720 +#: remote.c:1685 remote.c:1787 msgid "HEAD does not point to a branch" msgstr "Указателят „HEAD“ не сочи към клон" -#: remote.c:1686 +#: remote.c:1694 #, c-format msgid "no such branch: '%s'" msgstr "няма клон на име „%s“" -#: remote.c:1689 +#: remote.c:1697 #, c-format msgid "no upstream configured for branch '%s'" msgstr "не е зададен клон-източник за клона „%s“" -#: remote.c:1695 +#: remote.c:1703 #, c-format msgid "upstream branch '%s' not stored as a remote-tracking branch" msgstr "клонът-източник „%s“ не е съхранен като следящ клон" -#: remote.c:1710 +#: remote.c:1718 #, c-format msgid "push destination '%s' on remote '%s' has no local tracking branch" msgstr "" "липсва локален следящ клон за местоположението за изтласкване „%s“ в " "хранилището „%s“" -#: remote.c:1725 +#: remote.c:1730 #, c-format msgid "branch '%s' has no remote for pushing" msgstr "няма информация клонът „%s“ да следи някой друг" -#: remote.c:1736 +#: remote.c:1741 #, c-format msgid "push refspecs for '%s' do not include '%s'" msgstr "указателят за изтласкване на „%s“ не включва „%s“" -#: remote.c:1749 +#: remote.c:1754 msgid "push has no destination (push.default is 'nothing')" msgstr "указателят за изтласкване не включва цел („push.default“ е „nothing“)" -#: remote.c:1771 +#: remote.c:1776 msgid "cannot resolve 'simple' push to a single destination" msgstr "простото (simple) изтласкване не съответства на една цел" -#: remote.c:2073 +#: remote.c:2081 #, c-format msgid "Your branch is based on '%s', but the upstream is gone.\n" msgstr "Този клон следи „%s“, но следеният клон е изтрит.\n" -#: remote.c:2077 +#: remote.c:2085 msgid " (use \"git branch --unset-upstream\" to fixup)\n" msgstr " (за да коригирате това, използвайте „git branch --unset-upstream“)\n" -#: remote.c:2080 +#: remote.c:2088 #, c-format msgid "Your branch is up-to-date with '%s'.\n" msgstr "Клонът е актуализиран към „%s“.\n" -#: remote.c:2084 +#: remote.c:2092 #, 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:2090 +#: remote.c:2098 msgid " (use \"git push\" to publish your local commits)\n" msgstr " (публикувайте локалните си промени чрез „git push“)\n" -#: remote.c:2093 +#: remote.c:2101 #, c-format msgid "Your branch is behind '%s' by %d commit, and can be fast-forwarded.\n" msgid_plural "" "Your branch is behind '%s' by %d commits, and can be fast-forwarded.\n" -msgstr[0] "" -"Клонът ви е с %2$d подаване зад „%1$s“ и може да бъде тривиално слят.\n" -msgstr[1] "" -"Клонът ви е с %2$d подавания зад „%1$s“ и може да бъде тривиално слят.\n" +msgstr[0] "Клонът ви е с %2$d подаване зад „%1$s“ и може да бъде превъртян.\n" +msgstr[1] "Клонът ви е с %2$d подавания зад „%1$s“ и може да бъде превъртян.\n" -#: remote.c:2101 +#: remote.c:2109 msgid " (use \"git pull\" to update your local branch)\n" msgstr " (обновете локалния си клон чрез „git pull“)\n" -#: remote.c:2104 +#: remote.c:2112 #, c-format msgid "" "Your branch and '%s' have diverged,\n" @@ -2704,7 +2960,7 @@ msgstr[1] "" "Текущият клон се е отделил от „%s“,\n" "двата имат съответно по %d и %d несъвпадащи подавания.\n" -#: remote.c:2114 +#: remote.c:2122 msgid " (use \"git pull\" to merge the remote branch into yours)\n" msgstr " (слейте отдалечения клон в локалния чрез „git pull“)\n" @@ -2721,24 +2977,35 @@ msgstr "Текущият клон „%s“ е без подавания " msgid "--first-parent is incompatible with --bisect" msgstr "опциите „--first-parent“ и „--bisect“ са несъвместими" -#: run-command.c:106 +#: run-command.c:125 msgid "open /dev/null failed" msgstr "неуспешно отваряне на „/dev/null“" -#: run-command.c:108 +#: run-command.c:127 #, c-format msgid "dup2(%d,%d) failed" msgstr "неуспешно изпълнение на dup2(%d,%d)" -#: send-pack.c:297 +#: send-pack.c:150 +#, c-format +msgid "unable to parse remote unpack status: %s" +msgstr "" +"състоянието от отдалеченото разпакетиране не може да бъде анализирано: %s" + +#: send-pack.c:152 +#, c-format +msgid "remote unpack failed: %s" +msgstr "неуспешно отдалечено разпакетиране: %s" + +#: send-pack.c:315 msgid "failed to sign the push certificate" msgstr "сертификатът за изтласкване не може да бъде подписан" -#: send-pack.c:410 +#: send-pack.c:428 msgid "the receiving end does not support --signed push" msgstr "отсрещната страна не поддържа изтласкване с опцията „--signed“" -#: send-pack.c:412 +#: send-pack.c:430 msgid "" "not sending a push certificate since the receiving end does not support --" "signed push" @@ -2746,23 +3013,32 @@ msgstr "" "отсрещната страна не поддържа изтласкване с опцията „--signed“, затова не се " "използва сертификат" -#: send-pack.c:424 +#: send-pack.c:442 msgid "the receiving end does not support --atomic push" msgstr "получаващата страна не поддържа изтласкване с опцията „--atomic“" -#: send-pack.c:429 +#: send-pack.c:447 msgid "the receiving end does not support push options" msgstr "отсрещната страна не поддържа опции при изтласкване" -#: sequencer.c:171 +#: sequencer.c:215 msgid "revert" msgstr "отмяна" -#: sequencer.c:171 +#: sequencer.c:217 msgid "cherry-pick" msgstr "отбиране" -#: sequencer.c:228 +#: sequencer.c:219 +msgid "rebase -i" +msgstr "rebase -i" + +#: sequencer.c:221 +#, c-format +msgid "Unknown action: %d" +msgstr "Неизвестно действие: %d" + +#: sequencer.c:278 msgid "" "after resolving the conflicts, mark the corrected paths\n" "with 'git add ' or 'git rm '" @@ -2770,7 +3046,7 @@ msgstr "" "след коригирането на конфликтите, отбележете съответните\n" "пътища с „git add ПЪТ…“ или „git rm ПЪТ…“." -#: sequencer.c:231 +#: sequencer.c:281 msgid "" "after resolving the conflicts, mark the corrected paths\n" "with 'git add ' or 'git rm '\n" @@ -2780,61 +3056,63 @@ msgstr "" "пътища с „git add ПЪТ…“ или „git rm ПЪТ…“, след което\n" "подайте резултата с командата „git commit'“." -#: sequencer.c:244 sequencer.c:1209 +#: sequencer.c:294 sequencer.c:1682 #, c-format msgid "could not lock '%s'" msgstr "„%s“ не може да се заключи" -#: sequencer.c:247 sequencer.c:1125 sequencer.c:1214 +#: sequencer.c:297 sequencer.c:1560 sequencer.c:1687 sequencer.c:1701 #, c-format msgid "could not write to '%s'" msgstr "в „%s“ не може да се пише" -# FIXME - must be the same as Could not write to '%s' above -#: sequencer.c:251 +#: sequencer.c:301 #, c-format msgid "could not write eol to '%s'" msgstr "краят на ред не може да се запише в „%s“" -#: sequencer.c:255 sequencer.c:1130 sequencer.c:1216 +#: sequencer.c:305 sequencer.c:1565 sequencer.c:1689 #, c-format msgid "failed to finalize '%s'." msgstr "„%s“ не може да се завърши." -#: sequencer.c:279 builtin/am.c:259 builtin/commit.c:749 builtin/merge.c:1032 +#: sequencer.c:329 sequencer.c:814 sequencer.c:1586 builtin/am.c:257 +#: builtin/commit.c:749 builtin/merge.c:1018 #, c-format msgid "could not read '%s'" msgstr "файлът „%s“ не може да бъде прочетен" -#: sequencer.c:305 +#: sequencer.c:355 #, c-format msgid "your local changes would be overwritten by %s." msgstr "локалните ви промени ще бъдат презаписани при %s." -#: sequencer.c:309 +#: sequencer.c:359 msgid "commit your changes or stash them to proceed." msgstr "подайте или скатайте промените, за да продължите" -#: sequencer.c:324 +#: sequencer.c:388 #, c-format msgid "%s: fast-forward" -msgstr "%s: тривиално сливане" +msgstr "%s: превъртане" -#. TRANSLATORS: %s will be "revert" or "cherry-pick" -#: sequencer.c:399 +#. TRANSLATORS: %s will be "revert", "cherry-pick" or +#. * "rebase -i". +#. +#: sequencer.c:470 #, c-format msgid "%s: Unable to write new index file" msgstr "%s: новият индекс не може да бъде запазен" -#: sequencer.c:418 +#: sequencer.c:489 msgid "could not resolve HEAD commit\n" msgstr "подаването сочено от указателя „HEAD“ не може да бъде открито\n" -#: sequencer.c:438 +#: sequencer.c:509 msgid "unable to update cache tree\n" msgstr "дървото на кеша не може да бъде обновено\n" -#: sequencer.c:483 +#: sequencer.c:592 #, c-format msgid "" "you have staged changes in your working tree\n" @@ -2853,217 +3131,440 @@ msgstr "" "в това работно дърво има скатани промени.\n" "Ако искате да ги слеете с предишното подаване, изпълнете:\n" "\n" -" git commit --amend %s\n" +" git commit --amend %s\n" "\n" "Ако искате да създадете ново подаване, изпълнете:\n" "\n" -" git commit %s\n" +" git commit %s\n" "\n" "И в двата случая продължавате след това с командата:\n" "\n" -" git rebase --continue\n" +" git rebase --continue\n" -#: sequencer.c:567 +#: sequencer.c:694 #, c-format msgid "could not parse commit %s\n" msgstr "подаването „%s“ не може да бъде анализирано\n" -#: sequencer.c:572 +#: sequencer.c:699 #, c-format msgid "could not parse parent commit %s\n" msgstr "родителското подаване „%s“ не може да бъде анализирано\n" -#: sequencer.c:656 +#: sequencer.c:821 +#, c-format +msgid "" +"unexpected 1st line of squash message:\n" +"\n" +"\t%.*s" +msgstr "" +"неочакван първи ред на съобщението при смачкване:\n" +"\n" +" %.*s" + +#: sequencer.c:827 +#, c-format +msgid "" +"invalid 1st line of squash message:\n" +"\n" +"\t%.*s" +msgstr "" +"неправилен първи ред на съобщението при смачкване:\n" +"\n" +" %.*s" + +#: sequencer.c:833 sequencer.c:858 +#, c-format +msgid "This is a combination of %d commits." +msgstr "Това е обединение от %d подавания" + +#: sequencer.c:842 +msgid "need a HEAD to fixup" +msgstr "За смачкване ви трябва указател „HEAD“" + +#: sequencer.c:844 +msgid "could not read HEAD" +msgstr "указателят „HEAD“ не може да се прочете" + +#: sequencer.c:846 +msgid "could not read HEAD's commit message" +msgstr "" +"съобщението за подаване към указателя „HEAD“ не може да бъде прочетено: %s" + +#: sequencer.c:852 +#, c-format +msgid "cannot write '%s'" +msgstr "„%s“ не може да се запази" + +#: sequencer.c:861 git-rebase--interactive.sh:445 +msgid "This is the 1st commit message:" +msgstr "Това е 1-то съобщение при подаване:" + +#: sequencer.c:869 +#, c-format +msgid "could not read commit message of %s" +msgstr "съобщението за подаване към „%s“ не може да бъде прочетено" + +#: sequencer.c:876 +#, c-format +msgid "This is the commit message #%d:" +msgstr "Това е съобщение при подаване №${%d}:" + +#: sequencer.c:881 +#, c-format +msgid "The commit message #%d will be skipped:" +msgstr "Съобщение при подаване №${%d} ще бъде прескочено:" + +#: sequencer.c:886 +#, c-format +msgid "unknown command: %d" +msgstr "непозната команда: %d" + +#: sequencer.c:952 msgid "your index file is unmerged." msgstr "индексът не е слят." -#: sequencer.c:675 +#: sequencer.c:970 #, c-format msgid "commit %s is a merge but no -m option was given." msgstr "подаването „%s“ е сливане, но не е дадена опцията „-m“" -#: sequencer.c:683 +#: sequencer.c:978 #, c-format msgid "commit %s does not have parent %d" msgstr "подаването „%s“ няма родител %d" -#: sequencer.c:687 +#: sequencer.c:982 #, c-format msgid "mainline was specified but commit %s is not a merge." msgstr "указано е базово подаване, но подаването „%s“ не е сливане." +#: sequencer.c:988 +#, 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:700 +#: sequencer.c:1009 #, c-format msgid "%s: cannot parse parent commit %s" msgstr "%s: неразпозната стойност за родителското подаване „%s“" -#: sequencer.c:705 +#: sequencer.c:1071 sequencer.c:1827 #, c-format -msgid "cannot get commit message for %s" -msgstr "неуспешно извличане на съобщението за подаване на „%s“" +msgid "could not rename '%s' to '%s'" +msgstr "„%s“ не може да се преименува на „%s“" -#: sequencer.c:797 +#: sequencer.c:1122 #, c-format msgid "could not revert %s... %s" msgstr "подаването „%s“… не може да бъде отменено: „%s“" -#: sequencer.c:798 +#: sequencer.c:1123 #, c-format msgid "could not apply %s... %s" msgstr "подаването „%s“… не може да бъде приложено: „%s“" -#: sequencer.c:833 +#: sequencer.c:1165 msgid "empty commit set passed" msgstr "зададено е празно множество от подавания" -#: sequencer.c:843 +#: sequencer.c:1175 #, c-format msgid "git %s: failed to read the index" msgstr "git %s: неуспешно изчитане на индекса" -#: sequencer.c:850 +#: sequencer.c:1182 #, c-format msgid "git %s: failed to refresh the index" msgstr "git %s: неуспешно обновяване на индекса" -#: sequencer.c:944 +#: sequencer.c:1303 #, c-format msgid "invalid line %d: %.*s" msgstr "неправилен ред %d: %.*s" -#: sequencer.c:950 -msgid "no commits parsed." -msgstr "никое от подаванията не може да се разпознае." +#: sequencer.c:1311 +#, c-format +msgid "cannot '%s' without a previous commit" +msgstr "Без предишно подаване не може да се изпълни „%s“" -#: sequencer.c:966 +#: sequencer.c:1344 #, c-format msgid "could not read '%s'." msgstr "от „%s“ не може да се чете." -#: sequencer.c:972 +#: sequencer.c:1356 +msgid "please fix this using 'git rebase --edit-todo'." +msgstr "коригирайте това чрез „git rebase --edit-todo“." + +#: sequencer.c:1358 #, c-format msgid "unusable instruction sheet: '%s'" msgstr "неизползваем файл с описание на предстоящите действия: „%s“" -#: sequencer.c:983 +#: sequencer.c:1363 +msgid "no commits parsed." +msgstr "никое от подаванията не може да се разпознае." + +#: sequencer.c:1374 msgid "cannot cherry-pick during a revert." msgstr "" "по време на отмяна на подаване не може да се извърши отбиране на подаване." -#: sequencer.c:985 +#: sequencer.c:1376 msgid "cannot revert during a cherry-pick." msgstr "по време на отбиране не може да се извърши отмяна на подаване." -#: sequencer.c:1028 +#: sequencer.c:1439 #, c-format msgid "invalid key: %s" msgstr "неправилен ключ: „%s“" -#: sequencer.c:1031 +#: sequencer.c:1442 #, c-format msgid "invalid value for %s: %s" msgstr "неправилна стойност за „%s“: „%s“" -#: sequencer.c:1063 +#: sequencer.c:1499 #, c-format msgid "malformed options sheet: '%s'" msgstr "неправилен файл с опции: „%s“" -#: sequencer.c:1101 +#: sequencer.c:1537 msgid "a cherry-pick or revert is already in progress" msgstr "" "в момента вече се извършва отбиране на подавания или пребазиране на клона" -#: sequencer.c:1102 +#: sequencer.c:1538 msgid "try \"git cherry-pick (--continue | --quit | --abort)\"" msgstr "използвайте „git cherry-pick (--continue | --quit | --abort)“" -#: sequencer.c:1106 +#: sequencer.c:1541 #, c-format msgid "could not create sequencer directory '%s'" msgstr "директорията за секвенсора „%s“ не може да бъде създадена" -#: sequencer.c:1120 +#: sequencer.c:1555 msgid "could not lock HEAD" msgstr "указателят „HEAD“ не може да се заключи" -#: sequencer.c:1151 sequencer.c:1289 +#: sequencer.c:1611 sequencer.c:2181 msgid "no cherry-pick or revert in progress" msgstr "" "в момента не се извършва отбиране на подавания или пребазиране на клона" -#: sequencer.c:1153 +#: sequencer.c:1613 msgid "cannot resolve HEAD" msgstr "Подаването сочено от указателя „HEAD“ не може да бъде открито" -#: sequencer.c:1155 sequencer.c:1189 +#: sequencer.c:1615 sequencer.c:1649 msgid "cannot abort from a branch yet to be born" msgstr "" "действието не може да бъде преустановено, когато сте на клон, който тепърва " "предстои да бъде създаден" -#: sequencer.c:1175 builtin/grep.c:578 +#: sequencer.c:1635 builtin/grep.c:910 #, c-format msgid "cannot open '%s'" msgstr "„%s“ не може да бъде отворен" -#: sequencer.c:1177 +#: sequencer.c:1637 #, c-format msgid "cannot read '%s': %s" msgstr "„%s“ не може да бъде прочетен: %s" -#: sequencer.c:1178 +#: sequencer.c:1638 msgid "unexpected end of file" msgstr "неочакван край на файл" -#: sequencer.c:1184 +#: sequencer.c:1644 #, c-format msgid "stored pre-cherry-pick HEAD file '%s' is corrupt" msgstr "" "запазеният преди започването на отбирането файл за указателя „HEAD“ — „%s“ е " "повреден" -#: sequencer.c:1354 -#, c-format -msgid "%s: can't cherry-pick a %s" -msgstr "%s: не може да се отбере „%s“" +#: sequencer.c:1655 +msgid "You seem to have moved HEAD. Not rewinding, check your HEAD!" +msgstr "" +"Изглежда указателят „HEAD“ е променен. Проверете към какво сочи.\n" +"Не се правят промени." -#: sequencer.c:1358 +#: sequencer.c:1792 sequencer.c:2080 +msgid "cannot read HEAD" +msgstr "указателят „HEAD“ не може да бъде прочетен" + +#: sequencer.c:1832 builtin/difftool.c:616 #, c-format -msgid "%s: bad revision" -msgstr "%s: неправилна версия" +msgid "could not copy '%s' to '%s'" +msgstr "„%s“ не може да се копира като „%s“" -#: sequencer.c:1391 -msgid "can't revert as initial commit" -msgstr "първоначалното подаване не може да бъде отменено" +#: sequencer.c:1848 +msgid "could not read index" +msgstr "индексът не може да бъде прочетен" -#: setup.c:160 +#: sequencer.c:1853 #, c-format msgid "" -"%s: no such path in the working tree.\n" -"Use 'git -- ...' to specify paths that do not exist locally." +"execution failed: %s\n" +"%sYou can fix the problem, and then run\n" +"\n" +" git rebase --continue\n" +"\n" msgstr "" -"%s: в това работно дърво няма такъв път.\n" -"За да указвате пътища, които локално не съществуват, използвайте:\n" +"неуспешно изпълнение: %s\n" +"%sМоже да коригирате проблема, след което изпълнете:\n" +"\n" +" git rebase --continue\n" "\n" -" git КОМАНДА -- ПЪТ…" -#: setup.c:173 +#: sequencer.c:1859 +msgid "and made changes to the index and/or the working tree\n" +msgstr "и промени индекса и/или работното дърво\n" + +#: sequencer.c:1865 #, c-format msgid "" -"ambiguous argument '%s': unknown revision or path not in the working tree.\n" -"Use '--' to separate paths from revisions, like this:\n" +"execution succeeded: %s\n" +"but left changes to the index and/or the working tree\n" +"Commit or stash your changes, and then run\n" +"\n" +" git rebase --continue\n" +"\n" +msgstr "" +"Успешно изпълнение: %s\n" +"Остават още промени в индекса или работното дърво.\n" +"Трябва да ги подадете или скатаете и след това изпълнете:\n" +"\n" +" git rebase --continue\n" +"\n" + +#: sequencer.c:1920 git-rebase.sh:169 +#, c-format +msgid "Applied autostash." +msgstr "Автоматично скатаното е приложено." + +#: sequencer.c:1932 +#, c-format +msgid "cannot store %s" +msgstr "„%s“ не може да бъде запазен" + +#: sequencer.c:1934 git-rebase.sh:173 +#, c-format +msgid "" +"Applying autostash resulted in conflicts.\n" +"Your changes are safe in the stash.\n" +"You can run \"git stash pop\" or \"git stash drop\" at any time.\n" +msgstr "" +"Прилагането на автоматично скатаното доведе до конфликти. Промените ви са\n" +"надеждно скатани. Можете да пробвате да ги приложите чрез „git stash pop“\n" +"или да ги изхвърлите чрез „git stash drop“, когато поискате.\n" + +#: sequencer.c:2016 +#, c-format +msgid "Stopped at %s... %.*s\n" +msgstr "Спиране при „%s“… %.*s\n" + +#: sequencer.c:2058 +#, c-format +msgid "unknown command %d" +msgstr "непозната команда %d" + +#: sequencer.c:2088 +msgid "could not read orig-head" +msgstr "указателят за „orig-head“ не може да се прочете" + +#: sequencer.c:2092 +msgid "could not read 'onto'" +msgstr "указателят за „onto“ не може да се прочете" + +#: sequencer.c:2099 +#, c-format +msgid "could not update %s" +msgstr "„%s“ не може да се обнови" + +#: sequencer.c:2106 +#, c-format +msgid "could not update HEAD to %s" +msgstr "„HEAD“ не може да бъде обновен до „%s“" + +#: sequencer.c:2190 +msgid "cannot rebase: You have unstaged changes." +msgstr "не може да пребазирате, защото има промени, които не са в индекса." + +#: sequencer.c:2195 +msgid "could not remove CHERRY_PICK_HEAD" +msgstr "указателят „CHERRY_PICK_HEAD“ не може да бъде изтрит" + +#: sequencer.c:2204 +msgid "cannot amend non-existing commit" +msgstr "несъществуващо подаване не може да се поправи" + +#: sequencer.c:2206 +#, c-format +msgid "invalid file: '%s'" +msgstr "неправилен файл: „%s“" + +#: sequencer.c:2208 +#, c-format +msgid "invalid contents: '%s'" +msgstr "неправилно съдържание: „%s“" + +#: sequencer.c:2211 +msgid "" +"\n" +"You have uncommitted changes in your working tree. Please, commit them\n" +"first and then run 'git rebase --continue' again." +msgstr "" +"\n" +"В работното дърво има неподадени промени. Първо ги подайте, а след това\n" +"отново изпълнете „git rebase --continue“." + +#: sequencer.c:2221 +msgid "could not commit staged changes." +msgstr "промените в индекса не могат да бъдат подадени." + +#: sequencer.c:2301 +#, c-format +msgid "%s: can't cherry-pick a %s" +msgstr "%s: не може да се отбере „%s“" + +#: sequencer.c:2305 +#, c-format +msgid "%s: bad revision" +msgstr "%s: неправилна версия" + +#: sequencer.c:2338 +msgid "can't revert as initial commit" +msgstr "първоначалното подаване не може да бъде отменено" + +#: setup.c:165 +#, c-format +msgid "" +"%s: no such path in the working tree.\n" +"Use 'git -- ...' to specify paths that do not exist locally." +msgstr "" +"%s: в това работно дърво няма такъв път.\n" +"За да указвате пътища, които локално не съществуват, използвайте:\n" +"\n" +" git КОМАНДА -- ПЪТ…" + +#: setup.c:178 +#, c-format +msgid "" +"ambiguous argument '%s': unknown revision or path not in the working tree.\n" +"Use '--' to separate paths from revisions, like this:\n" "'git [...] -- [...]'" msgstr "" "нееднозначен аргумент „%s: непозната версия или пътят не е част от работното " "дърво.\n" "Разделяйте пътищата от версиите с „--“, ето така:\n" "\n" -" git КОМАНДА [ВЕРСИЯ…] -- [ФАЙЛ…]" +" git КОМАНДА [ВЕРСИЯ…] -- [ФАЙЛ…]" -#: setup.c:223 +#: setup.c:228 #, c-format msgid "" "ambiguous argument '%s': both revision and filename\n" @@ -3073,33 +3574,38 @@ msgstr "" "нееднозначен аргумент „%s: както версия, така и път.\n" "Разделяйте пътищата от версиите с „--“, ето така:\n" "\n" -" git КОМАНДА [ВЕРСИЯ…] -- [ФАЙЛ…]" +" git КОМАНДА [ВЕРСИЯ…] -- [ФАЙЛ…]" -#: setup.c:468 +#: setup.c:475 #, c-format msgid "Expected git repo version <= %d, found %d" msgstr "Очаква се версия на хранилището на git <= %d, а не %d" -#: setup.c:476 +#: setup.c:483 msgid "unknown repository extensions found:" msgstr "открити са непознати разширения в хранилището:" -#: setup.c:762 +#: setup.c:776 #, c-format msgid "Not a git repository (or any of the parent directories): %s" msgstr "" "Нито тази, нито която и да е от по-горните директории, не е хранилище на " "git: %s" -#: setup.c:764 setup.c:915 builtin/index-pack.c:1641 +#: setup.c:778 builtin/index-pack.c:1646 msgid "Cannot come back to cwd" msgstr "Процесът не може да се върне към предишната работна директория" -#: setup.c:845 +#: setup.c:1010 msgid "Unable to read current working directory" msgstr "Текущата работна директория не може да бъде прочетена" -#: setup.c:920 +#: setup.c:1022 setup.c:1028 +#, c-format +msgid "Cannot change to '%s'" +msgstr "Не може да се влезе в директорията „%s“" + +#: setup.c:1041 #, c-format msgid "" "Not a git repository (or any parent up to mount point %s)\n" @@ -3110,12 +3616,7 @@ msgstr "" "Git работи в рамките на една файлова система, защото променливата на средата " "„GIT_DISCOVERY_ACROSS_FILESYSTEM“ не е зададена." -#: setup.c:927 -#, c-format -msgid "Cannot change to '%s/..'" -msgstr "Не може да се влезе в директорията „%s“" - -#: setup.c:989 +#: setup.c:1106 #, c-format msgid "" "Problem with core.sharedRepository filemode value (0%.3o).\n" @@ -3125,60 +3626,60 @@ msgstr "" "(0%.3o).\n" "Собственикът на файла трябва да има права за писане и четене." -#: sha1_file.c:473 +#: sha1_file.c:559 #, c-format msgid "path '%s' does not exist" msgstr "пътят „%s“ не съществува." -#: sha1_file.c:499 +#: sha1_file.c:585 #, c-format msgid "reference repository '%s' as a linked checkout is not supported yet." msgstr "все още не се поддържа еталонно хранилище „%s“ като свързано." -#: sha1_file.c:505 +#: sha1_file.c:591 #, c-format msgid "reference repository '%s' is not a local repository." msgstr "еталонното хранилище „%s“ не е локално" -#: sha1_file.c:511 +#: sha1_file.c:597 #, c-format msgid "reference repository '%s' is shallow" msgstr "еталонното хранилище „%s“ е плитко" -#: sha1_file.c:519 +#: sha1_file.c:605 #, c-format msgid "reference repository '%s' is grafted" msgstr "еталонното хранилище „%s“ е с присаждане" -#: sha1_file.c:1159 +#: sha1_file.c:1245 msgid "offset before end of packfile (broken .idx?)" msgstr "" "отместване преди края на пакетния файл (възможно е индексът да е повреден)" -#: sha1_file.c:2592 +#: sha1_file.c:2721 #, c-format msgid "offset before start of pack index for %s (corrupt index?)" msgstr "" "отместване преди началото на индекса на пакетния файл „%s“ (възможно е " "индексът да е повреден)" -#: sha1_file.c:2596 +#: sha1_file.c:2725 #, c-format msgid "offset beyond end of pack index for %s (truncated index?)" msgstr "" "отместване преди края на индекса на пакетния файл „%s“ (възможно е индексът " "да е отрязан)" -#: sha1_name.c:407 +#: sha1_name.c:409 #, c-format msgid "short SHA1 %s is ambiguous" msgstr "късият SHA1 „%s“ не е еднозначен" -#: sha1_name.c:418 +#: sha1_name.c:420 msgid "The candidates are:" msgstr "Възможностите са:" -#: sha1_name.c:578 +#: sha1_name.c:580 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" @@ -3202,90 +3703,158 @@ msgstr "" "спрете това съобщение като изпълните командата:\n" "„git config advice.objectNameWarning false“" -#: submodule.c:64 submodule.c:98 +#: submodule.c:67 submodule.c:101 msgid "Cannot change unmerged .gitmodules, resolve merge conflicts first" msgstr "" "Неслетите файлове „.gitmodules“ не могат да бъдат променяни. Първо " "коригирайте конфликтите" -#: submodule.c:68 submodule.c:102 +#: submodule.c:71 submodule.c:105 #, c-format msgid "Could not find section in .gitmodules where path=%s" msgstr "Във файла „.gitmodules“ липсва раздел за директория „path=%s“" -#: submodule.c:76 +#: submodule.c:79 #, c-format msgid "Could not update .gitmodules entry %s" msgstr "Записът „%s“ във файла „.gitmodules“ не може да бъде променен" -#: submodule.c:109 +#: submodule.c:112 #, c-format msgid "Could not remove .gitmodules entry for %s" msgstr "Записът „%s“ във файла „.gitmodules“ не може да бъде изтрит" -#: submodule.c:120 +#: submodule.c:123 msgid "staging updated .gitmodules failed" msgstr "неуспешно добавяне на променения файл „.gitmodules“ в индекса" -#: submodule.c:158 +#: submodule.c:161 msgid "negative values not allowed for submodule.fetchJobs" msgstr "Настройката „submodule.fetchJobs“ не приема отрицателни стойности" -#: submodule-config.c:358 +#: submodule.c:1194 +#, c-format +msgid "'%s' not recognized as a git repository" +msgstr "„%s“ не е хранилище на git" + +#: submodule.c:1332 +#, c-format +msgid "could not start 'git status' in submodule '%s'" +msgstr "командата „git status“ не може да се изпълни в подмодула „%s“" + +#: submodule.c:1345 +#, c-format +msgid "could not run 'git status' in submodule '%s'" +msgstr "командата „git status“ не може да се изпълни в подмодула „%s“" + +#: submodule.c:1421 +#, c-format +msgid "submodule '%s' has dirty index" +msgstr "индексът на подмодула „%s“ не е чист" + +#: submodule.c:1678 +#, c-format +msgid "" +"relocate_gitdir for submodule '%s' with more than one worktree not supported" +msgstr "" +"не се поддържа „relocate_gitdir“ за подмодула „%s“, който има повече от едно " +"работно дърво" + +#: submodule.c:1690 submodule.c:1746 +#, c-format +msgid "could not lookup name for submodule '%s'" +msgstr "името на подмодула „%s“ не може да бъде намерено" + +#: submodule.c:1694 builtin/submodule--helper.c:678 +#: builtin/submodule--helper.c:688 +#, c-format +msgid "could not create directory '%s'" +msgstr "Директорията „%s“ не може да бъде създадена" + +#: submodule.c:1697 +#, c-format +msgid "" +"Migrating git directory of '%s%s' from\n" +"'%s' to\n" +"'%s'\n" +msgstr "" +"Мигриране на директорията на git — „%s%s“ от:\n" +"„%s“ към\n" +"„%s“\n" + +#: submodule.c:1781 +#, c-format +msgid "could not recurse into submodule '%s'" +msgstr "неуспешна обработка на поддиректориите в подмодула „%s“" + +#: submodule.c:1825 +msgid "could not start ls-files in .." +msgstr "„ls-stat“ не може да се стартира в „..“" + +#: submodule.c:1845 +msgid "BUG: returned path string doesn't match cwd?" +msgstr "ГРЕШКА: полученият низ за пътя не съвпада с върнатото от „cwd“" + +#: submodule.c:1864 +#, c-format +msgid "ls-tree returned unexpected return code %d" +msgstr "„ls-tree“ завърши с неочакван изходен код: %d" + +#: submodule-config.c:380 #, c-format msgid "invalid value for %s" msgstr "Неправилна стойност за „%s“" -#: trailer.c:238 +#: trailer.c:240 #, c-format msgid "running trailer command '%s' failed" msgstr "неуспешно изпълнение на завършващата команда „%s“" -#: trailer.c:471 trailer.c:475 trailer.c:479 trailer.c:533 trailer.c:537 -#: trailer.c:541 +#: trailer.c:473 trailer.c:477 trailer.c:481 trailer.c:535 trailer.c:539 +#: trailer.c:543 #, c-format msgid "unknown value '%s' for key '%s'" -msgstr "неправилна стойност „%s“ за настройката „%s“" +msgstr "непозната стойност „%s“ за настройката „%s“" -#: trailer.c:523 trailer.c:528 builtin/remote.c:289 +#: trailer.c:525 trailer.c:530 builtin/remote.c:289 #, c-format msgid "more than one %s" msgstr "стойността „%s“ се повтаря в настройките" -#: trailer.c:672 +#: trailer.c:702 #, c-format msgid "empty trailer token in trailer '%.*s'" msgstr "празна завършваща лексема в епилога „%.*s“" -#: trailer.c:695 +#: trailer.c:722 #, c-format msgid "could not read input file '%s'" msgstr "входният файл „%s“ не може да бъде прочетен" -#: trailer.c:698 +#: trailer.c:725 msgid "could not read from stdin" msgstr "от стандартния вход не може да се чете" -#: trailer.c:929 builtin/am.c:44 +#: trailer.c:949 builtin/am.c:44 #, c-format msgid "could not stat %s" msgstr "Не може да се получи информация чрез „stat“ за „%s“" -#: trailer.c:931 +#: trailer.c:951 #, c-format msgid "file %s is not a regular file" msgstr "„%s“ не е обикновен файл" -#: trailer.c:933 +#: trailer.c:953 #, c-format msgid "file %s is not writable by user" msgstr "„%s“: няма права за записване на файла" -#: trailer.c:945 +#: trailer.c:965 msgid "could not open temporary file" msgstr "временният файл не може да се отвори" -#: trailer.c:983 +#: trailer.c:1001 #, c-format msgid "could not rename temporary file to %s" msgstr "временният файл не може да се преименува на „%s“" @@ -3300,7 +3869,7 @@ msgstr "Клонът „%s“ ще следи „%s“ от „%s“\n" msgid "transport: invalid depth option '%s'" msgstr "transport: неправилна опция за дълбочина: %s" -#: transport.c:817 +#: transport.c:889 #, c-format msgid "" "The following submodule paths contain changes that can\n" @@ -3309,7 +3878,7 @@ msgstr "" "Следните пътища за подмодули съдържат промени,\n" "които липсват от всички отдалечени хранилища:\n" -#: transport.c:821 +#: transport.c:893 #, c-format msgid "" "\n" @@ -3327,18 +3896,18 @@ msgstr "" "\n" "Пробвайте да ги изтласкате чрез командата:\n" "\n" -" git push --recurse-submodules=on-demand\n" +" git push --recurse-submodules=on-demand\n" "\n" "или отидете в съответната директория и изпълнете:\n" "\n" -" git push\n" +" git push\n" "\n" -#: transport.c:829 +#: transport.c:901 msgid "Aborting." msgstr "Преустановяване на действието." -#: transport-helper.c:1075 +#: transport-helper.c:1080 #, c-format msgid "Could not read ref %s" msgstr "Указателят „%s“ не може да се прочете." @@ -3359,7 +3928,7 @@ msgstr "празно име на файл в запис в дърво" msgid "too-short tree file" msgstr "прекалено кратък файл-дърво" -#: unpack-trees.c:64 +#: unpack-trees.c:104 #, c-format msgid "" "Your local changes to the following files would be overwritten by checkout:\n" @@ -3368,7 +3937,7 @@ msgstr "" "Изтеглянето ще презапише локалните промени на тези файлове:\n" "%%sПодайте или скатайте промените, за да преминете към нов клон." -#: unpack-trees.c:66 +#: unpack-trees.c:106 #, c-format msgid "" "Your local changes to the following files would be overwritten by checkout:\n" @@ -3377,7 +3946,7 @@ msgstr "" "Изтеглянето ще презапише локалните промени на тези файлове:\n" "%%s" -#: unpack-trees.c:69 +#: unpack-trees.c:109 #, c-format msgid "" "Your local changes to the following files would be overwritten by merge:\n" @@ -3386,7 +3955,7 @@ msgstr "" "Сливането ще презапише локалните промени на тези файлове:\n" "%%sПодайте или скатайте промените, за да слеете." -#: unpack-trees.c:71 +#: unpack-trees.c:111 #, c-format msgid "" "Your local changes to the following files would be overwritten by merge:\n" @@ -3395,7 +3964,7 @@ msgstr "" "Сливането ще презапише локалните промени на тези файлове:\n" "%%s" -#: unpack-trees.c:74 +#: unpack-trees.c:114 #, c-format msgid "" "Your local changes to the following files would be overwritten by %s:\n" @@ -3404,7 +3973,7 @@ msgstr "" "„%s“ ще презапише локалните промени на тези файлове:\n" "%%sПодайте или скатайте промените, за да извършите „%s“." -#: unpack-trees.c:76 +#: unpack-trees.c:116 #, c-format msgid "" "Your local changes to the following files would be overwritten by %s:\n" @@ -3413,16 +3982,16 @@ msgstr "" "„%s“ ще презапише локалните промени на тези файлове:\n" "%%s" -#: unpack-trees.c:81 +#: unpack-trees.c:121 #, c-format msgid "" -"Updating the following directories would lose untracked files in it:\n" +"Updating the following directories would lose untracked files in them:\n" "%s" msgstr "" -"Обновяването на тези директории ще изтрие неследените файлове в тях:\n" +"Обновяването на следните директории ще изтрие неследените файлове в тях:\n" "%s" -#: unpack-trees.c:85 +#: unpack-trees.c:125 #, c-format msgid "" "The following untracked working tree files would be removed by checkout:\n" @@ -3431,7 +4000,7 @@ msgstr "" "Изтеглянето ще изтрие тези неследени файлове в работното дърво:\n" "%%sПреместете ги или ги изтрийте, за да преминете на друг клон." -#: unpack-trees.c:87 +#: unpack-trees.c:127 #, c-format msgid "" "The following untracked working tree files would be removed by checkout:\n" @@ -3440,7 +4009,7 @@ msgstr "" "Изтеглянето ще изтрие тези неследени файлове в работното дърво:\n" "%%s" -#: unpack-trees.c:90 +#: unpack-trees.c:130 #, c-format msgid "" "The following untracked working tree files would be removed by merge:\n" @@ -3449,7 +4018,7 @@ msgstr "" "Сливането ще изтрие тези неследени файлове в работното дърво:\n" "%%sПреместете ги или ги изтрийте, за да слеете." -#: unpack-trees.c:92 +#: unpack-trees.c:132 #, c-format msgid "" "The following untracked working tree files would be removed by merge:\n" @@ -3458,7 +4027,7 @@ msgstr "" "Сливането ще изтрие тези неследени файлове в работното дърво:\n" "%%s" -#: unpack-trees.c:95 +#: unpack-trees.c:135 #, c-format msgid "" "The following untracked working tree files would be removed by %s:\n" @@ -3467,7 +4036,7 @@ msgstr "" "„%s“ ще изтрие тези неследени файлове в работното дърво:\n" "%%sПреместете ги или ги изтрийте, за да извършите „%s“." -#: unpack-trees.c:97 +#: unpack-trees.c:137 #, c-format msgid "" "The following untracked working tree files would be removed by %s:\n" @@ -3476,7 +4045,7 @@ msgstr "" "„%s“ ще изтрие тези неследени файлове в работното дърво:\n" "%%s" -#: unpack-trees.c:102 +#: unpack-trees.c:142 #, c-format msgid "" "The following untracked working tree files would be overwritten by " @@ -3486,7 +4055,7 @@ msgstr "" "Изтеглянето ще презапише тези неследени файлове в работното дърво:\n" "%%sПреместете ги или ги изтрийте, за да смените клон." -#: unpack-trees.c:104 +#: unpack-trees.c:144 #, c-format msgid "" "The following untracked working tree files would be overwritten by " @@ -3496,7 +4065,7 @@ msgstr "" "Изтеглянето ще презапише тези неследени файлове в работното дърво:\n" "%%s" -#: unpack-trees.c:107 +#: unpack-trees.c:147 #, c-format msgid "" "The following untracked working tree files would be overwritten by merge:\n" @@ -3505,7 +4074,7 @@ msgstr "" "Сливането ще презапише тези неследени файлове в работното дърво:\n" "%%sПреместете ги или ги изтрийте, за да слеете." -#: unpack-trees.c:109 +#: unpack-trees.c:149 #, c-format msgid "" "The following untracked working tree files would be overwritten by merge:\n" @@ -3514,7 +4083,7 @@ msgstr "" "Сливането ще презапише тези неследени файлове в работното дърво:\n" "%%s" -#: unpack-trees.c:112 +#: unpack-trees.c:152 #, c-format msgid "" "The following untracked working tree files would be overwritten by %s:\n" @@ -3523,7 +4092,7 @@ msgstr "" "„%s“ ще презапише тези неследени файлове в работното дърво:\n" "%%sПреместете ги или ги изтрийте, за да извършите „%s“." -#: unpack-trees.c:114 +#: unpack-trees.c:154 #, c-format msgid "" "The following untracked working tree files would be overwritten by %s:\n" @@ -3532,12 +4101,12 @@ msgstr "" "„%s“ ще презапише тези неследени файлове в работното дърво:\n" "%%s" -#: unpack-trees.c:121 +#: unpack-trees.c:161 #, c-format msgid "Entry '%s' overlaps with '%s'. Cannot bind." msgstr "Записът за „%s“ съвпада с този за „%s“. Не може да се присвои." -#: unpack-trees.c:124 +#: unpack-trees.c:164 #, c-format msgid "" "Cannot update sparse checkout: the following entries are not up-to-date:\n" @@ -3547,7 +4116,7 @@ msgstr "" "актуални:\n" "%s" -#: unpack-trees.c:126 +#: unpack-trees.c:166 #, c-format msgid "" "The following working tree files would be overwritten by sparse checkout " @@ -3558,7 +4127,7 @@ msgstr "" "дърво:\n" "%s" -#: unpack-trees.c:128 +#: unpack-trees.c:168 #, c-format msgid "" "The following working tree files would be removed by sparse checkout " @@ -3569,45 +4138,59 @@ msgstr "" "дърво:\n" "%s" -#: unpack-trees.c:205 +#: unpack-trees.c:170 +#, c-format +msgid "" +"Cannot update submodule:\n" +"%s" +msgstr "" +"Подмодулът не може да бъде обновен:\n" +"„%s“" + +#: unpack-trees.c:247 #, c-format msgid "Aborting\n" msgstr "Преустановяване на действието\n" -#: unpack-trees.c:237 +#: unpack-trees.c:272 +#, c-format +msgid "submodule update strategy not supported for submodule '%s'" +msgstr "подмодулът „%s“ не поддържа стратегията за обновяване като подмодул" + +#: unpack-trees.c:340 msgid "Checking out files" msgstr "Изтегляне на файлове" -#: urlmatch.c:120 +#: urlmatch.c:163 msgid "invalid URL scheme name or missing '://' suffix" msgstr "неправилна схема за адрес или суфиксът „://“ липсва" -#: urlmatch.c:144 urlmatch.c:297 urlmatch.c:356 +#: urlmatch.c:187 urlmatch.c:346 urlmatch.c:405 #, c-format msgid "invalid %XX escape sequence" msgstr "неправилна екранираща последователност „%XX“" -#: urlmatch.c:172 +#: urlmatch.c:215 msgid "missing host and scheme is not 'file:'" msgstr "не е указана машина, а схемата не е „file:“" -#: urlmatch.c:189 +#: urlmatch.c:232 msgid "a 'file:' URL may not have a port number" msgstr "при схема „file:“ не можете да указвате номер на порт" -#: urlmatch.c:199 +#: urlmatch.c:247 msgid "invalid characters in host name" msgstr "неправилни знаци в името на машина" -#: urlmatch.c:244 urlmatch.c:255 +#: urlmatch.c:292 urlmatch.c:303 msgid "invalid port number" msgstr "неправилен номер на порт" -#: urlmatch.c:322 +#: urlmatch.c:371 msgid "invalid '..' path segment" msgstr "неправилна част от пътя „..“" -#: worktree.c:282 +#: worktree.c:285 #, c-format msgid "failed to read '%s'" msgstr "„%s“ не може да бъде прочетен" @@ -3622,29 +4205,28 @@ msgstr "„%s“ не може да бъде отворен и за четене msgid "could not open '%s' for writing" msgstr "„%s“ не може да бъде отворен за запис" -#: wrapper.c:226 wrapper.c:396 builtin/am.c:320 builtin/am.c:759 -#: builtin/am.c:847 builtin/commit.c:1705 builtin/merge.c:1029 +#: wrapper.c:226 wrapper.c:396 builtin/am.c:318 builtin/am.c:757 +#: builtin/am.c:849 builtin/commit.c:1700 builtin/merge.c:1015 #: builtin/pull.c:341 #, c-format msgid "could not open '%s' for reading" msgstr "файлът не може да бъде прочетен: „%s“" -#: wrapper.c:605 wrapper.c:626 +#: wrapper.c:581 wrapper.c:602 #, c-format msgid "unable to access '%s'" msgstr "няма достъп до „%s“" -#: wrapper.c:634 +#: wrapper.c:610 msgid "unable to get current working directory" msgstr "текущата работна директория е недостъпна" -# FIXME - must be the same as Could not write to '%s' above -#: wrapper.c:658 +#: wrapper.c:634 #, c-format msgid "could not write to %s" msgstr "„%s“ не може да бъде записан" -#: wrapper.c:660 +#: wrapper.c:636 #, c-format msgid "could not close %s" msgstr "„%s“ не може да се затвори" @@ -3679,11 +4261,11 @@ msgid " (use \"git rm ...\" to mark resolution)" msgstr "" " (използвайте „git rm ФАЙЛ…“, за да укажете разрешаването на конфликта)" -#: wt-status.c:199 wt-status.c:945 +#: wt-status.c:199 wt-status.c:958 msgid "Changes to be committed:" msgstr "Промени, които ще бъдат подадени:" -#: wt-status.c:217 wt-status.c:954 +#: wt-status.c:217 wt-status.c:967 msgid "Changes not staged for commit:" msgstr "Промени, които не са в индекса за подаване:" @@ -3788,15 +4370,15 @@ msgstr "променено съдържание, " msgid "untracked content, " msgstr "неследено съдържание, " -#: wt-status.c:818 +#: wt-status.c:831 msgid "Submodules changed but not updated:" msgstr "Подмодулите са променени, но не са обновени:" -#: wt-status.c:820 +#: wt-status.c:833 msgid "Submodule changes to be committed:" msgstr "Промени в подмодулите за подаване:" -#: wt-status.c:901 +#: wt-status.c:914 msgid "" "Do not touch the line above.\n" "Everything below will be removed." @@ -3804,233 +4386,237 @@ msgstr "" "Не променяйте горния ред.\n" "Всичко отдолу ще бъде изтрито." -#: wt-status.c:1013 +#: wt-status.c:1026 msgid "You have unmerged paths." msgstr "Някои пътища не са слети." -#: wt-status.c:1016 +#: wt-status.c:1029 msgid " (fix conflicts and run \"git commit\")" msgstr " (коригирайте конфликтите и изпълнете „git commit“)" -#: wt-status.c:1018 +#: wt-status.c:1031 msgid " (use \"git merge --abort\" to abort the merge)" msgstr " (използвайте „git merge --abort“, за да преустановите сливането)" -#: wt-status.c:1023 +#: wt-status.c:1036 msgid "All conflicts fixed but you are still merging." msgstr "Всички конфликти са решени, но продължавате сливането." -#: wt-status.c:1026 +#: wt-status.c:1039 msgid " (use \"git commit\" to conclude merge)" msgstr " (използвайте „git commit“, за да завършите сливането)" -#: wt-status.c:1036 +#: wt-status.c:1049 msgid "You are in the middle of an am session." msgstr "В момента прилагате поредица от кръпки чрез „git am“." -#: wt-status.c:1039 +#: wt-status.c:1052 msgid "The current patch is empty." msgstr "Текущата кръпка е празна." -#: wt-status.c:1043 +#: wt-status.c:1056 msgid " (fix conflicts and then run \"git am --continue\")" msgstr " (коригирайте конфликтите и изпълнете „git am --continue“)" -#: wt-status.c:1045 +#: wt-status.c:1058 msgid " (use \"git am --skip\" to skip this patch)" msgstr " (използвайте „git am --skip“, за да пропуснете тази кръпка)" -#: wt-status.c:1047 +#: wt-status.c:1060 msgid " (use \"git am --abort\" to restore the original branch)" msgstr "" " (използвайте „git am --abort“, за да възстановите първоначалния клон)" -#: wt-status.c:1172 +#: wt-status.c:1189 +msgid "git-rebase-todo is missing." +msgstr "„git-rebase-todo“ липсва." + +#: wt-status.c:1191 msgid "No commands done." msgstr "Не са изпълнени команди." -#: wt-status.c:1175 +#: wt-status.c:1194 #, 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:1186 +#: wt-status.c:1205 #, c-format msgid " (see more in file %s)" msgstr " повече информация има във файла „%s“)" -#: wt-status.c:1191 +#: wt-status.c:1210 msgid "No commands remaining." msgstr "Не остават повече команди." -#: wt-status.c:1194 +#: wt-status.c:1213 #, 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:1202 +#: wt-status.c:1221 msgid " (use \"git rebase --edit-todo\" to view and edit)" msgstr "" " (използвайте „git rebase --edit-todo“, за да разгледате и редактирате)" -#: wt-status.c:1215 +#: wt-status.c:1234 #, c-format msgid "You are currently rebasing branch '%s' on '%s'." msgstr "В момента пребазирате клона „%s“ върху „%s“." -#: wt-status.c:1220 +#: wt-status.c:1239 msgid "You are currently rebasing." msgstr "В момента пребазирате." -#: wt-status.c:1234 +#: wt-status.c:1253 msgid " (fix conflicts and then run \"git rebase --continue\")" msgstr " (коригирайте конфликтите и използвайте „git rebase --continue“)" -#: wt-status.c:1236 +#: wt-status.c:1255 msgid " (use \"git rebase --skip\" to skip this patch)" msgstr " (използвайте „git rebase --skip“, за да пропуснете тази кръпка)" -#: wt-status.c:1238 +#: wt-status.c:1257 msgid " (use \"git rebase --abort\" to check out the original branch)" msgstr "" " (използвайте „git rebase --abort“, за да възстановите първоначалния клон)" -#: wt-status.c:1244 +#: wt-status.c:1263 msgid " (all conflicts fixed: run \"git rebase --continue\")" msgstr " (всички конфликти са коригирани: изпълнете „git rebase --continue“)" -#: wt-status.c:1248 +#: wt-status.c:1267 #, c-format msgid "" "You are currently splitting a commit while rebasing branch '%s' on '%s'." msgstr "В момента разделяте подаване докато пребазирате клона „%s“ върху „%s“." -#: wt-status.c:1253 +#: wt-status.c:1272 msgid "You are currently splitting a commit during a rebase." msgstr "В момента разделяте подаване докато пребазирате." -#: wt-status.c:1256 +#: wt-status.c:1275 msgid " (Once your working directory is clean, run \"git rebase --continue\")" msgstr "" " (След като работното ви дърво стане чисто, използвайте „git rebase --" "continue“)" -#: wt-status.c:1260 +#: wt-status.c:1279 #, c-format msgid "You are currently editing a commit while rebasing branch '%s' on '%s'." msgstr "" "В момента редактирате подаване докато пребазирате клона „%s“ върху „%s“." -#: wt-status.c:1265 +#: wt-status.c:1284 msgid "You are currently editing a commit during a rebase." msgstr "В момента редактирате подаване докато пребазирате." -#: wt-status.c:1268 +#: wt-status.c:1287 msgid " (use \"git commit --amend\" to amend the current commit)" msgstr "" " (използвайте „git commit --amend“, за да редактирате текущото подаване)" -#: wt-status.c:1270 +#: wt-status.c:1289 msgid "" " (use \"git rebase --continue\" once you are satisfied with your changes)" msgstr "" " (използвайте „git rebase --continue“, след като завършите промените си)" -#: wt-status.c:1280 +#: wt-status.c:1299 #, c-format msgid "You are currently cherry-picking commit %s." msgstr "В момента отбирате подаването „%s“." -#: wt-status.c:1285 +#: wt-status.c:1304 msgid " (fix conflicts and run \"git cherry-pick --continue\")" msgstr " (коригирайте конфликтите и изпълнете „git cherry-pick --continue“)" -#: wt-status.c:1288 +#: wt-status.c:1307 msgid " (all conflicts fixed: run \"git cherry-pick --continue\")" msgstr "" " (всички конфликти са коригирани, изпълнете „git cherry-pick --continue“)" -#: wt-status.c:1290 +#: wt-status.c:1309 msgid " (use \"git cherry-pick --abort\" to cancel the cherry-pick operation)" msgstr "" " (използвайте „git cherry-pick --abort“, за да отмените всички действия с " "отбиране)" -#: wt-status.c:1299 +#: wt-status.c:1318 #, c-format msgid "You are currently reverting commit %s." msgstr "В момента отменяте подаване „%s“." -#: wt-status.c:1304 +#: wt-status.c:1323 msgid " (fix conflicts and run \"git revert --continue\")" msgstr " (коригирайте конфликтите и изпълнете „git revert --continue“)" -#: wt-status.c:1307 +#: wt-status.c:1326 msgid " (all conflicts fixed: run \"git revert --continue\")" msgstr " (всички конфликти са коригирани, изпълнете „git revert --continue“)" -#: wt-status.c:1309 +#: wt-status.c:1328 msgid " (use \"git revert --abort\" to cancel the revert operation)" msgstr "" " (използвайте „git revert --abort“, за да преустановите отмяната на " "подаване)" -#: wt-status.c:1320 +#: wt-status.c:1339 #, c-format msgid "You are currently bisecting, started from branch '%s'." msgstr "В момента търсите двоично, като сте стартирали от клон „%s“." -#: wt-status.c:1324 +#: wt-status.c:1343 msgid "You are currently bisecting." msgstr "В момента търсите двоично." -#: wt-status.c:1327 +#: wt-status.c:1346 msgid " (use \"git bisect reset\" to get back to the original branch)" msgstr "" " (използвайте „git bisect reset“, за да се върнете към първоначалното " "състояние и клон)" -#: wt-status.c:1524 +#: wt-status.c:1543 msgid "On branch " msgstr "На клон " -#: wt-status.c:1530 +#: wt-status.c:1549 msgid "interactive rebase in progress; onto " msgstr "извършвате интерактивно пребазиране върху " -#: wt-status.c:1532 +#: wt-status.c:1551 msgid "rebase in progress; onto " msgstr "извършвате пребазиране върху " -#: wt-status.c:1537 +#: wt-status.c:1556 msgid "HEAD detached at " msgstr "Указателят „HEAD“ не е свързан и е при " -#: wt-status.c:1539 +#: wt-status.c:1558 msgid "HEAD detached from " msgstr "Указателят „HEAD“ не е свързан и е отделѐн от " -#: wt-status.c:1542 +#: wt-status.c:1561 msgid "Not currently on any branch." msgstr "Извън всички клони." -#: wt-status.c:1560 +#: wt-status.c:1579 msgid "Initial commit" msgstr "Първоначално подаване" -#: wt-status.c:1574 +#: wt-status.c:1593 msgid "Untracked files" msgstr "Неследени файлове" -#: wt-status.c:1576 +#: wt-status.c:1595 msgid "Ignored files" msgstr "Игнорирани файлове" -#: wt-status.c:1580 +#: wt-status.c:1599 #, c-format msgid "" "It took %.2f seconds to enumerate untracked files. 'status -uno'\n" @@ -4042,32 +4628,32 @@ msgstr "" "изпълнението, но не трябва да забравяте ръчно да добавяте новите файлове.\n" "За повече подробности погледнете „git status help“." -#: wt-status.c:1586 +#: wt-status.c:1605 #, c-format msgid "Untracked files not listed%s" msgstr "Неследените файлове не са изведени%s" -#: wt-status.c:1588 +#: wt-status.c:1607 msgid " (use -u option to show untracked files)" msgstr " (използвайте опцията „-u“, за да изведете неследените файлове)" -#: wt-status.c:1594 +#: wt-status.c:1613 msgid "No changes" msgstr "Няма промени" -#: wt-status.c:1599 +#: wt-status.c:1618 #, 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:1602 +#: wt-status.c:1621 #, c-format msgid "no changes added to commit\n" msgstr "към индекса за подаване не са добавени промени\n" -#: wt-status.c:1605 +#: wt-status.c:1624 #, c-format msgid "" "nothing added to commit but untracked files present (use \"git add\" to " @@ -4076,71 +4662,67 @@ msgstr "" "към индекса за подаване не са добавени промени, но има нови файлове " "(използвайте „git add“, за да започне тяхното следене)\n" -#: wt-status.c:1608 +#: wt-status.c:1627 #, c-format msgid "nothing added to commit but untracked files present\n" msgstr "към индекса за подаване не са добавени промени, но има нови файлове\n" -#: wt-status.c:1611 +#: wt-status.c:1630 #, c-format msgid "nothing to commit (create/copy files and use \"git add\" to track)\n" msgstr "" "липсват каквито и да е промени (създайте или копирайте файлове и използвайте " "„git add“, за да започне тяхното следене)\n" -#: wt-status.c:1614 wt-status.c:1619 +#: wt-status.c:1633 wt-status.c:1638 #, c-format msgid "nothing to commit\n" msgstr "липсват каквито и да е промени\n" -#: wt-status.c:1617 +#: wt-status.c:1636 #, c-format msgid "nothing to commit (use -u to show untracked files)\n" msgstr "" "липсват каквито и да е промени (използвайте опцията „-u“, за да се изведат и " "неследените файлове)\n" -#: wt-status.c:1621 +#: wt-status.c:1640 #, c-format msgid "nothing to commit, working tree clean\n" msgstr "липсват каквито и да е промени, работното дърво е чисто\n" -#: wt-status.c:1728 +#: wt-status.c:1749 msgid "Initial commit on " msgstr "Първоначално подаване на клон" -#: wt-status.c:1732 +#: wt-status.c:1753 msgid "HEAD (no branch)" msgstr "HEAD (извън клон)" -#: wt-status.c:1761 -msgid "gone" -msgstr "изтрит" - -#: wt-status.c:1763 wt-status.c:1771 +#: wt-status.c:1782 wt-status.c:1790 msgid "behind " msgstr "назад с " -#: wt-status.c:1766 wt-status.c:1769 +#: wt-status.c:1785 wt-status.c:1788 msgid "ahead " msgstr "напред с " #. TRANSLATORS: the action is e.g. "pull with rebase" -#: wt-status.c:2270 +#: wt-status.c:2280 #, c-format msgid "cannot %s: You have unstaged changes." msgstr "не може да извършите „%s“, защото има промени, които не са в индекса." -#: wt-status.c:2276 +#: wt-status.c:2286 msgid "additionally, your index contains uncommitted changes." msgstr "освен това в индекса има неподадени промени." -#: wt-status.c:2278 +#: wt-status.c:2288 #, c-format msgid "cannot %s: Your index contains uncommitted changes." msgstr "не може да извършите „%s“, защото в индекса има неподадени промени." -#: compat/precompose_utf8.c:57 builtin/clone.c:414 +#: compat/precompose_utf8.c:57 builtin/clone.c:432 #, c-format msgid "failed to unlink '%s'" msgstr "неуспешно изтриване на „%s“" @@ -4167,7 +4749,7 @@ msgstr "изтриване на „%s“\n" msgid "Unstaged changes after refreshing the index:" msgstr "Промени, които и след обновяването на индекса не са добавени към него:" -#: builtin/add.c:209 builtin/rev-parse.c:840 +#: builtin/add.c:209 builtin/rev-parse.c:872 msgid "Could not read the index" msgstr "Индексът не може да бъде прочетен" @@ -4203,9 +4785,9 @@ msgid "The following paths are ignored by one of your .gitignore files:\n" msgstr "" "Следните пътища ще бъдат игнорирани според някой от файловете „.gitignore“:\n" -#: builtin/add.c:266 builtin/clean.c:870 builtin/fetch.c:115 builtin/mv.c:111 -#: builtin/prune-packed.c:55 builtin/pull.c:198 builtin/push.c:521 -#: builtin/remote.c:1326 builtin/rm.c:268 builtin/send-pack.c:162 +#: builtin/add.c:266 builtin/clean.c:876 builtin/fetch.c:115 builtin/mv.c:123 +#: builtin/prune-packed.c:55 builtin/pull.c:198 builtin/push.c:524 +#: builtin/remote.c:1328 builtin/rm.c:241 builtin/send-pack.c:163 msgid "dry run" msgstr "пробно изпълнение" @@ -4213,7 +4795,7 @@ msgstr "пробно изпълнение" msgid "interactive picking" msgstr "интерактивно отбиране на промени" -#: builtin/add.c:270 builtin/checkout.c:1156 builtin/reset.c:286 +#: builtin/add.c:270 builtin/checkout.c:1177 builtin/reset.c:286 msgid "select hunks interactively" msgstr "интерактивен избор на парчета код" @@ -4258,11 +4840,11 @@ msgstr "" "проверка, че при пробно изпълнение всички файлове, дори и изтритите, се " "игнорират" -#: builtin/add.c:283 builtin/update-index.c:947 +#: builtin/add.c:283 builtin/update-index.c:951 msgid "(+/-)x" msgstr "(+/-)x" -#: builtin/add.c:283 builtin/update-index.c:948 +#: builtin/add.c:283 builtin/update-index.c:952 msgid "override the executable bit of the listed files" msgstr "изрично задаване на стойността на флага дали файлът е изпълним" @@ -4298,115 +4880,115 @@ msgstr "Нищо не е зададено и нищо не е добавено.\ msgid "Maybe you wanted to say 'git add .'?\n" msgstr "Вероятно искахте да използвате „git add .“?\n" -#: builtin/add.c:380 builtin/check-ignore.c:172 builtin/checkout.c:279 -#: builtin/checkout.c:472 builtin/clean.c:914 builtin/commit.c:350 -#: builtin/mv.c:131 builtin/reset.c:235 builtin/rm.c:298 +#: builtin/add.c:380 builtin/check-ignore.c:172 builtin/checkout.c:298 +#: builtin/checkout.c:491 builtin/clean.c:920 builtin/commit.c:350 +#: builtin/mv.c:143 builtin/reset.c:235 builtin/rm.c:271 #: builtin/submodule--helper.c:244 msgid "index file corrupt" msgstr "файлът с индекса е повреден" -#: builtin/am.c:414 +#: builtin/am.c:412 msgid "could not parse author script" msgstr "скриптът за автор не може да се анализира" -#: builtin/am.c:491 +#: builtin/am.c:489 #, c-format msgid "'%s' was deleted by the applypatch-msg hook" msgstr "„%s“ бе изтрит от куката „applypatch-msg“" -#: builtin/am.c:532 +#: builtin/am.c:530 #, c-format msgid "Malformed input line: '%s'." msgstr "Даденият входен ред е с неправилен формат: „%s“." -#: builtin/am.c:569 +#: builtin/am.c:567 #, c-format msgid "Failed to copy notes from '%s' to '%s'" msgstr "Бележката не може да се копира от „%s“ към „%s“" -#: builtin/am.c:595 +#: builtin/am.c:593 msgid "fseek failed" msgstr "неуспешно изпълнение на „fseek“" -#: builtin/am.c:775 +#: builtin/am.c:777 #, c-format msgid "could not parse patch '%s'" msgstr "кръпката „%s“ не може да се анализира" -#: builtin/am.c:840 +#: builtin/am.c:842 msgid "Only one StGIT patch series can be applied at once" msgstr "" "Само една серия кръпки от „StGIT“ може да бъде прилагана в даден момент" -#: builtin/am.c:887 +#: builtin/am.c:889 msgid "invalid timestamp" msgstr "неправилна стойност за време" -#: builtin/am.c:890 builtin/am.c:898 +#: builtin/am.c:892 builtin/am.c:900 msgid "invalid Date line" msgstr "неправилен ред за дата „Date“" -#: builtin/am.c:895 +#: builtin/am.c:897 msgid "invalid timezone offset" msgstr "неправилно отместване на часовия пояс" -#: builtin/am.c:984 +#: builtin/am.c:986 msgid "Patch format detection failed." msgstr "Форматът на кръпката не може да бъде определен." -#: builtin/am.c:989 builtin/clone.c:379 +#: builtin/am.c:991 builtin/clone.c:397 #, c-format msgid "failed to create directory '%s'" msgstr "директорията „%s“ не може да бъде създадена" -#: builtin/am.c:993 +#: builtin/am.c:995 msgid "Failed to split patches." msgstr "Кръпките не могат да бъдат разделени." -#: builtin/am.c:1125 builtin/commit.c:376 +#: builtin/am.c:1127 builtin/commit.c:376 msgid "unable to write index file" msgstr "индексът не може да бъде записан" -#: builtin/am.c:1176 +#: builtin/am.c:1178 #, c-format msgid "When you have resolved this problem, run \"%s --continue\"." msgstr "След коригирането на този проблем изпълнете „%s --continue“." -#: builtin/am.c:1177 +#: builtin/am.c:1179 #, c-format msgid "If you prefer to skip this patch, run \"%s --skip\" instead." msgstr "Ако предпочитате да прескочите тази кръпка, изпълнете „%s --skip“." -#: builtin/am.c:1178 +#: builtin/am.c:1180 #, c-format msgid "To restore the original branch and stop patching, run \"%s --abort\"." msgstr "За да се върнете към първоначалното състояние, изпълнете „%s --abort“." -#: builtin/am.c:1316 +#: builtin/am.c:1315 msgid "Patch is empty. Was it split wrong?" msgstr "Празна кръпка. Дали не е разделена погрешно?" -#: builtin/am.c:1390 builtin/log.c:1550 +#: builtin/am.c:1386 builtin/log.c:1557 #, c-format msgid "invalid ident line: %s" msgstr "грешна идентичност: %s" -#: builtin/am.c:1417 +#: builtin/am.c:1413 #, c-format msgid "unable to parse commit %s" msgstr "подаването не може да бъде анализирано: %s" -#: builtin/am.c:1610 +#: builtin/am.c:1606 msgid "Repository lacks necessary blobs to fall back on 3-way merge." msgstr "" "В хранилището липсват необходимите обекти BLOB, за да се премине към тройно " "сливане." -#: builtin/am.c:1612 +#: builtin/am.c:1608 msgid "Using index info to reconstruct a base tree..." msgstr "Базовото дърво се реконструира от информацията в индекса…" -#: builtin/am.c:1631 +#: builtin/am.c:1627 msgid "" "Did you hand edit your patch?\n" "It does not apply to blobs recorded in its index." @@ -4414,39 +4996,39 @@ msgstr "" "Кръпката не може да се приложи към обектите BLOB в индекса.\n" "Да не би да сте я редактирали на ръка?" -#: builtin/am.c:1637 +#: builtin/am.c:1633 msgid "Falling back to patching base and 3-way merge..." msgstr "Преминаване към прилагане на кръпка към базата и тройно сливане…" -#: builtin/am.c:1662 +#: builtin/am.c:1658 msgid "Failed to merge in the changes." msgstr "Неуспешно сливане на промените." -#: builtin/am.c:1686 builtin/merge.c:628 +#: builtin/am.c:1682 builtin/merge.c:631 msgid "git write-tree failed to write a tree" msgstr "Командата „git write-tree“ не успя да запише обект-дърво" -#: builtin/am.c:1693 +#: builtin/am.c:1689 msgid "applying to an empty history" msgstr "прилагане върху празна история" -#: builtin/am.c:1706 builtin/commit.c:1769 builtin/merge.c:798 -#: builtin/merge.c:823 +#: builtin/am.c:1702 builtin/commit.c:1764 builtin/merge.c:802 +#: builtin/merge.c:827 msgid "failed to write commit object" msgstr "обектът за подаването не може да бъде записан" -#: builtin/am.c:1739 builtin/am.c:1743 +#: builtin/am.c:1735 builtin/am.c:1739 #, c-format msgid "cannot resume: %s does not exist." msgstr "не може да се продължи — „%s“ не съществува." -#: builtin/am.c:1759 +#: builtin/am.c:1755 msgid "cannot be interactive without stdin connected to a terminal." msgstr "" "За интерактивно изпълнение е необходимо стандартният\n" "изход да е свързан с терминал, а в момента не е." -#: builtin/am.c:1764 +#: builtin/am.c:1760 msgid "Commit Body is:" msgstr "Тялото на кръпката за прилагане е:" @@ -4454,38 +5036,38 @@ msgstr "Тялото на кръпката за прилагане е:" #. in your translation. The program will only accept English #. input at this point. #. -#: builtin/am.c:1774 +#: builtin/am.c:1770 msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: " msgstr "" "Прилагане? „y“ — да/„n“ — не/„e“ — редактиране/„v“ — преглед/„a“ — приемане " "на всичко:" -#: builtin/am.c:1824 +#: builtin/am.c:1820 #, c-format msgid "Dirty index: cannot apply patches (dirty: %s)" msgstr "" "Индексът не е чист: кръпките не могат да бъдат приложени (замърсени са: %s)" -#: builtin/am.c:1861 builtin/am.c:1933 +#: builtin/am.c:1860 builtin/am.c:1932 #, c-format msgid "Applying: %.*s" msgstr "Прилагане: %.*s" -#: builtin/am.c:1877 +#: builtin/am.c:1876 msgid "No changes -- Patch already applied." msgstr "Без промени — кръпката вече е приложена." -#: builtin/am.c:1885 +#: builtin/am.c:1884 #, c-format msgid "Patch failed at %s %.*s" msgstr "Неуспешно прилагане на кръпка при %s %.*s“" -#: builtin/am.c:1891 +#: builtin/am.c:1890 #, c-format msgid "The copy of the patch that failed is found in: %s" msgstr "Дубликат на проблемната кръпка се намира в: %s" -#: builtin/am.c:1936 +#: builtin/am.c:1935 msgid "" "No changes - did you forget to use 'git add'?\n" "If there is nothing left to stage, chances are that something else\n" @@ -4495,7 +5077,7 @@ msgstr "" "Ако няма друга промяна за включване в индекса, най-вероятно някоя друга\n" "кръпка е довела до същите промени и в такъв случай просто пропуснете тази." -#: builtin/am.c:1943 +#: builtin/am.c:1942 msgid "" "You still have unmerged paths in your index.\n" "Did you forget to use 'git add'?" @@ -4503,17 +5085,17 @@ msgstr "" "Индексът все още съдържа неслети промени.\n" "Възможно е да не сте изпълнили „git add“." -#: builtin/am.c:2051 builtin/am.c:2055 builtin/am.c:2067 builtin/reset.c:308 +#: builtin/am.c:2050 builtin/am.c:2054 builtin/am.c:2066 builtin/reset.c:308 #: builtin/reset.c:316 #, c-format msgid "Could not parse object '%s'." msgstr "„%s“ не е разпознат като обект." -#: builtin/am.c:2103 +#: builtin/am.c:2102 msgid "failed to clean index" msgstr "индексът не може да бъде изчистен" -#: builtin/am.c:2137 +#: builtin/am.c:2136 msgid "" "You seem to have moved HEAD since the last 'am' failure.\n" "Not rewinding to ORIG_HEAD" @@ -4524,138 +5106,138 @@ msgstr "" "сочи към\n" "„ORIG_HEAD“" -#: builtin/am.c:2200 +#: builtin/am.c:2199 #, c-format msgid "Invalid value for --patch-format: %s" msgstr "Неправилна стойност за „--patch-format“: „%s“" -#: builtin/am.c:2233 +#: builtin/am.c:2232 msgid "git am [] [( | )...]" msgstr "git am [ОПЦИЯ…] [(ФАЙЛ_С_ПОЩА|ДИРЕКТОРИЯ_С_ПОЩА)…]" -#: builtin/am.c:2234 +#: builtin/am.c:2233 msgid "git am [] (--continue | --skip | --abort)" msgstr "git am [ОПЦИЯ…] (--continue | --quit | --abort)" -#: builtin/am.c:2240 +#: builtin/am.c:2239 msgid "run interactively" msgstr "интерактивна работа" -#: builtin/am.c:2242 +#: builtin/am.c:2241 msgid "historical option -- no-op" msgstr "изоставена опция, съществува по исторически причини, нищо не прави" -#: builtin/am.c:2244 +#: builtin/am.c:2243 msgid "allow fall back on 3way merging if needed" msgstr "да се преминава към тройно сливане при нужда." -#: builtin/am.c:2245 builtin/init-db.c:483 builtin/prune-packed.c:57 -#: builtin/repack.c:172 +#: builtin/am.c:2244 builtin/init-db.c:483 builtin/prune-packed.c:57 +#: builtin/repack.c:178 msgid "be quiet" msgstr "без извеждане на информация" -#: builtin/am.c:2247 +#: builtin/am.c:2246 msgid "add a Signed-off-by line to the commit message" msgstr "добавяне на ред за подпис „Signed-off-by“ в съобщението за подаване" -#: builtin/am.c:2250 +#: builtin/am.c:2249 msgid "recode into utf8 (default)" msgstr "прекодиране в UTF-8 (стандартно)" -#: builtin/am.c:2252 +#: builtin/am.c:2251 msgid "pass -k flag to git-mailinfo" msgstr "подаване на опцията „-k“ на командата „git-mailinfo“" -#: builtin/am.c:2254 +#: builtin/am.c:2253 msgid "pass -b flag to git-mailinfo" msgstr "подаване на опцията „-b“ на командата „git-mailinfo“" -#: builtin/am.c:2256 +#: builtin/am.c:2255 msgid "pass -m flag to git-mailinfo" msgstr "подаване на опцията „-m“ на командата „git-mailinfo“" -#: builtin/am.c:2258 +#: builtin/am.c:2257 msgid "pass --keep-cr flag to git-mailsplit for mbox format" msgstr "" "подаване на опцията „--keep-cr“ на командата „git-mailsplit“ за формат „mbox“" -#: builtin/am.c:2261 +#: builtin/am.c:2260 msgid "do not pass --keep-cr flag to git-mailsplit independent of am.keepcr" msgstr "" "без подаване на опцията „--keep-cr“ на командата „git-mailsplit“ независимо " "от „am.keepcr“" -#: builtin/am.c:2264 +#: builtin/am.c:2263 msgid "strip everything before a scissors line" msgstr "пропускане на всичко преди реда за отрязване" -#: builtin/am.c:2266 builtin/am.c:2269 builtin/am.c:2272 builtin/am.c:2275 -#: builtin/am.c:2278 builtin/am.c:2281 builtin/am.c:2284 builtin/am.c:2287 -#: builtin/am.c:2293 +#: builtin/am.c:2265 builtin/am.c:2268 builtin/am.c:2271 builtin/am.c:2274 +#: builtin/am.c:2277 builtin/am.c:2280 builtin/am.c:2283 builtin/am.c:2286 +#: builtin/am.c:2292 msgid "pass it through git-apply" msgstr "прекарване през „git-apply“" -#: builtin/am.c:2283 builtin/fmt-merge-msg.c:662 builtin/fmt-merge-msg.c:665 -#: builtin/grep.c:707 builtin/merge.c:200 builtin/pull.c:135 builtin/pull.c:194 -#: builtin/repack.c:181 builtin/repack.c:185 builtin/show-branch.c:644 -#: builtin/show-ref.c:175 builtin/tag.c:340 parse-options.h:132 -#: parse-options.h:134 parse-options.h:245 +#: builtin/am.c:2282 builtin/fmt-merge-msg.c:662 builtin/fmt-merge-msg.c:665 +#: builtin/grep.c:1045 builtin/merge.c:201 builtin/pull.c:135 +#: builtin/pull.c:194 builtin/repack.c:187 builtin/repack.c:191 +#: builtin/show-branch.c:637 builtin/show-ref.c:169 builtin/tag.c:398 +#: parse-options.h:132 parse-options.h:134 parse-options.h:245 msgid "n" msgstr "БРОЙ" -#: builtin/am.c:2289 builtin/for-each-ref.c:37 builtin/replace.c:438 -#: builtin/tag.c:372 +#: builtin/am.c:2288 builtin/branch.c:592 builtin/for-each-ref.c:37 +#: builtin/replace.c:443 builtin/tag.c:433 builtin/verify-tag.c:38 msgid "format" msgstr "ФОРМАТ" -#: builtin/am.c:2290 +#: builtin/am.c:2289 msgid "format the patch(es) are in" msgstr "формат на кръпките" -#: builtin/am.c:2296 +#: builtin/am.c:2295 msgid "override error message when patch failure occurs" msgstr "избрано от вас съобщение за грешка при прилагане на кръпки" -#: builtin/am.c:2298 +#: builtin/am.c:2297 msgid "continue applying patches after resolving a conflict" msgstr "продължаване на прилагането на кръпки след коригирането на конфликт" -#: builtin/am.c:2301 +#: builtin/am.c:2300 msgid "synonyms for --continue" msgstr "синоними на „--continue“" -#: builtin/am.c:2304 +#: builtin/am.c:2303 msgid "skip the current patch" msgstr "прескачане на текущата кръпка" -#: builtin/am.c:2307 +#: builtin/am.c:2306 msgid "restore the original branch and abort the patching operation." msgstr "" "възстановяване на първоначалното състояние на клона и преустановяване на " "прилагането на кръпката." -#: builtin/am.c:2311 +#: builtin/am.c:2310 msgid "lie about committer date" msgstr "дата за подаване различна от първоначалната" -#: builtin/am.c:2313 +#: builtin/am.c:2312 msgid "use current timestamp for author date" msgstr "използване на текущото време като това за автор" -#: builtin/am.c:2315 builtin/commit.c:1605 builtin/merge.c:229 -#: builtin/pull.c:165 builtin/revert.c:92 builtin/tag.c:355 +#: builtin/am.c:2314 builtin/commit.c:1600 builtin/merge.c:232 +#: builtin/pull.c:165 builtin/revert.c:111 builtin/tag.c:413 msgid "key-id" msgstr "ИДЕНТИФИКАТОР_НА_КЛЮЧ" -#: builtin/am.c:2316 +#: builtin/am.c:2315 msgid "GPG-sign commits" msgstr "подписване на подаванията с GPG" -#: builtin/am.c:2319 +#: builtin/am.c:2318 msgid "(internal use for git-rebase)" msgstr "(ползва се вътрешно за „git-rebase“)" -#: builtin/am.c:2334 +#: builtin/am.c:2333 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." @@ -4663,18 +5245,18 @@ msgstr "" "Опциите „-b“/„--binary“ отдавна не правят нищо и\n" "ще бъдат премахнати в бъдеще. Не ги ползвайте." -#: builtin/am.c:2341 +#: builtin/am.c:2340 msgid "failed to read the index" msgstr "неуспешно изчитане на индекса" -#: builtin/am.c:2356 +#: builtin/am.c:2355 #, c-format msgid "previous rebase directory %s still exists but mbox given." msgstr "" "предишната директория за пребазиране „%s“ все още съществува, а е зададен " "файл „mbox“." -#: builtin/am.c:2380 +#: builtin/am.c:2379 #, c-format msgid "" "Stray %s directory found.\n" @@ -4683,7 +5265,7 @@ msgstr "" "Открита е излишна директория „%s“.\n" "Можете да я изтриете с командата „git am --abort“." -#: builtin/am.c:2386 +#: builtin/am.c:2385 msgid "Resolve operation not in progress, we are not resuming." msgstr "В момента не тече операция по коригиране и няма как да се продължи." @@ -4713,11 +5295,6 @@ msgstr "git archive: очакваше се „ACK“/„NAK“, а бе полу msgid "git archive: NACK %s" msgstr "git archive: получен е „NACK“ — %s" -#: builtin/archive.c:63 -#, c-format -msgid "remote error: %s" -msgstr "отдалечена грешка: %s" - #: builtin/archive.c:64 msgid "git archive: protocol error" msgstr "git archive: протоколна грешка" @@ -4747,135 +5324,129 @@ msgstr "git blame [ОПЦИЯ…] [ОПЦИЯ_ЗА_ВЕРСИЯТА…] [ВЕР msgid " are documented in git-rev-list(1)" msgstr "ОПЦИИте_ЗА_ВЕРСИЯТА са документирани в ръководството git-rev-list(1)" -#: builtin/blame.c:1781 +#: builtin/blame.c:1777 msgid "Blaming lines" msgstr "Анотирани редове" -#: builtin/blame.c:2577 +#: builtin/blame.c:2573 msgid "Show blame entries as we find them, incrementally" msgstr "Извеждане на анотациите с намирането им, последователно" -#: builtin/blame.c:2578 +#: builtin/blame.c:2574 msgid "Show blank SHA-1 for boundary commits (Default: off)" msgstr "" "Извеждане на празни суми по SHA1 за граничните подавания (стандартно опцията " "е изключена)" -#: builtin/blame.c:2579 +#: builtin/blame.c:2575 msgid "Do not treat root commits as boundaries (Default: off)" msgstr "" "Началните подавания да не се считат за гранични (стандартно опцията е " "изключена)" -#: builtin/blame.c:2580 +#: builtin/blame.c:2576 msgid "Show work cost statistics" msgstr "Извеждане на статистика за извършените действия" -#: builtin/blame.c:2581 +#: builtin/blame.c:2577 msgid "Force progress reporting" msgstr "Принудително извеждане на напредъка" -#: builtin/blame.c:2582 +#: builtin/blame.c:2578 msgid "Show output score for blame entries" msgstr "Извеждане на допълнителна информация за определянето на анотациите" -#: builtin/blame.c:2583 +#: builtin/blame.c:2579 msgid "Show original filename (Default: auto)" msgstr "" "Извеждане на първоначалното име на файл (стандартно това е автоматично)" -#: builtin/blame.c:2584 +#: builtin/blame.c:2580 msgid "Show original linenumber (Default: off)" msgstr "" "Извеждане на първоначалният номер на ред (стандартно опцията е изключена)" -#: builtin/blame.c:2585 +#: builtin/blame.c:2581 msgid "Show in a format designed for machine consumption" msgstr "Извеждане във формат за по-нататъшна обработка" -#: builtin/blame.c:2586 +#: builtin/blame.c:2582 msgid "Show porcelain format with per-line commit information" msgstr "" "Извеждане във формат за команди от потребителско ниво с информация на всеки " "ред" -#: builtin/blame.c:2587 +#: builtin/blame.c:2583 msgid "Use the same output mode as git-annotate (Default: off)" msgstr "" "Използване на същия формат като „git-annotate“ (стандартно опцията е " "изключена)" -#: builtin/blame.c:2588 +#: builtin/blame.c:2584 msgid "Show raw timestamp (Default: off)" msgstr "Извеждане на неформатирани времена (стандартно опцията е изключена)" -#: builtin/blame.c:2589 +#: builtin/blame.c:2585 msgid "Show long commit SHA1 (Default: off)" msgstr "Извеждане на пълните суми по SHA1 (стандартно опцията е изключена)" -#: builtin/blame.c:2590 +#: builtin/blame.c:2586 msgid "Suppress author name and timestamp (Default: off)" msgstr "Без име на автор и време на промяна (стандартно опцията е изключена)" -#: builtin/blame.c:2591 +#: builtin/blame.c:2587 msgid "Show author email instead of name (Default: off)" msgstr "" "Извеждане на е-пощата на автора, а не името му (стандартно опцията е " "изключена)" -#: builtin/blame.c:2592 +#: builtin/blame.c:2588 msgid "Ignore whitespace differences" msgstr "Без разлики в знаците за интервали" -#: builtin/blame.c:2599 -msgid "Use an experimental indent-based heuristic to improve diffs" -msgstr "Подобряване на разликите чрез експериментална евристика според отстъпа" - -#: builtin/blame.c:2600 -msgid "Use an experimental blank-line-based heuristic to improve diffs" -msgstr "" -"Подобряване на разликите чрез експериментална евристика според празните " -"редове" +#: builtin/blame.c:2595 +msgid "Use an experimental heuristic to improve diffs" +msgstr "Подобряване на разликите чрез експериментална евристика" -#: builtin/blame.c:2602 +#: builtin/blame.c:2597 msgid "Spend extra cycles to find better match" msgstr "Допълнителни изчисления за по-добри резултати" -#: builtin/blame.c:2603 +#: builtin/blame.c:2598 msgid "Use revisions from instead of calling git-rev-list" msgstr "Изчитане на версиите от ФАЙЛ, а не чрез изпълнение на „git-rev-list“" -#: builtin/blame.c:2604 +#: builtin/blame.c:2599 msgid "Use 's contents as the final image" msgstr "Използване на съдържанието на ФАЙЛа като крайно положение" -#: builtin/blame.c:2605 builtin/blame.c:2606 +#: builtin/blame.c:2600 builtin/blame.c:2601 msgid "score" msgstr "напасване на редовете" -#: builtin/blame.c:2605 +#: builtin/blame.c:2600 msgid "Find line copies within and across files" msgstr "" "Търсене на копирани редове както в рамките на един файл, така и от един файл " "към друг" -#: builtin/blame.c:2606 +#: builtin/blame.c:2601 msgid "Find line movements within and across files" msgstr "" "Търсене на преместени редове както в рамките на един файл, така и от един " "файл към друг" -#: builtin/blame.c:2607 +#: builtin/blame.c:2602 msgid "n,m" msgstr "n,m" -#: builtin/blame.c:2607 +#: builtin/blame.c:2602 msgid "Process only line range n,m, counting from 1" msgstr "" "Информация само за редовете в диапазона от n до m включително. Броенето " "започва от 1" -#: builtin/blame.c:2654 +#: builtin/blame.c:2649 msgid "--progress can't be used with --incremental or porcelain formats" msgstr "" "опцията „--progress“ е несъвместима с „--incremental“ и форма̀та на командите " @@ -4887,42 +5458,42 @@ msgstr "" #. takes 22 places, is the longest among various forms of #. relative timestamps, but your language may need more or #. fewer display columns. -#: builtin/blame.c:2700 +#: builtin/blame.c:2697 msgid "4 years, 11 months ago" msgstr "преди 4 години и 11 месеца" -#: builtin/blame.c:2780 +#: builtin/blame.c:2777 msgid "--contents and --reverse do not blend well." msgstr "Опциите „--contents“ и „--reverse“ са несъвместими" -#: builtin/blame.c:2800 +#: builtin/blame.c:2797 msgid "cannot use --contents with final commit object name" msgstr "Опцията „--contents“ е несъвместима с име на обект от крайно подаване" -#: builtin/blame.c:2805 +#: builtin/blame.c:2802 msgid "--reverse and --first-parent together require specified latest commit" msgstr "" "Едновременното задаване на опциите „--reverse“ и „--first-parent“ изисква " "указването на крайно подаване" -#: builtin/blame.c:2832 +#: builtin/blame.c:2829 msgid "" "--reverse --first-parent together require range along first-parent chain" msgstr "" "Едновременното задаване на опциите „--reverse“ и „--first-parent“ изисква " "указването на диапазон по веригата на първите наследници" -#: builtin/blame.c:2843 +#: builtin/blame.c:2840 #, c-format msgid "no such path %s in %s" msgstr "няма път на име „%s“ в „%s“" -#: builtin/blame.c:2854 +#: builtin/blame.c:2851 #, c-format msgid "cannot read blob %s for path %s" msgstr "обектът BLOB „%s“ в пътя %s не може да бъде прочетен" -#: builtin/blame.c:2873 +#: builtin/blame.c:2870 #, c-format msgid "file %s has only %lu line" msgid_plural "file %s has only %lu lines" @@ -4949,30 +5520,34 @@ msgstr "git branch [ОПЦИЯ…] (-m | -M) [СТАР_КЛОН] НОВ_КЛОН msgid "git branch [] [-r | -a] [--points-at]" msgstr "git branch [ОПЦИЯ…] [-r | -a] [--points-at]" -#: builtin/branch.c:143 +#: builtin/branch.c:31 +msgid "git branch [] [-r | -a] [--format]" +msgstr "git branch [ОПЦИЯ…] [-r | -a] [--format]" + +#: builtin/branch.c:144 #, c-format msgid "" "deleting branch '%s' that has been merged to\n" " '%s', but not yet merged to HEAD." msgstr "" "изтриване на клона „%s“, който е слят към „%s“,\n" -" но още не е слят към върха „HEAD“." +" но още не е слят към върха „HEAD“." -#: builtin/branch.c:147 +#: builtin/branch.c:148 #, c-format msgid "" "not deleting branch '%s' that is not yet merged to\n" " '%s', even though it is merged to HEAD." msgstr "" "отказване на изтриване на клона „%s“, който не е слят към\n" -" „%s“, но е слят към върха „HEAD“." +" „%s“, но е слят към върха „HEAD“." -#: builtin/branch.c:161 +#: builtin/branch.c:162 #, c-format msgid "Couldn't look up commit object for '%s'" msgstr "Обектът-подаване за „%s“ не може да бъде открит" -#: builtin/branch.c:165 +#: builtin/branch.c:166 #, c-format msgid "" "The branch '%s' is not fully merged.\n" @@ -4981,164 +5556,92 @@ msgstr "" "Клонът „%s“ не е слят напълно. Ако сте сигурни, че искате\n" "да го изтриете, изпълнете „git branch -D %s“." -#: builtin/branch.c:178 +#: builtin/branch.c:179 msgid "Update of config-file failed" msgstr "Неуспешно обновяване на конфигурационния файл" -#: builtin/branch.c:206 +#: builtin/branch.c:210 msgid "cannot use -a with -d" msgstr "Опцията „-a“ е несъвместима с опцията „-d“" -#: builtin/branch.c:212 +#: builtin/branch.c:216 msgid "Couldn't look up commit object for HEAD" msgstr "Обектът-подаване, сочен от указателя „HEAD“, не може да бъде открит" -#: builtin/branch.c:226 +#: builtin/branch.c:230 #, c-format msgid "Cannot delete branch '%s' checked out at '%s'" msgstr "Не можете да изтриете клона „%s“, който е изтеглен в пътя „%s“" -#: builtin/branch.c:241 +#: builtin/branch.c:245 #, c-format msgid "remote-tracking branch '%s' not found." msgstr "следящият клон „%s“ не може да бъде открит." -#: builtin/branch.c:242 +#: builtin/branch.c:246 #, c-format msgid "branch '%s' not found." msgstr "клонът „%s“ не може да бъде открит." -#: builtin/branch.c:257 +#: builtin/branch.c:261 #, c-format msgid "Error deleting remote-tracking branch '%s'" msgstr "Грешка при изтриването на следящия клон „%s“" -#: builtin/branch.c:258 +#: builtin/branch.c:262 #, c-format msgid "Error deleting branch '%s'" msgstr "Грешка при изтриването на клона „%s“" -#: builtin/branch.c:265 +#: builtin/branch.c:269 #, c-format msgid "Deleted remote-tracking branch %s (was %s).\n" msgstr "Изтрит следящ клон „%s“ (той сочеше към „%s“).\n" -#: builtin/branch.c:266 +#: builtin/branch.c:270 #, c-format msgid "Deleted branch %s (was %s).\n" msgstr "Изтрит клон „%s“ (той сочеше към „%s“).\n" -#: builtin/branch.c:312 -#, c-format -msgid "[%s: gone]" -msgstr "[%s: изтрит]" - -#: builtin/branch.c:317 -#, c-format -msgid "[%s]" -msgstr "[%s]" - -#: builtin/branch.c:322 -#, c-format -msgid "[%s: behind %d]" -msgstr "[%s: назад с %d]" - -#: builtin/branch.c:324 -#, c-format -msgid "[behind %d]" -msgstr "[назад с %d]" - -#: builtin/branch.c:328 -#, c-format -msgid "[%s: ahead %d]" -msgstr "[%s: напред с %d]" - -#: builtin/branch.c:330 -#, c-format -msgid "[ahead %d]" -msgstr "[напред с %d]" - -#: builtin/branch.c:333 -#, c-format -msgid "[%s: ahead %d, behind %d]" -msgstr "[%s: напред с %d, назад с %d]" - -#: builtin/branch.c:336 -#, c-format -msgid "[ahead %d, behind %d]" -msgstr "[напред с %d, назад с %d]" - -#: builtin/branch.c:349 -msgid " **** invalid ref ****" -msgstr " ●●● неправилен указател ●●●" - -#: builtin/branch.c:375 -#, c-format -msgid "(no branch, rebasing %s)" -msgstr "(извън клон, пребазиране на „%s“)" - -#: builtin/branch.c:378 -#, c-format -msgid "(no branch, bisect started on %s)" -msgstr "(извън клон, двоично търсене от „%s“)" - -#. TRANSLATORS: make sure this matches -#. "HEAD detached at " in wt-status.c -#: builtin/branch.c:384 -#, c-format -msgid "(HEAD detached at %s)" -msgstr "(Указателят „HEAD“ не е свързан и е при „%s“)" - -#. TRANSLATORS: make sure this matches -#. "HEAD detached from " in wt-status.c -#: builtin/branch.c:389 -#, c-format -msgid "(HEAD detached from %s)" -msgstr "Указателят „HEAD“ не е свързан и е отделѐн от „%s“" - -#: builtin/branch.c:393 -msgid "(no branch)" -msgstr "(извън клон)" - -#: builtin/branch.c:544 +#: builtin/branch.c:441 #, c-format msgid "Branch %s is being rebased at %s" msgstr "Клонът „%s“ се пребазира върху „%s“" -#: builtin/branch.c:548 +#: builtin/branch.c:445 #, c-format msgid "Branch %s is being bisected at %s" msgstr "Търси се двоично в клона „%s“ при „%s“" -#: builtin/branch.c:563 +#: builtin/branch.c:460 msgid "cannot rename the current branch while not on any." msgstr "" "не можете да преименувате текущия клон, защото сте извън който и да е клон" -#: builtin/branch.c:573 +#: builtin/branch.c:470 #, c-format msgid "Invalid branch name: '%s'" msgstr "Неправилно име на клон: „%s“" -#: builtin/branch.c:590 +#: builtin/branch.c:487 msgid "Branch rename failed" msgstr "Неуспешно преименуване на клон" -#: builtin/branch.c:594 +#: builtin/branch.c:490 #, c-format msgid "Renamed a misnamed branch '%s' away" msgstr "На клона с неправилно име „%s“ е дадено служебно име" -#: builtin/branch.c:597 +#: builtin/branch.c:493 #, c-format msgid "Branch renamed to %s, but HEAD is not updated!" msgstr "Клонът е преименуван на „%s“, но указателят „HEAD“ не е обновен" -#: builtin/branch.c:604 +#: builtin/branch.c:502 msgid "Branch is renamed, but update of config-file failed" msgstr "Клонът е преименуван, но конфигурационният файл не е обновен" -#: builtin/branch.c:620 +#: builtin/branch.c:518 #, c-format msgid "" "Please edit the description for the branch\n" @@ -5149,166 +5652,179 @@ msgstr "" " %s\n" "Редовете, които започват с „%c“, ще бъдат пропуснати.\n" -#: builtin/branch.c:651 +#: builtin/branch.c:551 msgid "Generic options" msgstr "Общи настройки" -#: builtin/branch.c:653 +#: builtin/branch.c:553 msgid "show hash and subject, give twice for upstream branch" msgstr "" "извеждане на хеша и темата. Повтарянето на опцията прибавя отдалечените " "клони" -#: builtin/branch.c:654 +#: builtin/branch.c:554 msgid "suppress informational messages" msgstr "без информационни съобщения" -#: builtin/branch.c:655 +#: builtin/branch.c:555 msgid "set up tracking mode (see git-pull(1))" msgstr "задаване на режима на следене (виж git-pull(1))" -#: builtin/branch.c:657 +#: builtin/branch.c:557 msgid "change upstream info" msgstr "смяна на следения клон" -#: builtin/branch.c:659 +#: builtin/branch.c:559 msgid "upstream" msgstr "клон-източник" -#: builtin/branch.c:659 +#: builtin/branch.c:559 msgid "change the upstream info" msgstr "смяна на клона-източник" -#: builtin/branch.c:660 +#: builtin/branch.c:560 msgid "Unset the upstream info" msgstr "без клон-източник" -#: builtin/branch.c:661 +#: builtin/branch.c:561 msgid "use colored output" msgstr "цветен изход" -#: builtin/branch.c:662 +#: builtin/branch.c:562 msgid "act on remote-tracking branches" msgstr "действие върху следящите клони" -#: builtin/branch.c:664 builtin/branch.c:665 +#: builtin/branch.c:564 builtin/branch.c:566 msgid "print only branches that contain the commit" msgstr "извеждане само на клоните, които съдържат това ПОДАВАНЕ" -#: builtin/branch.c:668 +#: builtin/branch.c:565 builtin/branch.c:567 +msgid "print only branches that don't contain the commit" +msgstr "извеждане само на клоните, които не съдържат това ПОДАВАНЕ" + +#: builtin/branch.c:570 msgid "Specific git-branch actions:" msgstr "Специални действия на „git-branch“:" -#: builtin/branch.c:669 +#: builtin/branch.c:571 msgid "list both remote-tracking and local branches" msgstr "извеждане както на следящите, така и на локалните клони" -#: builtin/branch.c:671 +#: builtin/branch.c:573 msgid "delete fully merged branch" msgstr "изтриване на клони, които са напълно слети" -#: builtin/branch.c:672 +#: builtin/branch.c:574 msgid "delete branch (even if not merged)" msgstr "изтриване и на клони, които не са напълно слети" -#: builtin/branch.c:673 +#: builtin/branch.c:575 msgid "move/rename a branch and its reflog" msgstr "" "преместване/преименуване на клон и принадлежащият му журнал на указателите" -#: builtin/branch.c:674 +#: builtin/branch.c:576 msgid "move/rename a branch, even if target exists" msgstr "преместване/преименуване на клон, дори ако има вече клон с такова име" -#: builtin/branch.c:675 +#: builtin/branch.c:577 msgid "list branch names" msgstr "извеждане на имената на клоните" -#: builtin/branch.c:676 +#: builtin/branch.c:578 msgid "create the branch's reflog" msgstr "създаване на журнала на указателите на клона" -#: builtin/branch.c:678 +#: builtin/branch.c:580 msgid "edit the description for the branch" msgstr "редактиране на описанието на клона" -#: builtin/branch.c:679 +#: builtin/branch.c:581 msgid "force creation, move/rename, deletion" msgstr "принудително създаване, преместване, преименуване, изтриване" -#: builtin/branch.c:680 +#: builtin/branch.c:582 msgid "print only branches that are merged" msgstr "извеждане само на слетите клони" -#: builtin/branch.c:681 +#: builtin/branch.c:583 msgid "print only branches that are not merged" msgstr "извеждане само на неслетите клони" -#: builtin/branch.c:682 +#: builtin/branch.c:584 msgid "list branches in columns" msgstr "извеждане по колони" -#: builtin/branch.c:683 builtin/for-each-ref.c:38 builtin/tag.c:366 +#: builtin/branch.c:585 builtin/for-each-ref.c:38 builtin/tag.c:426 msgid "key" msgstr "КЛЮЧ" -#: builtin/branch.c:684 builtin/for-each-ref.c:39 builtin/tag.c:367 +#: builtin/branch.c:586 builtin/for-each-ref.c:39 builtin/tag.c:427 msgid "field name to sort on" msgstr "име на полето, по което да е подредбата" -#: builtin/branch.c:686 builtin/for-each-ref.c:41 builtin/notes.c:404 +#: builtin/branch.c:588 builtin/for-each-ref.c:41 builtin/notes.c:404 #: builtin/notes.c:407 builtin/notes.c:567 builtin/notes.c:570 -#: builtin/tag.c:369 +#: builtin/tag.c:429 msgid "object" msgstr "ОБЕКТ" -#: builtin/branch.c:687 +#: builtin/branch.c:589 msgid "print only branches of the object" msgstr "извеждане само на клоните на ОБЕКТА" -#: builtin/branch.c:705 +#: builtin/branch.c:591 builtin/for-each-ref.c:47 builtin/tag.c:434 +msgid "sorting and filtering are case insensitive" +msgstr "подредбата и филтрирането третират еднакво малките и главните букви" + +#: builtin/branch.c:592 builtin/for-each-ref.c:37 builtin/tag.c:433 +#: builtin/verify-tag.c:38 +msgid "format to use for the output" +msgstr "ФОРМАТ за изхода" + +#: builtin/branch.c:611 msgid "Failed to resolve HEAD as a valid ref." msgstr "Не може да се открие към какво сочи указателят „HEAD“" -#: builtin/branch.c:709 builtin/clone.c:706 +#: builtin/branch.c:615 builtin/clone.c:724 msgid "HEAD not found below refs/heads!" msgstr "В директорията „refs/heads“ липсва файл „HEAD“" -#: builtin/branch.c:729 +#: builtin/branch.c:638 msgid "--column and --verbose are incompatible" msgstr "Опциите „--column“ и „--verbose“ са несъвместими" -#: builtin/branch.c:740 builtin/branch.c:782 +#: builtin/branch.c:649 builtin/branch.c:701 msgid "branch name required" msgstr "Необходимо е име на клон" -#: builtin/branch.c:758 +#: builtin/branch.c:677 msgid "Cannot give description to detached HEAD" msgstr "Не може да зададете описание на несвързан „HEAD“" -#: builtin/branch.c:763 +#: builtin/branch.c:682 msgid "cannot edit description of more than one branch" msgstr "Не може да редактирате описанието на повече от един клон едновременно" -#: builtin/branch.c:770 +#: builtin/branch.c:689 #, c-format msgid "No commit on branch '%s' yet." msgstr "В клона „%s“ все още няма подавания." -#: builtin/branch.c:773 +#: builtin/branch.c:692 #, c-format msgid "No branch named '%s'." msgstr "Липсва клон на име „%s“." -#: builtin/branch.c:788 +#: builtin/branch.c:707 msgid "too many branches for a rename operation" msgstr "Прекалено много клони за преименуване" -#: builtin/branch.c:793 +#: builtin/branch.c:712 msgid "too many branches to set new upstream" msgstr "Зададени са прекалено много клони за следене" -#: builtin/branch.c:797 +#: builtin/branch.c:716 #, c-format msgid "" "could not set upstream of HEAD to %s when it does not point to any branch." @@ -5316,39 +5832,39 @@ msgstr "" "Следеното от „HEAD“ не може да се зададе да е „%s“, защото то не сочи към " "никой клон." -#: builtin/branch.c:800 builtin/branch.c:822 builtin/branch.c:843 +#: builtin/branch.c:719 builtin/branch.c:741 builtin/branch.c:762 #, c-format msgid "no such branch '%s'" msgstr "Няма клон на име „%s“." -#: builtin/branch.c:804 +#: builtin/branch.c:723 #, c-format msgid "branch '%s' does not exist" msgstr "Не съществува клон на име „%s“." -#: builtin/branch.c:816 +#: builtin/branch.c:735 msgid "too many branches to unset upstream" msgstr "Прекалено много клони за махане на следене" -#: builtin/branch.c:820 +#: builtin/branch.c:739 msgid "could not unset upstream of HEAD when it does not point to any branch." msgstr "" "Следеното от „HEAD“ не може да махне, защото то не сочи към никой клон." -#: builtin/branch.c:826 +#: builtin/branch.c:745 #, c-format msgid "Branch '%s' has no upstream information" msgstr "Няма информация клонът „%s“ да следи някой друг" -#: builtin/branch.c:840 +#: builtin/branch.c:759 msgid "it does not make sense to create 'HEAD' manually" msgstr "Няма никакъв смисъл ръчно да създавате „HEAD“." -#: builtin/branch.c:846 +#: builtin/branch.c:765 msgid "-a and -r options to 'git branch' do not make sense with a branch name" msgstr "Опциите „-a“ и „-r“ на „git branch“ са несъвместими с име на клон" -#: builtin/branch.c:849 +#: builtin/branch.c:768 #, c-format msgid "" "The --set-upstream flag is deprecated and will be removed. Consider using --" @@ -5357,7 +5873,7 @@ msgstr "" "Опцията „--set-upstream“ вече е остаряла и предстои да бъде махната. " "Използвайте „--track“ или „--set-upstream-to“\n" -#: builtin/branch.c:866 +#: builtin/branch.c:785 #, c-format msgid "" "\n" @@ -5368,16 +5884,16 @@ msgstr "" "За да накарате „%s“ да следи „%s“, изпълнете следната команда:\n" "\n" -#: builtin/bundle.c:51 +#: builtin/bundle.c:45 #, c-format msgid "%s is okay\n" msgstr "Пратката „%s“ е наред\n" -#: builtin/bundle.c:64 +#: builtin/bundle.c:58 msgid "Need a repository to create a bundle." msgstr "За създаването на пратка е необходимо хранилище." -#: builtin/bundle.c:68 +#: builtin/bundle.c:62 msgid "Need a repository to unbundle." msgstr "За приемането на пратка е необходимо хранилище." @@ -5430,7 +5946,7 @@ msgid "for blob objects, run filters on object's content" msgstr "" "да се стартират програмите за преобразуване на съдържанието на обектите BLOB" -#: builtin/cat-file.c:561 git-submodule.sh:923 +#: builtin/cat-file.c:561 git-submodule.sh:943 msgid "blob" msgstr "обект BLOB" @@ -5489,7 +6005,7 @@ msgstr "изчитане на имената на файловете от ста msgid "terminate input and output records by a NUL character" msgstr "разделяне на входните и изходните записи с нулевия знак „NUL“" -#: builtin/check-ignore.c:18 builtin/checkout.c:1137 builtin/gc.c:325 +#: builtin/check-ignore.c:18 builtin/checkout.c:1158 builtin/gc.c:356 msgid "suppress progress reporting" msgstr "без показване на напредъка" @@ -5579,9 +6095,9 @@ msgid "write the content to temporary files" msgstr "записване на съдържанието във временни файлове" #: builtin/checkout-index.c:174 builtin/column.c:30 -#: builtin/submodule--helper.c:595 builtin/submodule--helper.c:598 -#: builtin/submodule--helper.c:604 builtin/submodule--helper.c:951 -#: builtin/worktree.c:469 +#: builtin/submodule--helper.c:635 builtin/submodule--helper.c:638 +#: builtin/submodule--helper.c:644 builtin/submodule--helper.c:980 +#: builtin/worktree.c:477 msgid "string" msgstr "НИЗ" @@ -5593,114 +6109,114 @@ msgstr "при създаването на нови файлове да се д msgid "copy out the files from named stage" msgstr "копиране на файловете от това състояние на сливане" -#: builtin/checkout.c:25 +#: builtin/checkout.c:27 msgid "git checkout [] " msgstr "git checkout [ОПЦИЯ…] КЛОН" -#: builtin/checkout.c:26 +#: builtin/checkout.c:28 msgid "git checkout [] [] -- ..." msgstr "git checkout [ОПЦИЯ…] [КЛОН] -- ФАЙЛ…" -#: builtin/checkout.c:134 builtin/checkout.c:167 +#: builtin/checkout.c:153 builtin/checkout.c:186 #, c-format msgid "path '%s' does not have our version" msgstr "вашата версия липсва в пътя „%s“" -#: builtin/checkout.c:136 builtin/checkout.c:169 +#: builtin/checkout.c:155 builtin/checkout.c:188 #, c-format msgid "path '%s' does not have their version" msgstr "чуждата версия липсва в пътя „%s“" -#: builtin/checkout.c:152 +#: builtin/checkout.c:171 #, c-format msgid "path '%s' does not have all necessary versions" msgstr "някоя от необходимите версии липсва в пътя „%s“" -#: builtin/checkout.c:196 +#: builtin/checkout.c:215 #, c-format msgid "path '%s' does not have necessary versions" msgstr "някоя от необходимите версии липсва в пътя „%s“" -#: builtin/checkout.c:213 +#: builtin/checkout.c:232 #, c-format msgid "path '%s': cannot merge" msgstr "пътят „%s“ не може да бъде слян" -#: builtin/checkout.c:230 +#: builtin/checkout.c:249 #, c-format msgid "Unable to add merge result for '%s'" msgstr "Резултатът за „%s“ не може да бъде слян" -#: builtin/checkout.c:250 builtin/checkout.c:253 builtin/checkout.c:256 -#: builtin/checkout.c:259 +#: builtin/checkout.c:269 builtin/checkout.c:272 builtin/checkout.c:275 +#: builtin/checkout.c:278 #, c-format msgid "'%s' cannot be used with updating paths" msgstr "Опцията „%s“ е несъвместима с обновяването на пътища" -#: builtin/checkout.c:262 builtin/checkout.c:265 +#: builtin/checkout.c:281 builtin/checkout.c:284 #, c-format msgid "'%s' cannot be used with %s" msgstr "Опцията „%s“ е несъвместима с „%s“" -#: builtin/checkout.c:268 +#: builtin/checkout.c:287 #, c-format msgid "Cannot update paths and switch to branch '%s' at the same time." msgstr "" "Невъзможно е едновременно да обновявате пътища и да преминете към клона „%s“." -#: builtin/checkout.c:339 builtin/checkout.c:346 +#: builtin/checkout.c:358 builtin/checkout.c:365 #, c-format msgid "path '%s' is unmerged" msgstr "пътят „%s“ не е слят" -#: builtin/checkout.c:494 +#: builtin/checkout.c:513 msgid "you need to resolve your current index first" msgstr "първо трябва да коригирате индекса си" -#: builtin/checkout.c:624 +#: builtin/checkout.c:644 #, c-format msgid "Can not do reflog for '%s': %s\n" msgstr "Журналът на указателите за „%s“ не може да се проследи: %s\n" -#: builtin/checkout.c:663 +#: builtin/checkout.c:685 msgid "HEAD is now at" msgstr "Указателят „HEAD“ в момента сочи към" -#: builtin/checkout.c:667 builtin/clone.c:660 +#: builtin/checkout.c:689 builtin/clone.c:678 msgid "unable to update HEAD" msgstr "Указателят „HEAD“ не може да бъде обновен" -#: builtin/checkout.c:671 +#: builtin/checkout.c:693 #, c-format msgid "Reset branch '%s'\n" msgstr "Зануляване на клона „%s“\n" -#: builtin/checkout.c:674 +#: builtin/checkout.c:696 #, c-format msgid "Already on '%s'\n" msgstr "Вече сте на „%s“\n" -#: builtin/checkout.c:678 +#: builtin/checkout.c:700 #, c-format msgid "Switched to and reset branch '%s'\n" msgstr "Преминаване към клона „%s“ и зануляване на промените\n" -#: builtin/checkout.c:680 builtin/checkout.c:1069 +#: builtin/checkout.c:702 builtin/checkout.c:1090 #, c-format msgid "Switched to a new branch '%s'\n" msgstr "Преминахте към новия клон „%s“\n" -#: builtin/checkout.c:682 +#: builtin/checkout.c:704 #, c-format msgid "Switched to branch '%s'\n" msgstr "Преминахте към клона „%s“\n" -#: builtin/checkout.c:733 +#: builtin/checkout.c:755 #, c-format msgid " ... and %d more.\n" msgstr "… и още %d.\n" -#: builtin/checkout.c:739 +#: builtin/checkout.c:761 #, c-format msgid "" "Warning: you are leaving %d commit behind, not connected to\n" @@ -5722,7 +6238,7 @@ msgstr[1] "" "\n" "%s\n" -#: builtin/checkout.c:758 +#: builtin/checkout.c:780 #, c-format msgid "" "If you want to keep it by creating a new branch, this may be a good time\n" @@ -5749,154 +6265,154 @@ msgstr[1] "" " git branch ИМЕ_НА_НОВИЯ_КЛОН %s\n" "\n" -#: builtin/checkout.c:794 +#: builtin/checkout.c:816 msgid "internal error in revision walk" msgstr "вътрешна грешка при обхождането на версиите" -#: builtin/checkout.c:798 +#: builtin/checkout.c:820 msgid "Previous HEAD position was" msgstr "Преди това „HEAD“ сочеше към" -#: builtin/checkout.c:825 builtin/checkout.c:1064 +#: builtin/checkout.c:847 builtin/checkout.c:1085 msgid "You are on a branch yet to be born" msgstr "В момента сте на клон, който предстои да бъде създаден" -#: builtin/checkout.c:970 +#: builtin/checkout.c:991 #, c-format msgid "only one reference expected, %d given." msgstr "очакваше се един указател, а сте подали %d." -#: builtin/checkout.c:1010 builtin/worktree.c:214 +#: builtin/checkout.c:1031 builtin/worktree.c:214 #, c-format msgid "invalid reference: %s" msgstr "неправилен указател: %s" -#: builtin/checkout.c:1039 +#: builtin/checkout.c:1060 #, c-format msgid "reference is not a tree: %s" msgstr "указателят не сочи към обект-дърво: %s" -#: builtin/checkout.c:1078 +#: builtin/checkout.c:1099 msgid "paths cannot be used with switching branches" msgstr "задаването на път е несъвместимо с преминаването от един клон към друг" -#: builtin/checkout.c:1081 builtin/checkout.c:1085 +#: builtin/checkout.c:1102 builtin/checkout.c:1106 #, c-format msgid "'%s' cannot be used with switching branches" msgstr "опцията „%s“ е несъвместима с преминаването от един клон към друг" -#: builtin/checkout.c:1089 builtin/checkout.c:1092 builtin/checkout.c:1097 -#: builtin/checkout.c:1100 +#: builtin/checkout.c:1110 builtin/checkout.c:1113 builtin/checkout.c:1118 +#: builtin/checkout.c:1121 #, c-format msgid "'%s' cannot be used with '%s'" msgstr "опцията „%s“ е несъвместима с „%s“" -#: builtin/checkout.c:1105 +#: builtin/checkout.c:1126 #, c-format msgid "Cannot switch branch to a non-commit '%s'" msgstr "" "За да преминете към клон, подайте указател, който сочи към подаване. „%s“ " "не е такъв" -#: builtin/checkout.c:1138 builtin/checkout.c:1140 builtin/clone.c:93 -#: builtin/remote.c:165 builtin/remote.c:167 builtin/worktree.c:324 -#: builtin/worktree.c:326 +#: builtin/checkout.c:1159 builtin/checkout.c:1161 builtin/clone.c:111 +#: builtin/remote.c:165 builtin/remote.c:167 builtin/worktree.c:329 +#: builtin/worktree.c:331 msgid "branch" msgstr "клон" -#: builtin/checkout.c:1139 +#: builtin/checkout.c:1160 msgid "create and checkout a new branch" msgstr "създаване и преминаване към нов клон" -#: builtin/checkout.c:1141 +#: builtin/checkout.c:1162 msgid "create/reset and checkout a branch" msgstr "създаване/зануляване на клон и преминаване към него" -#: builtin/checkout.c:1142 +#: builtin/checkout.c:1163 msgid "create reflog for new branch" msgstr "създаване на журнал на указателите за нов клон" -#: builtin/checkout.c:1143 builtin/worktree.c:328 +#: builtin/checkout.c:1164 builtin/worktree.c:333 msgid "detach HEAD at named commit" msgstr "отделяне на указателя „HEAD“ към указаното подаване" -#: builtin/checkout.c:1144 +#: builtin/checkout.c:1165 msgid "set upstream info for new branch" msgstr "задаване на кой клон бива следен при създаването на новия клон" -#: builtin/checkout.c:1146 +#: builtin/checkout.c:1167 msgid "new-branch" msgstr "НОВ_КЛОН" -#: builtin/checkout.c:1146 +#: builtin/checkout.c:1167 msgid "new unparented branch" msgstr "нов клон без родител" -#: builtin/checkout.c:1147 +#: builtin/checkout.c:1168 msgid "checkout our version for unmerged files" msgstr "изтегляне на вашата версия на неслетите файлове" -#: builtin/checkout.c:1149 +#: builtin/checkout.c:1170 msgid "checkout their version for unmerged files" msgstr "изтегляне на чуждата версия на неслетите файлове" -#: builtin/checkout.c:1151 +#: builtin/checkout.c:1172 msgid "force checkout (throw away local modifications)" msgstr "принудително изтегляне (вашите промени ще бъдат занулени)" -#: builtin/checkout.c:1152 +#: builtin/checkout.c:1173 msgid "perform a 3-way merge with the new branch" msgstr "извършване на тройно сливане с новия клон" -#: builtin/checkout.c:1153 builtin/merge.c:231 +#: builtin/checkout.c:1174 builtin/merge.c:234 msgid "update ignored files (default)" msgstr "обновяване на игнорираните файлове (стандартно)" -#: builtin/checkout.c:1154 builtin/log.c:1466 parse-options.h:251 +#: builtin/checkout.c:1175 builtin/log.c:1473 parse-options.h:251 msgid "style" msgstr "СТИЛ" -#: builtin/checkout.c:1155 +#: builtin/checkout.c:1176 msgid "conflict style (merge or diff3)" msgstr "действие при конфликт (сливане или тройна разлика)" -#: builtin/checkout.c:1158 +#: builtin/checkout.c:1179 msgid "do not limit pathspecs to sparse entries only" msgstr "без ограничаване на изброените пътища само до частично изтеглените" -#: builtin/checkout.c:1160 +#: builtin/checkout.c:1181 msgid "second guess 'git checkout '" msgstr "" "опит за отгатване на име на клон след неуспешен опит с „git checkout " "НЕСЪЩЕСТВУВАЩ_КЛОН“" -#: builtin/checkout.c:1162 +#: builtin/checkout.c:1183 msgid "do not check if another worktree is holding the given ref" msgstr "без проверка дали друго работно дърво държи указателя" -#: builtin/checkout.c:1163 builtin/clone.c:63 builtin/fetch.c:119 -#: builtin/merge.c:228 builtin/pull.c:117 builtin/push.c:536 -#: builtin/send-pack.c:168 +#: builtin/checkout.c:1187 builtin/clone.c:78 builtin/fetch.c:119 +#: builtin/merge.c:231 builtin/pull.c:117 builtin/push.c:539 +#: builtin/send-pack.c:172 msgid "force progress reporting" msgstr "извеждане на напредъка" -#: builtin/checkout.c:1194 +#: builtin/checkout.c:1224 msgid "-b, -B and --orphan are mutually exclusive" msgstr "Опциите „-b“, „-B“ и „--orphan“ са несъвместими една с друга" -#: builtin/checkout.c:1211 +#: builtin/checkout.c:1241 msgid "--track needs a branch name" msgstr "опцията „--track“ изисква име на клон" -#: builtin/checkout.c:1216 +#: builtin/checkout.c:1246 msgid "Missing branch name; try -b" msgstr "Липсва име на клон, използвайте опцията „-b“" -#: builtin/checkout.c:1252 +#: builtin/checkout.c:1282 msgid "invalid path specification" msgstr "указан е неправилен път" -#: builtin/checkout.c:1259 +#: builtin/checkout.c:1289 #, c-format msgid "" "Cannot update paths and switch to branch '%s' at the same time.\n" @@ -5905,12 +6421,12 @@ msgstr "" "Не можете едновременно да обновявате пътища и да преминете към клона „%s“.\n" "Дали не искате да изтеглите „%s“, който не сочи към подаване?" -#: builtin/checkout.c:1264 +#: builtin/checkout.c:1294 #, c-format msgid "git checkout: --detach does not take a path argument '%s'" msgstr "git checkout: опцията „--detach“ не приема аргумент-път „%s“" -#: builtin/checkout.c:1268 +#: builtin/checkout.c:1298 msgid "" "git checkout: --ours/--theirs, --force and --merge are incompatible when\n" "checking out of the index." @@ -5948,19 +6464,21 @@ msgstr "Хранилището „%s“ ще бъде прескочено\n" msgid "failed to remove %s" msgstr "файлът „%s“ не може да бъде изтрит" -#: builtin/clean.c:291 +#: builtin/clean.c:297 git-add--interactive.perl:614 +#, c-format msgid "" "Prompt help:\n" "1 - select a numbered item\n" "foo - select item based on unique prefix\n" -" - (empty) select nothing" +" - (empty) select nothing\n" msgstr "" "Подсказка:\n" "1 — избор на обект според реда\n" "ПРЕФИКС — избор на единствен обект по този уникален префикс\n" -" — (празно) нищо да не се избира" +" — (празно) нищо да не се избира\n" -#: builtin/clean.c:295 +#: builtin/clean.c:301 git-add--interactive.perl:623 +#, c-format msgid "" "Prompt help:\n" "1 - select a single item\n" @@ -5969,48 +6487,50 @@ msgid "" "foo - select item based on unique prefix\n" "-... - unselect specified items\n" "* - choose all items\n" -" - (empty) finish selecting" +" - (empty) finish selecting\n" msgstr "" "Подсказка:\n" "1 — избор на един обект\n" "3-5 — диапазон за избор на обекти\n" -"2-3,6-9 — множество диапазон за избор на обекти\n" +"2-3,6-9 — множество диапазони за избор на обекти\n" "ПРЕФИКС — избор на единствен обект по този уникален префикс\n" "-… — отмяна на избора на обекти\n" "* — избиране на всички обекти\n" -" — (празно) завършване на избирането" +" — (празно) завършване на избирането\n" -#: builtin/clean.c:511 -#, c-format -msgid "Huh (%s)?" -msgstr "Неправилен избор (%s). Изберете отново." +#: builtin/clean.c:517 git-add--interactive.perl:589 +#: git-add--interactive.perl:594 +#, c-format, perl-format +msgid "Huh (%s)?\n" +msgstr "Неправилен избор (%s).\n" -#: builtin/clean.c:653 +#: builtin/clean.c:659 #, c-format msgid "Input ignore patterns>> " msgstr "Шаблони за игнорирани елементи≫ " -#: builtin/clean.c:690 +#: builtin/clean.c:696 #, c-format msgid "WARNING: Cannot find items matched by: %s" msgstr "ПРЕДУПРЕЖДЕНИЕ: Никой обект не напасва на „%s“" -#: builtin/clean.c:711 +#: builtin/clean.c:717 msgid "Select items to delete" msgstr "Избиране на обекти за изтриване" #. TRANSLATORS: Make sure to keep [y/N] as is -#: builtin/clean.c:752 +#: builtin/clean.c:758 #, c-format msgid "Remove %s [y/N]? " msgstr "Да се изтрие ли „%s“? „y“ — да, „N“ — НЕ" # -#: builtin/clean.c:777 -msgid "Bye." -msgstr "Изход." +#: builtin/clean.c:783 git-add--interactive.perl:1660 +#, c-format +msgid "Bye.\n" +msgstr "Изход.\n" -#: builtin/clean.c:785 +#: builtin/clean.c:791 msgid "" "clean - start cleaning\n" "filter by pattern - exclude items from deletion\n" @@ -6028,62 +6548,63 @@ msgstr "" "help — този край\n" "? — подсказка за шаблоните" -#: builtin/clean.c:812 +#: builtin/clean.c:818 git-add--interactive.perl:1736 msgid "*** Commands ***" msgstr "●●● Команди ●●●" -#: builtin/clean.c:813 +#: builtin/clean.c:819 git-add--interactive.perl:1733 msgid "What now" msgstr "Избор на следващо действие" -#: builtin/clean.c:821 +#: builtin/clean.c:827 msgid "Would remove the following item:" msgid_plural "Would remove the following items:" msgstr[0] "Следният обект ще бъде изтрит:" msgstr[1] "Следните обекти ще бъдат изтрити:" -#: builtin/clean.c:838 +#: builtin/clean.c:844 msgid "No more files to clean, exiting." msgstr "Файловете за изчистване свършиха. Изход от програмата." -#: builtin/clean.c:869 +#: builtin/clean.c:875 msgid "do not print names of files removed" msgstr "без извеждане на имената на файловете, които ще бъдат изтрити" -#: builtin/clean.c:871 +#: builtin/clean.c:877 msgid "force" msgstr "принудително изтриване" -#: builtin/clean.c:872 +#: builtin/clean.c:878 msgid "interactive cleaning" msgstr "интерактивно изтриване" -#: builtin/clean.c:874 +#: builtin/clean.c:880 msgid "remove whole directories" msgstr "изтриване на цели директории" -#: builtin/clean.c:875 builtin/describe.c:407 builtin/grep.c:725 -#: builtin/ls-files.c:536 builtin/name-rev.c:313 builtin/show-ref.c:182 +#: builtin/clean.c:881 builtin/describe.c:449 builtin/describe.c:451 +#: builtin/grep.c:1063 builtin/ls-files.c:546 builtin/name-rev.c:348 +#: builtin/name-rev.c:350 builtin/show-ref.c:176 msgid "pattern" msgstr "ШАБЛОН" -#: builtin/clean.c:876 +#: builtin/clean.c:882 msgid "add to ignore rules" msgstr "добавяне на ШАБЛОН от файлове, които да не се трият" -#: builtin/clean.c:877 +#: builtin/clean.c:883 msgid "remove ignored files, too" msgstr "изтриване и на игнорираните файлове" -#: builtin/clean.c:879 +#: builtin/clean.c:885 msgid "remove only ignored files" msgstr "изтриване само на игнорирани файлове" -#: builtin/clean.c:897 +#: builtin/clean.c:903 msgid "-x and -X cannot be used together" msgstr "опциите „-x“ и „-X“ са несъвместими" -#: builtin/clean.c:901 +#: builtin/clean.c:907 msgid "" "clean.requireForce set to true and neither -i, -n, nor -f given; refusing to " "clean" @@ -6091,7 +6612,7 @@ msgstr "" "Настройката „clean.requireForce“ е зададена като истина, което изисква някоя " "от опциите „-i“, „-n“ или „-f“. Няма да се извърши изчистване" -#: builtin/clean.c:904 +#: builtin/clean.c:910 msgid "" "clean.requireForce defaults to true and neither -i, -n, nor -f given; " "refusing to clean" @@ -6104,132 +6625,137 @@ msgstr "" msgid "git clone [] [--] []" msgstr "git clone [ОПЦИЯ…] [--] ХРАНИЛИЩЕ [ДИРЕКТОРИЯ]" -#: builtin/clone.c:65 +#: builtin/clone.c:80 msgid "don't create a checkout" msgstr "без създаване на работно дърво" -#: builtin/clone.c:66 builtin/clone.c:68 builtin/init-db.c:478 +#: builtin/clone.c:81 builtin/clone.c:83 builtin/init-db.c:478 msgid "create a bare repository" msgstr "създаване на голо хранилище" -#: builtin/clone.c:70 +#: builtin/clone.c:85 msgid "create a mirror repository (implies bare)" msgstr "" "създаване на хранилище-огледало (включва опцията „--bare“ за голо хранилище)" -#: builtin/clone.c:72 +#: builtin/clone.c:87 msgid "to clone from a local repository" msgstr "клониране от локално хранилище" -#: builtin/clone.c:74 +#: builtin/clone.c:89 msgid "don't use local hardlinks, always copy" msgstr "без твърди връзки, файловете винаги да се копират" -#: builtin/clone.c:76 +#: builtin/clone.c:91 msgid "setup as shared repository" msgstr "настройване за споделено хранилище" -#: builtin/clone.c:78 builtin/clone.c:80 +#: builtin/clone.c:93 builtin/clone.c:97 +msgid "pathspec" +msgstr "път" + +#: builtin/clone.c:93 builtin/clone.c:97 msgid "initialize submodules in the clone" msgstr "инициализиране на подмодулите при това клониране" -#: builtin/clone.c:82 +#: builtin/clone.c:100 msgid "number of submodules cloned in parallel" msgstr "брой подмодули, клонирани паралелно" -#: builtin/clone.c:83 builtin/init-db.c:475 +#: builtin/clone.c:101 builtin/init-db.c:475 msgid "template-directory" msgstr "директория с шаблони" -#: builtin/clone.c:84 builtin/init-db.c:476 +#: builtin/clone.c:102 builtin/init-db.c:476 msgid "directory from which templates will be used" msgstr "директория, която съдържа шаблоните, които да се ползват" -#: builtin/clone.c:86 builtin/clone.c:88 builtin/submodule--helper.c:602 -#: builtin/submodule--helper.c:954 +#: builtin/clone.c:104 builtin/clone.c:106 builtin/submodule--helper.c:642 +#: builtin/submodule--helper.c:983 msgid "reference repository" msgstr "еталонно хранилище" -#: builtin/clone.c:90 +#: builtin/clone.c:108 msgid "use --reference only while cloning" msgstr "опцията „--reference“ може да се използва само при клониране" -#: builtin/clone.c:91 builtin/column.c:26 builtin/merge-file.c:44 +#: builtin/clone.c:109 builtin/column.c:26 builtin/merge-file.c:43 msgid "name" msgstr "ИМЕ" -#: builtin/clone.c:92 +#: builtin/clone.c:110 msgid "use instead of 'origin' to track upstream" msgstr "използване на това ИМЕ вместо „origin“ при проследяване на клони" -#: builtin/clone.c:94 +#: builtin/clone.c:112 msgid "checkout instead of the remote's HEAD" msgstr "изтегляне на този КЛОН, а не соченият от отдалечения указател „HEAD“" -#: builtin/clone.c:96 +#: builtin/clone.c:114 msgid "path to git-upload-pack on the remote" msgstr "път към командата „git-upload-pack“ на отдалеченото хранилище" -#: builtin/clone.c:97 builtin/fetch.c:120 builtin/grep.c:668 builtin/pull.c:202 +#: builtin/clone.c:115 builtin/fetch.c:120 builtin/grep.c:1006 +#: builtin/pull.c:202 msgid "depth" msgstr "ДЪЛБОЧИНА" -#: builtin/clone.c:98 +#: builtin/clone.c:116 msgid "create a shallow clone of that depth" msgstr "плитко клониране до тази ДЪЛБОЧИНА" -#: builtin/clone.c:99 builtin/fetch.c:122 builtin/pack-objects.c:2848 +#: builtin/clone.c:117 builtin/fetch.c:122 builtin/pack-objects.c:2918 #: parse-options.h:142 msgid "time" msgstr "ВРЕМЕ" -#: builtin/clone.c:100 +#: builtin/clone.c:118 msgid "create a shallow clone since a specific time" msgstr "плитко клониране до момент във времето" -#: builtin/clone.c:101 builtin/fetch.c:124 +#: builtin/clone.c:119 builtin/fetch.c:124 msgid "revision" msgstr "версия" -#: builtin/clone.c:102 builtin/fetch.c:125 -msgid "deepen history of shallow clone by excluding rev" +#: builtin/clone.c:120 builtin/fetch.c:125 +msgid "deepen history of shallow clone, excluding rev" msgstr "задълбочаване на историята на плитко хранилище до изключващ указател" -#: builtin/clone.c:104 +#: builtin/clone.c:122 msgid "clone only one branch, HEAD or --branch" msgstr "" "клониране само на един клон — или сочения от отдалечения „HEAD“, или изрично " "зададения с „--branch“" -#: builtin/clone.c:106 +#: builtin/clone.c:124 msgid "any cloned submodules will be shallow" msgstr "всички клонирани подмодули ще са плитки" -#: builtin/clone.c:107 builtin/init-db.c:484 +#: builtin/clone.c:125 builtin/init-db.c:484 msgid "gitdir" msgstr "СЛУЖЕБНА_ДИРЕКТОРИЯ" -#: builtin/clone.c:108 builtin/init-db.c:485 +#: builtin/clone.c:126 builtin/init-db.c:485 msgid "separate git dir from working tree" msgstr "отделна СЛУЖЕБНА_ДИРЕКТОРИЯ за git извън работното дърво" -#: builtin/clone.c:109 +#: builtin/clone.c:127 msgid "key=value" msgstr "КЛЮЧ=СТОЙНОСТ" -#: builtin/clone.c:110 +#: builtin/clone.c:128 msgid "set config inside the new repository" msgstr "задаване на настройките на новото хранилище" -#: builtin/clone.c:111 builtin/fetch.c:140 builtin/push.c:547 +#: builtin/clone.c:129 builtin/fetch.c:140 builtin/push.c:550 msgid "use IPv4 addresses only" msgstr "само адреси IPv4" -#: builtin/clone.c:113 builtin/fetch.c:142 builtin/push.c:549 +#: builtin/clone.c:131 builtin/fetch.c:142 builtin/push.c:552 msgid "use IPv6 addresses only" msgstr "само адреси IPv6" -#: builtin/clone.c:250 +#: builtin/clone.c:268 msgid "" "No directory name could be guessed.\n" "Please specify a directory on the command line" @@ -6237,43 +6763,43 @@ msgstr "" "Името на директорията не може да бъде отгатнато.\n" "Задайте директорията изрично на командния ред" -#: builtin/clone.c:303 +#: builtin/clone.c:321 #, c-format msgid "info: Could not add alternate for '%s': %s\n" msgstr "" "ПРЕДУПРЕЖДЕНИЕ: не може да се добави алтернативен източник на „%s“: %s\n" -#: builtin/clone.c:375 +#: builtin/clone.c:393 #, c-format msgid "failed to open '%s'" msgstr "директорията „%s“ не може да бъде отворена" -#: builtin/clone.c:383 +#: builtin/clone.c:401 #, c-format msgid "%s exists and is not a directory" msgstr "„%s“ съществува и не е директория" -#: builtin/clone.c:397 +#: builtin/clone.c:415 #, c-format msgid "failed to stat %s\n" msgstr "не може да бъде получена информация чрез „stat“ за „%s“\n" -#: builtin/clone.c:419 +#: builtin/clone.c:437 #, c-format msgid "failed to create link '%s'" msgstr "връзката „%s“ не може да бъде създадена" -#: builtin/clone.c:423 +#: builtin/clone.c:441 #, c-format msgid "failed to copy file to '%s'" msgstr "файлът не може да бъде копиран като „%s“" -#: builtin/clone.c:448 +#: builtin/clone.c:466 #, c-format msgid "done.\n" msgstr "действието завърши.\n" -#: builtin/clone.c:460 +#: builtin/clone.c:478 msgid "" "Clone succeeded, but checkout failed.\n" "You can inspect what was checked out with 'git status'\n" @@ -6284,104 +6810,103 @@ msgstr "" "клон в момента са изтеглени с командата „git status“. Можете да\n" "завършите изтеглянето на клона с командата „git checkout -f HEAD“.\n" -#: builtin/clone.c:537 +#: builtin/clone.c:555 #, c-format msgid "Could not find remote branch %s to clone." msgstr "" "Клонът „%s“ от отдалеченото хранилище, което клонирате,\n" "и който следва да бъде изтеглен, не съществува." -#: builtin/clone.c:632 +#: builtin/clone.c:650 msgid "remote did not send all necessary objects" msgstr "отдалеченото хранилище не изпрати всички необходими обекти." -# FIXME merge with next? -#: builtin/clone.c:648 +#: builtin/clone.c:666 #, c-format msgid "unable to update %s" msgstr "обектът „%s“ не може да бъде обновен" -#: builtin/clone.c:697 +#: builtin/clone.c:715 msgid "remote HEAD refers to nonexistent ref, unable to checkout.\n" msgstr "" "указателят „HEAD“ от отдалеченото хранилище сочи към нещо,\n" "което не съществува. Не може да се изтегли определен клон.\n" -#: builtin/clone.c:728 +#: builtin/clone.c:746 msgid "unable to checkout working tree" msgstr "работното дърво не може да бъде подготвено" -#: builtin/clone.c:768 +#: builtin/clone.c:786 msgid "unable to write parameters to config file" msgstr "настройките не могат да бъдат записани в конфигурационния файл" -#: builtin/clone.c:831 +#: builtin/clone.c:849 msgid "cannot repack to clean up" msgstr "не може да се извърши пакетиране за изчистване на файловете" -#: builtin/clone.c:833 +#: builtin/clone.c:851 msgid "cannot unlink temporary alternates file" msgstr "временният файл за алтернативни обекти не може да бъде изтрит" -#: builtin/clone.c:866 builtin/receive-pack.c:1895 +#: builtin/clone.c:884 builtin/receive-pack.c:1900 msgid "Too many arguments." msgstr "Прекалено много аргументи." -#: builtin/clone.c:870 +#: builtin/clone.c:888 msgid "You must specify a repository to clone." msgstr "Трябва да укажете кое хранилище искате да клонирате." -#: builtin/clone.c:883 +#: builtin/clone.c:901 #, c-format msgid "--bare and --origin %s options are incompatible." msgstr "опциите „--bare“ и „--origin %s“ са несъвместими." -#: builtin/clone.c:886 +#: builtin/clone.c:904 msgid "--bare and --separate-git-dir are incompatible." msgstr "опциите „--bare“ и „--separate-git-dir“ са несъвместими." -#: builtin/clone.c:899 +#: builtin/clone.c:917 #, c-format msgid "repository '%s' does not exist" msgstr "не съществува хранилище „%s“" -#: builtin/clone.c:905 builtin/fetch.c:1338 +#: builtin/clone.c:923 builtin/fetch.c:1337 #, c-format msgid "depth %s is not a positive number" msgstr "дълбочината трябва да е положително цяло число, а не „%s“" -#: builtin/clone.c:915 +#: builtin/clone.c:933 #, c-format msgid "destination path '%s' already exists and is not an empty directory." msgstr "целевият път „%s“ съществува и не е празна директория." -#: builtin/clone.c:925 +#: builtin/clone.c:943 #, c-format msgid "working tree '%s' already exists." msgstr "в „%s“ вече съществува работно дърво." -#: builtin/clone.c:940 builtin/clone.c:951 builtin/submodule--helper.c:657 -#: builtin/worktree.c:222 builtin/worktree.c:249 +#: builtin/clone.c:958 builtin/clone.c:969 builtin/difftool.c:252 +#: builtin/worktree.c:221 builtin/worktree.c:251 #, c-format msgid "could not create leading directories of '%s'" msgstr "родителските директории на „%s“ не могат да бъдат създадени" -#: builtin/clone.c:943 +#: builtin/clone.c:961 #, c-format msgid "could not create work tree dir '%s'" msgstr "работното дърво в „%s“ не може да бъде създадено." -#: builtin/clone.c:955 +#: builtin/clone.c:973 #, c-format msgid "Cloning into bare repository '%s'...\n" msgstr "Клониране и създаване на голо хранилище в „%s“…\n" -#: builtin/clone.c:957 +#: builtin/clone.c:975 #, c-format msgid "Cloning into '%s'...\n" msgstr "Клониране и създаване на хранилище в „%s“…\n" -#: builtin/clone.c:963 +#: builtin/clone.c:999 msgid "" "clone --recursive is not compatible with both --reference and --reference-if-" "able" @@ -6389,43 +6914,43 @@ msgstr "" "Опцията „--recursive“ е несъвместима с опциите „--reference“ и „--reference-" "if-able“" -#: builtin/clone.c:1019 +#: builtin/clone.c:1055 msgid "--depth is ignored in local clones; use file:// instead." msgstr "" "При локално клониране опцията „--depth“ се прескача. Ползвайте схемата " "„file://“." -#: builtin/clone.c:1021 +#: builtin/clone.c:1057 msgid "--shallow-since is ignored in local clones; use file:// instead." msgstr "" "При локално клониране опцията „--shallow-since“ се прескача. Ползвайте " "схемата „file://“." -#: builtin/clone.c:1023 +#: builtin/clone.c:1059 msgid "--shallow-exclude is ignored in local clones; use file:// instead." msgstr "" "При локално клониране опцията „--shallow-exclude“ се прескача. Ползвайте " "схемата „file://“." -#: builtin/clone.c:1026 +#: builtin/clone.c:1062 msgid "source repository is shallow, ignoring --local" msgstr "клонираното хранилище е плитко, затова опцията „--local“ се прескача" -#: builtin/clone.c:1031 +#: builtin/clone.c:1067 msgid "--local is ignored" msgstr "опцията „--local“ се прескача" -#: builtin/clone.c:1035 +#: builtin/clone.c:1071 #, c-format msgid "Don't know how to clone %s" msgstr "Не се поддържа клониране на връзки от вида „%s“ " -#: builtin/clone.c:1090 builtin/clone.c:1098 +#: builtin/clone.c:1126 builtin/clone.c:1134 #, c-format msgid "Remote branch %s not found in upstream %s" msgstr "Отдалеченият клон „%s“ липсва в клонираното хранилище „%s“" -#: builtin/clone.c:1101 +#: builtin/clone.c:1137 msgid "You appear to have cloned an empty repository." msgstr "Изглежда клонирахте празно хранилище." @@ -6623,11 +7148,6 @@ msgstr "заглавната част за автор в подаването msgid "malformed --author parameter" msgstr "неправилен параметър към опцията „--author“" -#: builtin/commit.c:611 -#, c-format -msgid "invalid date format: %s" -msgstr "неправилен формат на дата: %s" - #: builtin/commit.c:655 msgid "" "unable to select a comment character that is not used\n" @@ -6641,7 +7161,7 @@ msgstr "" msgid "could not lookup commit %s" msgstr "следното подаване не може да бъде открито: %s" -#: builtin/commit.c:704 builtin/shortlog.c:286 +#: builtin/commit.c:704 builtin/shortlog.c:294 #, c-format msgid "(reading log message from standard input)\n" msgstr "(изчитане на съобщението за подаване от стандартния вход)\n" @@ -6741,7 +7261,7 @@ msgstr "Индексът не може да бъде прочетен" msgid "Error building trees" msgstr "Грешка при изграждане на дърветата" -#: builtin/commit.c:969 builtin/tag.c:266 +#: builtin/commit.c:968 builtin/tag.c:273 #, c-format msgid "Please supply the message using either -m or -F option.\n" msgstr "Подайте съобщението с някоя от опциите „-m“ или „-F“.\n" @@ -6753,7 +7273,7 @@ msgstr "" "Опцията „--author '%s'“ не отговаря на форма̀та „Име <е-поща>“ и не съвпада с " "никой автор" -#: builtin/commit.c:1086 builtin/commit.c:1327 +#: builtin/commit.c:1086 builtin/commit.c:1325 #, c-format msgid "Invalid untracked files mode '%s'" msgstr "Неправилна стойност за неследените файлове: „%s“" @@ -6807,75 +7327,67 @@ msgid "No paths with --include/--only does not make sense." msgstr "Опциите „--include“ и „--only“ изискват аргументи." #: builtin/commit.c:1212 -msgid "Clever... amending the last one with dirty index." -msgstr "" -"Чудесно сте се сетили как да поправите съобщението на последното подаване " -"при\n" -"променен индекс. Споделете и с друг потребител трика с „git commit --amend -" -"o“." - -#: builtin/commit.c:1214 msgid "Explicit paths specified without -i or -o; assuming --only paths..." msgstr "" "Зададени са изрични пътища без опциите „-i“ или „-o“. Приема се, че все " "едно сте\n" "ползвали опцията „--only“ с ПЪТища…" -#: builtin/commit.c:1226 builtin/tag.c:474 +#: builtin/commit.c:1224 builtin/tag.c:551 #, c-format msgid "Invalid cleanup mode %s" msgstr "Несъществуващ режим на изчистване „%s“" -#: builtin/commit.c:1231 +#: builtin/commit.c:1229 msgid "Paths with -a does not make sense." msgstr "Опцията „-a“ е несъвместима със задаването на пътища." -#: builtin/commit.c:1341 builtin/commit.c:1617 +#: builtin/commit.c:1339 builtin/commit.c:1612 msgid "show status concisely" msgstr "кратка информация за състоянието" -#: builtin/commit.c:1343 builtin/commit.c:1619 +#: builtin/commit.c:1341 builtin/commit.c:1614 msgid "show branch information" msgstr "информация за клоните" -#: builtin/commit.c:1345 +#: builtin/commit.c:1343 msgid "version" msgstr "версия" -#: builtin/commit.c:1345 builtin/commit.c:1621 builtin/push.c:522 -#: builtin/worktree.c:440 +#: builtin/commit.c:1343 builtin/commit.c:1616 builtin/push.c:525 +#: builtin/worktree.c:448 msgid "machine-readable output" msgstr "формат на изхода за четене от програма" -#: builtin/commit.c:1348 builtin/commit.c:1623 +#: builtin/commit.c:1346 builtin/commit.c:1618 msgid "show status in long format (default)" msgstr "подробна информация за състоянието (стандартно)" -#: builtin/commit.c:1351 builtin/commit.c:1626 +#: builtin/commit.c:1349 builtin/commit.c:1621 msgid "terminate entries with NUL" msgstr "разделяне на елементите с нулевия знак „NUL“" -#: builtin/commit.c:1353 builtin/commit.c:1629 builtin/fast-export.c:981 -#: builtin/fast-export.c:984 builtin/tag.c:353 +#: builtin/commit.c:1351 builtin/commit.c:1624 builtin/fast-export.c:981 +#: builtin/fast-export.c:984 builtin/tag.c:411 msgid "mode" msgstr "РЕЖИМ" -#: builtin/commit.c:1354 builtin/commit.c:1629 +#: builtin/commit.c:1352 builtin/commit.c:1624 msgid "show untracked files, optional modes: all, normal, no. (Default: all)" msgstr "" "извеждане на неследените файлове. Възможните РЕЖИМи са „all“ (подробна " "информация), „normal“ (кратка информация), „no“ (без неследените файлове). " "Стандартният РЕЖИМ е: „all“." -#: builtin/commit.c:1357 +#: builtin/commit.c:1355 msgid "show ignored files" msgstr "извеждане на игнорираните файлове" -#: builtin/commit.c:1358 parse-options.h:155 +#: builtin/commit.c:1356 parse-options.h:155 msgid "when" msgstr "КОГА" -#: builtin/commit.c:1359 +#: builtin/commit.c:1357 msgid "" "ignore changes to submodules, optional when: all, dirty, untracked. " "(Default: all)" @@ -6884,205 +7396,205 @@ msgstr "" "една от „all“ (всички), „dirty“ (тези с неподадени промени), " "„untracked“ (неследени)" -#: builtin/commit.c:1361 +#: builtin/commit.c:1359 msgid "list untracked files in columns" msgstr "извеждане на неследените файлове в колони" -#: builtin/commit.c:1437 +#: builtin/commit.c:1435 msgid "couldn't look up newly created commit" msgstr "току що създаденото подаване не може да бъде открито" -#: builtin/commit.c:1439 +#: builtin/commit.c:1437 msgid "could not parse newly created commit" msgstr "току що създаденото подаване не може да бъде анализирано" -#: builtin/commit.c:1484 +#: builtin/commit.c:1482 msgid "detached HEAD" msgstr "несвързан връх „HEAD“" -#: builtin/commit.c:1487 +#: builtin/commit.c:1485 msgid " (root-commit)" msgstr " (начално подаване)" -#: builtin/commit.c:1587 +#: builtin/commit.c:1582 msgid "suppress summary after successful commit" msgstr "без информация след успешно подаване" -#: builtin/commit.c:1588 +#: builtin/commit.c:1583 msgid "show diff in commit message template" msgstr "добавяне на разликата към шаблона за съобщението при подаване" -#: builtin/commit.c:1590 +#: builtin/commit.c:1585 msgid "Commit message options" msgstr "Опции за съобщението при подаване" -#: builtin/commit.c:1591 builtin/tag.c:351 +#: builtin/commit.c:1586 builtin/tag.c:409 msgid "read message from file" msgstr "взимане на съобщението от ФАЙЛ" -#: builtin/commit.c:1592 +#: builtin/commit.c:1587 msgid "author" msgstr "АВТОР" -#: builtin/commit.c:1592 +#: builtin/commit.c:1587 msgid "override author for commit" msgstr "задаване на АВТОР за подаването" -#: builtin/commit.c:1593 builtin/gc.c:326 +#: builtin/commit.c:1588 builtin/gc.c:357 msgid "date" msgstr "ДАТА" -#: builtin/commit.c:1593 +#: builtin/commit.c:1588 msgid "override date for commit" msgstr "задаване на ДАТА за подаването" -#: builtin/commit.c:1594 builtin/merge.c:220 builtin/notes.c:398 -#: builtin/notes.c:561 builtin/tag.c:349 +#: builtin/commit.c:1589 builtin/merge.c:221 builtin/notes.c:398 +#: builtin/notes.c:561 builtin/tag.c:407 msgid "message" msgstr "СЪОБЩЕНИЕ" -#: builtin/commit.c:1594 +#: builtin/commit.c:1589 msgid "commit message" msgstr "СЪОБЩЕНИЕ при подаване" -#: builtin/commit.c:1595 builtin/commit.c:1596 builtin/commit.c:1597 -#: builtin/commit.c:1598 parse-options.h:257 ref-filter.h:79 +#: builtin/commit.c:1590 builtin/commit.c:1591 builtin/commit.c:1592 +#: builtin/commit.c:1593 parse-options.h:257 ref-filter.h:77 msgid "commit" msgstr "ПОДАВАНЕ" -#: builtin/commit.c:1595 +#: builtin/commit.c:1590 msgid "reuse and edit message from specified commit" msgstr "преизползване и редактиране на съобщението от указаното ПОДАВАНЕ" -#: builtin/commit.c:1596 +#: builtin/commit.c:1591 msgid "reuse message from specified commit" msgstr "преизползване на съобщението от указаното ПОДАВАНЕ" -#: builtin/commit.c:1597 +#: builtin/commit.c:1592 msgid "use autosquash formatted message to fixup specified commit" msgstr "" "използване на автоматичното съобщение при смачкване за вкарване на указаното " "ПОДАВАНЕ в предното без следа" -#: builtin/commit.c:1598 +#: builtin/commit.c:1593 msgid "use autosquash formatted message to squash specified commit" msgstr "" "използване на автоматичното съобщение при смачкване за смачкване на " "указаното ПОДАВАНЕ в предното" -#: builtin/commit.c:1599 +#: builtin/commit.c:1594 msgid "the commit is authored by me now (used with -C/-c/--amend)" msgstr "" "смяна на автора да съвпада с подаващия (използва се с „-C“/„-c“/„--amend“)" -#: builtin/commit.c:1600 builtin/log.c:1413 builtin/revert.c:86 +#: builtin/commit.c:1595 builtin/log.c:1420 builtin/revert.c:104 msgid "add Signed-off-by:" msgstr "добавяне на поле за подпис — „Signed-off-by:“" -#: builtin/commit.c:1601 +#: builtin/commit.c:1596 msgid "use specified template file" msgstr "използване на указания шаблонен ФАЙЛ" -#: builtin/commit.c:1602 +#: builtin/commit.c:1597 msgid "force edit of commit" msgstr "редактиране на подаване" -#: builtin/commit.c:1603 +#: builtin/commit.c:1598 msgid "default" msgstr "стандартно" -#: builtin/commit.c:1603 builtin/tag.c:354 +#: builtin/commit.c:1598 builtin/tag.c:412 msgid "how to strip spaces and #comments from message" msgstr "кои празни знаци и #коментари да се махат от съобщенията" -#: builtin/commit.c:1604 +#: builtin/commit.c:1599 msgid "include status in commit message template" msgstr "вмъкване на състоянието в шаблона за съобщението при подаване" -#: builtin/commit.c:1606 builtin/merge.c:230 builtin/pull.c:166 -#: builtin/revert.c:93 +#: builtin/commit.c:1601 builtin/merge.c:233 builtin/pull.c:166 +#: builtin/revert.c:112 msgid "GPG sign commit" msgstr "подписване на подаването с GPG" -#: builtin/commit.c:1609 +#: builtin/commit.c:1604 msgid "Commit contents options" msgstr "Опции за избор на файлове при подаване" -#: builtin/commit.c:1610 +#: builtin/commit.c:1605 msgid "commit all changed files" msgstr "подаване на всички променени файлове" -#: builtin/commit.c:1611 +#: builtin/commit.c:1606 msgid "add specified files to index for commit" msgstr "добавяне на указаните файлове към индекса за подаване" -#: builtin/commit.c:1612 +#: builtin/commit.c:1607 msgid "interactively add files" msgstr "интерактивно добавяне на файлове" -#: builtin/commit.c:1613 +#: builtin/commit.c:1608 msgid "interactively add changes" msgstr "интерактивно добавяне на промени" -#: builtin/commit.c:1614 +#: builtin/commit.c:1609 msgid "commit only specified files" msgstr "подаване само на указаните файлове" -#: builtin/commit.c:1615 +#: builtin/commit.c:1610 msgid "bypass pre-commit and commit-msg hooks" msgstr "" "без изпълнение на куките преди подаване и при промяна на съобщението за " "подаване (pre-commit и commit-msg)" -#: builtin/commit.c:1616 +#: builtin/commit.c:1611 msgid "show what would be committed" msgstr "отпечатване на това, което би било подадено" -#: builtin/commit.c:1627 +#: builtin/commit.c:1622 msgid "amend previous commit" msgstr "поправяне на предишното подаване" -#: builtin/commit.c:1628 +#: builtin/commit.c:1623 msgid "bypass post-rewrite hook" msgstr "без изпълнение на куката след презаписване (post-rewrite)" -#: builtin/commit.c:1633 +#: builtin/commit.c:1628 msgid "ok to record an empty change" msgstr "позволяване на празни подавания" -#: builtin/commit.c:1635 +#: builtin/commit.c:1630 msgid "ok to record a change with an empty message" msgstr "позволяване на подавания с празни съобщения" -#: builtin/commit.c:1664 +#: builtin/commit.c:1659 msgid "could not parse HEAD commit" msgstr "върховото подаване „HEAD“ не може да бъде прочетено" -#: builtin/commit.c:1712 +#: builtin/commit.c:1707 #, c-format msgid "Corrupt MERGE_HEAD file (%s)" msgstr "Повреден файл за върха за сливането „MERGE_HEAD“ (%s)" -#: builtin/commit.c:1719 +#: builtin/commit.c:1714 msgid "could not read MERGE_MODE" msgstr "режимът на сливане „MERGE_MODE“ не може да бъде прочетен" -#: builtin/commit.c:1738 +#: builtin/commit.c:1733 #, c-format msgid "could not read commit message: %s" msgstr "съобщението за подаване не може да бъде прочетено: %s" -#: builtin/commit.c:1749 +#: builtin/commit.c:1744 #, c-format msgid "Aborting commit; you did not edit the message.\n" msgstr "Неизвършване на подаване поради нередактирано съобщение.\n" -#: builtin/commit.c:1754 +#: builtin/commit.c:1749 #, c-format msgid "Aborting commit due to empty commit message.\n" msgstr "Неизвършване на подаване поради празно съобщение.\n" -#: builtin/commit.c:1802 +#: builtin/commit.c:1797 msgid "" "Repository has been updated, but unable to write\n" "new_index file. Check that disk is not full and quota is\n" @@ -7096,146 +7608,146 @@ msgstr "" msgid "git config []" msgstr "git config [ОПЦИЯ…]" -#: builtin/config.c:55 +#: builtin/config.c:56 msgid "Config file location" msgstr "Местоположение на конфигурационния файл" -#: builtin/config.c:56 +#: builtin/config.c:57 msgid "use global config file" msgstr "използване на глобалния конфигурационен файл" -#: builtin/config.c:57 +#: builtin/config.c:58 msgid "use system config file" msgstr "използване на системния конфигурационен файл" -#: builtin/config.c:58 +#: builtin/config.c:59 msgid "use repository config file" msgstr "използване на конфигурационния файл на хранилището" -#: builtin/config.c:59 +#: builtin/config.c:60 msgid "use given config file" msgstr "използване на зададения конфигурационен ФАЙЛ" -#: builtin/config.c:60 +#: builtin/config.c:61 msgid "blob-id" msgstr "ИДЕНТИФИКАТОР" -#: builtin/config.c:60 +#: builtin/config.c:61 msgid "read config from given blob object" msgstr "" "изчитане на конфигурацията от BLOB с този ИДЕНТИФИКАТОР на съдържанието" -#: builtin/config.c:61 +#: builtin/config.c:62 msgid "Action" msgstr "Действие" -#: builtin/config.c:62 +#: builtin/config.c:63 msgid "get value: name [value-regex]" msgstr "извеждане на стойност: ИМЕ [РЕГУЛЯРЕН_ИЗРАЗ_ЗА_СТОЙНОСТТА]" -#: builtin/config.c:63 +#: builtin/config.c:64 msgid "get all values: key [value-regex]" msgstr "извеждане на всички стойности: ключ [РЕГУЛЯРЕН_ИЗРАЗ_ЗА_СТОЙНОСТТА]" -#: builtin/config.c:64 +#: builtin/config.c:65 msgid "get values for regexp: name-regex [value-regex]" msgstr "" "извеждане на стойностите за РЕГУЛЯРНия_ИЗРАЗ: РЕГУЛЯРЕН_ИЗРАЗ_ЗА_ИМЕТО " "[РЕГУЛЯРЕН_ИЗРАЗ_ЗА_СТОЙНОСТТА]" -#: builtin/config.c:65 +#: builtin/config.c:66 msgid "get value specific for the URL: section[.var] URL" msgstr "извеждане на стойността за указания адрес: РАЗДЕЛ[.ПРОМЕНЛИВА] АДРЕС" -#: builtin/config.c:66 +#: builtin/config.c:67 msgid "replace all matching variables: name value [value_regex]" msgstr "" "замяна на всички съвпадащи променливи: ИМЕ СТОЙНОСТ " "[РЕГУЛЯРЕН_ИЗРАЗ_ЗА_СТОЙНОСТТА]" -#: builtin/config.c:67 +#: builtin/config.c:68 msgid "add a new variable: name value" msgstr "добавяне на нова променлива: ИМЕ СТОЙНОСТ" -#: builtin/config.c:68 +#: builtin/config.c:69 msgid "remove a variable: name [value-regex]" msgstr "изтриване на променлива: ИМЕ [РЕГУЛЯРЕН_ИЗРАЗ_ЗА_СТОЙНОСТТА]" -#: builtin/config.c:69 +#: builtin/config.c:70 msgid "remove all matches: name [value-regex]" msgstr "изтриване на всички съвпадащи: ИМЕ [РЕГУЛЯРЕН_ИЗРАЗ_ЗА_СТОЙНОСТТА]" -#: builtin/config.c:70 +#: builtin/config.c:71 msgid "rename section: old-name new-name" msgstr "преименуване на раздел: СТАРО_ИМЕ НОВО_ИМЕ" -#: builtin/config.c:71 +#: builtin/config.c:72 msgid "remove a section: name" msgstr "изтриване на раздел: ИМЕ" -#: builtin/config.c:72 +#: builtin/config.c:73 msgid "list all" msgstr "изброяване на всички" -#: builtin/config.c:73 +#: builtin/config.c:74 msgid "open an editor" msgstr "отваряне на редактор" -#: builtin/config.c:74 +#: builtin/config.c:75 msgid "find the color configured: slot [default]" msgstr "извеждане на зададения цвят: номер [стандартно]" -#: builtin/config.c:75 +#: builtin/config.c:76 msgid "find the color setting: slot [stdout-is-tty]" msgstr "извеждане на зададения цвят: номер [стандартният изход е терминал]" -#: builtin/config.c:76 +#: builtin/config.c:77 msgid "Type" msgstr "Вид" -#: builtin/config.c:77 +#: builtin/config.c:78 msgid "value is \"true\" or \"false\"" msgstr "СТОЙНОСТТА е „true“ (истина) или „false“ (лъжа)" -#: builtin/config.c:78 +#: builtin/config.c:79 msgid "value is decimal number" msgstr "СТОЙНОСТТА е цяло, десетично число" -#: builtin/config.c:79 +#: builtin/config.c:80 msgid "value is --bool or --int" msgstr "СТОЙНОСТТА е „--bool“ (булева) или „--int“ (десетично цяло число)" -#: builtin/config.c:80 +#: builtin/config.c:81 msgid "value is a path (file or directory name)" msgstr "СТОЙНОСТТА е път (до файл или директория)" -#: builtin/config.c:81 +#: builtin/config.c:82 msgid "Other" msgstr "Други" -#: builtin/config.c:82 +#: builtin/config.c:83 msgid "terminate values with NUL byte" msgstr "разделяне на стойностите с нулевия знак „NUL“" -#: builtin/config.c:83 +#: builtin/config.c:84 msgid "show variable names only" msgstr "извеждане на имената на променливите" -#: builtin/config.c:84 +#: builtin/config.c:85 msgid "respect include directives on lookup" msgstr "при търсене да се уважат и директивите за включване" -#: builtin/config.c:85 +#: builtin/config.c:86 msgid "show origin of config (file, standard input, blob, command line)" msgstr "" "извеждане на мястото на задаване на настройката (файл, стандартен вход, " "обект BLOB, команден ред)" -#: builtin/config.c:327 +#: builtin/config.c:328 msgid "unable to parse default color value" msgstr "неразпозната стойност на стандартния цвят" -#: builtin/config.c:471 +#: builtin/config.c:472 #, c-format msgid "" "# This is Git's per-user configuration file.\n" @@ -7250,19 +7762,19 @@ msgstr "" "#\tname = %s\n" "#\temail = %s\n" -#: builtin/config.c:613 +#: builtin/config.c:615 #, c-format msgid "cannot create configuration file %s" msgstr "конфигурационният файл „%s“ не може да бъде създаден" -#: builtin/config.c:625 +#: builtin/config.c:627 #, c-format msgid "" "cannot overwrite multiple values with a single value\n" " Use a regexp, --add or --replace-all to change %s." msgstr "" "множество стойности не могат да се заменят с една.\n" -"За да промените „%s“, ползвайте регулярен израз или оциите „--add“ и „--" +"За да промените „%s“, ползвайте регулярен израз или опциите „--add“ и „--" "replace-all“." #: builtin/count-objects.c:86 @@ -7273,55 +7785,67 @@ msgstr "git count-objects [-v] [-H | --human-readable]" msgid "print sizes in human readable format" msgstr "извеждане на размерите на обектите във формат лесно четим от хора" -#: builtin/describe.c:17 +#: builtin/describe.c:18 msgid "git describe [] [...]" msgstr "git describe [ОПЦИЯ…] УКАЗАТЕЛ_КЪМ_ПОДАВАНЕ…" -#: builtin/describe.c:18 +#: builtin/describe.c:19 msgid "git describe [] --dirty" msgstr "git describe [ОПЦИЯ…] --dirty" -#: builtin/describe.c:217 +#: builtin/describe.c:53 +msgid "head" +msgstr "основно" + +#: builtin/describe.c:53 +msgid "lightweight" +msgstr "кратко" + +#: builtin/describe.c:53 +msgid "annotated" +msgstr "анотирано" + +#: builtin/describe.c:250 #, c-format msgid "annotated tag %s not available" msgstr "не съществува анотиран етикет „%s“" -#: builtin/describe.c:221 +#: builtin/describe.c:254 #, c-format msgid "annotated tag %s has no embedded name" msgstr "в анотирания етикет „%s“ липсва вградено име" -#: builtin/describe.c:223 +#: builtin/describe.c:256 #, c-format msgid "tag '%s' is really '%s' here" msgstr "етикетът „%s“ тук е всъщност „%s“" -#: builtin/describe.c:250 builtin/log.c:480 +#: builtin/describe.c:283 builtin/log.c:487 #, c-format msgid "Not a valid object name %s" msgstr "Неправилно име на обект „%s“" -#: builtin/describe.c:253 +#: builtin/describe.c:286 #, c-format msgid "%s is not a valid '%s' object" msgstr "„%s“ е неправилен обект „%s“" -#: builtin/describe.c:270 +#: builtin/describe.c:303 #, c-format msgid "no tag exactly matches '%s'" msgstr "никой етикет не напасва точно „%s“" -#: builtin/describe.c:272 +#: builtin/describe.c:305 #, c-format msgid "searching to describe %s\n" msgstr "търсене за описание на „%s“\n" -#: builtin/describe.c:319 +#: builtin/describe.c:352 #, c-format msgid "finished search at %s\n" msgstr "търсенето приключи при „%s“\n" -#: builtin/describe.c:346 +#: builtin/describe.c:379 #, c-format msgid "" "No annotated tags can describe '%s'.\n" @@ -7330,7 +7854,7 @@ msgstr "" "Никой анотиран етикет не описва „%s“.\n" "Съществуват и неанотирани етикети. Пробвайте с опцията „--tags“." -#: builtin/describe.c:350 +#: builtin/describe.c:383 #, c-format msgid "" "No tags can describe '%s'.\n" @@ -7339,13 +7863,12 @@ msgstr "" "Никой етикет не описва „%s“.\n" "Пробвайте с опцията „--always“ или създайте етикети." -# FIXME - plural -#: builtin/describe.c:371 +#: builtin/describe.c:413 #, c-format msgid "traversed %lu commits\n" msgstr "претърсени са %lu подавания\n" -#: builtin/describe.c:374 +#: builtin/describe.c:416 #, c-format msgid "" "more than %i tags found; listed %i most recent\n" @@ -7354,97 +7877,214 @@ msgstr "" "открити са над %i етикета, изведени са последните %i,\n" "търсенето бе прекратено при „%s“.\n" -#: builtin/describe.c:396 +#: builtin/describe.c:438 msgid "find the tag that comes after the commit" msgstr "откриване на етикета, който следва подаване" -#: builtin/describe.c:397 +#: builtin/describe.c:439 msgid "debug search strategy on stderr" msgstr "" "извеждане на информация за трасиране на стратегията за търсене на " "стандартната грешка" -#: builtin/describe.c:398 +#: builtin/describe.c:440 msgid "use any ref" msgstr "използване на произволен указател" -#: builtin/describe.c:399 +#: builtin/describe.c:441 msgid "use any tag, even unannotated" msgstr "използване на всеки етикет — включително и неанотираните" -#: builtin/describe.c:400 +#: builtin/describe.c:442 msgid "always use long format" msgstr "винаги да се ползва дългият формат" -#: builtin/describe.c:401 +#: builtin/describe.c:443 msgid "only follow first parent" msgstr "проследяване само на първия родител" -#: builtin/describe.c:404 +#: builtin/describe.c:446 msgid "only output exact matches" msgstr "извеждане само на точните съвпадения" -#: builtin/describe.c:406 +#: builtin/describe.c:448 msgid "consider most recent tags (default: 10)" msgstr "да се търси само в този БРОЙ последни етикети (стандартно: 10)" -#: builtin/describe.c:408 +#: builtin/describe.c:450 msgid "only consider tags matching " msgstr "да се търси само измежду етикетите напасващи този ШАБЛОН" -#: builtin/describe.c:410 builtin/name-rev.c:320 +#: builtin/describe.c:452 +msgid "do not consider tags matching " +msgstr "да не се търси измежду етикетите напасващи този ШАБЛОН" + +#: builtin/describe.c:454 builtin/name-rev.c:357 msgid "show abbreviated commit object as fallback" msgstr "извеждане на съкратено име на обект като резервен вариант" -#: builtin/describe.c:411 +#: builtin/describe.c:455 builtin/describe.c:458 msgid "mark" msgstr "МАРКЕР" -#: builtin/describe.c:412 +#: builtin/describe.c:456 msgid "append on dirty working tree (default: \"-dirty\")" msgstr "добавяне на такъв МАРКЕР на работното дърво (стандартно е „-dirty“)" -#: builtin/describe.c:430 +#: builtin/describe.c:459 +msgid "append on broken working tree (default: \"-broken\")" +msgstr "" +"добавяне на такъв МАРКЕР на счупеното работно дърво (стандартно е „-broken“)" + +#: builtin/describe.c:477 msgid "--long is incompatible with --abbrev=0" msgstr "Опциите „--long“ и „--abbrev=0“ са несъвместими" -#: builtin/describe.c:456 +#: builtin/describe.c:506 msgid "No names found, cannot describe anything." msgstr "Не са открити имена — нищо не може да бъде описано." -#: builtin/describe.c:476 +#: builtin/describe.c:549 msgid "--dirty is incompatible with commit-ishes" msgstr "опцията „--dirty“ е несъвместима с указател към подаване" -#: builtin/diff.c:86 +#: builtin/describe.c:551 +msgid "--broken is incompatible with commit-ishes" +msgstr "опцията „--broken“ е несъвместима с указател към подаване" + +#: builtin/diff.c:83 #, c-format msgid "'%s': not a regular file or symlink" msgstr "„%s“: не е нито обикновен файл, нито символна връзка" -#: builtin/diff.c:237 +#: builtin/diff.c:234 #, c-format msgid "invalid option: %s" msgstr "неправилна опция: %s" -#: builtin/diff.c:361 +#: builtin/diff.c:358 msgid "Not a git repository" msgstr "Не е хранилище на Git" -#: builtin/diff.c:404 +#: builtin/diff.c:401 #, c-format msgid "invalid object '%s' given." msgstr "зададен е неправилен обект „%s“." -#: builtin/diff.c:413 +#: builtin/diff.c:410 #, c-format msgid "more than two blobs given: '%s'" msgstr "зададени са повече от 2 обекта BLOB: „%s“" -#: builtin/diff.c:420 +#: builtin/diff.c:417 #, c-format msgid "unhandled object '%s' given." msgstr "зададен е неподдържан обект „%s“." +#: builtin/difftool.c:28 +msgid "git difftool [] [ []] [--] [...]" +msgstr "git difftool [ОПЦИЯ…] [ПОДАВАНЕ [ПОДАВАНЕ]] [[--] ПЪТ…]" + +#: builtin/difftool.c:241 +#, c-format +msgid "failed: %d" +msgstr "неуспешно действие с изходен код: %d" + +#: builtin/difftool.c:283 +#, c-format +msgid "could not read symlink %s" +msgstr "символната връзка „%s“ не може да бъде прочетена" + +#: builtin/difftool.c:285 +#, c-format +msgid "could not read symlink file %s" +msgstr "файлът, сочен от символната връзка „%s“, не може да бъде прочетен" + +#: builtin/difftool.c:293 +#, c-format +msgid "could not read object %s for symlink %s" +msgstr "обектът „%s“ за символната връзка „%s“ не може да бъде прочетен" + +#: builtin/difftool.c:395 +msgid "" +"combined diff formats('-c' and '--cc') are not supported in\n" +"directory diff mode('-d' and '--dir-diff')." +msgstr "" +"комбинираните формати на разликите („-c“ и „--cc“) не се поддържат\n" +"в режима за разлики върху директории („-d“ и „--dir-diff“)." + +#: builtin/difftool.c:609 +#, c-format +msgid "both files modified: '%s' and '%s'." +msgstr "и двата файла са променени: „%s“ и „%s“." + +#: builtin/difftool.c:611 +msgid "working tree file has been left." +msgstr "работното дърво е изоставено." + +#: builtin/difftool.c:622 +#, c-format +msgid "temporary files exist in '%s'." +msgstr "в „%s“ има временни файлове." + +#: builtin/difftool.c:623 +msgid "you may want to cleanup or recover these." +msgstr "възможно е да ги изчистите или възстановите" + +#: builtin/difftool.c:669 +msgid "use `diff.guitool` instead of `diff.tool`" +msgstr "използвайте „diff.guitool“ вместо „diff.tool“" + +#: builtin/difftool.c:671 +msgid "perform a full-directory diff" +msgstr "разлика по директории" + +#: builtin/difftool.c:673 +msgid "do not prompt before launching a diff tool" +msgstr "стартиране на ПРОГРАМАта за разлики без предупреждение" + +#: builtin/difftool.c:679 +msgid "use symlinks in dir-diff mode" +msgstr "следване на символните връзки при разлика по директории" + +#: builtin/difftool.c:680 +msgid "" +msgstr "ПРОГРАМА" + +#: builtin/difftool.c:681 +msgid "use the specified diff tool" +msgstr "използване на указаната ПРОГРАМА" + +#: builtin/difftool.c:683 +msgid "print a list of diff tools that may be used with `--tool`" +msgstr "" +"извеждане на списък с всички ПРОГРАМи, които може да се ползват с опцията „--" +"tool“" + +#: builtin/difftool.c:686 +msgid "" +"make 'git-difftool' exit when an invoked diff tool returns a non - zero exit " +"code" +msgstr "" +"„git-difftool“ да спре работа, когато стартираната ПРОГРАМА завърши с " +"ненулев код" + +#: builtin/difftool.c:688 +msgid "" +msgstr "КОМАНДА" + +#: builtin/difftool.c:689 +msgid "specify a custom command for viewing diffs" +msgstr "команда за разглеждане на разлики" + +#: builtin/difftool.c:713 +msgid "no given for --tool=" +msgstr "не е зададена програма за „--tool=ПРОГРАМА“" + +#: builtin/difftool.c:720 +msgid "no given for --extcmd=" +msgstr "не е зададена команда за „--extcmd=КОМАНДА“" + #: builtin/fast-export.c:25 msgid "git fast-export [rev-list-opts]" msgstr "git fast-export [ОПЦИИ_ЗА_СПИСЪКА_С_ВЕРСИИ]" @@ -7577,7 +8217,7 @@ msgstr "задълбочаване на историята на плитко х msgid "convert to a complete repository" msgstr "превръщане в пълно хранилище" -#: builtin/fetch.c:131 builtin/log.c:1433 +#: builtin/fetch.c:131 builtin/log.c:1440 msgid "dir" msgstr "директория" @@ -7601,79 +8241,79 @@ msgstr "КАРТА_С_УКАЗАТЕЛИ" msgid "specify fetch refmap" msgstr "указване на КАРТАта_С_УКАЗАТЕЛИ за доставяне" -#: builtin/fetch.c:398 +#: builtin/fetch.c:395 msgid "Couldn't find remote ref HEAD" msgstr "Указателят „HEAD“ в отдалеченото хранилище не може да бъде открит" -#: builtin/fetch.c:514 +#: builtin/fetch.c:513 #, c-format msgid "configuration fetch.output contains invalid value %s" msgstr "настройката „fetch.output“ е с неправилна стойност „%s“" -#: builtin/fetch.c:607 +#: builtin/fetch.c:606 #, c-format msgid "object %s not found" msgstr "обектът „%s“ липсва" -#: builtin/fetch.c:611 +#: builtin/fetch.c:610 msgid "[up to date]" msgstr "[актуализиран]" -#: builtin/fetch.c:624 builtin/fetch.c:704 +#: builtin/fetch.c:623 builtin/fetch.c:703 msgid "[rejected]" msgstr "[отхвърлен]" -#: builtin/fetch.c:625 +#: builtin/fetch.c:624 msgid "can't fetch in current branch" msgstr "в текущия клон не може да се доставя" -#: builtin/fetch.c:634 +#: builtin/fetch.c:633 msgid "[tag update]" msgstr "[обновяване на етикетите]" -#: builtin/fetch.c:635 builtin/fetch.c:668 builtin/fetch.c:684 -#: builtin/fetch.c:699 +#: builtin/fetch.c:634 builtin/fetch.c:667 builtin/fetch.c:683 +#: builtin/fetch.c:698 msgid "unable to update local ref" msgstr "локален указател не може да бъде обновен" -#: builtin/fetch.c:654 +#: builtin/fetch.c:653 msgid "[new tag]" msgstr "[нов етикет]" -#: builtin/fetch.c:657 +#: builtin/fetch.c:656 msgid "[new branch]" msgstr "[нов клон]" -#: builtin/fetch.c:660 +#: builtin/fetch.c:659 msgid "[new ref]" msgstr "[нов указател]" -#: builtin/fetch.c:699 +#: builtin/fetch.c:698 msgid "forced update" msgstr "принудително обновяване" -#: builtin/fetch.c:704 +#: builtin/fetch.c:703 msgid "non-fast-forward" -msgstr "сливането не е тривиално" +msgstr "същинско сливане" -#: builtin/fetch.c:749 +#: builtin/fetch.c:748 #, c-format msgid "%s did not send all necessary objects\n" msgstr "хранилището „%s“ не изпрати всички необходими обекти\n" -#: builtin/fetch.c:769 +#: builtin/fetch.c:768 #, c-format msgid "reject %s because shallow roots are not allowed to be updated" msgstr "" "отхвърляне на върха „%s“, защото плитките хранилища не могат да бъдат " "обновявани" -#: builtin/fetch.c:856 builtin/fetch.c:952 +#: builtin/fetch.c:855 builtin/fetch.c:951 #, c-format msgid "From %.*s\n" msgstr "От %.*s\n" -#: builtin/fetch.c:867 +#: builtin/fetch.c:866 #, c-format msgid "" "some local refs could not be updated; try running\n" @@ -7683,55 +8323,55 @@ msgstr "" "„git remote prune %s“, за да премахнете остарелите клони, които\n" "предизвикват конфликта" -#: builtin/fetch.c:922 +#: builtin/fetch.c:921 #, c-format msgid " (%s will become dangling)" msgstr " (обектът „%s“ ще се окаже извън клон)" -#: builtin/fetch.c:923 +#: builtin/fetch.c:922 #, c-format msgid " (%s has become dangling)" msgstr " (обектът „%s“ вече е извън клон)" -#: builtin/fetch.c:955 +#: builtin/fetch.c:954 msgid "[deleted]" msgstr "[изтрит]" -#: builtin/fetch.c:956 builtin/remote.c:1020 +#: builtin/fetch.c:955 builtin/remote.c:1022 msgid "(none)" msgstr "(нищо)" -#: builtin/fetch.c:979 +#: builtin/fetch.c:978 #, c-format msgid "Refusing to fetch into current branch %s of non-bare repository" msgstr "Не може да доставите в текущия клон „%s“ на хранилище, което не е голо" -#: builtin/fetch.c:998 +#: builtin/fetch.c:997 #, c-format msgid "Option \"%s\" value \"%s\" is not valid for %s" msgstr "Стойността „%2$s“ за опцията „%1$s“ не е съвместима с „%3$s“" -#: builtin/fetch.c:1001 +#: builtin/fetch.c:1000 #, c-format msgid "Option \"%s\" is ignored for %s\n" msgstr "Опцията „%s“ се прескача при „%s“\n" -#: builtin/fetch.c:1077 +#: builtin/fetch.c:1076 #, c-format msgid "Don't know how to fetch from %s" msgstr "Не се поддържа доставяне от „%s“" -#: builtin/fetch.c:1237 +#: builtin/fetch.c:1236 #, c-format msgid "Fetching %s\n" msgstr "Доставяне на „%s“\n" -#: builtin/fetch.c:1239 builtin/remote.c:96 +#: builtin/fetch.c:1238 builtin/remote.c:96 #, c-format msgid "Could not fetch %s" msgstr "„%s“ не може да се достави" -#: builtin/fetch.c:1257 +#: builtin/fetch.c:1256 msgid "" "No remote repository specified. Please, specify either a URL or a\n" "remote name from which new revisions should be fetched." @@ -7739,41 +8379,41 @@ msgstr "" "Не сте указали отдалечено хранилище. Задайте или адрес, или име\n" "на отдалечено хранилище, откъдето да се доставят новите версии." -#: builtin/fetch.c:1280 +#: builtin/fetch.c:1279 msgid "You need to specify a tag name." msgstr "Трябва да укажете име на етикет." -#: builtin/fetch.c:1322 +#: builtin/fetch.c:1321 msgid "Negative depth in --deepen is not supported" msgstr "Отрицателна дълбочина като аргумент на „--deepen“ не се поддържа" -#: builtin/fetch.c:1324 +#: builtin/fetch.c:1323 msgid "--deepen and --depth are mutually exclusive" msgstr "Опциите „--deepen“ и „--depth“ са несъвместими една с друга" -#: builtin/fetch.c:1329 +#: builtin/fetch.c:1328 msgid "--depth and --unshallow cannot be used together" msgstr "опциите „--depth“ и „--unshallow“ са несъвместими" -#: builtin/fetch.c:1331 +#: builtin/fetch.c:1330 msgid "--unshallow on a complete repository does not make sense" msgstr "не можете да използвате опцията „--unshallow“ върху пълно хранилище" -#: builtin/fetch.c:1353 +#: builtin/fetch.c:1352 msgid "fetch --all does not take a repository argument" msgstr "към „git fetch --all“ не можете да добавите аргумент — хранилище" -#: builtin/fetch.c:1355 +#: builtin/fetch.c:1354 msgid "fetch --all does not make sense with refspecs" msgstr "" "към „git fetch --all“ не можете да добавите аргумент — указател на версия" -#: builtin/fetch.c:1366 +#: builtin/fetch.c:1365 #, c-format msgid "No such remote or remote group: %s" msgstr "Няма нито отдалечено хранилище, нито група от хранилища на име „%s“" -#: builtin/fetch.c:1374 +#: builtin/fetch.c:1373 msgid "Fetching a group and specifying refspecs does not make sense" msgstr "Указването на група и указването на версия са несъвместими" @@ -7814,12 +8454,12 @@ msgid "git for-each-ref [--points-at ]" msgstr "git for-each-ref [--points ОБЕКТ]" #: builtin/for-each-ref.c:11 -msgid "git for-each-ref [(--merged | --no-merged) []]" -msgstr "git for-each-ref[(--merged | --no-merged) [ОБЕКТ]]" +msgid "git for-each-ref [(--merged | --no-merged) []]" +msgstr "git for-each-ref[(--merged | --no-merged) [ПОДАВАНЕ]]" #: builtin/for-each-ref.c:12 -msgid "git for-each-ref [--contains []]" -msgstr "git for-each-ref [--contains ОБЕКТ]" +msgid "git for-each-ref [--contains []] [--no-contains []]" +msgstr "git for-each-ref [--contains [ПОДАВАНЕ]] [--no-contains [ПОДАВАНЕ]]" #: builtin/for-each-ref.c:27 msgid "quote placeholders suitably for shells" @@ -7841,10 +8481,6 @@ msgstr "цитиране подходящо за tcl" msgid "show only matched refs" msgstr "извеждане само на този БРОЙ напаснати указатели" -#: builtin/for-each-ref.c:37 builtin/tag.c:372 -msgid "format to use for the output" -msgstr "ФОРМАТ за изхода" - #: builtin/for-each-ref.c:41 msgid "print only refs which points at the given object" msgstr "извеждане само на указателите, сочещи към ОБЕКТА" @@ -7861,64 +8497,68 @@ msgstr "извеждане само на неслетите указатели" msgid "print only refs which contain the commit" msgstr "извеждане само на указателите, които съдържат това ПОДАВАНЕ" -#: builtin/fsck.c:519 +#: builtin/for-each-ref.c:46 +msgid "print only refs which don't contain the commit" +msgstr "извеждане само на указателите, които не съдържат това ПОДАВАНЕ" + +#: builtin/fsck.c:554 msgid "Checking object directories" msgstr "Проверка на директориите с обекти" -#: builtin/fsck.c:588 +#: builtin/fsck.c:646 msgid "git fsck [] [...]" msgstr "git fsck [ОПЦИЯ…] [ОБЕКТ…]" -#: builtin/fsck.c:594 +#: builtin/fsck.c:652 msgid "show unreachable objects" msgstr "показване на недостижимите обекти" -#: builtin/fsck.c:595 +#: builtin/fsck.c:653 msgid "show dangling objects" msgstr "показване на обектите извън клоните" -#: builtin/fsck.c:596 +#: builtin/fsck.c:654 msgid "report tags" msgstr "показване на етикетите" -#: builtin/fsck.c:597 +#: builtin/fsck.c:655 msgid "report root nodes" msgstr "показване на кореновите възли" -#: builtin/fsck.c:598 +#: builtin/fsck.c:656 msgid "make index objects head nodes" msgstr "задаване на обекти от индекса да са коренови" # FIXME bad message -#: builtin/fsck.c:599 +#: builtin/fsck.c:657 msgid "make reflogs head nodes (default)" msgstr "проследяване на указателите от журнала като глави (стандартно)" -#: builtin/fsck.c:600 +#: builtin/fsck.c:658 msgid "also consider packs and alternate objects" msgstr "допълнително да се проверяват пакетите и алтернативните обекти" -#: builtin/fsck.c:601 +#: builtin/fsck.c:659 msgid "check only connectivity" msgstr "проверка само на връзката" -#: builtin/fsck.c:602 +#: builtin/fsck.c:660 msgid "enable more strict checking" msgstr "по-строги проверки" -#: builtin/fsck.c:604 +#: builtin/fsck.c:662 msgid "write dangling objects in .git/lost-found" msgstr "запазване на обектите извън клоните в директорията „.git/lost-found“" -#: builtin/fsck.c:605 builtin/prune.c:107 +#: builtin/fsck.c:663 builtin/prune.c:107 msgid "show progress" msgstr "показване на напредъка" -#: builtin/fsck.c:606 +#: builtin/fsck.c:664 msgid "show verbose names for reachable objects" msgstr "показване на подробни имена на достижимите обекти" -#: builtin/fsck.c:665 +#: builtin/fsck.c:725 msgid "Checking objects" msgstr "Проверка на обектите" @@ -7926,17 +8566,17 @@ msgstr "Проверка на обектите" msgid "git gc []" msgstr "git gc [ОПЦИЯ…]" -#: builtin/gc.c:72 +#: builtin/gc.c:78 #, c-format -msgid "Invalid %s: '%s'" -msgstr "Неправилен %s: „%s“" +msgid "Failed to fstat %s: %s" +msgstr "Неуспешно изпълнение на „fstat“ върху „%s“: %s" -#: builtin/gc.c:139 +#: builtin/gc.c:310 #, c-format -msgid "insanely long object directory %.*s" -msgstr "прекалено дълга директория с обекти „%.*s“" +msgid "Can't stat %s" +msgstr "Неуспешно изпълнение на „stat“ върху „%s“" -#: builtin/gc.c:290 +#: builtin/gc.c:319 #, c-format msgid "" "The last gc run reported the following. Please correct the root cause\n" @@ -7953,44 +8593,49 @@ msgstr "" "\n" "%s" -#: builtin/gc.c:327 +#: builtin/gc.c:358 msgid "prune unreferenced objects" msgstr "окастряне на обектите, към които нищо не сочи" -#: builtin/gc.c:329 +#: builtin/gc.c:360 msgid "be more thorough (increased runtime)" msgstr "изчерпателно търсене на боклука (за сметка на повече време работа)" -#: builtin/gc.c:330 +#: builtin/gc.c:361 msgid "enable auto-gc mode" msgstr "включване на автоматичното събиране на боклука (auto-gc)" -#: builtin/gc.c:331 +#: builtin/gc.c:362 msgid "force running gc even if there may be another gc running" msgstr "" "изрично стартиране на събирането на боклука, дори и ако вече работи друго " "събиране" -#: builtin/gc.c:373 +#: builtin/gc.c:379 +#, c-format +msgid "Failed to parse gc.logexpiry value %s" +msgstr "Неразпозната стойност на „gc.logexpiry“: %s" + +#: builtin/gc.c:407 #, c-format msgid "Auto packing the repository in background for optimum performance.\n" msgstr "" "Автоматично пакетиране на заден фон на хранилището за по-добра " "производителност.\n" -#: builtin/gc.c:375 +#: builtin/gc.c:409 #, c-format msgid "Auto packing the repository for optimum performance.\n" msgstr "Автоматично пакетиране на хранилището за по-добра производителност.\n" -#: builtin/gc.c:376 +#: builtin/gc.c:410 #, c-format msgid "See \"git help gc\" for manual housekeeping.\n" msgstr "" "Погледнете ръководството за повече информация как да изпълните „git help " "gc“.\n" -#: builtin/gc.c:397 +#: builtin/gc.c:431 #, c-format msgid "" "gc is already running on machine '%s' pid % (use --force if not)" @@ -7999,255 +8644,275 @@ msgstr "" "процеса: % (ако сте сигурни, че това не е вярно, това използвайте\n" "опцията „--force“)" -#: builtin/gc.c:441 +#: builtin/gc.c:475 msgid "" "There are too many unreachable loose objects; run 'git prune' to remove them." msgstr "" "Има прекалено много недостижими, непакетирани обекти.\n" "Използвайте „git prune“, за да ги окастрите." -#: builtin/grep.c:23 +#: builtin/grep.c:25 msgid "git grep [] [-e] [...] [[--] ...]" msgstr "git grep [ОПЦИЯ…] [-e] ШАБЛОН [ВЕРСИЯ…] [[--] ПЪТ…]" -#: builtin/grep.c:219 +#: builtin/grep.c:232 #, c-format msgid "grep: failed to create thread: %s" msgstr "grep: неуспешно създаване на нишка: %s" -#: builtin/grep.c:277 +#: builtin/grep.c:290 #, c-format msgid "invalid number of threads specified (%d) for %s" msgstr "зададен е неправилен брой нишки (%d) за %s" -#: builtin/grep.c:453 builtin/grep.c:488 +#: builtin/grep.c:769 builtin/grep.c:810 #, c-format msgid "unable to read tree (%s)" msgstr "дървото не може да бъде прочетено (%s)" -#: builtin/grep.c:503 +#: builtin/grep.c:829 #, c-format msgid "unable to grep from object of type %s" msgstr "не може да се изпълни „grep“ от обект от вида %s" -#: builtin/grep.c:561 +#: builtin/grep.c:893 #, c-format msgid "switch `%c' expects a numerical value" msgstr "опцията „%c“ очаква число за аргумент" -#: builtin/grep.c:647 +#: builtin/grep.c:980 msgid "search in index instead of in the work tree" msgstr "търсене в индекса, а не в работното дърво" -#: builtin/grep.c:649 +#: builtin/grep.c:982 msgid "find in contents not managed by git" msgstr "търсене и във файловете, които не са под управлението на git" -#: builtin/grep.c:651 +#: builtin/grep.c:984 msgid "search in both tracked and untracked files" msgstr "търсене и в следените, и в неследените файлове" -#: builtin/grep.c:653 +#: builtin/grep.c:986 msgid "ignore files specified via '.gitignore'" msgstr "игнориране на файловете указани в „.gitignore“" -#: builtin/grep.c:656 +#: builtin/grep.c:988 +msgid "recursively search in each submodule" +msgstr "рекурсивно търсене във всички подмодули" + +#: builtin/grep.c:990 +msgid "basename" +msgstr "ОСНОВНО ИМЕ" + +#: builtin/grep.c:991 +msgid "prepend parent project's basename to output" +msgstr "добавяне на ОСНОВНОто ИМЕ на проекта към изхода" + +#: builtin/grep.c:994 msgid "show non-matching lines" msgstr "извеждане на редовете, които не съвпадат" -#: builtin/grep.c:658 +#: builtin/grep.c:996 msgid "case insensitive matching" msgstr "без значение на регистъра на буквите (главни/малки)" -#: builtin/grep.c:660 +#: builtin/grep.c:998 msgid "match patterns only at word boundaries" msgstr "напасване на шаблоните само по границите на думите" -#: builtin/grep.c:662 +#: builtin/grep.c:1000 msgid "process binary files as text" msgstr "обработване на двоичните файлове като текстови" -#: builtin/grep.c:664 +#: builtin/grep.c:1002 msgid "don't match patterns in binary files" msgstr "прескачане на двоичните файлове" -#: builtin/grep.c:667 +#: builtin/grep.c:1005 msgid "process binary files with textconv filters" msgstr "" "обработване на двоичните файлове чрез филтри за преобразуване към текст" -#: builtin/grep.c:669 +#: builtin/grep.c:1007 msgid "descend at most levels" msgstr "навлизане максимално на тази ДЪЛБОЧИНА в дървото" -#: builtin/grep.c:673 +#: builtin/grep.c:1011 msgid "use extended POSIX regular expressions" msgstr "разширени регулярни изрази по POSIX" -#: builtin/grep.c:676 +#: builtin/grep.c:1014 msgid "use basic POSIX regular expressions (default)" msgstr "основни регулярни изрази по POSIX (стандартно)" -#: builtin/grep.c:679 +#: builtin/grep.c:1017 msgid "interpret patterns as fixed strings" msgstr "шаблоните са дословни низове" -#: builtin/grep.c:682 +#: builtin/grep.c:1020 msgid "use Perl-compatible regular expressions" msgstr "регулярни изрази на Perl" -#: builtin/grep.c:685 +#: builtin/grep.c:1023 msgid "show line numbers" msgstr "извеждане на номерата на редовете" -#: builtin/grep.c:686 +#: builtin/grep.c:1024 msgid "don't show filenames" msgstr "без извеждане на имената на файловете" -#: builtin/grep.c:687 +#: builtin/grep.c:1025 msgid "show filenames" msgstr "извеждане на имената на файловете" -#: builtin/grep.c:689 +#: builtin/grep.c:1027 msgid "show filenames relative to top directory" msgstr "" "извеждане на относителните имена на файловете спрямо основната директория на " "хранилището" -#: builtin/grep.c:691 +#: builtin/grep.c:1029 msgid "show only filenames instead of matching lines" msgstr "извеждане само на имената на файловете без напасващите редове" -#: builtin/grep.c:693 +#: builtin/grep.c:1031 msgid "synonym for --files-with-matches" msgstr "синоним на „--files-with-matches“" -#: builtin/grep.c:696 +#: builtin/grep.c:1034 msgid "show only the names of files without match" msgstr "" "извеждане само на имената на файловете, които не съдържат ред, напасващ на " "шаблона" -#: builtin/grep.c:698 +#: builtin/grep.c:1036 msgid "print NUL after filenames" msgstr "извеждане на нулевия знак „NUL“ след всяко име на файл" -#: builtin/grep.c:700 +#: builtin/grep.c:1038 msgid "show the number of matches instead of matching lines" msgstr "извеждане на броя на съвпаденията вместо напасващите редове" -#: builtin/grep.c:701 +#: builtin/grep.c:1039 msgid "highlight matches" msgstr "оцветяване на напасванията" -#: builtin/grep.c:703 +#: builtin/grep.c:1041 msgid "print empty line between matches from different files" msgstr "извеждане на празен ред между напасванията от различни файлове" -#: builtin/grep.c:705 +#: builtin/grep.c:1043 msgid "show filename only once above matches from same file" msgstr "" "извеждане на името на файла само веднъж за всички напасвания от този файл" -#: builtin/grep.c:708 +#: builtin/grep.c:1046 msgid "show context lines before and after matches" msgstr "извеждане на такъв БРОЙ редове преди и след напасванията" -#: builtin/grep.c:711 +#: builtin/grep.c:1049 msgid "show context lines before matches" msgstr "извеждане на такъв БРОЙ редове преди напасванията" -#: builtin/grep.c:713 +#: builtin/grep.c:1051 msgid "show context lines after matches" msgstr "извеждане на такъв БРОЙ редове след напасванията" -#: builtin/grep.c:715 +#: builtin/grep.c:1053 msgid "use worker threads" msgstr "използване на такъв БРОЙ работещи нишки" -#: builtin/grep.c:716 +#: builtin/grep.c:1054 msgid "shortcut for -C NUM" msgstr "синоним на „-C БРОЙ“" -#: builtin/grep.c:719 +#: builtin/grep.c:1057 msgid "show a line with the function name before matches" msgstr "извеждане на ред с името на функцията, в която е напаснат шаблона" -#: builtin/grep.c:721 +#: builtin/grep.c:1059 msgid "show the surrounding function" msgstr "извеждане на обхващащата функция" -#: builtin/grep.c:724 +#: builtin/grep.c:1062 msgid "read patterns from file" msgstr "изчитане на шаблоните от ФАЙЛ" -#: builtin/grep.c:726 +#: builtin/grep.c:1064 msgid "match " msgstr "напасване на ШАБЛОН" -#: builtin/grep.c:728 +#: builtin/grep.c:1066 msgid "combine patterns specified with -e" msgstr "комбиниране на шаблоните указани с опцията „-e“" -#: builtin/grep.c:740 +#: builtin/grep.c:1078 msgid "indicate hit with exit status without output" msgstr "" "без извеждане на стандартния изход. Изходният код указва наличието на " "напасване" -#: builtin/grep.c:742 +#: builtin/grep.c:1080 msgid "show only matches from files that match all patterns" msgstr "" "извеждане на редове само от файловете, които напасват на всички шаблони" -#: builtin/grep.c:744 +#: builtin/grep.c:1082 msgid "show parse tree for grep expression" msgstr "извеждане на дървото за анализ на регулярния израз" -#: builtin/grep.c:748 +#: builtin/grep.c:1086 msgid "pager" msgstr "програма за преглед по страници" -#: builtin/grep.c:748 +#: builtin/grep.c:1086 msgid "show matching files in the pager" msgstr "извеждане на съвпадащите файлове в програма за преглед по страници" -#: builtin/grep.c:751 +#: builtin/grep.c:1089 msgid "allow calling of grep(1) (ignored by this build)" msgstr "" "позволяване на стартирането на grep(1) (текущият компилат пренебрегва тази " "опция)" -#: builtin/grep.c:814 +#: builtin/grep.c:1153 msgid "no pattern given." msgstr "липсва шаблон." -#: builtin/grep.c:846 builtin/index-pack.c:1480 +#: builtin/grep.c:1189 +msgid "--no-index or --untracked cannot be used with revs" +msgstr "опциите „--cached“ и „--untracked“ са несъвместими с версии." + +#: builtin/grep.c:1195 +#, c-format +msgid "unable to resolve revision: %s" +msgstr "версията „%s“ не може бъде открита" + +#: builtin/grep.c:1228 builtin/index-pack.c:1485 #, c-format msgid "invalid number of threads specified (%d)" msgstr "зададен е неправилен брой нишки: %d" -#: builtin/grep.c:876 +#: builtin/grep.c:1251 msgid "--open-files-in-pager only works on the worktree" msgstr "" "опцията „--open-files-in-pager“ е съвместима само с търсене в работното дърво" -#: builtin/grep.c:902 +#: builtin/grep.c:1274 +msgid "option not supported with --recurse-submodules." +msgstr "опцията е несъвместима с „--recurse-submodules“." + +#: builtin/grep.c:1280 msgid "--cached or --untracked cannot be used with --no-index." msgstr "опциите „--cached“ и „--untracked“ са несъвместими с „--no-index“." -#: builtin/grep.c:907 -msgid "--no-index or --untracked cannot be used with revs." -msgstr "" -"опциите „--cached“ и „--untracked“ са несъвместими с търсене във версии." - -#: builtin/grep.c:910 +#: builtin/grep.c:1286 msgid "--[no-]exclude-standard cannot be used for tracked contents." msgstr "" "опциите „--(no-)exclude-standard“ са несъвместими с търсене по следени " "файлове." -#: builtin/grep.c:918 +#: builtin/grep.c:1294 msgid "both --cached and trees are given." msgstr "опцията „--cached“ е несъвместима със задаване на дърво." @@ -8424,7 +9089,6 @@ msgstr "„git %s“ е синоним на „%s“" msgid "usage: %s%s" msgstr "употреба: %s%s" -# FIXME merge with next? #: builtin/index-pack.c:154 #, c-format msgid "unable to open %s" @@ -8477,193 +9141,197 @@ msgstr "пакетният файл надвишава максималния в msgid "unable to create '%s'" msgstr "пакетният файл „%s“ не може да бъде създаден" -#: builtin/index-pack.c:322 +#: builtin/index-pack.c:323 #, c-format msgid "cannot open packfile '%s'" msgstr "пакетният файл „%s“ не може да бъде отворен" -#: builtin/index-pack.c:336 +#: builtin/index-pack.c:337 msgid "pack signature mismatch" msgstr "несъответствие в подписа към пакетния файл" -#: builtin/index-pack.c:338 +#: builtin/index-pack.c:339 #, c-format msgid "pack version % unsupported" msgstr "не се поддържа пакетиране вeрсия „%“" -#: builtin/index-pack.c:356 +#: builtin/index-pack.c:357 #, c-format msgid "pack has bad object at offset %: %s" msgstr "повреден обект в пакетния файл при отместване %: %s" -#: builtin/index-pack.c:478 +#: builtin/index-pack.c:479 #, c-format msgid "inflate returned %d" msgstr "декомпресирането с „inflate“ върна %d" -#: builtin/index-pack.c:527 +#: builtin/index-pack.c:528 msgid "offset value overflow for delta base object" msgstr "стойността на отместването за обекта-разлика води до препълване" -#: builtin/index-pack.c:535 +#: builtin/index-pack.c:536 msgid "delta base offset is out of bound" msgstr "стойността на отместването за обекта-разлика е извън диапазона" -#: builtin/index-pack.c:543 +#: builtin/index-pack.c:544 #, c-format msgid "unknown object type %d" msgstr "непознат вид обект %d" -#: builtin/index-pack.c:574 +#: builtin/index-pack.c:575 msgid "cannot pread pack file" msgstr "пакетният файл не може да бъде прочетен" -#: builtin/index-pack.c:576 +#: builtin/index-pack.c:577 #, c-format msgid "premature end of pack file, % byte missing" msgid_plural "premature end of pack file, % bytes missing" msgstr[0] "неочакван край на файл, липсва % байт" msgstr[1] "неочакван край на файл, липсват % байта" -#: builtin/index-pack.c:602 +#: builtin/index-pack.c:603 msgid "serious inflate inconsistency" msgstr "сериозна грешка при декомпресиране с „inflate“" -#: builtin/index-pack.c:748 builtin/index-pack.c:754 builtin/index-pack.c:777 -#: builtin/index-pack.c:811 builtin/index-pack.c:820 +#: builtin/index-pack.c:749 builtin/index-pack.c:755 builtin/index-pack.c:778 +#: builtin/index-pack.c:816 builtin/index-pack.c:825 #, c-format msgid "SHA1 COLLISION FOUND WITH %s !" msgstr "" "СЪВПАДЕНИЕ НА СТОЙНОСТИТЕ ЗА СУМИТЕ ЗА SHA1: „%s“ НА ДВА РАЗЛИЧНИ ОБЕКТА!" -# FIXME merge with next? -#: builtin/index-pack.c:751 builtin/pack-objects.c:166 -#: builtin/pack-objects.c:258 +#: builtin/index-pack.c:752 builtin/pack-objects.c:164 +#: builtin/pack-objects.c:257 #, c-format msgid "unable to read %s" msgstr "обектът „%s“ не може да бъде прочетен" -#: builtin/index-pack.c:817 +#: builtin/index-pack.c:814 +#, c-format +msgid "cannot read existing object info %s" +msgstr "съществуващият обект в „%s“ не може да бъде прочетен" + +#: builtin/index-pack.c:822 #, c-format msgid "cannot read existing object %s" msgstr "съществуващият обект „%s“ не може да бъде прочетен" -#: builtin/index-pack.c:831 +#: builtin/index-pack.c:836 #, c-format msgid "invalid blob object %s" msgstr "неправилен обект BLOB „%s“" # FIXME perhaps invalid object -#: builtin/index-pack.c:845 +#: builtin/index-pack.c:850 #, c-format msgid "invalid %s" msgstr "неправилен обект „%s“" -#: builtin/index-pack.c:848 +#: builtin/index-pack.c:853 msgid "Error in object" msgstr "Грешка в обекта" -#: builtin/index-pack.c:850 +#: builtin/index-pack.c:855 #, c-format msgid "Not all child objects of %s are reachable" msgstr "Някои обекти, наследници на „%s“, не могат да бъдат достигнати" -#: builtin/index-pack.c:922 builtin/index-pack.c:953 +#: builtin/index-pack.c:927 builtin/index-pack.c:958 msgid "failed to apply delta" msgstr "разликата не може да бъде приложена" -#: builtin/index-pack.c:1123 +#: builtin/index-pack.c:1128 msgid "Receiving objects" msgstr "Получаване на обекти" -#: builtin/index-pack.c:1123 +#: builtin/index-pack.c:1128 msgid "Indexing objects" msgstr "Индексиране на обекти" -#: builtin/index-pack.c:1155 +#: builtin/index-pack.c:1160 msgid "pack is corrupted (SHA1 mismatch)" msgstr "пакетният файл е повреден (нееднакви суми по SHA1)" -#: builtin/index-pack.c:1160 +#: builtin/index-pack.c:1165 msgid "cannot fstat packfile" msgstr "не може да се получи информация за пакетния файл с „fstat“" -#: builtin/index-pack.c:1163 +#: builtin/index-pack.c:1168 msgid "pack has junk at the end" msgstr "в края на пакетния файл има повредени данни" -#: builtin/index-pack.c:1174 +#: builtin/index-pack.c:1179 msgid "confusion beyond insanity in parse_pack_objects()" msgstr "" "фатална грешка във функцията „parse_pack_objects“. Това е грешка в Git, " "докладвайте я на разработчиците, като пратите е-писмо на адрес: „git@vger." "kernel.org“." -#: builtin/index-pack.c:1197 +#: builtin/index-pack.c:1202 msgid "Resolving deltas" msgstr "Откриване на съответните разлики" -#: builtin/index-pack.c:1208 +#: builtin/index-pack.c:1213 #, c-format msgid "unable to create thread: %s" msgstr "не може да се създаде нишка: %s" -#: builtin/index-pack.c:1250 +#: builtin/index-pack.c:1255 msgid "confusion beyond insanity" msgstr "" "фатална грешка във функцията „conclude_pack“. Това е грешка в Git, " "докладвайте я на разработчиците, като пратите е-писмо на адрес: „git@vger." "kernel.org“." -#: builtin/index-pack.c:1256 +#: builtin/index-pack.c:1261 #, c-format msgid "completed with %d local object" msgid_plural "completed with %d local objects" msgstr[0] "действието завърши с %d локален обект" msgstr[1] "действието завърши с %d локални обекта" -#: builtin/index-pack.c:1268 +#: builtin/index-pack.c:1273 #, c-format msgid "Unexpected tail checksum for %s (disk corruption?)" msgstr "" "Неочаквана последваща сума за грешки за „%s“ (причината може да е грешка в " "диска)" -#: builtin/index-pack.c:1272 +#: builtin/index-pack.c:1277 #, c-format msgid "pack has %d unresolved delta" msgid_plural "pack has %d unresolved deltas" msgstr[0] "в пакета има %d ненапасваща разлика" msgstr[1] "в пакета има %d ненапасващи разлики" -#: builtin/index-pack.c:1296 +#: builtin/index-pack.c:1301 #, c-format msgid "unable to deflate appended object (%d)" msgstr "добавеният обект не може да се компресира с „deflate“: %d" -#: builtin/index-pack.c:1372 +#: builtin/index-pack.c:1377 #, c-format msgid "local object %s is corrupt" msgstr "локалният обект „%s“ е повреден" -#: builtin/index-pack.c:1396 +#: builtin/index-pack.c:1403 msgid "error while closing pack file" msgstr "грешка при затварянето на пакетния файл" -#: builtin/index-pack.c:1409 +#: builtin/index-pack.c:1415 #, c-format msgid "cannot write keep file '%s'" msgstr "" "грешка при записването на файла „%s“, осигуряващ запазване на директория" -#: builtin/index-pack.c:1417 +#: builtin/index-pack.c:1423 #, c-format msgid "cannot close written keep file '%s'" msgstr "" "грешка при затварянето на записания файл „%s“, осигуряващ запазване на " "директория" -#: builtin/index-pack.c:1430 +#: builtin/index-pack.c:1433 msgid "cannot store pack file" msgstr "пакетният файл не може да бъде запазен" @@ -8671,56 +9339,60 @@ msgstr "пакетният файл не може да бъде запазен" msgid "cannot store index file" msgstr "файлът за индекса не може да бъде съхранен" -#: builtin/index-pack.c:1474 +#: builtin/index-pack.c:1479 #, c-format msgid "bad pack.indexversion=%" msgstr "зададена е неправилна версия пакетиране: „pack.indexversion=%“" -#: builtin/index-pack.c:1484 builtin/index-pack.c:1681 +#: builtin/index-pack.c:1489 builtin/index-pack.c:1686 #, c-format msgid "no threads support, ignoring %s" msgstr "липсва поддръжка за нишки. „%s“ ще се пренебрегне" -#: builtin/index-pack.c:1542 +#: builtin/index-pack.c:1547 #, c-format msgid "Cannot open existing pack file '%s'" msgstr "Съществуващият пакетен файл „%s“ не може да бъде отворен" -#: builtin/index-pack.c:1544 +#: builtin/index-pack.c:1549 #, c-format msgid "Cannot open existing pack idx file for '%s'" msgstr "Съществуващият индекс за пакетния файл „%s“ не може да бъде отворен" -#: builtin/index-pack.c:1591 +#: builtin/index-pack.c:1596 #, c-format msgid "non delta: %d object" msgid_plural "non delta: %d objects" msgstr[0] "%d обект не е разлика" msgstr[1] "%d обекта не са разлика" -#: builtin/index-pack.c:1598 +#: builtin/index-pack.c:1603 #, c-format msgid "chain length = %d: %lu object" msgid_plural "chain length = %d: %lu objects" msgstr[0] "дължината на веригата е %d: %lu обект" msgstr[1] "дължината на веригата е %d: %lu обекта" -#: builtin/index-pack.c:1611 +#: builtin/index-pack.c:1616 #, c-format msgid "packfile name '%s' does not end with '.pack'" msgstr "името на пакетния файл „%s“ не завършва на „.pack“" -#: builtin/index-pack.c:1693 builtin/index-pack.c:1696 -#: builtin/index-pack.c:1712 builtin/index-pack.c:1716 +#: builtin/index-pack.c:1698 builtin/index-pack.c:1701 +#: builtin/index-pack.c:1717 builtin/index-pack.c:1721 #, c-format msgid "bad %s" msgstr "неправилна стойност „%s“" -#: builtin/index-pack.c:1732 +#: builtin/index-pack.c:1737 msgid "--fix-thin cannot be used without --stdin" msgstr "опцията „--fix-thin“ изисква „--stdin“" -#: builtin/index-pack.c:1740 +#: builtin/index-pack.c:1739 +msgid "--stdin requires a git repository" +msgstr "„--stdin“ изисква хранилище на git" + +#: builtin/index-pack.c:1747 msgid "--verify with no packfile name given" msgstr "опцията „--verify“ изисква име на пакетен файл" @@ -8883,108 +9555,108 @@ msgstr "git log [ОПЦИЯ…] [ДИАПАЗОН_НА_ВЕРСИИТЕ] [[--] msgid "git show [] ..." msgstr "git show [ОПЦИЯ…] ОБЕКТ…" -#: builtin/log.c:84 +#: builtin/log.c:89 #, c-format msgid "invalid --decorate option: %s" msgstr "неправилна опция „--decorate“: %s" -#: builtin/log.c:139 +#: builtin/log.c:144 msgid "suppress diff output" msgstr "без извеждане на разликите" -#: builtin/log.c:140 +#: builtin/log.c:145 msgid "show source" msgstr "извеждане на изходния код" -#: builtin/log.c:141 +#: builtin/log.c:146 msgid "Use mail map file" msgstr "" "Използване на файл за съответствията на имената и адресите на е-поща („." "mailmap“)" -#: builtin/log.c:142 +#: builtin/log.c:147 msgid "decorate options" msgstr "настройки на форма̀та на извежданата информация" -#: builtin/log.c:145 +#: builtin/log.c:150 msgid "Process line range n,m in file, counting from 1" msgstr "" "Обработване само на редовете във файла в диапазона от n до m включително. " "Броенето започва от 1" -#: builtin/log.c:241 +#: builtin/log.c:246 #, c-format msgid "Final output: %d %s\n" msgstr "Резултат: %d %s\n" -#: builtin/log.c:486 +#: builtin/log.c:493 #, c-format msgid "git show %s: bad file" msgstr "git show %s: повреден файл" -#: builtin/log.c:500 builtin/log.c:594 +#: builtin/log.c:507 builtin/log.c:601 #, c-format msgid "Could not read object %s" msgstr "Обектът не може да бъде прочетен: %s" -#: builtin/log.c:618 +#: builtin/log.c:625 #, c-format msgid "Unknown type: %d" msgstr "Неизвестен вид: %d" -#: builtin/log.c:739 +#: builtin/log.c:746 msgid "format.headers without value" msgstr "не е зададена стойност на „format.headers“" -#: builtin/log.c:839 +#: builtin/log.c:846 msgid "name of output directory is too long" msgstr "прекалено дълго име на директорията за изходната информация" -#: builtin/log.c:854 +#: builtin/log.c:861 #, c-format msgid "Cannot open patch file %s" msgstr "Файлът-кръпка „%s“ не може да бъде отворен" -#: builtin/log.c:868 +#: builtin/log.c:875 msgid "Need exactly one range." msgstr "Трябва да зададете точно един диапазон." -#: builtin/log.c:878 +#: builtin/log.c:885 msgid "Not a range." msgstr "Не е диапазон." -#: builtin/log.c:984 +#: builtin/log.c:991 msgid "Cover letter needs email format" msgstr "Придружаващото писмо трябва да е форматирано като е-писмо" -#: builtin/log.c:1063 +#: builtin/log.c:1071 #, c-format msgid "insane in-reply-to: %s" msgstr "неправилен формат на заглавната част за отговор „in-reply-to“: %s" -#: builtin/log.c:1091 +#: builtin/log.c:1098 msgid "git format-patch [] [ | ]" msgstr "git format-patch [ОПЦИЯ…] [ОТ | ДИАПАЗОН_НА_ВЕРСИИТЕ]" -#: builtin/log.c:1141 +#: builtin/log.c:1148 msgid "Two output directories?" msgstr "Можете да укажете максимум една директория за изход." -#: builtin/log.c:1248 builtin/log.c:1891 builtin/log.c:1893 builtin/log.c:1905 +#: builtin/log.c:1255 builtin/log.c:1898 builtin/log.c:1900 builtin/log.c:1912 #, c-format msgid "Unknown commit %s" msgstr "Непознато подаване „%s“" -#: builtin/log.c:1258 builtin/notes.c:884 builtin/tag.c:455 +#: builtin/log.c:1265 builtin/notes.c:883 builtin/tag.c:532 #, c-format msgid "Failed to resolve '%s' as a valid ref." msgstr "Не може да се открие към какво сочи „%s“." -#: builtin/log.c:1263 +#: builtin/log.c:1270 msgid "Could not find exact merge base." msgstr "Точната база за сливане не може да се открие." -#: builtin/log.c:1267 +#: builtin/log.c:1274 msgid "" "Failed to get upstream, if you want to record base commit automatically,\n" "please use git branch --set-upstream-to to track a remote branch.\n" @@ -8994,221 +9666,221 @@ msgstr "" "зададете, използвайте „git branch --set-upstream-to“.\n" "Можете ръчно да зададете базово подаване чрез „--base=“." -#: builtin/log.c:1287 +#: builtin/log.c:1294 msgid "Failed to find exact merge base" msgstr "Точната база при сливане не може да бъде открита" -#: builtin/log.c:1298 +#: builtin/log.c:1305 msgid "base commit should be the ancestor of revision list" msgstr "базовото подаване трябва да е предшественикът на списъка с версиите" -#: builtin/log.c:1302 +#: builtin/log.c:1309 msgid "base commit shouldn't be in revision list" msgstr "базовото подаване не може да е в списъка с версиите" -#: builtin/log.c:1351 +#: builtin/log.c:1358 msgid "cannot get patch id" msgstr "идентификаторът на кръпката не може да бъде получен" -#: builtin/log.c:1408 +#: builtin/log.c:1415 msgid "use [PATCH n/m] even with a single patch" msgstr "номерация „[PATCH n/m]“ дори и при единствена кръпка" -#: builtin/log.c:1411 +#: builtin/log.c:1418 msgid "use [PATCH] even with multiple patches" msgstr "номерация „[PATCH]“ дори и при множество кръпки" -#: builtin/log.c:1415 +#: builtin/log.c:1422 msgid "print patches to standard out" msgstr "извеждане на кръпките на стандартния изход" -#: builtin/log.c:1417 +#: builtin/log.c:1424 msgid "generate a cover letter" msgstr "създаване на придружаващо писмо" -#: builtin/log.c:1419 +#: builtin/log.c:1426 msgid "use simple number sequence for output file names" msgstr "проста числова последователност за имената на файловете-кръпки" -#: builtin/log.c:1420 +#: builtin/log.c:1427 msgid "sfx" msgstr "ЗНАЦИ" -#: builtin/log.c:1421 +#: builtin/log.c:1428 msgid "use instead of '.patch'" msgstr "използване на тези ЗНАЦИ за суфикс вместо „.patch“" -#: builtin/log.c:1423 +#: builtin/log.c:1430 msgid "start numbering patches at instead of 1" msgstr "номерирането на кръпките да започва от този БРОЙ, а не с 1" -#: builtin/log.c:1425 +#: builtin/log.c:1432 msgid "mark the series as Nth re-roll" msgstr "отбелязване, че това е N-тата поредна редакция на поредицата от кръпки" -#: builtin/log.c:1427 +#: builtin/log.c:1434 msgid "Use [RFC PATCH] instead of [PATCH]" msgstr "Използване на „[RFC PATCH]“ вместо „[PATCH]“" -#: builtin/log.c:1430 +#: builtin/log.c:1437 msgid "Use [] instead of [PATCH]" msgstr "Използване на този „[ПРЕФИКС]“ вместо „[PATCH]“" -#: builtin/log.c:1433 +#: builtin/log.c:1440 msgid "store resulting files in " msgstr "запазване на изходните файлове в тази ДИРЕКТОРИЯ" -#: builtin/log.c:1436 +#: builtin/log.c:1443 msgid "don't strip/add [PATCH]" msgstr "без добавяне/махане на префикса „[PATCH]“" -#: builtin/log.c:1439 +#: builtin/log.c:1446 msgid "don't output binary diffs" msgstr "без извеждане на разлики между двоични файлове" -#: builtin/log.c:1441 +#: builtin/log.c:1448 msgid "output all-zero hash in From header" msgstr "в заглавната част „From:“ (от) хешът да е само от нули" -#: builtin/log.c:1443 +#: builtin/log.c:1450 msgid "don't include a patch matching a commit upstream" msgstr "да не се включват кръпки, които присъстват в следения клон" -#: builtin/log.c:1445 +#: builtin/log.c:1452 msgid "show patch format instead of default (patch + stat)" msgstr "" "извеждане във формат за кръпки, а на в стандартния (кръпка и статистика)" -#: builtin/log.c:1447 +#: builtin/log.c:1454 msgid "Messaging" msgstr "Опции при изпращане" -#: builtin/log.c:1448 +#: builtin/log.c:1455 msgid "header" msgstr "ЗАГЛАВНА_ЧАСТ" -#: builtin/log.c:1449 +#: builtin/log.c:1456 msgid "add email header" msgstr "добавяне на тази ЗАГЛАВНА_ЧАСТ" -#: builtin/log.c:1450 builtin/log.c:1452 +#: builtin/log.c:1457 builtin/log.c:1459 msgid "email" msgstr "Е-ПОЩА" -#: builtin/log.c:1450 +#: builtin/log.c:1457 msgid "add To: header" msgstr "добавяне на заглавна част „To:“ (до)" -#: builtin/log.c:1452 +#: builtin/log.c:1459 msgid "add Cc: header" msgstr "добавяне на заглавна част „Cc:“ (и до)" -#: builtin/log.c:1454 +#: builtin/log.c:1461 msgid "ident" msgstr "ИДЕНТИЧНОСТ" -#: builtin/log.c:1455 +#: builtin/log.c:1462 msgid "set From address to (or committer ident if absent)" msgstr "" "задаване на адреса в заглавната част „From“ (от) да е тази ИДЕНТИЧНОСТ. Ако " "не е зададена такава, се взима адреса на подаващия" -#: builtin/log.c:1457 +#: builtin/log.c:1464 msgid "message-id" msgstr "ИДЕНТИФИКАТОР_НА_СЪОБЩЕНИЕ" -#: builtin/log.c:1458 +#: builtin/log.c:1465 msgid "make first mail a reply to " msgstr "" "първото съобщение да е в отговор на е-писмото с този " "ИДЕНТИФИКАТОР_НА_СЪОБЩЕНИЕ" -#: builtin/log.c:1459 builtin/log.c:1462 +#: builtin/log.c:1466 builtin/log.c:1469 msgid "boundary" msgstr "граница" -#: builtin/log.c:1460 +#: builtin/log.c:1467 msgid "attach the patch" msgstr "прикрепяне на кръпката" -#: builtin/log.c:1463 +#: builtin/log.c:1470 msgid "inline the patch" msgstr "включване на кръпката в текста на писмата" -#: builtin/log.c:1467 +#: builtin/log.c:1474 msgid "enable message threading, styles: shallow, deep" msgstr "" "използване на нишки за съобщенията. СТИЛът е „shallow“ (плитък) или " "„deep“ (дълбок)" -#: builtin/log.c:1469 +#: builtin/log.c:1476 msgid "signature" msgstr "подпис" -#: builtin/log.c:1470 +#: builtin/log.c:1477 msgid "add a signature" msgstr "добавяне на поле за подпис" -#: builtin/log.c:1471 +#: builtin/log.c:1478 msgid "base-commit" msgstr "БАЗОВО_ПОДАВАНЕ" -#: builtin/log.c:1472 +#: builtin/log.c:1479 msgid "add prerequisite tree info to the patch series" msgstr "добавяне на необходимото БАЗово дърво към серията кръпки" -#: builtin/log.c:1474 +#: builtin/log.c:1481 msgid "add a signature from a file" msgstr "добавяне на подпис от файл" -#: builtin/log.c:1475 +#: builtin/log.c:1482 msgid "don't print the patch filenames" msgstr "без извеждане на имената на кръпките" -#: builtin/log.c:1565 +#: builtin/log.c:1572 msgid "-n and -k are mutually exclusive." msgstr "опциите „-n“ и „-k“ са несъвместими." -#: builtin/log.c:1567 +#: builtin/log.c:1574 msgid "--subject-prefix/--rfc and -k are mutually exclusive." msgstr "опциите „--subject-prefix“/„-rfc“ и „-k“ са несъвместими." -#: builtin/log.c:1575 +#: builtin/log.c:1582 msgid "--name-only does not make sense" msgstr "опцията „--name-only“ е несъвместима с генерирането на кръпки" -#: builtin/log.c:1577 +#: builtin/log.c:1584 msgid "--name-status does not make sense" msgstr "опцията „--name-status“ е несъвместима с генерирането на кръпки" -#: builtin/log.c:1579 +#: builtin/log.c:1586 msgid "--check does not make sense" msgstr "опцията „--check“ е несъвместима с генерирането на кръпки" -#: builtin/log.c:1609 +#: builtin/log.c:1616 msgid "standard output, or directory, which one?" msgstr "" "изходът може да или стандартният, или да е в директория, но не и двете." -#: builtin/log.c:1611 +#: builtin/log.c:1618 #, c-format msgid "Could not create directory '%s'" msgstr "Директорията „%s“ не може да бъде създадена" -#: builtin/log.c:1705 +#: builtin/log.c:1712 #, c-format msgid "unable to read signature file '%s'" msgstr "файлът „%s“ с подпис не може да бъде прочетен" -#: builtin/log.c:1777 +#: builtin/log.c:1784 msgid "Failed to create output files" msgstr "Изходните файлове не могат да бъдат създадени" -#: builtin/log.c:1826 +#: builtin/log.c:1833 msgid "git cherry [-v] [ [ []]]" msgstr "git cherry [-v] [ОТДАЛЕЧЕН_КЛОН [ВРЪХ [ПРЕДЕЛ]]]" -#: builtin/log.c:1880 +#: builtin/log.c:1887 #, c-format msgid "" "Could not find a tracked remote branch, please specify manually.\n" @@ -9216,106 +9888,105 @@ msgstr "" "Следеният отдалечен клон не бе открит, затова изрично задайте " "ОТДАЛЕЧЕН_КЛОН.\n" -#: builtin/ls-files.c:458 +#: builtin/ls-files.c:468 msgid "git ls-files [] [...]" msgstr "git ls-files [ОПЦИЯ…] [ФАЙЛ…]" -#: builtin/ls-files.c:507 +#: builtin/ls-files.c:517 msgid "identify the file status with tags" msgstr "извеждане на състоянието на файловете с еднобуквени флагове" -#: builtin/ls-files.c:509 +#: builtin/ls-files.c:519 msgid "use lowercase letters for 'assume unchanged' files" msgstr "малки букви за файловете, които да се счетат за непроменени" -#: builtin/ls-files.c:511 +#: builtin/ls-files.c:521 msgid "show cached files in the output (default)" msgstr "извеждане на кешираните файлове (стандартно)" -#: builtin/ls-files.c:513 +#: builtin/ls-files.c:523 msgid "show deleted files in the output" msgstr "извеждане на изтритите файлове" -#: builtin/ls-files.c:515 +#: builtin/ls-files.c:525 msgid "show modified files in the output" msgstr "извеждане на променените файлове" -#: builtin/ls-files.c:517 +#: builtin/ls-files.c:527 msgid "show other files in the output" msgstr "извеждане на другите файлове" -#: builtin/ls-files.c:519 +#: builtin/ls-files.c:529 msgid "show ignored files in the output" msgstr "извеждане на игнорираните файлове" -#: builtin/ls-files.c:522 +#: builtin/ls-files.c:532 msgid "show staged contents' object name in the output" msgstr "извеждане на името на обекта за съдържанието на индекса" -#: builtin/ls-files.c:524 +#: builtin/ls-files.c:534 msgid "show files on the filesystem that need to be removed" msgstr "извеждане на файловете, които трябва да бъдат изтрити" -#: builtin/ls-files.c:526 +#: builtin/ls-files.c:536 msgid "show 'other' directories' names only" msgstr "извеждане само на името на другите (неследените) директории" -#: builtin/ls-files.c:528 +#: builtin/ls-files.c:538 msgid "show line endings of files" msgstr "извеждане на знаците за край на ред във файловете" -#: builtin/ls-files.c:530 +#: builtin/ls-files.c:540 msgid "don't show empty directories" msgstr "без извеждане на празните директории" -#: builtin/ls-files.c:533 +#: builtin/ls-files.c:543 msgid "show unmerged files in the output" msgstr "извеждане на неслетите файлове" -# FIXME not clear about what this option does -#: builtin/ls-files.c:535 +#: builtin/ls-files.c:545 msgid "show resolve-undo information" msgstr "извеждане на информацията за отмяна на разрешените подавания" -#: builtin/ls-files.c:537 +#: builtin/ls-files.c:547 msgid "skip files matching pattern" msgstr "прескачане на файловете напасващи ШАБЛОНа" -#: builtin/ls-files.c:540 +#: builtin/ls-files.c:550 msgid "exclude patterns are read from " msgstr "шаблоните за игнориране да се прочетат от този ФАЙЛ" -#: builtin/ls-files.c:543 +#: builtin/ls-files.c:553 msgid "read additional per-directory exclude patterns in " msgstr "" "изчитане на допълнителните шаблони за игнориране по директория от този ФАЙЛ" -#: builtin/ls-files.c:545 +#: builtin/ls-files.c:555 msgid "add the standard git exclusions" msgstr "добавяне на стандартно игнорираните от Git файлове" -#: builtin/ls-files.c:548 +#: builtin/ls-files.c:558 msgid "make the output relative to the project top directory" msgstr "пътищата да са относителни спрямо основната директория на проекта" -#: builtin/ls-files.c:551 +#: builtin/ls-files.c:561 msgid "recurse through submodules" msgstr "рекурсивно обхождане подмодулите" -#: builtin/ls-files.c:553 +#: builtin/ls-files.c:563 msgid "if any is not in the index, treat this as an error" msgstr "грешка, ако някой от тези ФАЙЛове не е в индекса" -#: builtin/ls-files.c:554 +#: builtin/ls-files.c:564 msgid "tree-ish" msgstr "УКАЗАТЕЛ_КЪМ_ДЪРВО" -#: builtin/ls-files.c:555 +#: builtin/ls-files.c:565 msgid "pretend that paths removed since are still present" msgstr "" "считане, че пътищата изтрити след УКАЗАТЕЛя_КЪМ_ДЪРВО все още съществуват" -#: builtin/ls-files.c:557 +#: builtin/ls-files.c:567 msgid "show debugging data" msgstr "извеждане на информацията за изчистване на грешки" @@ -9329,39 +10000,39 @@ msgstr "" " [-q | --quiet] [--exit-code] [--get-url]\n" " [--symref] [ХРАНИЛИЩЕ [УКАЗАТЕЛ…]]" -#: builtin/ls-remote.c:50 +#: builtin/ls-remote.c:52 msgid "do not print remote URL" msgstr "без извеждане на адресите на отдалечените хранилища" -#: builtin/ls-remote.c:51 builtin/ls-remote.c:53 +#: builtin/ls-remote.c:53 builtin/ls-remote.c:55 msgid "exec" msgstr "КОМАНДА" -#: builtin/ls-remote.c:52 builtin/ls-remote.c:54 +#: builtin/ls-remote.c:54 builtin/ls-remote.c:56 msgid "path of git-upload-pack on the remote host" msgstr "път към командата „git-upload-pack“ на отдалечената машина" -#: builtin/ls-remote.c:56 +#: builtin/ls-remote.c:58 msgid "limit to tags" msgstr "само етикетите" -#: builtin/ls-remote.c:57 +#: builtin/ls-remote.c:59 msgid "limit to heads" msgstr "само върховете" -#: builtin/ls-remote.c:58 +#: builtin/ls-remote.c:60 msgid "do not show peeled tags" msgstr "без извеждане на проследените етикети" -#: builtin/ls-remote.c:60 +#: builtin/ls-remote.c:62 msgid "take url..insteadOf into account" msgstr "взимане предвид на „url.БАЗА.insteadOf“" -#: builtin/ls-remote.c:62 +#: builtin/ls-remote.c:64 msgid "exit with exit code 2 if no matching refs are found" msgstr "изход с код 2, ако не се открият съвпадащи указатели" -#: builtin/ls-remote.c:64 +#: builtin/ls-remote.c:66 msgid "show underlying ref in addition to the object pointed by it" msgstr "извеждане на указателя заедно с обекта сочен от него" @@ -9369,35 +10040,35 @@ msgstr "извеждане на указателя заедно с обекта msgid "git ls-tree [] [...]" msgstr "git ls-tree [ОПЦИЯ…] УКАЗАТЕЛ_КЪМ_ДЪРВО [ПЪТ…]" -#: builtin/ls-tree.c:128 +#: builtin/ls-tree.c:126 msgid "only show trees" msgstr "извеждане само на дървета" -#: builtin/ls-tree.c:130 +#: builtin/ls-tree.c:128 msgid "recurse into subtrees" msgstr "рекурсивно обхождане поддърветата" -#: builtin/ls-tree.c:132 +#: builtin/ls-tree.c:130 msgid "show trees when recursing" msgstr "извеждане на дърветата при рекурсивното обхождане" -#: builtin/ls-tree.c:135 +#: builtin/ls-tree.c:133 msgid "terminate entries with NUL byte" msgstr "разделяне на обектите с нулевия знак „NUL“" -#: builtin/ls-tree.c:136 +#: builtin/ls-tree.c:134 msgid "include object size" msgstr "извеждане на размера на обекта" -#: builtin/ls-tree.c:138 builtin/ls-tree.c:140 +#: builtin/ls-tree.c:136 builtin/ls-tree.c:138 msgid "list only filenames" msgstr "извеждане само имената на файловете" -#: builtin/ls-tree.c:143 +#: builtin/ls-tree.c:141 msgid "use full path names" msgstr "използване на пълните имена на пътищата" -#: builtin/ls-tree.c:145 +#: builtin/ls-tree.c:143 msgid "list entire tree; not just current directory (implies --full-name)" msgstr "" "извеждане на цялото дърво, не само на текущата директория (включва опцията " @@ -9408,172 +10079,176 @@ msgid "git merge [] [...]" msgstr "git merge [ОПЦИЯ…] [ПОДАВАНЕ…]" #: builtin/merge.c:47 -msgid "git merge [] HEAD " -msgstr "git merge [ОПЦИЯ…] СЪОБЩЕНИЕ HEAD ПОДАВАНЕ" - -#: builtin/merge.c:48 msgid "git merge --abort" msgstr "git merge --abort" -#: builtin/merge.c:102 +#: builtin/merge.c:48 +msgid "git merge --continue" +msgstr "git merge --continue" + +#: builtin/merge.c:103 msgid "switch `m' requires a value" msgstr "опцията „-m“ изисква стойност" -#: builtin/merge.c:139 +#: builtin/merge.c:140 #, c-format msgid "Could not find merge strategy '%s'.\n" msgstr "Няма такава стратегия за сливане: „%s“.\n" -#: builtin/merge.c:140 +#: builtin/merge.c:141 #, c-format msgid "Available strategies are:" msgstr "Наличните стратегии са:" -#: builtin/merge.c:145 +#: builtin/merge.c:146 #, c-format msgid "Available custom strategies are:" msgstr "Допълнителните стратегии са:" -#: builtin/merge.c:195 builtin/pull.c:127 +#: builtin/merge.c:196 builtin/pull.c:127 msgid "do not show a diffstat at the end of the merge" msgstr "без извеждане на статистиката след завършване на сливане" -#: builtin/merge.c:198 builtin/pull.c:130 +#: builtin/merge.c:199 builtin/pull.c:130 msgid "show a diffstat at the end of the merge" msgstr "извеждане на статистиката след завършване на сливане" -#: builtin/merge.c:199 builtin/pull.c:133 +#: builtin/merge.c:200 builtin/pull.c:133 msgid "(synonym to --stat)" msgstr "(синоним на „--stat“)" -#: builtin/merge.c:201 builtin/pull.c:136 +#: builtin/merge.c:202 builtin/pull.c:136 msgid "add (at most ) entries from shortlog to merge commit message" msgstr "" "добавяне (на максимум такъв БРОЙ) записи от съкратения журнал в съобщението " "за подаване" -#: builtin/merge.c:204 builtin/pull.c:139 +#: builtin/merge.c:205 builtin/pull.c:139 msgid "create a single commit instead of doing a merge" msgstr "създаване на едно подаване вместо извършване на сливане" -#: builtin/merge.c:206 builtin/pull.c:142 +#: builtin/merge.c:207 builtin/pull.c:142 msgid "perform a commit if the merge succeeds (default)" msgstr "извършване на подаване при успешно сливане (стандартно действие)" -#: builtin/merge.c:208 builtin/pull.c:145 +#: builtin/merge.c:209 builtin/pull.c:145 msgid "edit message before committing" msgstr "редактиране на съобщението преди подаване" -#: builtin/merge.c:209 +#: builtin/merge.c:210 msgid "allow fast-forward (default)" -msgstr "позволяване на тривиално сливане (стандартно действие)" +msgstr "позволяване на превъртане (стандартно действие)" -#: builtin/merge.c:211 builtin/pull.c:151 +#: builtin/merge.c:212 builtin/pull.c:151 msgid "abort if fast-forward is not possible" -msgstr "преустановяване, ако сливането не е тривиално" +msgstr "преустановяване, ако превъртането е невъзможно" -#: builtin/merge.c:215 builtin/pull.c:154 +#: builtin/merge.c:216 builtin/pull.c:154 msgid "verify that the named commit has a valid GPG signature" msgstr "Проверка, че указаното подаване е с правилен подпис на GPG" -#: builtin/merge.c:216 builtin/notes.c:774 builtin/pull.c:158 -#: builtin/revert.c:89 +#: builtin/merge.c:217 builtin/notes.c:773 builtin/pull.c:158 +#: builtin/revert.c:108 msgid "strategy" msgstr "СТРАТЕГИЯ" -#: builtin/merge.c:217 builtin/pull.c:159 +#: builtin/merge.c:218 builtin/pull.c:159 msgid "merge strategy to use" msgstr "СТРАТЕГИЯ за сливане, която да се ползва" -#: builtin/merge.c:218 builtin/pull.c:162 +#: builtin/merge.c:219 builtin/pull.c:162 msgid "option=value" msgstr "ОПЦИЯ=СТОЙНОСТ" -#: builtin/merge.c:219 builtin/pull.c:163 +#: builtin/merge.c:220 builtin/pull.c:163 msgid "option for selected merge strategy" msgstr "ОПЦИЯ за избраната стратегия за сливане" -#: builtin/merge.c:221 +#: builtin/merge.c:222 msgid "merge commit message (for a non-fast-forward merge)" -msgstr "СЪОБЩЕНИЕ при подаването със сливане (при нетривиални сливания)" +msgstr "СЪОБЩЕНИЕ при подаването със сливане (при същински сливания)" -#: builtin/merge.c:225 +#: builtin/merge.c:226 msgid "abort the current in-progress merge" msgstr "преустановяване на текущото сливане" -#: builtin/merge.c:227 builtin/pull.c:170 +#: builtin/merge.c:228 +msgid "continue the current in-progress merge" +msgstr "продължаване на текущото сливане" + +#: builtin/merge.c:230 builtin/pull.c:170 msgid "allow merging unrelated histories" msgstr "позволяване на сливане на независими истории" -#: builtin/merge.c:255 +#: builtin/merge.c:258 msgid "could not run stash." msgstr "не може да се извърши скатаване" -#: builtin/merge.c:260 +#: builtin/merge.c:263 msgid "stash failed" msgstr "неуспешно скатаване" -#: builtin/merge.c:265 +#: builtin/merge.c:268 #, c-format msgid "not a valid object: %s" msgstr "неправилен обект: „%s“" -#: builtin/merge.c:284 builtin/merge.c:301 +#: builtin/merge.c:287 builtin/merge.c:304 msgid "read-tree failed" msgstr "неуспешно прочитане на обект-дърво" -#: builtin/merge.c:331 +#: builtin/merge.c:334 msgid " (nothing to squash)" msgstr " (няма какво да се смачка)" -#: builtin/merge.c:342 +#: builtin/merge.c:345 #, c-format msgid "Squash commit -- not updating HEAD\n" msgstr "Подаване със смачкване — указателят „HEAD“ няма да бъде обновен\n" -#: builtin/merge.c:392 +#: builtin/merge.c:395 #, c-format msgid "No merge message -- not updating HEAD\n" msgstr "" "Липсва съобщение при подаване — указателят „HEAD“ няма да бъде обновен\n" -#: builtin/merge.c:443 +#: builtin/merge.c:446 #, c-format msgid "'%s' does not point to a commit" msgstr "„%s“ не сочи към подаване" -#: builtin/merge.c:533 +#: builtin/merge.c:536 #, c-format msgid "Bad branch.%s.mergeoptions string: %s" msgstr "Неправилен низ за настройката „branch.%s.mergeoptions“: „%s“" -#: builtin/merge.c:652 +#: builtin/merge.c:656 msgid "Not handling anything other than two heads merge." msgstr "Поддържа се само сливане на точно две истории." -#: builtin/merge.c:666 +#: builtin/merge.c:670 #, c-format msgid "Unknown option for merge-recursive: -X%s" msgstr "Непозната опция за рекурсивното сливане „merge-recursive“: „-X%s“" -#: builtin/merge.c:681 +#: builtin/merge.c:685 #, c-format msgid "unable to write %s" msgstr "„%s“ не може да бъде записан" -#: builtin/merge.c:733 +#: builtin/merge.c:737 #, c-format msgid "Could not read from '%s'" msgstr "От „%s“ не може да се чете" -#: builtin/merge.c:742 +#: builtin/merge.c:746 #, c-format msgid "Not committing merge; use 'git commit' to complete the merge.\n" msgstr "" "Сливането няма да бъде подадено. За завършването му и подаването му " "използвайте командата „git commit“.\n" -#: builtin/merge.c:748 +#: builtin/merge.c:752 #, c-format msgid "" "Please enter a commit message to explain why this merge is necessary,\n" @@ -9588,68 +10263,77 @@ msgstr "" "Редовете, които започват с „%c“ ще бъдат пропуснати, а празно съобщение\n" "преустановява подаването.\n" -#: builtin/merge.c:772 +#: builtin/merge.c:776 msgid "Empty commit message." msgstr "Празно съобщение при подаване." -#: builtin/merge.c:792 +#: builtin/merge.c:796 #, c-format msgid "Wonderful.\n" -msgstr "Първият етап на тривиалното сливане завърши.\n" +msgstr "Първият етап на сливането завърши.\n" -#: builtin/merge.c:847 +#: builtin/merge.c:851 #, c-format msgid "Automatic merge failed; fix conflicts and then commit the result.\n" -msgstr "Неуспешно сливане — коригирайте конфликтите и подайте резултата.\n" - -#: builtin/merge.c:863 -#, c-format -msgid "'%s' is not a commit" -msgstr "„%s“ не е подаване" +msgstr "" +"Неуспешно автоматично сливане — коригирайте конфликтите и подайте " +"резултата.\n" -#: builtin/merge.c:904 +#: builtin/merge.c:890 msgid "No current branch." msgstr "Няма текущ клон." -#: builtin/merge.c:906 +#: builtin/merge.c:892 msgid "No remote for the current branch." msgstr "Текущият клон не следи никой." -#: builtin/merge.c:908 +#: builtin/merge.c:894 msgid "No default upstream defined for the current branch." msgstr "Текущият клон не следи никой клон." -#: builtin/merge.c:913 +#: builtin/merge.c:899 #, c-format msgid "No remote-tracking branch for %s from %s" msgstr "Никой клон не следи клона „%s“ от хранилището „%s“" -#: builtin/merge.c:960 +#: builtin/merge.c:946 #, c-format msgid "Bad value '%s' in environment '%s'" msgstr "Неправилна стойност „%s“ в средата „%s“" -#: builtin/merge.c:1034 +#: builtin/merge.c:1020 #, c-format msgid "could not close '%s'" msgstr "„%s“ не може да се затвори" -#: builtin/merge.c:1061 +#: builtin/merge.c:1047 #, c-format msgid "not something we can merge in %s: %s" msgstr "не може да се слее в „%s“: %s" -#: builtin/merge.c:1095 +#: builtin/merge.c:1081 msgid "not something we can merge" msgstr "не може да се слее" -#: builtin/merge.c:1162 +#: builtin/merge.c:1146 +msgid "--abort expects no arguments" +msgstr "опцията „--abort“ не приема аргументи" + +#: builtin/merge.c:1150 msgid "There is no merge to abort (MERGE_HEAD missing)." msgstr "" "Не може да преустановите сливане, защото в момента не се извършва такова " "(липсва указател „MERGE_HEAD“)." -#: builtin/merge.c:1178 +#: builtin/merge.c:1162 +msgid "--continue expects no arguments" +msgstr "опцията „--continue“ не приема аргументи" + +#: builtin/merge.c:1166 +msgid "There is no merge in progress (MERGE_HEAD missing)." +msgstr "В момента не се извършва сливане (липсва указател „MERGE_HEAD“)." + +#: builtin/merge.c:1182 msgid "" "You have not concluded your merge (MERGE_HEAD exists).\n" "Please, commit your changes before you merge." @@ -9657,7 +10341,7 @@ msgstr "" "Не сте завършили сливане. (Указателят „MERGE_HEAD“ съществува).\n" "Подайте промените си, преди да започнете ново сливане." -#: builtin/merge.c:1185 +#: builtin/merge.c:1189 msgid "" "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n" "Please, commit your changes before you merge." @@ -9665,122 +10349,121 @@ msgstr "" "Не сте завършили отбиране на подаване (указателят „CHERRY_PICK_HEAD“\n" "съществува). Подайте промените си, преди да започнете ново сливане." -#: builtin/merge.c:1188 +#: builtin/merge.c:1192 msgid "You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)." msgstr "" "Не сте завършили отбиране на подаване (указателят „CHERRY_PICK_HEAD“\n" "съществува)." -#: builtin/merge.c:1197 +#: builtin/merge.c:1201 msgid "You cannot combine --squash with --no-ff." msgstr "Опцията „--squash“ е несъвместима с „--no-ff“." -#: builtin/merge.c:1205 +#: builtin/merge.c:1209 msgid "No commit specified and merge.defaultToUpstream not set." msgstr "" "Не е указано подаване и настройката „merge.defaultToUpstream“ не е зададена." -#: builtin/merge.c:1222 +#: builtin/merge.c:1226 msgid "Squash commit into empty head not supported yet" msgstr "Подаване със смачкване във връх без история все още не се поддържа" -#: builtin/merge.c:1224 +#: builtin/merge.c:1228 msgid "Non-fast-forward commit does not make sense into an empty head" msgstr "" -"Понеже върхът е без история, всички сливания са тривиални, не може да се " -"извърши нетривиално сливане изисквано от опцията „--no-ff“" +"Понеже върхът е без история, всички сливания са превъртания, не може да се " +"извърши същинско сливане изисквано от опцията „--no-ff“" -#: builtin/merge.c:1229 +#: builtin/merge.c:1233 #, c-format msgid "%s - not something we can merge" msgstr "„%s“ — не е нещо, което може да се слее" -#: builtin/merge.c:1231 +#: builtin/merge.c:1235 msgid "Can merge only exactly one commit into empty head" msgstr "Можете да слеете точно едно подаване във връх без история" -#: builtin/merge.c:1287 +#: builtin/merge.c:1269 #, c-format msgid "Commit %s has an untrusted GPG signature, allegedly by %s." msgstr "" "Подаването „%s“ е с недоверен подпис от GPG, който твърди, че е на „%s“." -#: builtin/merge.c:1290 +#: builtin/merge.c:1272 #, c-format msgid "Commit %s has a bad GPG signature allegedly by %s." msgstr "" "Подаването „%s“ е с неправилен подпис от GPG, който твърди, че е на „%s“." -#: builtin/merge.c:1293 +#: builtin/merge.c:1275 #, c-format msgid "Commit %s does not have a GPG signature." msgstr "Подаването „%s“ е без подпис от GPG." -#: builtin/merge.c:1296 +#: builtin/merge.c:1278 #, c-format msgid "Commit %s has a good GPG signature by %s\n" msgstr "Подаването „%s“ е с коректен подпис от GPG на „%s“.\n" -#: builtin/merge.c:1358 +#: builtin/merge.c:1340 msgid "refusing to merge unrelated histories" msgstr "независими истории не може да се слеят" -#: builtin/merge.c:1367 +#: builtin/merge.c:1349 msgid "Already up-to-date." msgstr "Вече е обновено." -#: builtin/merge.c:1377 +#: builtin/merge.c:1359 #, c-format msgid "Updating %s..%s\n" msgstr "Обновяване „%s..%s“\n" -#: builtin/merge.c:1418 +#: builtin/merge.c:1400 #, c-format msgid "Trying really trivial in-index merge...\n" -msgstr "Проба с най-тривиалното сливане в рамките на индекса…\n" +msgstr "Проба със сливане в рамките на индекса…\n" -#: builtin/merge.c:1425 +#: builtin/merge.c:1407 #, c-format msgid "Nope.\n" msgstr "Неуспешно сливане.\n" -#: builtin/merge.c:1450 +#: builtin/merge.c:1432 msgid "Already up-to-date. Yeeah!" msgstr "Вече е обновено!" -#: builtin/merge.c:1456 +#: builtin/merge.c:1438 msgid "Not possible to fast-forward, aborting." -msgstr "" -"Не може да се извърши тривиално сливане, преустановяване на действието." +msgstr "Не може да се извърши превъртане, преустановяване на действието." -#: builtin/merge.c:1479 builtin/merge.c:1558 +#: builtin/merge.c:1461 builtin/merge.c:1540 #, c-format msgid "Rewinding the tree to pristine...\n" msgstr "Привеждане на дървото към първоначалното…\n" -#: builtin/merge.c:1483 +#: builtin/merge.c:1465 #, c-format msgid "Trying merge strategy %s...\n" msgstr "Пробване със стратегията за сливане „%s“…\n" -#: builtin/merge.c:1549 +#: builtin/merge.c:1531 #, c-format msgid "No merge strategy handled the merge.\n" msgstr "Никоя стратегия за сливане не може да извърши сливането.\n" -#: builtin/merge.c:1551 +#: builtin/merge.c:1533 #, c-format msgid "Merge with strategy %s failed.\n" msgstr "Неуспешно сливане със стратегия „%s“.\n" -#: builtin/merge.c:1560 +#: builtin/merge.c:1542 #, c-format msgid "Using the %s to prepare resolving by hand.\n" msgstr "" "Ползва се стратегията „%s“, която ще подготви дървото за коригиране на " "ръка.\n" -#: builtin/merge.c:1572 +#: builtin/merge.c:1554 #, c-format msgid "Automatic merge went well; stopped before committing as requested\n" msgstr "" @@ -9836,35 +10519,35 @@ msgstr "" "git merge-file [ОПЦИЯ…] [-L ИМЕ_1 [-L ОРИГИНАЛ [-L ИМЕ_2]]] ФАЙЛ_1 ОРИГ_ФАЙЛ " "ФАЙЛ_2" -#: builtin/merge-file.c:33 +#: builtin/merge-file.c:32 msgid "send results to standard output" msgstr "извеждане на резултатите на стандартния изход" -#: builtin/merge-file.c:34 +#: builtin/merge-file.c:33 msgid "use a diff3 based merge" msgstr "сливане на базата на „diff3“" -#: builtin/merge-file.c:35 +#: builtin/merge-file.c:34 msgid "for conflicts, use our version" msgstr "при конфликти да се ползва локалната версия" -#: builtin/merge-file.c:37 +#: builtin/merge-file.c:36 msgid "for conflicts, use their version" msgstr "при конфликти да се ползва чуждата версия" -#: builtin/merge-file.c:39 +#: builtin/merge-file.c:38 msgid "for conflicts, use a union version" msgstr "при конфликти да се ползва обединена версия" -#: builtin/merge-file.c:42 +#: builtin/merge-file.c:41 msgid "for conflicts, use this marker size" msgstr "при конфликти да се ползва маркер с такъв БРОЙ знаци" -#: builtin/merge-file.c:43 +#: builtin/merge-file.c:42 msgid "do not warn about conflicts" msgstr "без предупреждения при конфликти" -#: builtin/merge-file.c:45 +#: builtin/merge-file.c:44 msgid "set labels for file1/orig-file/file2" msgstr "задаване на етикети за ФАЙЛ_1/ОРИГИНАЛ/ФАЙЛ_2" @@ -9915,139 +10598,143 @@ msgstr "разрешаване на липсващи обекти" msgid "allow creation of more than one tree" msgstr "разрешаване на създаването на повече от едно дърво" -#: builtin/mv.c:15 +#: builtin/mv.c:16 msgid "git mv [] ... " msgstr "git mv [ОПЦИЯ…] ОБЕКТ… ЦЕЛ" -#: builtin/mv.c:70 +#: builtin/mv.c:82 #, c-format msgid "Directory %s is in index and no submodule?" msgstr "Директорията „%s“ е в индекса, но не е подмодул" -#: builtin/mv.c:72 builtin/rm.c:317 +#: builtin/mv.c:84 builtin/rm.c:290 msgid "Please stage your changes to .gitmodules or stash them to proceed" msgstr "" "За да продължите, или вкарайте промените по файла „.gitmodules“ в индекса,\n" "или ги скатайте" -#: builtin/mv.c:90 +#: builtin/mv.c:102 #, c-format msgid "%.*s is in index" msgstr "„%.*s“ вече е в индекса" -#: builtin/mv.c:112 +#: builtin/mv.c:124 msgid "force move/rename even if target exists" msgstr "принудително преместване/преименуване дори целта да съществува" -#: builtin/mv.c:113 +#: builtin/mv.c:125 msgid "skip move/rename errors" msgstr "прескачане на грешките при преместване/преименуване" -#: builtin/mv.c:155 +#: builtin/mv.c:167 #, c-format msgid "destination '%s' is not a directory" msgstr "целта „%s“ съществува и не е директория" -#: builtin/mv.c:166 +#: builtin/mv.c:178 #, c-format msgid "Checking rename of '%s' to '%s'\n" msgstr "Проверка на преименуването на обект от „%s“ на „%s“\n" -#: builtin/mv.c:170 +#: builtin/mv.c:182 msgid "bad source" msgstr "неправилен обект" -#: builtin/mv.c:173 +#: builtin/mv.c:185 msgid "can not move directory into itself" msgstr "директория не може да се премести в себе си" -#: builtin/mv.c:176 +#: builtin/mv.c:188 msgid "cannot move directory over file" msgstr "директория не може да се премести върху файл" -#: builtin/mv.c:185 +#: builtin/mv.c:197 msgid "source directory is empty" msgstr "първоначалната директория е празна" -#: builtin/mv.c:210 +#: builtin/mv.c:222 msgid "not under version control" msgstr "не е под контрола на Git" -#: builtin/mv.c:213 +#: builtin/mv.c:225 msgid "destination exists" msgstr "целта съществува" -#: builtin/mv.c:221 +#: builtin/mv.c:233 #, c-format msgid "overwriting '%s'" msgstr "презаписване на „%s“" -#: builtin/mv.c:224 +#: builtin/mv.c:236 msgid "Cannot overwrite" msgstr "Презаписването е невъзможно" -#: builtin/mv.c:227 +#: builtin/mv.c:239 msgid "multiple sources for the same target" msgstr "множество източници за една цел" -#: builtin/mv.c:229 +#: builtin/mv.c:241 msgid "destination directory does not exist" msgstr "целевата директория не съществува" -#: builtin/mv.c:236 +#: builtin/mv.c:248 #, c-format msgid "%s, source=%s, destination=%s" msgstr "%s, обект: „%s“, цел: „%s“" -#: builtin/mv.c:257 +#: builtin/mv.c:269 #, c-format msgid "Renaming %s to %s\n" msgstr "Преименуване на „%s“ на „%s“\n" -#: builtin/mv.c:263 builtin/remote.c:710 builtin/repack.c:375 +#: builtin/mv.c:275 builtin/remote.c:710 builtin/repack.c:384 #, c-format msgid "renaming '%s' failed" msgstr "неуспешно преименуване на „%s“" -#: builtin/name-rev.c:257 +#: builtin/name-rev.c:289 msgid "git name-rev [] ..." msgstr "git name-rev [ОПЦИЯ…] ПОДАВАНЕ…" -#: builtin/name-rev.c:258 +#: builtin/name-rev.c:290 msgid "git name-rev [] --all" msgstr "git name-rev [ОПЦИЯ…] --all" -#: builtin/name-rev.c:259 +#: builtin/name-rev.c:291 msgid "git name-rev [] --stdin" msgstr "git name-rev [ОПЦИЯ…] --stdin" -#: builtin/name-rev.c:311 +#: builtin/name-rev.c:346 msgid "print only names (no SHA-1)" msgstr "извеждане само на имената (без сумите по SHA1)" -#: builtin/name-rev.c:312 +#: builtin/name-rev.c:347 msgid "only use tags to name the commits" msgstr "използване само на етикетите за именуване на подаванията" -#: builtin/name-rev.c:314 +#: builtin/name-rev.c:349 msgid "only use refs matching " msgstr "използване само на указателите напасващи на ШАБЛОНа" -#: builtin/name-rev.c:316 +#: builtin/name-rev.c:351 +msgid "ignore refs matching " +msgstr "игнориране на указателите напасващи на ШАБЛОНа" + +#: builtin/name-rev.c:353 msgid "list all commits reachable from all refs" msgstr "" "извеждане на всички подавания, които могат да бъдат достигнати от всички " "указатели" -#: builtin/name-rev.c:317 +#: builtin/name-rev.c:354 msgid "read from stdin" msgstr "четене от стандартния вход" -#: builtin/name-rev.c:318 +#: builtin/name-rev.c:355 msgid "allow to print `undefined` names (default)" msgstr "да се извеждат и недефинираните имена (стандартна стойност на опцията)" -#: builtin/name-rev.c:324 +#: builtin/name-rev.c:361 msgid "dereference tags in the input (internal use)" msgstr "извеждане на идентификаторите на обекти-етикети (за вътрешни нужди)" @@ -10194,19 +10881,19 @@ msgstr "обектът-бележка не може да бъде записан msgid "the note contents have been left in %s" msgstr "съдържанието на бележката е във файла „%s“" -#: builtin/notes.c:233 builtin/tag.c:439 +#: builtin/notes.c:233 builtin/tag.c:516 #, c-format msgid "cannot read '%s'" msgstr "файлът „%s“ не може да бъде прочетен" -#: builtin/notes.c:235 builtin/tag.c:442 +#: builtin/notes.c:235 builtin/tag.c:519 #, c-format msgid "could not open or read '%s'" msgstr "файлът „%s“ не може да бъде отворен или прочетен" #: builtin/notes.c:254 builtin/notes.c:305 builtin/notes.c:307 #: builtin/notes.c:372 builtin/notes.c:427 builtin/notes.c:513 -#: builtin/notes.c:518 builtin/notes.c:596 builtin/notes.c:659 +#: builtin/notes.c:518 builtin/notes.c:596 builtin/notes.c:658 #, c-format msgid "failed to resolve '%s' as a valid ref." msgstr "не може да се открие към какво сочи „%s“." @@ -10242,12 +10929,12 @@ msgstr "" "notes/“." #: builtin/notes.c:365 builtin/notes.c:420 builtin/notes.c:496 -#: builtin/notes.c:508 builtin/notes.c:584 builtin/notes.c:652 -#: builtin/notes.c:802 builtin/notes.c:949 builtin/notes.c:970 +#: builtin/notes.c:508 builtin/notes.c:584 builtin/notes.c:651 +#: builtin/notes.c:801 builtin/notes.c:948 builtin/notes.c:969 msgid "too many parameters" msgstr "прекалено много параметри" -#: builtin/notes.c:378 builtin/notes.c:665 +#: builtin/notes.c:378 builtin/notes.c:664 #, c-format msgid "no note found for object %s." msgstr "няма бележки за обекта „%s“." @@ -10290,7 +10977,7 @@ msgstr "" msgid "Overwriting existing notes for object %s\n" msgstr "Презаписване на съществуващите бележки за обекта „%s“\n" -#: builtin/notes.c:463 builtin/notes.c:624 builtin/notes.c:889 +#: builtin/notes.c:463 builtin/notes.c:623 builtin/notes.c:888 #, c-format msgid "Removing note for object %s\n" msgstr "Изтриване на бележката за обекта „%s“\n" @@ -10334,52 +11021,52 @@ msgstr "" "Вместо това ги използвайте с подкомандата „add“: „git notes add -f -m/-F/-c/-" "C“.\n" -#: builtin/notes.c:685 +#: builtin/notes.c:684 msgid "failed to delete ref NOTES_MERGE_PARTIAL" msgstr "указателят „NOTES_MERGE_PARTIAL“ не може да бъде изтрит" -#: builtin/notes.c:687 +#: builtin/notes.c:686 msgid "failed to delete ref NOTES_MERGE_REF" msgstr "указателят „NOTES_MERGE_REF“ не може да бъде изтрит" -#: builtin/notes.c:689 +#: builtin/notes.c:688 msgid "failed to remove 'git notes merge' worktree" msgstr "работната директория на „git notes merge“ не може да бъде изтрита" -#: builtin/notes.c:709 +#: builtin/notes.c:708 msgid "failed to read ref NOTES_MERGE_PARTIAL" msgstr "указателят „NOTES_MERGE_PARTIAL“ не може да бъде прочетен" -#: builtin/notes.c:711 +#: builtin/notes.c:710 msgid "could not find commit from NOTES_MERGE_PARTIAL." msgstr "подаването от „NOTES_MERGE_PARTIAL“ не може да се открие." -#: builtin/notes.c:713 +#: builtin/notes.c:712 msgid "could not parse commit from NOTES_MERGE_PARTIAL." msgstr "подаването от „NOTES_MERGE_PARTIAL“ не може да се анализира." -#: builtin/notes.c:726 +#: builtin/notes.c:725 msgid "failed to resolve NOTES_MERGE_REF" msgstr "не може да се открие към какво сочи „NOTES_MERGE_REF“" -#: builtin/notes.c:729 +#: builtin/notes.c:728 msgid "failed to finalize notes merge" msgstr "неуспешно сливане на бележките" -#: builtin/notes.c:755 +#: builtin/notes.c:754 #, c-format msgid "unknown notes merge strategy %s" msgstr "непозната стратегия за сливане на бележки „%s“" -#: builtin/notes.c:771 +#: builtin/notes.c:770 msgid "General options" msgstr "Общи опции" -#: builtin/notes.c:773 +#: builtin/notes.c:772 msgid "Merge options" msgstr "Опции при сливане" -#: builtin/notes.c:775 +#: builtin/notes.c:774 msgid "" "resolve notes conflicts using the given strategy (manual/ours/theirs/union/" "cat_sort_uniq)" @@ -10389,46 +11076,46 @@ msgstr "" "„union“ (обединяване), „cat_sort_uniq“ (обединяване, подреждане, уникални " "резултати)" -#: builtin/notes.c:777 +#: builtin/notes.c:776 msgid "Committing unmerged notes" msgstr "Подаване на неслети бележки" -#: builtin/notes.c:779 +#: builtin/notes.c:778 msgid "finalize notes merge by committing unmerged notes" msgstr "завършване на сливането чрез подаване на неслети бележки" -#: builtin/notes.c:781 +#: builtin/notes.c:780 msgid "Aborting notes merge resolution" msgstr "Преустановяване на корекцията при сливането на бележки" -#: builtin/notes.c:783 +#: builtin/notes.c:782 msgid "abort notes merge" msgstr "преустановяване на сливането на бележки" -#: builtin/notes.c:794 +#: builtin/notes.c:793 msgid "cannot mix --commit, --abort or -s/--strategy" msgstr "опциите „--commit“, „--abort“ и „-s“/„--strategy“ са несъвместими" -#: builtin/notes.c:799 +#: builtin/notes.c:798 msgid "must specify a notes ref to merge" msgstr "трябва да укажете указател към бележка за сливане." -#: builtin/notes.c:823 +#: builtin/notes.c:822 #, c-format msgid "unknown -s/--strategy: %s" msgstr "неизвестна стратегия към опцията „-s“/„--strategy“: „%s“" -#: builtin/notes.c:860 +#: builtin/notes.c:859 #, c-format msgid "a notes merge into %s is already in-progress at %s" msgstr "в момента се извършва сливане на бележките в „%s“ при „%s“" -#: builtin/notes.c:863 +#: builtin/notes.c:862 #, c-format msgid "failed to store link to current notes ref (%s)" msgstr "не може да се запази връзка към указателя на текущата бележка („%s“)." -#: builtin/notes.c:865 +#: builtin/notes.c:864 #, c-format msgid "" "Automatic notes merge failed. Fix conflicts in %s and commit the result with " @@ -10439,36 +11126,36 @@ msgstr "" "резултата с „git notes merge --commit“ или преустановете сливането с " "командата „git notes merge --abort“.\n" -#: builtin/notes.c:887 +#: builtin/notes.c:886 #, c-format msgid "Object %s has no note\n" msgstr "Няма бележки за обекта „%s“\n" -#: builtin/notes.c:899 +#: builtin/notes.c:898 msgid "attempt to remove non-existent note is not an error" msgstr "опитът за изтриването на несъществуваща бележка не се счита за грешка" -#: builtin/notes.c:902 +#: builtin/notes.c:901 msgid "read object names from the standard input" msgstr "изчитане на имената на обектите от стандартния вход" -#: builtin/notes.c:940 builtin/prune.c:105 builtin/worktree.c:127 +#: builtin/notes.c:939 builtin/prune.c:105 builtin/worktree.c:127 msgid "do not remove, show only" msgstr "само извеждане без действително окастряне" -#: builtin/notes.c:941 +#: builtin/notes.c:940 msgid "report pruned notes" msgstr "докладване на окастрените обекти" -#: builtin/notes.c:983 +#: builtin/notes.c:982 msgid "notes-ref" msgstr "УКАЗАТЕЛ_ЗА_БЕЛЕЖКА" -#: builtin/notes.c:984 +#: builtin/notes.c:983 msgid "use notes from " msgstr "да се използва бележката сочена от този УКАЗАТЕЛ_ЗА_БЕЛЕЖКА" -#: builtin/notes.c:1019 +#: builtin/notes.c:1018 #, c-format msgid "unknown subcommand: %s" msgstr "непозната подкоманда: %s" @@ -10486,192 +11173,192 @@ msgstr "" "git pack-objects [ОПЦИЯ…] ПРЕФИКС_НА_ИМЕТО [< СПИСЪК_С_УКАЗАТЕЛИ | < " "СПИСЪК_С_ОБЕКТИ]" -#: builtin/pack-objects.c:179 builtin/pack-objects.c:182 +#: builtin/pack-objects.c:177 builtin/pack-objects.c:180 #, c-format msgid "deflate error (%d)" msgstr "грешка при декомпресиране с „deflate“ (%d)" -#: builtin/pack-objects.c:768 +#: builtin/pack-objects.c:770 msgid "disabling bitmap writing, packs are split due to pack.packSizeLimit" msgstr "" "изключване на записването на битовата маска, пакетите са разделени поради " "стойността на „pack.packSizeLimit“" -#: builtin/pack-objects.c:781 +#: builtin/pack-objects.c:783 msgid "Writing objects" msgstr "Записване на обектите" -#: builtin/pack-objects.c:1070 +#: builtin/pack-objects.c:1063 msgid "disabling bitmap writing, as some objects are not being packed" msgstr "" "изключване на записването на битовата маска, защото някои обекти няма да се " "пакетират" -#: builtin/pack-objects.c:2346 +#: builtin/pack-objects.c:2426 msgid "Compressing objects" msgstr "Компресиране на обектите" -#: builtin/pack-objects.c:2759 +#: builtin/pack-objects.c:2829 #, c-format msgid "unsupported index version %s" msgstr "неподдържана версия на индекса „%s“" -#: builtin/pack-objects.c:2763 +#: builtin/pack-objects.c:2833 #, c-format msgid "bad index version '%s'" msgstr "неправилна версия на индекса „%s“" -#: builtin/pack-objects.c:2793 +#: builtin/pack-objects.c:2863 msgid "do not show progress meter" msgstr "без извеждане на напредъка" -#: builtin/pack-objects.c:2795 +#: builtin/pack-objects.c:2865 msgid "show progress meter" msgstr "извеждане на напредъка" -#: builtin/pack-objects.c:2797 +#: builtin/pack-objects.c:2867 msgid "show progress meter during object writing phase" msgstr "извеждане на напредъка във фазата на запазване на обектите" -#: builtin/pack-objects.c:2800 +#: builtin/pack-objects.c:2870 msgid "similar to --all-progress when progress meter is shown" msgstr "" "същото действие като опцията „--all-progress“ при извеждането на напредъка" -#: builtin/pack-objects.c:2801 +#: builtin/pack-objects.c:2871 msgid "version[,offset]" msgstr "ВЕРСИЯ[,ОТМЕСТВАНЕ]" -#: builtin/pack-objects.c:2802 +#: builtin/pack-objects.c:2872 msgid "write the pack index file in the specified idx format version" msgstr "" "запазване на индекса на пакетните файлове във форма̀та с указаната версия" -#: builtin/pack-objects.c:2805 +#: builtin/pack-objects.c:2875 msgid "maximum size of each output pack file" msgstr "максимален размер на всеки пакетен файл" -#: builtin/pack-objects.c:2807 +#: builtin/pack-objects.c:2877 msgid "ignore borrowed objects from alternate object store" msgstr "игнориране на обектите заети от други хранилища на обекти" -#: builtin/pack-objects.c:2809 +#: builtin/pack-objects.c:2879 msgid "ignore packed objects" msgstr "игнориране на пакетираните обекти" -#: builtin/pack-objects.c:2811 +#: builtin/pack-objects.c:2881 msgid "limit pack window by objects" msgstr "ограничаване на прозореца за пакетиране по брой обекти" -#: builtin/pack-objects.c:2813 +#: builtin/pack-objects.c:2883 msgid "limit pack window by memory in addition to object limit" msgstr "" "ограничаване на прозореца за пакетиране и по памет освен по брой обекти" -#: builtin/pack-objects.c:2815 +#: builtin/pack-objects.c:2885 msgid "maximum length of delta chain allowed in the resulting pack" msgstr "" "максимална дължина на веригата от разлики, която е позволена в пакетния файл" -#: builtin/pack-objects.c:2817 +#: builtin/pack-objects.c:2887 msgid "reuse existing deltas" msgstr "преизползване на съществуващите разлики" -#: builtin/pack-objects.c:2819 +#: builtin/pack-objects.c:2889 msgid "reuse existing objects" msgstr "преизползване на съществуващите обекти" -#: builtin/pack-objects.c:2821 +#: builtin/pack-objects.c:2891 msgid "use OFS_DELTA objects" msgstr "използване на обекти „OFS_DELTA“" -#: builtin/pack-objects.c:2823 +#: builtin/pack-objects.c:2893 msgid "use threads when searching for best delta matches" msgstr "" "стартиране на нишки за претърсване на най-добрите съвпадения на разликите" -#: builtin/pack-objects.c:2825 +#: builtin/pack-objects.c:2895 msgid "do not create an empty pack output" msgstr "без създаване на празен пакетен файл" -#: builtin/pack-objects.c:2827 +#: builtin/pack-objects.c:2897 msgid "read revision arguments from standard input" msgstr "изчитане на версиите от стандартния вход" -#: builtin/pack-objects.c:2829 +#: builtin/pack-objects.c:2899 msgid "limit the objects to those that are not yet packed" msgstr "ограничаване до все още непакетираните обекти" -#: builtin/pack-objects.c:2832 +#: builtin/pack-objects.c:2902 msgid "include objects reachable from any reference" msgstr "" "включване на всички обекти, които могат да се достигнат от произволен " "указател" -#: builtin/pack-objects.c:2835 +#: builtin/pack-objects.c:2905 msgid "include objects referred by reflog entries" msgstr "включване и на обектите сочени от записите в журнала на указателите" -#: builtin/pack-objects.c:2838 +#: builtin/pack-objects.c:2908 msgid "include objects referred to by the index" msgstr "включване и на обектите сочени от индекса" -#: builtin/pack-objects.c:2841 +#: builtin/pack-objects.c:2911 msgid "output pack to stdout" msgstr "извеждане на пакета на стандартния изход" -#: builtin/pack-objects.c:2843 +#: builtin/pack-objects.c:2913 msgid "include tag objects that refer to objects to be packed" msgstr "" "включване и на обектите-етикети, които сочат към обектите, които ще бъдат " "пакетирани" -#: builtin/pack-objects.c:2845 +#: builtin/pack-objects.c:2915 msgid "keep unreachable objects" msgstr "запазване на недостижимите обекти" -#: builtin/pack-objects.c:2847 +#: builtin/pack-objects.c:2917 msgid "pack loose unreachable objects" msgstr "пакетиране и на недостижимите обекти" -#: builtin/pack-objects.c:2849 +#: builtin/pack-objects.c:2919 msgid "unpack unreachable objects newer than