diff options
175 files changed, 5385 insertions, 2811 deletions
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 952c7c3a2a..37654cdfd7 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -4,4 +4,7 @@ a mailing list (git@vger.kernel.org) for code submissions, code reviews, and bug reports. Nevertheless, you can use GitGitGadget (https://gitgitgadget.github.io/) to conveniently send your Pull Requests commits to our mailing list. +For a single-commit pull request, please *leave the pull request description +empty*: your commit message itself should describe your changes. + Please read the "guidelines for contributing" linked above! diff --git a/.github/workflows/check-whitespace.yml b/.github/workflows/check-whitespace.yml index a58e2dc8ad..a241a63428 100644 --- a/.github/workflows/check-whitespace.yml +++ b/.github/workflows/check-whitespace.yml @@ -19,7 +19,7 @@ jobs: check-whitespace: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 diff --git a/.github/workflows/coverity.yml b/.github/workflows/coverity.yml index e5532d381b..53cf12fe04 100644 --- a/.github/workflows/coverity.yml +++ b/.github/workflows/coverity.yml @@ -38,7 +38,7 @@ jobs: COVERITY_LANGUAGE: cxx COVERITY_PLATFORM: overridden-below steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: install minimal Git for Windows SDK if: contains(matrix.os, 'windows') uses: git-for-windows/setup-git-for-windows-sdk@v1 @@ -98,7 +98,7 @@ jobs: # A cache miss will add ~30s to create, but a cache hit will save minutes. - name: restore the Coverity Build Tool id: cache - uses: actions/cache/restore@v3 + uses: actions/cache/restore@v4 with: path: ${{ runner.temp }}/cov-analysis key: cov-build-${{ env.COVERITY_LANGUAGE }}-${{ env.COVERITY_PLATFORM }}-${{ steps.lookup.outputs.hash }} @@ -141,7 +141,7 @@ jobs: esac - name: cache the Coverity Build Tool if: steps.cache.outputs.cache-hit != 'true' - uses: actions/cache/save@v3 + uses: actions/cache/save@v4 with: path: ${{ runner.temp }}/cov-analysis key: cov-build-${{ env.COVERITY_LANGUAGE }}-${{ env.COVERITY_PLATFORM }}-${{ steps.lookup.outputs.hash }} diff --git a/.github/workflows/l10n.yml b/.github/workflows/l10n.yml index 6c3849658a..e2c3dbdcb5 100644 --- a/.github/workflows/l10n.yml +++ b/.github/workflows/l10n.yml @@ -63,9 +63,10 @@ jobs: origin \ ${{ github.ref }} \ $args - - uses: actions/setup-go@v2 + - uses: actions/setup-go@v5 with: go-version: '>=1.16' + cache: false - name: Install git-po-helper run: go install github.com/git-l10n/git-po-helper@main - name: Install other dependencies @@ -91,14 +92,13 @@ jobs: cat git-po-helper.out exit $exit_code - name: Create comment in pull request for report - uses: mshick/add-pr-comment@v1 + uses: mshick/add-pr-comment@v2 if: >- always() && github.event_name == 'pull_request_target' && env.COMMENT_BODY != '' with: repo-token: ${{ secrets.GITHUB_TOKEN }} - repo-token-user-login: 'github-actions[bot]' message: > ${{ steps.check-commits.outcome == 'failure' && 'Errors and warnings' || 'Warnings' }} found by [git-po-helper](https://github.com/git-l10n/git-po-helper#readme) in workflow diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 1b43e49dad..683a2d633e 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -63,7 +63,7 @@ jobs: echo "skip_concurrent=$skip_concurrent" >>$GITHUB_OUTPUT - name: skip if the commit or tree was already tested id: skip-if-redundant - uses: actions/github-script@v6 + uses: actions/github-script@v7 if: steps.check-ref.outputs.enabled == 'yes' with: github-token: ${{secrets.GITHUB_TOKEN}} @@ -112,7 +112,7 @@ jobs: group: windows-build-${{ github.ref }} cancel-in-progress: ${{ needs.ci-config.outputs.skip_concurrent == 'yes' }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: git-for-windows/setup-git-for-windows-sdk@v1 - name: build shell: bash @@ -123,7 +123,7 @@ jobs: - name: zip up tracked files run: git archive -o artifacts/tracked.tar.gz HEAD - name: upload tracked files and build artifacts - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: windows-artifacts path: artifacts @@ -140,7 +140,7 @@ jobs: cancel-in-progress: ${{ needs.ci-config.outputs.skip_concurrent == 'yes' }} steps: - name: download tracked files and build artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: windows-artifacts path: ${{github.workspace}} @@ -157,7 +157,7 @@ jobs: run: ci/print-test-failures.sh - name: Upload failed tests' directories if: failure() && env.FAILED_TEST_ARTIFACTS != '' - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: failed-tests-windows path: ${{env.FAILED_TEST_ARTIFACTS}} @@ -173,10 +173,10 @@ jobs: group: vs-build-${{ github.ref }} cancel-in-progress: ${{ needs.ci-config.outputs.skip_concurrent == 'yes' }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: git-for-windows/setup-git-for-windows-sdk@v1 - name: initialize vcpkg - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: repository: 'microsoft/vcpkg' path: 'compat/vcbuild/vcpkg' @@ -212,7 +212,7 @@ jobs: - name: zip up tracked files run: git archive -o artifacts/tracked.tar.gz HEAD - name: upload tracked files and build artifacts - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: vs-artifacts path: artifacts @@ -230,7 +230,7 @@ jobs: steps: - uses: git-for-windows/setup-git-for-windows-sdk@v1 - name: download tracked files and build artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: vs-artifacts path: ${{github.workspace}} @@ -248,7 +248,7 @@ jobs: run: ci/print-test-failures.sh - name: Upload failed tests' directories if: failure() && env.FAILED_TEST_ARTIFACTS != '' - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: failed-tests-windows path: ${{env.FAILED_TEST_ARTIFACTS}} @@ -306,7 +306,7 @@ jobs: runs_on_pool: ${{matrix.vector.pool}} runs-on: ${{matrix.vector.pool}} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - run: ci/install-dependencies.sh - run: ci/run-build-and-tests.sh - name: print test failures @@ -314,7 +314,7 @@ jobs: run: ci/print-test-failures.sh - name: Upload failed tests' directories if: failure() && env.FAILED_TEST_ARTIFACTS != '' - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: failed-tests-${{matrix.vector.jobname}} path: ${{env.FAILED_TEST_ARTIFACTS}} @@ -326,7 +326,7 @@ jobs: CC: clang runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - run: ci/install-dependencies.sh - run: ci/run-build-and-minimal-fuzzers.sh dockerized: @@ -351,9 +351,9 @@ jobs: runs-on: ubuntu-latest container: ${{matrix.vector.image}} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 if: matrix.vector.jobname != 'linux32' - - uses: actions/checkout@v1 + - uses: actions/checkout@v1 # cannot be upgraded because Node.js Actions aren't supported in this container if: matrix.vector.jobname == 'linux32' - run: ci/install-docker-dependencies.sh - run: ci/run-build-and-tests.sh @@ -362,13 +362,13 @@ jobs: run: ci/print-test-failures.sh - name: Upload failed tests' directories if: failure() && env.FAILED_TEST_ARTIFACTS != '' && matrix.vector.jobname != 'linux32' - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: failed-tests-${{matrix.vector.jobname}} path: ${{env.FAILED_TEST_ARTIFACTS}} - name: Upload failed tests' directories if: failure() && env.FAILED_TEST_ARTIFACTS != '' && matrix.vector.jobname == 'linux32' - uses: actions/upload-artifact@v1 + uses: actions/upload-artifact@v1 # cannot be upgraded because Node.js Actions aren't supported in this container with: name: failed-tests-${{matrix.vector.jobname}} path: ${{env.FAILED_TEST_ARTIFACTS}} @@ -382,7 +382,7 @@ jobs: group: static-analysis-${{ github.ref }} cancel-in-progress: ${{ needs.ci-config.outputs.skip_concurrent == 'yes' }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - run: ci/install-dependencies.sh - run: ci/run-static-analysis.sh - run: ci/check-directional-formatting.bash @@ -405,7 +405,7 @@ jobs: artifact: sparse-20.04 - name: Install the current `sparse` package run: sudo dpkg -i sparse-20.04/sparse_*.deb - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install other dependencies run: ci/install-dependencies.sh - run: make sparse @@ -420,6 +420,6 @@ jobs: jobname: Documentation runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - run: ci/install-dependencies.sh - run: ci/test-documentation.sh diff --git a/Documentation/CodingGuidelines b/Documentation/CodingGuidelines index 578587a471..32e69f798e 100644 --- a/Documentation/CodingGuidelines +++ b/Documentation/CodingGuidelines @@ -446,12 +446,41 @@ For C programs: detail. - The first #include in C files, except in platform specific compat/ - implementations and sha1dc/, must be either "git-compat-util.h" or - one of the approved headers that includes it first for you. (The - approved headers currently include "builtin.h", - "t/helper/test-tool.h", "xdiff/xinclude.h", or - "reftable/system.h".) You do not have to include more than one of - these. + implementations and sha1dc/, must be <git-compat-util.h>. This + header file insulates other header files and source files from + platform differences, like which system header files must be + included in what order, and what C preprocessor feature macros must + be defined to trigger certain features we expect out of the system. + A collorary to this is that C files should not directly include + system header files themselves. + + There are some exceptions, because certain group of files that + implement an API all have to include the same header file that + defines the API and it is convenient to include <git-compat-util.h> + there. Namely: + + - the implementation of the built-in commands in the "builtin/" + directory that include "builtin.h" for the cmd_foo() prototype + definition, + + - the test helper programs in the "t/helper/" directory that include + "t/helper/test-tool.h" for the cmd__foo() prototype definition, + + - the xdiff implementation in the "xdiff/" directory that includes + "xdiff/xinclude.h" for the xdiff machinery internals, + + - the unit test programs in "t/unit-tests/" directory that include + "t/unit-tests/test-lib.h" that gives them the unit-tests + framework, and + + - the source files that implement reftable in the "reftable/" + directory that include "reftable/system.h" for the reftable + internals, + + are allowed to assume that they do not have to include + <git-compat-util.h> themselves, as it is included as the first + '#include' in these header files. These headers must be the first + header file to be "#include"d in them, though. - A C file must directly include the header files that declare the functions and the types it uses, except for the functions and types @@ -666,6 +695,11 @@ Writing Documentation: <new-branch-name> --template=<template-directory> + When a placeholder is cited in text paragraph, it is enclosed in angle + brackets to remind the reader the reference in the synopsis section. + For better visibility, the placeholder is typeset in italics: + The _<file>_ to be added. + Possibility of multiple occurrences is indicated by three dots: <file>... (One or more of <file>.) @@ -751,6 +785,8 @@ Writing Documentation: Incorrect: `\--pretty=oneline` +A placeholder is not enclosed in backticks, as it is not a literal. + If some place in the documentation needs to typeset a command usage example with inline substitutions, it is fine to use +monospaced and inline substituted text+ instead of `monospaced literal text`, and with diff --git a/Documentation/RelNotes/2.43.2.txt b/Documentation/RelNotes/2.43.2.txt new file mode 100644 index 0000000000..5895e23a54 --- /dev/null +++ b/Documentation/RelNotes/2.43.2.txt @@ -0,0 +1,37 @@ +Git 2.43.2 Release Notes +======================== + +Relative to Git 2.43.1, this release has two important fixes to allow +"git imap-send" to be built with NO_CURL defined, and to restore the +forced flushing behaviour when GIT_FLUSH=1 is set. It also contains +other, unexciting, fixes that have already been merged to the 'master' +branch of the development towards the next major release. + +Fixes since Git 2.43.1 +---------------------- + + * Update to a new feature recently added, "git show-ref --exists". + + * Rename detection logic ignored the final line of a file if it is an + incomplete line. + + * "git diff --no-rename A B" did not disable rename detection but did + not trigger an error from the command line parser. + + * "git diff --no-index file1 file2" segfaulted while invoking the + external diff driver, which has been corrected. + + * Rewrite //-comments to /* comments */ in files whose comments + prevalently use the latter. + + * A failed "git tag -s" did not necessarily result in an error + depending on the crypto backend, which has been corrected. + + * "git stash" sometimes was silent even when it failed due to + unwritable index file, which has been corrected. + + * Recent conversion to allow more than 0/1 in GIT_FLUSH broke the + mechanism by flipping what yes/no means by mistake, which has been + corrected. + +Also contains documentation updates, code clean-ups and minor fixups. diff --git a/Documentation/RelNotes/2.43.3.txt b/Documentation/RelNotes/2.43.3.txt new file mode 100644 index 0000000000..924f20594f --- /dev/null +++ b/Documentation/RelNotes/2.43.3.txt @@ -0,0 +1,12 @@ +Git 2.43.3 Release Notes +======================== + +Relative to Git 2.43.2, this release fixes one regression that +manifests while running "git commit -v --trailer". + +Fixes since Git 2.43.2 +---------------------- + + * "git commit -v --trailer=..." was broken with recent update and + placed the trailer _after_ the divider line, which has been + corrected. diff --git a/Documentation/RelNotes/2.44.0.txt b/Documentation/RelNotes/2.44.0.txt index edeed71855..14f9ce8226 100644 --- a/Documentation/RelNotes/2.44.0.txt +++ b/Documentation/RelNotes/2.44.0.txt @@ -3,7 +3,7 @@ Git v2.44 Release Notes Backward Compatibility Notes - * "git chekcout -B <branch>" used to allow switching to a branch that + * "git checkout -B <branch>" used to allow switching to a branch that is in use on another worktree, but this was by mistake. The users need to use "--ignore-other-worktrees" option. @@ -54,7 +54,7 @@ UI, Workflows & Features gitweb behaved as if the file did not exist at all, but now it errors out. This is a change that may break backward compatibility. - * When $HOME/.gitignore is missing but XDG config file available, we + * When $HOME/.gitconfig is missing but XDG config file is available, we should write into the latter, not former. "git gc" and "git maintenance" wrote into a wrong "global config" file, which have been corrected. @@ -91,6 +91,17 @@ UI, Workflows & Features refresh token the same way as credential-cache and credential-libsecret backends. + * Command line completion support (in contrib/) has been + updated for "git bisect". + + * "git branch" and friends learned to use the formatted text as + sorting key, not the underlying timestamp value, when the --sort + option is used with author or committer timestamp with a format + specifier (e.g., "--sort=creatordate:format:%H:%M:%S"). + + * The command line completion script (in contrib/) learned to + complete configuration variable names better. + Performance, Internal Implementation, Development Support etc. @@ -151,6 +162,18 @@ Performance, Internal Implementation, Development Support etc. * The priority queue test has been migrated to the unit testing framework. + * Setting `feature.experimental` opts the user into multi-pack reuse + experiment + + * Squelch node.js 16 deprecation warnings from GitHub Actions CI + by updating actions/github-script and actions/checkout that use + node.js 20. + + * The mechanism to report the filename in the source code, used by + the unit-test machinery, assumed that the compiler expanded __FILE__ + to the path to the source given to the $(CC), but some compilers + give full path, breaking the output. This has been corrected. + Fixes since v2.43 ----------------- @@ -234,21 +257,18 @@ Fixes since v2.43 data from commit-graph too early, which has been corrected. * Update to a new feature recently added, "git show-ref --exists". - (merge 0aabeaa562 tc/show-ref-exists-fix later to maint). * oss-fuzz tests are built and run in CI. (merge c4a9cf1df3 js/oss-fuzz-build-in-ci later to maint). * Rename detection logic ignored the final line of a file if it is an incomplete line. - (merge 1c5bc6971e en/diffcore-delta-final-line-fix later to maint). * GitHub CI update. (merge 0188b2c8e0 pb/ci-github-skip-logs-for-broken-tests later to maint). * "git diff --no-rename A B" did not disable rename detection but did not trigger an error from the command line parser. - (merge 457f96252f rs/parse-options-with-keep-unknown-abbrev-fix later to maint). * "git archive --remote=<remote>" learned to talk over the smart http (aka stateless) transport. @@ -265,11 +285,9 @@ Fixes since v2.43 * "git diff --no-index file1 file2" segfaulted while invoking the external diff driver, which has been corrected. - (merge 85a9a63c92 jk/diff-external-with-no-index later to maint). * Rewrite //-comments to /* comments */ in files whose comments prevalently use the latter. - (merge de65079d7b jc/comment-style-fixes later to maint). * Cirrus CI jobs started breaking because we specified version of FreeBSD that is no longer available, which has been corrected. @@ -279,17 +297,38 @@ Fixes since v2.43 as <ptr, length> with a wrong length, which has been corrected. (merge 156e28b36d jh/sparse-index-expand-to-path-fix later to maint). + * A failed "git tag -s" did not necessarily result in an error + depending on the crypto backend, which has been corrected. + + * "git stash" sometimes was silent even when it failed due to + unwritable index file, which has been corrected. + + * "git show-ref --verify" did not show things like "CHERRY_PICK_HEAD", + which has been corrected. + + * Recent conversion to allow more than 0/1 in GIT_FLUSH broke the + mechanism by flipping what yes/no means by mistake, which has been + corrected. + + * The sequencer machinery does not use the ref API and instead + records names of certain objects it needs for its correct operation + in temporary files, which makes these objects susceptible to loss + by garbage collection. These temporary files have been added as + starting points for reachability analysis to fix this. + (merge bc7f5db896 pw/gc-during-rebase later to maint). + + * "git cherry-pick" invoked during "git rebase -i" session lost + the authorship information, which has been corrected. + (merge e4301f73ff vn/rebase-with-cherry-pick-authorship later to maint). + + * The code paths that call repo_read_object_file() have been + tightened to react to errors. + (merge 568459bf5e js/check-null-from-read-object-file later to maint). + * Other code cleanup, docfix, build fix, etc. (merge 5aea3955bc rj/clarify-branch-doc-m later to maint). (merge 9cce3be2df bk/bisect-doc-fix later to maint). - (merge 8f50984cf4 ne/doc-filter-blob-limit-fix later to maint). - (merge f10b0989b8 la/strvec-comment-fix later to maint). (merge 8430b438f6 vd/fsck-submodule-url-test later to maint). - (merge f10031fadd nb/rebase-x-shell-docfix later to maint). - (merge af3d2c160f jc/majordomo-to-subspace later to maint). - (merge ee9895b0ff sd/negotiate-trace-fix later to maint). - (merge 976d0251ce jc/coc-whitespace-fix later to maint). - (merge 9023198280 jt/p4-spell-re-with-raw-string later to maint). - (merge 36c9c44fa4 tb/pack-bitmap-drop-unused-struct-member later to maint). - (merge 19ed0dff8f js/win32-retry-pipe-write-on-enospc later to maint). (merge 3cb4384683 jc/t0091-with-unknown-git later to maint). + (merge 020456cb74 rs/receive-pack-remove-find-header later to maint). + (merge bc47139f4f la/trailer-cleanups later to maint). diff --git a/Documentation/RelNotes/2.45.0.txt b/Documentation/RelNotes/2.45.0.txt new file mode 100644 index 0000000000..321da04ddd --- /dev/null +++ b/Documentation/RelNotes/2.45.0.txt @@ -0,0 +1,76 @@ +Git v2.45 Release Notes +======================= + +Backward Compatibility Notes + +UI, Workflows & Features + + * Integrate the reftable code into the refs framework as a backend. + With "git init --ref-format=reftable", hopefully it would be a lot + more efficient to manage a repository with many references. + + * "git checkout -p" and friends learned that that "@" is a synonym + for "HEAD". + + * Variants of vimdiff learned to honor mergetool.<variant>.layout + settings. + + * "git reflog" learned a "list" subcommand that enumerates known reflogs. + + +Performance, Internal Implementation, Development Support etc. + + * The code to iterate over refs with the reftable backend has seen + some optimization. + + * More tests that are marked as "ref-files only" have been updated to + improve test coverage of reftable backend. + + * Some parts of command line completion script (in contrib/) have + been micro-optimized. + + * The way placeholders are to be marked-up in documentation have been + specified; use "_<placeholder>_" to typeset the word inside a pair + of <angle-brakets> emphasized. + + +Fixes since v2.44 +----------------- + + * "git apply" on a filesystem without filemode support have learned + to take a hint from what is in the index for the path, even when + not working with the "--index" or "--cached" option, when checking + the executable bit match what is required by the preimage in the + patch. + (merge 45b625142d cp/apply-core-filemode later to maint). + + * "git column" has been taught to reject negative padding value, as + it would lead to nonsense behaviour including division by zero. + (merge 76fb807faa kh/column-reject-negative-padding later to maint). + + * "git am --help" now tells readers what actions are available in + "git am --whitespace=<action>", in addition to saying that the + option is passed through to the underlying "git apply". + (merge a171dac734 jc/am-whitespace-doc later to maint). + + * "git tag --column" failed to check the exit status of its "git + column" invocation, which has been corrected. + (merge 92e66478fc rj/tag-column-fix later to maint). + + * Credential helper based on libsecret (in contrib/) has been updated + to handle an empty password correctly. + (merge 8f1f2023b7 mh/libsecret-empty-password-fix later to maint). + + * "git difftool --dir-diff" learned to honor the "--trust-exit-code" + option; it used to always exit with 0 and signalled success. + (merge eb84c8b6ce ps/difftool-dir-diff-exit-code later to maint). + + * Other code cleanup, docfix, build fix, etc. + (merge f0e578c69c rs/use-xstrncmpz later to maint). + (merge 83e6eb7d7a ba/credential-test-clean-fix later to maint). + (merge 64562d784d jb/doc-interactive-singlekey-do-not-need-perl later to maint). + (merge c431a235e2 cp/t9146-use-test-path-helpers later to maint). + (merge 82d75402d5 ds/doc-send-email-capitalization later to maint). + (merge 41bff66e35 jc/doc-add-placeholder-fix later to maint). + (merge 6835f0efe9 jw/remote-doc-typofix later to maint). + (merge 244001aa20 hs/rebase-not-in-progress later to maint). diff --git a/Documentation/config/advice.txt b/Documentation/config/advice.txt index c7ea70f2e2..dde8e7840e 100644 --- a/Documentation/config/advice.txt +++ b/Documentation/config/advice.txt @@ -129,6 +129,9 @@ advice.*:: submoduleAlternateErrorStrategyDie:: Advice shown when a submodule.alternateErrorStrategy option configured to "die" causes a fatal error. + submoduleMergeConflict:: + Advice shown when a non-trivial submodule merge conflict is + encountered. submodulesNotUpdated:: Advice shown when a user runs a submodule command that fails because `git submodule update --init` was not run. diff --git a/Documentation/config/diff.txt b/Documentation/config/diff.txt index bd5ae0c337..6c7e09a1ef 100644 --- a/Documentation/config/diff.txt +++ b/Documentation/config/diff.txt @@ -223,5 +223,5 @@ diff.colorMoved:: diff.colorMovedWS:: When moved lines are colored using e.g. the `diff.colorMoved` setting, - this option controls the `<mode>` how spaces are treated - for details of valid modes see '--color-moved-ws' in linkgit:git-diff[1]. + this option controls the `<mode>` how spaces are treated. + For details of valid modes see '--color-moved-ws' in linkgit:git-diff[1]. diff --git a/Documentation/config/feature.txt b/Documentation/config/feature.txt index bf9546fca4..f061b64b74 100644 --- a/Documentation/config/feature.txt +++ b/Documentation/config/feature.txt @@ -17,6 +17,9 @@ skipping more commits at a time, reducing the number of round trips. + * `pack.useBitmapBoundaryTraversal=true` may improve bitmap traversal times by walking fewer objects. ++ +* `pack.allowPackReuse=multi` may improve the time it takes to create a pack by +reusing objects from multiple packs instead of just one. feature.manyFiles:: Enable config options that optimize for repos with many files in the diff --git a/Documentation/config/interactive.txt b/Documentation/config/interactive.txt index a2d3c7ec44..5cc26555f1 100644 --- a/Documentation/config/interactive.txt +++ b/Documentation/config/interactive.txt @@ -4,9 +4,7 @@ interactive.singleKey:: Currently this is used by the `--patch` mode of linkgit:git-add[1], linkgit:git-checkout[1], linkgit:git-restore[1], linkgit:git-commit[1], - linkgit:git-reset[1], and linkgit:git-stash[1]. Note that this - setting is silently ignored if portable keystroke input - is not available; requires the Perl module Term::ReadKey. + linkgit:git-reset[1], and linkgit:git-stash[1]. interactive.diffFilter:: When an interactive command (such as `git add --patch`) shows diff --git a/Documentation/config/mergetool.txt b/Documentation/config/mergetool.txt index 294f61efd1..00bf665aa0 100644 --- a/Documentation/config/mergetool.txt +++ b/Documentation/config/mergetool.txt @@ -45,14 +45,21 @@ mergetool.meld.useAutoMerge:: value of `false` avoids using `--auto-merge` altogether, and is the default value. -mergetool.vimdiff.layout:: - The vimdiff backend uses this variable to control how its split - windows appear. Applies even if you are using Neovim (`nvim`) or - gVim (`gvim`) as the merge tool. See BACKEND SPECIFIC HINTS section +mergetool.<vimdiff variant>.layout:: + Configure the split window layout for vimdiff's `<variant>`, which is any of `vimdiff`, + `nvimdiff`, `gvimdiff`. + Upon launching `git mergetool` with `--tool=<variant>` (or without `--tool` + if `merge.tool` is configured as `<variant>`), Git will consult + `mergetool.<variant>.layout` to determine the tool's layout. If the + variant-specific configuration is not available, `vimdiff`'s is used as + fallback. If that too is not available, a default layout with 4 windows + will be used. To configure the layout, see the `BACKEND SPECIFIC HINTS` +ifdef::git-mergetool[] + section. +endif::[] ifndef::git-mergetool[] - in linkgit:git-mergetool[1]. + section in linkgit:git-mergetool[1]. endif::[] - for details. mergetool.hideResolved:: During a merge, Git will automatically resolve as many conflicts as diff --git a/Documentation/config/pack.txt b/Documentation/config/pack.txt index 9c630863e6..da527377fa 100644 --- a/Documentation/config/pack.txt +++ b/Documentation/config/pack.txt @@ -34,11 +34,10 @@ pack.allowPackReuse:: reachability bitmap is available, pack-objects will try to send parts of all packs in the MIDX. + - If only a single pack bitmap is available, and - `pack.allowPackReuse` is set to "multi", reuse parts of just the - bitmapped packfile. This can reduce memory and CPU usage to - serve fetches, but might result in sending a slightly larger - pack. Defaults to true. +If only a single pack bitmap is available, and `pack.allowPackReuse` +is set to "multi", reuse parts of just the bitmapped packfile. This +can reduce memory and CPU usage to serve fetches, but might result in +sending a slightly larger pack. Defaults to true. pack.island:: An extended regular expression configuring a set of delta diff --git a/Documentation/config/sendemail.txt b/Documentation/config/sendemail.txt index 7fc770ee9e..6a869d67eb 100644 --- a/Documentation/config/sendemail.txt +++ b/Documentation/config/sendemail.txt @@ -8,7 +8,7 @@ sendemail.smtpEncryption:: See linkgit:git-send-email[1] for description. Note that this setting is not subject to the 'identity' mechanism. -sendemail.smtpsslcertpath:: +sendemail.smtpSSLCertPath:: Path to ca-certificates (either a directory or a single file). Set it to an empty string to disable certificate verification. @@ -62,12 +62,12 @@ sendemail.chainReplyTo:: sendemail.envelopeSender:: sendemail.from:: sendemail.headerCmd:: -sendemail.signedoffbycc:: +sendemail.signedOffByCc:: sendemail.smtpPass:: -sendemail.suppresscc:: +sendemail.suppressCc:: sendemail.suppressFrom:: sendemail.to:: -sendemail.tocmd:: +sendemail.toCmd:: sendemail.smtpDomain:: sendemail.smtpServer:: sendemail.smtpServerPort:: @@ -81,8 +81,8 @@ sendemail.xmailer:: linkgit:git-send-email[1] command-line options. See its documentation for details. -sendemail.signedoffcc (deprecated):: - Deprecated alias for `sendemail.signedoffbycc`. +sendemail.signedOffCc (deprecated):: + Deprecated alias for `sendemail.signedOffByCc`. sendemail.smtpBatchSize:: Number of messages to be sent per connection, after that a relogin diff --git a/Documentation/git-add.txt b/Documentation/git-add.txt index 3d2e670716..14a371fff3 100644 --- a/Documentation/git-add.txt +++ b/Documentation/git-add.txt @@ -63,7 +63,7 @@ OPTIONS to ignore removed files; use `--no-all` option if you want to add modified or new files but ignore removed ones. + -For more details about the <pathspec> syntax, see the 'pathspec' entry +For more details about the _<pathspec>_ syntax, see the 'pathspec' entry in linkgit:gitglossary[7]. -n:: @@ -119,10 +119,10 @@ apply to the index. See EDITING PATCHES below. -u:: --update:: Update the index just where it already has an entry matching - <pathspec>. This removes as well as modifies index entries to + _<pathspec>_. This removes as well as modifies index entries to match the working tree, but adds no new files. + -If no <pathspec> is given when `-u` option is used, all +If no _<pathspec>_ is given when `-u` option is used, all tracked files in the entire working tree are updated (old versions of Git used to limit the update to the current directory and its subdirectories). @@ -131,11 +131,11 @@ subdirectories). --all:: --no-ignore-removal:: Update the index not only where the working tree has a file - matching <pathspec> but also where the index already has an + matching _<pathspec>_ but also where the index already has an entry. This adds, modifies, and removes index entries to match the working tree. + -If no <pathspec> is given when `-A` option is used, all +If no _<pathspec>_ is given when `-A` option is used, all files in the entire working tree are updated (old versions of Git used to limit the update to the current directory and its subdirectories). @@ -145,11 +145,11 @@ subdirectories). Update the index by adding new files that are unknown to the index and files modified in the working tree, but ignore files that have been removed from the working tree. This - option is a no-op when no <pathspec> is used. + option is a no-op when no _<pathspec>_ is used. + This option is primarily to help users who are used to older -versions of Git, whose "git add <pathspec>..." was a synonym -for "git add --no-all <pathspec>...", i.e. ignored removed files. +versions of Git, whose "git add _<pathspec>_..." was a synonym +for "git add --no-all _<pathspec>_...", i.e. ignored removed files. -N:: --intent-to-add:: @@ -198,8 +198,8 @@ for "git add --no-all <pathspec>...", i.e. ignored removed files. unchanged. --pathspec-from-file=<file>:: - Pathspec is passed in `<file>` instead of commandline args. If - `<file>` is exactly `-` then standard input is used. Pathspec + Pathspec is passed in _<file>_ instead of commandline args. If + _<file>_ is exactly `-` then standard input is used. Pathspec elements are separated by LF or CR/LF. Pathspec elements can be quoted as explained for the configuration variable `core.quotePath` (see linkgit:git-config[1]). See also `--pathspec-file-nul` and diff --git a/Documentation/git-am.txt b/Documentation/git-am.txt index e080458d6c..463a3c6600 100644 --- a/Documentation/git-am.txt +++ b/Documentation/git-am.txt @@ -128,6 +128,9 @@ include::rerere-options.txt[] These flags are passed to the 'git apply' (see linkgit:git-apply[1]) program that applies the patch. ++ +Valid <action> for the `--whitespace` option are: +`nowarn`, `warn`, `fix`, `error`, and `error-all`. --patch-format:: By default the command will try to detect the patch format diff --git a/Documentation/git-bisect.txt b/Documentation/git-bisect.txt index 8e01f1d618..82f944dc03 100644 --- a/Documentation/git-bisect.txt +++ b/Documentation/git-bisect.txt @@ -16,11 +16,11 @@ DESCRIPTION The command takes various subcommands, and different options depending on the subcommand: - git bisect start [--term-(new|bad)=<term-new> --term-(old|good)=<term-old>] + git bisect start [--term-(bad|new)=<term-new> --term-(good|old)=<term-old>] [--no-checkout] [--first-parent] [<bad> [<good>...]] [--] [<pathspec>...] git bisect (bad|new|<term-new>) [<rev>] git bisect (good|old|<term-old>) [<rev>...] - git bisect terms [--term-good | --term-bad] + git bisect terms [--term-(good|old) | --term-(bad|new)] git bisect skip [(<rev>|<range>)...] git bisect reset [<commit>] git bisect (visualize|view) @@ -165,8 +165,10 @@ To get a reminder of the currently used terms, use git bisect terms ------------------------------------------------ -You can get just the old (respectively new) term with `git bisect terms ---term-old` or `git bisect terms --term-good`. +You can get just the old term with `git bisect terms --term-old` +or `git bisect terms --term-good`; `git bisect terms --term-new` +and `git bisect terms --term-bad` can be used to learn how to call +the commits more recent than the sought change. If you would like to use your own terms instead of "bad"/"good" or "new"/"old", you can choose any names you like (except existing bisect diff --git a/Documentation/git-clone.txt b/Documentation/git-clone.txt index 6e43eb9c20..0c07720c6f 100644 --- a/Documentation/git-clone.txt +++ b/Documentation/git-clone.txt @@ -311,7 +311,7 @@ or `--mirror` is given) The result is Git repository can be separated from working tree. ---ref-format=<ref-format:: +--ref-format=<ref-format>:: Specify the given ref storage format for the repository. The valid values are: + diff --git a/Documentation/git-difftool.txt b/Documentation/git-difftool.txt index c05f97aca9..a616f8b2e6 100644 --- a/Documentation/git-difftool.txt +++ b/Documentation/git-difftool.txt @@ -105,7 +105,6 @@ instead. `--no-symlinks` is the default on Windows. `merge.tool` until a tool is found. --[no-]trust-exit-code:: - 'git-difftool' invokes a diff tool individually on each file. Errors reported by the diff tool are ignored by default. Use `--trust-exit-code` to make 'git-difftool' exit when an invoked diff tool returns a non-zero exit code. diff --git a/Documentation/git-fast-export.txt b/Documentation/git-fast-export.txt index 4643ddbe68..752e4b9b01 100644 --- a/Documentation/git-fast-export.txt +++ b/Documentation/git-fast-export.txt @@ -48,7 +48,7 @@ When asking to 'abort' (which is the default), this program will die when encountering such a tag. With 'drop' it will omit such tags from the output. With 'rewrite', if the tagged object is a commit, it will rewrite the tag to tag an ancestor commit (via parent rewriting; see -linkgit:git-rev-list[1]) +linkgit:git-rev-list[1]). -M:: -C:: diff --git a/Documentation/git-for-each-ref.txt b/Documentation/git-for-each-ref.txt index bf1c0165e9..c1dd12b93c 100644 --- a/Documentation/git-for-each-ref.txt +++ b/Documentation/git-for-each-ref.txt @@ -362,9 +362,11 @@ In any case, a field name that refers to a field inapplicable to the object referred by the ref does not cause an error. It returns an empty string instead. -As a special case for the date-type fields, you may specify a format for -the date by adding `:` followed by date format name (see the -values the `--date` option to linkgit:git-rev-list[1] takes). +As a special case for the date-type fields, you may specify a format for the +date by adding `:` followed by date format name (see the values the `--date` +option to linkgit:git-rev-list[1] takes). If this formatting is provided in +a `--sort` key, references will be sorted according to the byte-value of the +formatted string rather than the numeric value of the underlying timestamp. Some atoms like %(align) and %(if) always require a matching %(end). We call them "opening atoms" and sometimes denote them as %($open). diff --git a/Documentation/git-reflog.txt b/Documentation/git-reflog.txt index ec64cbff4c..a929c52982 100644 --- a/Documentation/git-reflog.txt +++ b/Documentation/git-reflog.txt @@ -10,6 +10,7 @@ SYNOPSIS -------- [verse] 'git reflog' [show] [<log-options>] [<ref>] +'git reflog list' 'git reflog expire' [--expire=<time>] [--expire-unreachable=<time>] [--rewrite] [--updateref] [--stale-fix] [--dry-run | -n] [--verbose] [--all [--single-worktree] | <refs>...] @@ -39,6 +40,8 @@ actions, and in addition the `HEAD` reflog records branch switching. `git reflog show` is an alias for `git log -g --abbrev-commit --pretty=oneline`; see linkgit:git-log[1] for more information. +The "list" subcommand lists all refs which have a corresponding reflog. + The "expire" subcommand prunes older reflog entries. Entries older than `expire` time, or entries older than `expire-unreachable` time and not reachable from the current tip, are removed from the reflog. diff --git a/Documentation/git-remote.txt b/Documentation/git-remote.txt index 1dec314834..932a5c3ea4 100644 --- a/Documentation/git-remote.txt +++ b/Documentation/git-remote.txt @@ -35,7 +35,7 @@ OPTIONS -v:: --verbose:: Be a little more verbose and show remote url after name. - For promisor remotes, also show which filter (`blob:none` etc.) + For promisor remotes, also show which filters (`blob:none` etc.) are configured. NOTE: This must be placed between `remote` and subcommand. diff --git a/Documentation/git-rev-parse.txt b/Documentation/git-rev-parse.txt index 546faf9017..5d83dd36da 100644 --- a/Documentation/git-rev-parse.txt +++ b/Documentation/git-rev-parse.txt @@ -9,7 +9,7 @@ git-rev-parse - Pick out and massage parameters SYNOPSIS -------- [verse] -'git rev-parse' [<options>] <args>... +'git rev-parse' [<options>] <arg>... DESCRIPTION ----------- @@ -130,7 +130,7 @@ for another option. 'git diff-{asterisk}'). In contrast to the `--sq-quote` option, the command input is still interpreted as usual. ---short[=length]:: +--short[=<length>]:: Same as `--verify` but shortens the object name to a unique prefix with at least `length` characters. The minimum length is 4, the default is the effective value of the `core.abbrev` @@ -165,9 +165,9 @@ Options for Objects --all:: Show all refs found in `refs/`. ---branches[=pattern]:: ---tags[=pattern]:: ---remotes[=pattern]:: +--branches[=<pattern>]:: +--tags[=<pattern>]:: +--remotes[=<pattern>]:: Show all branches, tags, or remote-tracking branches, respectively (i.e., refs found in `refs/heads`, `refs/tags`, or `refs/remotes`, respectively). @@ -176,7 +176,7 @@ If a `pattern` is given, only refs matching the given shell glob are shown. If the pattern does not contain a globbing character (`?`, `*`, or `[`), it is turned into a prefix match by appending `/*`. ---glob=pattern:: +--glob=<pattern>:: Show all refs matching the shell glob pattern `pattern`. If the pattern does not start with `refs/`, this is automatically prepended. If the pattern does not contain a globbing @@ -197,7 +197,7 @@ respectively, and they must begin with `refs/` when applied to `--glob` or `--all`. If a trailing '/{asterisk}' is intended, it must be given explicitly. ---exclude-hidden=[fetch|receive|uploadpack]:: +--exclude-hidden=(fetch|receive|uploadpack):: Do not include refs that would be hidden by `git-fetch`, `git-receive-pack` or `git-upload-pack` by consulting the appropriate `fetch.hideRefs`, `receive.hideRefs` or `uploadpack.hideRefs` @@ -314,17 +314,17 @@ The following options are unaffected by `--path-format`: Other Options ~~~~~~~~~~~~~ ---since=datestring:: ---after=datestring:: +--since=<datestring>:: +--after=<datestring>:: Parse the date string, and output the corresponding --max-age= parameter for 'git rev-list'. ---until=datestring:: ---before=datestring:: +--until=<datestring>:: +--before=<datestring>:: Parse the date string, and output the corresponding --min-age= parameter for 'git rev-list'. -<args>...:: +<arg>...:: Flags and parameters to be parsed. diff --git a/Documentation/git-send-email.txt b/Documentation/git-send-email.txt index d1ef6a204e..8264f87380 100644 --- a/Documentation/git-send-email.txt +++ b/Documentation/git-send-email.txt @@ -138,7 +138,7 @@ Note that no attempts whatsoever are made to validate the encoding. --compose-encoding=<encoding>:: Specify encoding of compose message. Default is the value of the - 'sendemail.composeencoding'; if that is unspecified, UTF-8 is assumed. + 'sendemail.composeEncoding'; if that is unspecified, UTF-8 is assumed. --transfer-encoding=(7bit|8bit|quoted-printable|base64|auto):: Specify the transfer encoding to be used to send the message over SMTP. @@ -174,7 +174,7 @@ Sending Specify a command to run to send the email. The command should be sendmail-like; specifically, it must support the `-i` option. The command will be executed in the shell if necessary. Default - is the value of `sendemail.sendmailcmd`. If unspecified, and if + is the value of `sendemail.sendmailCmd`. If unspecified, and if --smtp-server is also unspecified, git-send-email will search for `sendmail` in `/usr/sbin`, `/usr/lib` and $PATH. @@ -269,7 +269,7 @@ must be used for each option. certificates concatenated together: see verify(1) -CAfile and -CApath for more information on these). Set it to an empty string to disable certificate verification. Defaults to the value of the - `sendemail.smtpsslcertpath` configuration variable, if set, or the + `sendemail.smtpSSLCertPath` configuration variable, if set, or the backing SSL library's compiled-in default otherwise (which should be the best choice on most platforms). @@ -313,7 +313,7 @@ Automating Specify a command to execute once per patch file which should generate patch file specific "To:" entries. Output of this command must be single email address per line. - Default is the value of 'sendemail.tocmd' configuration value. + Default is the value of 'sendemail.toCmd' configuration value. --cc-cmd=<command>:: Specify a command to execute once per patch file which @@ -348,19 +348,19 @@ Automating --[no-]signed-off-by-cc:: If this is set, add emails found in the `Signed-off-by` trailer or Cc: lines to the - cc list. Default is the value of `sendemail.signedoffbycc` configuration + cc list. Default is the value of `sendemail.signedOffByCc` configuration value; if that is unspecified, default to --signed-off-by-cc. --[no-]cc-cover:: If this is set, emails found in Cc: headers in the first patch of the series (typically the cover letter) are added to the cc list - for each email set. Default is the value of 'sendemail.cccover' + for each email set. Default is the value of 'sendemail.ccCover' configuration value; if that is unspecified, default to --no-cc-cover. --[no-]to-cover:: If this is set, emails found in To: headers in the first patch of the series (typically the cover letter) are added to the to list - for each email set. Default is the value of 'sendemail.tocover' + for each email set. Default is the value of 'sendemail.toCover' configuration value; if that is unspecified, default to --no-to-cover. --suppress-cc=<category>:: @@ -384,7 +384,7 @@ Automating - 'all' will suppress all auto cc values. -- + -Default is the value of `sendemail.suppresscc` configuration value; if +Default is the value of `sendemail.suppressCc` configuration value; if that is unspecified, default to 'self' if --suppress-from is specified, as well as 'body' if --no-signed-off-cc is specified. @@ -471,7 +471,7 @@ Information Instead of the normal operation, dump the shorthand alias names from the configured alias file(s), one per line in alphabetical order. Note that this only includes the alias name and not its expanded email addresses. - See 'sendemail.aliasesfile' for more information about aliases. + See 'sendemail.aliasesFile' for more information about aliases. CONFIGURATION diff --git a/Documentation/mergetools/vimdiff.txt b/Documentation/mergetools/vimdiff.txt index d1a4c468e6..befa86d692 100644 --- a/Documentation/mergetools/vimdiff.txt +++ b/Documentation/mergetools/vimdiff.txt @@ -177,7 +177,8 @@ Instead of `--tool=vimdiff`, you can also use one of these other variants: When using these variants, in order to specify a custom layout you will have to set configuration variables `mergetool.gvimdiff.layout` and -`mergetool.nvimdiff.layout` instead of `mergetool.vimdiff.layout` +`mergetool.nvimdiff.layout` instead of `mergetool.vimdiff.layout` (though the +latter will be used as fallback if the variant-specific one is not set). In addition, for backwards compatibility with previous Git versions, you can also append `1`, `2` or `3` to either `vimdiff` or any of the variants (ex: diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN index 31db92f475..c9d1d29082 100755 --- a/GIT-VERSION-GEN +++ b/GIT-VERSION-GEN @@ -1,7 +1,7 @@ #!/bin/sh GVF=GIT-VERSION-FILE -DEF_VER=v2.44.0-rc0 +DEF_VER=v2.44.0 LF=' ' @@ -1 +1 @@ -Documentation/RelNotes/2.44.0.txt
\ No newline at end of file +Documentation/RelNotes/2.45.0.txt
\ No newline at end of file diff --git a/add-patch.c b/add-patch.c index 79eda168eb..68f525b35c 100644 --- a/add-patch.c +++ b/add-patch.c @@ -1729,14 +1729,6 @@ int run_add_p(struct repository *r, enum add_p_mode mode, if (mode == ADD_P_STASH) s.mode = &patch_mode_stash; else if (mode == ADD_P_RESET) { - /* - * NEEDSWORK: Instead of comparing to the literal "HEAD", - * compare the commit objects instead so that other ways of - * saying the same thing (such as "@") are also handled - * appropriately. - * - * This applies to the cases below too. - */ if (!revision || !strcmp(revision, "HEAD")) s.mode = &patch_mode_reset_head; else @@ -79,6 +79,7 @@ static struct { [ADVICE_STATUS_U_OPTION] = { "statusUoption" }, [ADVICE_SUBMODULES_NOT_UPDATED] = { "submodulesNotUpdated" }, [ADVICE_SUBMODULE_ALTERNATE_ERROR_STRATEGY_DIE] = { "submoduleAlternateErrorStrategyDie" }, + [ADVICE_SUBMODULE_MERGE_CONFLICT] = { "submoduleMergeConflict" }, [ADVICE_SUGGEST_DETACHING_HEAD] = { "suggestDetachingHead" }, [ADVICE_UPDATE_SPARSE_PATH] = { "updateSparsePath" }, [ADVICE_WAITING_FOR_EDITOR] = { "waitingForEditor" }, @@ -47,6 +47,7 @@ enum advice_type { ADVICE_STATUS_U_OPTION, ADVICE_SUBMODULES_NOT_UPDATED, ADVICE_SUBMODULE_ALTERNATE_ERROR_STRATEGY_DIE, + ADVICE_SUBMODULE_MERGE_CONFLICT, ADVICE_SUGGEST_DETACHING_HEAD, ADVICE_UPDATE_SPARSE_PATH, ADVICE_WAITING_FOR_EDITOR, @@ -77,7 +77,8 @@ static int parse_whitespace_option(struct apply_state *state, const char *option return 0; } /* - * Please update $__git_whitespacelist in git-completion.bash + * Please update $__git_whitespacelist in git-completion.bash, + * Documentation/git-apply.txt, and Documentation/git-am.txt * when you add new options. */ return error(_("unrecognized whitespace option '%s'"), option); @@ -2219,7 +2220,8 @@ static void reverse_patches(struct patch *p) struct fragment *frag = p->fragments; SWAP(p->new_name, p->old_name); - SWAP(p->new_mode, p->old_mode); + if (p->new_mode) + SWAP(p->new_mode, p->old_mode); SWAP(p->is_new, p->is_delete); SWAP(p->lines_added, p->lines_deleted); SWAP(p->old_oid_prefix, p->new_oid_prefix); @@ -3777,8 +3779,17 @@ static int check_preimage(struct apply_state *state, return error_errno("%s", old_name); } - if (!state->cached && !previous) - st_mode = ce_mode_from_stat(*ce, st->st_mode); + if (!state->cached && !previous) { + if (*ce && !(*ce)->ce_mode) + BUG("ce_mode == 0 for path '%s'", old_name); + + if (trust_executable_bit) + st_mode = ce_mode_from_stat(*ce, st->st_mode); + else if (*ce) + st_mode = (*ce)->ce_mode; + else + st_mode = patch->old_mode; + } if (patch->is_new < 0) patch->is_new = 0; diff --git a/archive-tar.c b/archive-tar.c index f2a0ed7752..8ae30125f8 100644 --- a/archive-tar.c +++ b/archive-tar.c @@ -365,7 +365,7 @@ static struct archiver *find_tar_filter(const char *name, size_t len) int i; for (i = 0; i < nr_tar_filters; i++) { struct archiver *ar = tar_filters[i]; - if (!strncmp(ar->name, name, len) && !ar->name[len]) + if (!xstrncmpz(ar->name, name, len)) return ar; } return NULL; @@ -158,6 +158,9 @@ static void show_list(const char *debug, int counted, int nr, const char *subject_start; int subject_len; + if (!buf) + die(_("unable to read %s"), oid_to_hex(&commit->object.oid)); + fprintf(stderr, "%c%c%c ", (commit_flags & TREESAME) ? ' ' : 'T', (commit_flags & UNINTERESTING) ? 'U' : ' ', diff --git a/builtin/cat-file.c b/builtin/cat-file.c index 7d4899348a..bbf851138e 100644 --- a/builtin/cat-file.c +++ b/builtin/cat-file.c @@ -221,6 +221,10 @@ static int cat_one_file(int opt, const char *exp_type, const char *obj_name, &type, &size); const char *target; + + if (!buffer) + die(_("unable to read %s"), oid_to_hex(&oid)); + if (!skip_prefix(buffer, "object ", &target) || get_oid_hex(target, &blob_oid)) die("%s not a valid tag", oid_to_hex(&oid)); @@ -416,6 +420,8 @@ static void print_object_or_die(struct batch_options *opt, struct expand_data *d contents = repo_read_object_file(the_repository, oid, &type, &size); + if (!contents) + die("object %s disappeared", oid_to_hex(oid)); if (use_mailmap) { size_t s = size; @@ -423,8 +429,6 @@ static void print_object_or_die(struct batch_options *opt, struct expand_data *d size = cast_size_t_to_ulong(s); } - if (!contents) - die("object %s disappeared", oid_to_hex(oid)); if (type != data->type) die("object %s changed type!?", oid_to_hex(oid)); if (data->info.sizep && size != data->size && !use_mailmap) @@ -481,6 +485,8 @@ static void batch_object_write(const char *obj_name, buf = repo_read_object_file(the_repository, &data->oid, &data->type, &data->size); + if (!buf) + die(_("unable to read %s"), oid_to_hex(&data->oid)); buf = replace_idents_using_mailmap(buf, &s); data->size = cast_size_t_to_ulong(s); diff --git a/builtin/checkout.c b/builtin/checkout.c index a6e30931b5..067c251933 100644 --- a/builtin/checkout.c +++ b/builtin/checkout.c @@ -1224,7 +1224,9 @@ static void setup_new_branch_info_and_source_tree( struct tree **source_tree = &opts->source_tree; struct object_id branch_rev; - new_branch_info->name = xstrdup(arg); + /* treat '@' as a shortcut for 'HEAD' */ + new_branch_info->name = !strcmp(arg, "@") ? xstrdup("HEAD") : + xstrdup(arg); setup_branch_path(new_branch_info); if (!check_refname_format(new_branch_info->path, 0) && diff --git a/builtin/column.c b/builtin/column.c index e80218f81f..10ff7e0166 100644 --- a/builtin/column.c +++ b/builtin/column.c @@ -45,6 +45,8 @@ int cmd_column(int argc, const char **argv, const char *prefix) memset(&copts, 0, sizeof(copts)); copts.padding = 1; argc = parse_options(argc, argv, prefix, options, builtin_column_usage, 0); + if (copts.padding < 0) + die(_("%s must be non-negative"), "--padding"); if (argc) usage_with_options(builtin_column_usage, options); if (real_command || command) { diff --git a/builtin/fast-export.c b/builtin/fast-export.c index f18f0809f9..4693d18cc9 100644 --- a/builtin/fast-export.c +++ b/builtin/fast-export.c @@ -136,8 +136,7 @@ static int anonymized_entry_cmp(const void *cmp_data UNUSED, a = container_of(eptr, const struct anonymized_entry, hash); if (keydata) { const struct anonymized_entry_key *key = keydata; - int equal = !strncmp(a->orig, key->orig, key->orig_len) && - !a->orig[key->orig_len]; + int equal = !xstrncmpz(a->orig, key->orig, key->orig_len); return !equal; } diff --git a/builtin/fetch.c b/builtin/fetch.c index 3aedfd1bb6..0a7a1a3476 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -448,9 +448,8 @@ static void filter_prefetch_refspec(struct refspec *rs) continue; if (!rs->items[i].dst || (rs->items[i].src && - !strncmp(rs->items[i].src, - ref_namespace[NAMESPACE_TAGS].ref, - strlen(ref_namespace[NAMESPACE_TAGS].ref)))) { + starts_with(rs->items[i].src, + ref_namespace[NAMESPACE_TAGS].ref))) { int j; free(rs->items[i].src); diff --git a/builtin/fsck.c b/builtin/fsck.c index a7cf94f67e..f892487c9b 100644 --- a/builtin/fsck.c +++ b/builtin/fsck.c @@ -509,9 +509,7 @@ static int fsck_handle_reflog_ent(struct object_id *ooid, struct object_id *noid return 0; } -static int fsck_handle_reflog(const char *logname, - const struct object_id *oid UNUSED, - int flag UNUSED, void *cb_data) +static int fsck_handle_reflog(const char *logname, void *cb_data) { struct strbuf refname = STRBUF_INIT; diff --git a/builtin/grep.c b/builtin/grep.c index c8e33f9775..982bcfc4b1 100644 --- a/builtin/grep.c +++ b/builtin/grep.c @@ -571,6 +571,8 @@ static int grep_cache(struct grep_opt *opt, data = repo_read_object_file(the_repository, &ce->oid, &type, &size); + if (!data) + die(_("unable to read tree %s"), oid_to_hex(&ce->oid)); init_tree_desc(&tree, data, size); hit |= grep_tree(opt, pathspec, &tree, &name, 0, 0); diff --git a/builtin/merge.c b/builtin/merge.c index 8f819781cc..935c8a57dd 100644 --- a/builtin/merge.c +++ b/builtin/merge.c @@ -192,8 +192,7 @@ static struct strategy *get_strategy(const char *name) int j, found = 0; struct cmdname *ent = main_cmds.names[i]; for (j = 0; !found && j < ARRAY_SIZE(all_strategy); j++) - if (!strncmp(ent->name, all_strategy[j].name, ent->len) - && !all_strategy[j].name[ent->len]) + if (!xstrncmpz(all_strategy[j].name, ent->name, ent->len)) found = 1; if (!found) add_cmdname(¬_strategies, ent->name, ent->len); diff --git a/builtin/name-rev.c b/builtin/name-rev.c index 2dd1807c4e..ad9930c831 100644 --- a/builtin/name-rev.c +++ b/builtin/name-rev.c @@ -15,6 +15,7 @@ #include "commit-slab.h" #include "commit-graph.h" #include "wildmatch.h" +#include "mem-pool.h" /* * One day. See the 'name a rev shortly after epoch' test in t6120 when @@ -155,30 +156,25 @@ static struct rev_name *create_or_update_name(struct commit *commit, return name; } -static char *get_parent_name(const struct rev_name *name, int parent_number) +static char *get_parent_name(const struct rev_name *name, int parent_number, + struct mem_pool *string_pool) { - struct strbuf sb = STRBUF_INIT; size_t len; strip_suffix(name->tip_name, "^0", &len); if (name->generation > 0) { - strbuf_grow(&sb, len + - 1 + decimal_width(name->generation) + - 1 + decimal_width(parent_number)); - strbuf_addf(&sb, "%.*s~%d^%d", (int)len, name->tip_name, - name->generation, parent_number); + return mem_pool_strfmt(string_pool, "%.*s~%d^%d", + (int)len, name->tip_name, + name->generation, parent_number); } else { - strbuf_grow(&sb, len + - 1 + decimal_width(parent_number)); - strbuf_addf(&sb, "%.*s^%d", (int)len, name->tip_name, - parent_number); + return mem_pool_strfmt(string_pool, "%.*s^%d", + (int)len, name->tip_name, parent_number); } - return strbuf_detach(&sb, NULL); } static void name_rev(struct commit *start_commit, const char *tip_name, timestamp_t taggerdate, - int from_tag, int deref) + int from_tag, int deref, struct mem_pool *string_pool) { struct prio_queue queue; struct commit *commit; @@ -195,9 +191,10 @@ static void name_rev(struct commit *start_commit, if (!start_name) return; if (deref) - start_name->tip_name = xstrfmt("%s^0", tip_name); + start_name->tip_name = mem_pool_strfmt(string_pool, "%s^0", + tip_name); else - start_name->tip_name = xstrdup(tip_name); + start_name->tip_name = mem_pool_strdup(string_pool, tip_name); memset(&queue, 0, sizeof(queue)); /* Use the prio_queue as LIFO */ prio_queue_put(&queue, start_commit); @@ -235,7 +232,8 @@ static void name_rev(struct commit *start_commit, if (parent_number > 1) parent_name->tip_name = get_parent_name(name, - parent_number); + parent_number, + string_pool); else parent_name->tip_name = name->tip_name; ALLOC_GROW(parents_to_queue, @@ -415,7 +413,7 @@ static int name_ref(const char *path, const struct object_id *oid, return 0; } -static void name_tips(void) +static void name_tips(struct mem_pool *string_pool) { int i; @@ -428,7 +426,7 @@ static void name_tips(void) struct tip_table_entry *e = &tip_table.table[i]; if (e->commit) { name_rev(e->commit, e->refname, e->taggerdate, - e->from_tag, e->deref); + e->from_tag, e->deref, string_pool); } } } @@ -561,6 +559,7 @@ static void name_rev_line(char *p, struct name_ref_data *data) int cmd_name_rev(int argc, const char **argv, const char *prefix) { + struct mem_pool string_pool; struct object_array revs = OBJECT_ARRAY_INIT; int all = 0, annotate_stdin = 0, transform_stdin = 0, allow_undefined = 1, always = 0, peel_tag = 0; struct name_ref_data data = { 0, 0, STRING_LIST_INIT_NODUP, STRING_LIST_INIT_NODUP }; @@ -587,6 +586,7 @@ int cmd_name_rev(int argc, const char **argv, const char *prefix) OPT_END(), }; + mem_pool_init(&string_pool, 0); init_commit_rev_name(&rev_names); git_config(git_default_config, NULL); argc = parse_options(argc, argv, prefix, opts, name_rev_usage, 0); @@ -648,7 +648,7 @@ int cmd_name_rev(int argc, const char **argv, const char *prefix) adjust_cutoff_timestamp_for_slop(); for_each_ref(name_ref, &data); - name_tips(); + name_tips(&string_pool); if (annotate_stdin) { struct strbuf sb = STRBUF_INIT; @@ -676,6 +676,7 @@ int cmd_name_rev(int argc, const char **argv, const char *prefix) always, allow_undefined, data.name_only); } + UNLEAK(string_pool); UNLEAK(revs); return 0; } diff --git a/builtin/notes.c b/builtin/notes.c index e65cae0bcf..caf20fd5bd 100644 --- a/builtin/notes.c +++ b/builtin/notes.c @@ -716,9 +716,11 @@ static int append_edit(int argc, const char **argv, const char *prefix) struct strbuf buf = STRBUF_INIT; char *prev_buf = repo_read_object_file(the_repository, note, &type, &size); - if (prev_buf && size) + if (!prev_buf) + die(_("unable to read %s"), oid_to_hex(note)); + if (size) strbuf_add(&buf, prev_buf, size); - if (d.buf.len && prev_buf && size) + if (d.buf.len && size) append_separator(&buf); strbuf_insert(&d.buf, 0, buf.buf, buf.len); diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c index d8c2128a97..329aeac804 100644 --- a/builtin/pack-objects.c +++ b/builtin/pack-objects.c @@ -4396,6 +4396,8 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix) prepare_repo_settings(the_repository); if (sparse < 0) sparse = the_repository->settings.pack_use_sparse; + if (the_repository->settings.pack_use_multi_pack_reuse) + allow_pack_reuse = MULTI_PACK_REUSE; } reset_pack_idx_option(&pack_idx_opts); diff --git a/builtin/rebase.c b/builtin/rebase.c index 5b086f651a..6ead9465a4 100644 --- a/builtin/rebase.c +++ b/builtin/rebase.c @@ -1254,7 +1254,7 @@ int cmd_rebase(int argc, const char **argv, const char *prefix) die(_("options '%s' and '%s' cannot be used together"), "--root", "--fork-point"); if (options.action != ACTION_NONE && !in_progress) - die(_("No rebase in progress?")); + die(_("no rebase in progress")); if (options.action == ACTION_EDIT_TODO && !is_merge(&options)) die(_("The --edit-todo action can only be used during " diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c index e36b1d619f..db65607485 100644 --- a/builtin/receive-pack.c +++ b/builtin/receive-pack.c @@ -593,21 +593,6 @@ static char *prepare_push_cert_nonce(const char *path, timestamp_t stamp) return strbuf_detach(&buf, NULL); } -static char *find_header(const char *msg, size_t len, const char *key, - const char **next_line) -{ - size_t out_len; - const char *val = find_header_mem(msg, len, key, &out_len); - - if (!val) - return NULL; - - if (next_line) - *next_line = val + out_len + 1; - - return xmemdupz(val, out_len); -} - /* * Return zero if a and b are equal up to n bytes and nonzero if they are not. * This operation is guaranteed to run in constant time to avoid leaking data. @@ -622,13 +607,14 @@ static int constant_memequal(const char *a, const char *b, size_t n) return res; } -static const char *check_nonce(const char *buf, size_t len) +static const char *check_nonce(const char *buf) { - char *nonce = find_header(buf, len, "nonce", NULL); + size_t noncelen; + const char *found = find_commit_header(buf, "nonce", &noncelen); + char *nonce = found ? xmemdupz(found, noncelen) : NULL; timestamp_t stamp, ostamp; char *bohmac, *expect = NULL; const char *retval = NONCE_BAD; - size_t noncelen; if (!nonce) { retval = NONCE_MISSING; @@ -670,7 +656,6 @@ static const char *check_nonce(const char *buf, size_t len) goto leave; } - noncelen = strlen(nonce); expect = prepare_push_cert_nonce(service_dir, stamp); if (noncelen != strlen(expect)) { /* This is not even the right size. */ @@ -718,35 +703,28 @@ leave: static int check_cert_push_options(const struct string_list *push_options) { const char *buf = push_cert.buf; - int len = push_cert.len; - char *option; - const char *next_line; + const char *option; + size_t optionlen; int options_seen = 0; int retval = 1; - if (!len) + if (!*buf) return 1; - while ((option = find_header(buf, len, "push-option", &next_line))) { - len -= (next_line - buf); - buf = next_line; + while ((option = find_commit_header(buf, "push-option", &optionlen))) { + buf = option + optionlen + 1; options_seen++; if (options_seen > push_options->nr - || strcmp(option, - push_options->items[options_seen - 1].string)) { - retval = 0; - goto leave; - } - free(option); + || xstrncmpz(push_options->items[options_seen - 1].string, + option, optionlen)) + return 0; } if (options_seen != push_options->nr) retval = 0; -leave: - free(option); return retval; } @@ -773,7 +751,7 @@ static void prepare_push_cert_sha1(struct child_process *proc) check_signature(&sigcheck, push_cert.buf + bogs, push_cert.len - bogs); - nonce_status = check_nonce(push_cert.buf, bogs); + nonce_status = check_nonce(sigcheck.payload); } if (!is_null_oid(&push_cert_oid)) { strvec_pushf(&proc->env, "GIT_PUSH_CERT=%s", diff --git a/builtin/reflog.c b/builtin/reflog.c index a5a4099f61..060eb3377e 100644 --- a/builtin/reflog.c +++ b/builtin/reflog.c @@ -7,11 +7,15 @@ #include "wildmatch.h" #include "worktree.h" #include "reflog.h" +#include "refs.h" #include "parse-options.h" #define BUILTIN_REFLOG_SHOW_USAGE \ N_("git reflog [show] [<log-options>] [<ref>]") +#define BUILTIN_REFLOG_LIST_USAGE \ + N_("git reflog list") + #define BUILTIN_REFLOG_EXPIRE_USAGE \ N_("git reflog expire [--expire=<time>] [--expire-unreachable=<time>]\n" \ " [--rewrite] [--updateref] [--stale-fix]\n" \ @@ -29,6 +33,11 @@ static const char *const reflog_show_usage[] = { NULL, }; +static const char *const reflog_list_usage[] = { + BUILTIN_REFLOG_LIST_USAGE, + NULL, +}; + static const char *const reflog_expire_usage[] = { BUILTIN_REFLOG_EXPIRE_USAGE, NULL @@ -46,6 +55,7 @@ static const char *const reflog_exists_usage[] = { static const char *const reflog_usage[] = { BUILTIN_REFLOG_SHOW_USAGE, + BUILTIN_REFLOG_LIST_USAGE, BUILTIN_REFLOG_EXPIRE_USAGE, BUILTIN_REFLOG_DELETE_USAGE, BUILTIN_REFLOG_EXISTS_USAGE, @@ -60,8 +70,7 @@ struct worktree_reflogs { struct string_list reflogs; }; -static int collect_reflog(const char *ref, const struct object_id *oid UNUSED, - int flags UNUSED, void *cb_data) +static int collect_reflog(const char *ref, void *cb_data) { struct worktree_reflogs *cb = cb_data; struct worktree *worktree = cb->worktree; @@ -96,8 +105,7 @@ static struct reflog_expire_cfg *find_cfg_ent(const char *pattern, size_t len) reflog_expire_cfg_tail = &reflog_expire_cfg; for (ent = reflog_expire_cfg; ent; ent = ent->next) - if (!strncmp(ent->pattern, pattern, len) && - ent->pattern[len] == '\0') + if (!xstrncmpz(ent->pattern, pattern, len)) return ent; FLEX_ALLOC_MEM(ent, pattern, pattern, len); @@ -239,6 +247,29 @@ static int cmd_reflog_show(int argc, const char **argv, const char *prefix) return cmd_log_reflog(argc, argv, prefix); } +static int show_reflog(const char *refname, void *cb_data UNUSED) +{ + printf("%s\n", refname); + return 0; +} + +static int cmd_reflog_list(int argc, const char **argv, const char *prefix) +{ + struct option options[] = { + OPT_END() + }; + struct ref_store *ref_store; + + argc = parse_options(argc, argv, prefix, options, reflog_list_usage, 0); + if (argc) + return error(_("%s does not accept arguments: '%s'"), + "list", argv[0]); + + ref_store = get_main_ref_store(the_repository); + + return refs_for_each_reflog(ref_store, show_reflog, NULL); +} + static int cmd_reflog_expire(int argc, const char **argv, const char *prefix) { struct cmd_reflog_expire_cb cmd = { 0 }; @@ -418,6 +449,7 @@ int cmd_reflog(int argc, const char **argv, const char *prefix) parse_opt_subcommand_fn *fn = NULL; struct option options[] = { OPT_SUBCOMMAND("show", &fn, cmd_reflog_show), + OPT_SUBCOMMAND("list", &fn, cmd_reflog_list), OPT_SUBCOMMAND("expire", &fn, cmd_reflog_expire), OPT_SUBCOMMAND("delete", &fn, cmd_reflog_delete), OPT_SUBCOMMAND("exists", &fn, cmd_reflog_exists), diff --git a/builtin/reset.c b/builtin/reset.c index 8390bfe4c4..f0bf29a478 100644 --- a/builtin/reset.c +++ b/builtin/reset.c @@ -281,7 +281,9 @@ static void parse_args(struct pathspec *pathspec, verify_filename(prefix, argv[0], 1); } } - *rev_ret = rev; + + /* treat '@' as a shortcut for 'HEAD' */ + *rev_ret = !strcmp("@", rev) ? "HEAD" : rev; parse_pathspec(pathspec, 0, PATHSPEC_PREFER_FULL | diff --git a/builtin/show-ref.c b/builtin/show-ref.c index 79955c2856..1c15421e60 100644 --- a/builtin/show-ref.c +++ b/builtin/show-ref.c @@ -172,7 +172,7 @@ static int cmd_show_ref__verify(const struct show_one_options *show_one_opts, while (*refs) { struct object_id oid; - if ((starts_with(*refs, "refs/") || !strcmp(*refs, "HEAD")) && + if ((starts_with(*refs, "refs/") || refname_is_safe(*refs)) && !read_ref(*refs, &oid)) { show_one(show_one_opts, *refs, &oid); } diff --git a/builtin/stash.c b/builtin/stash.c index b2813c614c..7fb355bff0 100644 --- a/builtin/stash.c +++ b/builtin/stash.c @@ -520,7 +520,7 @@ static void unstage_changes_unless_new(struct object_id *orig_tree) repo_hold_locked_index(the_repository, &lock, LOCK_DIE_ON_ERROR); if (write_locked_index(&the_index, &lock, COMMIT_LOCK | SKIP_IF_UNCHANGED)) - die(_("Unable to write index.")); + die(_("could not write index")); } static int do_apply_stash(const char *prefix, struct stash_info *info, @@ -537,7 +537,7 @@ static int do_apply_stash(const char *prefix, struct stash_info *info, repo_read_index_preload(the_repository, NULL, 0); if (repo_refresh_and_write_index(the_repository, REFRESH_QUIET, 0, 0, NULL, NULL, NULL)) - return -1; + return error(_("could not write index")); if (write_index_as_tree(&c_tree, &the_index, get_index_file(), 0, NULL)) @@ -1364,7 +1364,7 @@ static int do_create_stash(const struct pathspec *ps, struct strbuf *stash_msg_b repo_read_index_preload(the_repository, NULL, 0); if (repo_refresh_and_write_index(the_repository, REFRESH_QUIET, 0, 0, NULL, NULL, NULL) < 0) { - ret = -1; + ret = error(_("could not write index")); goto done; } @@ -1555,7 +1555,7 @@ static int do_push_stash(const struct pathspec *ps, const char *stash_msg, int q if (repo_refresh_and_write_index(the_repository, REFRESH_QUIET, 0, 0, NULL, NULL, NULL)) { - ret = -1; + ret = error(_("could not write index")); goto done; } diff --git a/builtin/tag.c b/builtin/tag.c index f036cf32f5..19a7e06bf4 100644 --- a/builtin/tag.c +++ b/builtin/tag.c @@ -153,7 +153,7 @@ static int verify_tag(const char *name, const char *ref UNUSED, static int do_sign(struct strbuf *buffer) { - return sign_buffer(buffer, buffer, get_signing_key()); + return sign_buffer(buffer, buffer, get_signing_key()) ? -1 : 0; } static const char tag_template[] = @@ -530,7 +530,8 @@ int cmd_tag(int argc, const char **argv, const char *prefix) struct column_options copts; memset(&copts, 0, sizeof(copts)); copts.padding = 2; - run_column_filter(colopts, &copts); + if (run_column_filter(colopts, &copts)) + die(_("could not start 'git column'")); } filter.name_patterns = argv; ret = list_tags(&filter, sorting, &format); @@ -182,6 +182,8 @@ void print_columns(const struct string_list *list, unsigned int colopts, { struct column_options nopts; + if (opts && (0 > opts->padding)) + BUG("padding must be non-negative"); if (!list->nr) return; assert((colopts & COL_ENABLE_MASK) != COL_AUTO); @@ -361,6 +363,8 @@ int run_column_filter(int colopts, const struct column_options *opts) { struct strvec *argv; + if (opts && (0 > opts->padding)) + BUG("padding must be non-negative"); if (fd_out != -1) return -1; diff --git a/combine-diff.c b/combine-diff.c index db94581f72..d6d6fa1689 100644 --- a/combine-diff.c +++ b/combine-diff.c @@ -337,6 +337,8 @@ static char *grab_blob(struct repository *r, free_filespec(df); } else { blob = repo_read_object_file(r, oid, &type, size); + if (!blob) + die(_("unable to read %s"), oid_to_hex(oid)); if (type != OBJ_BLOB) die("object '%s' is not a blob!", oid_to_hex(oid)); } diff --git a/compat/compiler.h b/compat/compiler.h index 10dbb65937..e9ad9db84f 100644 --- a/compat/compiler.h +++ b/compat/compiler.h @@ -1,7 +1,6 @@ #ifndef COMPILER_H #define COMPILER_H -#include "git-compat-util.h" #include "strbuf.h" #ifdef __GLIBC__ diff --git a/compat/disk.h b/compat/disk.h index 6c979c27d8..23bc1bef86 100644 --- a/compat/disk.h +++ b/compat/disk.h @@ -1,7 +1,6 @@ #ifndef COMPAT_DISK_H #define COMPAT_DISK_H -#include "git-compat-util.h" #include "abspath.h" #include "gettext.h" diff --git a/contrib/coccinelle/xstrncmpz.cocci b/contrib/coccinelle/xstrncmpz.cocci new file mode 100644 index 0000000000..ccb39e2bc0 --- /dev/null +++ b/contrib/coccinelle/xstrncmpz.cocci @@ -0,0 +1,28 @@ +@@ +expression S, T, L; +@@ +( +- strncmp(S, T, L) || S[L] ++ !!xstrncmpz(S, T, L) +| +- strncmp(S, T, L) || S[L] != '\0' ++ !!xstrncmpz(S, T, L) +| +- strncmp(S, T, L) || T[L] ++ !!xstrncmpz(T, S, L) +| +- strncmp(S, T, L) || T[L] != '\0' ++ !!xstrncmpz(T, S, L) +| +- !strncmp(S, T, L) && !S[L] ++ !xstrncmpz(S, T, L) +| +- !strncmp(S, T, L) && S[L] == '\0' ++ !xstrncmpz(S, T, L) +| +- !strncmp(S, T, L) && !T[L] ++ !xstrncmpz(T, S, L) +| +- !strncmp(S, T, L) && T[L] == '\0' ++ !xstrncmpz(T, S, L) +) diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash index c3408d4143..fcf1afd75d 100644 --- a/contrib/completion/git-completion.bash +++ b/contrib/completion/git-completion.bash @@ -1483,12 +1483,32 @@ _git_bisect () { __git_has_doubledash && return - local subcommands="start bad good skip reset visualize replay log run" - local subcommand="$(__git_find_on_cmdline "$subcommands")" + __git_find_repo_path + + # If a bisection is in progress get the terms being used. + local term_bad term_good + if [ -f "$__git_repo_path"/BISECT_TERMS ]; then + term_bad=$(__git bisect terms --term-bad) + term_good=$(__git bisect terms --term-good) + fi + + # We will complete any custom terms, but still always complete the + # more usual bad/new/good/old because git bisect gives a good error + # message if these are given when not in use, and that's better than + # silent refusal to complete if the user is confused. + # + # We want to recognize 'view' but not complete it, because it overlaps + # with 'visualize' too much and is just an alias for it. + # + local completable_subcommands="start bad new $term_bad good old $term_good terms skip reset visualize replay log run help" + local all_subcommands="$completable_subcommands view" + + local subcommand="$(__git_find_on_cmdline "$all_subcommands")" + if [ -z "$subcommand" ]; then __git_find_repo_path if [ -f "$__git_repo_path"/BISECT_START ]; then - __gitcomp "$subcommands" + __gitcomp "$completable_subcommands" else __gitcomp "replay start" fi @@ -1496,7 +1516,26 @@ _git_bisect () fi case "$subcommand" in - bad|good|reset|skip|start) + start) + case "$cur" in + --*) + __gitcomp "--first-parent --no-checkout --term-new --term-bad --term-old --term-good" + return + ;; + *) + __git_complete_refs + ;; + esac + ;; + terms) + __gitcomp "--term-good --term-old --term-bad --term-new" + return + ;; + visualize|view) + __git_complete_log_opts + return + ;; + bad|new|"$term_bad"|good|old|"$term_good"|reset|skip) __git_complete_refs ;; *) @@ -2105,10 +2144,12 @@ __git_diff_merges_opts="off none on first-parent 1 separate m combined c dense-c __git_log_pretty_formats="oneline short medium full fuller reference email raw format: tformat: mboxrd" __git_log_date_formats="relative iso8601 iso8601-strict rfc2822 short local default human raw unix auto: format:" -_git_log () +# Complete porcelain (i.e. not git-rev-list) options and at least some +# option arguments accepted by git-log. Note that this same set of options +# are also accepted by some other git commands besides git-log. +__git_complete_log_opts () { - __git_has_doubledash && return - __git_find_repo_path + COMPREPLY=() local merge="" if __git_pseudoref_exists MERGE_HEAD; then @@ -2204,6 +2245,16 @@ _git_log () return ;; esac +} + +_git_log () +{ + __git_has_doubledash && return + __git_find_repo_path + + __git_complete_log_opts + [ ${#COMPREPLY[@]} -eq 0 ] || return + __git_complete_revlist } @@ -2609,6 +2660,33 @@ __git_compute_config_vars () __git_config_vars="$(git help --config-for-completion)" } +__git_config_vars_all= +__git_compute_config_vars_all () +{ + test -n "$__git_config_vars_all" || + __git_config_vars_all="$(git --no-pager help --config)" +} + +__git_compute_first_level_config_vars_for_section () +{ + local section="$1" + __git_compute_config_vars + local this_section="__git_first_level_config_vars_for_section_${section}" + test -n "${!this_section}" || + printf -v "__git_first_level_config_vars_for_section_${section}" %s \ + "$(echo "$__git_config_vars" | awk -F. "/^${section}\.[a-z]/ { print \$2 }")" +} + +__git_compute_second_level_config_vars_for_section () +{ + local section="$1" + __git_compute_config_vars_all + local this_section="__git_second_level_config_vars_for_section_${section}" + test -n "${!this_section}" || + printf -v "__git_second_level_config_vars_for_section_${section}" %s \ + "$(echo "$__git_config_vars_all" | awk -F. "/^${section}\.</ { print \$3 }")" +} + __git_config_sections= __git_compute_config_sections () { @@ -2753,73 +2831,50 @@ __git_complete_config_variable_name () done case "$cur_" in - branch.*.*) + branch.*.*|guitool.*.*|difftool.*.*|man.*.*|mergetool.*.*|remote.*.*|submodule.*.*|url.*.*) local pfx="${cur_%.*}." cur_="${cur_##*.}" - __gitcomp "remote pushRemote merge mergeOptions rebase" "$pfx" "$cur_" "$sfx" + local section="${pfx%.*.}" + __git_compute_second_level_config_vars_for_section "${section}" + local this_section="__git_second_level_config_vars_for_section_${section}" + __gitcomp "${!this_section}" "$pfx" "$cur_" "$sfx" return ;; branch.*) local pfx="${cur_%.*}." cur_="${cur_#*.}" + local section="${pfx%.}" __gitcomp_direct "$(__git_heads "$pfx" "$cur_" ".")" - __gitcomp_nl_append $'autoSetupMerge\nautoSetupRebase\n' "$pfx" "$cur_" "${sfx- }" - return - ;; - guitool.*.*) - local pfx="${cur_%.*}." - cur_="${cur_##*.}" - __gitcomp " - argPrompt cmd confirm needsFile noConsole noRescan - prompt revPrompt revUnmerged title - " "$pfx" "$cur_" "$sfx" - return - ;; - difftool.*.*) - local pfx="${cur_%.*}." - cur_="${cur_##*.}" - __gitcomp "cmd path" "$pfx" "$cur_" "$sfx" - return - ;; - man.*.*) - local pfx="${cur_%.*}." - cur_="${cur_##*.}" - __gitcomp "cmd path" "$pfx" "$cur_" "$sfx" - return - ;; - mergetool.*.*) - local pfx="${cur_%.*}." - cur_="${cur_##*.}" - __gitcomp "cmd path trustExitCode" "$pfx" "$cur_" "$sfx" + __git_compute_first_level_config_vars_for_section "${section}" + local this_section="__git_first_level_config_vars_for_section_${section}" + __gitcomp_nl_append "${!this_section}" "$pfx" "$cur_" "${sfx:- }" return ;; pager.*) local pfx="${cur_%.*}." cur_="${cur_#*.}" __git_compute_all_commands - __gitcomp_nl "$__git_all_commands" "$pfx" "$cur_" "${sfx- }" - return - ;; - remote.*.*) - local pfx="${cur_%.*}." - cur_="${cur_##*.}" - __gitcomp " - url proxy fetch push mirror skipDefaultUpdate - receivepack uploadpack tagOpt pushurl - " "$pfx" "$cur_" "$sfx" + __gitcomp_nl "$__git_all_commands" "$pfx" "$cur_" "${sfx:- }" return ;; remote.*) local pfx="${cur_%.*}." cur_="${cur_#*.}" + local section="${pfx%.}" __gitcomp_nl "$(__git_remotes)" "$pfx" "$cur_" "." - __gitcomp_nl_append "pushDefault" "$pfx" "$cur_" "${sfx- }" + __git_compute_first_level_config_vars_for_section "${section}" + local this_section="__git_first_level_config_vars_for_section_${section}" + __gitcomp_nl_append "${!this_section}" "$pfx" "$cur_" "${sfx:- }" return ;; - url.*.*) + submodule.*) local pfx="${cur_%.*}." - cur_="${cur_##*.}" - __gitcomp "insteadOf pushInsteadOf" "$pfx" "$cur_" "$sfx" + cur_="${cur_#*.}" + local section="${pfx%.}" + __gitcomp_nl "$(__git config -f "$(__git rev-parse --show-toplevel)/.gitmodules" --get-regexp 'submodule.*.path' | awk -F. '{print $2}')" "$pfx" "$cur_" "." + __git_compute_first_level_config_vars_for_section "${section}" + local this_section="__git_first_level_config_vars_for_section_${section}" + __gitcomp_nl_append "${!this_section}" "$pfx" "$cur_" "${sfx:- }" return ;; *.*) diff --git a/contrib/credential/libsecret/git-credential-libsecret.c b/contrib/credential/libsecret/git-credential-libsecret.c index 215a81d8ba..90034d0cf1 100644 --- a/contrib/credential/libsecret/git-credential-libsecret.c +++ b/contrib/credential/libsecret/git-credential-libsecret.c @@ -164,6 +164,9 @@ static int keyring_get(struct credential *c) if (g_strv_length(parts) >= 1) { g_free(c->password); c->password = g_strdup(parts[0]); + } else { + g_free(c->password); + c->password = g_strdup(""); } for (int i = 1; i < g_strv_length(parts); i++) { if (g_str_has_prefix(parts[i], "password_expiry_utc=")) { @@ -1028,7 +1028,7 @@ static int read_convert_config(const char *var, const char *value, if (parse_config_key(var, "filter", &name, &namelen, &key) < 0 || !name) return 0; for (drv = user_convert; drv; drv = drv->next) - if (!strncmp(drv->name, name, namelen) && !drv->name[namelen]) + if (!xstrncmpz(drv->name, name, namelen)) break; if (!drv) { CALLOC_ARRAY(drv, 1); @@ -5590,7 +5590,7 @@ struct option *add_diff_options(const struct option *opts, OPT_BITOP(0, "shortstat", &options->output_format, N_("output only the last line of --stat"), DIFF_FORMAT_SHORTSTAT, DIFF_FORMAT_NO_OUTPUT), - OPT_CALLBACK_F('X', "dirstat", options, N_("<param1,param2>..."), + OPT_CALLBACK_F('X', "dirstat", options, N_("<param1>,<param2>..."), N_("output the distribution of relative amount of changes for each sub-directory"), PARSE_OPT_NONEG | PARSE_OPT_OPTARG, diff_opt_dirstat), @@ -5598,8 +5598,8 @@ struct option *add_diff_options(const struct option *opts, N_("synonym for --dirstat=cumulative"), PARSE_OPT_NONEG | PARSE_OPT_NOARG, diff_opt_dirstat), - OPT_CALLBACK_F(0, "dirstat-by-file", options, N_("<param1,param2>..."), - N_("synonym for --dirstat=files,param1,param2..."), + OPT_CALLBACK_F(0, "dirstat-by-file", options, N_("<param1>,<param2>..."), + N_("synonym for --dirstat=files,<param1>,<param2>..."), PARSE_OPT_NONEG | PARSE_OPT_OPTARG, diff_opt_dirstat), OPT_BIT_F(0, "check", &options->output_format, diff --git a/dir-iterator.c b/dir-iterator.c index 278b04243a..de619846f2 100644 --- a/dir-iterator.c +++ b/dir-iterator.c @@ -2,11 +2,20 @@ #include "dir.h" #include "iterator.h" #include "dir-iterator.h" +#include "string-list.h" struct dir_iterator_level { DIR *dir; /* + * The directory entries of the current level. This list will only be + * populated when the iterator is ordered. In that case, `dir` will be + * set to `NULL`. + */ + struct string_list entries; + size_t entries_idx; + + /* * The length of the directory part of path at this level * (including a trailing '/'): */ @@ -43,6 +52,31 @@ struct dir_iterator_int { unsigned int flags; }; +static int next_directory_entry(DIR *dir, const char *path, + struct dirent **out) +{ + struct dirent *de; + +repeat: + errno = 0; + de = readdir(dir); + if (!de) { + if (errno) { + warning_errno("error reading directory '%s'", + path); + return -1; + } + + return 1; + } + + if (is_dot_or_dotdot(de->d_name)) + goto repeat; + + *out = de; + return 0; +} + /* * Push a level in the iter stack and initialize it with information from * the directory pointed by iter->base->path. It is assumed that this @@ -72,6 +106,35 @@ static int push_level(struct dir_iterator_int *iter) return -1; } + string_list_init_dup(&level->entries); + level->entries_idx = 0; + + /* + * When the iterator is sorted we read and sort all directory entries + * directly. + */ + if (iter->flags & DIR_ITERATOR_SORTED) { + struct dirent *de; + + while (1) { + int ret = next_directory_entry(level->dir, iter->base.path.buf, &de); + if (ret < 0) { + if (errno != ENOENT && + iter->flags & DIR_ITERATOR_PEDANTIC) + return -1; + continue; + } else if (ret > 0) { + break; + } + + string_list_append(&level->entries, de->d_name); + } + string_list_sort(&level->entries); + + closedir(level->dir); + level->dir = NULL; + } + return 0; } @@ -88,21 +151,22 @@ static int pop_level(struct dir_iterator_int *iter) warning_errno("error closing directory '%s'", iter->base.path.buf); level->dir = NULL; + string_list_clear(&level->entries, 0); return --iter->levels_nr; } /* * Populate iter->base with the necessary information on the next iteration - * entry, represented by the given dirent de. Return 0 on success and -1 + * entry, represented by the given name. Return 0 on success and -1 * otherwise, setting errno accordingly. */ static int prepare_next_entry_data(struct dir_iterator_int *iter, - struct dirent *de) + const char *name) { int err, saved_errno; - strbuf_addstr(&iter->base.path, de->d_name); + strbuf_addstr(&iter->base.path, name); /* * We have to reset these because the path strbuf might have * been realloc()ed at the previous strbuf_addstr(). @@ -139,27 +203,34 @@ int dir_iterator_advance(struct dir_iterator *dir_iterator) struct dirent *de; struct dir_iterator_level *level = &iter->levels[iter->levels_nr - 1]; + const char *name; strbuf_setlen(&iter->base.path, level->prefix_len); - errno = 0; - de = readdir(level->dir); - if (!de) { - if (errno) { - warning_errno("error reading directory '%s'", - iter->base.path.buf); + if (level->dir) { + int ret = next_directory_entry(level->dir, iter->base.path.buf, &de); + if (ret < 0) { if (iter->flags & DIR_ITERATOR_PEDANTIC) goto error_out; - } else if (pop_level(iter) == 0) { - return dir_iterator_abort(dir_iterator); + continue; + } else if (ret > 0) { + if (pop_level(iter) == 0) + return dir_iterator_abort(dir_iterator); + continue; } - continue; - } - if (is_dot_or_dotdot(de->d_name)) - continue; + name = de->d_name; + } else { + if (level->entries_idx >= level->entries.nr) { + if (pop_level(iter) == 0) + return dir_iterator_abort(dir_iterator); + continue; + } - if (prepare_next_entry_data(iter, de)) { + name = level->entries.items[level->entries_idx++].string; + } + + if (prepare_next_entry_data(iter, name)) { if (errno != ENOENT && iter->flags & DIR_ITERATOR_PEDANTIC) goto error_out; continue; @@ -188,6 +259,8 @@ int dir_iterator_abort(struct dir_iterator *dir_iterator) warning_errno("error closing directory '%s'", iter->base.path.buf); } + + string_list_clear(&level->entries, 0); } free(iter->levels); diff --git a/dir-iterator.h b/dir-iterator.h index 479e1ec784..6d438809b6 100644 --- a/dir-iterator.h +++ b/dir-iterator.h @@ -54,8 +54,11 @@ * and ITER_ERROR is returned immediately. In both cases, a meaningful * warning is emitted. Note: ENOENT errors are always ignored so that * the API users may remove files during iteration. + * + * - DIR_ITERATOR_SORTED: sort directory entries alphabetically. */ #define DIR_ITERATOR_PEDANTIC (1 << 0) +#define DIR_ITERATOR_SORTED (1 << 1) struct dir_iterator { /* The current path: */ diff --git a/git-difftool--helper.sh b/git-difftool--helper.sh index e4e820e680..dd0c9a5b7f 100755 --- a/git-difftool--helper.sh +++ b/git-difftool--helper.sh @@ -91,6 +91,19 @@ then # ignore the error from the above --- run_merge_tool # will diagnose unusable tool by itself run_merge_tool "$merge_tool" false + + status=$? + if test $status -ge 126 + then + # Command not found (127), not executable (126) or + # exited via a signal (>= 128). + exit $status + fi + + if test "$GIT_DIFFTOOL_TRUST_EXIT_CODE" = true + then + exit $status + fi else # Launch the merge tool on each path provided by 'git diff' while test $# -gt 6 diff --git a/gpg-interface.c b/gpg-interface.c index f614105033..95e764acb1 100644 --- a/gpg-interface.c +++ b/gpg-interface.c @@ -1078,7 +1078,7 @@ static int sign_buffer_ssh(struct strbuf *buffer, struct strbuf *signature, if (strstr(signer_stderr.buf, "usage:")) error(_("ssh-keygen -Y sign is needed for ssh signing (available in openssh version 8.2p1+)")); - error("%s", signer_stderr.buf); + ret = error("%s", signer_stderr.buf); goto out; } diff --git a/gpg-interface.h b/gpg-interface.h index 143cdc1c02..7cd98161f7 100644 --- a/gpg-interface.h +++ b/gpg-interface.h @@ -66,7 +66,7 @@ size_t parse_signed_buffer(const char *buf, size_t size); * Create a detached signature for the contents of "buffer" and append * it after "signature"; "buffer" and "signature" can be the same * strbuf instance, which would cause the detached signature appended - * at the end. + * at the end. Returns 0 on success, non-zero on failure. */ int sign_buffer(struct strbuf *buffer, struct strbuf *signature, const char *signing_key); diff --git a/mem-pool.c b/mem-pool.c index c7d6256020..2078c22b09 100644 --- a/mem-pool.c +++ b/mem-pool.c @@ -107,6 +107,45 @@ void *mem_pool_alloc(struct mem_pool *pool, size_t len) return r; } +static char *mem_pool_strvfmt(struct mem_pool *pool, const char *fmt, + va_list ap) +{ + struct mp_block *block = pool->mp_block; + char *next_free = block ? block->next_free : NULL; + size_t available = block ? block->end - block->next_free : 0; + va_list cp; + int len, len2; + char *ret; + + va_copy(cp, ap); + len = vsnprintf(next_free, available, fmt, cp); + va_end(cp); + if (len < 0) + BUG("your vsnprintf is broken (returned %d)", len); + + ret = mem_pool_alloc(pool, len + 1); /* 1 for NUL */ + + /* Shortcut; relies on mem_pool_alloc() not touching buffer contents. */ + if (ret == next_free) + return ret; + + len2 = vsnprintf(ret, len + 1, fmt, ap); + if (len2 != len) + BUG("your vsnprintf is broken (returns inconsistent lengths)"); + return ret; +} + +char *mem_pool_strfmt(struct mem_pool *pool, const char *fmt, ...) +{ + va_list ap; + char *ret; + + va_start(ap, fmt); + ret = mem_pool_strvfmt(pool, fmt, ap); + va_end(ap); + return ret; +} + void *mem_pool_calloc(struct mem_pool *pool, size_t count, size_t size) { size_t len = st_mult(count, size); diff --git a/mem-pool.h b/mem-pool.h index fe7507f022..d1c66413ec 100644 --- a/mem-pool.h +++ b/mem-pool.h @@ -48,6 +48,11 @@ char *mem_pool_strdup(struct mem_pool *pool, const char *str); char *mem_pool_strndup(struct mem_pool *pool, const char *str, size_t len); /* + * Allocate memory from the memory pool and format a string into it. + */ +char *mem_pool_strfmt(struct mem_pool *pool, const char *fmt, ...); + +/* * Move the memory associated with the 'src' pool to the 'dst' pool. The 'src' * pool will be empty and not contain any memory. It still needs to be free'd * with a call to `mem_pool_discard`. diff --git a/merge-ll.c b/merge-ll.c index 5ffb045efb..61e0ae5398 100644 --- a/merge-ll.c +++ b/merge-ll.c @@ -292,7 +292,7 @@ static int read_merge_config(const char *var, const char *value, * after seeing merge.<name>.var1. */ for (fn = ll_user_merge; fn; fn = fn->next) - if (!strncmp(fn->name, name, namelen) && !fn->name[namelen]) + if (!xstrncmpz(fn->name, name, namelen)) break; if (!fn) { CALLOC_ARRAY(fn, 1); diff --git a/merge-ort.c b/merge-ort.c index 8617babee4..6a48aea227 100644 --- a/merge-ort.c +++ b/merge-ort.c @@ -18,6 +18,7 @@ #include "merge-ort.h" #include "alloc.h" +#include "advice.h" #include "attr.h" #include "cache-tree.h" #include "commit.h" @@ -4556,7 +4557,7 @@ static void print_submodule_conflict_suggestion(struct string_list *csub) { " - commit the resulting index in the superproject\n"), tmp.buf, subs.buf); - printf("%s", msg.buf); + advise_if_enabled(ADVICE_SUBMODULE_MERGE_CONFLICT, "%s", msg.buf); strbuf_release(&subs); strbuf_release(&tmp); diff --git a/mergetools/vimdiff b/mergetools/vimdiff index 06937acbf5..97e376329b 100644 --- a/mergetools/vimdiff +++ b/mergetools/vimdiff @@ -371,9 +371,17 @@ diff_cmd_help () { merge_cmd () { - layout=$(git config mergetool.vimdiff.layout) + TOOL=$1 - case "$1" in + layout=$(git config "mergetool.$TOOL.layout") + + # backward compatibility: + if test -z "$layout" + then + layout=$(git config mergetool.vimdiff.layout) + fi + + case "$TOOL" in *vimdiff) if test -z "$layout" then diff --git a/object-name.c b/object-name.c index 3a2ef5d680..511f09bc0f 100644 --- a/object-name.c +++ b/object-name.c @@ -1034,6 +1034,15 @@ static int get_oid_basic(struct repository *r, const char *str, int len, len, str, show_date(co_time, co_tz, DATE_MODE(RFC2822))); } + } else if (nth == co_cnt && !is_null_oid(oid)) { + /* + * We were asked for the Nth reflog (counting + * from 0), but there were only N entries. + * read_ref_at() will have returned "1" to tell + * us it did not find an entry, but it did + * still fill in the oid with the "old" value, + * which we can use. + */ } else { if (flags & GET_OID_QUIETLY) { exit(128); @@ -47,8 +47,7 @@ int type_from_string_gently(const char *str, ssize_t len, int gentle) len = strlen(str); for (i = 1; i < ARRAY_SIZE(object_type_strings); i++) - if (!strncmp(str, object_type_strings[i], len) && - object_type_strings[i][len] == '\0') + if (!xstrncmpz(object_type_strings[i], str, len)) return i; if (gentle) @@ -1,7 +1,7 @@ # Bulgarian translation of git po-file. -# Copyright (C) 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023 Alexander Shopov <ash@kambanaria.org>. +# Copyright (C) 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024 Alexander Shopov <ash@kambanaria.org>. # This file is distributed under the same license as the git package. -# Alexander Shopov <ash@kambanaria.org>, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023. +# Alexander Shopov <ash@kambanaria.org>, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024. # ======================== # DICTIONARY TO MERGE IN GIT GUI # ------------------------ @@ -141,6 +141,8 @@ # midx, multi-pack index - файл Ñ Ð¸Ð½Ð´ÐµÐºÑа за множеÑтво пакети # overlay mode - припокриващ режим (при изтеглÑнe) # incremental file нараÑтващ файл +# commit-graph граф Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñ +# commit-graph chain верига на гра̀фа Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñ # split (commit-graphr) раздробен (граф Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñ) # clobber (a tag) презапиÑвам (етикет) # blame извеждане на авторÑтво @@ -207,6 +209,15 @@ # master/main branch оÑновен клон # unborn/orphan branch неродѐн клон (а не неÑъздаден) - клон без никакви подаваниÑ, включително и началното # parse анализ, анализирам +# reinitialize repository занулÑване на хранилището и инициализиране +# replay изпълнÑване/прилагане наново +# BTMP chunk Ð¾Ñ‚ÐºÑŠÑ Ð·Ð° побитова маÑка +# OID fanout chunk Ð¾Ñ‚ÐºÑŠÑ Ð·Ð° разпределÑнето +# OID lookup chunk Ð¾Ñ‚ÐºÑŠÑ Ð·Ð° търÑенето +# autostash автоматично Ñкатано +# symref файл Ñ ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ» (regular file that stores a string that begins with ref: refs/) +# +# # # ------------------------ # „$var“ - може да не Ñработва за shell има gettext и eval_gettext - проверка - намират Ñе леÑно по „$ @@ -233,10 +244,10 @@ # for i in `sort -u FILES`; do cnt=`grep $i FILES | wc -l`; echo $cnt $i ;done | sort -n msgid "" msgstr "" -"Project-Id-Version: git 2.43\n" +"Project-Id-Version: git 2.44\n" "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n" -"POT-Creation-Date: 2023-11-17 15:49+0100\n" -"PO-Revision-Date: 2023-11-18 13:23+0100\n" +"POT-Creation-Date: 2024-02-16 09:33+0100\n" +"PO-Revision-Date: 2024-02-16 09:38+0100\n" "Last-Translator: Alexander Shopov <ash@kambanaria.org>\n" "Language-Team: Bulgarian <dict@fsa-bg.org>\n" "Language: bg\n" @@ -1691,6 +1702,10 @@ msgid "Unexpected option --output" msgstr "Ðеочаквана Ð¾Ð¿Ñ†Ð¸Ñ â€ž--output“" #, c-format +msgid "extra command line parameter '%s'" +msgstr "излишна Ð¾Ð¿Ñ†Ð¸Ñ Ð¸Ð»Ð¸ ÑтойноÑÑ‚ на ÐºÐ¾Ð¼Ð°Ð½Ð´Ð½Ð¸Ñ Ñ€ÐµÐ´: „%s“" + +#, c-format msgid "Unknown archive format '%s'" msgstr "Ðепознат формат на архив: „%s“" @@ -1738,6 +1753,14 @@ msgstr "" "„GIT_ATTR_SOURCE“" #, c-format +msgid "unable to stat '%s'" +msgstr "„stat“ не може да Ñе изпълни върху „%s“" + +#, c-format +msgid "unable to read %s" +msgstr "обектът „%s“ не може да бъде прочетен" + +#, c-format msgid "Badly quoted content in file '%s': %s" msgstr "Ðеправилно цитирано Ñъдържание във файла „%s“: %s" @@ -3074,12 +3097,13 @@ msgid "couldn't look up commit object for '%s'" msgstr "обектът-подаване за „%s“ не може да Ñе открие" #, c-format -msgid "" -"the branch '%s' is not fully merged.\n" -"If you are sure you want to delete it, run 'git branch -D %s'" +msgid "the branch '%s' is not fully merged" +msgstr "клонът „%s“ не е ÑлÑÑ‚ напълно" + +#, c-format +msgid "If you are sure you want to delete it, run 'git branch -D %s'" msgstr "" -"клонът „%s“ не е ÑлÑÑ‚ напълно. Ðко Ñте Ñигурни, че иÑкате\n" -"да го изтриете, изпълнете:\n" +"Ðко Ñте Ñигурни, че иÑкате да го изтриете, изпълнете:\n" "\n" " git branch -D %s" @@ -3126,7 +3150,7 @@ msgstr "подаването, Ñочено от ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»Ñ â€žHEAD“, Ð #, c-format msgid "HEAD (%s) points outside of refs/heads/" -msgstr "„HEAD“ (%s) Ñочи извън директориÑта „refs/heads“" +msgstr "„HEAD“ (%s) Ñочи извън директориÑта „refs/heads/“" #, c-format msgid "branch %s is being rebased at %s" @@ -4138,8 +4162,8 @@ msgstr "принудително изтеглÑне (вашите промѐн msgid "new-branch" msgstr "ÐОВ_КЛОÐ" -msgid "new unparented branch" -msgstr "нов клон без родител" +msgid "new unborn branch" +msgstr "нов неродѐн клон" msgid "update ignored files (default)" msgstr "обновÑване на игнорираните файлове (Ñтандартно)" @@ -4392,9 +4416,6 @@ msgstr "" "което изиÑква нÑÐºÐ¾Ñ Ð¾Ñ‚ опциите „-i“, „-n“ или „-f“. ÐÑма да Ñе извърши " "изчиÑтване" -msgid "-x and -X cannot be used together" -msgstr "опциите „-x“ и „-X“ Ñа неÑъвмеÑтими" - msgid "git clone [<options>] [--] <repo> [<dir>]" msgstr "git clone [ОПЦИЯ…] [--] ХРÐÐИЛИЩЕ [ДИРЕКТОРИЯ]" @@ -4486,6 +4507,9 @@ msgstr "СЛУЖЕБÐÐ_ДИРЕКТОРИЯ" msgid "separate git dir from working tree" msgstr "отделна СЛУЖЕБÐÐ_ДИРЕКТОРИЯ за git извън работното дърво" +msgid "specify the reference format to use" +msgstr "указване на форма̀та за указател" + msgid "key=value" msgstr "КЛЮЧ=СТОЙÐОСТ" @@ -4613,12 +4637,9 @@ msgstr "Прекалено много аргументи." msgid "You must specify a repository to clone." msgstr "ТрÑбва да укажете кое хранилище иÑкате да клонирате." -msgid "" -"--bundle-uri is incompatible with --depth, --shallow-since, and --shallow-" -"exclude" -msgstr "" -"опциÑта „--bundle-uri“ е неÑъвмеÑтима Ñ â€ž--depth“, „--shallow-since“ и „--" -"shallow-exclude“" +#, c-format +msgid "unknown ref storage format '%s'" +msgstr "непознат формат на Ñъхранение: „%s“" #, c-format msgid "repository '%s' does not exist" @@ -4756,7 +4777,7 @@ msgid "" "--stdin-commits]\n" " [--changed-paths] [--[no-]max-new-filters <n>] [--" "[no-]progress]\n" -" <split options>" +" <split-options>" msgstr "" "git commit-graph write [--object-dir ДИРЕКТОРИЯ] [--append]\n" " [--split[=СТРÐТЕГИЯ]] [--reachable|--stdin-packs|--" @@ -7145,6 +7166,10 @@ msgid "unable to read tree (%s)" msgstr "дървото не може да бъде прочетено (%s)" #, c-format +msgid "unable to read tree %s" +msgstr "дървото не може да бъде прочетено: %s" + +#, c-format msgid "unable to grep from object of type %s" msgstr "не може да Ñе изпълни „grep“ от обект от вида %s" @@ -7566,10 +7591,6 @@ msgstr "" "СЪВПÐДЕÐИЕ ÐРСТОЙÐОСТИТЕ ЗРСУМИТЕ ЗРSHA1: „%s“ ÐРДВРРÐЗЛИЧÐИ ОБЕКТÐ!" #, c-format -msgid "unable to read %s" -msgstr "обектът „%s“ не може да бъде прочетен" - -#, c-format msgid "cannot read existing object info %s" msgstr "ÑъщеÑтвуващиÑÑ‚ обект в „%s“ не може да бъде прочетен" @@ -7711,6 +7732,7 @@ msgstr "грешка при проверка Ñ â€žfsck“ на пакетнит msgid "" "git init [-q | --quiet] [--bare] [--template=<template-directory>]\n" " [--separate-git-dir <git-dir>] [--object-format=<format>]\n" +" [--ref-format=<format>]\n" " [-b <branch-name> | --initial-branch=<branch-name>]\n" " [--shared[=<permissions>]] [<directory>]" msgstr "" @@ -8449,6 +8471,14 @@ msgstr "" "git merge-file [ОПЦИЯ…] [-L ИМЕ_1 [-L ОРИГИÐÐЛ [-L ИМЕ_2]]] ФÐЙЛ_1 ОРИГ_ФÐЙЛ " "ФÐЙЛ_2" +msgid "" +"option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and " +"\"histogram\"" +msgstr "" +"опциÑта приема Ñледните варианти за алгоритъм за разлики: „myers“ (по " +"МайерÑ), „minimal“ (минимизиране на разликите), „patience“ (паÑианÑ) и " +"„histogram“ (хиÑтограмен)" + msgid "send results to standard output" msgstr "извеждане на резултатите на ÑÑ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð¸Ñ Ð¸Ð·Ñ…Ð¾Ð´" @@ -8470,6 +8500,12 @@ msgstr "при конфликти да Ñе ползва чуждата Ð²ÐµÑ€Ñ msgid "for conflicts, use a union version" msgstr "при конфликти да Ñе ползва обединена верÑиÑ" +msgid "<algorithm>" +msgstr "ÐЛГОРИТЪМ" + +msgid "choose a diff algorithm" +msgstr "избор на ÐЛГОРИТЪМа за разлики" + msgid "for conflicts, use this marker size" msgstr "при конфликти да Ñе ползва маркер Ñ Ñ‚Ð°ÐºÑŠÐ² БРОЙ знаци" @@ -8561,9 +8597,6 @@ msgstr "„--trivial-merge“ е неÑъвмеÑтима Ñ Ð´Ñ€ÑƒÐ³Ð¸Ñ‚Ðµ оп msgid "unknown strategy option: -X%s" msgstr "непозната Ð¾Ð¿Ñ†Ð¸Ñ Ð·Ð° ÑтратегиÑ: -X%s" -msgid "--merge-base is incompatible with --stdin" -msgstr "опциите „--merge-base“ и „--stdin“ Ñа неÑъвмеÑтими" - #, c-format msgid "malformed input line: '%s'." msgstr "входен ред Ñ Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÐµÐ½ формат: „%s“." @@ -8606,7 +8639,7 @@ msgstr "(пÑевдоним на „--stat“)" msgid "add (at most <n>) entries from shortlog to merge commit message" msgstr "" "добавÑне (на макÑимум такъв БРОЙ) запиÑи от ÑÑŠÐºÑ€Ð°Ñ‚ÐµÐ½Ð¸Ñ Ð¶ÑƒÑ€Ð½Ð°Ð» в Ñъобщението " -"за подаване" +"за подаване ÑÑŠÑ Ñливане" msgid "create a single commit instead of doing a merge" msgstr "Ñъздаване на едно подаване вмеÑто извършване на Ñливане" @@ -9523,6 +9556,11 @@ msgid "inconsistency with delta count" msgstr "неправилен брой разлики" #, c-format +msgid "invalid pack.allowPackReuse value: '%s'" +msgstr "" +"неправилна ÑтойноÑÑ‚ за преизползването на пакети „pack.allowPackReuse“: „%s“" + +#, c-format msgid "" "value of uploadpack.blobpackfileuri must be of the form '<object-hash> <pack-" "hash> <uri>' (got '%s')" @@ -9795,10 +9833,10 @@ msgstr "ИзброÑване на обектите" #, c-format msgid "" "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-" -"reused %<PRIu32>" +"reused %<PRIu32> (from %<PRIuMAX>)" msgstr "" "Общо: %<PRIu32> (разлики: %<PRIu32>), преизползвани: %<PRIu32> (разлики: " -"%<PRIu32>), преизползвани при пакетиране: %<PRIu32>" +"%<PRIu32>), преизползвани при пакетиране: %<PRIu32> (от %<PRIuMAX>)" msgid "" "'git pack-redundant' is nominated for removal.\n" @@ -10792,13 +10830,6 @@ msgid "switch `C' expects a numerical value" msgstr "опциÑта „C“ очаква чиÑло за аргумент" msgid "" -"apply options are incompatible with rebase.autoSquash. Consider adding --no-" -"autosquash" -msgstr "" -"опциите за прилагане Ñа неÑъвмеÑтими Ñ â€žrebase.autoSquash“. Пробвайте да " -"добавите опциÑта „--no-autosquash“" - -msgid "" "apply options are incompatible with rebase.rebaseMerges. Consider adding --" "no-rebase-merges" msgstr "" @@ -11823,6 +11854,76 @@ msgstr "опциÑта „--convert-graft-file“ не приема аргуме msgid "only one pattern can be given with -l" msgstr "опциÑта „-l“ приема точно един шаблон" +msgid "need some commits to replay" +msgstr "необходимо е да има Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñ Ð·Ð° прилагане отново" + +msgid "--onto and --advance are incompatible" +msgstr "опциите „--onto“ и „--advance“ Ñа неÑъвмеÑтими" + +msgid "all positive revisions given must be references" +msgstr "вÑички зададени положителни верÑии трÑбва да Ñа указатели" + +msgid "argument to --advance must be a reference" +msgstr "аргументът към „--advance“ трÑбва да е указател" + +msgid "" +"cannot advance target with multiple sources because ordering would be ill-" +"defined" +msgstr "" +"цели Ñ Ð¼Ð½Ð¾Ð¶ÐµÑтво източници не може да Ñе придвижат напред, защото подредбата " +"не е добре дефинирана" + +msgid "" +"cannot implicitly determine whether this is an --advance or --onto operation" +msgstr "" +"не може да Ñе определи дали това дейÑтвие е за „--advance“ или „--onto“" + +msgid "" +"cannot advance target with multiple source branches because ordering would " +"be ill-defined" +msgstr "" +"цели Ñ Ð¼Ð½Ð¾Ð¶ÐµÑтво клони-източници не може да Ñе придвижат напред, защото " +"подредбата не е добре дефинирана" + +msgid "cannot implicitly determine correct base for --onto" +msgstr "правилната база за „--onto“ не може да Ñе определи" + +msgid "" +"(EXPERIMENTAL!) git replay ([--contained] --onto <newbase> | --advance " +"<branch>) <revision-range>..." +msgstr "" +"(ЕКСПЕРИМЕÐТÐЛÐО!) git replay ([--contained] --onto ÐОВÐ_БÐЗР| --advance " +"КЛОÐ) ДИÐПÐЗОÐ_ПОДÐÐ’ÐÐИЯ…" + +msgid "make replay advance given branch" +msgstr "прилагането наново придвижва Ð´Ð°Ð´ÐµÐ½Ð¸Ñ ÐšÐ›ÐžÐ Ð½Ð°Ð¿Ñ€ÐµÐ´" + +msgid "replay onto given commit" +msgstr "прилагането наново върху даденото ПОДÐÐ’ÐÐЕ" + +msgid "advance all branches contained in revision-range" +msgstr "придвижване на вÑички КЛОÐи в ДИÐПÐЗОÐа_ПОДÐÐ’ÐÐИЯ" + +msgid "option --onto or --advance is mandatory" +msgstr "изиÑква Ñе нÑÐºÐ¾Ñ Ð¾Ñ‚ опциите „--onto“ или „--advance“" + +#, c-format +msgid "" +"some rev walking options will be overridden as '%s' bit in 'struct rev_info' " +"will be forced" +msgstr "" +"нÑкои опции за проÑледÑване на указатели ще бъдат променени, защото битът " +"„%s“ в Ñтруктурата „struct rev_info“ има превеÑ" + +msgid "error preparing revisions" +msgstr "грешка при подготовката на верÑии" + +msgid "replaying down to root commit is not supported yet!" +msgstr "не Ñе поддържа прилагане наново и на началното подаване!" + +msgid "replaying merge commits is not supported yet!" +msgstr "не Ñе поддържа прилагане наново и на Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñ ÑÑŠÑ Ñливане!" + msgid "" "git rerere [clear | forget <pathspec>... | diff | status | remaining | gc]" msgstr "git rerere [clear|forget ПЪТ…|diff|status|remaining|gc]" @@ -12030,15 +12131,6 @@ msgstr "опциÑта „--prefix“ изиÑква аргумент" msgid "unknown mode for --abbrev-ref: %s" msgstr "непознат режим за „--abbrev-ref“: „%s“" -msgid "--exclude-hidden cannot be used together with --branches" -msgstr "опциите „--exclude-hidden“ и „--branches“ Ñа неÑъвмеÑтими" - -msgid "--exclude-hidden cannot be used together with --tags" -msgstr "опциите „--exclude-hidden“ и „--tags“ Ñа неÑъвмеÑтими" - -msgid "--exclude-hidden cannot be used together with --remotes" -msgstr "опциите „--exclude-hidden“ и „--remotes“ Ñа неÑъвмеÑтими" - msgid "this operation must be run in a work tree" msgstr "тази команда трÑбва да Ñе изпълни в работно дърво" @@ -12242,7 +12334,7 @@ msgid "git shortlog [<options>] [<revision-range>] [[--] <path>...]" msgstr "git shortlog [ОПЦИЯ…] [ДИÐПÐЗОÐ_ÐÐ_ВЕРСИИТЕ] [[--] [ПЪТ…]]" msgid "git log --pretty=short | git shortlog [<options>]" -msgstr "git log --pretty=short|git shortlog [ОПЦИЯ…]" +msgstr "git log --pretty=short | git shortlog [ОПЦИЯ…]" msgid "using multiple --group options with stdin is not supported" msgstr "повече от една опции „--group“ Ñа неÑъвмеÑтими ÑÑŠÑ ÑÑ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð¸Ñ Ð²Ñ…Ð¾Ð´" @@ -12455,10 +12547,6 @@ msgstr "" "извеждане на указателите приети от ÑÑ‚Ð°Ð½Ð´Ð°Ñ€Ñ‚Ð½Ð¸Ñ Ð²Ñ…Ð¾Ð´, които липÑват в " "локалното хранилище" -#, c-format -msgid "only one of '%s', '%s' or '%s' can be given" -msgstr "опциите „%s“, „%s“ и „%s“ Ñа неÑъвмеÑтими" - msgid "" "git sparse-checkout (init | list | set | add | reapply | disable | check-" "rules) [<options>]" @@ -13951,7 +14039,7 @@ msgstr "ЛипÑва клон-източник, затова Ñе приема â #, c-format msgid "" -"If you meant to create a worktree containing a new orphan branch\n" +"If you meant to create a worktree containing a new unborn branch\n" "(branch with no commits) for this repository, you can do so\n" "using the --orphan flag:\n" "\n" @@ -13965,7 +14053,7 @@ msgstr "" #, c-format msgid "" -"If you meant to create a worktree containing a new orphan branch\n" +"If you meant to create a worktree containing a new unborn branch\n" "(branch with no commits) for this repository, you can do so\n" "using the --orphan flag:\n" "\n" @@ -14035,6 +14123,10 @@ msgid "initializing" msgstr "инициализациÑ" #, c-format +msgid "could not find created worktree '%s'" +msgstr "Ñъздаденото в „%s“ работно дърво липÑва" + +#, c-format msgid "Preparing worktree (new branch '%s')" msgstr "ПриготвÑне на работното дърво (нов клон „%s“)" @@ -14076,10 +14168,6 @@ msgstr "" "доÑтавете\n" "обектите от отдалеченото хранилище" -#, c-format -msgid "'%s' and '%s' cannot be used together" -msgstr "опциите „%s“ и „%s“ Ñа неÑъвмеÑтими" - msgid "checkout <branch> even if already checked out in other worktree" msgstr "ИзтеглÑне КЛОÐа, дори и да е изтеглен в друго работно дърво" @@ -14089,7 +14177,7 @@ msgstr "Ñъздаване на нов клон" msgid "create or reset a branch" msgstr "Ñъздаване или занулÑване на клони" -msgid "create unborn/orphaned branch" +msgid "create unborn branch" msgstr "Ñъздаване на неродѐн клон" msgid "populate the new working tree" @@ -14112,11 +14200,8 @@ msgid "options '%s', '%s', and '%s' cannot be used together" msgstr "опциите „%s“, „%s“ и „%s“ Ñа неÑъвмеÑтими" #, c-format -msgid "options '%s', and '%s' cannot be used together" -msgstr "опциите „%s“ и „%s“ Ñа неÑъвмеÑтими" - -msgid "<commit-ish>" -msgstr "ПОДÐÐ’ÐÐЕ" +msgid "option '%s' and commit-ish cannot be used together" +msgstr "опциите „%s“ и указателите към Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñ Ñа неÑъвмеÑтими" msgid "added with --lock" msgstr "добавена Ñ â€ž--lock“" @@ -14753,6 +14838,11 @@ msgstr "Пакетиране на непакетираните обекти в Ñ msgid "Create, list, delete refs to replace objects" msgstr "Създаване, извеждане, изтриване на указатели за замÑна на обекти" +msgid "EXPERIMENTAL: Replay commits on a new base, works with bare repos too" +msgstr "" +"ЕКСПЕРИМЕÐТÐЛÐО: прилагане на Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñ Ð²ÑŠÑ€Ñ…Ñƒ нова база, работи и Ñ Ð³Ð¾Ð»Ð¸ " +"хранилища" + msgid "Generates a summary of pending changes" msgstr "Обобщение на предÑтоÑщите промѐни" @@ -14991,6 +15081,36 @@ msgstr "ИнÑтрумент за управление на големи храРmsgid "commit-graph file is too small" msgstr "файлът за гра̀фа Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñта е твърде малък" +msgid "commit-graph oid fanout chunk is wrong size" +msgstr "откъÑÑŠÑ‚ за разпределÑнето в гра̀фа Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñта е прекалено малък" + +msgid "commit-graph fanout values out of order" +msgstr "" +"ÑтойноÑтите за Ð¾Ñ‚ÐºÑŠÑ Ð·Ð° разпределÑне в гра̀фа Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñта не Ñа подредени" + +msgid "commit-graph OID lookup chunk is the wrong size" +msgstr "откъÑÑŠÑ‚ за търÑенето в гра̀фа Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñта е прекалено малък" + +msgid "commit-graph commit data chunk is wrong size" +msgstr "" +"откъÑÑŠÑ‚ за данните за подаваниÑта в гра̀фа Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñта е Ñ Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÐµÐ½ размер" + +msgid "commit-graph generations chunk is wrong size" +msgstr "откъÑÑŠÑ‚ за поколениÑта в гра̀фа Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñта е Ñ Ð½ÐµÐ¿Ñ€Ð°Ð²Ð¸Ð»ÐµÐ½ размер" + +msgid "commit-graph changed-path index chunk is too small" +msgstr "" +"откъÑÑŠÑ‚ за индекÑа Ñ Ð¿Ñ€Ð¾Ð¼ÐµÌ€Ð½Ð¸ в пътищата в гра̀фа Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñта е прекалено " +"малък" + +#, c-format +msgid "" +"ignoring too-small changed-path chunk (%<PRIuMAX> < %<PRIuMAX>) in commit-" +"graph file" +msgstr "" +"преÑкачане на прекалено малък Ð¾Ñ‚ÐºÑŠÑ Ð·Ð° индекÑа Ñ Ð¿Ñ€Ð¾Ð¼ÐµÌ€Ð½Ð¸ (%<PRIuMAX> < " +"%<PRIuMAX>) в пътищата в гра̀фа Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñта" + #, c-format msgid "commit-graph signature %X does not match signature %X" msgstr "отпечатъкът на гра̀фа Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñта %X не Ñъвпада Ñ %X" @@ -15007,6 +15127,19 @@ msgstr "верÑиÑта на контролната Ñума на гра̀фа msgid "commit-graph file is too small to hold %u chunks" msgstr "файлът Ñ Ð³Ñ€Ð°Ì€Ñ„Ð° на подаваниÑта е твърде малък, за да Ñъдържа %u откъÑи" +msgid "commit-graph required OID fanout chunk missing or corrupted" +msgstr "" +"откъÑÑŠÑ‚ за разпределÑнето необходимо на гра̀фа Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñта липÑва или е " +"повреден" + +msgid "commit-graph required OID lookup chunk missing or corrupted" +msgstr "" +"откъÑÑŠÑ‚ за търÑенето необходимо на гра̀фа Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñта липÑва или е повреден" + +msgid "commit-graph required commit data chunk missing or corrupted" +msgstr "" +"откъÑÑŠÑ‚ за данните необходими на гра̀фа Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñта липÑва или е повреден" + msgid "commit-graph has no base graphs chunk" msgstr "базовиÑÑ‚ Ð¾Ñ‚ÐºÑŠÑ Ð»Ð¸Ð¿Ñва в гра̀фа Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñта" @@ -15020,6 +15153,9 @@ msgstr "веригата на гра̀фа Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñта не Ñъв msgid "commit count in base graph too high: %<PRIuMAX>" msgstr "броÑÑ‚ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñ Ð² оÑÐ½Ð¾Ð²Ð½Ð¸Ñ Ð³Ñ€Ð°Ñ„ е прекалено голÑм: %<PRIuMAX>" +msgid "commit-graph chain file too small" +msgstr "веригата на гра̀фа Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñта е твърде малка" + #, c-format msgid "invalid commit-graph chain: line '%s' not a hash" msgstr "" @@ -15038,12 +15174,16 @@ msgstr "подаването „%s“ не може да бъде открито msgid "commit-graph requires overflow generation data but has none" msgstr "" -"графът Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñта изиÑква генериране на данни за отмеÑтването, но такива " -"липÑват" +"графът Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñта изиÑква данни за прелелите поколениÑ, но такива липÑват" msgid "commit-graph overflow generation data is too small" msgstr "прекалено малко данни за прелелите Ð¿Ð¾ÐºÐ¾Ð»ÐµÐ½Ð¸Ñ Ð² гра̀фа Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñта" +msgid "commit-graph extra-edges pointer out of bounds" +msgstr "" +"указателÑÑ‚ за допълнителните ребра в гра̀фа Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñта е извън Ð¿Ð¾Ð·Ð²Ð¾Ð»ÐµÐ½Ð¸Ñ " +"диапазон" + msgid "Loading known commits in commit graph" msgstr "Зареждане на познатите Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñ Ð² гра̀фа Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñта" @@ -16245,6 +16385,10 @@ msgid "Unknown value for 'diff.submodule' config variable: '%s'" msgstr "Ðепозната ÑтойноÑÑ‚ „%s“ за наÑтройката „diff.submodule“" #, c-format +msgid "unknown value for config '%s': %s" +msgstr "непозната ÑтойноÑÑ‚ за наÑтройката „%s“: „%s“" + +#, c-format msgid "" "Found errors in 'diff.dirstat' config variable:\n" "%s" @@ -16323,14 +16467,6 @@ msgstr "неправилен аргумент за „--color-moved“: „%s“ msgid "invalid mode '%s' in --color-moved-ws" msgstr "неправилен режим „%s“ за „ --color-moved-ws“" -msgid "" -"option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and " -"\"histogram\"" -msgstr "" -"опциÑта приема Ñледните варианти за алгоритъм за разлики: „myers“ (по " -"МайерÑ), „minimal“ (минимизиране на разликите), „patience“ (паÑианÑ) и " -"„histogram“ (хиÑтограмен)" - #, c-format msgid "invalid argument to %s" msgstr "неправилен аргумент към „%s“" @@ -16374,8 +16510,8 @@ msgstr "„--stat“ във формат за четене от програма msgid "output only the last line of --stat" msgstr "извеждане Ñамо на поÑÐ»ÐµÐ´Ð½Ð¸Ñ Ñ€ÐµÐ´ на „--stat“" -msgid "<param1,param2>..." -msgstr "ПÐÐ ÐМЕТЪР_1, ПÐÐ ÐМЕТЪР_2, …" +msgid "<param1>,<param2>..." +msgstr "ПÐÐ ÐМЕТЪР_1,ПÐÐ ÐМЕТЪР_2,…" msgid "" "output the distribution of relative amount of changes for each sub-directory" @@ -16384,8 +16520,8 @@ msgstr "извеждане на разпределението на промѐ msgid "synonym for --dirstat=cumulative" msgstr "пÑевдоним на „--dirstat=cumulative“" -msgid "synonym for --dirstat=files,param1,param2..." -msgstr "пÑевдоним на „--dirstat=ФÐЙЛ…,ПÐÐ ÐМЕТЪР_1,ПÐÐ ÐМЕТЪР_2,…“" +msgid "synonym for --dirstat=files,<param1>,<param2>..." +msgstr "пÑевдоним на „--dirstat=files,ПÐÐ ÐМЕТЪР_1,ПÐÐ ÐМЕТЪР_2,…“" msgid "warn if changes introduce conflict markers or whitespace errors" msgstr "" @@ -16569,12 +16705,6 @@ msgstr "разлика чрез алгоритъм за подредба катРmsgid "generate diff using the \"histogram diff\" algorithm" msgstr "разлика по хиÑÑ‚Ð¾Ð³Ñ€Ð°Ð¼Ð½Ð¸Ñ Ð°Ð»Ð³Ð¾Ñ€Ð¸Ñ‚ÑŠÐ¼" -msgid "<algorithm>" -msgstr "ÐЛГОРИТЪМ" - -msgid "choose a diff algorithm" -msgstr "избор на ÐЛГОРИТЪМа за разлики" - msgid "<text>" msgstr "ТЕКСТ" @@ -18093,6 +18223,13 @@ msgid "multi-pack-index OID fanout is of the wrong size" msgstr "" "неправилен размер на откъÑа за разпределÑнето в индекÑа за множеÑтво пакети" +#, c-format +msgid "" +"oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]" +msgstr "" +"неправилна подредба на откъÑи (OID fanout): fanout[%d] = %<PRIx32> > " +"%<PRIx32> = fanout[%d]" + msgid "multi-pack-index OID lookup chunk is the wrong size" msgstr "неправилен размер на откъÑа за търÑенето в индекÑа за множеÑтво пакети" @@ -18149,6 +18286,14 @@ msgid "bad pack-int-id: %u (%u total packs)" msgstr "" "неправилен идентификатор на пакет (pack-int-id): %u (от общо %u пакети)" +msgid "MIDX does not contain the BTMP chunk" +msgstr "" +"липÑва Ð¾Ñ‚ÐºÑŠÑ Ð·Ð° побитова маÑка във файла за индекÑа за множеÑтво пакети" + +#, c-format +msgid "could not load bitmapped pack %<PRIu32>" +msgstr "пакетът за битови маÑки %<PRIu32> не може да Ñе отвори" + msgid "multi-pack-index stores a 64-bit offset, but off_t is too small" msgstr "" "индекÑÑŠÑ‚ за множеÑтво пакети Ñъдържа 64-битови отмеÑтваниÑ, но размерът на " @@ -18241,13 +18386,6 @@ msgstr "неправилна Ñума за проверка" msgid "Looking for referenced packfiles" msgstr "ТърÑене на указаните пакетни файлове" -#, c-format -msgid "" -"oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]" -msgstr "" -"неправилна подредба на откъÑи (OID fanout): fanout[%d] = %<PRIx32> > " -"%<PRIx32> = fanout[%d]" - msgid "the midx contains no oid" msgstr "във файла Ñ Ð¸Ð½Ð´ÐµÐºÑа за множеÑтво пакети нÑма идентификатори на обекти" @@ -18792,6 +18930,11 @@ msgstr "задължителниÑÑ‚ обратен Ð¸Ð½Ð´ÐµÐºÑ Ð»Ð¸Ð¿Ñва в msgid "could not open pack %s" msgstr "пакетът „%s“ не може да Ñе отвори" +msgid "could not determine MIDX preferred pack" +msgstr "" +"предпочитаниÑÑ‚ пакет за файла Ñ Ð¸Ð½Ð´ÐµÐºÑа за множеÑтво пакети не може да Ñе " +"определи" + #, c-format msgid "preferred pack (%s) is invalid" msgstr "предпочитаниÑÑ‚ пакет „%s“ е неправилен" @@ -18819,6 +18962,11 @@ msgstr "" "маÑка на подаване „%s“" #, c-format +msgid "unable to load pack: '%s', disabling pack-reuse" +msgstr "" +"пакетът не може да Ñе зареди: „%s“, преизползването на пакети Ñе изключва" + +#, c-format msgid "object '%s' not found in type bitmaps" msgstr "обектът „%s“ липÑва в битовата маÑка на видовете" @@ -18917,6 +19065,9 @@ msgid "multi-pack-index reverse-index chunk is the wrong size" msgstr "" "неправилен размер на Ð¾Ñ‚ÐºÑŠÑ Ð·Ð° обратен Ð¸Ð½Ð´ÐµÐºÑ Ð² индекÑа за множеÑтво пакети" +msgid "could not determine preferred pack" +msgstr "предпочитаниÑÑ‚ пакет не може да Ñе определи" + msgid "cannot both write and verify reverse index" msgstr "обратниÑÑ‚ Ð¸Ð½Ð´ÐµÐºÑ Ð½Ðµ може едновременно да Ñе запиÑва и да Ñе проверÑва" @@ -18988,10 +19139,6 @@ msgstr "" "„%s“ очаква неотрицателно цÑло чиÑло, евентуално ÑÑŠÑ ÑÑƒÑ„Ð¸ÐºÑ â€žk“/„m“/„g“" #, c-format -msgid "%s is incompatible with %s" -msgstr "опциите „%s“ и „%s“ Ñа неÑъвмеÑтими" - -#, c-format msgid "ambiguous option: %s (could be --%s%s or --%s%s)" msgstr "нееднозначна опциÑ: „%s“ (може да е „--%s%s“ или „--%s%s“)" @@ -19316,10 +19463,6 @@ msgid "unable to add '%s' to index" msgstr "„%s“ не може да Ñе добави в индекÑа" #, c-format -msgid "unable to stat '%s'" -msgstr "„stat“ не може да Ñе изпълни върху „%s“" - -#, c-format msgid "'%s' appears as both a file and as a directory" msgstr "„%s“ ÑъщеÑтвува и като файл, и като директориÑ" @@ -19864,7 +20007,7 @@ msgstr "неправилно име на клон: „%s = %s“" #, c-format msgid "ignoring dangling symref %s" -msgstr "игнориране на указател на обект извън клон „%s“" +msgstr "игнориране на файл Ñ ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ» на обект извън клон „%s“" #, c-format msgid "log for ref %s has gap after %s" @@ -19905,10 +20048,6 @@ msgid "cannot process '%s' and '%s' at the same time" msgstr "невъзможно е едновременно да Ñе обработват „%s“ и „%s“" #, c-format -msgid "could not remove reference %s" -msgstr "УказателÑÑ‚ „%s“ не може да бъде изтрит" - -#, c-format msgid "could not delete reference %s: %s" msgstr "УказателÑÑ‚ „%s“ не може да бъде изтрит: %s" @@ -21333,6 +21472,9 @@ msgstr "Конфликти при прилагането на автоматич msgid "Autostash exists; creating a new stash entry." msgstr "Вече има Ð·Ð°Ð¿Ð¸Ñ Ð·Ð° автоматично Ñкатано, затова Ñе Ñъздава нов запиÑ." +msgid "autostash reference is a symref" +msgstr "указателÑÑ‚ за автоматично Ñкатано e файл Ñ ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»" + msgid "could not detach HEAD" msgstr "указателÑÑ‚ „HEAD“ не може да Ñе отдели" @@ -21657,6 +21799,10 @@ msgid "invalid initial branch name: '%s'" msgstr "неправилно име на Ð¿ÑŠÑ€Ð²Ð¾Ð½Ð°Ñ‡Ð°Ð»Ð½Ð¸Ñ ÐºÐ»Ð¾Ð½: „%s“" #, c-format +msgid "re-init: ignored --initial-branch=%s" +msgstr "re-init: „--initial-branch=%s“ Ñе пропуÑка" + +#, c-format msgid "unable to handle file type %d" msgstr "файлове от вид %d не Ñе поддържат" @@ -21666,18 +21812,19 @@ msgstr "„%s“ не може да Ñе премеÑти в „%s“" msgid "attempt to reinitialize repository with different hash" msgstr "" -"опит за повторно задаване на първото подаване в хранилището Ñ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð½Ð° " -"контролна Ñума" +"опит за занулÑване на хранилището и инициализиране Ñ Ñ€Ð°Ð·Ð»Ð¸Ñ‡Ð½Ð° контролна Ñума" + +msgid "" +"attempt to reinitialize repository with different reference storage format" +msgstr "" +"опит за занулÑване на хранилището и инициализиране Ñ Ñ€Ð°Ð·Ð»Ð¸Ñ‡ÐµÐ½ формат на " +"ÑъхранÑване" #, c-format msgid "%s already exists" msgstr "ДиректориÑта „%s“ вече ÑъщеÑтвува" #, c-format -msgid "re-init: ignored --initial-branch=%s" -msgstr "re-init: „--initial-branch=%s“ Ñе пропуÑка" - -#, c-format msgid "Reinitialized existing shared Git repository in %s%s\n" msgstr "" "Инициализиране наново на ÑъщеÑтвуващо, Ñподелено хранилище на Git в „%s%s“\n" @@ -21948,12 +22095,6 @@ msgstr "" "какъв брой запиÑи в кеша на обектите-дървета да Ñе отбележат като невалидни " "(Ñтандартно е 0)" -msgid "unhandled options" -msgstr "неподдържани опции" - -msgid "error preparing revisions" -msgstr "грешка при подготовката на верÑии" - #, c-format msgid "commit %s is not marked reachable" msgstr "подаването „%s“ не е отбелÑзано като доÑтижимо" @@ -22110,9 +22251,6 @@ msgstr "протоколът не поддържа задаването на Ð¿Ñ msgid "invalid remote service path" msgstr "неправилен път на отдалечената уÑлуга" -msgid "operation not supported by protocol" -msgstr "опциÑта не Ñе поддържа от протокола" - #, c-format msgid "can't connect to subservice %s" msgstr "неуÑпешно Ñвързване към подуÑлугата „%s“" @@ -22248,10 +22386,6 @@ msgid "support for protocol v2 not implemented yet" msgstr "протокол верÑÐ¸Ñ 2 вÑе още не Ñе поддържа" #, c-format -msgid "unknown value for config '%s': %s" -msgstr "непозната ÑтойноÑÑ‚ за наÑтройката „%s“: „%s“" - -#, c-format msgid "transport '%s' not allowed" msgstr "преноÑÑŠÑ‚ по „%s“ не е позволен" @@ -22304,6 +22438,9 @@ msgstr "" "ÑпъÑъкът Ñ Ð°Ð´Ñ€ÐµÑи на пратки обÑвени за налични от Ñървъра не може да Ñе " "получи " +msgid "operation not supported by protocol" +msgstr "опциÑта не Ñе поддържа от протокола" + msgid "too-short tree object" msgstr "прекалено кратък обект-дърво" @@ -23147,6 +23284,10 @@ msgstr "оÑвен това в индекÑа има неподадени про msgid "cannot %s: Your index contains uncommitted changes." msgstr "не може да извършите „%s“, защото в индекÑа има неподадени промѐни." +#, c-format +msgid "unknown style '%s' given for '%s'" +msgstr "непознат Ñтил „%s“ за „%s“" + msgid "" "Error: Your local changes to the following files would be overwritten by " "merge" @@ -1,7 +1,7 @@ # Catalan translations for Git. # This file is distributed under the same license as the Git package. # Alex Henrie <alexhenrie24@gmail.com>, 2014-2016. -# Jordi Mas i Hernà ndez <jmas@softcatala.org>, 2016-2023 +# Jordi Mas i Hernà ndez <jmas@softcatala.org>, 2016-2024 # # Terminologia # @@ -56,6 +56,7 @@ # Anglès | Català # -----------------+--------------------------------- # blame | «blame» +# fanout | «fanout» # HEAD | HEAD (f, la branca actual) - (no s'apostrofa) # cherry pick | «cherry pick» # promisor | «promisor» @@ -70,14 +71,14 @@ # # Criteris # - Mantingueu en anglès les referències a seccions de la documentació, ja que no està traduïda. -# - Usem la convenció valenciana per a «per / per a», que inclou l'ús de «per a» davant d'infintiu +# - Usem la convenció valenciana per a «per / per a», que inclou l'ús de «per a» davant d'infinitiu # msgid "" msgstr "" "Project-Id-Version: Git\n" "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n" -"POT-Creation-Date: 2023-11-13 18:55+0100\n" -"PO-Revision-Date: 2023-11-13 19:00-0600\n" +"POT-Creation-Date: 2024-02-16 07:14+0100\n" +"PO-Revision-Date: 2024-02-16 07:16+0100\n" "Last-Translator: Jordi Mas i Hernà ndez <jmas@softcatala.org>\n" "Language-Team: Catalan\n" "Language: ca\n" @@ -592,6 +593,7 @@ msgstr "«git apply --cached» ha fallat" #. Consider translating (saying "no" discards!) as #. (saying "n" for "no" discards!) if the translation #. of the word "no" does not start with n. +#. msgid "" "Your edited hunk does not apply. Edit again (saying \"no\" discards!) [y/n]? " msgstr "" @@ -1503,6 +1505,10 @@ msgid "Unexpected option --output" msgstr "Opció inesperada --output" #, c-format +msgid "extra command line parameter '%s'" +msgstr "parà metre extra de la lÃnia d'ordres «%s»" + +#, c-format msgid "Unknown archive format '%s'" msgstr "Format d'arxiu desconegut «%s»" @@ -1548,6 +1554,14 @@ msgid "bad --attr-source or GIT_ATTR_SOURCE" msgstr "--attr-source incorrecte o GIT_ATTR_SOURCE" #, c-format +msgid "unable to stat '%s'" +msgstr "no s'ha pogut fer «stat» a «%s»" + +#, c-format +msgid "unable to read %s" +msgstr "no s'ha pogut llegir %s" + +#, c-format msgid "Badly quoted content in file '%s': %s" msgstr "Comentari amb cometes errònies en el fitxer «%s»: %s" @@ -1643,6 +1657,7 @@ msgstr[1] "(aproximadament %d passos)" #. TRANSLATORS: the last %s will be replaced with "(roughly %d #. steps)" translation. +#. #, 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" @@ -1728,17 +1743,20 @@ msgstr "no s'està seguint: informació ambigua per a la referència «%s»" #. TRANSLATORS: This is a line listing a remote with duplicate #. refspecs in the advice message below. For RTL languages you'll #. probably want to swap the "%s" and leading " " space around. +#. #. #-#-#-#-# object-name.c.po #-#-#-#-# #. TRANSLATORS: This is line item of ambiguous object output #. from describe_ambiguous_object() above. For RTL languages #. you'll probably want to swap the "%s" and leading " " space #. around. +#. #, c-format msgid " %s\n" msgstr " %s\n" #. TRANSLATORS: The second argument is a \n-delimited list of #. duplicate refspecs, composed above. +#. #, c-format msgid "" "There are multiple remotes whose fetch refspecs map to the remote\n" @@ -2143,6 +2161,7 @@ msgstr "El cos de la comissió és:" #. TRANSLATORS: Make sure to include [y], [n], [e], [v] and [a] #. in your translation. The program will only accept English #. input at this point. +#. #, c-format msgid "Apply? [y]es/[n]o/[e]dit/[v]iew patch/[a]ccept all: " msgstr "" @@ -2480,6 +2499,7 @@ msgstr "bisecant amb només una comissió %s" #. TRANSLATORS: Make sure to include [Y] and [n] in your #. translation. The program will only accept English input #. at this point. +#. msgid "Are you sure [Y/n]? " msgstr "N'esteu segur [Y/n]? " @@ -2557,6 +2577,7 @@ msgstr "Cal començar per «git bisect start»\n" #. TRANSLATORS: Make sure to include [Y] and [n] in your #. translation. The program will only accept English input #. at this point. +#. msgid "Do you want me to do it for you [Y/n]? " msgstr "Voleu que ho faci per vostè [Y/n]? " @@ -2777,6 +2798,7 @@ msgstr "" #. among various forms of relative timestamps, but #. your language may need more or fewer display #. columns. +#. msgid "4 years, 11 months ago" msgstr "fa 4 anys i 11 mesos" @@ -2838,12 +2860,12 @@ msgid "couldn't look up commit object for '%s'" msgstr "no s'ha pogut cercar l'objecte de comissió per a «%s»" #, c-format -msgid "" -"the branch '%s' is not fully merged.\n" -"If you are sure you want to delete it, run 'git branch -D %s'" -msgstr "" -"la branca «%s» no està completament fusionada.\n" -"Si esteu segur que voleu suprimir-la, executeu «git branch -D %s»" +msgid "the branch '%s' is not fully merged" +msgstr "la branca «%s» no està completament fusionada" + +#, c-format +msgid "If you are sure you want to delete it, run 'git branch -D %s'" +msgstr "Si esteu segur que voleu suprimir-la, executeu «git branch -D %s»" msgid "update of config-file failed" msgstr "ha fallat l'actualització del fitxer de configuració" @@ -3884,8 +3906,8 @@ msgstr "agafa a la força (descarta qualsevol modificació local)" msgid "new-branch" msgstr "branca-nova" -msgid "new unparented branch" -msgstr "branca òrfena nova" +msgid "new unborn branch" +msgstr "branca no nascuda nova" msgid "update ignored files (default)" msgstr "actualitza els fitxers ignorats (per defecte)" @@ -4137,9 +4159,6 @@ msgstr "" "clean.requireForce és per defecte cert i ni -i, -n ni -f s'han indicat; " "refusant netejar" -msgid "-x and -X cannot be used together" -msgstr "-x i -X no es poden usar junts" - msgid "git clone [<options>] [--] <repo> [<dir>]" msgstr "git clone [<opcions>] [--] <repositori> [<directori>]" @@ -4228,6 +4247,9 @@ msgstr "directori de git" msgid "separate git dir from working tree" msgstr "separa el directori de git de l'arbre de treball" +msgid "specify the reference format to use" +msgstr "especifiqueu el format de referència a usar" + msgid "key=value" msgstr "clau=valor" @@ -4347,11 +4369,9 @@ msgstr "Hi ha massa arguments." msgid "You must specify a repository to clone." msgstr "Heu d'especificar un repositori per a clonar." -msgid "" -"--bundle-uri is incompatible with --depth, --shallow-since, and --shallow-" -"exclude" -msgstr "" -"--bundle-uri és incompatible amb --depth, --shallow-since i --shallow-exclude" +#, c-format +msgid "unknown ref storage format '%s'" +msgstr "el format d'emmagatzematge de referència «%s» és desconegut" #, c-format msgid "repository '%s' does not exist" @@ -4481,14 +4501,14 @@ msgid "" "--stdin-commits]\n" " [--changed-paths] [--[no-]max-new-filters <n>] [--" "[no-]progress]\n" -" <split options>" +" <split-options>" msgstr "" "git commit-graph write [--object-dir <dir>] [--append]\n" " [--split[=<strategy>]] [--reachable | --stdin-packs | " "--stdin-commits]\n" " [--changed-paths] [--[no-]max-new-filters <n>] [--" "[no-]progress]\n" -" <split options>" +" <split-options>" msgid "dir" msgstr "directori" @@ -5007,6 +5027,7 @@ msgstr "reusa el missatge de la comissió especificada" #. TRANSLATORS: Leave "[(amend|reword):]" as-is, #. and only translate <commit>. +#. msgid "[(amend|reword):]commit" msgstr "[(amend|reword):]commit" @@ -5544,7 +5565,7 @@ msgstr "No s'ha trobat cap nom, no es pot descriure res." #, c-format msgid "option '%s' and commit-ishes cannot be used together" -msgstr "les opcions «%s» i de comissió no es poden usar juntes" +msgstr "opció «%s» i les de comissió no es poden usar juntes" msgid "" "git diagnose [(-o | --output-directory) <path>] [(-s | --suffix) <format>]\n" @@ -6820,6 +6841,7 @@ msgstr "s'ha especificat un nombre de fils no và lid (%d) per a %s" #. TRANSLATORS: %s is the configuration #. variable for tweaking threads, currently #. grep.threads +#. #, c-format msgid "no threads support, ignoring %s" msgstr "no s'admeten fils, s'ignorarà %s" @@ -6829,6 +6851,10 @@ msgid "unable to read tree (%s)" msgstr "no s'ha pogut llegir l'arbre (%s)" #, c-format +msgid "unable to read tree %s" +msgstr "no s'ha pogut llegir l'arbre %s" + +#, c-format msgid "unable to grep from object of type %s" msgstr "no es pot fer grep des d'un objecte de tipus %s" @@ -7247,10 +7273,6 @@ msgid "SHA1 COLLISION FOUND WITH %s !" msgstr "S'HA TROBAT UNA COL·LISIÓ SHA1 AMB %s !" #, c-format -msgid "unable to read %s" -msgstr "no s'ha pogut llegir %s" - -#, c-format msgid "cannot read existing object info %s" msgstr "no es pot llegir la informació d'objecte existent %s" @@ -7390,11 +7412,13 @@ msgstr "error fsck als objectes del paquet" msgid "" "git init [-q | --quiet] [--bare] [--template=<template-directory>]\n" " [--separate-git-dir <git-dir>] [--object-format=<format>]\n" +" [--ref-format=<format>]\n" " [-b <branch-name> | --initial-branch=<branch-name>]\n" " [--shared[=<permissions>]] [<directory>]" msgstr "" "git init [-q | --quiet] [--bare] [--template=<template-directory>]\n" " [--separate-git-dir <git-dir>] [--object-format=<format>]\n" +" [--ref-format=<format>]\n" " [-b <branch-name> | --initial-branch=<branch-name>]\n" " [--shared[=<permissions>]] [<directory>]" @@ -8110,6 +8134,12 @@ msgstr "" "git merge-file [<opcions>] [-L <nom1> [-L <original> [-L <nom2>]]] <fitxer1> " "<fitxer-original> <fitxer2>" +msgid "" +"option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and " +"\"histogram\"" +msgstr "" +"l'opció diff-algorithm accepta «myers», «minimal», «patience» i «histogram»" + msgid "send results to standard output" msgstr "envia els resultats a la sortida està ndard" @@ -8131,6 +8161,12 @@ msgstr "en conflictes, usa la seva versió" msgid "for conflicts, use a union version" msgstr "en conflictes, usa una versió d'unió" +msgid "<algorithm>" +msgstr "<algorisme>" + +msgid "choose a diff algorithm" +msgstr "trieu un algorisme per al diff" + msgid "for conflicts, use this marker size" msgstr "en conflictes, usa aquesta mida de marcador" @@ -8221,9 +8257,6 @@ msgstr "--trivial-merge és incompatible amb totes les altres opcions" msgid "unknown strategy option: -X%s" msgstr "opció d'estratègia desconeguda: -X%s" -msgid "--merge-base is incompatible with --stdin" -msgstr "--merge-base és incompatible amb --stdin" - #, c-format msgid "malformed input line: '%s'." msgstr "lÃnia d'entrada mal formada: «%s»." @@ -8856,6 +8889,7 @@ msgstr "s'ha produït un error en copiar les notes de «%s» a «%s»" #. TRANSLATORS: the first %s will be replaced by a git #. notes command: 'add', 'merge', 'remove', etc. +#. #, c-format msgid "refusing to %s notes in %s (outside of refs/notes/)" msgstr "s'està refusant %s les notes en %s (fora de refs/notes/)" @@ -9166,6 +9200,10 @@ msgid "inconsistency with delta count" msgstr "inconsistència amb el comptador de diferències" #, c-format +msgid "invalid pack.allowPackReuse value: '%s'" +msgstr "valor pack.allowPackReuse value no và lid: «%s»" + +#, c-format msgid "" "value of uploadpack.blobpackfileuri must be of the form '<object-hash> <pack-" "hash> <uri>' (got '%s')" @@ -9430,10 +9468,10 @@ msgstr "S'estan enumerant els objectes" #, c-format msgid "" "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-" -"reused %<PRIu32>" +"reused %<PRIu32> (from %<PRIuMAX>)" msgstr "" "Total %<PRIu32> (%<PRIu32> diferències), reusats %<PRIu32> (%<PRIu32> " -"diferències), paquets reusats %<PRIu32>" +"diferències), paquets reusats %<PRIu32> (de %<PRIuMAX>)" msgid "" "'git pack-redundant' is nominated for removal.\n" @@ -10398,13 +10436,6 @@ msgid "switch `C' expects a numerical value" msgstr "«switch» «c» espera un valor numèric" msgid "" -"apply options are incompatible with rebase.autoSquash. Consider adding --no-" -"autosquash" -msgstr "" -"les opcions «apply» són incompatibles amb rebase.autoSquash. Considereu " -"afegir-hi --no-autosquash" - -msgid "" "apply options are incompatible with rebase.rebaseMerges. Consider adding --" "no-rebase-merges" msgstr "" @@ -10922,6 +10953,7 @@ msgstr "(sense URL)" #. TRANSLATORS: the colon ':' should align #. with the one in " Fetch URL: %s" #. translation. +#. #, c-format msgid " Push URL: %s" msgstr " URL de pujada: %s" @@ -11414,6 +11446,77 @@ msgstr "--convert-graft-file arguments" msgid "only one pattern can be given with -l" msgstr "només es pot especificar un patró amb -l" +msgid "need some commits to replay" +msgstr "calen algunes comissions per tornar a reproduir" + +msgid "--onto and --advance are incompatible" +msgstr "--onto i --advance són incompatibles" + +msgid "all positive revisions given must be references" +msgstr "totes les revisions positives que s'han donat han de ser referències" + +msgid "argument to --advance must be a reference" +msgstr "l'argument per a --advance ha de ser una referència" + +msgid "" +"cannot advance target with multiple sources because ordering would be ill-" +"defined" +msgstr "" +"no es pot avançar l'objectiu amb múltiples fonts perquè l'ordenació no " +"estaria definida correctament" + +msgid "" +"cannot implicitly determine whether this is an --advance or --onto operation" +msgstr "" +"no es pot determinar implÃcitament si aquesta és una operació --advance o --" +"onto" + +msgid "" +"cannot advance target with multiple source branches because ordering would " +"be ill-defined" +msgstr "" +"no es pot avançar l'objectiu amb múltiples branques d'origen perquè " +"l'ordenació no estaria definida correctament" + +msgid "cannot implicitly determine correct base for --onto" +msgstr "no es pot determinar implÃcitament la base correcta per a --onto" + +msgid "" +"(EXPERIMENTAL!) git replay ([--contained] --onto <newbase> | --advance " +"<branch>) <revision-range>..." +msgstr "" +"(EXPERIMENTAL!) git replay ([--contained] --onto <newbase> | --advance " +"<branch>) <revision-range>..." + +msgid "make replay advance given branch" +msgstr "fes avançar la repetició de la branca donada" + +msgid "replay onto given commit" +msgstr "torna a reproduir a la comissió donada" + +msgid "advance all branches contained in revision-range" +msgstr "avança totes les branques contingudes a l'interval de revisions" + +msgid "option --onto or --advance is mandatory" +msgstr "l'opció --onto o --advance és obligatòria" + +#, c-format +msgid "" +"some rev walking options will be overridden as '%s' bit in 'struct rev_info' " +"will be forced" +msgstr "" +"algunes opcions de referència se sobreescriuran de forma forçada com a «%s» " +"bits a «struct rev_info»" + +msgid "error preparing revisions" +msgstr "s'ha produït un error en preparar les revisions" + +msgid "replaying down to root commit is not supported yet!" +msgstr "encara no s'admet la reproducció cap avall en una comissió arrel" + +msgid "replaying merge commits is not supported yet!" +msgstr "encara no s'admet la repetició de les comissió de fusió" + msgid "" "git rerere [clear | forget <pathspec>... | diff | status | remaining | gc]" msgstr "" @@ -11622,15 +11725,6 @@ msgstr "--prefix requereix un argument" msgid "unknown mode for --abbrev-ref: %s" msgstr "mode desconegut per a --abbrev-ref: %s" -msgid "--exclude-hidden cannot be used together with --branches" -msgstr "--exclude-hidden no es pot utilitzar juntament amb --branches" - -msgid "--exclude-hidden cannot be used together with --tags" -msgstr "--exclude-hidden no es pot utilitzar juntament amb --tags" - -msgid "--exclude-hidden cannot be used together with --remotes" -msgstr "--exclude-hidden no es pot utilitzar juntament amb --remotes" - msgid "this operation must be run in a work tree" msgstr "aquesta operació s'ha d'executar en un arbre de treball" @@ -12040,10 +12134,6 @@ msgstr "no imprimeixis els resultats a stdout (útil amb --verify)" msgid "show refs from stdin that aren't in local repository" msgstr "mostra les referències de stdin que no siguin en el repositori local" -#, c-format -msgid "only one of '%s', '%s' or '%s' can be given" -msgstr "només es poden donar les opcions «%s», «%s», o «%s»" - msgid "" "git sparse-checkout (init | list | set | add | reapply | disable | check-" "rules) [<options>]" @@ -13519,28 +13609,28 @@ msgstr "No hi ha cap branca d'origen possible, inferint «--orphan»" #, c-format msgid "" -"If you meant to create a worktree containing a new orphan branch\n" +"If you meant to create a worktree containing a new unborn branch\n" "(branch with no commits) for this repository, you can do so\n" "using the --orphan flag:\n" "\n" " git worktree add --orphan -b %s %s\n" msgstr "" -"Si voleu crear un arbre de treball que contingui una branca orfe nova\n" -"(branca sense comissions) per a aquest repositori, podeu fer-ho\n" +"Si voleu crear un arbre de treball que contingui una branca no nascuda\n" +"nova (branca sense comissions) per a aquest repositori, podeu fer-ho\n" "utilitzant l'argument --orphan:\n" "\n" " git worktree add --orphan -b %s %s\n" #, c-format msgid "" -"If you meant to create a worktree containing a new orphan branch\n" +"If you meant to create a worktree containing a new unborn branch\n" "(branch with no commits) for this repository, you can do so\n" "using the --orphan flag:\n" "\n" " git worktree add --orphan %s\n" msgstr "" -"Si voleu crear un arbre de treball que contingui una branca orfe nova\n" -"(branca sense comissions) per a aquest repositori, podeu fer-ho\n" +"Si voleu crear un arbre de treball que contingui una branca no nascuda\n" +"nova (branca sense comissions) per a aquest repositori, podeu fer-ho\n" "utilitzant l'argument --orphan:\n" "\n" " git worktree add --orphan %s\n" @@ -13603,6 +13693,10 @@ msgid "initializing" msgstr "s'està inicialitzant" #, c-format +msgid "could not find created worktree '%s'" +msgstr "no s'ha pogut trobar l'arbre de treball creat «%s»" + +#, c-format msgid "Preparing worktree (new branch '%s')" msgstr "S'està preparant l'arbre de treball (branca nova «%s»)" @@ -13641,10 +13735,6 @@ msgstr "" "No hi ha referències locals o remotes malgrat hi existeix almenys un\n" "remot, aturada; useu «add -f» per a anul·lar o obtenir primer un remot" -#, c-format -msgid "'%s' and '%s' cannot be used together" -msgstr "les opcions «%s» i «%s» no es poden usar juntes" - msgid "checkout <branch> even if already checked out in other worktree" msgstr "agafa <branca> encara que sigui agafada en altre arbre de treball" @@ -13654,8 +13744,8 @@ msgstr "crea una branca nova" msgid "create or reset a branch" msgstr "crea o restableix una branca" -msgid "create unborn/orphaned branch" -msgstr "crea una branca no nascuda/òrfena" +msgid "create unborn branch" +msgstr "crea una branca no nascuda" msgid "populate the new working tree" msgstr "emplena l'arbre de treball nou" @@ -13679,11 +13769,8 @@ msgid "options '%s', '%s', and '%s' cannot be used together" msgstr "les opcions «%s», «%s», i «%s» no es poden usar juntes" #, c-format -msgid "options '%s', and '%s' cannot be used together" -msgstr "les opcions «%s» i «%s» no es poden usar juntes" - -msgid "<commit-ish>" -msgstr "<commit-ish>" +msgid "option '%s' and commit-ish cannot be used together" +msgstr "opció «%s» i les de comissió no es poden usar juntes" msgid "added with --lock" msgstr "afegit amb --lock" @@ -14313,6 +14400,11 @@ msgstr "Empaqueta els objectes desempaquetats en un repositori" msgid "Create, list, delete refs to replace objects" msgstr "Crea, llista i esborra referències per a substituir objectes" +msgid "EXPERIMENTAL: Replay commits on a new base, works with bare repos too" +msgstr "" +"EXPERIMENTAL: torna a reproduir comissions sobre una nova base, també " +"funciona amb repositoris nus" + msgid "Generates a summary of pending changes" msgstr "Genera un resum dels canvis pendents" @@ -14554,6 +14646,35 @@ msgstr "Una eina per a gestionar dipòsits Git grans" msgid "commit-graph file is too small" msgstr "el fitxer del graf de comissions és massa petit" +msgid "commit-graph oid fanout chunk is wrong size" +msgstr "" +"el fragment de «fanout» de l'oid del graf de comissions és de mida incorrecta" + +msgid "commit-graph fanout values out of order" +msgstr "valors de graf de comissions de «fanout» estan fora d'ordre" + +msgid "commit-graph OID lookup chunk is the wrong size" +msgstr "el fragment de cerca OID és de mida incorrecta" + +msgid "commit-graph commit data chunk is wrong size" +msgstr "el fragment de dades del graf de comissions és de mida incorrecta" + +msgid "commit-graph generations chunk is wrong size" +msgstr "" +"el fragment de les generacions del graf de comissions és de mida incorrecta" + +msgid "commit-graph changed-path index chunk is too small" +msgstr "" +"el fragment d'Ãndex del canvi del camà del graf de comissions és massa petit" + +#, c-format +msgid "" +"ignoring too-small changed-path chunk (%<PRIuMAX> < %<PRIuMAX>) in commit-" +"graph file" +msgstr "" +"s'ignorarà un fragment massa petit de camà canviat (%<PRIuMAX> < %<PRIuMAX>) " +"al fitxer del graf de comissions" + #, c-format msgid "commit-graph signature %X does not match signature %X" msgstr "" @@ -14573,6 +14694,20 @@ msgid "commit-graph file is too small to hold %u chunks" msgstr "" "el fitxer del graf de comissions és massa petit per a guardar %u fragments" +msgid "commit-graph required OID fanout chunk missing or corrupted" +msgstr "" +"manca o està malmès el fragment del «fanout» OID requerit al graf de " +"comissions" + +msgid "commit-graph required OID lookup chunk missing or corrupted" +msgstr "" +"manca o està malmès el fragment de cerca d'OID requerit al graf de comissions" + +msgid "commit-graph required commit data chunk missing or corrupted" +msgstr "" +"manca o està corromput el fragment de dades de publicació requerit al graf " +"de comissions" + msgid "commit-graph has no base graphs chunk" msgstr "el fragment del graf de comissions no té grafs de base" @@ -14586,6 +14721,9 @@ msgstr "la cadena del graf de comissions no coincideix" msgid "commit count in base graph too high: %<PRIuMAX>" msgstr "el nombre de comissions en el graf base és massa alt: %<PRIuMAX>" +msgid "commit-graph chain file too small" +msgstr "el fitxer de cadena del graf de comissions és massa petit" + #, c-format msgid "invalid commit-graph chain: line '%s' not a hash" msgstr "" @@ -14613,6 +14751,9 @@ msgstr "" "les dades de generació de desbordament del graf de comissions són massa " "petites" +msgid "commit-graph extra-edges pointer out of bounds" +msgstr "punter de vores extra del graf de comissió està fora dels lÃmits" + msgid "Loading known commits in commit graph" msgstr "S'estan carregant comissions conegudes al graf de comissions" @@ -15786,6 +15927,10 @@ msgstr "" "Valor desconegut de la variable de configuració de «diff.submodule»: «%s»" #, c-format +msgid "unknown value for config '%s': %s" +msgstr "valor desconegut per al config «%s»': %s" + +#, c-format msgid "" "Found errors in 'diff.dirstat' config variable:\n" "%s" @@ -15862,12 +16007,6 @@ msgstr "argument --color-moved incorrecte: %s" msgid "invalid mode '%s' in --color-moved-ws" msgstr "mode «%s» no và lid en --color-moved-ws" -msgid "" -"option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and " -"\"histogram\"" -msgstr "" -"l'opció diff-algorithm accepta «myers», «minimal», «patience» i «histogram»" - #, c-format msgid "invalid argument to %s" msgstr "argument no và lid a %s" @@ -15912,8 +16051,8 @@ msgstr "llegible per una mà quina --stat" msgid "output only the last line of --stat" msgstr "mostra només l'última lÃnia de --stat" -msgid "<param1,param2>..." -msgstr "<param1,param2>..." +msgid "<param1>,<param2>..." +msgstr "<param1>,<param2>..." msgid "" "output the distribution of relative amount of changes for each sub-directory" @@ -15924,8 +16063,8 @@ msgstr "" msgid "synonym for --dirstat=cumulative" msgstr "sinònim de --dirstat=cumulative" -msgid "synonym for --dirstat=files,param1,param2..." -msgstr "sinònim de --dirstat=files,param1,param2..." +msgid "synonym for --dirstat=files,<param1>,<param2>..." +msgstr "sinònim de --dirstat=files,<param1>,<param2>..." msgid "warn if changes introduce conflict markers or whitespace errors" msgstr "" @@ -16108,12 +16247,6 @@ msgstr "genera diff usant l'algorisme «patience diff»" msgid "generate diff using the \"histogram diff\" algorithm" msgstr "genera diff usant l'algorisme «histogram diff»" -msgid "<algorithm>" -msgstr "<algorisme>" - -msgid "choose a diff algorithm" -msgstr "trieu un algorisme per al diff" - msgid "<text>" msgstr "<text>" @@ -16499,12 +16632,14 @@ msgstr "s'ha produït un error en processar els acks: %d" #. TRANSLATORS: The parameter will be 'ready', a protocol #. keyword. +#. #, c-format msgid "expected packfile to be sent after '%s'" msgstr "s'esperava que el fitxer de paquet s'enviés després de «%s»" #. TRANSLATORS: The parameter will be 'ready', a protocol #. keyword. +#. #, c-format msgid "expected no other sections to be sent after no '%s'" msgstr "no s'esperava que cap altra secció s'enviés després de «%s»" @@ -17322,6 +17457,7 @@ msgstr "" #. name, and the second argument is the abbreviated id of the #. commit that needs to be merged. For example: #. - go to submodule (mysubmodule), and either merge commit abc1234" +#. #, c-format msgid "" " - go to submodule (%s), and either merge commit %s\n" @@ -17356,6 +17492,7 @@ msgstr "" #. TRANSLATORS: The %s arguments are: 1) tree hash of a merge #. base, and 2-3) the trees for the two trees we're merging. +#. #, c-format msgid "collecting merge info failed for trees %s, %s, %s" msgstr "" @@ -17616,6 +17753,12 @@ msgstr "s'ha produït un error en llegir la memòria cau" msgid "multi-pack-index OID fanout is of the wrong size" msgstr "l'OID «fanout» de l'Ãndex multipaquet és d'una mida incorrecta" +#, c-format +msgid "" +"oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]" +msgstr "" +"oid «fanout» desordenat: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]" + msgid "multi-pack-index OID lookup chunk is the wrong size" msgstr "El fragment de cerca OID Ãndex multipaquet és de mida incorrecta" @@ -17676,6 +17819,13 @@ msgstr "" msgid "bad pack-int-id: %u (%u total packs)" msgstr "pack-int-id: %u incorrecte (%u paquets en total)" +msgid "MIDX does not contain the BTMP chunk" +msgstr "MIDX no conté el fragment BTMP" + +#, c-format +msgid "could not load bitmapped pack %<PRIu32>" +msgstr "no s'ha pogut carregar el paquet amb bits %<PRIu32>" + msgid "multi-pack-index stores a 64-bit offset, but off_t is too small" msgstr "" "l'Ãndex multipaquet emmagatzema un desplaçament de 64 bits, però off_t és " @@ -17764,11 +17914,6 @@ msgstr "suma de verificació incorrecta" msgid "Looking for referenced packfiles" msgstr "S'estan cercant fitxers empaquetats referenciats" -#, c-format -msgid "" -"oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]" -msgstr "oid fanout desordenat: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]" - msgid "the midx contains no oid" msgstr "el midx no conté cap oid" @@ -17851,6 +17996,7 @@ msgstr "S'està refusant reescriure les notes en %s (fora de refs/notes/)" #. TRANSLATORS: The first %s is the name of #. the environment variable, the second %s is #. its value. +#. #, c-format msgid "Bad %s value: '%s'" msgstr "Valor erroni de %s: «%s»" @@ -18069,6 +18215,7 @@ msgstr "no s'han pogut desempaquetar els continguts de %s" #. TRANSLATORS: This is a line of ambiguous object #. output shown when we cannot look up or parse the #. object in question. E.g. "deadbeef [bad object]". +#. #, c-format msgid "%s [bad object]" msgstr "%s [objecte incorrecte]" @@ -18077,6 +18224,7 @@ msgstr "%s [objecte incorrecte]" #. object output. E.g.: #. * #. "deadbeef commit 2021-01-01 - Some Commit Message" +#. #, c-format msgid "%s commit %s - %s" msgstr "%s comissió %s - %s" @@ -18091,6 +18239,7 @@ msgstr "%s comissió %s - %s" #. * #. The third argument is the "tag" string #. from object.c. +#. #, c-format msgid "%s tag %s - %s" msgstr "%s etiqueta %s - %s" @@ -18100,18 +18249,21 @@ msgstr "%s etiqueta %s - %s" #. the tag itself. E.g.: #. * #. "deadbeef [bad tag, could not parse it]" +#. #, c-format msgid "%s [bad tag, could not parse it]" msgstr "%s [etiqueta malmesa, no s'ha pogut analitzar]" #. TRANSLATORS: This is a line of ambiguous <type> #. object output. E.g. "deadbeef tree". +#. #, c-format msgid "%s tree" msgstr "arbre %s" #. TRANSLATORS: This is a line of ambiguous <type> #. object output. E.g. "deadbeef blob". +#. #, c-format msgid "%s blob" msgstr "blob %s" @@ -18123,6 +18275,7 @@ msgstr "l'id d'objecte curt %s és ambigu" #. TRANSLATORS: The argument is the list of ambiguous #. objects composed in show_ambiguous_object(). See #. its "TRANSLATORS" comments for details. +#. #, c-format msgid "" "The candidates are:\n" @@ -18292,6 +18445,9 @@ msgstr "falta l'Ãndex invers necessari al mapa de bits multipaquet" msgid "could not open pack %s" msgstr "no s'ha pogut obrir el paquet %s" +msgid "could not determine MIDX preferred pack" +msgstr "no s'ha pogut determinar el paquet preferit MIDX" + #, c-format msgid "preferred pack (%s) is invalid" msgstr "el paquet preferit (%s) no és và lid" @@ -18318,6 +18474,12 @@ msgstr "" "comissió «%s»" #, c-format +msgid "unable to load pack: '%s', disabling pack-reuse" +msgstr "" +"no s'ha pogut carregar el paquet: «%s», s'està inhabilitant lareutilització " +"de paquets" + +#, c-format msgid "object '%s' not found in type bitmaps" msgstr "no s'ha trobat l'objecte «%s» als tipus de mapes de bits" @@ -18410,6 +18572,9 @@ msgid "multi-pack-index reverse-index chunk is the wrong size" msgstr "" "el fragment de l'index invers de l'Ãndex multipaquet és de mida incorrecta" +msgid "could not determine preferred pack" +msgstr "no s'ha pogut determinar el paquet preferit" + msgid "cannot both write and verify reverse index" msgstr "no es pot escriure i verificar l'Ãndex invers" @@ -18475,10 +18640,6 @@ msgid "%s expects a non-negative integer value with an optional k/m/g suffix" msgstr "%s espera un valor enter no negatiu amb un sufix opcional k/m/g" #, c-format -msgid "%s is incompatible with %s" -msgstr "%s és incompatible amb %s" - -#, c-format msgid "ambiguous option: %s (could be --%s%s or --%s%s)" msgstr "opció ambigua: %s (pot ser --%s%s o --%s%s)" @@ -18514,6 +18675,7 @@ msgstr "ús: %s" #. TRANSLATORS: the colon here should align with the #. one in "usage: %s" translation. +#. #, c-format msgid " or: %s" msgstr " o: %s" @@ -18536,6 +18698,7 @@ msgstr " o: %s" #. function. The "%s" is a line in the (hopefully already #. translated) N_() usage string, which contained embedded #. newlines before we split it up. +#. #, c-format msgid "%*s%s" msgstr "%*s%s" @@ -18799,10 +18962,6 @@ msgid "unable to add '%s' to index" msgstr "no s'ha pogut afegir «%s» a l'Ãndex" #, c-format -msgid "unable to stat '%s'" -msgstr "no s'ha pogut fer «stat» a «%s»" - -#, c-format msgid "'%s' appears as both a file and as a directory" msgstr "«%s» apareix com a fitxer i com a directori" @@ -19384,10 +19543,6 @@ msgid "cannot process '%s' and '%s' at the same time" msgstr "no es poden processar «%s» i «%s» a la vegada" #, c-format -msgid "could not remove reference %s" -msgstr "no s'ha pogut eliminar la referència %s" - -#, c-format msgid "could not delete reference %s: %s" msgstr "no s'ha pogut suprimir la referència %s: %s" @@ -19570,6 +19725,7 @@ msgstr "" #. TRANSLATORS: "matches '%s'%" is the <dst> part of "git push #. <remote> <src>:<dst>" push, and "being pushed ('%s')" is #. the <src>. +#. #, c-format msgid "" "The destination you provided is not a full refname (i.e.,\n" @@ -19610,7 +19766,7 @@ msgid "" "'%s:refs/tags/%s'?" msgstr "" "La part <src> de l'especificació de la referència és un objecte d'etiqueta.\n" -"Voleu crear una etiqueta pujant-la a «%srefs/tags/%s»?" +"Voleu crear una etiqueta pujant-la a «%s:refs/tags/%s»?" #, c-format msgid "" @@ -19619,7 +19775,7 @@ msgid "" "'%s:refs/tags/%s'?" msgstr "" "La part <src> de l'especificació de la referència és un objecte d'arbre.\n" -"Voleu crear una etiqueta pujant-la a «%srefs/tags/%s»?" +"Voleu crear una etiqueta pujant-la a «%s:refs/tags/%s»?" #, c-format msgid "" @@ -20203,6 +20359,7 @@ msgstr "cometeu els vostres canvis o feu un «stash» per a procedir." #. TRANSLATORS: %s will be "revert", "cherry-pick" or #. "rebase". +#. #, c-format msgid "%s: Unable to write new index file" msgstr "%s: No s'ha pogut escriure un fitxer d'Ãndex nou" @@ -20762,6 +20919,9 @@ msgid "Autostash exists; creating a new stash entry." msgstr "" "El «stash» automà tic ja existeix; s'està creant una entrada «stash» nova." +msgid "autostash reference is a symref" +msgstr "la referència d'autostash és un symref" + msgid "could not detach HEAD" msgstr "no s'ha pogut separar HEAD" @@ -21005,7 +21165,8 @@ msgid "" "not a git repository (or any parent up to mount point %s)\n" "Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set)." msgstr "" -"no és un repositori de git (ni cap pare fins al punt de muntatge %s)\n" +"no és un repositori de git (ni existeix cap pare fins al punt de muntatge " +"%s)\n" "S'atura a la frontera de sistema de fitxers (GIT_DISCOVERY_ACROSS_FILESYSTEM " "no està establert)." @@ -21078,6 +21239,10 @@ msgid "invalid initial branch name: '%s'" msgstr "nom de branca inicial no và lid: «%s»" #, c-format +msgid "re-init: ignored --initial-branch=%s" +msgstr "reinicialització: s'ha ignorat --initial-branch=%s" + +#, c-format msgid "unable to handle file type %d" msgstr "no s'ha pogut gestionar el tipus de fitxer %d" @@ -21088,15 +21253,17 @@ msgstr "no s'ha pogut moure %s a %s" msgid "attempt to reinitialize repository with different hash" msgstr "s'ha intentat reinicialitzar el repositori amb un resum diferent" +msgid "" +"attempt to reinitialize repository with different reference storage format" +msgstr "" +"s'ha intentat reactivar el repositori amb un format d'emmagatzematge de " +"referència diferent" + #, c-format msgid "%s already exists" msgstr "%s ja existeix" #, c-format -msgid "re-init: ignored --initial-branch=%s" -msgstr "reinicialització: s'ha ignorat --initial-branch=%s" - -#, c-format msgid "Reinitialized existing shared Git repository in %s%s\n" msgstr "S'ha reinicialitzat el repositori compartit existent del Git en %s%s\n" @@ -21365,12 +21532,6 @@ msgid "number of entries in the cache tree to invalidate (default 0)" msgstr "" "nombre d'entrades a l'arbre de la memòria cau a invalidar (per defecte 0)" -msgid "unhandled options" -msgstr "opcions no gestionades" - -msgid "error preparing revisions" -msgstr "s'ha produït un error en preparar les revisions" - #, c-format msgid "commit %s is not marked reachable" msgstr "la comissió %s no està marcada com abastable" @@ -21523,9 +21684,6 @@ msgstr "el protocol no permet establir el camà del servei remot" msgid "invalid remote service path" msgstr "el camà del servei remot no és và lid" -msgid "operation not supported by protocol" -msgstr "opció no admesa pel protocol" - #, c-format msgid "can't connect to subservice %s" msgstr "no es pot connectar al subservei %s" @@ -21658,10 +21816,6 @@ msgstr "" "encara no s'ha implementat la compatibilitat amb la versió v2 del protocol" #, c-format -msgid "unknown value for config '%s': %s" -msgstr "valor desconegut per al config «%s»': %s" - -#, c-format msgid "transport '%s' not allowed" msgstr "no es permet el transport «%s»" @@ -21714,6 +21868,9 @@ msgid "could not retrieve server-advertised bundle-uri list" msgstr "" "no s'ha pogut recuperar la llista de paquets d'URI anunciats pel servidor" +msgid "operation not supported by protocol" +msgstr "opció no admesa pel protocol" + msgid "too-short tree object" msgstr "objecte d'arbre massa curt" @@ -22555,6 +22712,10 @@ msgstr "addicionalment, el vostre Ãndex conté canvis sense cometre." msgid "cannot %s: Your index contains uncommitted changes." msgstr "no es pot %s: El vostre Ãndex conté canvis sense cometre." +#, c-format +msgid "unknown style '%s' given for '%s'" +msgstr "estil desconegut «%s» donat per a «%s»" + msgid "" "Error: Your local changes to the following files would be overwritten by " "merge" @@ -22950,64 +23111,3 @@ msgstr "S'està ometent %s amb el sufix de còpia de seguretat «%s».\n" #, perl-format msgid "Do you really want to send %s? [y|N]: " msgstr "Esteu segur que voleu enviar %s? [y|N]: " - -#, c-format -#~ msgid "options '%s=%s' and '%s=%s' cannot be used together" -#~ msgstr "les opcions «%s=%s» i «%s=%s» no es poden usar juntes" - -#, c-format -#~ msgid "%s : incompatible with something else" -#~ msgstr "%s: és incompatible amb alguna altra cosa" - -#~ msgid "Could not write patch" -#~ msgstr "No s'ha pogut escriure el pedaç" - -#, c-format -#~ msgid "Could not stat '%s'" -#~ msgstr "No s'ha pogut fer stat a «%s»" - -#, c-format -#~ msgid "Cannot delete branch '%s' checked out at '%s'" -#~ msgstr "No es pot suprimir la branca «%s» agafada a «%s»" - -#~ msgid "unable to write new_index file" -#~ msgstr "no s'ha pogut escriure el fitxer new_index" - -#~ msgid "do not apply config rules" -#~ msgstr "no apliquis les regles de configuració" - -#~ msgid "join whitespace-continued values" -#~ msgstr "uneix els valors continus amb espais en blanc" - -#~ msgid "set parsing options" -#~ msgstr "estableix les opcions d'anà lisi" - -#~ msgid "cannot move directory over file" -#~ msgstr "no es pot moure un directori sobre un fitxer" - -#~ msgid "cannot use --filter without --stdout" -#~ msgstr "no es pot utilitzar --filter sense --stdout" - -#~ msgid "cannot use --max-pack-size with --cruft" -#~ msgstr "no es pot usar --max-pack-size amb --cruft" - -#~ msgid "--strategy requires --merge or --interactive" -#~ msgstr "--strategy requereix --merge o --interactive" - -#, c-format -#~ msgid "" -#~ "commit-graph has generation number zero for commit %s, but non-zero " -#~ "elsewhere" -#~ msgstr "" -#~ "el graf de comissions té nombre de generació zero per a la comissió %s, " -#~ "però té no zero en altres llocs" - -#~ msgid "--merge-base only works with commits" -#~ msgstr "--merge-base només funciona amb comissions" - -#~ msgid "scalar clone [<options>] [--] <repo> [<dir>]" -#~ msgstr "scalar clone [<opcions>] [--] <repositori> [<dir>]" - -#, c-format -#~ msgid "could not rename '%s' to '%s'" -#~ msgstr "no s'ha pogut canviar el nom «%s» a «%s»" @@ -8,8 +8,8 @@ msgid "" msgstr "" "Project-Id-Version: Git\n" "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n" -"POT-Creation-Date: 2023-11-09 11:29+0100\n" -"PO-Revision-Date: 2023-11-10 14:28+0100\n" +"POT-Creation-Date: 2024-02-17 18:07+0100\n" +"PO-Revision-Date: 2024-02-17 18:14+0100\n" "Last-Translator: Ralf Thielow <ralf.thielow@gmail.com>\n" "Language-Team: German\n" "Language: de\n" @@ -1474,6 +1474,10 @@ msgid "Unexpected option --output" msgstr "Unerwartete Option --output" #, c-format +msgid "extra command line parameter '%s'" +msgstr "zusätzlicher Befehlszeilenparameter '%s'" + +#, c-format msgid "Unknown archive format '%s'" msgstr "Unbekanntes Archivformat '%s'" @@ -1519,6 +1523,14 @@ msgid "bad --attr-source or GIT_ATTR_SOURCE" msgstr "ungültiges --attr-source oder GIT_ATTR_SOURCE" #, c-format +msgid "unable to stat '%s'" +msgstr "konnte '%s' nicht lesen" + +#, c-format +msgid "unable to read %s" +msgstr "kann %s nicht lesen" + +#, c-format msgid "Badly quoted content in file '%s': %s" msgstr "Ungültiger Inhalt bzgl. Anführungszeichen in Datei '%s': %s" @@ -1698,12 +1710,10 @@ msgstr "" msgid "not tracking: ambiguous information for ref '%s'" msgstr "kein Tracking: mehrdeutige Informationen für Referenz '%s'" -#. #-#-#-#-# branch.c.po #-#-#-#-# #. TRANSLATORS: This is a line listing a remote with duplicate #. refspecs in the advice message below. For RTL languages you'll #. probably want to swap the "%s" and leading " " space around. #. -#. #-#-#-#-# object-name.c.po #-#-#-#-# #. TRANSLATORS: This is line item of ambiguous object output #. from describe_ambiguous_object() above. For RTL languages #. you'll probably want to swap the "%s" and leading " " space @@ -2830,13 +2840,14 @@ msgid "couldn't look up commit object for '%s'" msgstr "konnte Commit-Objekt für '%s' nicht nachschlagen" #, c-format -msgid "" -"the branch '%s' is not fully merged.\n" -"If you are sure you want to delete it, run 'git branch -D %s'" +msgid "the branch '%s' is not fully merged" +msgstr "der Branch '%s' ist nicht vollständig zusammengeführt" + +#, c-format +msgid "If you are sure you want to delete it, run 'git branch -D %s'" msgstr "" -"Der Branch '%s' ist nicht vollständig zusammengeführt.\n" -"Wenn Sie sicher sind diesen Branch zu entfernen, führen Sie 'git branch -D " -"%s' aus." +"Wenn Sie sicher sind, dass Sie den Branch löschen wollen, führen Sie 'git " +"branch -D %s' aus." msgid "update of config-file failed" msgstr "Aktualisierung der Konfigurationsdatei fehlgeschlagen." @@ -3905,8 +3916,8 @@ msgstr "Auschecken erzwingen (verwirft lokale Änderungen)" msgid "new-branch" msgstr "neuer Branch" -msgid "new unparented branch" -msgstr "neuer Branch ohne Eltern-Commit" +msgid "new unborn branch" +msgstr "neuer ungeborener Branch" msgid "update ignored files (default)" msgstr "ignorierte Dateien aktualisieren (Standard)" @@ -4160,9 +4171,6 @@ msgstr "" "clean.requireForce standardmäßig auf \"true\" gesetzt und weder -i, -n noch -" "f gegeben; \"clean\" verweigert" -msgid "-x and -X cannot be used together" -msgstr "-x und -X können nicht gemeinsam verwendet werden" - msgid "git clone [<options>] [--] <repo> [<dir>]" msgstr "git clone [<Optionen>] [--] <Repository> [<Verzeichnis>]" @@ -4256,6 +4264,9 @@ msgstr ".git-Verzeichnis" msgid "separate git dir from working tree" msgstr "Git-Verzeichnis vom Arbeitsverzeichnis separieren" +msgid "specify the reference format to use" +msgstr "das zu verwendende Referenzformat angeben" + msgid "key=value" msgstr "Schlüssel=Wert" @@ -4379,12 +4390,9 @@ msgstr "Zu viele Argumente." msgid "You must specify a repository to clone." msgstr "Sie müssen ein Repository zum Klonen angeben." -msgid "" -"--bundle-uri is incompatible with --depth, --shallow-since, and --shallow-" -"exclude" -msgstr "" -"--bundle-uri ist inkompatibel mit --depth, --shallow-since und --shallow-" -"exclude" +#, c-format +msgid "unknown ref storage format '%s'" +msgstr "unbekanntes Speicherformat für Referenzen '%s'" #, c-format msgid "repository '%s' does not exist" @@ -4526,7 +4534,7 @@ msgid "" "--stdin-commits]\n" " [--changed-paths] [--[no-]max-new-filters <n>] [--" "[no-]progress]\n" -" <split options>" +" <split-options>" msgstr "" "git commit-graph write [--object-dir <Verzeichnis>] [--append]\n" " [--split[=<Strategie>]] [--reachable | --stdin-packs " @@ -6892,7 +6900,6 @@ msgstr "grep: Fehler beim Erzeugen eines Thread: %s" msgid "invalid number of threads specified (%d) for %s" msgstr "ungültige Anzahl von Threads (%d) für %s angegeben" -#. #-#-#-#-# grep.c.po #-#-#-#-# #. TRANSLATORS: %s is the configuration #. variable for tweaking threads, currently #. grep.threads @@ -6906,6 +6913,10 @@ msgid "unable to read tree (%s)" msgstr "konnte \"Tree\"-Objekt (%s) nicht lesen" #, c-format +msgid "unable to read tree %s" +msgstr "konnte \"Tree\"-Objekt (%s) nicht lesen" + +#, c-format msgid "unable to grep from object of type %s" msgstr "kann \"grep\" nicht mit Objekten des Typs %s durchführen" @@ -7327,10 +7338,6 @@ msgid "SHA1 COLLISION FOUND WITH %s !" msgstr "SHA1 KOLLISION MIT %s GEFUNDEN !" #, c-format -msgid "unable to read %s" -msgstr "kann %s nicht lesen" - -#, c-format msgid "cannot read existing object info %s" msgstr "Kann existierende Informationen zu Objekt %s nicht lesen." @@ -7470,11 +7477,13 @@ msgstr "fsck Fehler beim Packen von Objekten" msgid "" "git init [-q | --quiet] [--bare] [--template=<template-directory>]\n" " [--separate-git-dir <git-dir>] [--object-format=<format>]\n" +" [--ref-format=<format>]\n" " [-b <branch-name> | --initial-branch=<branch-name>]\n" " [--shared[=<permissions>]] [<directory>]" msgstr "" "git init [-q | --quiet] [--bare] [--template=<Vorlagenverzeichnis>]\n" " [--separate-git-dir <Git-Verzeichnis>] [--object-format=<Format>]\n" +" [--ref-format=<Format>]\n" " [-b <Branchname> | --initial-branch=<Branchname>]\n" " [--shared[=<Berechtigungen>]] [<Verzeichnis>]" @@ -8195,6 +8204,13 @@ msgstr "" "git merge-file [<Optionen>] [-L <Name1> [-L <orig> [-L <Name2>]]] <Datei1> " "<orig-Datei> <Datei2>" +msgid "" +"option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and " +"\"histogram\"" +msgstr "" +"Option diff-algorithm akzeptiert: \"myers\", \"minimal\", \"patience\" and " +"\"histogram\"" + msgid "send results to standard output" msgstr "Ergebnisse zur Standard-Ausgabe senden" @@ -8216,6 +8232,12 @@ msgstr "bei Konflikten ihre Variante verwenden" msgid "for conflicts, use a union version" msgstr "bei Konflikten eine gemeinsame Variante verwenden" +msgid "<algorithm>" +msgstr "<Algorithmus>" + +msgid "choose a diff algorithm" +msgstr "einen Algorithmus für Änderungen wählen" + msgid "for conflicts, use this marker size" msgstr "bei Konflikten diese Kennzeichnungslänge verwenden" @@ -8307,9 +8329,6 @@ msgstr "--trivial-merge ist mit allen anderen Optionen inkompatibel" msgid "unknown strategy option: -X%s" msgstr "unbekannte Strategie-Option: -X%s" -msgid "--merge-base is incompatible with --stdin" -msgstr "--merge-base ist inkompatibel mit --stdin" - #, c-format msgid "malformed input line: '%s'." msgstr "Fehlerhafte Eingabezeile: '%s'." @@ -9265,6 +9284,10 @@ msgid "inconsistency with delta count" msgstr "Inkonsistenz mit der Anzahl von Deltas" #, c-format +msgid "invalid pack.allowPackReuse value: '%s'" +msgstr "ungültiger Wert für pack.allowPackReuse: '%s'" + +#, c-format msgid "" "value of uploadpack.blobpackfileuri must be of the form '<object-hash> <pack-" "hash> <uri>' (got '%s')" @@ -9533,10 +9556,10 @@ msgstr "Objekte aufzählen" #, c-format msgid "" "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-" -"reused %<PRIu32>" +"reused %<PRIu32> (from %<PRIuMAX>)" msgstr "" "Gesamt %<PRIu32> (Delta %<PRIu32>), Wiederverwendet %<PRIu32> (Delta " -"%<PRIu32>), Pack wiederverwendet %<PRIu32>" +"%<PRIu32>), Paket wiederverwendet %<PRIu32> (von %<PRIuMAX>)" msgid "" "'git pack-redundant' is nominated for removal.\n" @@ -10548,13 +10571,6 @@ msgid "switch `C' expects a numerical value" msgstr "Schalter `C' erwartet einen numerischen Wert." msgid "" -"apply options are incompatible with rebase.autoSquash. Consider adding --no-" -"autosquash" -msgstr "" -"apply-Optionen sind mit rebase.autoSquash nicht kompatibel. Erwägen Sie das " -"Hinzufügen von --no-autosquash" - -msgid "" "apply options are incompatible with rebase.rebaseMerges. Consider adding --" "no-rebase-merges" msgstr "" @@ -11567,6 +11583,77 @@ msgstr "--convert-graft-file erwartet keine Argumente" msgid "only one pattern can be given with -l" msgstr "Mit -l kann nur ein Muster angegeben werden" +msgid "need some commits to replay" +msgstr "zum erneuten Abspielen werden Commits benötigt" + +msgid "--onto and --advance are incompatible" +msgstr "--onto und --advance sind inkompatibel" + +msgid "all positive revisions given must be references" +msgstr "alle angegebenen positiven Commits müssen Referenzen sein" + +msgid "argument to --advance must be a reference" +msgstr "Argument für --advance muss eine Referenz sein" + +msgid "" +"cannot advance target with multiple sources because ordering would be ill-" +"defined" +msgstr "" +"kann Ziel nicht mit mehreren Quellen erweitern, da die Reihenfolge unklar " +"wäre" + +msgid "" +"cannot implicitly determine whether this is an --advance or --onto operation" +msgstr "" +"kann nicht implizit bestimmen, ob es sich um eine --advance oder --onto " +"Operation handelt" + +msgid "" +"cannot advance target with multiple source branches because ordering would " +"be ill-defined" +msgstr "" +"kann Ziel nicht mit mehreren Quell-Branches erweitern, da die Reihenfolge " +"unklar wäre" + +msgid "cannot implicitly determine correct base for --onto" +msgstr "kann nicht implizit die richtige Basis für --onto bestimmen" + +msgid "" +"(EXPERIMENTAL!) git replay ([--contained] --onto <newbase> | --advance " +"<branch>) <revision-range>..." +msgstr "" +"(EXPERIMENTELL!) git replay ([--contained] --onto <neue-Basis> | --advance " +"<Branch>) <Commitbereich>..." + +msgid "make replay advance given branch" +msgstr "angegebenen Branch durch neues Abspielen erweitern" + +msgid "replay onto given commit" +msgstr "auf angegebenen Commit neu abspielen" + +msgid "advance all branches contained in revision-range" +msgstr "alle Branches erweitern, die in Commitbereich liegen" + +msgid "option --onto or --advance is mandatory" +msgstr "Option --onto oder --advance erforderlich" + +#, c-format +msgid "" +"some rev walking options will be overridden as '%s' bit in 'struct rev_info' " +"will be forced" +msgstr "" +"einige Optionen für das Abgehen von Commits werden außer Kraft gesetzt, da " +"das '%s' Bit in 'struct rev_info' erzwungen wird" + +msgid "error preparing revisions" +msgstr "Fehler beim Vorbereiten der Commits" + +msgid "replaying down to root commit is not supported yet!" +msgstr "erneutes Abspielen bis zum Root-Commit wird noch nicht unterstützt!" + +msgid "replaying merge commits is not supported yet!" +msgstr "erneutes Abspielen von Merge-Commits wird noch nicht unterstützt!" + msgid "" "git rerere [clear | forget <pathspec>... | diff | status | remaining | gc]" msgstr "" @@ -11778,15 +11865,6 @@ msgstr "--prefix benötigt ein Argument" msgid "unknown mode for --abbrev-ref: %s" msgstr "unbekannter Modus für --abbrev-ref: %s" -msgid "--exclude-hidden cannot be used together with --branches" -msgstr "--exclude-hidden kann nicht zusammen mit --branches verwendet werden" - -msgid "--exclude-hidden cannot be used together with --tags" -msgstr "--exclude-hidden kann nicht zusammen mit --tags verwendet werden" - -msgid "--exclude-hidden cannot be used together with --remotes" -msgstr "--exclude-hidden kann nicht zusammen mit --remotes verwendet werden" - msgid "this operation must be run in a work tree" msgstr "Diese Operation muss in einem Arbeitsverzeichnis ausgeführt werden." @@ -12202,10 +12280,6 @@ msgstr "" "Referenzen von der Standard-Eingabe anzeigen, die sich nicht im lokalen " "Repository befinden" -#, c-format -msgid "only one of '%s', '%s' or '%s' can be given" -msgstr "es kann nur eines von '%s', '%s' oder '%s' angegeben werden" - msgid "" "git sparse-checkout (init | list | set | add | reapply | disable | check-" "rules) [<options>]" @@ -13717,33 +13791,29 @@ msgstr "Kein möglicher Quell-Branch, der auf '--orphan' schließen lässt" #, c-format msgid "" -"If you meant to create a worktree containing a new orphan branch\n" +"If you meant to create a worktree containing a new unborn branch\n" "(branch with no commits) for this repository, you can do so\n" "using the --orphan flag:\n" "\n" " git worktree add --orphan -b %s %s\n" msgstr "" -"Wenn Sie ein Arbeitsverzeichnis erstellen möchten, um einen neuen verwaisten " -"Branch\n" -"(Branch ohne Commits) für dieses Repository zu erstellen, können Sie dies " -"mit\n" -"der Option --orphan tun:\n" +"Wenn Sie ein Arbeitsverzeichnis erstellen möchten, welches einen neuen\n" +"ungeborenen Branch (Branch ohne Commits) für dieses Repository erzeugt,\n" +"können Sie dies mit der Option --orphan tun:\n" "\n" " git worktree add --orphan -b %s %s\n" #, c-format msgid "" -"If you meant to create a worktree containing a new orphan branch\n" +"If you meant to create a worktree containing a new unborn branch\n" "(branch with no commits) for this repository, you can do so\n" "using the --orphan flag:\n" "\n" " git worktree add --orphan %s\n" msgstr "" -"Wenn Sie ein Arbeitsverzeichnis erstellen möchten, um einen neuen verwaisten " -"Branch\n" -"(Branch ohne Commits) für dieses Repository zu erstellen, können Sie dies " -"mit\n" -"der Option --orphan tun:\n" +"Wenn Sie ein Arbeitsverzeichnis erstellen möchten, welches einen neuen\n" +"ungeborenen Branch (Branch ohne Commits) für dieses Repository erzeugt,\n" +"können Sie dies mit der Option --orphan tun:\n" "\n" " git worktree add --orphan %s\n" @@ -13806,6 +13876,10 @@ msgid "initializing" msgstr "initialisiere" #, c-format +msgid "could not find created worktree '%s'" +msgstr "konnte erstelltes Arbeitsverzeichnis '%s' nicht finden" + +#, c-format msgid "Preparing worktree (new branch '%s')" msgstr "Bereite Arbeitsverzeichnis vor (neuer Branch '%s')" @@ -13845,10 +13919,6 @@ msgstr "" "Referenz zu überschreiben\n" "oder rufen Sie diese zuerst ab" -#, c-format -msgid "'%s' and '%s' cannot be used together" -msgstr "'%s' und '%s' können nicht zusammen verwendet werden" - msgid "checkout <branch> even if already checked out in other worktree" msgstr "" "<Branch> auschecken, auch wenn dieser bereits in einem anderen " @@ -13860,8 +13930,8 @@ msgstr "neuen Branch erstellen" msgid "create or reset a branch" msgstr "Branch erstellen oder umsetzen" -msgid "create unborn/orphaned branch" -msgstr "ungeborenen/verwaisten Branch erstellen" +msgid "create unborn branch" +msgstr "ungeborenen Branch erzeugen" msgid "populate the new working tree" msgstr "das neue Arbeitsverzeichnis auschecken" @@ -13886,11 +13956,8 @@ msgstr "" "die Optionen '%s', '%s' und '%s' können nicht gemeinsam verwendet werden" #, c-format -msgid "options '%s', and '%s' cannot be used together" -msgstr "die Optionen '%s' und '%s' können nicht gemeinsam verwendet werden" - -msgid "<commit-ish>" -msgstr "<Commit-Angabe>" +msgid "option '%s' and commit-ish cannot be used together" +msgstr "Option '%s' und commit-ish können nicht gemeinsam verwendet werden" msgid "added with --lock" msgstr "mit --lock hinzugefügt" @@ -14541,6 +14608,11 @@ msgstr "ungepackte Objekte in einem Repository packen" msgid "Create, list, delete refs to replace objects" msgstr "Referenzen für ersetzende Objekte erstellen, auflisten, löschen" +msgid "EXPERIMENTAL: Replay commits on a new base, works with bare repos too" +msgstr "" +"EXPERIMENTELL: Commits auf neuer Basis abspielen, funktioniert auch mit Bare-" +"Repositories" + msgid "Generates a summary of pending changes" msgstr "eine Übersicht über ausstehende Änderungen generieren" @@ -14785,6 +14857,32 @@ msgstr "Ein Werkzeug zur Verwaltung großer Git-Repositories" msgid "commit-graph file is too small" msgstr "Commit-Graph-Datei ist zu klein" +msgid "commit-graph oid fanout chunk is wrong size" +msgstr "Commit-Graph OID fanout Chunk hat die falsche Größe" + +msgid "commit-graph fanout values out of order" +msgstr "Commit-Graph fanout-Werte sind nicht in Ordnung" + +msgid "commit-graph OID lookup chunk is the wrong size" +msgstr "Commit-Graph OID Lookup Chunk hat die falsche Größe" + +msgid "commit-graph commit data chunk is wrong size" +msgstr "Commit-Graph Commit Daten Chunk hat die falsche Größe" + +msgid "commit-graph generations chunk is wrong size" +msgstr "Commit-Graph Generations Chunk hat die falsche Größe" + +msgid "commit-graph changed-path index chunk is too small" +msgstr "Commit-Graph changed-path Index Chunk ist zu klein" + +#, c-format +msgid "" +"ignoring too-small changed-path chunk (%<PRIuMAX> < %<PRIuMAX>) in commit-" +"graph file" +msgstr "" +"ignoriere zu kleinen Chunk für geänderte Pfade (%<PRIuMAX> < %<PRIuMAX>) in " +"Commit-Graph-Datei" + #, c-format msgid "commit-graph signature %X does not match signature %X" msgstr "Commit-Graph-Signatur %X stimmt nicht mit Signatur %X überein" @@ -14801,6 +14899,16 @@ msgstr "Hash-Version des Commit-Graph %X stimmt nicht mit Version %X überein" msgid "commit-graph file is too small to hold %u chunks" msgstr "Commit-Graph-Datei ist zu klein, um %u Chunks zu enthalten" +msgid "commit-graph required OID fanout chunk missing or corrupted" +msgstr "Commit-Graph benötigter OID fanout Chunk fehlt oder ist beschädigt" + +msgid "commit-graph required OID lookup chunk missing or corrupted" +msgstr "Commit-Graph benötigter OID lookup Chunk fehlt oder ist beschädigt" + +msgid "commit-graph required commit data chunk missing or corrupted" +msgstr "" +"Commit-Graph erforderlicher Commit-Daten Chunk fehlt oder ist beschädigt" + msgid "commit-graph has no base graphs chunk" msgstr "Commit-Graph hat keinen Basis-Graph-Chunk" @@ -14814,6 +14922,9 @@ msgstr "Commit-Graph Verkettung stimmt nicht überein" msgid "commit count in base graph too high: %<PRIuMAX>" msgstr "Anzahl der Commits im Basisgraph zu hoch: %<PRIuMAX>" +msgid "commit-graph chain file too small" +msgstr "Commit-Graph Chain-Datei zu klein" + #, c-format msgid "invalid commit-graph chain: line '%s' not a hash" msgstr "Ungültige Commit-Graph Verkettung: Zeile '%s' ist kein Hash" @@ -14834,6 +14945,9 @@ msgstr "Commit-Graph erfordert Überlaufgenerierungsdaten, aber hat keine" msgid "commit-graph overflow generation data is too small" msgstr "Commit-Graph Überlaufgenerierungsdaten sind zu klein" +msgid "commit-graph extra-edges pointer out of bounds" +msgstr "commit-graph extra-edges Zeiger außerhalb der Grenzen" + msgid "Loading known commits in commit graph" msgstr "Lade bekannte Commits in Commit-Graph" @@ -16001,6 +16115,10 @@ msgid "Unknown value for 'diff.submodule' config variable: '%s'" msgstr "Unbekannter Wert in Konfigurationsvariable 'diff.submodule': '%s'" #, c-format +msgid "unknown value for config '%s': %s" +msgstr "Unbekannter Wert für Konfiguration '%s': %s" + +#, c-format msgid "" "Found errors in 'diff.dirstat' config variable:\n" "%s" @@ -16082,13 +16200,6 @@ msgstr "ungültiges --color-moved Argument: %s" msgid "invalid mode '%s' in --color-moved-ws" msgstr "ungültiger Modus '%s' in --color-moved-ws" -msgid "" -"option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and " -"\"histogram\"" -msgstr "" -"Option diff-algorithm akzeptiert: \"myers\", \"minimal\", \"patience\" and " -"\"histogram\"" - #, c-format msgid "invalid argument to %s" msgstr "ungültiges Argument für %s" @@ -16132,8 +16243,8 @@ msgstr "maschinenlesbare Ausgabe von --stat" msgid "output only the last line of --stat" msgstr "nur die letzte Zeile von --stat ausgeben" -msgid "<param1,param2>..." -msgstr "<Parameter1,Parameter2>..." +msgid "<param1>,<param2>..." +msgstr "<Parameter1>,<Parameter2>..." msgid "" "output the distribution of relative amount of changes for each sub-directory" @@ -16144,8 +16255,8 @@ msgstr "" msgid "synonym for --dirstat=cumulative" msgstr "Synonym für --dirstat=cumulative" -msgid "synonym for --dirstat=files,param1,param2..." -msgstr "Synonym für --dirstat=files,Parameter1,Parameter2..." +msgid "synonym for --dirstat=files,<param1>,<param2>..." +msgstr "Synonym für --dirstat=files,<Parameter1>,<Parameter2>..." msgid "warn if changes introduce conflict markers or whitespace errors" msgstr "" @@ -16328,12 +16439,6 @@ msgstr "Änderungen durch Nutzung des Algorithmus \"Patience Diff\" erzeugen" msgid "generate diff using the \"histogram diff\" algorithm" msgstr "Änderungen durch Nutzung des Algorithmus \"Histogram Diff\" erzeugen" -msgid "<algorithm>" -msgstr "<Algorithmus>" - -msgid "choose a diff algorithm" -msgstr "einen Algorithmus für Änderungen wählen" - msgid "<text>" msgstr "<Text>" @@ -17547,7 +17652,7 @@ msgstr "" #. conflict in a submodule. The first argument is the submodule #. name, and the second argument is the abbreviated id of the #. commit that needs to be merged. For example: -#. - go to submodule (mysubmodule), and either merge commit abc1234" +#. - go to submodule (mysubmodule), and either merge commit abc1234" #. #, c-format msgid "" @@ -17848,6 +17953,13 @@ msgstr "Lesen des Zwischenspeichers fehlgeschlagen" msgid "multi-pack-index OID fanout is of the wrong size" msgstr "Multi-Pack-Index OID fanout hat die falsche Größe" +#, c-format +msgid "" +"oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]" +msgstr "" +"Ungültige oid fanout Reihenfolge: fanout[%d] = %<PRIx32> > %<PRIx32> = " +"fanout[%d]" + msgid "multi-pack-index OID lookup chunk is the wrong size" msgstr "multi-pack-index OID-Lookup-Chunk hat die falsche Größe" @@ -17898,6 +18010,13 @@ msgstr "Falsche Reihenfolge bei Multi-Pack-Index Pack-Namen: '%s' vor '%s'" msgid "bad pack-int-id: %u (%u total packs)" msgstr "Ungültige pack-int-id: %u (%u Pakete insgesamt)" +msgid "MIDX does not contain the BTMP chunk" +msgstr "MIDX enthält keinen BTMP-Chunk" + +#, c-format +msgid "could not load bitmapped pack %<PRIu32>" +msgstr "konnte Bitmap-Paket nicht laden %<PRIu32>" + msgid "multi-pack-index stores a 64-bit offset, but off_t is too small" msgstr "" "Multi-Pack-Index speichert einen 64-Bit Offset, aber off_t ist zu klein" @@ -17983,13 +18102,6 @@ msgstr "Prüfsumme nicht korrekt" msgid "Looking for referenced packfiles" msgstr "Suche nach referenzierten Pack-Dateien" -#, c-format -msgid "" -"oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]" -msgstr "" -"Ungültige oid fanout Reihenfolge: fanout[%d] = %<PRIx32> > %<PRIx32> = " -"fanout[%d]" - msgid "the midx contains no oid" msgstr "das midx enthält keine oid" @@ -18304,7 +18416,7 @@ msgstr "%s [ungültiges Objekt]" #. TRANSLATORS: This is a line of ambiguous commit #. object output. E.g.: #. * -#. "deadbeef commit 2021-01-01 - Some Commit Message" +#. "deadbeef commit 2021-01-01 - Some Commit Message" #. #, c-format msgid "%s commit %s - %s" @@ -18313,7 +18425,7 @@ msgstr "%s Commit %s - %s" #. TRANSLATORS: This is a line of ambiguous #. tag object output. E.g.: #. * -#. "deadbeef tag 2022-01-01 - Some Tag Message" +#. "deadbeef tag 2022-01-01 - Some Tag Message" #. * #. The second argument is the YYYY-MM-DD found #. in the tag. @@ -18329,7 +18441,7 @@ msgstr "%s Tag %s - %s" #. tag object output where we couldn't parse #. the tag itself. E.g.: #. * -#. "deadbeef [bad tag, could not parse it]" +#. "deadbeef [bad tag, could not parse it]" #. #, c-format msgid "%s [bad tag, could not parse it]" @@ -18525,6 +18637,9 @@ msgstr "Multi-Pack-Bitmap fehlt erforderlicher Reverse-Index" msgid "could not open pack %s" msgstr "konnte Paket '%s' nicht öffnen" +msgid "could not determine MIDX preferred pack" +msgstr "konnte das von MIDX bevorzugte Paket nicht ermitteln" + #, c-format msgid "preferred pack (%s) is invalid" msgstr "bevorzugtes Paket (%s) ist ungültig" @@ -18548,6 +18663,12 @@ msgstr "" "fehlerhafte ewah-Bitmap: abgeschnittener Header für Bitmap des Commits \"%s\"" #, c-format +msgid "unable to load pack: '%s', disabling pack-reuse" +msgstr "" +"Paket kann nicht geladen werden: '%s', Deaktivierung der Paket-" +"Wiederverwendung" + +#, c-format msgid "object '%s' not found in type bitmaps" msgstr "Objekt '%s' nicht im Typ Bitmaps gefunden" @@ -18638,6 +18759,9 @@ msgstr "ungültige rev-index Position bei %<PRIu64>: %<PRIu32> != %<PRIu32>" msgid "multi-pack-index reverse-index chunk is the wrong size" msgstr "multi-pack-index Reverse-Index Chunk hat die falsche Größe" +msgid "could not determine preferred pack" +msgstr "konnte das bevorzugte Paket nicht bestimmen" + msgid "cannot both write and verify reverse index" msgstr "" "Reverse-Index kann nicht gleichzeitig geschrieben und verifiziert werden" @@ -18704,10 +18828,6 @@ msgstr "" "Suffix" #, c-format -msgid "%s is incompatible with %s" -msgstr "%s ist inkompatibel mit %s." - -#, c-format msgid "ambiguous option: %s (could be --%s%s or --%s%s)" msgstr "Mehrdeutige Option: %s (kann --%s%s oder --%s%s sein)" @@ -19031,10 +19151,6 @@ msgid "unable to add '%s' to index" msgstr "Konnte '%s' nicht dem Index hinzufügen." #, c-format -msgid "unable to stat '%s'" -msgstr "konnte '%s' nicht lesen" - -#, c-format msgid "'%s' appears as both a file and as a directory" msgstr "'%s' scheint eine Datei und ein Verzeichnis zu sein" @@ -19613,10 +19729,6 @@ msgid "cannot process '%s' and '%s' at the same time" msgstr "kann '%s' und '%s' nicht zur selben Zeit verarbeiten" #, c-format -msgid "could not remove reference %s" -msgstr "konnte Referenz %s nicht löschen" - -#, c-format msgid "could not delete reference %s: %s" msgstr "konnte Referenz %s nicht entfernen: %s" @@ -19810,16 +19922,13 @@ msgid "" "\n" "Neither worked, so we gave up. You must fully qualify the ref." msgstr "" -"Das angegebene Ziel ist kein vollständiger Referenzname (startet mit \"refs/" -"\").\n" -"Wir versuchten zu erraten, was Sie meinten, mit:\n" +"Das angegebene Ziel ist kein vollständiger Referenzname (startet mit\n" +"\"refs/\"). Wir versuchten zu erraten, was Sie meinten, mit:\n" "\n" "- Suche einer Referenz, die mit '%s' übereinstimmt, auf der Remote-Seite\n" -"- Prüfung, ob die versendete <Quelle> ('%s') eine Referenz in \"refs/{heads," -"tags}\"\n" -" ist, in dessen Falle wir einen entsprechenden refs/{heads,tags} Präfix " -"auf\n" -" der Remote-Seite hinzufügen würden.\n" +"- Prüfung, ob die versendete <Quelle> ('%s') eine Referenz in\n" +" \"refs/{heads,tags}/\" ist, in dessen Falle wir einen entsprechenden\n" +" refs/{heads,tags}/ Präfix auf der Remote-Seite hinzufügen würden.\n" "\n" "Keines hat funktioniert, sodass wir aufgegeben haben. Sie müssen die\n" "Referenz mit vollqualifizierten Namen angeben." @@ -21004,6 +21113,9 @@ msgstr "Beim Anwenden des automatischen Stash traten Konflikte auf." msgid "Autostash exists; creating a new stash entry." msgstr "Automatischer Stash existiert; ein neuer Stash-Eintrag wird erstellt." +msgid "autostash reference is a symref" +msgstr "Referenz für autostash ist eine symbolische Referenz" + msgid "could not detach HEAD" msgstr "konnte HEAD nicht loslösen" @@ -21324,6 +21436,10 @@ msgid "invalid initial branch name: '%s'" msgstr "ungültiger initialer Branchname: '%s'" #, c-format +msgid "re-init: ignored --initial-branch=%s" +msgstr "Neu-Initialisierung: --initial-branch=%s ignoriert" + +#, c-format msgid "unable to handle file type %d" msgstr "kann nicht mit Dateityp %d umgehen" @@ -21334,15 +21450,17 @@ msgstr "konnte %s nicht nach %s verschieben" msgid "attempt to reinitialize repository with different hash" msgstr "Versuch, das Repository mit einem anderen Hash zu reinitialisieren" +msgid "" +"attempt to reinitialize repository with different reference storage format" +msgstr "" +"Versuch, das Repository mit einem anderen Referenzspeicherformat neu zu " +"initialisieren" + #, c-format msgid "%s already exists" msgstr "%s existiert bereits" #, c-format -msgid "re-init: ignored --initial-branch=%s" -msgstr "Neu-Initialisierung: --initial-branch=%s ignoriert" - -#, c-format msgid "Reinitialized existing shared Git repository in %s%s\n" msgstr "Bestehendes verteiltes Git-Repository in %s%s neuinitialisiert\n" @@ -21611,12 +21729,6 @@ msgstr "" "Anzahl der Einträge im Cache-Verzeichnis, die ungültig gemacht werden sollen " "(Standardwert 0)" -msgid "unhandled options" -msgstr "unbehandelte Optionen" - -msgid "error preparing revisions" -msgstr "Fehler beim Vorbereiten der Commits" - #, c-format msgid "commit %s is not marked reachable" msgstr "Commit %s ist nicht als erreichbar gekennzeichnet." @@ -21772,9 +21884,6 @@ msgstr "" msgid "invalid remote service path" msgstr "ungültiger Remote-Service Pfad." -msgid "operation not supported by protocol" -msgstr "die Operation wird von dem Protokoll nicht unterstützt" - #, c-format msgid "can't connect to subservice %s" msgstr "kann keine Verbindung zu Subservice %s herstellen" @@ -21905,10 +22014,6 @@ msgid "support for protocol v2 not implemented yet" msgstr "Unterstützung für Protokoll v2 noch nicht implementiert." #, c-format -msgid "unknown value for config '%s': %s" -msgstr "Unbekannter Wert für Konfiguration '%s': %s" - -#, c-format msgid "transport '%s' not allowed" msgstr "Übertragungsart '%s' nicht erlaubt." @@ -21961,6 +22066,9 @@ msgstr "bundle-uri Operation wird vom Protokoll nicht unterstützt" msgid "could not retrieve server-advertised bundle-uri list" msgstr "konnte die vom Server angekündigte bundle-uri-Liste nicht abrufen" +msgid "operation not supported by protocol" +msgstr "die Operation wird von dem Protokoll nicht unterstützt" + msgid "too-short tree object" msgstr "zu kurzes Tree-Objekt" @@ -22849,6 +22957,10 @@ msgid "cannot %s: Your index contains uncommitted changes." msgstr "" "%s nicht möglich: Die Staging-Area enthält nicht committete Änderungen." +#, c-format +msgid "unknown style '%s' given for '%s'" +msgstr "unbekannter Stil '%s' für '%s' angegeben" + msgid "" "Error: Your local changes to the following files would be overwritten by " "merge" @@ -80,8 +80,8 @@ msgid "" msgstr "" "Project-Id-Version: git\n" "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n" -"POT-Creation-Date: 2023-11-08 04:57+0000\n" -"PO-Revision-Date: 2023-11-11 10:00+0100\n" +"POT-Creation-Date: 2024-02-16 19:18+0100\n" +"PO-Revision-Date: 2024-02-16 19:19+0100\n" "Last-Translator: Cédric Malard <c.malard-git@valdun.net>\n" "Language-Team: Jean-Noël Avila <jn.avila@free.fr>\n" "Language: fr\n" @@ -1526,6 +1526,10 @@ msgid "Unexpected option --output" msgstr "Option --output inattendue" #, c-format +msgid "extra command line parameter '%s'" +msgstr "paramètre de commande supplémentaire '%s'" + +#, c-format msgid "Unknown archive format '%s'" msgstr "Format d'archive inconnu '%s'" @@ -1571,6 +1575,14 @@ msgid "bad --attr-source or GIT_ATTR_SOURCE" msgstr "mauvais --attr-source ou GIT_ATTR_SOURCE" #, c-format +msgid "unable to stat '%s'" +msgstr "fstat de '%s' impossible" + +#, c-format +msgid "unable to read %s" +msgstr "impossible de lire %s" + +#, c-format msgid "Badly quoted content in file '%s': %s" msgstr "Contenu mal cité dans le fichier '%s' : %s" @@ -2874,12 +2886,12 @@ msgid "couldn't look up commit object for '%s'" msgstr "impossible de rechercher l'objet commit pour '%s'" #, c-format -msgid "" -"the branch '%s' is not fully merged.\n" -"If you are sure you want to delete it, run 'git branch -D %s'" -msgstr "" -"la branche '%s' n'est pas totalement fusionnée.\n" -"Si vous souhaitez réellement la supprimer, lancez 'git branch -D %s'" +msgid "the branch '%s' is not fully merged" +msgstr "la branche '%s' n'est pas complètement fusionnée" + +#, c-format +msgid "If you are sure you want to delete it, run 'git branch -D %s'" +msgstr "Si vous souhaitez réellement la supprimer, lancez 'git branch -D %s'" msgid "update of config-file failed" msgstr "échec de la mise à jour du fichier de configuration" @@ -3937,8 +3949,8 @@ msgstr "forcer l'extraction (laisser tomber les modifications locales)" msgid "new-branch" msgstr "nouvelle branche" -msgid "new unparented branch" -msgstr "nouvelle branche sans parent" +msgid "new unborn branch" +msgstr "nouvelle branche non née" msgid "update ignored files (default)" msgstr "mettre à jour les fichiers ignorés (par défaut)" @@ -4192,9 +4204,6 @@ msgstr "" "clean.requireForce à true par défaut et ni -i, -n ou -f fourni ; refus de " "nettoyer" -msgid "-x and -X cannot be used together" -msgstr "-x et -X ne peuvent pas être utilisés ensemble" - msgid "git clone [<options>] [--] <repo> [<dir>]" msgstr "git clone [<options>] [--] <dépôt> [<répertoire>]" @@ -4285,6 +4294,9 @@ msgstr "gitdir" msgid "separate git dir from working tree" msgstr "séparer le répertoire git de la copie de travail" +msgid "specify the reference format to use" +msgstr "spécifier le format de réference à utiliser" + msgid "key=value" msgstr "clé=valeur" @@ -4407,12 +4419,9 @@ msgstr "Trop d'arguments." msgid "You must specify a repository to clone." msgstr "Vous devez spécifier un dépôt à cloner." -msgid "" -"--bundle-uri is incompatible with --depth, --shallow-since, and --shallow-" -"exclude" -msgstr "" -"--bundle-uri est incompatible avec --depth, --shallow-since, et --shallow-" -"exclude" +#, c-format +msgid "unknown ref storage format '%s'" +msgstr "Format de stockage de réf inconnu '%s'" #, c-format msgid "repository '%s' does not exist" @@ -4546,14 +4555,14 @@ msgid "" "--stdin-commits]\n" " [--changed-paths] [--[no-]max-new-filters <n>] [--" "[no-]progress]\n" -" <split options>" +" <split-options>" msgstr "" "git commit-graph write [--object-dir <rép>] [--append]\n" " [--split[=<stratégie>]] [--reachable | --stdin-packs " "| --stdin-commits]\n" " [--changed-paths] [--[no-]max-new-filters <n>] [--" "[no-]progress]\n" -" <options de division>" +" <options-de-division>" msgid "dir" msgstr "répertoire" @@ -6907,6 +6916,10 @@ msgid "unable to read tree (%s)" msgstr "impossible de lire l'arbre (%s)" #, c-format +msgid "unable to read tree %s" +msgstr "impossible de lire l'arbre %s" + +#, c-format msgid "unable to grep from object of type %s" msgstr "impossible de faire un grep sur un objet de type %s" @@ -7325,10 +7338,6 @@ msgid "SHA1 COLLISION FOUND WITH %s !" msgstr "COLLISION SHA1 TROUVÉE AVEC %s !" #, c-format -msgid "unable to read %s" -msgstr "impossible de lire %s" - -#, c-format msgid "cannot read existing object info %s" msgstr "impossible de lire l'information existante de l'objet %s" @@ -7469,12 +7478,14 @@ msgstr "erreur de fsck dans les objets paquets" msgid "" "git init [-q | --quiet] [--bare] [--template=<template-directory>]\n" " [--separate-git-dir <git-dir>] [--object-format=<format>]\n" +" [--ref-format=<format>]\n" " [-b <branch-name> | --initial-branch=<branch-name>]\n" " [--shared[=<permissions>]] [<directory>]" msgstr "" -"git init [-q | --quiet] [--bare] [--template=<répertoire-modèle>]\n" -" [--separate-git-dir <rép-git>] [--object-format=<format>]\\n\"\n" -" [-b <nom-de-branche> | --initial-branch=<nom-de-branche>]\\n\"\n" +"git init [-q | --quiet] [--bare] [--template=<répertoire-de-modèles>]\n" +" [--separate-git-dir <rép-git>] [--object-format=<format>]\n" +" [--ref-format=<format>]\n" +" [-b <nom-de-branch> | --initial-branch=<nom-de-branche>]\n" " [--shared[=<permissions>]] [<répertoire>]" msgid "permissions" @@ -8204,6 +8215,13 @@ msgstr "" "git merge-file [<options>] [-L <nom1> [-L <orig> [-L <nom2>]]] <fichier1> " "<fichier-orig> <fichier2>" +msgid "" +"option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and " +"\"histogram\"" +msgstr "" +"l'option diff-algorithm accept \"myers\", \"minimal\", \"patience\" et " +"\"histogram\"" + msgid "send results to standard output" msgstr "envoyer les résultats sur la sortie standard" @@ -8225,6 +8243,12 @@ msgstr "pour les conflits, utiliser leur version (their)" msgid "for conflicts, use a union version" msgstr "pour les conflits, utiliser l'ensemble des versions" +msgid "<algorithm>" +msgstr "<algorithme>" + +msgid "choose a diff algorithm" +msgstr "choisir un algorithme de différence" + msgid "for conflicts, use this marker size" msgstr "pour les conflits, utiliser cette taille de marqueur" @@ -8315,9 +8339,6 @@ msgstr "--trivial-merge est incompatible avec d'autres options" msgid "unknown strategy option: -X%s" msgstr "option de stratégie inconnue : -X%s" -msgid "--merge-base is incompatible with --stdin" -msgstr "--merge-base est incompatible avec --stdin" - #, c-format msgid "malformed input line: '%s'." msgstr "ligne en entrée malformée : '%s'." @@ -9265,6 +9286,10 @@ msgid "inconsistency with delta count" msgstr "inconsistance dans le compte de delta" #, c-format +msgid "invalid pack.allowPackReuse value: '%s'" +msgstr "valeur invalide de pack.allowPackReuse : '%s'" + +#, c-format msgid "" "value of uploadpack.blobpackfileuri must be of the form '<object-hash> <pack-" "hash> <uri>' (got '%s')" @@ -9527,10 +9552,10 @@ msgstr "Énumération des objets" #, c-format msgid "" "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-" -"reused %<PRIu32>" +"reused %<PRIu32> (from %<PRIuMAX>)" msgstr "" "Total %<PRIu32> (delta %<PRIu32>), réutilisés %<PRIu32> (delta %<PRIu32>), " -"réutilisés du pack %<PRIu32>" +"réutilisés du paquet %<PRIu32> (depuis %<PRIuMAX>)" msgid "" "'git pack-redundant' is nominated for removal.\n" @@ -10520,13 +10545,6 @@ msgid "switch `C' expects a numerical value" msgstr "l'option `C' attend un valeur numérique" msgid "" -"apply options are incompatible with rebase.autoSquash. Consider adding --no-" -"autosquash" -msgstr "" -"les options d'application sont incompatibles avec rebase.autoSquash. " -"Considérez l'ajout de --no-autosquash" - -msgid "" "apply options are incompatible with rebase.rebaseMerges. Consider adding --" "no-rebase-merges" msgstr "" @@ -11535,6 +11553,77 @@ msgstr "--convert-graft-file ne supporte aucun argument" msgid "only one pattern can be given with -l" msgstr "-l n'accepte qu'un motifs" +msgid "need some commits to replay" +msgstr "commits requis pour pouvoir rejouer" + +msgid "--onto and --advance are incompatible" +msgstr "--onto et --advance sont incompatibles" + +msgid "all positive revisions given must be references" +msgstr "toutes les révisions positives fournies doivent être des références" + +msgid "argument to --advance must be a reference" +msgstr "l'argument de --advance doit être une référence" + +msgid "" +"cannot advance target with multiple sources because ordering would be ill-" +"defined" +msgstr "" +"impossible d'avancer la cible avec des sources multiples parce l'ordre ne " +"serait pas total" + +msgid "" +"cannot implicitly determine whether this is an --advance or --onto operation" +msgstr "" +"impossible de déterminer implicitement s'il y a une opération --advance ou --" +"onto" + +msgid "" +"cannot advance target with multiple source branches because ordering would " +"be ill-defined" +msgstr "" +"impossible d'avancer la cible sur des branches sources multiples parce que " +"l'ordre ne serait pas total" + +msgid "cannot implicitly determine correct base for --onto" +msgstr "impossible de déterminer implicitement une base correcte pour --onto" + +msgid "" +"(EXPERIMENTAL!) git replay ([--contained] --onto <newbase> | --advance " +"<branch>) <revision-range>..." +msgstr "" +"(EXPERIMENTAL!) git replay ([--contained] --onto <nouvelle-base> | --advance " +"<branche>) <plage-de-révision>..." + +msgid "make replay advance given branch" +msgstr "faire rejouer en avançant la branche indiquée" + +msgid "replay onto given commit" +msgstr "rejouer par-dessus le commit indiqué" + +msgid "advance all branches contained in revision-range" +msgstr "avancer toutes les branches contenues dans la plage-de-révisions" + +msgid "option --onto or --advance is mandatory" +msgstr "une option --onto ou --advance est obligatoire" + +#, c-format +msgid "" +"some rev walking options will be overridden as '%s' bit in 'struct rev_info' " +"will be forced" +msgstr "" +"certaines options de parcours de révs seront surchargées car le bit '%s' " +"dans 'struct rev_info' sera forcé" + +msgid "error preparing revisions" +msgstr "erreur lors de la préparation des révisions" + +msgid "replaying down to root commit is not supported yet!" +msgstr "rejouer jusqu'au commit racine n'est pas encore géré !" + +msgid "replaying merge commits is not supported yet!" +msgstr "rejouer des commits de fusion n'est pas encore géré !" + msgid "" "git rerere [clear | forget <pathspec>... | diff | status | remaining | gc]" msgstr "" @@ -11746,15 +11835,6 @@ msgstr "--prefix exige un argument" msgid "unknown mode for --abbrev-ref: %s" msgstr "mode inconnu pour --abbrev-ref : %s" -msgid "--exclude-hidden cannot be used together with --branches" -msgstr "--exclude-hidden ne peut être utilisé avec --branches" - -msgid "--exclude-hidden cannot be used together with --tags" -msgstr "--exclude-hidden ne peut pas être utilisé avec --tags" - -msgid "--exclude-hidden cannot be used together with --remotes" -msgstr "--exclude-hidden ne peut pas être utilisé avec --remotes" - msgid "this operation must be run in a work tree" msgstr "cette opération doit être effectuée dans un arbre de travail" @@ -12171,10 +12251,6 @@ msgstr "" "afficher les références de l'entrée standard qui ne sont pas dans le dépôt " "local" -#, c-format -msgid "only one of '%s', '%s' or '%s' can be given" -msgstr "les options '%s', '%s' et '%s' sont mutuellement exclusives" - msgid "" "git sparse-checkout (init | list | set | add | reapply | disable | check-" "rules) [<options>]" @@ -13673,28 +13749,28 @@ msgstr "Aucune branche source possible, activation de '--orphan'" #, c-format msgid "" -"If you meant to create a worktree containing a new orphan branch\n" +"If you meant to create a worktree containing a new unborn branch\n" "(branch with no commits) for this repository, you can do so\n" "using the --orphan flag:\n" "\n" " git worktree add --orphan -b %s %s\n" msgstr "" "Si vous vouliez créer un arbre-de-travail contenant une nouvelle branche\n" -"orpheline (une branche sans commit) pour ce dépôt, vous pouvez le faire\n" +"non-née (une branche sans commit) pour ce dépôt, vous pouvez le faire\n" "en utilisant le drapeau --orphan :\n" "\n" " git worktree add --orphan -b %s %s\n" #, c-format msgid "" -"If you meant to create a worktree containing a new orphan branch\n" +"If you meant to create a worktree containing a new unborn branch\n" "(branch with no commits) for this repository, you can do so\n" "using the --orphan flag:\n" "\n" " git worktree add --orphan %s\n" msgstr "" "Si vous vouliez créer un arbre-de-travail contenant une nouvelle branche\n" -"orpheline (une branche sans commit) pour ce dépôt, vous pouvez le faire\n" +"non-née (une branche sans commit) pour ce dépôt, vous pouvez le faire\n" "en utilisant le drapeau --orphan :\n" "\n" " git worktree add --orphan %s\n" @@ -13757,6 +13833,10 @@ msgid "initializing" msgstr "initialisation" #, c-format +msgid "could not find created worktree '%s'" +msgstr "impossible de trouver l'arbre-de-travail créé '%s'" + +#, c-format msgid "Preparing worktree (new branch '%s')" msgstr "Préparation de l'arbre de travail (nouvelle branche '%s')" @@ -13797,10 +13877,6 @@ msgstr "" "on arrête ; utilisez 'add -f' pour passe outre ou récupérer le distant en " "premier" -#, c-format -msgid "'%s' and '%s' cannot be used together" -msgstr "'%s' et '%s' ne peuvent pas être utilisées ensemble" - msgid "checkout <branch> even if already checked out in other worktree" msgstr "" "extraire la <branche> même si elle est déjà extraite dans une autre copie de " @@ -13812,8 +13888,8 @@ msgstr "créer une nouvelle branche" msgid "create or reset a branch" msgstr "créer ou réinitialiser une branche" -msgid "create unborn/orphaned branch" -msgstr "créer une branche non née/orpheline" +msgid "create unborn branch" +msgstr "créer une branche non née" msgid "populate the new working tree" msgstr "remplissage de la nouvelle copie de travail" @@ -13835,11 +13911,9 @@ msgid "options '%s', '%s', and '%s' cannot be used together" msgstr "les options '%s', '%s' et '%s' ne peuvent pas être utilisées ensemble" #, c-format -msgid "options '%s', and '%s' cannot be used together" -msgstr "les options '%s' et '%s' ne peuvent pas être utilisées ensemble" - -msgid "<commit-ish>" -msgstr "<commit-esque>" +msgid "option '%s' and commit-ish cannot be used together" +msgstr "" +"l'option '%s' et des commit-esques ne peuvent pas être utilisés ensemble" msgid "added with --lock" msgstr "ajouté avec --lock" @@ -14480,6 +14554,11 @@ msgstr "Empaqueter les objets non-empaquetés d'un dépôt" msgid "Create, list, delete refs to replace objects" msgstr "Créer, lister, supprimer des référence pour remplacer des objets" +msgid "EXPERIMENTAL: Replay commits on a new base, works with bare repos too" +msgstr "" +"EXPÉRIMENTAL ; rejoue des commits sur une nouvelle base, fonctionne aussi " +"avec les dépôts nus" + msgid "Generates a summary of pending changes" msgstr "Générer une résumé des modifications en attentes" @@ -14722,6 +14801,35 @@ msgstr "Un outil pour gérer les grands dépôts Git" msgid "commit-graph file is too small" msgstr "le graphe de commit est trop petit" +msgid "commit-graph oid fanout chunk is wrong size" +msgstr "" +"le tronçon de distribution d'oid du graphe de commit n'a pas la bonne taille" + +msgid "commit-graph fanout values out of order" +msgstr "les valeurs de distribution du graphe de commit sont désordonnées" + +msgid "commit-graph OID lookup chunk is the wrong size" +msgstr "" +"le tronçon de recherche de l'OID du graphe de commits n'a pas la bonne taille" + +msgid "commit-graph commit data chunk is wrong size" +msgstr "le tronçon de données du graphe de commit n'a pas la bonne taille" + +msgid "commit-graph generations chunk is wrong size" +msgstr "le tronçon des générations du graphe de commit n'a pas la bonne taille" + +msgid "commit-graph changed-path index chunk is too small" +msgstr "" +"le tronçon d'index des chemins modifiés du graphe de commit est trop petit" + +#, c-format +msgid "" +"ignoring too-small changed-path chunk (%<PRIuMAX> < %<PRIuMAX>) in commit-" +"graph file" +msgstr "" +"tronçon de chemin modifié dans le fichier de graphe de commits trop petit " +"((%<PRIuMAX> < %<PRIuMAX>)) ignoré" + #, c-format msgid "commit-graph signature %X does not match signature %X" msgstr "" @@ -14741,6 +14849,21 @@ msgstr "" msgid "commit-graph file is too small to hold %u chunks" msgstr "le graphe de commit est trop petit pour contenir %u tronçons" +msgid "commit-graph required OID fanout chunk missing or corrupted" +msgstr "" +"le tronçon de distribution des OID requis du graphe de commits est manquant " +"ou corrompu" + +msgid "commit-graph required OID lookup chunk missing or corrupted" +msgstr "" +"le tronçon de recherche OID requis par le graphe de commits est manquant ou " +"corrompu" + +msgid "commit-graph required commit data chunk missing or corrupted" +msgstr "" +"le tronçon d'étalement OID requis par le graphe de commits est manquant ou " +"corrompu" + msgid "commit-graph has no base graphs chunk" msgstr "le graphe de commit n'a pas de tronçon de graphes de base" @@ -14754,6 +14877,9 @@ msgstr "la chaîne de graphe de commit ne correspond pas" msgid "commit count in base graph too high: %<PRIuMAX>" msgstr "nombre de commits dans le graphe de base trop haut : %<PRIuMAX>" +msgid "commit-graph chain file too small" +msgstr "la chaine du graphe de commit est trop petite" + #, c-format msgid "invalid commit-graph chain: line '%s' not a hash" msgstr "" @@ -14781,6 +14907,9 @@ msgstr "" "les données de génération de débordement du graphe de commits sont trop " "petites" +msgid "commit-graph extra-edges pointer out of bounds" +msgstr "pointeur hors-gamme d'arêtes supplémentaires du graphe de commits" + msgid "Loading known commits in commit graph" msgstr "Lecture des commits connus dans un graphe de commit" @@ -15961,6 +16090,10 @@ msgstr "" "Valeur inconnue pour la variable de configuration 'diff.submodule' : '%s'" #, c-format +msgid "unknown value for config '%s': %s" +msgstr "valeur inconnue pour la config '%s' : %s" + +#, c-format msgid "" "Found errors in 'diff.dirstat' config variable:\n" "%s" @@ -16042,13 +16175,6 @@ msgstr "mauvais argument --color-moved : %s" msgid "invalid mode '%s' in --color-moved-ws" msgstr "mode invalide '%s' dans --color-moved-ws" -msgid "" -"option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and " -"\"histogram\"" -msgstr "" -"l'option diff-algorithm accept \"myers\", \"minimal\", \"patience\" et " -"\"histogram\"" - #, c-format msgid "invalid argument to %s" msgstr "argument invalide pour %s" @@ -16092,8 +16218,8 @@ msgstr "--stat pour traitement automatique" msgid "output only the last line of --stat" msgstr "afficher seulement la dernière ligne de --stat" -msgid "<param1,param2>..." -msgstr "<param1,param2>..." +msgid "<param1>,<param2>..." +msgstr "<param1>,<param2>..." msgid "" "output the distribution of relative amount of changes for each sub-directory" @@ -16104,8 +16230,8 @@ msgstr "" msgid "synonym for --dirstat=cumulative" msgstr "synonyme pour --dirstat=cumulative" -msgid "synonym for --dirstat=files,param1,param2..." -msgstr "synonyme pour --dirstat=files,param1,param2..." +msgid "synonym for --dirstat=files,<param1>,<param2>..." +msgstr "synonyme pour --dirstat=files,<param1>,<param2>..." msgid "warn if changes introduce conflict markers or whitespace errors" msgstr "" @@ -16293,12 +16419,6 @@ msgid "generate diff using the \"histogram diff\" algorithm" msgstr "" "générer un diff en utilisant l'algorithme de différence \"histogramme\"" -msgid "<algorithm>" -msgstr "<algorithme>" - -msgid "choose a diff algorithm" -msgstr "choisir un algorithme de différence" - msgid "<text>" msgstr "<texte>" @@ -17808,6 +17928,13 @@ msgstr "impossible de lire le cache" msgid "multi-pack-index OID fanout is of the wrong size" msgstr "l'étalement de l'OID d'index multi-paquet n'a pas la bonne taille" +#, c-format +msgid "" +"oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]" +msgstr "" +"étalement oid en désordre : étalement[%d] = %<PRIx32> > %<PRIx32> = " +"étalement[%d]" + msgid "multi-pack-index OID lookup chunk is the wrong size" msgstr "" "le tronçon de recherche de l'OID d'index multi-paquet n'a pas la bonne taille" @@ -17868,6 +17995,13 @@ msgstr "" msgid "bad pack-int-id: %u (%u total packs)" msgstr "mauvais pack-int-id : %u (%u paquets au total)" +msgid "MIDX does not contain the BTMP chunk" +msgstr "le MIDX ne contient pas de tronçon BTMP" + +#, c-format +msgid "could not load bitmapped pack %<PRIu32>" +msgstr "impossible d'ouvrir le paquet bitmappé %<PRIu32>" + msgid "multi-pack-index stores a 64-bit offset, but off_t is too small" msgstr "" "l'index multi-paquet stocke un décalage en 64-bit, mais off_t est trop petit" @@ -17953,13 +18087,6 @@ msgstr "somme de contrôle incorrecte" msgid "Looking for referenced packfiles" msgstr "Recherche de fichiers paquets référencés" -#, c-format -msgid "" -"oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]" -msgstr "" -"étalement oid en désordre : étalement[%d] = %<PRIx32> > %<PRIx32> = " -"étalement[%d]" - msgid "the midx contains no oid" msgstr "le midx ne contient aucun oid" @@ -18486,6 +18613,9 @@ msgstr "l'index inverse requis manque dans l'index multi-paquet" msgid "could not open pack %s" msgstr "impossible d'ouvrir le paquet '%s'" +msgid "could not determine MIDX preferred pack" +msgstr "impossible de déterminer le paquet préféré de MIDX" + #, c-format msgid "preferred pack (%s) is invalid" msgstr "le paquet préféré (%s) est invalide" @@ -18508,6 +18638,10 @@ msgid "corrupt ewah bitmap: truncated header for bitmap of commit \"%s\"" msgstr "bitmap ewah corrompue : entête tronqué pour la bitmap du commit '%s'" #, c-format +msgid "unable to load pack: '%s', disabling pack-reuse" +msgstr "impossible de charger le paquet : '%s', pack-reuse désactivé" + +#, c-format msgid "object '%s' not found in type bitmaps" msgstr "objet '%s' non trouvé dans les bitmaps de type" @@ -18599,6 +18733,9 @@ msgid "multi-pack-index reverse-index chunk is the wrong size" msgstr "" "le tronçon d'index inversé de l'index multi-paquet n'a pas la bonne taille" +msgid "could not determine preferred pack" +msgstr "impossible de déterminer le paquet préféré" + msgid "cannot both write and verify reverse index" msgstr "impossible de lire et vérifier à la fois l'index inverse" @@ -18663,10 +18800,6 @@ msgid "%s expects a non-negative integer value with an optional k/m/g suffix" msgstr "%s attend une valeur entière non négative avec une suffixe k/m/g" #, c-format -msgid "%s is incompatible with %s" -msgstr "%s est incompatible avec %s" - -#, c-format msgid "ambiguous option: %s (could be --%s%s or --%s%s)" msgstr "option ambigüe : %s (devrait être --%s%s ou --%s%s)" @@ -18995,10 +19128,6 @@ msgid "unable to add '%s' to index" msgstr "impossible d'ajouter '%s' à l'index" #, c-format -msgid "unable to stat '%s'" -msgstr "fstat de '%s' impossible" - -#, c-format msgid "'%s' appears as both a file and as a directory" msgstr "'%s' existe à la fois comme un fichier et un répertoire" @@ -19575,10 +19704,6 @@ msgid "cannot process '%s' and '%s' at the same time" msgstr "impossible de traiter '%s' et '%s' en même temps" #, c-format -msgid "could not remove reference %s" -msgstr "impossible de supprimer la référence %s" - -#, c-format msgid "could not delete reference %s: %s" msgstr "impossible de supprimer la référence %s : %s" @@ -19773,7 +19898,7 @@ msgid "" "Neither worked, so we gave up. You must fully qualify the ref." msgstr "" "La destination que vous avez fournie n'est pas un nom de référence complète\n" -"(c'est-à -dire commençant par \"ref/\"). Essai d'approximation par :\n" +"(c'est-à -dire commençant par \"refs/\"). Essai d'approximation par :\n" "\n" "- Recherche d'une référence qui correspond à '%s' sur le serveur distant.\n" "- Vérification si la <source> en cours de poussée ('%s')\n" @@ -20961,6 +21086,9 @@ msgid "Autostash exists; creating a new stash entry." msgstr "" "Un remisage automatique existe ; création d'une nouvelle entrée de remisage." +msgid "autostash reference is a symref" +msgstr "la référence d'auto-remisage est une symref" + msgid "could not detach HEAD" msgstr "impossible de détacher HEAD" @@ -21280,6 +21408,10 @@ msgid "invalid initial branch name: '%s'" msgstr "nom de branche initiale invalide : '%s'" #, c-format +msgid "re-init: ignored --initial-branch=%s" +msgstr "re-initialisation : --initial-branch=%s ignoré" + +#, c-format msgid "unable to handle file type %d" msgstr "impossible de traiter le fichier de type %d" @@ -21290,15 +21422,17 @@ msgstr "impossible de déplacer %s vers %s" msgid "attempt to reinitialize repository with different hash" msgstr "essai de réinitialisation du dépôt avec une empreinte différente" +msgid "" +"attempt to reinitialize repository with different reference storage format" +msgstr "" +"essai de réinitialisation du dépôt avec un format de stockage de références " +"différent" + #, c-format msgid "%s already exists" msgstr "%s existe déjà " #, c-format -msgid "re-init: ignored --initial-branch=%s" -msgstr "re-initialisation : --initial-branch=%s ignoré" - -#, c-format msgid "Reinitialized existing shared Git repository in %s%s\n" msgstr "Dépôt Git existant partagé réinitialisé dans %s%s\n" @@ -21567,12 +21701,6 @@ msgstr "effacer l'arbre de cache avant chaque itération" msgid "number of entries in the cache tree to invalidate (default 0)" msgstr "nombre d'entrées dans l'arbre de cache à invalider (par défaut, 0)" -msgid "unhandled options" -msgstr "options non gérées" - -msgid "error preparing revisions" -msgstr "erreur lors de la préparation des révisions" - #, c-format msgid "commit %s is not marked reachable" msgstr "le commit %s n'est pas marqué joignable" @@ -21732,9 +21860,6 @@ msgstr "" msgid "invalid remote service path" msgstr "chemin de service distant invalide" -msgid "operation not supported by protocol" -msgstr "option non supportée par le protocole" - #, c-format msgid "can't connect to subservice %s" msgstr "impossible de se connecter au sous-service %s" @@ -21867,10 +21992,6 @@ msgid "support for protocol v2 not implemented yet" msgstr "le support du protocole v2 n'est pas encore implanté" #, c-format -msgid "unknown value for config '%s': %s" -msgstr "valeur inconnue pour la config '%s' : %s" - -#, c-format msgid "transport '%s' not allowed" msgstr "transport '%s' non permis" @@ -21924,6 +22045,9 @@ msgid "could not retrieve server-advertised bundle-uri list" msgstr "" "impossible de récupérer la liste de bundle-uris annoncée par le serveur" +msgid "operation not supported by protocol" +msgstr "option non supportée par le protocole" + msgid "too-short tree object" msgstr "objet arbre trop court" @@ -22773,6 +22897,10 @@ msgstr "de plus, votre index contient des modifications non validées." msgid "cannot %s: Your index contains uncommitted changes." msgstr "%s impossible : votre index contient des modifications non validées." +#, c-format +msgid "unknown style '%s' given for '%s'" +msgstr "style inconnu '%s' pour '%s'" + msgid "" "Error: Your local changes to the following files would be overwritten by " "merge" @@ -23174,6 +23302,61 @@ msgstr "%s sauté avec un suffix de sauvegarde '%s'.\n" msgid "Do you really want to send %s? [y|N]: " msgstr "Souhaitez-vous réellement envoyer %s ?[y|N] : " +#~ msgid "-x and -X cannot be used together" +#~ msgstr "-x et -X ne peuvent pas être utilisés ensemble" + +#~ msgid "" +#~ "--bundle-uri is incompatible with --depth, --shallow-since, and --shallow-" +#~ "exclude" +#~ msgstr "" +#~ "--bundle-uri est incompatible avec --depth, --shallow-since, et --shallow-" +#~ "exclude" + +#~ msgid "--merge-base is incompatible with --stdin" +#~ msgstr "--merge-base est incompatible avec --stdin" + +#~ msgid "" +#~ "apply options are incompatible with rebase.autoSquash. Consider adding --" +#~ "no-autosquash" +#~ msgstr "" +#~ "les options d'application sont incompatibles avec rebase.autoSquash. " +#~ "Considérez l'ajout de --no-autosquash" + +#~ msgid "--exclude-hidden cannot be used together with --branches" +#~ msgstr "--exclude-hidden ne peut être utilisé avec --branches" + +#~ msgid "--exclude-hidden cannot be used together with --tags" +#~ msgstr "--exclude-hidden ne peut pas être utilisé avec --tags" + +#~ msgid "--exclude-hidden cannot be used together with --remotes" +#~ msgstr "--exclude-hidden ne peut pas être utilisé avec --remotes" + +#, c-format +#~ msgid "only one of '%s', '%s' or '%s' can be given" +#~ msgstr "les options '%s', '%s' et '%s' sont mutuellement exclusives" + +#, c-format +#~ msgid "'%s' and '%s' cannot be used together" +#~ msgstr "'%s' et '%s' ne peuvent pas être utilisées ensemble" + +#, c-format +#~ msgid "options '%s', and '%s' cannot be used together" +#~ msgstr "les options '%s' et '%s' ne peuvent pas être utilisées ensemble" + +#~ msgid "<commit-ish>" +#~ msgstr "<commit-esque>" + +#, c-format +#~ msgid "%s is incompatible with %s" +#~ msgstr "%s est incompatible avec %s" + +#, c-format +#~ msgid "could not remove reference %s" +#~ msgstr "impossible de supprimer la référence %s" + +#~ msgid "unhandled options" +#~ msgstr "options non gérées" + #, c-format #~ msgid "options '%s=%s' and '%s=%s' cannot be used together" #~ msgstr "" @@ -7,8 +7,8 @@ msgid "" msgstr "" "Project-Id-Version: Git\n" "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n" -"POT-Creation-Date: 2023-11-12 20:04+0700\n" -"PO-Revision-Date: 2023-11-12 20:30+0700\n" +"POT-Creation-Date: 2024-02-16 09:36+0700\n" +"PO-Revision-Date: 2024-02-16 10:45+0700\n" "Last-Translator: Bagas Sanjaya <bagasdotme@gmail.com>\n" "Language-Team: Indonesian\n" "Language: id\n" @@ -909,7 +909,7 @@ msgid "unclosed quote" msgstr "tanda kutip tak ditutup" #: alias.c builtin/cat-file.c builtin/notes.c builtin/prune-packed.c -#: builtin/receive-pack.c builtin/tag.c +#: builtin/receive-pack.c builtin/tag.c t/helper/test-pkt-line.c msgid "too many arguments" msgstr "terlalu banyak argumen" @@ -924,12 +924,13 @@ msgid "unrecognized whitespace ignore option '%s'" msgstr "opsi abai spasi putih tidak dikenal '%s'" #: apply.c archive.c builtin/add.c builtin/branch.c builtin/checkout-index.c -#: builtin/checkout.c builtin/clone.c builtin/commit.c builtin/describe.c -#: builtin/diff-tree.c builtin/difftool.c builtin/fast-export.c builtin/fetch.c -#: builtin/help.c builtin/index-pack.c builtin/init-db.c builtin/log.c -#: builtin/ls-files.c builtin/merge-base.c builtin/merge.c -#: builtin/pack-objects.c builtin/push.c builtin/rebase.c builtin/repack.c -#: builtin/reset.c builtin/rev-list.c builtin/show-branch.c builtin/stash.c +#: builtin/checkout.c builtin/clean.c builtin/clone.c builtin/commit.c +#: builtin/describe.c builtin/diff-tree.c builtin/difftool.c +#: builtin/fast-export.c builtin/fetch.c builtin/help.c builtin/index-pack.c +#: builtin/init-db.c builtin/log.c builtin/ls-files.c builtin/merge-base.c +#: builtin/merge-tree.c builtin/merge.c builtin/pack-objects.c builtin/rebase.c +#: builtin/repack.c builtin/replay.c builtin/reset.c builtin/rev-list.c +#: builtin/rev-parse.c builtin/show-branch.c builtin/stash.c #: builtin/submodule--helper.c builtin/tag.c builtin/worktree.c parse-options.c #: range-diff.c revision.c #, c-format @@ -1754,6 +1755,11 @@ msgstr "Opsi --output tak diharapkan" #: archive.c #, c-format +msgid "extra command line parameter '%s'" +msgstr "parameter konfigurasi tambahan: '%s'" + +#: archive.c +#, c-format msgid "Unknown archive format '%s'" msgstr "Format arsip tidak dikenal '%s'" @@ -1808,6 +1814,17 @@ msgstr "mengabaikan blob gitattributes '%s' yang terlalu besar" msgid "bad --attr-source or GIT_ATTR_SOURCE" msgstr "--attr-source atau GIT_ATTR_SOURCE jelek" +#: attr.c read-cache.c +#, c-format +msgid "unable to stat '%s'" +msgstr "tidak dapat men-stat '%s'" + +#: bisect.c builtin/cat-file.c builtin/index-pack.c builtin/notes.c +#: builtin/pack-objects.c combine-diff.c rerere.c +#, c-format +msgid "unable to read %s" +msgstr "tidak dapat membaca %s" + #: bisect.c #, c-format msgid "Badly quoted content in file '%s': %s" @@ -2359,8 +2376,8 @@ msgid "bad action '%s' for '%s'" msgstr "tindakan jelek '%s' untuk '%s'" #: builtin/am.c builtin/blame.c builtin/fetch.c builtin/pack-objects.c -#: builtin/pull.c diff-merges.c gpg-interface.c ls-refs.c parallel-checkout.c -#: sequencer.c setup.c +#: builtin/pull.c config.c diff-merges.c gpg-interface.c ls-refs.c +#: parallel-checkout.c sequencer.c setup.c #, c-format msgid "invalid value for '%s': '%s'" msgstr "nilai tidak valid untuk '%s': '%s'" @@ -2523,8 +2540,7 @@ msgstr "git write-tree gagal menulis sebuah pohon" msgid "applying to an empty history" msgstr "menerapkan ke sebuah riwayat kosong" -#: builtin/am.c builtin/commit.c builtin/merge.c sequencer.c -#: t/helper/test-fast-rebase.c +#: builtin/am.c builtin/commit.c builtin/merge.c builtin/replay.c sequencer.c msgid "failed to write commit object" msgstr "gagal menulis objek komit" @@ -2710,8 +2726,9 @@ msgid "n" msgstr "n" #: builtin/am.c builtin/branch.c builtin/bugreport.c builtin/cat-file.c -#: builtin/diagnose.c builtin/for-each-ref.c builtin/ls-files.c -#: builtin/ls-tree.c builtin/replace.c builtin/tag.c builtin/verify-tag.c +#: builtin/clone.c builtin/diagnose.c builtin/for-each-ref.c builtin/init-db.c +#: builtin/ls-files.c builtin/ls-tree.c builtin/replace.c builtin/tag.c +#: builtin/verify-tag.c msgid "format" msgstr "format" @@ -3406,12 +3423,13 @@ msgstr "tidak dapat mencari objek komit untuk '%s'" #: builtin/branch.c #, c-format -msgid "" -"the branch '%s' is not fully merged.\n" -"If you are sure you want to delete it, run 'git branch -D %s'" -msgstr "" -"cabang '%s' belum sepenuhnya tergabung.\n" -"kalau Anda yakin ingin menghapusnya, jalankan 'git branch -D %s'" +msgid "the branch '%s' is not fully merged" +msgstr "cabang '%s' belum sepenuhnya digabungkan" + +#: builtin/branch.c +#, c-format +msgid "If you are sure you want to delete it, run 'git branch -D %s'" +msgstr "Jika anda yakin untuk menghapusnya, lakukan 'git branch -D %s'" #: builtin/branch.c msgid "update of config-file failed" @@ -4443,7 +4461,7 @@ msgstr "Tidak dapat melakukan reflog untuk '%s': %s\n" msgid "HEAD is now at" msgstr "HEAD sekarang berada di" -#: builtin/checkout.c builtin/clone.c t/helper/test-fast-rebase.c +#: builtin/checkout.c builtin/clone.c msgid "unable to update HEAD" msgstr "tidak dapat memperbarui HEAD" @@ -4714,8 +4732,8 @@ msgid "new-branch" msgstr "cabang baru" #: builtin/checkout.c -msgid "new unparented branch" -msgstr "cabang baru tanpa induk" +msgid "new unborn branch" +msgstr "cabang yatim baru" #: builtin/checkout.c builtin/merge.c msgid "update ignored files (default)" @@ -4783,7 +4801,7 @@ msgstr "" msgid "you must specify path(s) to restore" msgstr "Anda harus sebutkan jalur untuk dipulihkan" -#: builtin/checkout.c builtin/clone.c builtin/remote.c +#: builtin/checkout.c builtin/clone.c builtin/remote.c builtin/replay.c #: builtin/submodule--helper.c builtin/worktree.c msgid "branch" msgstr "cabang" @@ -5027,10 +5045,6 @@ msgstr "" "clean.requireForce asal ke true dan baik -i, -n, atau -f tidak diberikan; " "menolak membersihkan" -#: builtin/clean.c -msgid "-x and -X cannot be used together" -msgstr "-x dan -X tidak dapat digunakan bersamaan" - #: builtin/clone.c msgid "git clone [<options>] [--] <repo> [<dir>]" msgstr "git clone [<opsi>] [--] <repo> [<direktori>]" @@ -5122,6 +5136,7 @@ msgid "create a shallow clone since a specific time" msgstr "buat klon dangkal sejak waktu yang disebutkan" #: builtin/clone.c builtin/fetch.c builtin/pull.c builtin/rebase.c +#: builtin/replay.c msgid "revision" msgstr "revisi" @@ -5149,6 +5164,10 @@ msgstr "direktori git" msgid "separate git dir from working tree" msgstr "pisahkan direktori git dari pohon kerja" +#: builtin/clone.c builtin/init-db.c +msgid "specify the reference format to use" +msgstr "sebutkan format referensi untuk digunakan" + #: builtin/clone.c msgid "key=value" msgstr "kunci=nilai" @@ -5299,13 +5318,10 @@ msgstr "Terlalu banyak argumen." msgid "You must specify a repository to clone." msgstr "Anda harus sebutkan repositori untuk diklon." -#: builtin/clone.c -msgid "" -"--bundle-uri is incompatible with --depth, --shallow-since, and --shallow-" -"exclude" -msgstr "" -"--bundle-uri tidak kompatibel dengan --depth, --shallow-since, dan --shallow-" -"exclude" +#: builtin/clone.c builtin/init-db.c setup.c +#, c-format +msgid "unknown ref storage format '%s'" +msgstr "format penyimpanan referensi tidak dikenal '%s'" #: builtin/clone.c #, c-format @@ -5471,13 +5487,13 @@ msgid "" "--stdin-commits]\n" " [--changed-paths] [--[no-]max-new-filters <n>] [--" "[no-]progress]\n" -" <split options>" +" <split-options>" msgstr "" "git commit-graph write [--object-dir <direktori>] [--append]\n" " [--split[=<strategi>]] [--reachable | --stdin-packs | " "--stdin-commits]\n" -" [--changed-paths] [--[no-]max-new-filters <n>] [--[-" -"no-]progress]\n" +" [--changed-paths] [--[no-]max-new-filters <n>] [--" +"[no-]progress]\n" " <opsi pemisahan>" #: builtin/commit-graph.c builtin/fetch.c builtin/log.c builtin/repack.c @@ -8402,6 +8418,11 @@ msgstr "tidak dapat membaca pohon (%s)" #: builtin/grep.c #, c-format +msgid "unable to read tree %s" +msgstr "tidak dapat membaca pohon %s" + +#: builtin/grep.c +#, c-format msgid "unable to grep from object of type %s" msgstr "tidak dapan men-grep dari objek dengan tipe %s" @@ -8929,11 +8950,6 @@ msgstr "inkonsistensi inflate serius" msgid "SHA1 COLLISION FOUND WITH %s !" msgstr "TUMBUKAN SHA1 DITEMUKAN DENGAN %s !" -#: builtin/index-pack.c builtin/pack-objects.c -#, c-format -msgid "unable to read %s" -msgstr "tidak dapat membaca %s" - #: builtin/index-pack.c #, c-format msgid "cannot read existing object info %s" @@ -9111,11 +9127,13 @@ msgstr "kesalahan fsck dalam objek paket" msgid "" "git init [-q | --quiet] [--bare] [--template=<template-directory>]\n" " [--separate-git-dir <git-dir>] [--object-format=<format>]\n" +" [--ref-format=<format>]\n" " [-b <branch-name> | --initial-branch=<branch-name>]\n" " [--shared[=<permissions>]] [<directory>]" msgstr "" "git init [-q | --quiet] [--bare] [--template=<direktori templat>]\n" " [--separate-git-dir <direktori git>] [--object-format=<format>]\n" +"\t [--ref-format=<format>]\n" " [-b <nama cabang> | --initial-branch=<nama cabang>]\n" " [--shared[=<perizinan>]] [<direktori>]" @@ -9280,7 +9298,7 @@ msgstr "" "lacak evolusi rentang baris <awal>,<akhir> atau fungsi :<nama fungsi> dalam " "<berkas>" -#: builtin/log.c builtin/shortlog.c bundle.c +#: builtin/log.c builtin/replay.c builtin/shortlog.c bundle.c #, c-format msgid "unrecognized argument: %s" msgstr "argumen tidak dikenal: %s" @@ -10036,6 +10054,14 @@ msgstr "" "git merge-file [<opsi>] [-L <nama 1> [-L <asli> [-L <nama 2>]]] <berkas 1> " "<berkas asli> <berkas 2>" +#: builtin/merge-file.c diff.c +msgid "" +"option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and " +"\"histogram\"" +msgstr "" +"opsi diff-algorithm terima \"myers\", \"minimal\", \"patience\" dan " +"\"histogram\"" + #: builtin/merge-file.c msgid "send results to standard output" msgstr "kirim hasil ke keluaran standar" @@ -10064,6 +10090,14 @@ msgstr "untuk konflik, gunakan versi mereka" msgid "for conflicts, use a union version" msgstr "untuk konflik, gunakan versi bersatu" +#: builtin/merge-file.c diff.c +msgid "<algorithm>" +msgstr "<algoritma>" + +#: builtin/merge-file.c diff.c +msgid "choose a diff algorithm" +msgstr "pilih algoritma diff" + #: builtin/merge-file.c msgid "for conflicts, use this marker size" msgstr "untuk konflik, gunakan ukuran penanda ini" @@ -10181,10 +10215,6 @@ msgstr "--trivial-merge tidak kompatibel dengan semua opsi lainnya" msgid "unknown strategy option: -X%s" msgstr "opsi strategi tidak dikenal: -X%s" -#: builtin/merge-tree.c -msgid "--merge-base is incompatible with --stdin" -msgstr "--merge-base tidak kompatibel dengan --stdin" - #: builtin/merge-tree.c builtin/notes.c #, c-format msgid "malformed input line: '%s'." @@ -10342,7 +10372,7 @@ msgstr "'%s' tidak menunjuk pada sebuah komit" msgid "Bad branch.%s.mergeoptions string: %s" msgstr "Untai branch.%s.mergeoptions jelek: %s" -#: builtin/merge.c builtin/stash.c merge-recursive.c +#: builtin/merge.c merge-recursive.c msgid "Unable to write index." msgstr "Tidak dapat menulis indeks." @@ -10350,7 +10380,7 @@ msgstr "Tidak dapat menulis indeks." msgid "Not handling anything other than two heads merge." msgstr "Tak tangani apapun selain penggabungan dua kepala." -#: builtin/merge.c t/helper/test-fast-rebase.c +#: builtin/merge.c #, c-format msgid "unable to write %s" msgstr "tidak dapat menulis %s" @@ -11365,6 +11395,11 @@ msgstr "ketidakkonsistenan dengan hitungan delta" #: builtin/pack-objects.c #, c-format +msgid "invalid pack.allowPackReuse value: '%s'" +msgstr "nilai pack.allowPackReuse tidak valid: '%s'" + +#: builtin/pack-objects.c +#, c-format msgid "" "value of uploadpack.blobpackfileuri must be of the form '<object-hash> <pack-" "hash> <uri>' (got '%s')" @@ -11694,10 +11729,10 @@ msgstr "Menghitung objek" #, c-format msgid "" "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-" -"reused %<PRIu32>" +"reused %<PRIu32> (from %<PRIuMAX>)" msgstr "" "Total %<PRIu32> (delta %<PRIu32>), digunakan ulang %<PRIu32> (delta " -"%<PRIu32>), pak yang digunakan ulang %<PRIu32>" +"%<PRIu32>), pak yang digunakan ulang %<PRIu32> (dari %<PRIuMAX>)" #: builtin/pack-redundant.c msgid "" @@ -12816,7 +12851,7 @@ msgid "The --edit-todo action can only be used during interactive rebase." msgstr "" "Aksi --edit-todo hanya dapat digunakan selama pendasaran ulang interaktif." -#: builtin/rebase.c t/helper/test-fast-rebase.c +#: builtin/rebase.c msgid "Cannot read HEAD" msgstr "Tidak dapat membaca HEAD" @@ -12864,14 +12899,6 @@ msgstr "tombol `C' harap nilai numerik" #: builtin/rebase.c msgid "" -"apply options are incompatible with rebase.autoSquash. Consider adding --no-" -"autosquash" -msgstr "" -"opsi penerapan tidak kompatibel dengan rebase.autoSquash. " -"Pertimbangkanmenambahkan --no-autosquash" - -#: builtin/rebase.c -msgid "" "apply options are incompatible with rebase.rebaseMerges. Consider adding --" "no-rebase-merges" msgstr "" @@ -13368,10 +13395,10 @@ msgid_plural "" "Note: Some branches outside the refs/remotes/ hierarchy were not removed;\n" "to delete them, use:" msgstr[0] "" -"Catatan: Sebuah cabang diluar hierarki refs/remotes tidak dihapus;\n" +"Catatan: Sebuah cabang diluar hierarki refs/remotes/ tidak dihapus;\n" "untuk menghapusnya, gunakan:" msgstr[1] "" -"Catatan: Beberapa cabang diluar hierarki refs/remotes tidak dihapus;\n" +"Catatan: Beberapa cabang diluar hierarki refs/remotes/ tidak dihapus;\n" "untuk menghapusnya, gunakan:" #: builtin/remote.c @@ -14108,6 +14135,94 @@ msgstr "--convert-graft-file tidak mengambil argumen" msgid "only one pattern can be given with -l" msgstr "hanya satu pola yang dapat diberikan dengan -l" +#: builtin/replay.c +msgid "need some commits to replay" +msgstr "butuh beberapa komit untuk dimainkan ulang" + +#: builtin/replay.c +msgid "--onto and --advance are incompatible" +msgstr "--onto dan --advance tidak kompatibel" + +#: builtin/replay.c +msgid "all positive revisions given must be references" +msgstr "semua revisi positif yang diberikan haruslah referensi" + +#: builtin/replay.c +msgid "argument to --advance must be a reference" +msgstr "argumen pada --advance harus sebuah referensi" + +#: builtin/replay.c +msgid "" +"cannot advance target with multiple sources because ordering would be ill-" +"defined" +msgstr "" +"tidak dapat memajukan target dengan banyak sumber karena pengurutannya akan " +"menjadi tidak jelas" + +#: builtin/replay.c +msgid "" +"cannot implicitly determine whether this is an --advance or --onto operation" +msgstr "" +"tidak dapat menentukan secara tidak langsung apakah ini operasi --advance " +"atau --onto" + +#: builtin/replay.c +msgid "" +"cannot advance target with multiple source branches because ordering would " +"be ill-defined" +msgstr "" +"tidak dapat memajukan target dengan banyak cabang sumber karena " +"pengurutannya akan menjadi tidak jelas" + +#: builtin/replay.c +msgid "cannot implicitly determine correct base for --onto" +msgstr "tidak dapat menentukan secara tidak langsung dasar untuk --onto" + +#: builtin/replay.c +msgid "" +"(EXPERIMENTAL!) git replay ([--contained] --onto <newbase> | --advance " +"<branch>) <revision-range>..." +msgstr "" +"(EKSPERIMENTAL!) git replay ([--contained] --onto <dasar baru> | --advance " +"<cabang>) <rentang revisi>..." + +#: builtin/replay.c +msgid "make replay advance given branch" +msgstr "buat pemainan ulang memajukan caban yang diberikan" + +#: builtin/replay.c +msgid "replay onto given commit" +msgstr "mainkan ulang pada komit yang diberikan" + +#: builtin/replay.c +msgid "advance all branches contained in revision-range" +msgstr "majukan semua cabang yang berada pada rentang komit" + +#: builtin/replay.c +msgid "option --onto or --advance is mandatory" +msgstr "opsi --onto atau --advance diwajibkan" + +#: builtin/replay.c +#, c-format +msgid "" +"some rev walking options will be overridden as '%s' bit in 'struct rev_info' " +"will be forced" +msgstr "" +"beberapa opsi jalan revisi akan ditimpa oleh karena bit '%s' di 'struct " +"rev_info' akan dipaksakan" + +#: builtin/replay.c +msgid "error preparing revisions" +msgstr "kesalahan menyiapkan revisi" + +#: builtin/replay.c +msgid "replaying down to root commit is not supported yet!" +msgstr "memainkan ulang ke komit akar belum didukung!" + +#: builtin/replay.c +msgid "replaying merge commits is not supported yet!" +msgstr "memainkan ulang komit penggabungan belum didukung!" + #: builtin/rerere.c msgid "" "git rerere [clear | forget <pathspec>... | diff | status | remaining | gc]" @@ -14370,18 +14485,6 @@ msgstr "--prefix butuh sebuah argumen" msgid "unknown mode for --abbrev-ref: %s" msgstr "mode untuk --abbrev-ref tidak dikenal: %s" -#: builtin/rev-parse.c revision.c -msgid "--exclude-hidden cannot be used together with --branches" -msgstr "--exclude-hidden tidak dapat digunakan bersamaan dengan --branches" - -#: builtin/rev-parse.c revision.c -msgid "--exclude-hidden cannot be used together with --tags" -msgstr "--exclude-hidden tidak dapat digunakan bersamaan dengan --tags" - -#: builtin/rev-parse.c revision.c -msgid "--exclude-hidden cannot be used together with --remotes" -msgstr "--exclude-hidden tidak dapat digunakan dengan --remotes" - #: builtin/rev-parse.c setup.c msgid "this operation must be run in a work tree" msgstr "operasi ini harus dijalankan di dalam pohon kerja" @@ -14894,11 +14997,6 @@ msgstr "" "perlihatkan referensi dari masukan standar yang tidak ada dalam repositori " "lokal" -#: builtin/show-ref.c -#, c-format -msgid "only one of '%s', '%s' or '%s' can be given" -msgstr "hanya salah satu dari '%s', '%s', dan '%s' dapat diberikan" - #: builtin/sparse-checkout.c msgid "" "git sparse-checkout (init | list | set | add | reapply | disable | check-" @@ -16720,7 +16818,7 @@ msgstr "Tidak ada cabang sumber yang mungkin, menyimpulkan '--orphan'" #: builtin/worktree.c #, c-format msgid "" -"If you meant to create a worktree containing a new orphan branch\n" +"If you meant to create a worktree containing a new unborn branch\n" "(branch with no commits) for this repository, you can do so\n" "using the --orphan flag:\n" "\n" @@ -16734,7 +16832,7 @@ msgstr "" #: builtin/worktree.c #, c-format msgid "" -"If you meant to create a worktree containing a new orphan branch\n" +"If you meant to create a worktree containing a new unborn branch\n" "(branch with no commits) for this repository, you can do so\n" "using the --orphan flag:\n" "\n" @@ -16814,6 +16912,11 @@ msgstr "menginisialisasi" #: builtin/worktree.c #, c-format +msgid "could not find created worktree '%s'" +msgstr "tidak dapat menemukan pohon kerja yang dibuat '%s'" + +#: builtin/worktree.c +#, c-format msgid "Preparing worktree (new branch '%s')" msgstr "Menyiapkan pohon kerja (cabang baru '%s')" @@ -16859,11 +16962,6 @@ msgstr "" "terlebih dahulu" #: builtin/worktree.c -#, c-format -msgid "'%s' and '%s' cannot be used together" -msgstr "'%s' dan '%s' tidak dapat digunakan bersamaan" - -#: builtin/worktree.c msgid "checkout <branch> even if already checked out in other worktree" msgstr "" "checkout <cabang> bahkan jika sudah di-checkout pada pohon kerja lainnya" @@ -16877,7 +16975,7 @@ msgid "create or reset a branch" msgstr "buat atau setel ulang sebuah cabang" #: builtin/worktree.c -msgid "create unborn/orphaned branch" +msgid "create unborn branch" msgstr "buat cabang belum lahir/yatim" #: builtin/worktree.c @@ -16907,12 +17005,8 @@ msgstr "Opsi '%s', '%s', dan '%s' tidak dapat digunakan bersamaan" #: builtin/worktree.c #, c-format -msgid "options '%s', and '%s' cannot be used together" -msgstr "Opsi '%s', dan '%s' tidak dapat digunakan bersamaan" - -#: builtin/worktree.c -msgid "<commit-ish>" -msgstr "<mirip-komit>" +msgid "option '%s' and commit-ish cannot be used together" +msgstr "opsi '%s' dan mirip-komit tidak dapat digunakan bersamaan" #: builtin/worktree.c msgid "added with --lock" @@ -17715,6 +17809,12 @@ msgid "Create, list, delete refs to replace objects" msgstr "Buat, daftar, hapus referensi untuk mengganti objek" #: command-list.h +msgid "EXPERIMENTAL: Replay commits on a new base, works with bare repos too" +msgstr "" +"EKSPERIMENTAL: Mainkan ulang komit pada dasar baru, dan juga bekerja pada " +"repositori bare" + +#: command-list.h msgid "Generates a summary of pending changes" msgstr "Buat ringkasan perubahan tertunda" @@ -18032,6 +18132,39 @@ msgid "commit-graph file is too small" msgstr "berkas grafik komit terlalu kecil" #: commit-graph.c +msgid "commit-graph oid fanout chunk is wrong size" +msgstr "bingkah oid grafik komit kipas keluar salah ukuran" + +#: commit-graph.c +msgid "commit-graph fanout values out of order" +msgstr "nilai kipas keluar grafik komit tidak berurutan" + +#: commit-graph.c +msgid "commit-graph OID lookup chunk is the wrong size" +msgstr "bingkah OID pencarian grafik komit salah ukuran" + +#: commit-graph.c +msgid "commit-graph commit data chunk is wrong size" +msgstr "bingkah data grafik komit salah ukuran" + +#: commit-graph.c +msgid "commit-graph generations chunk is wrong size" +msgstr "bingkah generasi grafik komit salah ukuran" + +#: commit-graph.c +msgid "commit-graph changed-path index chunk is too small" +msgstr "bingkah indeks grafik komit jalur berubah terlalu kecil" + +#: commit-graph.c +#, c-format +msgid "" +"ignoring too-small changed-path chunk (%<PRIuMAX> < %<PRIuMAX>) in commit-" +"graph file" +msgstr "" +"mengabaikan bingkah jalur berubah yang terlalu kecil (%<PRIuMAX> < " +"%<PRIuMAX>) di dalam berkas grafik komit" + +#: commit-graph.c #, c-format msgid "commit-graph signature %X does not match signature %X" msgstr "tanda tangan grafik komit %X tidak cocok dengan tanda tangan %X" @@ -18052,6 +18185,19 @@ msgid "commit-graph file is too small to hold %u chunks" msgstr "berkas grafik komit terlalu kecil untuk menyimpan %u bingkah" #: commit-graph.c +msgid "commit-graph required OID fanout chunk missing or corrupted" +msgstr "" +"bingkah grafik komit OID kipas keluar yang diperlukan hilang atau rusak" + +#: commit-graph.c +msgid "commit-graph required OID lookup chunk missing or corrupted" +msgstr "bingkah grafik komit OID pencarian yang diperlukan hilang atau rusak" + +#: commit-graph.c +msgid "commit-graph required commit data chunk missing or corrupted" +msgstr "bingkah grafik komit data komit yang diperlukan hilang atau rusak" + +#: commit-graph.c msgid "commit-graph has no base graphs chunk" msgstr "grafik komit tidak punya bingkah grafik dasar" @@ -18069,6 +18215,10 @@ msgid "commit count in base graph too high: %<PRIuMAX>" msgstr "jumlah komit pada grafik dasar terlalu tinggi: %<PRIuMAX>" #: commit-graph.c +msgid "commit-graph chain file too small" +msgstr "berkas rantai grafik komit terlalu kecil" + +#: commit-graph.c #, c-format msgid "invalid commit-graph chain: line '%s' not a hash" msgstr "rantai grafik komit tidak cocok: baris '%s' bukan sebuah hash" @@ -18095,6 +18245,10 @@ msgid "commit-graph overflow generation data is too small" msgstr "data generasi luapan grafik komit terlalu kecil" #: commit-graph.c +msgid "commit-graph extra-edges pointer out of bounds" +msgstr "penunjuk tepi tambahan grafik komit di luar batas" + +#: commit-graph.c msgid "Loading known commits in commit graph" msgstr "Memuat komit yang dikenal di grafik komit" @@ -19505,6 +19659,11 @@ msgstr "" msgid "Unknown value for 'diff.submodule' config variable: '%s'" msgstr "Nilai tidak dikenal untuk variabel konfigurasi 'diff.submodule': '%s'" +#: diff.c transport.c +#, c-format +msgid "unknown value for config '%s': %s" +msgstr "nilai tidak dikenal untuk konfigurasi '%s': %s" + #: diff.c #, c-format msgid "" @@ -19602,14 +19761,6 @@ msgid "invalid mode '%s' in --color-moved-ws" msgstr "mode tidak valid '%s' dalam --color-moved-ws" #: diff.c -msgid "" -"option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and " -"\"histogram\"" -msgstr "" -"opsi diff-algorithm terima \"myers\", \"minimal\", \"patience\" dan " -"\"histogram\"" - -#: diff.c #, c-format msgid "invalid argument to %s" msgstr "argumen tidak valid ke %s" @@ -19666,8 +19817,8 @@ msgid "output only the last line of --stat" msgstr "keluarkan hanya baris terakhir --stat" #: diff.c -msgid "<param1,param2>..." -msgstr "<parameter 1,parameter 2>..." +msgid "<param1>,<param2>..." +msgstr "<parameter 1>,<parameter 2>..." #: diff.c msgid "" @@ -19680,8 +19831,8 @@ msgid "synonym for --dirstat=cumulative" msgstr "sinonim untuk --dirstat=cumulative" #: diff.c -msgid "synonym for --dirstat=files,param1,param2..." -msgstr "sinonim untuk --dirstat=files,param1,param2..." +msgid "synonym for --dirstat=files,<param1>,<param2>..." +msgstr "sinonim untuk --dirstat=files,<parameter 1>,<parameter 2>..." #: diff.c msgid "warn if changes introduce conflict markers or whitespace errors" @@ -19914,14 +20065,6 @@ msgid "generate diff using the \"histogram diff\" algorithm" msgstr "buat diff menggunakan algoritma \"diff histogram\"" #: diff.c -msgid "<algorithm>" -msgstr "<algoritma>" - -#: diff.c -msgid "choose a diff algorithm" -msgstr "pilih algoritma diff" - -#: diff.c msgid "<text>" msgstr "<teks>" @@ -21730,6 +21873,14 @@ msgid "multi-pack-index OID fanout is of the wrong size" msgstr "OID kipas-keluar indeks multipak salah ukuran" #: midx.c +#, c-format +msgid "" +"oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]" +msgstr "" +"kipas-keluar oid tidak berurutan: fanout[%d] =%<PRIx32> > %<PRIx32> = " +"fanout[%d]" + +#: midx.c msgid "multi-pack-index OID lookup chunk is the wrong size" msgstr "bingkah pencarian OID kipas-keluar indeks multipak salah ukuran" @@ -21791,6 +21942,15 @@ msgid "bad pack-int-id: %u (%u total packs)" msgstr "pack-int-id jelek: %u (total pak %u)" #: midx.c +msgid "MIDX does not contain the BTMP chunk" +msgstr "MIDX tidak berisi bingkah BTMP" + +#: midx.c +#, c-format +msgid "could not load bitmapped pack %<PRIu32>" +msgstr "tidak dapat membuka pak terbitmap %<PRIu32>" + +#: midx.c msgid "multi-pack-index stores a 64-bit offset, but off_t is too small" msgstr "indeks multipak simpan offset 64-bit, tapi off_t terlalu kecil" @@ -21898,14 +22058,6 @@ msgid "Looking for referenced packfiles" msgstr "Mencari berkas pak yang direferensikan" #: midx.c -#, c-format -msgid "" -"oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]" -msgstr "" -"kipas-keluar oid tidak berurutan: fanout[%d] =%<PRIx32> > %<PRIx32> = " -"fanout[%d]" - -#: midx.c msgid "the midx contains no oid" msgstr "midx tidak berisi oid" @@ -22542,6 +22694,10 @@ msgstr "bitmap multipak kehilangan indeks balik yang diperlukan" msgid "could not open pack %s" msgstr "tidak dapat membuka '%s'" +#: pack-bitmap.c t/helper/test-read-midx.c +msgid "could not determine MIDX preferred pack" +msgstr "tidak dapat menentukan pak MIDX terpilih" + #: pack-bitmap.c #, c-format msgid "preferred pack (%s) is invalid" @@ -22567,6 +22723,11 @@ msgstr "bitmap ewah rusak: kepala terpotong untuk bitmap komit \"%s\"" #: pack-bitmap.c #, c-format +msgid "unable to load pack: '%s', disabling pack-reuse" +msgstr "tidak dapat memuat pak: '%s', mematikan penggunaan ulang pak" + +#: pack-bitmap.c +#, c-format msgid "object '%s' not found in type bitmaps" msgstr "objek '%s' tidak ditemukan di bitmap tipe" @@ -22680,6 +22841,10 @@ msgstr "posisi indeks balik tidak valid pada %<PRIu64>: %<PRIu32> != %<PRIu32>" msgid "multi-pack-index reverse-index chunk is the wrong size" msgstr "bingkah indeks balik multipak salah ukuran" +#: pack-revindex.c +msgid "could not determine preferred pack" +msgstr "tidak dapat menentukan pak terpilih" + #: pack-write.c msgid "cannot both write and verify reverse index" msgstr "tidak dapat kedua-duanya menulis dan memverifikasi indeks balik" @@ -22762,11 +22927,6 @@ msgstr "" #: parse-options.c #, c-format -msgid "%s is incompatible with %s" -msgstr "%s tidak kompatibel dengan %s" - -#: parse-options.c -#, c-format msgid "ambiguous option: %s (could be --%s%s or --%s%s)" msgstr "opsi ambigu: %s (bisa jadi --%s%s atau --%s%s)" @@ -23166,11 +23326,6 @@ msgstr "tidak dapat menambahkan '%s' ke indeks" #: read-cache.c #, c-format -msgid "unable to stat '%s'" -msgstr "tidak dapat men-stat '%s'" - -#: read-cache.c -#, c-format msgid "'%s' appears as both a file and as a directory" msgstr "'%s' muncul baik sebagai sebuah berkas dan sebagai sebuah direktori" @@ -23855,17 +24010,12 @@ msgstr "'%s' ada; tidak dapat membuat '%s'" msgid "cannot process '%s' and '%s' at the same time" msgstr "tidak dapat memproses '%s' dan '%s' pada waktu yang bersamaan" -#: refs/files-backend.c -#, c-format -msgid "could not remove reference %s" -msgstr "tidak dapat menghapus referensi %s" - -#: refs/files-backend.c refs/packed-backend.c +#: refs.c #, c-format msgid "could not delete reference %s: %s" msgstr "tidak dapat menghapus referensi %s: %s" -#: refs/files-backend.c refs/packed-backend.c +#: refs.c #, c-format msgid "could not delete references: %s" msgstr "tidak dapat menghapus referensi: %s" @@ -24100,9 +24250,9 @@ msgid "" msgstr "" "Tujuan yang Anda berikan bukan nama referensi penuh (seperti \n" "dimulai dengan \"refs/\"). Kami mencoba menebak maksud Anda dengan:\n" -"- Cari referensi yang cocok dengan '%s' pada sisi remote.\n" -"- Perika apakah <src> yang sedang didorong ('%s') adalah \n" -" referensi pada \"refs/{heads,tags}\". Bila demikian kami \n" +"- mencari referensi yang cocok dengan '%s' pada sisi remote.\n" +"- memeriksa apakah <src> yang sedang didorong ('%s') adalah \n" +" referensi pada \"refs/{heads,tags}/\". Bila demikian kami \n" " menambahkan awalan refs/{heads,tags}/ yang bersesuaian pada sisi \n" " remote.\n" "\n" @@ -25042,7 +25192,7 @@ msgstr "identitas pengarang tidak valid '%s'" msgid "corrupt author: missing date information" msgstr "pengarang rusak: informasi tanggal hilang" -#: sequencer.c t/helper/test-fast-rebase.c +#: sequencer.c #, c-format msgid "could not update %s" msgstr "tidak dapat memperbarui %s" @@ -25537,6 +25687,10 @@ msgid "Autostash exists; creating a new stash entry." msgstr "Stase otomatis sudah ada; membuat entri stase baru." #: sequencer.c +msgid "autostash reference is a symref" +msgstr "referensi autostase itu referensi simbolik" + +#: sequencer.c msgid "could not detach HEAD" msgstr "tidak dapat melepas HEAD" @@ -25918,6 +26072,11 @@ msgstr "nama cabang asal salah: '%s'" #: setup.c #, c-format +msgid "re-init: ignored --initial-branch=%s" +msgstr "re-init: --initial-branch=%s diabaikan" + +#: setup.c +#, c-format msgid "unable to handle file type %d" msgstr "tidak dapat menangani tipe berkas %d" @@ -25931,14 +26090,16 @@ msgid "attempt to reinitialize repository with different hash" msgstr "mencoba menginisialisasi ulang repositori dengan hash yang berbeda" #: setup.c -#, c-format -msgid "%s already exists" -msgstr "%s sudah ada" +msgid "" +"attempt to reinitialize repository with different reference storage format" +msgstr "" +"mencoba menginisialisasi ulang repositori dengan format penyimpanan " +"referensi yang berbeda" #: setup.c #, c-format -msgid "re-init: ignored --initial-branch=%s" -msgstr "re-init: --initial-branch=%s diabaikan" +msgid "%s already exists" +msgstr "%s sudah ada" #: setup.c #, c-format @@ -26264,14 +26425,6 @@ msgstr "bersihkan pohon tembolok sebelum setiap iterasi" msgid "number of entries in the cache tree to invalidate (default 0)" msgstr "jumlah entri di dalam pohon tembolok untuk dinirvalidasi (asali 0)" -#: t/helper/test-fast-rebase.c -msgid "unhandled options" -msgstr "opsi tak tertangani" - -#: t/helper/test-fast-rebase.c -msgid "error preparing revisions" -msgstr "kesalahan menyiapkan revisi" - #: t/helper/test-reach.c #, c-format msgid "commit %s is not marked reachable" @@ -26469,10 +26622,6 @@ msgstr "menyetel jalur layanan remote tidak didukung oleh protokol" msgid "invalid remote service path" msgstr "jalur layanan remote tidak valid" -#: transport-helper.c transport.c -msgid "operation not supported by protocol" -msgstr "operasi tidak didukung oleh protokol" - #: transport-helper.c #, c-format msgid "can't connect to subservice %s" @@ -26638,11 +26787,6 @@ msgstr "dukungan untuk protokol v2 belum diterapkan" #: transport.c #, c-format -msgid "unknown value for config '%s': %s" -msgstr "nilai tidak dikenal untuk konfigurasi '%s': %s" - -#: transport.c -#, c-format msgid "transport '%s' not allowed" msgstr "transportasi '%s' tidak diperbolehkan" @@ -26701,6 +26845,10 @@ msgstr "operasi bundle-uri tidak didukung oleh protokol" msgid "could not retrieve server-advertised bundle-uri list" msgstr "tidak dapat menerima daftar bundle-uri teriklankan server" +#: transport.c +msgid "operation not supported by protocol" +msgstr "operasi tidak didukung oleh protokol" + #: tree-walk.c msgid "too-short tree object" msgstr "objek pohon terlalu pendek" @@ -27722,6 +27870,11 @@ msgstr "juga indeks Anda berisi perubahan yang belum dikomit." msgid "cannot %s: Your index contains uncommitted changes." msgstr "tidak dapat %s: indeks Anda berisi perubahan yang belum dikomit." +#: xdiff-interface.c +#, c-format +msgid "unknown style '%s' given for '%s'" +msgstr "nilai gaya tidak dikenal '%s' diberikan untuk '%s'" + #: git-merge-octopus.sh git-merge-resolve.sh msgid "" "Error: Your local changes to the following files would be overwritten by " @@ -1,14 +1,14 @@ # Swedish translations for Git. -# Copyright (C) 2010-2023 Peter Krefting <peter@softwolves.pp.se> +# Copyright (C) 2010-2024 Peter Krefting <peter@softwolves.pp.se> # This file is distributed under the same license as the Git package. -# Peter Krefting <peter@softwolves.pp.se>, 2010-2023. +# Peter Krefting <peter@softwolves.pp.se>, 2010-2024. # msgid "" msgstr "" -"Project-Id-Version: git 2.43.0\n" +"Project-Id-Version: git 2.44.0\n" "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n" -"POT-Creation-Date: 2023-11-09 14:12+0100\n" -"PO-Revision-Date: 2023-11-09 14:28+0100\n" +"POT-Creation-Date: 2024-02-16 07:58+0100\n" +"PO-Revision-Date: 2024-02-16 07:59+0100\n" "Last-Translator: Peter Krefting <peter@softwolves.pp.se>\n" "Language-Team: Svenska <tp-sv@listor.tp-sv.se>\n" "Language: sv\n" @@ -1418,6 +1418,10 @@ msgid "Unexpected option --output" msgstr "Oväntad flagga --output" #, c-format +msgid "extra command line parameter '%s'" +msgstr "falsk konfigureringsparameter: â€%sâ€" + +#, c-format msgid "Unknown archive format '%s'" msgstr "Okänt arkivformat â€%sâ€" @@ -1463,6 +1467,14 @@ msgid "bad --attr-source or GIT_ATTR_SOURCE" msgstr "felaktig --attr-source eller GIT_ATTR_SOURCE" #, c-format +msgid "unable to stat '%s'" +msgstr "kan inte ta status pÃ¥ â€%sâ€" + +#, c-format +msgid "unable to read %s" +msgstr "kunde inte läsa %s" + +#, c-format msgid "Badly quoted content in file '%s': %s" msgstr "Felaktigt citerat innehÃ¥ll i filen â€%sâ€: %s" @@ -2582,7 +2594,7 @@ msgid "do not show object names of boundary commits (Default: off)" msgstr "visa inte objektnamn för gränsincheckningar (Standard: av)" msgid "do not treat root commits as boundaries (Default: off)" -msgstr "vehandla inte rotincheckningar som gränser (Standard: av)" +msgstr "behandla inte rotincheckningar som gränser (Standard: av)" msgid "show work cost statistics" msgstr "visa statistik över arbetskostnad" @@ -2734,12 +2746,12 @@ msgid "couldn't look up commit object for '%s'" msgstr "kunde inte slÃ¥ upp incheckningsobjekt för â€%sâ€" #, c-format -msgid "" -"the branch '%s' is not fully merged.\n" -"If you are sure you want to delete it, run 'git branch -D %s'" -msgstr "" -"grenen â€%s†har inte slagits samman i sin helhet.\n" -"Om du är säker pÃ¥ att du vill ta bort den, kör â€git branch -D %sâ€" +msgid "the branch '%s' is not fully merged" +msgstr "grenen â€%s†har inte slagits samman i sin helhet" + +#, c-format +msgid "If you are sure you want to delete it, run 'git branch -D %s'" +msgstr "Om du är säker pÃ¥ att du vill ta bort den, kör â€git branch -D %sâ€" msgid "update of config-file failed" msgstr "misslyckades uppdatera konfigurationsfil" @@ -3772,8 +3784,8 @@ msgstr "tvinga utcheckning (kasta bort lokala ändringar)" msgid "new-branch" msgstr "ny-gren" -msgid "new unparented branch" -msgstr "ny gren utan förälder" +msgid "new unborn branch" +msgstr "ny ofödd gren" msgid "update ignored files (default)" msgstr "uppdatera ignorerade filer (standard)" @@ -4023,9 +4035,6 @@ msgstr "" "clean.requireForce har standardvärdet true och varken -i, -n eller -f " "angavs; vägrar städa" -msgid "-x and -X cannot be used together" -msgstr "-x och -X kan inte användas samtidigt" - msgid "git clone [<options>] [--] <repo> [<dir>]" msgstr "git clone [<flaggor>] [--] <arkiv> [<kat>]" @@ -4113,6 +4122,9 @@ msgstr "gitkat" msgid "separate git dir from working tree" msgstr "separera gitkatalogen frÃ¥n arbetskatalogen" +msgid "specify the reference format to use" +msgstr "använd referensformatet som ska användas" + msgid "key=value" msgstr "nyckel=värde" @@ -4228,12 +4240,9 @@ msgstr "För mÃ¥nga argument." msgid "You must specify a repository to clone." msgstr "Du mÃ¥ste ange ett arkiv att klona." -msgid "" -"--bundle-uri is incompatible with --depth, --shallow-since, and --shallow-" -"exclude" -msgstr "" -"--bundle-uri är inkompatibelt med --depth, --shallow-since och --shallow-" -"exclude" +#, c-format +msgid "unknown ref storage format '%s'" +msgstr "okänt format för lagring av referenser â€%sâ€" #, c-format msgid "repository '%s' does not exist" @@ -4361,7 +4370,7 @@ msgid "" "--stdin-commits]\n" " [--changed-paths] [--[no-]max-new-filters <n>] [--" "[no-]progress]\n" -" <split options>" +" <split-options>" msgstr "" "git commit-graph write [--object-dir <kat>] [--append]\n" " [--split[=<strategi>]] [--reachable | --stdin-packs | " @@ -6675,6 +6684,10 @@ msgid "unable to read tree (%s)" msgstr "kunde inte läsa träd (%s)" #, c-format +msgid "unable to read tree %s" +msgstr "kunde inte läsa trädet %s" + +#, c-format msgid "unable to grep from object of type %s" msgstr "kunde inte â€grep†frÃ¥n objekt av typen %s" @@ -7081,10 +7094,6 @@ msgid "SHA1 COLLISION FOUND WITH %s !" msgstr "SHA1-KOLLISION UPPTÄCKT VID %s !" #, c-format -msgid "unable to read %s" -msgstr "kunde inte läsa %s" - -#, c-format msgid "cannot read existing object info %s" msgstr "kan inte läsa information om befintligt objekt %s" @@ -7224,11 +7233,13 @@ msgstr "fsck-fel i packat objekt" msgid "" "git init [-q | --quiet] [--bare] [--template=<template-directory>]\n" " [--separate-git-dir <git-dir>] [--object-format=<format>]\n" +" [--ref-format=<format>]\n" " [-b <branch-name> | --initial-branch=<branch-name>]\n" " [--shared[=<permissions>]] [<directory>]" msgstr "" "git init [-q | --quiet] [--bare] [--template=<mallkatalog>]\n" " [--separate-git-dir <git-kat>] [--object-format=<format>]\n" +" [--ref-format=<format>]\n" " [-b <grennamn> | --initial-branch=<grennamn>]\n" " [--shared[=<behörigheter>]] [<katalog>]" @@ -7927,6 +7938,12 @@ msgstr "" "git merge-file [<alternativ>] [-L <namn1> [-L <orig> [-L <namn2>]]] <fil1> " "<origfil> <fil2>" +msgid "" +"option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and " +"\"histogram\"" +msgstr "" +"flaggan diff-algorithm godtar â€myersâ€, â€minimalâ€, â€patience†och â€histogramâ€" + msgid "send results to standard output" msgstr "sänd resultat till standard ut" @@ -7948,6 +7965,12 @@ msgstr "för konflikter, använd deras version" msgid "for conflicts, use a union version" msgstr "för konflikter, använd en förenad version" +msgid "<algorithm>" +msgstr "<algoritm>" + +msgid "choose a diff algorithm" +msgstr "välj en diff-algoritm" + msgid "for conflicts, use this marker size" msgstr "för konflikter, använd denna markörstorlek" @@ -8038,9 +8061,6 @@ msgstr "--trivial-merge är inkompatibelt med andra flaggor" msgid "unknown strategy option: -X%s" msgstr "okänd strategiflagga: -X%s" -msgid "--merge-base is incompatible with --stdin" -msgstr "--merge-base är inkompatibel med --stdin" - #, c-format msgid "malformed input line: '%s'." msgstr "felaktig indatarad: â€%sâ€." @@ -8967,6 +8987,10 @@ msgid "inconsistency with delta count" msgstr "deltaräknaren är inkonsekvent" #, c-format +msgid "invalid pack.allowPackReuse value: '%s'" +msgstr "felaktigt värde för pack.allowPackReuse: â€%sâ€" + +#, c-format msgid "" "value of uploadpack.blobpackfileuri must be of the form '<object-hash> <pack-" "hash> <uri>' (got '%s')" @@ -9219,10 +9243,10 @@ msgstr "Räknar upp objekt" #, c-format msgid "" "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-" -"reused %<PRIu32>" +"reused %<PRIu32> (from %<PRIuMAX>)" msgstr "" "Totalt %<PRIu32> (delta %<PRIu32>), Ã¥teranvände %<PRIu32> (delta %<PRIu32>), " -"paket-Ã¥teranvända %<PRIu32>" +"paket-Ã¥teranvända %<PRIu32> (frÃ¥n %<PRIuMAX>)" msgid "" "'git pack-redundant' is nominated for removal.\n" @@ -10176,13 +10200,6 @@ msgid "switch `C' expects a numerical value" msgstr "flaggan â€C†förväntar ett numeriskt värde" msgid "" -"apply options are incompatible with rebase.autoSquash. Consider adding --no-" -"autosquash" -msgstr "" -"argument för â€apply†är inkompatibla med rebase.autoSquash. Överväg att " -"lägga till --no-autosquash" - -msgid "" "apply options are incompatible with rebase.rebaseMerges. Consider adding --" "no-rebase-merges" msgstr "" @@ -11167,6 +11184,76 @@ msgstr "--convert-graft-file tar inga argument" msgid "only one pattern can be given with -l" msgstr "endast ett mönster kan anges med -l" +msgid "need some commits to replay" +msgstr "behöver nÃ¥gra incheckningar för omspelning" + +msgid "--onto and --advance are incompatible" +msgstr "--onto och --advance kan inte kombineras" + +msgid "all positive revisions given must be references" +msgstr "alla positiva revisioner som anges mÃ¥ste vara referenser" + +msgid "argument to --advance must be a reference" +msgstr "argumentet till --advance mÃ¥ste vara en referens" + +msgid "" +"cannot advance target with multiple sources because ordering would be ill-" +"defined" +msgstr "" +"kan inte flytta mÃ¥let framÃ¥t när det finns flera källor eftersom ordningen " +"inte kan fastställas" + +msgid "" +"cannot implicitly determine whether this is an --advance or --onto operation" +msgstr "" +"kan inte avgöra om den underförstÃ¥dda processen är --advance eller --onto" + +msgid "" +"cannot advance target with multiple source branches because ordering would " +"be ill-defined" +msgstr "" +"kan inte flytta mÃ¥let framÃ¥t när det finns flera källgrenar eftersom " +"ordningen inte kan fastställas" + +msgid "cannot implicitly determine correct base for --onto" +msgstr "kan inte avgöra den underförstÃ¥dda basen för --onto" + +msgid "" +"(EXPERIMENTAL!) git replay ([--contained] --onto <newbase> | --advance " +"<branch>) <revision-range>..." +msgstr "" +"(EXPERIMENTELLT!) git replay ([--contained] --onto <nybas> | --advance " +"<gren>) <revisions-intervall>..." + +msgid "make replay advance given branch" +msgstr "lÃ¥t omspelningen flytta den givna grenen framÃ¥t" + +msgid "replay onto given commit" +msgstr "spela om ovanpÃ¥ en given incheckning" + +msgid "advance all branches contained in revision-range" +msgstr "flytta alla grenar som finns i revisionsintervallet framÃ¥t" + +msgid "option --onto or --advance is mandatory" +msgstr "flaggan --onto eller --advance mÃ¥ste anges" + +#, c-format +msgid "" +"some rev walking options will be overridden as '%s' bit in 'struct rev_info' " +"will be forced" +msgstr "" +"nÃ¥gra flaggor för revisionstraversering kommer överstyras eftersom â€%sâ€-" +"biten i â€struct rev_info†kommer att tvingas" + +msgid "error preparing revisions" +msgstr "fel när revisioner skulle förberedas" + +msgid "replaying down to root commit is not supported yet!" +msgstr "kan ännu inte spela om hela vägen ned till rotincheckningen!" + +msgid "replaying merge commits is not supported yet!" +msgstr "kan ännu inte spela om sammanslagningsincheckningar!" + msgid "" "git rerere [clear | forget <pathspec>... | diff | status | remaining | gc]" msgstr "" @@ -11373,15 +11460,6 @@ msgstr "--prefix kräver ett argument" msgid "unknown mode for --abbrev-ref: %s" msgstr "okänt läge för --abbrev-ref: %s" -msgid "--exclude-hidden cannot be used together with --branches" -msgstr "--exclude-hidden kan endast användas tillsammans med --branches" - -msgid "--exclude-hidden cannot be used together with --tags" -msgstr "--exclude-hidden kan kan inte användas tillsammans med --tags" - -msgid "--exclude-hidden cannot be used together with --remotes" -msgstr "--exclude-hidden kan kan inte användas tillsammans med --remotes" - msgid "this operation must be run in a work tree" msgstr "funktionen mÃ¥ste köras i en arbetskatalog" @@ -11784,10 +11862,6 @@ msgstr "visa inte resultat pÃ¥ standard ut (användbart med --verify)" msgid "show refs from stdin that aren't in local repository" msgstr "visa referenser frÃ¥n standard in som inte finns i lokalt arkiv" -#, c-format -msgid "only one of '%s', '%s' or '%s' can be given" -msgstr "endast en av â€%sâ€, â€%s†och â€%s†kan anges" - msgid "" "git sparse-checkout (init | list | set | add | reapply | disable | check-" "rules) [<options>]" @@ -13232,13 +13306,13 @@ msgstr "Ingen möjlig källgren, använder â€--orphanâ€" #, c-format msgid "" -"If you meant to create a worktree containing a new orphan branch\n" +"If you meant to create a worktree containing a new unborn branch\n" "(branch with no commits) for this repository, you can do so\n" "using the --orphan flag:\n" "\n" " git worktree add --orphan -b %s %s\n" msgstr "" -"Om meningen var att skapa en arbetskatalog frÃ¥n en ny föräldrals\n" +"Om meningen var att skapa en arbetskatalog frÃ¥n en ny ofödd\n" "gren (gren utan incheckningar) för det här arkivet kan du göra\n" "det med flaggan --orphan:\n" "\n" @@ -13246,13 +13320,13 @@ msgstr "" #, c-format msgid "" -"If you meant to create a worktree containing a new orphan branch\n" +"If you meant to create a worktree containing a new unborn branch\n" "(branch with no commits) for this repository, you can do so\n" "using the --orphan flag:\n" "\n" " git worktree add --orphan %s\n" msgstr "" -"Om meningen var att skapa en arbetskatalog frÃ¥n en ny föräldrals\n" +"Om meningen var att skapa en arbetskatalog frÃ¥n en ny ofödd\n" "gren (gren utan incheckningar) för det här arkivet kan du göra\n" "det med flaggan --orphan:\n" "\n" @@ -13315,6 +13389,10 @@ msgid "initializing" msgstr "initierar" #, c-format +msgid "could not find created worktree '%s'" +msgstr "kunde inte hitta den skapade arbetskatalogen â€%sâ€" + +#, c-format msgid "Preparing worktree (new branch '%s')" msgstr "Förbereder arbetskatalog (ny gren â€%sâ€)" @@ -13352,10 +13430,6 @@ msgstr "" "finns, avslutar; använd â€add -f†för att överstyra eller hämta frÃ¥n en fjärr " "först" -#, c-format -msgid "'%s' and '%s' cannot be used together" -msgstr "â€%s†och â€%s†kan inte användas samtidigt" - msgid "checkout <branch> even if already checked out in other worktree" msgstr "" "checka ut <gren> även om den redan är utcheckad i en annan arbetskatalog" @@ -13366,8 +13440,8 @@ msgstr "skapa en ny gren" msgid "create or reset a branch" msgstr "skapa eller Ã¥terställ en gren" -msgid "create unborn/orphaned branch" -msgstr "skapa en ofödd/övergiven gren" +msgid "create unborn branch" +msgstr "skapa en ofödd gren" msgid "populate the new working tree" msgstr "befolka den nya arbetskatalogen" @@ -13389,11 +13463,8 @@ msgid "options '%s', '%s', and '%s' cannot be used together" msgstr "flaggorna â€%sâ€, â€%s†och â€%s†kan inte användas samtidigt" #, c-format -msgid "options '%s', and '%s' cannot be used together" -msgstr "flaggorna â€%s†och â€%s†kan inte användas samtidigt" - -msgid "<commit-ish>" -msgstr "<incheckning-igt>" +msgid "option '%s' and commit-ish cannot be used together" +msgstr "flaggorna â€%s†och incheckning-igt kan inte användas samtidigt" msgid "added with --lock" msgstr "lagt till med --lock" @@ -14006,6 +14077,11 @@ msgstr "Packa opackade objekt i ett arkiv" msgid "Create, list, delete refs to replace objects" msgstr "Skapa, visa, ta bort referenser för att ersätta objekt" +msgid "EXPERIMENTAL: Replay commits on a new base, works with bare repos too" +msgstr "" +"EXPERIMENTELLT: Spela om incheckningar ovanpÃ¥ en ny bas, fungerar även med " +"nakna arkiv" + msgid "Generates a summary of pending changes" msgstr "Skapar en sammanfattning av väntande ändringar" @@ -14243,6 +14319,32 @@ msgstr "Verktyg för att hantera stora Git-arkiv" msgid "commit-graph file is too small" msgstr "incheckningsgraffilen %s är för liten" +msgid "commit-graph oid fanout chunk is wrong size" +msgstr "incheckningsgrafens oid-utbredningsstycke har fel storlek" + +msgid "commit-graph fanout values out of order" +msgstr "incheckningsgrafens utbredningsvärden är i fel ordning" + +msgid "commit-graph OID lookup chunk is the wrong size" +msgstr "incheckningsgrafens OID-uppslagningsstycket har fel storlek" + +msgid "commit-graph commit data chunk is wrong size" +msgstr "incheckningsgrafens incheckningsdatastycke har fel storlek" + +msgid "commit-graph generations chunk is wrong size" +msgstr "incheckningsgrafens generationsstycke har fel storlek" + +msgid "commit-graph changed-path index chunk is too small" +msgstr "incheckningsgrafens ändrade-sökvägar-indexstycke är förö litet" + +#, c-format +msgid "" +"ignoring too-small changed-path chunk (%<PRIuMAX> < %<PRIuMAX>) in commit-" +"graph file" +msgstr "" +"ignorerar för litet ändrade-sökvägar-stycke (%<PRIuMAX> < %<PRIuMAX>) i " +"incheckningsgraffilen" + #, c-format msgid "commit-graph signature %X does not match signature %X" msgstr "incheckningsgrafens signatur %X stämmer inte med signaturen %X" @@ -14259,6 +14361,18 @@ msgstr "incheckningsgrafens hashversion %X stämmer inte med versionen %X" msgid "commit-graph file is too small to hold %u chunks" msgstr "incheckningsgraffilen är för liten för att innehÃ¥lla %u stycken" +msgid "commit-graph required OID fanout chunk missing or corrupted" +msgstr "" +"incheckningsgrafens nödvändiga OID-utbredningsstycke saknas eller är trasigt" + +msgid "commit-graph required OID lookup chunk missing or corrupted" +msgstr "" +"incheckningsgrafens nödvändiga OID-uppslagningsstycke saknas eller är trasigt" + +msgid "commit-graph required commit data chunk missing or corrupted" +msgstr "" +"incheckningsgrafens nödvändiga incheckningsdatastycke saknas eller är trasigt" + msgid "commit-graph has no base graphs chunk" msgstr "incheckningsgrafen har inga bas-graf-stycken" @@ -14272,6 +14386,9 @@ msgstr "incheckningsgrafens kedja stämmer inte" msgid "commit count in base graph too high: %<PRIuMAX>" msgstr "antalet incheckningar i basgrafen för högt: %<PRIuMAX>" +msgid "commit-graph chain file too small" +msgstr "incheckningsgrafens kedjefil är för liten" + #, c-format msgid "invalid commit-graph chain: line '%s' not a hash" msgstr "ogiltig incheckingsgrafkedja: rad â€%s†är inte ett hash-värde" @@ -14292,6 +14409,9 @@ msgstr "incheckningsgraf kräver spillgenerationsdata, men har ingen" msgid "commit-graph overflow generation data is too small" msgstr "incheckningsgrafens spillgenerationsdata är för liten" +msgid "commit-graph extra-edges pointer out of bounds" +msgstr "incheckningsgrafens extra-kant-pekare är utanför intervallet" + msgid "Loading known commits in commit graph" msgstr "Läser in kända incheckningar i incheckningsgraf" @@ -15431,6 +15551,10 @@ msgid "Unknown value for 'diff.submodule' config variable: '%s'" msgstr "Okänt värde för konfigurationsvariabeln â€diff.submoduleâ€: â€%sâ€" #, c-format +msgid "unknown value for config '%s': %s" +msgstr "okänt värde för inställningen â€%sâ€: %s" + +#, c-format msgid "" "Found errors in 'diff.dirstat' config variable:\n" "%s" @@ -15509,12 +15633,6 @@ msgstr "felaktigt argument till --color-moved: %s" msgid "invalid mode '%s' in --color-moved-ws" msgstr "ogiltigt läge %s†i --color-moved-ws" -msgid "" -"option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and " -"\"histogram\"" -msgstr "" -"flaggan diff-algorithm godtar â€myersâ€, â€minimalâ€, â€patience†och â€histogramâ€" - #, c-format msgid "invalid argument to %s" msgstr "ogiltigt argument för %s" @@ -15558,8 +15676,8 @@ msgstr "maskinläsbar --stat" msgid "output only the last line of --stat" msgstr "skriv bara ut den sista raden för --stat" -msgid "<param1,param2>..." -msgstr "<param1,param2>..." +msgid "<param1>,<param2>..." +msgstr "<param1>,<param2>..." msgid "" "output the distribution of relative amount of changes for each sub-directory" @@ -15569,8 +15687,8 @@ msgstr "" msgid "synonym for --dirstat=cumulative" msgstr "synonym för --dirstat=cumulative" -msgid "synonym for --dirstat=files,param1,param2..." -msgstr "synonym för --dirstat=filer,param1,param2..." +msgid "synonym for --dirstat=files,<param1>,<param2>..." +msgstr "synonym för --dirstat=filer,<param1>,<param2>..." msgid "warn if changes introduce conflict markers or whitespace errors" msgstr "varna om ändringar introducerar konfliktmarkörer eller blankstegsfel" @@ -15744,12 +15862,6 @@ msgstr "skapa diffar med algoritmen â€patience diffâ€" msgid "generate diff using the \"histogram diff\" algorithm" msgstr "skapa diffar med algoritmen â€histogram diffâ€" -msgid "<algorithm>" -msgstr "<algoritm>" - -msgid "choose a diff algorithm" -msgstr "välj en diff-algoritm" - msgid "<text>" msgstr "<text>" @@ -17220,6 +17332,12 @@ msgstr "misslyckades läsa cachen" msgid "multi-pack-index OID fanout is of the wrong size" msgstr "OID-utbredning för multi-pack-index har fel storlek" +#, c-format +msgid "" +"oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]" +msgstr "" +"oid-utbredning i fel ordning: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]" + msgid "multi-pack-index OID lookup chunk is the wrong size" msgstr "OID-uppslagningsstycket för multi-pack-index har fel storlek" @@ -17270,6 +17388,13 @@ msgstr "paketnamn för multi-pack-index i fel ordning: â€%s†före â€%sâ€" msgid "bad pack-int-id: %u (%u total packs)" msgstr "bad pack-int-id: %u (%u paket totalt)" +msgid "MIDX does not contain the BTMP chunk" +msgstr "MIDX innehÃ¥ller inte BTMP-stycket" + +#, c-format +msgid "could not load bitmapped pack %<PRIu32>" +msgstr "kunde inte läsa det bitmappade paketet %<PRIu32>" + msgid "multi-pack-index stores a 64-bit offset, but off_t is too small" msgstr "multi-pack-index innehÃ¥ller 64-bitars offset, men off_t är för liten" @@ -17353,12 +17478,6 @@ msgstr "felaktig kontrollsumma" msgid "Looking for referenced packfiles" msgstr "Ser efter refererade packfiler" -#, c-format -msgid "" -"oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]" -msgstr "" -"oid-utbredning i fel ordning: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]" - msgid "the midx contains no oid" msgstr "midx saknar oid" @@ -17875,6 +17994,9 @@ msgstr "flerpaketsbitkarta saknar nödvändigt omvänt index" msgid "could not open pack %s" msgstr "kunde inte öppna paketfilen %s" +msgid "could not determine MIDX preferred pack" +msgstr "kunde inte bestämma det föredragna MIDX-paketet" + #, c-format msgid "preferred pack (%s) is invalid" msgstr "föredragen paketfil (%s) är ogiltig" @@ -17895,6 +18017,10 @@ msgid "corrupt ewah bitmap: truncated header for bitmap of commit \"%s\"" msgstr "trasig ewah-bitkarta: avhugget huvud för bitkarta för incheckning â€%sâ€" #, c-format +msgid "unable to load pack: '%s', disabling pack-reuse" +msgstr "kunde inte läsa paketet: â€%sâ€, inaktiverar Ã¥teranvändning av paket" + +#, c-format msgid "object '%s' not found in type bitmaps" msgstr "objektet â€%s†hittades inte i typbitkartor" @@ -17985,6 +18111,9 @@ msgstr "ogiltig rev-indexposition vid %<PRIu64>: %<PRIu32> != %<PRIu32>" msgid "multi-pack-index reverse-index chunk is the wrong size" msgstr "baklängesindex-stycke för multi-pack-index har fel storlek" +msgid "could not determine preferred pack" +msgstr "kunde inte bestämma föredraget paket" + msgid "cannot both write and verify reverse index" msgstr "kan inte bÃ¥de skriva och bekräfta reverse-index" @@ -18048,10 +18177,6 @@ msgid "%s expects a non-negative integer value with an optional k/m/g suffix" msgstr "%s förväntar ett icke-negativt heltalsvärde, med valfritt k/m/g-suffix" #, c-format -msgid "%s is incompatible with %s" -msgstr "%s är inkompatibel med %s" - -#, c-format msgid "ambiguous option: %s (could be --%s%s or --%s%s)" msgstr "tvetydig flagga: %s (kan vara --%s%s eller --%s%s)" @@ -18365,10 +18490,6 @@ msgid "unable to add '%s' to index" msgstr "kan inte lägga till â€%s†till indexet" #, c-format -msgid "unable to stat '%s'" -msgstr "kan inte ta status pÃ¥ â€%sâ€" - -#, c-format msgid "'%s' appears as both a file and as a directory" msgstr "â€%s†finns bÃ¥de som en fil och en katalog" @@ -18941,10 +19062,6 @@ msgid "cannot process '%s' and '%s' at the same time" msgstr "kan inte hantera â€%s†och â€%s†samtidigt" #, c-format -msgid "could not remove reference %s" -msgstr "kunde inte ta bort referensen %s" - -#, c-format msgid "could not delete reference %s: %s" msgstr "kunde inte ta bort referensen %s: %s" @@ -19138,7 +19255,7 @@ msgstr "" "- Se efter en referens som motsvarar â€%s†pÃ¥ fjärrsidan.\n" "- Se om <källan> som sänds (â€%sâ€)\n" " är en referens i â€refs/{heads,tags}/â€. Om sÃ¥ lägger vi till\n" -" motsvarande refs/{heads,tags}/-prefix pÃ¥ fjärrsidan.\n" +" motsvarande â€refs/{heads,tags}/â€-prefix pÃ¥ fjärrsidan.\n" "\n" "Inget av dem fungerade, sÃ¥ vi gav upp. Ange fullständig referens." @@ -20299,6 +20416,9 @@ msgstr "Tillämpning av autostash gav konflikter." msgid "Autostash exists; creating a new stash entry." msgstr "Autostash finns; skapar ny stash-post." +msgid "autostash reference is a symref" +msgstr "autostash-referensen är en symbolisk referens" + msgid "could not detach HEAD" msgstr "kunde inte koppla frÃ¥n HEAD" @@ -20611,6 +20731,10 @@ msgid "invalid initial branch name: '%s'" msgstr "ogiltigt namn pÃ¥ första gren: â€%sâ€" #, c-format +msgid "re-init: ignored --initial-branch=%s" +msgstr "re-init: ignorerade --initial-branch=%s" + +#, c-format msgid "unable to handle file type %d" msgstr "kan inte hantera filtyp %d" @@ -20621,15 +20745,15 @@ msgstr "kan inte flytta %s till %s" msgid "attempt to reinitialize repository with different hash" msgstr "försöker initiera arkivet pÃ¥ nytt med annan hash" +msgid "" +"attempt to reinitialize repository with different reference storage format" +msgstr "försöker initiera arkivet pÃ¥ nytt med annat referenslagringsformat" + #, c-format msgid "%s already exists" msgstr "%s finns redan" #, c-format -msgid "re-init: ignored --initial-branch=%s" -msgstr "re-init: ignorerade --initial-branch=%s" - -#, c-format msgid "Reinitialized existing shared Git repository in %s%s\n" msgstr "Ominitierade befintligt delat Git-arkiv i %s%s\n" @@ -20893,12 +21017,6 @@ msgstr "töm cacheträdet före varje iteration" msgid "number of entries in the cache tree to invalidate (default 0)" msgstr "antal poster i cacheträdet att ogiltigförklara (förval är 0)" -msgid "unhandled options" -msgstr "flaggor som inte hanterats" - -msgid "error preparing revisions" -msgstr "fel när revisioner skulle förberedas" - #, c-format msgid "commit %s is not marked reachable" msgstr "incheckning %s är inte märkt nÃ¥bar" @@ -21054,9 +21172,6 @@ msgstr "protkollet stöder inte att sätta sökväg till fjärrtjänst" msgid "invalid remote service path" msgstr "felaktig sökväg till fjärrtjänst" -msgid "operation not supported by protocol" -msgstr "funktionen stöds inte av protokollet" - #, c-format msgid "can't connect to subservice %s" msgstr "kan inte ansluta till undertjänsten %s" @@ -21187,10 +21302,6 @@ msgid "support for protocol v2 not implemented yet" msgstr "stöd för protokoll v2 ännu ej implementerat" #, c-format -msgid "unknown value for config '%s': %s" -msgstr "okänt värde för inställningen â€%sâ€: %s" - -#, c-format msgid "transport '%s' not allowed" msgstr "transporten â€%s†tillÃ¥ts inte" @@ -21243,6 +21354,9 @@ msgstr "bundle-uri-funktionen stöds inte av protokollet" msgid "could not retrieve server-advertised bundle-uri list" msgstr "kunde inte hämta bundle-uri-listan som servern annonserade" +msgid "operation not supported by protocol" +msgstr "funktionen stöds inte av protokollet" + msgid "too-short tree object" msgstr "trädobjekt för kort" @@ -22066,6 +22180,10 @@ msgstr "dessutom innehÃ¥ller dit index ändringar som inte har checkats in." msgid "cannot %s: Your index contains uncommitted changes." msgstr "kan inte %s: Ditt index innehÃ¥ller ändringar som inte checkats in." +#, c-format +msgid "unknown style '%s' given for '%s'" +msgstr "okänd stil â€%s†angavs för â€%sâ€" + msgid "" "Error: Your local changes to the following files would be overwritten by " "merge" @@ -1,8 +1,8 @@ # Turkish translations for Git # Git Türkçe çevirileri -# Copyright (C) 2020-2023 Emir SARI <emir_sari@icloud.com> +# Copyright (C) 2020-2024 Emir SARI <emir_sari@icloud.com> # This file is distributed under the same license as the Git package. -# Emir SARI <emir_sari@icloud.com>, 2020-2023 +# Emir SARI <emir_sari@icloud.com>, 2020-2024 # # ######################################################### # # Git Türkçe kavramlar dizini / Git Turkish Glossary # @@ -27,6 +27,7 @@ # detached HEAD | ayrık HEAD # # dirty | kirli # # evil merge | uÄŸursuz birleÅŸtirme # +# fanout | çıkış sayısı # # fast-forward | ileri sarım/sarmak # # fetch | getirme(k) # # fixup | düzeltmek # @@ -48,10 +49,10 @@ # pathspec | yol belirteci # # pattern | dizgi # # porcelain | okunabilir # -# prune | budamak # +# prune | buda(mak) # # pseudoref | yalancıktan baÅŸvuru # -# pull | çekme(k) # -# push | itme(k) # +# pull | çek(mek) # +# push | it(mek) # # rebase | yeniden temellendirme(k) # # record | kayıt yaz(mak) # # ref | baÅŸvuru # @@ -85,6 +86,7 @@ # trailer | artbilgi # # tree | aÄŸaç # # treeish | aÄŸacımsı # +# unborn | henüz doÄŸmamış (dal) # # unstage | hazırlıktan çıkar(mak) # # upstream | üstkaynak # # worktree/working tree | çalışma aÄŸacı # @@ -94,8 +96,8 @@ msgid "" msgstr "" "Project-Id-Version: Git Turkish Localization Project\n" "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n" -"POT-Creation-Date: 2023-11-09 11:15+0300\n" -"PO-Revision-Date: 2023-11 13:00+0300\n" +"POT-Creation-Date: 2024-02-16 22:04+0300\n" +"PO-Revision-Date: 2024-02-16 22:00+0300\n" "Last-Translator: Emir SARI <emir_sari@icloud.com>\n" "Language-Team: Turkish (https://github.com/bitigchi/git-po/)\n" "Language: tr\n" @@ -1500,6 +1502,10 @@ msgid "Unexpected option --output" msgstr "Beklenmedik seçenek --output" #, c-format +msgid "extra command line parameter '%s'" +msgstr "fazladan komut satırı parametresi '%s'" + +#, c-format msgid "Unknown archive format '%s'" msgstr "Bilinmeyen arÅŸiv biçimi '%s'" @@ -1545,6 +1551,14 @@ msgid "bad --attr-source or GIT_ATTR_SOURCE" msgstr "hatalı --attr-source veya GIT_ATTR_SOURCE" #, c-format +msgid "unable to stat '%s'" +msgstr "'%s' dosyasının bilgileri alınamıyor" + +#, c-format +msgid "unable to read %s" +msgstr "%s okunamıyor" + +#, c-format msgid "Badly quoted content in file '%s': %s" msgstr "'%s' dosyasında hatalı tırnaÄŸa alınmış içerik: %s" @@ -2823,12 +2837,12 @@ msgid "couldn't look up commit object for '%s'" msgstr "'%s' için iÅŸleme nesnesi aranamadı" #, c-format -msgid "" -"the branch '%s' is not fully merged.\n" -"If you are sure you want to delete it, run 'git branch -D %s'" -msgstr "" -"'%s' dalı tümüyle birleÅŸtirilmemiÅŸ.\n" -"EÄŸer silmek istediÄŸinizden eminseniz 'git branch -D %s' çalıştırın." +msgid "the branch '%s' is not fully merged" +msgstr "'%s' dalı tümüyle birleÅŸtirilmedi" + +#, c-format +msgid "If you are sure you want to delete it, run 'git branch -D %s'" +msgstr "Onu silmek istediÄŸinizden eminseniz 'git branch -D %s' çalıştırın." msgid "update of config-file failed" msgstr "config-file güncellenemedi" @@ -3863,8 +3877,8 @@ msgstr "zorla çıkış yap (yerel deÄŸiÅŸiklikleri çöpe at)" msgid "new-branch" msgstr "yeni dal" -msgid "new unparented branch" -msgstr "yeni üst ögesi olmayan dal" +msgid "new unborn branch" +msgstr "yeni henüz doÄŸmamış dal" msgid "update ignored files (default)" msgstr "yok sayılan dosyaları güncelle (öntanımlı)" @@ -4115,9 +4129,6 @@ msgstr "" "clean.requireForce öntanımlı olarak 'true' ve ne -i ne -n ne de -f verilmiÅŸ; " "temizleme reddediliyor" -msgid "-x and -X cannot be used together" -msgstr "-x ve -X birlikte kullanılamaz" - msgid "git clone [<options>] [--] <repo> [<dir>]" msgstr "git clone [<seçenekler>] [--] <depo> [<dizin>]" @@ -4205,6 +4216,9 @@ msgstr "git dizini" msgid "separate git dir from working tree" msgstr "git dizinini çalışma aÄŸacından ayır" +msgid "specify the reference format to use" +msgstr "kullanılacak baÅŸvuru biçimini belirt" + msgid "key=value" msgstr "anahtar=deÄŸer" @@ -4322,11 +4336,9 @@ msgstr "Çok fazla argüman." msgid "You must specify a repository to clone." msgstr "Klonlamak için bir depo belirtmelisiniz." -msgid "" -"--bundle-uri is incompatible with --depth, --shallow-since, and --shallow-" -"exclude" -msgstr "" -"--bundle-uri; --depth, --shallow-since ve --shallow-exclude ile uyumsuz" +#, c-format +msgid "unknown ref storage format '%s'" +msgstr "bilinmeyen baÅŸvuru depolama biçimi '%s'" #, c-format msgid "repository '%s' does not exist" @@ -4454,11 +4466,11 @@ msgid "" "--stdin-commits]\n" " [--changed-paths] [--[no-]max-new-filters <n>] [--" "[no-]progress]\n" -" <split options>" +" <split-options>" msgstr "" "git commit-graph write [--object-dir <dizin>] [--append]\n" -" [--split[=<<strateji>]] [--reachable | --stdin-packs " -"| --stdin-commits]\n" +" [--split[=<strateji>]] [--reachable | --stdin-packs | " +"--stdin-commits]\n" " [--changed-paths] [--[no-]max-new-filters <n>] [--" "[no-]progress]\n" " <bölme-seçenekleri>" @@ -6778,6 +6790,10 @@ msgid "unable to read tree (%s)" msgstr "aÄŸaç okunamıyor (%s)" #, c-format +msgid "unable to read tree %s" +msgstr "%s aÄŸacı okunamıyor" + +#, c-format msgid "unable to grep from object of type %s" msgstr "%s türündeki bir nesneden grep yapılamıyor" @@ -7190,10 +7206,6 @@ msgid "SHA1 COLLISION FOUND WITH %s !" msgstr "%s İLE SHA1 ÇARPIÅžMASI BULUNDU!" #, c-format -msgid "unable to read %s" -msgstr "%s okunamıyor" - -#, c-format msgid "cannot read existing object info %s" msgstr "var olan nesne bilgisi %s okunamıyor" @@ -7333,13 +7345,15 @@ msgstr "paket nesnelerinde fsck hatası" msgid "" "git init [-q | --quiet] [--bare] [--template=<template-directory>]\n" " [--separate-git-dir <git-dir>] [--object-format=<format>]\n" +" [--ref-format=<format>]\n" " [-b <branch-name> | --initial-branch=<branch-name>]\n" " [--shared[=<permissions>]] [<directory>]" msgstr "" "git init [-q | --quiet] [--bare] [--template=<ÅŸablon-dizini>]\n" " [--separate-git-dir <git-dizini>] [--object-format=<biçim>]\n" +" [--ref-format=<biçim>]\n" " [-b <dal-adı> | --initial-branch=<dal-adı>]\n" -" [--shared[=<izinler>]] [<dizin>]" +" [--shared[=<izin>]] [<dizin>]" msgid "permissions" msgstr "izinler" @@ -8039,6 +8053,13 @@ msgstr "" "git merge-file [<seçenekler>] [-L <ad1> [-L <orij> [-L <ad2>]]] <dosya1> " "<orij-dosya> <dosya2>" +msgid "" +"option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and " +"\"histogram\"" +msgstr "" +"diff-algorithm seçeneÄŸi ÅŸunları kabul eder: \"myers\", \"minimal\", " +"\"patience\" ve \"histogram\"" + msgid "send results to standard output" msgstr "sonuçları standart çıktıya gönder" @@ -8060,6 +8081,12 @@ msgstr "çakışmalarda onların sürümünü kullan" msgid "for conflicts, use a union version" msgstr "çakışmalarda birlik olmuÅŸ bir sürüm kullan" +msgid "<algorithm>" +msgstr "<algoritma>" + +msgid "choose a diff algorithm" +msgstr "bir diff algoritması seç" + msgid "for conflicts, use this marker size" msgstr "çakışmalarda bu imleyici boyutunu kullan" @@ -8150,9 +8177,6 @@ msgstr "--trivial-merge, tüm diÄŸer seçeneklerle uyumsuz" msgid "unknown strategy option: -X%s" msgstr "bilinmeyen strateji seçeneÄŸi: -X%s" -msgid "--merge-base is incompatible with --stdin" -msgstr "--merge-base, --stdin ile uyumsuz" - #, c-format msgid "malformed input line: '%s'." msgstr "hatalı oluÅŸturulmuÅŸ girdi satırı: '%s'." @@ -9078,6 +9102,10 @@ msgid "inconsistency with delta count" msgstr "delta sayımında tutarsızlık" #, c-format +msgid "invalid pack.allowPackReuse value: '%s'" +msgstr "geçersiz pack.allowPackReuse deÄŸeri: '%s'" + +#, c-format msgid "" "value of uploadpack.blobpackfileuri must be of the form '<object-hash> <pack-" "hash> <uri>' (got '%s')" @@ -9332,10 +9360,10 @@ msgstr "Nesneler ortaya dökülüyor" #, c-format msgid "" "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-" -"reused %<PRIu32>" +"reused %<PRIu32> (from %<PRIuMAX>)" msgstr "" "Toplam %<PRIu32> (delta %<PRIu32>), yeniden kullanılan %<PRIu32> (delta " -"%<PRIu32>), yeniden kullanılan paket %<PRIu32>" +"%<PRIu32>), yeniden kullanılan paket %<PRIu32> (%<PRIuMAX> konumundan)" msgid "" "'git pack-redundant' is nominated for removal.\n" @@ -10299,13 +10327,6 @@ msgid "switch `C' expects a numerical value" msgstr "'C' anahtarı sayısal bir deÄŸer bekliyor" msgid "" -"apply options are incompatible with rebase.autoSquash. Consider adding --no-" -"autosquash" -msgstr "" -"seçenekleri uygula, rebase.autoSquash ile uyumlu deÄŸil. --no-autosquash " -"eklemeyi düşünün" - -msgid "" "apply options are incompatible with rebase.rebaseMerges. Consider adding --" "no-rebase-merges" msgstr "" @@ -10717,10 +10738,10 @@ msgid_plural "" "Note: Some branches outside the refs/remotes/ hierarchy were not removed;\n" "to delete them, use:" msgstr[0] "" -"Not: refs/remotes hiyerarÅŸisi dışındaki bir dal kaldırılmadı;\n" +"Not: refs/remotes/ hiyerarÅŸisi dışındaki bir dal kaldırılmadı;\n" "onu silmek için ÅŸunu kullanın:" msgstr[1] "" -"Not: refs/remotes hiyerarÅŸisi dışındaki bazı dallar kaldırılmadı;\n" +"Not: refs/remotes/ hiyerarÅŸisi dışındaki bazı dallar kaldırılmadı;\n" "onları silmek için ÅŸunu kullanın:" #, c-format @@ -11298,6 +11319,76 @@ msgstr "--convert-graft-file argüman almaz" msgid "only one pattern can be given with -l" msgstr "-l ile yalnızca bir dizgi verilebilir" +msgid "need some commits to replay" +msgstr "yeniden oynatmak için birkaç iÅŸleme gerekli" + +msgid "--onto and --advance are incompatible" +msgstr "--onto ve --advance birbiriyle uyumsuz" + +msgid "all positive revisions given must be references" +msgstr "verilen tüm pozitif revizyonlar, baÅŸvuru olmalı" + +msgid "argument to --advance must be a reference" +msgstr "--advance'a olan argüman bir baÅŸvuru olmalı" + +msgid "" +"cannot advance target with multiple sources because ordering would be ill-" +"defined" +msgstr "" +"birden çok kaynaklı hedef ilerletilemiyor; çünkü sıralama hatalı tanımlanmış " +"olurdu" + +msgid "" +"cannot implicitly determine whether this is an --advance or --onto operation" +msgstr "" +"bunun --advance veya --onto iÅŸlemi olup olmadığı örtük olarak algılanamıyor" + +msgid "" +"cannot advance target with multiple source branches because ordering would " +"be ill-defined" +msgstr "" +"birden çok kaynak dallı hedef ilerletilemiyor; çünkü sıralama hatalı " +"tanımlanmış olurdu" + +msgid "cannot implicitly determine correct base for --onto" +msgstr "--onto için olan doÄŸru temel örtük olarak algılanamıyor" + +msgid "" +"(EXPERIMENTAL!) git replay ([--contained] --onto <newbase> | --advance " +"<branch>) <revision-range>..." +msgstr "" +"(DENEYSEL!) git replay ([--contained] --onto <yeni-temel> | --advance <dal>) " +"<revizyon-erimi>..." + +msgid "make replay advance given branch" +msgstr "verilen dalı önceden yeniden oynat" + +msgid "replay onto given commit" +msgstr "verilen iÅŸlemeye yeniden oynat" + +msgid "advance all branches contained in revision-range" +msgstr "revizyon eriminde içerilen tüm dalları ilerlet" + +msgid "option --onto or --advance is mandatory" +msgstr "--onto veya --advance seçeneÄŸinin kullanımı zorunlu" + +#, c-format +msgid "" +"some rev walking options will be overridden as '%s' bit in 'struct rev_info' " +"will be forced" +msgstr "" +"'struct rev_info' içindeki '%s' biti zorlanacağından kimi revizyon yürütme " +"seçenekleri geçersiz kılınacak" + +msgid "error preparing revisions" +msgstr "revizyonlar hazırlanırken hata" + +msgid "replaying down to root commit is not supported yet!" +msgstr "kök iÅŸlemeye kadar yeniden oynatma henüz desteklenmiyor!" + +msgid "replaying merge commits is not supported yet!" +msgstr "birleÅŸtirme iÅŸlemelerini yeniden oynatma henüz desteklenmiyor!" + msgid "" "git rerere [clear | forget <pathspec>... | diff | status | remaining | gc]" msgstr "" @@ -11506,15 +11597,6 @@ msgstr "--prefix bir argüman gerektiriyor" msgid "unknown mode for --abbrev-ref: %s" msgstr "--abbrev-ref için bilinmeyen kip: %s" -msgid "--exclude-hidden cannot be used together with --branches" -msgstr "--exclude-hidden, --branches ile birlikte kullanılamıyor" - -msgid "--exclude-hidden cannot be used together with --tags" -msgstr "--exclude-hidden, --tags ile birlikte kullanılamıyor" - -msgid "--exclude-hidden cannot be used together with --remotes" -msgstr "--exclude-hidden, --remotes ile birlikte kullanılamıyor" - msgid "this operation must be run in a work tree" msgstr "bu iÅŸlem bir çalışma aÄŸacı içinde çalıştırılmalı" @@ -11920,9 +12002,6 @@ msgstr "sonuçları stdout'a yazdırma (--verify ile birlikte kullanışlı)" msgid "show refs from stdin that aren't in local repository" msgstr "stdin'den yerel bir depoda olmayan baÅŸvuruları göster" -msgid "only one of '%s', '%s' or '%s' can be given" -msgstr "yalnızca '%s', '%s' veya '%s' arasından biri verilebilir" - msgid "" "git sparse-checkout (init | list | set | add | reapply | disable | check-" "rules) [<options>]" @@ -13366,29 +13445,29 @@ msgstr "Olası kaynak dal yok, '--orphan' anlamı çıkarılıyor" #, c-format msgid "" -"If you meant to create a worktree containing a new orphan branch\n" +"If you meant to create a worktree containing a new unborn branch\n" "(branch with no commits) for this repository, you can do so\n" "using the --orphan flag:\n" "\n" " git worktree add --orphan -b %s %s\n" msgstr "" -"Bu depo için yeni bir yetim dal içeren (iÅŸlemesiz dal) bir\n" -"çalışma aÄŸacı oluÅŸturmak istediyseniz bunu --orphan bayrağı\n" -"ile yapabilirsiniz:\n" +"Bu depo için henüz doÄŸmamış bir dal (iÅŸleme içermeyen dal) içeren\n" +"bir çalışma aÄŸacı oluÅŸturmak istediyseniz bunu --orphan bayrağını\n" +"kullanarak yapabilirsiniz:\n" "\n" " git worktree add --orphan -b %s %s\n" #, c-format msgid "" -"If you meant to create a worktree containing a new orphan branch\n" +"If you meant to create a worktree containing a new unborn branch\n" "(branch with no commits) for this repository, you can do so\n" "using the --orphan flag:\n" "\n" " git worktree add --orphan %s\n" msgstr "" -"Bu depo için yeni bir yetim dal içeren (iÅŸlemesiz dal) bir\n" -"çalışma aÄŸacı oluÅŸturmak istediyseniz bunu --orphan bayrağı\n" -"ile yapabilirsiniz:\n" +"Bu depo için henüz doÄŸmamış bir dal (iÅŸleme içermeyen dal) içeren\n" +"bir çalışma aÄŸacı oluÅŸturmak istediyseniz bunu --orphan bayrağını\n" +"kullanarak yapabilirsiniz:\n" "\n" " git worktree add --orphan %s\n" @@ -13447,6 +13526,10 @@ msgid "initializing" msgstr "ilklendiriliyor" #, c-format +msgid "could not find created worktree '%s'" +msgstr "oluÅŸturulan '%s' çalışma aÄŸacı bulunamadı" + +#, c-format msgid "Preparing worktree (new branch '%s')" msgstr "Çalışma aÄŸacı hazırlanıyor (yeni dal '%s')" @@ -13483,10 +13566,6 @@ msgstr "" "Bir uzak konum olmasına raÄŸmen hiçbir yerel/uzak baÅŸvuru yok, durduruluyor;\n" "geçersiz kılmak veya önce bir uzak konum getirmek için 'add -f' kullanın" -#, c-format -msgid "'%s' and '%s' cannot be used together" -msgstr "'%s' ve '%s' birlikte kullanılamaz" - msgid "checkout <branch> even if already checked out in other worktree" msgstr "diÄŸer çalışma aÄŸacında çıkış yapılmış olsa bile <dal> çıkışını yap" @@ -13496,8 +13575,8 @@ msgstr "yeni bir dal oluÅŸtur" msgid "create or reset a branch" msgstr "yeni bir dal oluÅŸtur veya sıfırla" -msgid "create unborn/orphaned branch" -msgstr "doÄŸmamış/yetim bırakılmış dal oluÅŸtur" +msgid "create unborn branch" +msgstr "henüz doÄŸmamış dal oluÅŸtur" msgid "populate the new working tree" msgstr "yeni çalışma aÄŸacını doldur" @@ -13519,11 +13598,8 @@ msgid "options '%s', '%s', and '%s' cannot be used together" msgstr "'%s', '%s' ve '%s' seçenekleri birlikte kullanılamaz" #, c-format -msgid "options '%s', and '%s' cannot be used together" -msgstr "'%s' ve '%s' seçenekleri birlikte kullanılamaz" - -msgid "<commit-ish>" -msgstr "<iÅŸlememsi>" +msgid "option '%s' and commit-ish cannot be used together" +msgstr "'%s' seçeneÄŸi ve iÅŸlememsiler birlikte kullanılamaz" msgid "added with --lock" msgstr "--lock ile eklendi" @@ -14135,6 +14211,10 @@ msgstr "Bir depodaki paketlenmemiÅŸ nesneleri paketle" msgid "Create, list, delete refs to replace objects" msgstr "Nesne deÄŸiÅŸtirmek için baÅŸvurular oluÅŸtur, sil, listele" +msgid "EXPERIMENTAL: Replay commits on a new base, works with bare repos too" +msgstr "" +"DENEYSEL: İşlemeleri yeni temelde yeniden oynat, çıplak depolarla da çalışır" + msgid "Generates a summary of pending changes" msgstr "Bekleyen deÄŸiÅŸikliklerin bir özetini çıkart" @@ -14373,6 +14453,32 @@ msgstr "Büyük Git depolarını yönetmek için bir araç" msgid "commit-graph file is too small" msgstr "commit-graph dosyası pek küçük" +msgid "commit-graph oid fanout chunk is wrong size" +msgstr "commit-graph OID çıkış sayısı iri parçası boyutu yanlış" + +msgid "commit-graph fanout values out of order" +msgstr "commit-graph çıkış sayısı deÄŸerleri sırasız: fanout[%d] = %u != %u" + +msgid "commit-graph OID lookup chunk is the wrong size" +msgstr "commit-graph OID arama iri parçası boyutu yanlış" + +msgid "commit-graph commit data chunk is wrong size" +msgstr "commit-graph iÅŸleme verisi iri parçası boyutu yanlış" + +msgid "commit-graph generations chunk is wrong size" +msgstr "commit-graph kuÅŸaklar iri parçası boyutu yanlış" + +msgid "commit-graph changed-path index chunk is too small" +msgstr "commit-graph changed-path indeksi iri parçası boyutu pek küçük" + +#, c-format +msgid "" +"ignoring too-small changed-path chunk (%<PRIuMAX> < %<PRIuMAX>) in commit-" +"graph file" +msgstr "" +"commit-graph dosyasındaki pek küçük changed-path iri parçası (%<PRIuMAX> < " +"%<PRIuMAX>) yok sayılıyor" + #, c-format msgid "commit-graph signature %X does not match signature %X" msgstr "commit-graph imzası %X, %X ile eÅŸleÅŸmiyor" @@ -14389,6 +14495,17 @@ msgstr "commit-graph saÄŸlama sürümü %X, %X ile eÅŸleÅŸmiyor" msgid "commit-graph file is too small to hold %u chunks" msgstr "commit-graph dosyası %u iri parça tutmak için pek küçük" +msgid "commit-graph required OID fanout chunk missing or corrupted" +msgstr "" +"commit-graph'ten gerekli OID çıkış sayısı iri parçası eksik veya hasarlı" + +msgid "commit-graph required OID lookup chunk missing or corrupted" +msgstr "commit-graph'ten gerekli OID arama iri parçası eksik veya hasarlı" + +msgid "commit-graph required commit data chunk missing or corrupted" +msgstr "" +"commit-graph'ten gerekli OID çıkış sayısı iri parçası eksik veya hasarlı" + msgid "commit-graph has no base graphs chunk" msgstr "commit-graph temel grafiÄŸi iri parçasına iye deÄŸil" @@ -14402,6 +14519,9 @@ msgstr "commit-graph zinciri eÅŸleÅŸmiyor" msgid "commit count in base graph too high: %<PRIuMAX>" msgstr "temel grafikteki iÅŸleme sayısı pek yüksek: %<PRIuMAX>" +msgid "commit-graph chain file too small" +msgstr "commit-graph zincir dosyası pek küçük" + #, c-format msgid "invalid commit-graph chain: line '%s' not a hash" msgstr "geçersiz commit-graph zinciri: '%s'. satır bir saÄŸlama deÄŸil" @@ -14422,6 +14542,9 @@ msgstr "commit-graph, taşım oluÅŸturma verisi gerektiriyor; ancak hiç yok" msgid "commit-graph overflow generation data is too small" msgstr "commit-graph, taşım üretim verisi pek küçük" +msgid "commit-graph extra-edges pointer out of bounds" +msgstr "commit-graph extra-edges iÅŸaretçisi sınırlar dışında" + msgid "Loading known commits in commit graph" msgstr "İşleme grafiÄŸindeki bilinen iÅŸlemeler yükleniyor" @@ -15563,6 +15686,10 @@ msgid "Unknown value for 'diff.submodule' config variable: '%s'" msgstr "'diff.submodule' yapılandırma deÄŸiÅŸkeni için bilinmeyen deÄŸer: '%s'" #, c-format +msgid "unknown value for config '%s': %s" +msgstr "'%s' yapılandırması için bilinmeyen deÄŸer: %s" + +#, c-format msgid "" "Found errors in 'diff.dirstat' config variable:\n" "%s" @@ -15642,13 +15769,6 @@ msgstr "hatalı --color-moved argümanı: %s" msgid "invalid mode '%s' in --color-moved-ws" msgstr "--color-moved-ws içinde geçersiz kip '%s'" -msgid "" -"option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and " -"\"histogram\"" -msgstr "" -"diff-algorithm seçeneÄŸi ÅŸunları kabul eder: \"myers\", \"minimal\", " -"\"patience\" ve \"histogram\"" - #, c-format msgid "invalid argument to %s" msgstr "%s için geçersiz argüman" @@ -15692,8 +15812,8 @@ msgstr "makinede okunabilen --stat" msgid "output only the last line of --stat" msgstr "--stat'ın yalnızca son satırını çıktı ver" -msgid "<param1,param2>..." -msgstr "<param1,param2>..." +msgid "<param1>,<param2>..." +msgstr "<param1>,<param2>..." msgid "" "output the distribution of relative amount of changes for each sub-directory" @@ -15703,8 +15823,8 @@ msgstr "" msgid "synonym for --dirstat=cumulative" msgstr "--dirstat=cumulative eÅŸanlamlısı" -msgid "synonym for --dirstat=files,param1,param2..." -msgstr "--dirstat=files,param1,param2... eÅŸanlamlısı" +msgid "synonym for --dirstat=files,<param1>,<param2>..." +msgstr "--dirstat=files,<param1>,<param2>... eÅŸanlamlısı" msgid "warn if changes introduce conflict markers or whitespace errors" msgstr "" @@ -15879,12 +15999,6 @@ msgstr "diff'i \"patience diff\" algoritmasını kullanarak oluÅŸtur" msgid "generate diff using the \"histogram diff\" algorithm" msgstr "diff'i \"histogram diff\" algoritmasını kullanarak oluÅŸtur" -msgid "<algorithm>" -msgstr "<algoritma>" - -msgid "choose a diff algorithm" -msgstr "bir diff algoritması seç" - msgid "<text>" msgstr "<metin>" @@ -17367,7 +17481,13 @@ msgid "failed to read the cache" msgstr "önbellek okunamadı" msgid "multi-pack-index OID fanout is of the wrong size" -msgstr "multi-pack-index OID ikiye bölümünün boyutu hatalı" +msgstr "multi-pack-index OID çıkış sayısı boyutu yanlış" + +#, c-format +msgid "" +"oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]" +msgstr "" +"oid çıkış sayısı sırasız: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]" msgid "multi-pack-index OID lookup chunk is the wrong size" msgstr "multi-pack-index OID arama iri parçası yanlış boyutlu" @@ -17415,6 +17535,13 @@ msgstr "multi-pack-index paket adlarının sırasız: '%s' ÅŸundan önce: '%s'" msgid "bad pack-int-id: %u (%u total packs)" msgstr "hatalı pack-int-id: %u (%u toplam paket)" +msgid "MIDX does not contain the BTMP chunk" +msgstr "MIDX, BTMP iri parçasını içermiyor" + +#, c-format +msgid "could not load bitmapped pack %<PRIu32>" +msgstr "biteÅŸlemli %<PRIu32> paketi yüklenemedi" + msgid "multi-pack-index stores a 64-bit offset, but off_t is too small" msgstr "multi-pack-index bir 64 bit ofset depoluyor; ancak off_t pek küçük" @@ -17498,11 +17625,6 @@ msgstr "yanlış saÄŸlama toplamı" msgid "Looking for referenced packfiles" msgstr "BaÅŸvurulmuÅŸ paket dosyaları aranıyor" -#, c-format -msgid "" -"oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]" -msgstr "oid fanout sırasız: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]" - msgid "the midx contains no oid" msgstr "midx bir oid içermiyor" @@ -18022,9 +18144,12 @@ msgstr "çoklu paket biteÅŸlemi gereken ters indeksi içermiyor" msgid "could not open pack %s" msgstr "%s paketi açılamadı" +msgid "could not determine MIDX preferred pack" +msgstr "MIDX yeÄŸlenen paketi algılanamadı" + #, c-format msgid "preferred pack (%s) is invalid" -msgstr "tercih edilen (%s) paket geçersiz" +msgstr "yeÄŸlenen paket (%s) geçersiz" msgid "corrupt bitmap lookup table: triplet position out of index" msgstr "hasarlı biteÅŸlem arama tablosu: üçlü konum indeks dışında" @@ -18042,6 +18167,10 @@ msgstr "" "hasarlı ewah biteÅŸlemi: \"%s\" iÅŸlemesinin biteÅŸleminde kısaltılmış üstbilgi" #, c-format +msgid "unable to load pack: '%s', disabling pack-reuse" +msgstr "paket yüklenemiyor: '%s', pack-reuse devre dışı bırakılıyor" + +#, c-format msgid "object '%s' not found in type bitmaps" msgstr "'%s' nesnesi, tür biteÅŸlemlerinde bulunamadı" @@ -18132,6 +18261,9 @@ msgstr "%<PRIu64> konumunda geçersiz rev-index konumu: %<PRIu32> != %<PRIu32>" msgid "multi-pack-index reverse-index chunk is the wrong size" msgstr "multi-pack-index reverse-index iri parçası yanlış boyutlu" +msgid "could not determine preferred pack" +msgstr "yeÄŸlenen paket algılanamadı" + msgid "cannot both write and verify reverse index" msgstr "ters indeks dosyası hem yazılıp hem doÄŸrulanamıyor" @@ -18195,10 +18327,6 @@ msgid "%s expects a non-negative integer value with an optional k/m/g suffix" msgstr "%s negatif olmayan bir tamsayı bekliyor, isteÄŸe baÄŸlı k/m/g eki ile" #, c-format -msgid "%s is incompatible with %s" -msgstr "%s, %s ile uyumsuz" - -#, c-format msgid "ambiguous option: %s (could be --%s%s or --%s%s)" msgstr "belirsiz seçenek: %s (--%s%s veya --%s%s olabilir)" @@ -18512,10 +18640,6 @@ msgid "unable to add '%s' to index" msgstr "'%s' indekse eklenemiyor" #, c-format -msgid "unable to stat '%s'" -msgstr "'%s' dosyasının bilgileri alınamıyor" - -#, c-format msgid "'%s' appears as both a file and as a directory" msgstr "'%s' hem bir dosya hem de bir dizin olarak görünüyor" @@ -19087,10 +19211,6 @@ msgid "cannot process '%s' and '%s' at the same time" msgstr "'%s' ve '%s' aynı anda iÅŸlenemiyor" #, c-format -msgid "could not remove reference %s" -msgstr "%s baÅŸvurusu kaldırılamadı" - -#, c-format msgid "could not delete reference %s: %s" msgstr "%s baÅŸvurusu silinemedi: %s" @@ -20446,6 +20566,9 @@ msgstr "KendiliÄŸinden zulalama çakışmalara neden oldu." msgid "Autostash exists; creating a new stash entry." msgstr "KendiliÄŸinden zulalama mevcut; yeni bir zula girdisi oluÅŸturuluyor." +msgid "autostash reference is a symref" +msgstr "kendiliÄŸinden zulalama baÅŸvurusu bir sembol baÅŸvurusu" + msgid "could not detach HEAD" msgstr "HEAD ayrılamadı" @@ -20757,6 +20880,10 @@ msgid "invalid initial branch name: '%s'" msgstr "geçersiz baÅŸlangıç dalı adı: '%s'" #, c-format +msgid "re-init: ignored --initial-branch=%s" +msgstr "re-init: --initial-branch=%s yok sayıldı" + +#, c-format msgid "unable to handle file type %d" msgstr "%d dosya türü ele alınamıyor" @@ -20767,15 +20894,16 @@ msgstr "%s ÅŸuraya taşınamıyor: %s" msgid "attempt to reinitialize repository with different hash" msgstr "depoyu baÅŸka bir saÄŸlama ile yeniden ilklendirme deneniyor" +msgid "" +"attempt to reinitialize repository with different reference storage format" +msgstr "" +"depo baÅŸka bir baÅŸvuru depolama biçimiyle yeniden ilklendirilmeye çalışılıyor" + #, c-format msgid "%s already exists" msgstr "%s halihazırda var" #, c-format -msgid "re-init: ignored --initial-branch=%s" -msgstr "re-init: --initial-branch=%s yok sayıldı" - -#, c-format msgid "Reinitialized existing shared Git repository in %s%s\n" msgstr "%s%s içindeki var olan paylaşılan Git deposu yeniden ilklendirildi\n" @@ -21039,12 +21167,6 @@ msgstr "her bir yinelemeden önce önbellek aÄŸacını temizle" msgid "number of entries in the cache tree to invalidate (default 0)" msgstr "önbellek aÄŸacındaki geçersizleÅŸtirilecek girdi sayısı (öntanımlı 0)" -msgid "unhandled options" -msgstr "beklenmeyen seçenekler" - -msgid "error preparing revisions" -msgstr "revizyonlar hazırlanırken hata" - #, c-format msgid "commit %s is not marked reachable" msgstr "%s iÅŸlemesi ulaşılabilir olarak imlenmedi" @@ -21198,9 +21320,6 @@ msgstr "uzak servis yolu ayarlama protokol tarafından desteklenmiyor" msgid "invalid remote service path" msgstr "geçersiz uzak konum servis yolu" -msgid "operation not supported by protocol" -msgstr "iÅŸlem protokol tarafından desteklenmiyor" - #, c-format msgid "can't connect to subservice %s" msgstr "%s altservisine baÄŸlanılamıyor" @@ -21331,10 +21450,6 @@ msgid "support for protocol v2 not implemented yet" msgstr "protokol v2 desteÄŸi henüz yerine getirilmedi" #, c-format -msgid "unknown value for config '%s': %s" -msgstr "'%s' yapılandırması için bilinmeyen deÄŸer: %s" - -#, c-format msgid "transport '%s' not allowed" msgstr "'%s' taşıyıcısına izin verilmiyor" @@ -21387,6 +21502,9 @@ msgstr "bundle-uri iÅŸlemi protokol tarafından desteklenmiyor" msgid "could not retrieve server-advertised bundle-uri list" msgstr "sunucu tarafından tanıtılan bundle-uri listesi alınamadı" +msgid "operation not supported by protocol" +msgstr "iÅŸlem protokol tarafından desteklenmiyor" + msgid "too-short tree object" msgstr "aÄŸaç nesnesi çok kısa" @@ -22210,6 +22328,10 @@ msgstr "Ek olarak, indeksiniz iÅŸlenmemiÅŸ deÄŸiÅŸiklikler içeriyor." msgid "cannot %s: Your index contains uncommitted changes." msgstr "%s yapılamıyor: İndeksiniz iÅŸlenmemiÅŸ deÄŸiÅŸiklikler içeriyor." +#, c-format +msgid "unknown style '%s' given for '%s'" +msgstr "'%s' bilinmeyen biçemi ÅŸunun için verildi: '%s'" + msgid "" "Error: Your local changes to the following files would be overwritten by " "merge" @@ -9,7 +9,7 @@ msgstr "" "Project-Id-Version: Git v2.43\n" "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n" "POT-Creation-Date: 2023-11-09 14:26-0800\n" -"PO-Revision-Date: 2023-11-09 14:34-0800\n" +"PO-Revision-Date: 2024-02-11 09:26-0800\n" "Last-Translator: Arkadii Yakovets <ark@cho.red>\n" "Language-Team: Ukrainian <https://github.com/arkid15r/git-uk-l10n/>\n" "Language: uk\n" @@ -18,7 +18,7 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && " "n%10<=4 && (n%100<12 || n%100>14) ? 1 : 2);\n" -"X-Generator: Poedit 3.4.1\n" +"X-Generator: Poedit 3.4.2\n" #, c-format msgid "Huh (%s)?" @@ -1444,6 +1444,10 @@ msgid "Unexpected option --output" msgstr "Ðеочікувана Ð¾Ð¿Ñ†Ñ–Ñ --output" #, c-format +msgid "extra command line parameter '%s'" +msgstr "зайвий параметр командного Ñ€Ñдка: \"%s\"" + +#, c-format msgid "Unknown archive format '%s'" msgstr "Ðевідомий формат архіву \"%s\"" @@ -1489,6 +1493,14 @@ msgid "bad --attr-source or GIT_ATTR_SOURCE" msgstr "невірний --attr-source або GIT_ATTR_SOURCE" #, c-format +msgid "unable to stat '%s'" +msgstr "не вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ stat Ð´Ð»Ñ \"%s\"" + +#, c-format +msgid "unable to read %s" +msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ %s" + +#, c-format msgid "Badly quoted content in file '%s': %s" msgstr "Ðевірно процитований вміÑÑ‚ у файлі \"%s\": %s" @@ -1666,10 +1678,12 @@ msgstr "" msgid "not tracking: ambiguous information for ref '%s'" msgstr "не відÑтежуєтьÑÑ: неоднозначна Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ð´Ð»Ñ Ð¿Ð¾ÑÐ¸Ð»Ð°Ð½Ð½Ñ \"%s\"" +#. #-#-#-#-# branch.c.po #-#-#-#-# #. TRANSLATORS: This is a line listing a remote with duplicate #. refspecs in the advice message below. For RTL languages you'll #. probably want to swap the "%s" and leading " " space around. #. +#. #-#-#-#-# object-name.c.po #-#-#-#-# #. TRANSLATORS: This is line item of ambiguous object output #. from describe_ambiguous_object() above. For RTL languages #. you'll probably want to swap the "%s" and leading " " space @@ -2325,7 +2339,7 @@ msgid "" "git bisect start [--term-(new|bad)=<term> --term-(old|good)=<term>] [--no-" "checkout] [--first-parent] [<bad> [<good>...]] [--] [<pathspec>...]" msgstr "" -"git bisect start [--term-{new,bad}=<термін> --term-{old,good}=<термін>] " +"git bisect start [--term-(new,bad)=<термін> --term-(old,good)=<термін>] " "[--no-checkout] [--first-parent] [<поганий> [<добрий>...]] [--] " "[<визначник шлÑху>...]" @@ -2785,11 +2799,12 @@ msgid "couldn't look up commit object for '%s'" msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ об’єкт коміту Ð´Ð»Ñ \"%s\"" #, c-format -msgid "" -"the branch '%s' is not fully merged.\n" -"If you are sure you want to delete it, run 'git branch -D %s'" +msgid "the branch '%s' is not fully merged" +msgstr "гілка \"%s\" злита не повніÑтю" + +#, c-format +msgid "If you are sure you want to delete it, run 'git branch -D %s'" msgstr "" -"гілка \"%s\" злита не повніÑтю.\n" "Якщо ви впевнені, що хочете Ñ—Ñ— видалити, виконайте \"git branch -D %s\"" msgid "update of config-file failed" @@ -2856,11 +2871,11 @@ msgstr "неприпуÑтима назва гілки: \"%s\"" #, c-format msgid "no commit on branch '%s' yet" -msgstr "поки що немає комітів в гілці \"%s\"" +msgstr "поки що немає комітів у гілці \"%s\"" #, c-format msgid "no branch named '%s'" -msgstr "немає гілки з ім’Ñм \"%s\"" +msgstr "немає гілки з назвою \"%s\"" msgid "branch rename failed" msgstr "не вдалоÑÑ Ð¿ÐµÑ€ÐµÐ¹Ð¼ÐµÐ½ÑƒÐ²Ð°Ñ‚Ð¸ гілку" @@ -3078,7 +3093,7 @@ msgid "" "'--set-upstream-to' instead" msgstr "" "Ð¾Ð¿Ñ†Ñ–Ñ \"--set-upstream\" більше не підтримуєтьÑÑ. Будь лаÑка, викориÑтовуйте " -"\"--track\" або \"--set-upstream-to\"" +"\"--track\" або \"--set-upstream-to\" заміÑть неї" msgid "git version:\n" msgstr "верÑÑ–Ñ git:\n" @@ -3848,8 +3863,8 @@ msgstr "переключити примуÑово (викинути локаль msgid "new-branch" msgstr "нова-гілка" -msgid "new unparented branch" -msgstr "нова гілка без джерела" +msgid "new unborn branch" +msgstr "нова ненароджена гілка" msgid "update ignored files (default)" msgstr "оновити ігноровані файли (за замовчуваннÑм)" @@ -4100,9 +4115,6 @@ msgstr "" "clean.requireForce вÑтановлено у true за замовчуваннÑм Ñ– не задано ні -i, ні " "-n, ні -f; відмовлено в прибиранні" -msgid "-x and -X cannot be used together" -msgstr "-x та -X не можна викориÑтовувати разом" - msgid "git clone [<options>] [--] <repo> [<dir>]" msgstr "git clone [<опції>] [--] <Ñховище> [<директоріÑ>]" @@ -4193,6 +4205,9 @@ msgstr "git директоріÑ" msgid "separate git dir from working tree" msgstr "відокремити git-директорію від робочого дерева" +msgid "specify the reference format to use" +msgstr "вкажіть формат поÑиланнÑ, Ñкий потрібно викориÑтовувати" + msgid "key=value" msgstr "ключ=значеннÑ" @@ -4311,11 +4326,9 @@ msgstr "Забагато аргументів." msgid "You must specify a repository to clone." msgstr "Треба вказати Ñховище Ð´Ð»Ñ ÐºÐ»Ð¾Ð½ÑƒÐ²Ð°Ð½Ð½Ñ." -msgid "" -"--bundle-uri is incompatible with --depth, --shallow-since, and --shallow-" -"exclude" -msgstr "" -"--bundle-uri неÑуміÑний з --depth, --shallow-since та --shallow-exclude" +#, c-format +msgid "unknown ref storage format '%s'" +msgstr "невідомий формат Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ Ð¿Ð¾Ñилань \"%s\"" #, c-format msgid "repository '%s' does not exist" @@ -4450,7 +4463,7 @@ msgid "" "--stdin-commits]\n" " [--changed-paths] [--[no-]max-new-filters <n>] [--" "[no-]progress]\n" -" <split options>" +" <split-options>" msgstr "" "git commit-graph write [--object-dir <директоріÑ>] [--append] [--object-dir " "<директоріÑ>] [--append] [--object-dir <директоріÑ>] [--append\n" @@ -4458,7 +4471,7 @@ msgstr "" "| --stdin-commits]\n" " [--changed-paths] [--[no-]max-new-filters <чиÑло>] [--" "[no-]progress]\n" -" <опції розділеннÑ>" +" <опції-розділеннÑ>" msgid "dir" msgstr "директоріÑ" @@ -6757,7 +6770,7 @@ msgid "scheduler to trigger git maintenance run" msgstr "планувальник Ð´Ð»Ñ Ð·Ð°Ð¿ÑƒÑку обÑÐ»ÑƒÐ³Ð¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ git" msgid "failed to set up maintenance schedule" -msgstr "не вдалоÑÑ Ð²Ñтановити графік обÑлуговуваннÑ" +msgstr "не вдалоÑÑ Ð²Ñтановити розклад обÑлуговуваннÑ" msgid "failed to add repo to global config" msgstr "не вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ Ñховище до глобальної конфігурації" @@ -6776,6 +6789,7 @@ msgstr "grep: не вдалоÑÑ Ñтворити потік: %s" msgid "invalid number of threads specified (%d) for %s" msgstr "невірно вказана кількіÑть потоків (%d) Ð´Ð»Ñ %s" +#. #-#-#-#-# grep.c.po #-#-#-#-# #. TRANSLATORS: %s is the configuration #. variable for tweaking threads, currently #. grep.threads @@ -6789,6 +6803,10 @@ msgid "unable to read tree (%s)" msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ дерево (%s)" #, c-format +msgid "unable to read tree %s" +msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ дерево %s" + +#, c-format msgid "unable to grep from object of type %s" msgstr "не вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ grep Ð´Ð»Ñ Ð¾Ð±â€™Ñ”ÐºÑ‚Ð° типу %s" @@ -7201,10 +7219,6 @@ msgid "SHA1 COLLISION FOUND WITH %s !" msgstr "ВИЯВЛЕÐО SHA1 КОЛІЗІЮ З %s!" #, c-format -msgid "unable to read %s" -msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ %s" - -#, c-format msgid "cannot read existing object info %s" msgstr "неможливо прочитати інформацію про Ñ–Ñнуючий об’єкт %s" @@ -7348,11 +7362,13 @@ msgstr "помилка fsck в об’єктах пакунка" msgid "" "git init [-q | --quiet] [--bare] [--template=<template-directory>]\n" " [--separate-git-dir <git-dir>] [--object-format=<format>]\n" +" [--ref-format=<format>]\n" " [-b <branch-name> | --initial-branch=<branch-name>]\n" " [--shared[=<permissions>]] [<directory>]" msgstr "" "git init [-q | --quiet] [--bare] [--template=<шаблон-директоріÑ>]\n" " [--separate-git-dir <git-директоріÑ>] [--object-format=<формат>]\n" +" [--ref-format=<формат>]\n" " [-b <назва-гілки> | --initial-branch=<назва-гілки>]\n" " [--shared[=<дозволи>]] [<директоріÑ>]" @@ -7400,8 +7416,8 @@ msgid "" " [--parse] [<file>...]" msgstr "" "git interpret-trailers [--in-place] [--trim-empty]\n" -" [(--trailer (<ключ>|<аліаÑКлюча>)" -"[(=|:)<значеннÑ>])...]\n" +" [(--trailer <ключ>|" +"<аліаÑКлюча>[(=|:)<значеннÑ>])...]\n" " [--parse] [<файл>...]" msgid "edit files in place" @@ -7411,7 +7427,7 @@ msgid "trim empty trailers" msgstr "обрізати порожні причепи" msgid "placement" -msgstr "розташуваннÑ" +msgstr "розміщеннÑ" msgid "where to place the new trailer" msgstr "де розміÑтити новий причіп" @@ -8065,11 +8081,18 @@ msgstr "" "git merge-file [<опції>] [-L <назва1> [-L <оріг> [-L <назва2>]]] <файл1> " "<оріг-файл> <файл2>" +msgid "" +"option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and " +"\"histogram\"" +msgstr "" +"Ð¾Ð¿Ñ†Ñ–Ñ diff-algorithm приймає Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ \"myers\", \"minimal\", \"patience\" " +"та \"histogram\"" + msgid "send results to standard output" msgstr "надÑилати результати до Ñтандартного виводу" msgid "use object IDs instead of filenames" -msgstr "викориÑтовувати ID обʼєктів заміÑть назв файлів" +msgstr "викориÑтовувати ідентифікатори обʼєктів заміÑть назв файлів" msgid "use a diff3 based merge" msgstr "викориÑтовувати Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð½Ð° оÑнові diff3" @@ -8086,6 +8109,12 @@ msgstr "у разі конфліктів викориÑтовувати їхню msgid "for conflicts, use a union version" msgstr "у разі конфліктів викориÑтовувати об’єднану верÑÑ–ÑŽ" +msgid "<algorithm>" +msgstr "<алгоритм>" + +msgid "choose a diff algorithm" +msgstr "вибрати алгоритм різниці" + msgid "for conflicts, use this marker size" msgstr "у разі конфліктів викориÑтовувати цей розмір маркера" @@ -8097,7 +8126,7 @@ msgstr "вÑтановити мітки Ð´Ð»Ñ Ñ„Ð°Ð¹Ð»1/оріг-файл/фаР#, c-format msgid "object '%s' does not exist" -msgstr "обʼєкт \"%s\" не Ñ–Ñнує" +msgstr "об’єкт \"%s\" не Ñ–Ñнує" msgid "Could not write object file" msgstr "Ðе вдалоÑÑ Ð·Ð°Ð¿Ð¸Ñати файл обʼєкта" @@ -8177,9 +8206,6 @@ msgstr "--trivial-merge неÑуміÑна з уÑіма іншими Ð¾Ð¿Ñ†Ñ–Ñ msgid "unknown strategy option: -X%s" msgstr "невідомий варіант Ñтратегії: -X%s" -msgid "--merge-base is incompatible with --stdin" -msgstr "--merge-base неÑуміÑна з --stdin" - #, c-format msgid "malformed input line: '%s'." msgstr "невірно Ñформований Ñ€Ñдок вводу: \"%s\"." @@ -9113,6 +9139,10 @@ msgid "inconsistency with delta count" msgstr "неÑÐ¿Ñ–Ð²Ð¿Ð°Ð´Ñ–Ð½Ð½Ñ Ð· підрахунком дельти" #, c-format +msgid "invalid pack.allowPackReuse value: '%s'" +msgstr "неприпуÑтиме Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ pack.allowPackReuse: \"%s\"" + +#, c-format msgid "" "value of uploadpack.blobpackfileuri must be of the form '<object-hash> <pack-" "hash> <uri>' (got '%s')" @@ -9368,10 +9398,10 @@ msgstr "ÐŸÐµÑ€ÐµÑ€Ð°Ñ…ÑƒÐ²Ð°Ð½Ð½Ñ Ð¾Ð±Ê¼Ñ”ÐºÑ‚Ñ–Ð²" #, c-format msgid "" "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-" -"reused %<PRIu32>" +"reused %<PRIu32> (from %<PRIuMAX>)" msgstr "" "Ð’Ñього %<PRIu32> (дельта %<PRIu32>), повторно викориÑтано %<PRIu32> (дельта " -"%<PRIu32>), повторно викориÑтано пакунків %<PRIu32>" +"%<PRIu32>), повторно викориÑтано пакунків %<PRIu32> (з %<PRIuMAX>)" msgid "" "'git pack-redundant' is nominated for removal.\n" @@ -10361,13 +10391,6 @@ msgid "switch `C' expects a numerical value" msgstr "перемикач \"C\" очікує чиÑлове значеннÑ" msgid "" -"apply options are incompatible with rebase.autoSquash. Consider adding --no-" -"autosquash" -msgstr "" -"apply опції неÑуміÑні з rebase.autoSquash. РозглÑньте можливіÑть Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ " -"--no-autosquash" - -msgid "" "apply options are incompatible with rebase.rebaseMerges. Consider adding --" "no-rebase-merges" msgstr "" @@ -11156,7 +11179,7 @@ msgid "write a multi-pack index of the resulting packs" msgstr "запиÑати multi-pack-index результуючих пакунків" msgid "pack prefix to store a pack containing pruned objects" -msgstr "Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ Ð¿Ð°ÐºÑƒÐ½ÐºÐ° Ð´Ð»Ñ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÐ° з обрізаними обʼєктами" +msgstr "Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ Ð´Ð»Ñ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÐ° з обрізаними обʼєктами" msgid "pack prefix to store a pack containing filtered out objects" msgstr "Ð¿Ñ€ÐµÑ„Ñ–ÐºÑ Ð´Ð»Ñ Ð·Ð±ÐµÑ€Ñ–Ð³Ð°Ð½Ð½Ñ Ð¿Ð°ÐºÑƒÐ½ÐºÐ° з відфільтрованими обʼєктами" @@ -11166,7 +11189,7 @@ msgstr "неможливо видалити пакунки в precious-objects Ñ #, c-format msgid "option '%s' can only be used along with '%s'" -msgstr "опцію \"%s\" можна викориÑтовувати тільки разом з \"%s\"" +msgstr "Ð¾Ð¿Ñ†Ñ–Ñ \"%s\" може бути викориÑтана тільки разом з \"%s\"" msgid "Nothing new to pack." msgstr "Ðемає нічого нового Ð´Ð»Ñ Ð¿Ð°ÐºÑƒÐ²Ð°Ð½Ð½Ñ." @@ -11371,6 +11394,75 @@ msgstr "--convert-graft-file не потребує аргументів" msgid "only one pattern can be given with -l" msgstr "тільки один шаблон може бути заданий з -l" +msgid "need some commits to replay" +msgstr "потрібні деÑкі комміти Ð´Ð»Ñ Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ" + +msgid "--onto and --advance are incompatible" +msgstr "--onto та --advance неÑуміÑні" + +msgid "all positive revisions given must be references" +msgstr "вÑÑ– надані позитивні ревізії мають бути поÑиланнÑми" + +msgid "argument to --advance must be a reference" +msgstr "аргумент до --advance має бути поÑиланнÑм" + +msgid "" +"cannot advance target with multiple sources because ordering would be ill-" +"defined" +msgstr "" +"неможливо проÑунути поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð· декількома джерелами, тому що впорÑÐ´ÐºÑƒÐ²Ð°Ð½Ð½Ñ " +"буде нечітко визначеним" + +msgid "" +"cannot implicitly determine whether this is an --advance or --onto operation" +msgstr "неможливо неÑвно визначити, чи це Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ñ --advance або --onto" + +msgid "" +"cannot advance target with multiple source branches because ordering would " +"be ill-defined" +msgstr "" +"неможливо проÑунути поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð· декількома джерельними гілками, тому що " +"впорÑÐ´ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð±ÑƒÐ´Ðµ нечітко визначеним" + +msgid "cannot implicitly determine correct base for --onto" +msgstr "неможливо неÑвно визначити вірну базу Ð´Ð»Ñ --onto" + +msgid "" +"(EXPERIMENTAL!) git replay ([--contained] --onto <newbase> | --advance " +"<branch>) <revision-range>..." +msgstr "" +"(ЕКСПЕРИМЕÐТÐЛЬÐО!) git replay ([--contained] --onto <нова-база> | --advance " +"<гілка>) <діапазон-ревізій>..." + +msgid "make replay advance given branch" +msgstr "зробити Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð· проÑуваннÑм даної гілки" + +msgid "replay onto given commit" +msgstr "відтворити на заданий коміт" + +msgid "advance all branches contained in revision-range" +msgstr "проÑунути вÑÑ– гілки, що міÑÑ‚ÑтьÑÑ Ð² діапазоні ревізій" + +msgid "option --onto or --advance is mandatory" +msgstr "Ð¾Ð¿Ñ†Ñ–Ñ --onto або --advance Ñ” обовʼÑзковою" + +#, c-format +msgid "" +"some rev walking options will be overridden as '%s' bit in 'struct rev_info' " +"will be forced" +msgstr "" +"деÑкі опції Ð¿Ñ€Ð¾Ñ…Ð¾Ð´Ð¶ÐµÐ½Ð½Ñ Ð¿Ð¾ ревізіÑм будуть перевизначені, оÑкільки біт " +"\"%s\" у \"struct rev_info\" буде примуÑово викориÑтано" + +msgid "error preparing revisions" +msgstr "помилка при підготовці ревізій" + +msgid "replaying down to root commit is not supported yet!" +msgstr "Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð´Ð¾ кореневого коміту поки що не підтримуєтьÑÑ!" + +msgid "replaying merge commits is not supported yet!" +msgstr "Ð²Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÐºÐ¾Ð¼Ð¼Ñ–Ñ‚Ñ–Ð² Ð·Ð»Ð¸Ñ‚Ñ‚Ñ Ð¿Ð¾ÐºÐ¸ що не підтримуєтьÑÑ!" + msgid "" "git rerere [clear | forget <pathspec>... | diff | status | remaining | gc]" msgstr "" @@ -11583,15 +11675,6 @@ msgstr "--prefix потребує аргументу" msgid "unknown mode for --abbrev-ref: %s" msgstr "невідомий режим Ð´Ð»Ñ --abbrev-ref: %s" -msgid "--exclude-hidden cannot be used together with --branches" -msgstr "--exclude-hidden не можна викориÑтовувати разом з --branches" - -msgid "--exclude-hidden cannot be used together with --tags" -msgstr "--exclude-hidden неможливо викориÑтовувати разом з --tags" - -msgid "--exclude-hidden cannot be used together with --remotes" -msgstr "--exclude-hidden неможливо викориÑтовувати разом з --remotes" - msgid "this operation must be run in a work tree" msgstr "цю операцію треба виконувати в робочому дереві" @@ -12005,10 +12088,6 @@ msgstr "не виводити результати у stdout (кориÑно з msgid "show refs from stdin that aren't in local repository" msgstr "показати поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð· stdin, Ñких немає в локальному Ñховищі" -#, c-format -msgid "only one of '%s', '%s' or '%s' can be given" -msgstr "можна вказати тільки один з \"%s\", \"%s\" або \"%s\"" - msgid "" "git sparse-checkout (init | list | set | add | reapply | disable | check-" "rules) [<options>]" @@ -12820,7 +12899,7 @@ msgstr "" "branch] [--] [<шлÑÑ…>...]" msgid "Failed to resolve HEAD as a valid ref." -msgstr "Ðе вдалоÑÑ Ñ€Ð¾Ð·Ð¿Ñ–Ð·Ð½Ð°Ñ‚Ð¸ HEAD Ñк дійÑне поÑиланнÑ." +msgstr "Ðе вдалоÑÑ Ñ€Ð¾Ð·Ð²Ê¼Ñзати HEAD в дійÑне поÑиланнÑ." msgid "git submodule absorbgitdirs [<options>] [<path>...]" msgstr "git submodule absorbgitdirs [<опції>] [<шлÑÑ…>...]" @@ -13325,7 +13404,7 @@ msgstr "%d\n" #, c-format msgid "index-version: was %d, set to %d" -msgstr "index-version: було %d, Ñтало %d" +msgstr "верÑÑ–Ñ Ñ–Ð½Ð´ÐµÐºÑу: була %d, Ñтала %d" msgid "" "core.splitIndex is set to false; remove or change it, if you really want to " @@ -13482,13 +13561,13 @@ msgstr "Ðемає можливої джерельної гілки, що озн #, c-format msgid "" -"If you meant to create a worktree containing a new orphan branch\n" +"If you meant to create a worktree containing a new unborn branch\n" "(branch with no commits) for this repository, you can do so\n" "using the --orphan flag:\n" "\n" " git worktree add --orphan -b %s %s\n" msgstr "" -"Якщо ви хочете Ñтворити робоче дерево, що міÑтить нову ÑирітÑьку гілку\n" +"Якщо ви хочете Ñтворити робоче дерево, що міÑтить нову ненароджену гілку\n" "(гілку без комітів) Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ Ñховища, ви можете зробити це\n" "за допомогою Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ --orphan:\n" "\n" @@ -13496,13 +13575,13 @@ msgstr "" #, c-format msgid "" -"If you meant to create a worktree containing a new orphan branch\n" +"If you meant to create a worktree containing a new unborn branch\n" "(branch with no commits) for this repository, you can do so\n" "using the --orphan flag:\n" "\n" " git worktree add --orphan %s\n" msgstr "" -"Якщо ви хочете Ñтворити робоче дерево, що міÑтить нову ÑирітÑьку гілку\n" +"Якщо ви хочете Ñтворити робоче дерево, що міÑтить нову ненароджену гілку\n" "(гілку без комітів) Ð´Ð»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ Ñховища, ви можете зробити це\n" "за допомогою Ð¿Ñ€Ð°Ð¿Ð¾Ñ€Ñ†Ñ --orphan:\n" "\n" @@ -13566,6 +13645,10 @@ msgid "initializing" msgstr "ініціалізаціÑ" #, c-format +msgid "could not find created worktree '%s'" +msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ Ñтворене робоче дерево \"%s\"" + +#, c-format msgid "Preparing worktree (new branch '%s')" msgstr "Підготовка робочого дерева (нова гілка \"%s\")" @@ -13601,12 +13684,8 @@ msgid "" msgstr "" "Ðе Ñ–Ñнує локальних або віддалених поÑилань, незважаючи на наÑвніÑть " "принаймні одного віддаленого\n" -"призначеннÑ, зупинка; ÑкориÑтайтеÑÑŒ \"add -f\" Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÐ²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð°Ð±Ð¾ " -"Ñпочатку виконайте Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð²Ñ–Ð´Ð´Ð°Ð»ÐµÐ½Ð¾Ð³Ð¾ поÑиланнÑ" - -#, c-format -msgid "'%s' and '%s' cannot be used together" -msgstr "\"%s\" Ñ– \"%s\" не можна викориÑтовувати разом" +"призначеннÑ, зупинка; ÑкориÑтайтеÑÑŒ \"add -f\", щоб перевизначити, або " +"Ñпочатку виконайте Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ð½Ð½Ñ Ð· віддаленного Ñховища" msgid "checkout <branch> even if already checked out in other worktree" msgstr "" @@ -13618,8 +13697,8 @@ msgstr "Ñтворити нову гілку" msgid "create or reset a branch" msgstr "Ñтворити або Ñкинути гілку" -msgid "create unborn/orphaned branch" -msgstr "Ñтворити ненароджену/ÑирітÑьку гілку" +msgid "create unborn branch" +msgstr "Ñтворити ненароджену гілку" msgid "populate the new working tree" msgstr "заповнити нове робоче дерево" @@ -13642,11 +13721,8 @@ msgid "options '%s', '%s', and '%s' cannot be used together" msgstr "опції \"%s\", \"%s\" та \"%s\" не можна викориÑтовувати разом" #, c-format -msgid "options '%s', and '%s' cannot be used together" -msgstr "опції \"%s\" Ñ– \"%s\" не можна викориÑтовувати разом" - -msgid "<commit-ish>" -msgstr "<комітоподібне>" +msgid "option '%s' and commit-ish cannot be used together" +msgstr "опцію \"%s\" не можна викориÑтовувати разом з комітоподібними" msgid "added with --lock" msgstr "додано з --lock" @@ -13926,7 +14002,7 @@ msgstr "ідентифікатор Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ„Ñ€Ð°Ð³Ð¼ÐµÐ½Ñ‚Ð° Ð·Ê¼Ñ #, c-format msgid "chunk id %<PRIx32> not %d-byte aligned" -msgstr "шматок в id %<PRIx32> не %d-byte впорÑдкований" +msgstr "шматок id %<PRIx32> не Ñ” %d-byte впорÑдкованим" #, c-format msgid "improper chunk offset(s) %<PRIx64> and %<PRIx64>" @@ -13981,7 +14057,7 @@ msgid "Move objects and refs by archive" msgstr "ПеренеÑти архів обʼєктів та поÑилань" msgid "Provide contents or details of repository objects" -msgstr "Показати вміÑÑ‚ або інформацію про обʼєкти Ñховища" +msgstr "Ðадавати вміÑÑ‚ або деталі обʼєктів Ñховища" msgid "Display gitattributes information" msgstr "Відобразити інформацію про gitattributes" @@ -14269,6 +14345,11 @@ msgstr "Запакувати розпаковані обʼєкти у Ñхови msgid "Create, list, delete refs to replace objects" msgstr "Створити, показати, видалити поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð´Ð»Ñ Ð¾Ð±â€™Ñ”ÐºÑ‚Ñ–Ð² заміни" +msgid "EXPERIMENTAL: Replay commits on a new base, works with bare repos too" +msgstr "" +"ЕКСПЕРИМЕÐТÐЛЬÐО: Ð’Ñ–Ð´Ñ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ ÐºÐ¾Ð¼Ð¼Ñ–Ñ‚Ñ–Ð² на новій базі також працює з " +"порожніми Ñховищами" + msgid "Generates a summary of pending changes" msgstr "Створює підÑумок змін Ð´Ð»Ñ Ñ€Ð¾Ð·Ð³Ð»Ñду" @@ -14391,7 +14472,7 @@ msgid "Display version information about Git" msgstr "Показати інформацію про верÑÑ–ÑŽ Git" msgid "Show logs with differences each commit introduces" -msgstr "Показати журнал з різницею, Ñку вноÑить кожен з комітів" +msgstr "Показати журнал з різницÑми, Ñкі вноÑить кожен коміт" msgid "Manage multiple working trees" msgstr "Керувати кількома робочими деревами" @@ -14507,6 +14588,32 @@ msgstr "ІнÑтрумент Ð´Ð»Ñ ÐºÐµÑ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð²ÐµÐ»Ð¸ÐºÐ¸Ð¼Ð¸ Ñхов msgid "commit-graph file is too small" msgstr "файл коміт-графа занадто малий" +msgid "commit-graph oid fanout chunk is wrong size" +msgstr "шматок oid fanout коміт-графа має невірний розмір" + +msgid "commit-graph fanout values out of order" +msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ fanout коміт-графа впорÑдковані невірно" + +msgid "commit-graph OID lookup chunk is the wrong size" +msgstr "шматок OID lookup коміт-графа має невірний розмір" + +msgid "commit-graph commit data chunk is wrong size" +msgstr "шматок commit data коміт-графа має невірний розмір" + +msgid "commit-graph generations chunk is wrong size" +msgstr "шматок generations коміт-графа має невірний розмір" + +msgid "commit-graph changed-path index chunk is too small" +msgstr "шматок changed-path index коміт-графа має невірний розмір" + +#, c-format +msgid "" +"ignoring too-small changed-path chunk (%<PRIuMAX> < %<PRIuMAX>) in commit-" +"graph file" +msgstr "" +"Ñ–Ð³Ð½Ð¾Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ð·Ð°Ð½Ð°Ð´Ñ‚Ð¾ малого шматка changed-path (%<PRIuMAX> < %<PRIuMAX>) " +"файла коміт-графа" + #, c-format msgid "commit-graph signature %X does not match signature %X" msgstr "Ð¿Ñ–Ð´Ð¿Ð¸Ñ ÐºÐ¾Ð¼Ñ–Ñ‚-графа %X не збігаєтьÑÑ Ð· підпиÑом %X" @@ -14523,11 +14630,20 @@ msgstr "хеш верÑÑ–Ñ ÐºÐ¾Ð¼Ñ–Ñ‚-графа %X не збігаєтьÑÑ Ð msgid "commit-graph file is too small to hold %u chunks" msgstr "файл коміт-графа занадто малий, щоб вміÑтити %u шматків" +msgid "commit-graph required OID fanout chunk missing or corrupted" +msgstr "необхідний шматок OID fanout коміт-графа відÑутній або пошкоджений" + +msgid "commit-graph required OID lookup chunk missing or corrupted" +msgstr "необхідний шматок OID lookup коміт-графа відÑутній або пошкоджений" + +msgid "commit-graph required commit data chunk missing or corrupted" +msgstr "необхідний шматок commit data коміт-графа відÑутній або пошкоджений" + msgid "commit-graph has no base graphs chunk" msgstr "коміт-граф не має шматка базових графів" msgid "commit-graph base graphs chunk is too small" -msgstr "занадто малий шматок базових графів коміт-графа" +msgstr "шматок base graphs коміт-графа занадто малий" msgid "commit-graph chain does not match" msgstr "ланцюжок коміт-графа не Ñпівпадає" @@ -14536,6 +14652,9 @@ msgstr "ланцюжок коміт-графа не Ñпівпадає" msgid "commit count in base graph too high: %<PRIuMAX>" msgstr "кількіÑть комітів у базовому графі занадто велика: %<PRIuMAX>" +msgid "commit-graph chain file too small" +msgstr "файл ланцюжка коміт-графа занадто малий" + #, c-format msgid "invalid commit-graph chain: line '%s' not a hash" msgstr "неприпуÑтимий ланцюжок коміт-графа: Ñ€Ñдок \"%s\" не Ñ” хешем" @@ -14551,10 +14670,13 @@ msgid "could not find commit %s" msgstr "не вдалоÑÑ Ð·Ð½Ð°Ð¹Ñ‚Ð¸ коміт %s" msgid "commit-graph requires overflow generation data but has none" -msgstr "коміт-граф потребує даних генерації переповненнÑ, але Ñ—Ñ… немаєданих" +msgstr "коміт-граф потребує даних генерації переповненнÑ, але не має Ñ—Ñ…" msgid "commit-graph overflow generation data is too small" -msgstr "занадто мало даних про Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ ÐºÐ¾Ð¼Ñ–Ñ‚-граф генерації" +msgstr "занадто мало даних генерації Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ ÐºÐ¾Ð¼Ñ–Ñ‚-графа" + +msgid "commit-graph extra-edges pointer out of bounds" +msgstr "extra-edges pointer коміт-графа виходить за межі" msgid "Loading known commits in commit graph" msgstr "Ð—Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶ÐµÐ½Ð½Ñ Ð²Ñ–Ð´Ð¾Ð¼Ð¸Ñ… комітів у коміт-графі" @@ -14692,7 +14814,8 @@ msgid "" "commit-graph has both zero and non-zero generations (e.g., commits '%s' and " "'%s')" msgstr "" -"коміт-граф має Ñк нульові, так Ñ– ненульові генерації (коміти \"%s\" Ñ– \"%s\")" +"коміт-граф має Ñк нульові, так Ñ– ненульові генерації (наприклад, коміти " +"\"%s\" Ñ– \"%s\")" msgid "Verifying commits in commit graph" msgstr "Перевірка комітів у коміт-графі" @@ -15703,6 +15826,10 @@ msgid "Unknown value for 'diff.submodule' config variable: '%s'" msgstr "Ðевідоме Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ð¹Ð½Ð¾Ñ— змінної \"diff.submodule\": \"%s\"" #, c-format +msgid "unknown value for config '%s': %s" +msgstr "невідоме Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ— \"%s\": %s" + +#, c-format msgid "" "Found errors in 'diff.dirstat' config variable:\n" "%s" @@ -15782,13 +15909,6 @@ msgstr "невірний --color-moved аргумент: %s" msgid "invalid mode '%s' in --color-moved-ws" msgstr "неприпуÑтимий режим \"%s\" у --color-moved-ws" -msgid "" -"option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and " -"\"histogram\"" -msgstr "" -"Ð¾Ð¿Ñ†Ñ–Ñ diff-algorithm приймає Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ \"myers\", \"minimal\", \"patience\" " -"та \"histogram\"" - #, c-format msgid "invalid argument to %s" msgstr "неприпуÑтимий аргумент до %s" @@ -15832,8 +15952,8 @@ msgstr "машинний вивід --stat" msgid "output only the last line of --stat" msgstr "вивеÑти лише оÑтанній Ñ€Ñдок --stat" -msgid "<param1,param2>..." -msgstr "<параметр1,параметр2>..." +msgid "<param1>,<param2>..." +msgstr "<параметр1>,<параметр2>..." msgid "" "output the distribution of relative amount of changes for each sub-directory" @@ -15842,8 +15962,8 @@ msgstr "вивеÑти розподіл відноÑної кількоÑті з msgid "synonym for --dirstat=cumulative" msgstr "Ñинонім Ð´Ð»Ñ --dirstat=cumulative" -msgid "synonym for --dirstat=files,param1,param2..." -msgstr "Ñинонім Ð´Ð»Ñ --dirstat=files,параметр1,параметр2..." +msgid "synonym for --dirstat=files,<param1>,<param2>..." +msgstr "Ñинонім Ð´Ð»Ñ --dirstat=files,<параметр1>,<параметр2>..." msgid "warn if changes introduce conflict markers or whitespace errors" msgstr "" @@ -16019,12 +16139,6 @@ msgstr "згенерувати різницю за алгоритмом \"patien msgid "generate diff using the \"histogram diff\" algorithm" msgstr "згенерувати різницю за алгоритмом \"histogram diff\"" -msgid "<algorithm>" -msgstr "<алгоритм>" - -msgid "choose a diff algorithm" -msgstr "вибрати алгоритм різниці" - msgid "<text>" msgstr "<текÑÑ‚>" @@ -17224,7 +17338,7 @@ msgstr "" #. conflict in a submodule. The first argument is the submodule #. name, and the second argument is the abbreviated id of the #. commit that needs to be merged. For example: -#. - go to submodule (mysubmodule), and either merge commit abc1234" +#. - go to submodule (mysubmodule), and either merge commit abc1234" #. #, c-format msgid "" @@ -17513,12 +17627,18 @@ msgstr "не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ кеш" msgid "multi-pack-index OID fanout is of the wrong size" msgstr "multi-pack-index OID розÑÑ–ÑŽÐ²Ð°Ð½Ð½Ñ Ð¼Ð°Ñ” невірний розмір" +#, c-format +msgid "" +"oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]" +msgstr "" +"невірна поÑлідовніÑть oid fanout: fanout[%d] = %<PRIx32> > %<PRIx32> = " +"fanout[%d]" + msgid "multi-pack-index OID lookup chunk is the wrong size" -msgstr "multi-pack-index шматок пошуку OID має невірний розмір" +msgstr "multi-pack-index OID lookup шматок має невірний розмір" msgid "multi-pack-index object offset chunk is the wrong size" -msgstr "" -"multi-pack-index необхідній шматок Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¾Ð±Ê¼Ñ”ÐºÑ‚Ð° має невірний розмір" +msgstr "multi-pack-index object offset шматок має невірний розмір" #, c-format msgid "multi-pack-index file %s is too small" @@ -17537,24 +17657,22 @@ msgid "multi-pack-index hash version %u does not match version %u" msgstr "верÑÑ–Ñ Ñ…ÐµÑˆÑƒ multi-pack-index %u не збігаєтьÑÑ Ð· верÑією %u" msgid "multi-pack-index required pack-name chunk missing or corrupted" -msgstr "" -"multi-pack-index необхідний шматок імені пакунка відÑутній або пошкоджений" +msgstr "необхідний шматок pack-name multi-pack-index відÑутній або пошкоджений" msgid "multi-pack-index required OID fanout chunk missing or corrupted" msgstr "" -"multi-pack-index необхідний шматок розÑÑ–ÑŽÐ²Ð°Ð½Ð½Ñ OID відÑутній або пошкоджений" +"необхідний шматок OID fanout multi-pack-index відÑутній або пошкоджений" msgid "multi-pack-index required OID lookup chunk missing or corrupted" msgstr "" -"multi-pack-index необхідний шматок пошуку OID відÑутній або пошкоджений" +"необхідний шматок OID lookup multi-pack-index відÑутній або пошкоджений" msgid "multi-pack-index required object offsets chunk missing or corrupted" msgstr "" -"multi-pack-index необхідний шматок Ð·Ð¼Ñ–Ñ‰ÐµÐ½Ð½Ñ Ð¾Ð±Ê¼Ñ”ÐºÑ‚Ñ–Ð² відÑутній або " -"пошкоджений" +"необхідний шматок object offsets multi-pack-index відÑутній або пошкоджений" msgid "multi-pack-index pack-name chunk is too short" -msgstr "multi-pack-index pack-name шматок занадто малий" +msgstr "шматок pack-name multi-pack-index занадто малий" #, c-format msgid "multi-pack-index pack names out of order: '%s' before '%s'" @@ -17566,12 +17684,19 @@ msgstr "" msgid "bad pack-int-id: %u (%u total packs)" msgstr "невірний pack-int-id: %u (%u вÑього пакунків)" +msgid "MIDX does not contain the BTMP chunk" +msgstr "MIDX не міÑтить шматок BTMP" + +#, c-format +msgid "could not load bitmapped pack %<PRIu32>" +msgstr "не вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ бітмаповий пакунок %<PRIu32>" + msgid "multi-pack-index stores a 64-bit offset, but off_t is too small" msgstr "" "multi-pack-index зберігає 64-бітне зміщеннÑ, але Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ off_t занадто мале" msgid "multi-pack-index large offset out of bounds" -msgstr "multi-pack-index large зÑув виходить за межі" +msgstr "large offset multi-pack-index виходить за межі" #, c-format msgid "failed to add packfile '%s'" @@ -17651,13 +17776,6 @@ msgstr "невірна контрольна Ñума" msgid "Looking for referenced packfiles" msgstr "Пошук файлів пакунків, на Ñкі Ñ” поÑиланнÑ" -#, c-format -msgid "" -"oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]" -msgstr "" -"невірна поÑлідовніÑть oid розÑіюваннÑ: fanout[%d] = %<PRIx32> > %<PRIx32> = " -"fanout[%d]" - msgid "the midx contains no oid" msgstr "midx не міÑтить oid" @@ -17961,7 +18079,7 @@ msgstr "%s [невірний обʼект]" #. TRANSLATORS: This is a line of ambiguous commit #. object output. E.g.: #. * -#. "deadbeef commit 2021-01-01 - Some Commit Message" +#. "deadbeef commit 2021-01-01 - Some Commit Message" #. #, c-format msgid "%s commit %s - %s" @@ -17970,7 +18088,7 @@ msgstr "%s коміт %s - %s" #. TRANSLATORS: This is a line of ambiguous #. tag object output. E.g.: #. * -#. "deadbeef tag 2022-01-01 - Some Tag Message" +#. "deadbeef tag 2022-01-01 - Some Tag Message" #. * #. The second argument is the YYYY-MM-DD found #. in the tag. @@ -17986,7 +18104,7 @@ msgstr "%s тег %s - %s" #. tag object output where we couldn't parse #. the tag itself. E.g.: #. * -#. "deadbeef [bad tag, could not parse it]" +#. "deadbeef [bad tag, could not parse it]" #. #, c-format msgid "%s [bad tag, could not parse it]" @@ -18182,6 +18300,9 @@ msgstr "у мультіпакунковому bitmap відÑутній необ msgid "could not open pack %s" msgstr "не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ пакунок %s" +msgid "could not determine MIDX preferred pack" +msgstr "не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ бажаний пакунок MIDX" + #, c-format msgid "preferred pack (%s) is invalid" msgstr "бажаний пакунок (%s) Ñ” неприпуÑтимим" @@ -18203,6 +18324,12 @@ msgid "corrupt ewah bitmap: truncated header for bitmap of commit \"%s\"" msgstr "пошкоджений ewah bitmap: урізаний заголовок Ð´Ð»Ñ bitmap коміту \"%s\"" #, c-format +msgid "unable to load pack: '%s', disabling pack-reuse" +msgstr "" +"не вдалоÑÑ Ð·Ð°Ð²Ð°Ð½Ñ‚Ð°Ð¶Ð¸Ñ‚Ð¸ пакунок: \"%s\", Ð²Ð¸Ð¼ÐºÐ½ÐµÐ½Ð½Ñ Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€Ð½Ð¾Ð³Ð¾ викориÑÑ‚Ð°Ð½Ð½Ñ " +"пакунків" + +#, c-format msgid "object '%s' not found in type bitmaps" msgstr "обʼєкт \"%s\" не знайдено в типах bitmap" @@ -18296,6 +18423,9 @@ msgstr "" msgid "multi-pack-index reverse-index chunk is the wrong size" msgstr "multi-pack-index reverse-index шматок має невірний розмір" +msgid "could not determine preferred pack" +msgstr "не вдалоÑÑ Ð²Ð¸Ð·Ð½Ð°Ñ‡Ð¸Ñ‚Ð¸ бажаний пакунок" + msgid "cannot both write and verify reverse index" msgstr "неможливо одночаÑно запиÑувати та звірÑти зворотний індекÑ" @@ -18359,10 +18489,6 @@ msgid "%s expects a non-negative integer value with an optional k/m/g suffix" msgstr "%s очікує невід'ємне ціле Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð· опціональним ÑуфікÑом k/m/g" #, c-format -msgid "%s is incompatible with %s" -msgstr "%s неÑуміÑний з %s" - -#, c-format msgid "ambiguous option: %s (could be --%s%s or --%s%s)" msgstr "неоднозначна опціÑ: %s (може бути --%s%s або --%s%s)" @@ -18469,7 +18595,7 @@ msgstr "" #, c-format msgid "bad boolean environment value '%s' for '%s'" -msgstr "невірне булеве Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ— \"%s\" Ð´Ð»Ñ \"%s\"" +msgstr "невірне булеве Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¾Ñ‚Ð¾Ñ‡ÐµÐ½Ð½Ñ \"%s\" Ð´Ð»Ñ \"%s\"" #, c-format msgid "failed to parse %s" @@ -18684,10 +18810,6 @@ msgid "unable to add '%s' to index" msgstr "не вдалоÑÑ Ð´Ð¾Ð´Ð°Ñ‚Ð¸ \"%s\" до індекÑу" #, c-format -msgid "unable to stat '%s'" -msgstr "не вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ stat Ð´Ð»Ñ \"%s\"" - -#, c-format msgid "'%s' appears as both a file and as a directory" msgstr "\"%s\" відображаєтьÑÑ Ñк файл Ñ– Ñк каталог" @@ -19261,10 +19383,6 @@ msgid "cannot process '%s' and '%s' at the same time" msgstr "неможливо обробити \"%s\" Ñ– \"%s\" одночаÑно" #, c-format -msgid "could not remove reference %s" -msgstr "не вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ поÑÐ¸Ð»Ð°Ð½Ð½Ñ %s" - -#, c-format msgid "could not delete reference %s: %s" msgstr "не вдалоÑÑ Ð²Ð¸Ð´Ð°Ð»Ð¸Ñ‚Ð¸ поÑÐ¸Ð»Ð°Ð½Ð½Ñ %s: %s" @@ -20651,6 +20769,9 @@ msgstr "ЗаÑтоÑÑƒÐ²Ð°Ð½Ð½Ñ Ð°Ð²Ñ‚Ð¾Ñхову призвело до кон msgid "Autostash exists; creating a new stash entry." msgstr "ÐвтоÑхов Ñ–Ñнує; ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð½Ð¾Ð²Ð¾Ð³Ð¾ запиÑу Ñхову." +msgid "autostash reference is a symref" +msgstr "поÑÐ¸Ð»Ð°Ð½Ð½Ñ Ð°Ð²Ñ‚Ð¾Ñхову Ñ” Ñимвольним поÑиланнÑм" + msgid "could not detach HEAD" msgstr "не вдалоÑÑ Ð²Ñ–Ð´Ê¼Ñ”Ð´Ð½Ð°Ñ‚Ð¸ HEAD" @@ -20972,6 +21093,10 @@ msgid "invalid initial branch name: '%s'" msgstr "неприпуÑтиме початкове Ñ–Ð¼â€™Ñ Ð³Ñ–Ð»ÐºÐ¸: \"%s\"" #, c-format +msgid "re-init: ignored --initial-branch=%s" +msgstr "re-init: ігноровано --initial-branch=%s" + +#, c-format msgid "unable to handle file type %d" msgstr "не вдалоÑÑ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ тип файлу %d" @@ -20982,15 +21107,15 @@ msgstr "не вдалоÑÑ Ð¿ÐµÑ€ÐµÐ¼Ñ–Ñтити %s на %s" msgid "attempt to reinitialize repository with different hash" msgstr "Ñпроба переініціалізувати репозиторій з іншим хеш-алгоритмом" +msgid "" +"attempt to reinitialize repository with different reference storage format" +msgstr "Ñпроба переініціалізувати Ñховище з іншим форматом зберіганнÑ" + #, c-format msgid "%s already exists" msgstr "%s вже Ñ–Ñнує" #, c-format -msgid "re-init: ignored --initial-branch=%s" -msgstr "re-init: ігноровано --initial-branch=%s" - -#, c-format msgid "Reinitialized existing shared Git repository in %s%s\n" msgstr "Переініціалізовано Ñ–Ñнуюче Ñпільне Git Ñховище в %s%s\n" @@ -21261,12 +21386,6 @@ msgid "number of entries in the cache tree to invalidate (default 0)" msgstr "" "кількіÑть запиÑів у дереві кешу, Ñкі потрібно анулювати (за замовчуваннÑм 0)" -msgid "unhandled options" -msgstr "необроблені опції" - -msgid "error preparing revisions" -msgstr "помилка при підготовці ревізій" - #, c-format msgid "commit %s is not marked reachable" msgstr "коміт %s не позначений Ñк доÑÑжний" @@ -21423,9 +21542,6 @@ msgstr "вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ ÑˆÐ»Ñху до віддаленого Ñерв msgid "invalid remote service path" msgstr "неприпуÑтимий шлÑÑ… до віддаленої Ñлужби" -msgid "operation not supported by protocol" -msgstr "Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ñ Ð½Ðµ підтримуєтьÑÑ Ð¿Ñ€Ð¾Ñ‚Ð¾ÐºÐ¾Ð»Ð¾Ð¼" - #, c-format msgid "can't connect to subservice %s" msgstr "неможливо підключитиÑÑ Ð´Ð¾ підÑервіÑу %s" @@ -21558,10 +21674,6 @@ msgid "support for protocol v2 not implemented yet" msgstr "підтримка протоколу v2 ще не запроваджена" #, c-format -msgid "unknown value for config '%s': %s" -msgstr "невідоме Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ ÐºÐ¾Ð½Ñ„Ñ–Ð³ÑƒÑ€Ð°Ñ†Ñ–Ñ— \"%s\": %s" - -#, c-format msgid "transport '%s' not allowed" msgstr "заÑіб передачі \"%s\" не дозволений" @@ -21613,6 +21725,9 @@ msgstr "bundle-uri Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ñ Ð½Ðµ підтримуєтьÑÑ Ð¿Ñ€Ð¾Ñ‚Ð¾Ðº msgid "could not retrieve server-advertised bundle-uri list" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ ÑпиÑок Ð°Ð´Ñ€ÐµÑ Ð¿Ð°ÐºÐµÑ‚Ñ–Ð², оголошений Ñервером" +msgid "operation not supported by protocol" +msgstr "Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ñ Ð½Ðµ підтримуєтьÑÑ Ð¿Ñ€Ð¾Ñ‚Ð¾ÐºÐ¾Ð»Ð¾Ð¼" + msgid "too-short tree object" msgstr "занадто короткий обʼєкт дерева" @@ -22014,7 +22129,7 @@ msgid "unable to get random bytes" msgstr "не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ випадкові байти" msgid "Unmerged paths:" -msgstr "не злиті шлÑхи:" +msgstr "Ðе злиті шлÑхи:" msgid " (use \"git restore --staged <file>...\" to unstage)" msgstr "" @@ -22466,6 +22581,10 @@ msgstr "крім того, ваш Ñ–Ð½Ð´ÐµÐºÑ Ð¼Ñ–Ñтить незакоміч msgid "cannot %s: Your index contains uncommitted changes." msgstr "неможливо виконати %s: Ваш Ñ–Ð½Ð´ÐµÐºÑ Ð¼Ñ–Ñтить незакомічені зміни." +#, c-format +msgid "unknown style '%s' given for '%s'" +msgstr "невідомий Ñтиль \"%s\" наданий Ð´Ð»Ñ \"%s\"" + msgid "" "Error: Your local changes to the following files would be overwritten by " "merge" diff --git a/po/zh_CN.po b/po/zh_CN.po index 86402725b2..39efaf1012 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -46,6 +46,7 @@ # commit | æäº¤ # commit message | æäº¤è¯´æ˜Ž # commit object | æäº¤å¯¹è±¡ +# commit-graph | æäº¤å›¾ # commit-ish (also committish) | æäº¤å· # cone | é”¥å½¢ï¼ˆç¨€ç–æ£€å‡ºæ¨¡åž‹ï¼‰ï¼›é”¥ï¼ˆç¨€ç–检出) # conflict | å†²çª @@ -99,6 +100,7 @@ # plumbing | 管件(Git åº•å±‚æ ¸å¿ƒå‘½ä»¤çš„åˆ«ç§°ï¼‰ # porcelain | 瓷件(Git 上层å°è£…命令的别称) # precious-objects repo | çå“仓库 +# preferred pack | 首选包(多包索引ä¸å¼•入的首选包概念) # promisor | 承诺者 # prune | 清除 # pull | æ‹‰ï¼Œæ‹‰å– @@ -151,8 +153,8 @@ msgid "" msgstr "" "Project-Id-Version: Git\n" "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n" -"POT-Creation-Date: 2023-11-10 10:49+0800\n" -"PO-Revision-Date: 2023-11-10 17:13+0800\n" +"POT-Creation-Date: 2024-02-16 14:27+0800\n" +"PO-Revision-Date: 2024-02-18 11:47+0800\n" "Last-Translator: Teng Long <dyroneteng@gmail.com>\n" "Language-Team: GitHub <https://github.com/dyrone/git/>\n" "Language: zh_CN\n" @@ -1031,7 +1033,7 @@ msgid "unclosed quote" msgstr "未关é—的引å·" #: alias.c builtin/cat-file.c builtin/notes.c builtin/prune-packed.c -#: builtin/receive-pack.c builtin/tag.c +#: builtin/receive-pack.c builtin/tag.c t/helper/test-pkt-line.c msgid "too many arguments" msgstr "å¤ªå¤šå‚æ•°" @@ -1046,12 +1048,13 @@ msgid "unrecognized whitespace ignore option '%s'" msgstr "未能识别的空白å—符忽略选项 '%s'" #: apply.c archive.c builtin/add.c builtin/branch.c builtin/checkout-index.c -#: builtin/checkout.c builtin/clone.c builtin/commit.c builtin/describe.c -#: builtin/diff-tree.c builtin/difftool.c builtin/fast-export.c builtin/fetch.c -#: builtin/help.c builtin/index-pack.c builtin/init-db.c builtin/log.c -#: builtin/ls-files.c builtin/merge-base.c builtin/merge.c -#: builtin/pack-objects.c builtin/push.c builtin/rebase.c builtin/repack.c -#: builtin/reset.c builtin/rev-list.c builtin/show-branch.c builtin/stash.c +#: builtin/checkout.c builtin/clean.c builtin/clone.c builtin/commit.c +#: builtin/describe.c builtin/diff-tree.c builtin/difftool.c +#: builtin/fast-export.c builtin/fetch.c builtin/help.c builtin/index-pack.c +#: builtin/init-db.c builtin/log.c builtin/ls-files.c builtin/merge-base.c +#: builtin/merge-tree.c builtin/merge.c builtin/pack-objects.c builtin/rebase.c +#: builtin/repack.c builtin/replay.c builtin/reset.c builtin/rev-list.c +#: builtin/rev-parse.c builtin/show-branch.c builtin/stash.c #: builtin/submodule--helper.c builtin/tag.c builtin/worktree.c parse-options.c #: range-diff.c revision.c #, c-format @@ -1861,6 +1864,11 @@ msgstr "æœªçŸ¥å‚æ•° --output" #: archive.c #, c-format +msgid "extra command line parameter '%s'" +msgstr "é¢å¤–çš„å‘½ä»¤è¡Œå‚æ•°ï¼š'%s'" + +#: archive.c +#, c-format msgid "Unknown archive format '%s'" msgstr "æœªçŸ¥å½’æ¡£æ ¼å¼ '%s'" @@ -1915,6 +1923,17 @@ msgstr "忽略过大的 gitattributes æ•°æ®å¯¹è±¡ '%s'" msgid "bad --attr-source or GIT_ATTR_SOURCE" msgstr "错误的 --attr-source 或 GIT_ATTR_SOURCE" +#: attr.c read-cache.c +#, c-format +msgid "unable to stat '%s'" +msgstr "æ— æ³•å¯¹ %s 执行 stat" + +#: bisect.c builtin/cat-file.c builtin/index-pack.c builtin/notes.c +#: builtin/pack-objects.c combine-diff.c rerere.c +#, c-format +msgid "unable to read %s" +msgstr "ä¸èƒ½è¯» %s" + #: bisect.c #, c-format msgid "Badly quoted content in file '%s': %s" @@ -2448,8 +2467,8 @@ msgid "bad action '%s' for '%s'" msgstr "'%2$s' 的错误动作 '%1$s'" #: builtin/am.c builtin/blame.c builtin/fetch.c builtin/pack-objects.c -#: builtin/pull.c diff-merges.c gpg-interface.c ls-refs.c parallel-checkout.c -#: sequencer.c setup.c +#: builtin/pull.c config.c diff-merges.c gpg-interface.c ls-refs.c +#: parallel-checkout.c sequencer.c setup.c #, c-format msgid "invalid value for '%s': '%s'" msgstr "'%s' çš„å€¼æ— æ•ˆï¼š'%s'" @@ -2602,8 +2621,7 @@ msgstr "git write-tree æ— æ³•å†™å…¥æ ‘å¯¹è±¡" msgid "applying to an empty history" msgstr "æ£åº”用到一个空历å²ä¸Š" -#: builtin/am.c builtin/commit.c builtin/merge.c sequencer.c -#: t/helper/test-fast-rebase.c +#: builtin/am.c builtin/commit.c builtin/merge.c builtin/replay.c sequencer.c msgid "failed to write commit object" msgstr "æ— æ³•å†™æäº¤å¯¹è±¡" @@ -2783,8 +2801,9 @@ msgid "n" msgstr "n" #: builtin/am.c builtin/branch.c builtin/bugreport.c builtin/cat-file.c -#: builtin/diagnose.c builtin/for-each-ref.c builtin/ls-files.c -#: builtin/ls-tree.c builtin/replace.c builtin/tag.c builtin/verify-tag.c +#: builtin/clone.c builtin/diagnose.c builtin/for-each-ref.c builtin/init-db.c +#: builtin/ls-files.c builtin/ls-tree.c builtin/replace.c builtin/tag.c +#: builtin/verify-tag.c msgid "format" msgstr "æ ¼å¼" @@ -2916,7 +2935,9 @@ msgstr "git archive:应有一个 flush 包" msgid "" "git bisect start [--term-(new|bad)=<term> --term-(old|good)=<term>] [--no-" "checkout] [--first-parent] [<bad> [<good>...]] [--] [<pathspec>...]" -msgstr "git bisect start [--term-{new|bad}=<术è¯> --term-{old|good}=<术è¯>] [--no-checkout] [--first-parent] [<å> [<好>...]] [--] [<è·¯å¾„è§„æ ¼>...]" +msgstr "" +"git bisect start [--term-{new|bad}=<术è¯> --term-{old|good}=<术è¯>] [--no-" +"checkout] [--first-parent] [<å> [<好>...]] [--] [<è·¯å¾„è§„æ ¼>...]" #: builtin/bisect.c msgid "git bisect (good|bad) [<rev>...]" @@ -3473,12 +3494,13 @@ msgstr "æ— æ³•æŸ¥è¯¢ '%s' 指å‘çš„æäº¤å¯¹è±¡" #: builtin/branch.c #, c-format -msgid "" -"the branch '%s' is not fully merged.\n" -"If you are sure you want to delete it, run 'git branch -D %s'" -msgstr "" -"分支 '%s' 没有完全åˆå¹¶ã€‚\n" -"如果您确认è¦åˆ 除它,执行 'git branch -D %s'" +msgid "the branch '%s' is not fully merged" +msgstr "分支 '%s' 没有完全åˆå¹¶" + +#: builtin/branch.c +#, c-format +msgid "If you are sure you want to delete it, run 'git branch -D %s'" +msgstr "如果您确认è¦åˆ 除它,执行 'git branch -D %s'" #: builtin/branch.c msgid "update of config-file failed" @@ -4488,7 +4510,7 @@ msgstr "ä¸èƒ½å¯¹ '%s' 执行 reflog æ“作:%s\n" msgid "HEAD is now at" msgstr "HEAD ç›®å‰ä½äºŽ" -#: builtin/checkout.c builtin/clone.c t/helper/test-fast-rebase.c +#: builtin/checkout.c builtin/clone.c msgid "unable to update HEAD" msgstr "ä¸èƒ½æ›´æ–° HEAD" @@ -4757,8 +4779,8 @@ msgid "new-branch" msgstr "新分支" #: builtin/checkout.c -msgid "new unparented branch" -msgstr "新的没有父æäº¤çš„分支" +msgid "new unborn branch" +msgstr "新的未诞生的分支" #: builtin/checkout.c builtin/merge.c msgid "update ignored files (default)" @@ -4824,7 +4846,7 @@ msgstr "" msgid "you must specify path(s) to restore" msgstr "æ‚¨å¿…é¡»æŒ‡å®šè¦æ¢å¤çš„路径" -#: builtin/checkout.c builtin/clone.c builtin/remote.c +#: builtin/checkout.c builtin/clone.c builtin/remote.c builtin/replay.c #: builtin/submodule--helper.c builtin/worktree.c msgid "branch" msgstr "分支" @@ -5065,10 +5087,6 @@ msgid "" msgstr "" "clean.requireForce 默认为 true 且未æä¾› -iã€-n 或 -f é€‰é¡¹ï¼Œæ‹’ç»æ‰§è¡Œæ¸…ç†åŠ¨ä½œ" -#: builtin/clean.c -msgid "-x and -X cannot be used together" -msgstr "-x å’Œ -X ä¸èƒ½åŒæ—¶ä½¿ç”¨" - #: builtin/clone.c msgid "git clone [<options>] [--] <repo> [<dir>]" msgstr "git clone [<选项>] [--] <仓库> [<路径>]" @@ -5160,6 +5178,7 @@ msgid "create a shallow clone since a specific time" msgstr "从一个特定时间创建一个浅克隆" #: builtin/clone.c builtin/fetch.c builtin/pull.c builtin/rebase.c +#: builtin/replay.c msgid "revision" msgstr "版本" @@ -5187,6 +5206,10 @@ msgstr "git目录" msgid "separate git dir from working tree" msgstr "git目录和工作区分离" +#: builtin/clone.c builtin/init-db.c +msgid "specify the reference format to use" +msgstr "指定è¦ä½¿ç”¨çš„å¼•ç”¨æ ¼å¼" + #: builtin/clone.c msgid "key=value" msgstr "key=value" @@ -5336,11 +5359,10 @@ msgstr "å¤ªå¤šå‚æ•°ã€‚" msgid "You must specify a repository to clone." msgstr "您必须指定一个仓库æ¥å…‹éš†ã€‚" -#: builtin/clone.c -msgid "" -"--bundle-uri is incompatible with --depth, --shallow-since, and --shallow-" -"exclude" -msgstr "--bundle-uri 与 --depthã€--shallow-since å’Œ --shallow-exclude ä¸å…¼å®¹" +#: builtin/clone.c builtin/init-db.c setup.c +#, c-format +msgid "unknown ref storage format '%s'" +msgstr "未知的引用å˜å‚¨æ ¼å¼ '%s'" #: builtin/clone.c #, c-format @@ -5501,7 +5523,7 @@ msgid "" "--stdin-commits]\n" " [--changed-paths] [--[no-]max-new-filters <n>] [--" "[no-]progress]\n" -" <split options>" +" <split-options>" msgstr "" "git commit-graph write [--object-dir <目录>] [--append]\n" " [--split[=<ç–ç•¥>]] [--reachable | --stdin-packs | --" @@ -5520,17 +5542,17 @@ msgstr "ä¿å˜å›¾å½¢çš„对象目录" #: builtin/commit-graph.c msgid "if the commit-graph is split, only verify the tip file" -msgstr "如果æäº¤å›¾å½¢è¢«æ‹†åˆ†ï¼ŒåªéªŒè¯å¤´ä¸€ä¸ªæ–‡ä»¶" +msgstr "如果æäº¤å›¾è¢«æ‹†åˆ†ï¼ŒåªéªŒè¯å¤´ä¸€ä¸ªæ–‡ä»¶" #: builtin/commit-graph.c #, c-format msgid "Could not open commit-graph '%s'" -msgstr "æ— æ³•æ‰“å¼€æäº¤å›¾å½¢ '%s'" +msgstr "æ— æ³•æ‰“å¼€æäº¤å›¾ '%s'" #: builtin/commit-graph.c #, c-format msgid "could not open commit-graph chain '%s'" -msgstr "æ— æ³•æ‰“å¼€æäº¤å›¾å½¢é“¾ '%s'" +msgstr "æ— æ³•æ‰“å¼€æäº¤å›¾é“¾ '%s'" #: builtin/commit-graph.c #, c-format @@ -5574,15 +5596,15 @@ msgstr "å¯ç”¨å˜æ›´è·¯å¾„的计算" #: builtin/commit-graph.c msgid "allow writing an incremental commit-graph file" -msgstr "å…è®¸å†™ä¸€ä¸ªå¢žé‡æäº¤å›¾å½¢æ–‡ä»¶" +msgstr "å…è®¸å†™ä¸€ä¸ªå¢žé‡æäº¤å›¾æ–‡ä»¶" #: builtin/commit-graph.c msgid "maximum number of commits in a non-base split commit-graph" -msgstr "在éžåŸºæœ¬æ‹†åˆ†æäº¤å›¾å½¢ä¸çš„æœ€å¤§æäº¤æ•°" +msgstr "在éžåŸºæœ¬æ‹†åˆ†æäº¤å›¾ä¸çš„æœ€å¤§æäº¤æ•°" #: builtin/commit-graph.c msgid "maximum ratio between two levels of a split commit-graph" -msgstr "一个拆分æäº¤å›¾å½¢çš„两个级别之间的最大比率" +msgstr "一个拆分æäº¤å›¾çš„两个级别之间的最大比率" #: builtin/commit-graph.c msgid "only expire files older than a given date-time" @@ -8380,6 +8402,11 @@ msgstr "æ— æ³•è¯»å–æ ‘(%s)" #: builtin/grep.c #, c-format +msgid "unable to read tree %s" +msgstr "æ— æ³•è¯»å–æ ‘ %s" + +#: builtin/grep.c +#, c-format msgid "unable to grep from object of type %s" msgstr "æ— æ³•æŠ“å–æ¥è‡ªäºŽ %s 类型的对象" @@ -8901,11 +8928,6 @@ msgstr "解压缩严é‡çš„ä¸ä¸€è‡´" msgid "SHA1 COLLISION FOUND WITH %s !" msgstr "å‘现 %s 出现 SHA1 冲çªï¼" -#: builtin/index-pack.c builtin/pack-objects.c -#, c-format -msgid "unable to read %s" -msgstr "ä¸èƒ½è¯» %s" - #: builtin/index-pack.c #, c-format msgid "cannot read existing object info %s" @@ -9083,11 +9105,13 @@ msgstr "åœ¨æ‰“åŒ…å¯¹è±¡ä¸ fsck 检查出错" msgid "" "git init [-q | --quiet] [--bare] [--template=<template-directory>]\n" " [--separate-git-dir <git-dir>] [--object-format=<format>]\n" +" [--ref-format=<format>]\n" " [-b <branch-name> | --initial-branch=<branch-name>]\n" " [--shared[=<permissions>]] [<directory>]" msgstr "" "git init [-q | --quiet] [--bare] [--template=<模æ¿ç›®å½•>]\n" " [--separate-git-dir <git 目录>] [--object-format=<æ ¼å¼>]\n" +" [--ref-format=<æ ¼å¼>]\n" " [-b <分支å> | --initial-branch=<分支å>]\n" " [--shared[=<æƒé™>]] [<目录>]" @@ -9246,7 +9270,7 @@ msgid "" "<file>" msgstr "跟踪 <文件> ä¸ <开始>,<结æŸ> 范围内的行或函数 :<函数å> 的演å˜" -#: builtin/log.c builtin/shortlog.c bundle.c +#: builtin/log.c builtin/replay.c builtin/shortlog.c bundle.c #, c-format msgid "unrecognized argument: %s" msgstr "æœªèƒ½è¯†åˆ«çš„å‚æ•°ï¼š%s" @@ -9990,6 +10014,12 @@ msgstr "" "git merge-file [<选项>] [-L <åå—1> [-L <åˆå§‹åå—> [-L <åå—2>]]] <文件1> <åˆ" "始文件> <文件2>" +#: builtin/merge-file.c diff.c +msgid "" +"option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and " +"\"histogram\"" +msgstr "选项 diff-algorithm 接å—傿•° \"myers\"ã€\"minimal\"ã€\"patience\" å’Œ \"histogram\"" + #: builtin/merge-file.c msgid "send results to standard output" msgstr "将结果å‘é€åˆ°æ ‡å‡†è¾“出" @@ -10018,6 +10048,14 @@ msgstr "如果冲çªï¼Œä½¿ç”¨ä»–们的版本" msgid "for conflicts, use a union version" msgstr "如果冲çªï¼Œä½¿ç”¨è”åˆç‰ˆæœ¬" +#: builtin/merge-file.c diff.c +msgid "<algorithm>" +msgstr "<算法>" + +#: builtin/merge-file.c diff.c +msgid "choose a diff algorithm" +msgstr "选择一个差异算法" + #: builtin/merge-file.c msgid "for conflicts, use this marker size" msgstr "如果冲çªï¼Œä½¿ç”¨æŒ‡å®šé•¿åº¦çš„æ ‡è®°" @@ -10135,10 +10173,6 @@ msgstr "--trivial-merge 与其他所有选项ä¸å…¼å®¹" msgid "unknown strategy option: -X%s" msgstr "未知的ç–略选项:-X%s" -#: builtin/merge-tree.c -msgid "--merge-base is incompatible with --stdin" -msgstr "--merge-base 与 --stdin ä¸å…¼å®¹" - #: builtin/merge-tree.c builtin/notes.c #, c-format msgid "malformed input line: '%s'." @@ -10296,7 +10330,7 @@ msgstr "'%s' 没有指å‘一个æäº¤" msgid "Bad branch.%s.mergeoptions string: %s" msgstr "åçš„ branch.%s.mergeoptions å—符串:%s" -#: builtin/merge.c builtin/stash.c merge-recursive.c +#: builtin/merge.c merge-recursive.c msgid "Unable to write index." msgstr "ä¸èƒ½å†™å…¥ç´¢å¼•。" @@ -10304,7 +10338,7 @@ msgstr "ä¸èƒ½å†™å…¥ç´¢å¼•。" msgid "Not handling anything other than two heads merge." msgstr "未处ç†ä¸¤ä¸ªå¤´åˆå¹¶ä¹‹å¤–的任何æ“作。" -#: builtin/merge.c t/helper/test-fast-rebase.c +#: builtin/merge.c #, c-format msgid "unable to write %s" msgstr "ä¸èƒ½å†™ %s" @@ -11292,6 +11326,11 @@ msgstr "ä¸ä¸€è‡´çš„差异计数" #: builtin/pack-objects.c #, c-format +msgid "invalid pack.allowPackReuse value: '%s'" +msgstr "æ— æ•ˆçš„ pack.allowPackReuse 值:'%s'" + +#: builtin/pack-objects.c +#, c-format msgid "" "value of uploadpack.blobpackfileuri must be of the form '<object-hash> <pack-" "hash> <uri>' (got '%s')" @@ -11614,10 +11653,10 @@ msgstr "枚举对象ä¸" #, c-format msgid "" "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-" -"reused %<PRIu32>" +"reused %<PRIu32> (from %<PRIuMAX>)" msgstr "" "总共 %<PRIu32>(差异 %<PRIu32>),å¤ç”¨ %<PRIu32>(差异 %<PRIu32>),包å¤ç”¨ " -"%<PRIu32>" +"%<PRIu32>(æ¥è‡ª %<PRIuMAX> 个包)" #: builtin/pack-redundant.c msgid "" @@ -12691,7 +12730,7 @@ msgstr "没有æ£åœ¨è¿›è¡Œçš„å˜åŸºï¼Ÿ" msgid "The --edit-todo action can only be used during interactive rebase." msgstr "动作 --edit-todo åªèƒ½ç”¨åœ¨äº¤äº’å¼å˜åŸºè¿‡ç¨‹ä¸ã€‚" -#: builtin/rebase.c t/helper/test-fast-rebase.c +#: builtin/rebase.c msgid "Cannot read HEAD" msgstr "ä¸èƒ½è¯»å– HEAD" @@ -12737,12 +12776,6 @@ msgstr "开关 `C' 期望一个数å—值" #: builtin/rebase.c msgid "" -"apply options are incompatible with rebase.autoSquash. Consider adding --no-" -"autosquash" -msgstr "应用的选项与 rebase.autoSquash ä¸å…¼å®¹ã€‚è€ƒè™‘åŠ ä¸Š --no-autosquash" - -#: builtin/rebase.c -msgid "" "apply options are incompatible with rebase.rebaseMerges. Consider adding --" "no-rebase-merges" msgstr "应用的选项与 rebase.rebaseMerges ä¸å…¼å®¹ã€‚è€ƒè™‘åŠ ä¸Š --no-rebase-merges" @@ -13224,8 +13257,8 @@ msgid "" msgid_plural "" "Note: Some branches outside the refs/remotes/ hierarchy were not removed;\n" "to delete them, use:" -msgstr[0] "注æ„:ref/remotes 层级之外的一个分支未被移除。è¦åˆ 除它,使用:" -msgstr[1] "注æ„:ref/remotes 层级之外的一些分支未被移除。è¦åˆ 除它们,使用:" +msgstr[0] "注æ„:refs/remotes/ 层级之外的一个分支未被移除。è¦åˆ 除它,使用:" +msgstr[1] "注æ„:refs/remotes/ 层级之外的一些分支未被移除。è¦åˆ 除它们,使用:" #: builtin/remote.c #, c-format @@ -13956,6 +13989,84 @@ msgstr "--convert-graft-file ä¸å¸¦å‚æ•°" msgid "only one pattern can be given with -l" msgstr "åªèƒ½ä¸º -l æä¾›ä¸€ä¸ªæ¨¡å¼" +#: builtin/replay.c +msgid "need some commits to replay" +msgstr "需è¦ä¸€äº›æäº¤æ¥é‡æ”¾" + +#: builtin/replay.c +msgid "--onto and --advance are incompatible" +msgstr "--onto å’Œ --advance ä¸å…¼å®¹" + +#: builtin/replay.c +msgid "all positive revisions given must be references" +msgstr "æä¾›çš„æ‰€æœ‰æ£å‘版本必须为引用" + +#: builtin/replay.c +msgid "argument to --advance must be a reference" +msgstr "--advance çš„å‚æ•°å¿…须是引用" + +#: builtin/replay.c +msgid "" +"cannot advance target with multiple sources because ordering would be ill-" +"defined" +msgstr "ä¸èƒ½ä½¿ç”¨å¤šä¸ªæºæŽ¨è¿›ç›®æ ‡ï¼Œå› ä¸ºæ— æ³•æ˜Žç¡®å¦‚ä½•æŽ’åº" + +#: builtin/replay.c +msgid "" +"cannot implicitly determine whether this is an --advance or --onto operation" +msgstr "ä¸èƒ½éšå¼åœ°ç¡®å®šè¿™æ˜¯ --advance 还是 --onto çš„æ“作" + +#: builtin/replay.c +msgid "" +"cannot advance target with multiple source branches because ordering would " +"be ill-defined" +msgstr "ä¸èƒ½ä½¿ç”¨å¤šä¸ªæºåˆ†æ”¯æŽ¨è¿›ç›®æ ‡ï¼Œå› ä¸ºæ— æ³•æ˜Žç¡®å¦‚ä½•æŽ’åº" + +#: builtin/replay.c +msgid "cannot implicitly determine correct base for --onto" +msgstr "ä¸èƒ½éšå¼åœ°ç¡®å®š --onto æ£ç¡®çš„基线" + +#: builtin/replay.c +msgid "" +"(EXPERIMENTAL!) git replay ([--contained] --onto <newbase> | --advance " +"<branch>) <revision-range>..." +msgstr "(试验ä¸ï¼ï¼‰git replay ([--contained] --onto <新基线> | --advance <分支>) <版本范围>..." + +#: builtin/replay.c +msgid "make replay advance given branch" +msgstr "釿”¾æ—¶æ¼”进给定的分支" + +#: builtin/replay.c +msgid "replay onto given commit" +msgstr "釿”¾åˆ°ç»™å®šæäº¤" + +#: builtin/replay.c +msgid "advance all branches contained in revision-range" +msgstr "演进版本范围ä¸åŒ…å«çš„æ‰€æœ‰åˆ†æ”¯" + +#: builtin/replay.c +msgid "option --onto or --advance is mandatory" +msgstr "选项 --onto 或 --advance 必须指定其一" + +#: builtin/replay.c +#, c-format +msgid "" +"some rev walking options will be overridden as '%s' bit in 'struct rev_info' " +"will be forced" +msgstr "一些版本é历选项将被覆盖,如 'struct rev_info' ä¸çš„ '%s' ä½å°†è¢«å¼ºåˆ¶è®¾å®š" + +#: builtin/replay.c +msgid "error preparing revisions" +msgstr "准备版本时错误" + +#: builtin/replay.c +msgid "replaying down to root commit is not supported yet!" +msgstr "ç›®å‰è¿˜ä¸æ”¯æŒé‡æ”¾åˆ°æ ¹æäº¤ï¼" + +#: builtin/replay.c +msgid "replaying merge commits is not supported yet!" +msgstr "ç›®å‰è¿˜ä¸æ”¯æŒé‡æ”¾åˆ°åˆå¹¶æäº¤ï¼" + #: builtin/rerere.c msgid "" "git rerere [clear | forget <pathspec>... | diff | status | remaining | gc]" @@ -14215,18 +14326,6 @@ msgstr "--prefix 需è¦ä¸€ä¸ªå‚æ•°" msgid "unknown mode for --abbrev-ref: %s" msgstr "未知的 --abbrev-ref 模å¼ï¼š%s" -#: builtin/rev-parse.c revision.c -msgid "--exclude-hidden cannot be used together with --branches" -msgstr "--exclude-hidden ä¸èƒ½ä¸Ž --branches 一起使用" - -#: builtin/rev-parse.c revision.c -msgid "--exclude-hidden cannot be used together with --tags" -msgstr "--exclude-hidden ä¸èƒ½ä¸Ž --tags 一起使用" - -#: builtin/rev-parse.c revision.c -msgid "--exclude-hidden cannot be used together with --remotes" -msgstr "--exclude-hidden ä¸èƒ½ä¸Ž --remotes 一起使用" - #: builtin/rev-parse.c setup.c msgid "this operation must be run in a work tree" msgstr "该æ“作必须在一个工作区ä¸è¿è¡Œ" @@ -14730,11 +14829,6 @@ msgstr "䏿‰“å°ç»“æžœåˆ°æ ‡å‡†è¾“å‡ºï¼ˆä¾‹å¦‚ä¸Ž --verify 傿•°å…±ç”¨ï¼‰" msgid "show refs from stdin that aren't in local repository" msgstr "æ˜¾ç¤ºä»Žæ ‡å‡†è¾“å…¥ä¸è¯»å…¥çš„ä¸åœ¨æœ¬åœ°ä»“库ä¸çš„引用" -#: builtin/show-ref.c -#, c-format -msgid "only one of '%s', '%s' or '%s' can be given" -msgstr "选项 '%s'ã€'%s' 或 '%s' åªèƒ½ä½¿ç”¨å…¶ä¸€" - #: builtin/sparse-checkout.c msgid "" "git sparse-checkout (init | list | set | add | reapply | disable | check-" @@ -16509,30 +16603,30 @@ msgstr "没有å¯ç”¨çš„æºåˆ†æ”¯ï¼Œå°†åŸºäºŽ '--orphan' 选项进行推æ–" #: builtin/worktree.c #, c-format msgid "" -"If you meant to create a worktree containing a new orphan branch\n" +"If you meant to create a worktree containing a new unborn branch\n" "(branch with no commits) for this repository, you can do so\n" "using the --orphan flag:\n" "\n" " git worktree add --orphan -b %s %s\n" msgstr "" -"å¦‚æžœä½ æ‰“ç®—ä¸ºæ¤ä»“åº“åˆ›å»ºä¸€ä¸ªåŒ…å«æ–°çš„å¤ç«‹åˆ†æ”¯\n" -"(没有æäº¤çš„åˆ†æ”¯ï¼‰çš„å·¥ä½œåŒºï¼Œä½ å¯ä»¥ä½¿ç”¨é€‰é¡¹\n" -"--orphan æ¥æ‰§è¡Œæ¤æ“作:\n" +"å¦‚æžœä½ æ‰“ç®—ä¸ºæ¤ä»“åº“åˆ›å»ºä¸€ä¸ªåŒ…å«æ–°çš„æœªè¯žç”Ÿçš„\n" +"分支(没有æäº¤çš„åˆ†æ”¯ï¼‰çš„å·¥ä½œåŒºï¼Œä½ å¯ä»¥ä½¿ç”¨\n" +"选项 --orphan æ¥æ‰§è¡Œæ¤æ“作:\n" "\n" " git worktree add --orphan -b %s %s\n" #: builtin/worktree.c #, c-format msgid "" -"If you meant to create a worktree containing a new orphan branch\n" +"If you meant to create a worktree containing a new unborn branch\n" "(branch with no commits) for this repository, you can do so\n" "using the --orphan flag:\n" "\n" " git worktree add --orphan %s\n" msgstr "" -"å¦‚æžœä½ æ‰“ç®—ä¸ºæ¤ä»“åº“åˆ›å»ºä¸€ä¸ªåŒ…å«æ–°çš„å¤ç«‹åˆ†æ”¯\n" -"(没有æäº¤çš„åˆ†æ”¯ï¼‰çš„å·¥ä½œåŒºï¼Œä½ å¯ä»¥ä½¿ç”¨é€‰é¡¹\n" -"--orphan æ¥æ‰§è¡Œæ¤æ“作:\n" +"å¦‚æžœä½ æ‰“ç®—ä¸ºæ¤ä»“åº“åˆ›å»ºä¸€ä¸ªåŒ…å«æ–°çš„æœªè¯žç”Ÿçš„\n" +"分支(没有æäº¤çš„åˆ†æ”¯ï¼‰çš„å·¥ä½œåŒºï¼Œä½ å¯ä»¥ä½¿ç”¨\n" +"选项 --orphan æ¥æ‰§è¡Œæ¤æ“作:\n" "\n" " git worktree add --orphan %s\n" @@ -16603,6 +16697,11 @@ msgstr "åˆå§‹åŒ–" #: builtin/worktree.c #, c-format +msgid "could not find created worktree '%s'" +msgstr "æ— æ³•æ‰¾åˆ°å·²åˆ›å»ºçš„å·¥ä½œæ ‘ '%s'" + +#: builtin/worktree.c +#, c-format msgid "Preparing worktree (new branch '%s')" msgstr "准备工作区(新分支 '%s')" @@ -16646,11 +16745,6 @@ msgstr "" "请先使用 'add -f' æ¥è¦†ç›–或拉å–一个远程仓库" #: builtin/worktree.c -#, c-format -msgid "'%s' and '%s' cannot be used together" -msgstr "'%s' å’Œ '%s' ä¸èƒ½åŒæ—¶ä½¿ç”¨" - -#: builtin/worktree.c msgid "checkout <branch> even if already checked out in other worktree" msgstr "检出 <分支>,å³ä½¿å·²ç»è¢«æ£€å‡ºåˆ°å…¶å®ƒå·¥ä½œåŒº" @@ -16663,8 +16757,8 @@ msgid "create or reset a branch" msgstr "创建或é‡ç½®ä¸€ä¸ªåˆ†æ”¯" #: builtin/worktree.c -msgid "create unborn/orphaned branch" -msgstr "创建一个尚未诞生的/å¤ç«‹çš„分支" +msgid "create unborn branch" +msgstr "创建一个尚未诞生的分支" #: builtin/worktree.c msgid "populate the new working tree" @@ -16693,12 +16787,8 @@ msgstr "选项 '%s'ã€'%s' å’Œ '%s' ä¸èƒ½åŒæ—¶ä½¿ç”¨" #: builtin/worktree.c #, c-format -msgid "options '%s', and '%s' cannot be used together" -msgstr "选项 '%s' 与 '%s' ä¸èƒ½åŒæ—¶ä½¿ç”¨" - -#: builtin/worktree.c -msgid "<commit-ish>" -msgstr "<æäº¤å·>" +msgid "option '%s' and commit-ish cannot be used together" +msgstr "选项 '%s' å’Œæäº¤å·ä¸èƒ½åŒæ—¶ä½¿ç”¨" #: builtin/worktree.c msgid "added with --lock" @@ -17489,6 +17579,10 @@ msgid "Create, list, delete refs to replace objects" msgstr "创建ã€åˆ—出ã€åˆ 除对象替æ¢å¼•用" #: command-list.h +msgid "EXPERIMENTAL: Replay commits on a new base, works with bare repos too" +msgstr "试验ä¸ï¼šåŸºäºŽä¸€ä¸ªæ–°åŸºçº¿é‡æ”¾æäº¤ï¼ŒåŒæ ·é€‚用于纯仓库" + +#: command-list.h msgid "Generates a summary of pending changes" msgstr "生æˆå¾…定更改的摘è¦" @@ -17803,39 +17897,82 @@ msgstr "一个管ç†å¤§åž‹ Git 仓库的工具" #: commit-graph.c msgid "commit-graph file is too small" -msgstr "æäº¤å›¾å½¢æ–‡ä»¶å¤ªå°" +msgstr "æäº¤å›¾æ–‡ä»¶å¤ªå°" + +#: commit-graph.c +msgid "commit-graph oid fanout chunk is wrong size" +msgstr "æäº¤å›¾ä¸å¯¹è±¡ ID 的扇出å—大å°é”™è¯¯" + +#: commit-graph.c +msgid "commit-graph fanout values out of order" +msgstr "æäº¤å›¾çš„æ‰‡å‡ºå€¼å¤±åº" + +#: commit-graph.c +msgid "commit-graph OID lookup chunk is the wrong size" +msgstr "æäº¤å›¾çš„对象 ID 查询å—大å°é”™è¯¯" + +#: commit-graph.c +msgid "commit-graph commit data chunk is wrong size" +msgstr "æäº¤å›¾çš„æäº¤æ•°æ®å—大å°é”™è¯¯" + +#: commit-graph.c +msgid "commit-graph generations chunk is wrong size" +msgstr "æäº¤å›¾çš„世代å—大å°é”™è¯¯" + +#: commit-graph.c +msgid "commit-graph changed-path index chunk is too small" +msgstr "æäº¤å›¾çš„å˜æ›´è·¯å¾„的索引å—太å°" + +#: commit-graph.c +#, c-format +msgid "" +"ignoring too-small changed-path chunk (%<PRIuMAX> < %<PRIuMAX>) in commit-" +"graph file" +msgstr "忽略æäº¤å›¾æ–‡ä»¶ä¸è¿‡å°çš„æ›´æ”¹è·¯å¾„å—(%<PRIuMAX> < %<PRIuMAX>)" #: commit-graph.c #, c-format msgid "commit-graph signature %X does not match signature %X" -msgstr "æäº¤å›¾å½¢ç¾å %X å’Œç¾å %X ä¸åŒ¹é…" +msgstr "æäº¤å›¾ç¾å %X å’Œç¾å %X ä¸åŒ¹é…" #: commit-graph.c #, c-format msgid "commit-graph version %X does not match version %X" -msgstr "æäº¤å›¾å½¢ç‰ˆæœ¬ %X 和版本 %X ä¸åŒ¹é…" +msgstr "æäº¤å›¾ç‰ˆæœ¬ %X 和版本 %X ä¸åŒ¹é…" #: commit-graph.c #, c-format msgid "commit-graph hash version %X does not match version %X" -msgstr "æäº¤å›¾å½¢å“ˆå¸Œç‰ˆæœ¬ %X 和版本 %X ä¸åŒ¹é…" +msgstr "æäº¤å›¾å“ˆå¸Œç‰ˆæœ¬ %X 和版本 %X ä¸åŒ¹é…" #: commit-graph.c #, c-format msgid "commit-graph file is too small to hold %u chunks" -msgstr "æäº¤å›¾å½¢æ–‡ä»¶å¤ªå°ï¼Œå®¹ä¸ä¸‹ %u 个å—" +msgstr "æäº¤å›¾æ–‡ä»¶å¤ªå°ï¼Œå®¹ä¸ä¸‹ %u 个å—" + +#: commit-graph.c +msgid "commit-graph required OID fanout chunk missing or corrupted" +msgstr "æäº¤å›¾æ‰€éœ€çš„对象 ID 扇出å—缺失或æŸå" + +#: commit-graph.c +msgid "commit-graph required OID lookup chunk missing or corrupted" +msgstr "æäº¤å›¾æ‰€éœ€çš„对象 ID 查询å—缺失或æŸå" + +#: commit-graph.c +msgid "commit-graph required commit data chunk missing or corrupted" +msgstr "æäº¤å›¾æ‰€éœ€çš„æäº¤æ•°æ®å—缺失或æŸå" #: commit-graph.c msgid "commit-graph has no base graphs chunk" -msgstr "æäº¤å›¾å½¢æ²¡æœ‰åŸºç¡€å›¾å½¢å—" +msgstr "æäº¤å›¾æ²¡æœ‰åŸºç¡€å›¾å½¢å—" #: commit-graph.c msgid "commit-graph base graphs chunk is too small" -msgstr "æäº¤å›¾å½¢çš„基础图形å—过å°" +msgstr "æäº¤å›¾çš„基础图形å—过å°" #: commit-graph.c msgid "commit-graph chain does not match" -msgstr "æäº¤å›¾å½¢é“¾ä¸åŒ¹é…" +msgstr "æäº¤å›¾é“¾ä¸åŒ¹é…" #: commit-graph.c #, c-format @@ -17843,17 +17980,21 @@ msgid "commit count in base graph too high: %<PRIuMAX>" msgstr "基础图形ä¸çš„æäº¤æ•°é‡è¿‡é«˜ï¼š%<PRIuMAX>" #: commit-graph.c +msgid "commit-graph chain file too small" +msgstr "æäº¤å›¾é“¾æ–‡ä»¶å¤ªå°" + +#: commit-graph.c #, c-format msgid "invalid commit-graph chain: line '%s' not a hash" -msgstr "æ— æ•ˆçš„æäº¤å›¾å½¢é“¾ï¼šè¡Œ '%s' 䏿˜¯ä¸€ä¸ªå“ˆå¸Œå€¼" +msgstr "æ— æ•ˆçš„æäº¤å›¾é“¾ï¼šè¡Œ '%s' 䏿˜¯ä¸€ä¸ªå“ˆå¸Œå€¼" #: commit-graph.c msgid "unable to find all commit-graph files" -msgstr "æ— æ³•æ‰¾åˆ°æ‰€æœ‰æäº¤å›¾å½¢æ–‡ä»¶" +msgstr "æ— æ³•æ‰¾åˆ°æ‰€æœ‰æäº¤å›¾æ–‡ä»¶" #: commit-graph.c msgid "invalid commit position. commit-graph is likely corrupt" -msgstr "æ— æ•ˆçš„æäº¤ä½ç½®ã€‚æäº¤å›¾å½¢å¯èƒ½å·²æŸå" +msgstr "æ— æ•ˆçš„æäº¤ä½ç½®ã€‚æäº¤å›¾å¯èƒ½å·²æŸå" #: commit-graph.c #, c-format @@ -17869,6 +18010,10 @@ msgid "commit-graph overflow generation data is too small" msgstr "æäº¤å›¾æº¢å‡ºä¸–代数æ®è¿‡å°" #: commit-graph.c +msgid "commit-graph extra-edges pointer out of bounds" +msgstr "æäº¤å›¾é¢å¤–边的指针越界" + +#: commit-graph.c msgid "Loading known commits in commit graph" msgstr "æ£åœ¨åŠ è½½æäº¤å›¾ä¸çš„已知æäº¤" @@ -17943,26 +18088,25 @@ msgstr[1] "æ£åœ¨ç”¨ %d æ¥å†™å‡ºæäº¤å›¾" #: commit-graph.c msgid "unable to open commit-graph chain file" -msgstr "æ— æ³•æ‰“å¼€æäº¤å›¾å½¢é“¾æ–‡ä»¶" +msgstr "æ— æ³•æ‰“å¼€æäº¤å›¾é“¾æ–‡ä»¶" #: commit-graph.c msgid "failed to rename base commit-graph file" -msgstr "æ— æ³•é‡å‘½å基础æäº¤å›¾å½¢æ–‡ä»¶" +msgstr "æ— æ³•é‡å‘½å基础æäº¤å›¾æ–‡ä»¶" #: commit-graph.c msgid "failed to rename temporary commit-graph file" -msgstr "æ— æ³•é‡å‘½å临时æäº¤å›¾å½¢æ–‡ä»¶" +msgstr "æ— æ³•é‡å‘½å临时æäº¤å›¾æ–‡ä»¶" #: commit-graph.c #, c-format msgid "cannot merge graphs with %<PRIuMAX>, %<PRIuMAX> commits" -msgstr "" -"æ— æ³•åˆå¹¶æäº¤å›¾å½¢ï¼Œæ€»å…±å·²ç´¯åŠ æäº¤æ•°ï¼š%<PRIuMAX>,当å‰å¾…ç´¯åŠ æäº¤æ•°ï¼š%<PRIuMAX>" +msgstr "æ— æ³•åˆå¹¶æäº¤å›¾ï¼Œæ€»å…±å·²ç´¯åŠ æäº¤æ•°ï¼š%<PRIuMAX>,当å‰å¾…ç´¯åŠ æäº¤æ•°ï¼š%<PRIuMAX>" #: commit-graph.c #, c-format msgid "cannot merge graph %s, too many commits: %<PRIuMAX>" -msgstr "æ— æ³•åˆå¹¶æäº¤å›¾å½¢ %s, æäº¤è¿‡å¤šï¼š%<PRIuMAX>" +msgstr "æ— æ³•åˆå¹¶æäº¤å›¾ %s, æäº¤è¿‡å¤šï¼š%<PRIuMAX>" #: commit-graph.c msgid "Scanning merged commits" @@ -17970,7 +18114,7 @@ msgstr "æ£åœ¨æ‰«æåˆå¹¶æäº¤" #: commit-graph.c msgid "Merging commit-graph" -msgstr "æ£åœ¨åˆå¹¶æäº¤å›¾å½¢" +msgstr "æ£åœ¨åˆå¹¶æäº¤å›¾" #: commit-graph.c msgid "attempting to write a commit-graph, but 'core.commitGraph' is disabled" @@ -17987,59 +18131,59 @@ msgstr "æäº¤å›¾æ–‡ä»¶çš„æ ¡éªŒç 错误,å¯èƒ½å·²ç»æŸå" #: commit-graph.c #, c-format msgid "commit-graph has incorrect OID order: %s then %s" -msgstr "æäº¤å›¾å½¢çš„对象 ID 顺åºä¸æ£ç¡®ï¼š%s ç„¶åŽ %s" +msgstr "æäº¤å›¾çš„对象 ID 顺åºä¸æ£ç¡®ï¼š%s ç„¶åŽ %s" #: commit-graph.c #, c-format msgid "commit-graph has incorrect fanout value: fanout[%d] = %u != %u" -msgstr "æäº¤å›¾å½¢æœ‰ä¸æ£ç¡®çš„æ‰‡å‡ºå€¼ï¼šfanout[%d] = %u != %u" +msgstr "æäº¤å›¾æœ‰ä¸æ£ç¡®çš„æ‰‡å‡ºå€¼ï¼šfanout[%d] = %u != %u" #: commit-graph.c #, c-format msgid "failed to parse commit %s from commit-graph" -msgstr "æ— æ³•ä»Žæäº¤å›¾å½¢ä¸è§£æžæäº¤ %s" +msgstr "æ— æ³•ä»Žæäº¤å›¾ä¸è§£æžæäº¤ %s" #: commit-graph.c #, c-format msgid "failed to parse commit %s from object database for commit-graph" -msgstr "æ— æ³•ä»Žæäº¤å›¾å½¢çš„对象库ä¸è§£æžæäº¤ %s" +msgstr "æ— æ³•ä»Žæäº¤å›¾çš„对象库ä¸è§£æžæäº¤ %s" #: commit-graph.c #, c-format msgid "root tree OID for commit %s in commit-graph is %s != %s" -msgstr "æäº¤å›¾å½¢ä¸çš„æäº¤ %s çš„æ ¹æ ‘å¯¹è±¡ ID 是 %s != %s" +msgstr "æäº¤å›¾ä¸çš„æäº¤ %s çš„æ ¹æ ‘å¯¹è±¡ ID 是 %s != %s" #: commit-graph.c #, c-format msgid "commit-graph parent list for commit %s is too long" -msgstr "æäº¤ %s çš„æäº¤å›¾å½¢çˆ¶æäº¤åˆ—表太长了" +msgstr "æäº¤ %s çš„æäº¤å›¾çˆ¶æäº¤åˆ—表太长了" #: commit-graph.c #, c-format msgid "commit-graph parent for %s is %s != %s" -msgstr "%s çš„æäº¤å›¾å½¢çˆ¶æäº¤æ˜¯ %s != %s" +msgstr "%s çš„æäº¤å›¾çˆ¶æäº¤æ˜¯ %s != %s" #: commit-graph.c #, c-format msgid "commit-graph parent list for commit %s terminates early" -msgstr "æäº¤ %s çš„æäº¤å›¾å½¢çˆ¶æäº¤åˆ—表过早终æ¢" +msgstr "æäº¤ %s çš„æäº¤å›¾çˆ¶æäº¤åˆ—表过早终æ¢" #: commit-graph.c #, c-format msgid "commit-graph generation for commit %s is %<PRIuMAX> < %<PRIuMAX>" -msgstr "æäº¤å›¾å½¢ä¸çš„æäº¤ %s çš„ä¸–ä»£å·æ˜¯ %<PRIuMAX> < %<PRIuMAX>" +msgstr "æäº¤å›¾ä¸çš„æäº¤ %s çš„ä¸–ä»£å·æ˜¯ %<PRIuMAX> < %<PRIuMAX>" #: commit-graph.c #, c-format msgid "commit date for commit %s in commit-graph is %<PRIuMAX> != %<PRIuMAX>" -msgstr "æäº¤å›¾å½¢ä¸æäº¤ %s çš„æäº¤æ—¥æœŸæ˜¯ %<PRIuMAX> != %<PRIuMAX>" +msgstr "æäº¤å›¾ä¸æäº¤ %s çš„æäº¤æ—¥æœŸæ˜¯ %<PRIuMAX> != %<PRIuMAX>" #: commit-graph.c #, c-format msgid "" "commit-graph has both zero and non-zero generations (e.g., commits '%s' and " "'%s')" -msgstr "æäº¤å›¾å½¢å…·æœ‰é›¶å’Œéžé›¶çš„世代(例如:æäº¤ '%s' å’Œ '%s')" +msgstr "æäº¤å›¾å…·æœ‰é›¶å’Œéžé›¶çš„世代(例如:æäº¤ '%s' å’Œ '%s')" #: commit-graph.c msgid "Verifying commits in commit graph" @@ -18073,7 +18217,7 @@ msgstr "" #: commit.c #, c-format msgid "commit %s exists in commit-graph but not in the object database" -msgstr "æäº¤ %s å˜åœ¨äºŽæäº¤å›¾å½¢ä¸ï¼Œä½†ä¸å˜åœ¨äºŽå¯¹è±¡æ•°æ®åº“ä¸" +msgstr "æäº¤ %s å˜åœ¨äºŽæäº¤å›¾ä¸ï¼Œä½†ä¸å˜åœ¨äºŽå¯¹è±¡æ•°æ®åº“ä¸" #: commit.c #, c-format @@ -19255,6 +19399,11 @@ msgstr "color-moved-ws:allow-indentation-change ä¸èƒ½ä¸Žå…¶å®ƒç©ºç™½å—符模 msgid "Unknown value for 'diff.submodule' config variable: '%s'" msgstr "é…ç½®å˜é‡ 'diff.submodule' 未知的å–值:'%s'" +#: diff.c transport.c +#, c-format +msgid "unknown value for config '%s': %s" +msgstr "é…ç½® '%s' 未知的å–值:%s" + #: diff.c #, c-format msgid "" @@ -19349,13 +19498,6 @@ msgid "invalid mode '%s' in --color-moved-ws" msgstr "--color-moved-ws ä¸çš„æ— æ•ˆæ¨¡å¼ '%s' " #: diff.c -msgid "" -"option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and " -"\"histogram\"" -msgstr "" -"diff-algorithm 选项有 \"myers\"ã€\"minimal\"ã€\"patience\" å’Œ \"histogram\"" - -#: diff.c #, c-format msgid "invalid argument to %s" msgstr "%s çš„å‚æ•°æ— 效" @@ -19412,8 +19554,8 @@ msgid "output only the last line of --stat" msgstr "åªè¾“出 --stat 的最åŽä¸€è¡Œ" #: diff.c -msgid "<param1,param2>..." -msgstr "<傿•°1,傿•°2>..." +msgid "<param1>,<param2>..." +msgstr "<傿•°1>,<傿•°2>..." #: diff.c msgid "" @@ -19425,8 +19567,8 @@ msgid "synonym for --dirstat=cumulative" msgstr "å’Œ --dirstat=cumulative åŒä¹‰" #: diff.c -msgid "synonym for --dirstat=files,param1,param2..." -msgstr "是 --dirstat=files,param1,param2... çš„åŒä¹‰è¯" +msgid "synonym for --dirstat=files,<param1>,<param2>..." +msgstr "是 --dirstat=files,<傿•°1>,<傿•°2>... çš„åŒä¹‰è¯" #: diff.c msgid "warn if changes introduce conflict markers or whitespace errors" @@ -19649,14 +19791,6 @@ msgid "generate diff using the \"histogram diff\" algorithm" msgstr "使用 \"histogram diff\" 算法生æˆå·®å¼‚" #: diff.c -msgid "<algorithm>" -msgstr "<算法>" - -#: diff.c -msgid "choose a diff algorithm" -msgstr "选择一个差异算法" - -#: diff.c msgid "<text>" msgstr "<文本>" @@ -21412,6 +21546,12 @@ msgid "multi-pack-index OID fanout is of the wrong size" msgstr "多包索引的对象 ID 扇出表大å°é”™è¯¯" #: midx.c +#, c-format +msgid "" +"oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]" +msgstr "对象 ID 扇出失åºï¼šfanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]" + +#: midx.c msgid "multi-pack-index OID lookup chunk is the wrong size" msgstr "多包索引的对象 ID 查询å—大å°é”™è¯¯" @@ -21470,6 +21610,15 @@ msgid "bad pack-int-id: %u (%u total packs)" msgstr "错的 pack-int-id:%u(共有 %u 个包)" #: midx.c +msgid "MIDX does not contain the BTMP chunk" +msgstr "å¤šåŒ…ç´¢å¼•ä¸æœªåŒ…å« BTMP å—" + +#: midx.c +#, c-format +msgid "could not load bitmapped pack %<PRIu32>" +msgstr "ä¸èƒ½æ‰“开已被ä½å›¾ç´¢å¼•的包 %<PRIu32>" + +#: midx.c msgid "multi-pack-index stores a 64-bit offset, but off_t is too small" msgstr "多包索引å˜å‚¨ä¸€ä¸ª64ä½å移,但是 off_t 太å°" @@ -21577,12 +21726,6 @@ msgid "Looking for referenced packfiles" msgstr "æ£åœ¨æŸ¥æ‰¾å¼•用的包文件" #: midx.c -#, c-format -msgid "" -"oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]" -msgstr "对象 ID æ‰‡å‡ºæ— åºï¼šfanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]" - -#: midx.c msgid "the midx contains no oid" msgstr "midx ä¸åŒ…å« oid" @@ -22211,6 +22354,10 @@ msgstr "多包ä½å›¾ç¼ºå°‘必需的åå‘索引" msgid "could not open pack %s" msgstr "ä¸èƒ½æ‰“开包 %s" +#: pack-bitmap.c t/helper/test-read-midx.c +msgid "could not determine MIDX preferred pack" +msgstr "ä¸èƒ½ç¡®å®šå¤šåŒ…索引的首选包" + #: pack-bitmap.c #, c-format msgid "preferred pack (%s) is invalid" @@ -22236,6 +22383,11 @@ msgstr "æŸåçš„ EWAH ä½å›¾ï¼šæäº¤ \"%s\" ä½å›¾çš„æ–‡ä»¶å¤´è¢«æˆªæ–" #: pack-bitmap.c #, c-format +msgid "unable to load pack: '%s', disabling pack-reuse" +msgstr "æ— æ³•æ‰“å¼€åŒ…ï¼š'%s',ç¦ç”¨åŒ…é‡ç”¨" + +#: pack-bitmap.c +#, c-format msgid "object '%s' not found in type bitmaps" msgstr "对象 %s 为在类型ä½å›¾ä¸æ‰¾åˆ°" @@ -22349,6 +22501,10 @@ msgstr "ä½äºŽ %<PRIu64> çš„æ— æ•ˆçš„åå‘索引:%<PRIu32> != %<PRIu32>" msgid "multi-pack-index reverse-index chunk is the wrong size" msgstr "多包索引的åå‘索引å—大å°é”™è¯¯" +#: pack-revindex.c +msgid "could not determine preferred pack" +msgstr "æ— æ³•ç¡®å®šé¦–é€‰åŒ…" + #: pack-write.c msgid "cannot both write and verify reverse index" msgstr "æ— æ³•åŒæ—¶å†™å…¥å’Œæ ¡éªŒåå‘索引" @@ -22429,11 +22585,6 @@ msgstr "%s 期望一个éžè´Ÿæ•´æ•°å’Œä¸€ä¸ªå¯é€‰çš„ k/m/g åŽç¼€" #: parse-options.c #, c-format -msgid "%s is incompatible with %s" -msgstr "%s 与 %s ä¸å…¼å®¹" - -#: parse-options.c -#, c-format msgid "ambiguous option: %s (could be --%s%s or --%s%s)" msgstr "有æ§ä¹‰çš„选项:%s(å¯ä»¥æ˜¯ --%s%s 或 --%s%s)" @@ -22823,11 +22974,6 @@ msgstr "æ— æ³•åœ¨ç´¢å¼•ä¸æ·»åŠ '%s'" #: read-cache.c #, c-format -msgid "unable to stat '%s'" -msgstr "æ— æ³•å¯¹ %s 执行 stat" - -#: read-cache.c -#, c-format msgid "'%s' appears as both a file and as a directory" msgstr "'%s' çœ‹èµ·æ¥æ—¢æ˜¯æ–‡ä»¶åˆæ˜¯ç›®å½•" @@ -23500,17 +23646,12 @@ msgstr "'%s' å·²å˜åœ¨ï¼Œæ— 法创建 '%s'" msgid "cannot process '%s' and '%s' at the same time" msgstr "æ— æ³•åŒæ—¶å¤„ç† '%s' å’Œ '%s'" -#: refs/files-backend.c -#, c-format -msgid "could not remove reference %s" -msgstr "æ— æ³•åˆ é™¤å¼•ç”¨ %s" - -#: refs/files-backend.c refs/packed-backend.c +#: refs.c #, c-format msgid "could not delete reference %s: %s" msgstr "æ— æ³•åˆ é™¤å¼•ç”¨ %s:%s" -#: refs/files-backend.c refs/packed-backend.c +#: refs.c #, c-format msgid "could not delete references: %s" msgstr "æ— æ³•åˆ é™¤å¼•ç”¨ï¼š%s" @@ -24665,7 +24806,7 @@ msgstr "æ— æ•ˆçš„ä½œè€…èº«ä»½ '%s'" msgid "corrupt author: missing date information" msgstr "æŸå的作者:缺失日期信æ¯" -#: sequencer.c t/helper/test-fast-rebase.c +#: sequencer.c #, c-format msgid "could not update %s" msgstr "ä¸èƒ½æ›´æ–° %s" @@ -25156,6 +25297,10 @@ msgid "Autostash exists; creating a new stash entry." msgstr "自动贮è—å·²ç»å˜åœ¨ï¼›æ£åœ¨åˆ›å»ºä¸€ä¸ªæ–°çš„è´®è—æ¡ç›®ã€‚" #: sequencer.c +msgid "autostash reference is a symref" +msgstr "自动贮è—的引用是一个符å·å¼•用" + +#: sequencer.c msgid "could not detach HEAD" msgstr "ä¸èƒ½åˆ†ç¦»å¤´æŒ‡é’ˆ" @@ -25531,6 +25676,11 @@ msgstr "æ— æ•ˆçš„åˆå§‹åˆ†æ”¯å:'%s'" #: setup.c #, c-format +msgid "re-init: ignored --initial-branch=%s" +msgstr "re-init:已忽略 --initial-branch=%s" + +#: setup.c +#, c-format msgid "unable to handle file type %d" msgstr "ä¸èƒ½å¤„ç† %d 类型的文件" @@ -25544,14 +25694,14 @@ msgid "attempt to reinitialize repository with different hash" msgstr "å°è¯•用ä¸åŒçš„å“ˆå¸Œç®—æ³•é‡æ–°åˆå§‹åŒ–仓库" #: setup.c -#, c-format -msgid "%s already exists" -msgstr "%s å·²ç»å˜åœ¨" +msgid "" +"attempt to reinitialize repository with different reference storage format" +msgstr "å°è¯•使用ä¸åŒçš„引用å˜å‚¨æ ¼å¼é‡æ–°åˆå§‹åŒ–仓库" #: setup.c #, c-format -msgid "re-init: ignored --initial-branch=%s" -msgstr "re-init:已忽略 --initial-branch=%s" +msgid "%s already exists" +msgstr "%s å·²ç»å˜åœ¨" #: setup.c #, c-format @@ -25869,14 +26019,6 @@ msgstr "åœ¨æ¯æ¬¡è¿ä»£å‰æ¸…é™¤ç¼“å˜æ ‘" msgid "number of entries in the cache tree to invalidate (default 0)" msgstr "ç¼“å˜æ ‘䏿— 效化的æ¡ç›®æ•°é‡ï¼ˆé»˜è®¤ 0)" -#: t/helper/test-fast-rebase.c -msgid "unhandled options" -msgstr "未处ç†çš„选项" - -#: t/helper/test-fast-rebase.c -msgid "error preparing revisions" -msgstr "准备版本时错误" - #: t/helper/test-reach.c #, c-format msgid "commit %s is not marked reachable" @@ -26070,10 +26212,6 @@ msgstr "åè®®ä¸æ”¯æŒè®¾ç½®è¿œç¨‹æœåŠ¡è·¯å¾„" msgid "invalid remote service path" msgstr "æ— æ•ˆçš„è¿œç¨‹æœåŠ¡è·¯å¾„" -#: transport-helper.c transport.c -msgid "operation not supported by protocol" -msgstr "åè®®ä¸æ”¯æŒè¯¥æ“作" - #: transport-helper.c #, c-format msgid "can't connect to subservice %s" @@ -26239,11 +26377,6 @@ msgstr "åè®® v2 的支æŒå°šæœªå®žçް" #: transport.c #, c-format -msgid "unknown value for config '%s': %s" -msgstr "é…ç½® '%s' çš„å–值未知:%s" - -#: transport.c -#, c-format msgid "transport '%s' not allowed" msgstr "ä¼ è¾“ '%s' ä¸å…许" @@ -26301,6 +26434,10 @@ msgstr "åè®®ä¸æ”¯æŒ bundle-uri æ“作" msgid "could not retrieve server-advertised bundle-uri list" msgstr "æ— æ³•èŽ·å–æœåŠ¡å™¨å…¬å¸ƒçš„ bundle-uri 列表" +#: transport.c +msgid "operation not supported by protocol" +msgstr "åè®®ä¸æ”¯æŒè¯¥æ“作" + #: tree-walk.c msgid "too-short tree object" msgstr "太çŸçš„æ ‘对象" @@ -27329,6 +27466,11 @@ msgstr "å¦å¤–,您的索引ä¸åŒ…嫿œªæäº¤çš„å˜æ›´ã€‚" msgid "cannot %s: Your index contains uncommitted changes." msgstr "ä¸èƒ½%s:您的索引ä¸åŒ…嫿œªæäº¤çš„å˜æ›´ã€‚" +#: xdiff-interface.c +#, c-format +msgid "unknown style '%s' given for '%s'" +msgstr "'%2$s' çš„æœªçŸ¥é£Žæ ¼å–值 '%1$s'" + #: git-merge-octopus.sh git-merge-resolve.sh msgid "" "Error: Your local changes to the following files would be overwritten by " diff --git a/po/zh_TW.po b/po/zh_TW.po index f777a0596f..312dd128a4 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -19,15 +19,15 @@ # - Yichao Yu <yyc1992 AT gmail.com> # - Zhuang Ya <zhuangya AT me.com> # -# Yi-Jyun Pan <pan93412@gmail.com>, 2021, 2022, 2023. +# Yi-Jyun Pan <pan93412@gmail.com>, 2021, 2022, 2023, 2024. # Kaiyang Wu <self@origincode.me>, 2022. -# lumynou5 <lumynou5.tw@gmail.com>, 2023. +# lumynou5 <lumynou5.tw@gmail.com>, 2023, 2024. msgid "" msgstr "" "Project-Id-Version: Git\n" "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n" -"POT-Creation-Date: 2023-11-19 22:29+0800\n" -"PO-Revision-Date: 2023-11-19 23:34+0800\n" +"POT-Creation-Date: 2024-02-18 20:48+0800\n" +"PO-Revision-Date: 2024-02-18 20:50+0800\n" "Last-Translator: Yi-Jyun Pan <pan93412@gmail.com>\n" "Language-Team: Chinese (Traditional) <http://weblate.slat.org/projects/git-" "po/git-cli/zh_Hant/>\n" @@ -36,7 +36,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 3.4.1\n" +"X-Generator: Poedit 3.4.2\n" "X-ZhConverter: ç¹åŒ–姬 dict-f4bc617e-r910 @ 2019/11/16 20:23:12 | https://" "zhconvert.org\n" @@ -910,7 +910,7 @@ msgid "unclosed quote" msgstr "未閉åˆçš„引號" #: alias.c builtin/cat-file.c builtin/notes.c builtin/prune-packed.c -#: builtin/receive-pack.c builtin/tag.c +#: builtin/receive-pack.c builtin/tag.c t/helper/test-pkt-line.c msgid "too many arguments" msgstr "引數éŽå¤š" @@ -925,12 +925,13 @@ msgid "unrecognized whitespace ignore option '%s'" msgstr "空白å—元忽略é¸é … “%s†無法è˜åˆ¥" #: apply.c archive.c builtin/add.c builtin/branch.c builtin/checkout-index.c -#: builtin/checkout.c builtin/clone.c builtin/commit.c builtin/describe.c -#: builtin/diff-tree.c builtin/difftool.c builtin/fast-export.c builtin/fetch.c -#: builtin/help.c builtin/index-pack.c builtin/init-db.c builtin/log.c -#: builtin/ls-files.c builtin/merge-base.c builtin/merge.c -#: builtin/pack-objects.c builtin/push.c builtin/rebase.c builtin/repack.c -#: builtin/reset.c builtin/rev-list.c builtin/show-branch.c builtin/stash.c +#: builtin/checkout.c builtin/clean.c builtin/clone.c builtin/commit.c +#: builtin/describe.c builtin/diff-tree.c builtin/difftool.c +#: builtin/fast-export.c builtin/fetch.c builtin/help.c builtin/index-pack.c +#: builtin/init-db.c builtin/log.c builtin/ls-files.c builtin/merge-base.c +#: builtin/merge-tree.c builtin/merge.c builtin/pack-objects.c builtin/rebase.c +#: builtin/repack.c builtin/replay.c builtin/reset.c builtin/rev-list.c +#: builtin/rev-parse.c builtin/show-branch.c builtin/stash.c #: builtin/submodule--helper.c builtin/tag.c builtin/worktree.c parse-options.c #: range-diff.c revision.c #, c-format @@ -1240,12 +1241,12 @@ msgstr "%s:已å˜åœ¨æ–¼å·¥ä½œå€ä¸" #: apply.c #, c-format msgid "new mode (%o) of %s does not match old mode (%o)" -msgstr "%2$s çš„æ–°æ¨¡å¼ (%1$o) å’ŒèˆŠæ¨¡å¼ (%3$o) ä¸ç¬¦" +msgstr "%2$s 的新模å¼ï¼ˆ%1$o)和舊模å¼ï¼ˆ%3$o)ä¸ç¬¦" #: apply.c #, c-format msgid "new mode (%o) of %s does not match old mode (%o) of %s" -msgstr "%2$s çš„æ–°æ¨¡å¼ (%1$o) å’Œ %4$s çš„èˆŠæ¨¡å¼ (%3$o) ä¸ç¬¦" +msgstr "%2$s 的新模å¼ï¼ˆ%1$o)和 %4$s 的舊模å¼ï¼ˆ%3$o)ä¸ç¬¦" #: apply.c #, c-format @@ -1734,6 +1735,11 @@ msgstr "éžé 期é¸é … --output" #: archive.c #, c-format +msgid "extra command line parameter '%s'" +msgstr "å¤šå‡ºå‘½ä»¤åˆ—åƒæ•¸ “%sâ€" + +#: archive.c +#, c-format msgid "Unknown archive format '%s'" msgstr "å°å˜æ ¼å¼ “%s†未知" @@ -1788,6 +1794,17 @@ msgstr "忽略éŽå¤§çš„ gitattributes 資料物件 “%sâ€" msgid "bad --attr-source or GIT_ATTR_SOURCE" msgstr "無效的 --attr-source 或 GIT_ATTR_SOURCE" +#: attr.c read-cache.c +#, c-format +msgid "unable to stat '%s'" +msgstr "ç„¡æ³•å° %s 執行 stat" + +#: bisect.c builtin/cat-file.c builtin/index-pack.c builtin/notes.c +#: builtin/pack-objects.c combine-diff.c rerere.c +#, c-format +msgid "unable to read %s" +msgstr "ä¸èƒ½è®€ %s" + #: bisect.c #, c-format msgid "Badly quoted content in file '%s': %s" @@ -2323,8 +2340,8 @@ msgid "bad action '%s' for '%s'" msgstr "“%sâ€ å‹•ä½œå° â€œ%s†無效" #: builtin/am.c builtin/blame.c builtin/fetch.c builtin/pack-objects.c -#: builtin/pull.c diff-merges.c gpg-interface.c ls-refs.c parallel-checkout.c -#: sequencer.c setup.c +#: builtin/pull.c config.c diff-merges.c gpg-interface.c ls-refs.c +#: parallel-checkout.c sequencer.c setup.c #, c-format msgid "invalid value for '%s': '%s'" msgstr "“%s†的值無效:“%sâ€" @@ -2477,8 +2494,7 @@ msgstr "git write-tree 無法寫入樹狀物件" msgid "applying to an empty history" msgstr "æ£åœ¨å¥—用至空白æ·å²è¨˜éŒ„上" -#: builtin/am.c builtin/commit.c builtin/merge.c sequencer.c -#: t/helper/test-fast-rebase.c +#: builtin/am.c builtin/commit.c builtin/merge.c builtin/replay.c sequencer.c msgid "failed to write commit object" msgstr "無法寫入æäº¤ç‰©ä»¶" @@ -2661,8 +2677,9 @@ msgid "n" msgstr "n" #: builtin/am.c builtin/branch.c builtin/bugreport.c builtin/cat-file.c -#: builtin/diagnose.c builtin/for-each-ref.c builtin/ls-files.c -#: builtin/ls-tree.c builtin/replace.c builtin/tag.c builtin/verify-tag.c +#: builtin/clone.c builtin/diagnose.c builtin/for-each-ref.c builtin/init-db.c +#: builtin/ls-files.c builtin/ls-tree.c builtin/replace.c builtin/tag.c +#: builtin/verify-tag.c msgid "format" msgstr "format" @@ -3357,12 +3374,13 @@ msgstr "無法查詢 “%s†指å‘çš„æäº¤ç‰©ä»¶" #: builtin/branch.c #, c-format -msgid "" -"the branch '%s' is not fully merged.\n" -"If you are sure you want to delete it, run 'git branch -D %s'" -msgstr "" -"分支 “%s†沒有完全åˆä½µã€‚\n" -"如果確定è¦åˆªé™¤å®ƒï¼Œè«‹åŸ·è¡Œ “git branch -D %sâ€" +msgid "the branch '%s' is not fully merged" +msgstr "分支 “%s†沒有完全åˆä½µ" + +#: builtin/branch.c +#, c-format +msgid "If you are sure you want to delete it, run 'git branch -D %s'" +msgstr "如果確定è¦åˆªé™¤å®ƒï¼Œè«‹åŸ·è¡Œ “git branch -D %sâ€" #: builtin/branch.c msgid "update of config-file failed" @@ -4370,7 +4388,7 @@ msgstr "ç„¡æ³•å° â€œ%s†執行 reflog 動作:%s\n" msgid "HEAD is now at" msgstr "HEAD ç›®å‰ä½æ–¼" -#: builtin/checkout.c builtin/clone.c t/helper/test-fast-rebase.c +#: builtin/checkout.c builtin/clone.c msgid "unable to update HEAD" msgstr "無法更新 HEAD" @@ -4631,8 +4649,8 @@ msgid "new-branch" msgstr "new-branch" #: builtin/checkout.c -msgid "new unparented branch" -msgstr "新的,沒有父æäº¤çš„分支" +msgid "new unborn branch" +msgstr "新的未誕生分支" #: builtin/checkout.c builtin/merge.c msgid "update ignored files (default)" @@ -4699,7 +4717,7 @@ msgstr "" msgid "you must specify path(s) to restore" msgstr "æ‚¨å¿…é ˆæŒ‡å®šè¦é‚„原的路徑" -#: builtin/checkout.c builtin/clone.c builtin/remote.c +#: builtin/checkout.c builtin/clone.c builtin/remote.c builtin/replay.c #: builtin/submodule--helper.c builtin/worktree.c msgid "branch" msgstr "branch" @@ -4940,10 +4958,6 @@ msgid "" msgstr "" "clean.requireForce é è¨ç‚º true 且未æä¾› -iã€-n 或 -f é¸é …,拒絕執行清ç†å‹•作" -#: builtin/clean.c -msgid "-x and -X cannot be used together" -msgstr "-x å’Œ -X ä¸èƒ½åŒæ™‚使用" - #: builtin/clone.c msgid "git clone [<options>] [--] <repo> [<dir>]" msgstr "git clone [<options>] [--] <repo> [<dir>]" @@ -5035,6 +5049,7 @@ msgid "create a shallow clone since a specific time" msgstr "建立從指定時間到ç¾åœ¨çš„æ·ºå±¤è¤‡è£½" #: builtin/clone.c builtin/fetch.c builtin/pull.c builtin/rebase.c +#: builtin/replay.c msgid "revision" msgstr "revision" @@ -5062,6 +5077,10 @@ msgstr "gitdir" msgid "separate git dir from working tree" msgstr "git 目錄和工作å€åˆ†é›¢" +#: builtin/clone.c builtin/init-db.c +msgid "specify the reference format to use" +msgstr "指定è¦ä½¿ç”¨çš„å¼•ç”¨æ ¼å¼" + #: builtin/clone.c msgid "key=value" msgstr "key=value" @@ -5211,11 +5230,10 @@ msgstr "å¤ªå¤šåƒæ•¸ã€‚" msgid "You must specify a repository to clone." msgstr "æ‚¨å¿…é ˆæŒ‡å®šè¦è¤‡è£½çš„版本庫。" -#: builtin/clone.c -msgid "" -"--bundle-uri is incompatible with --depth, --shallow-since, and --shallow-" -"exclude" -msgstr "--bundle-uri 與 --depthã€--shallow-since å’Œ --shallow-exclude ä¸ç›¸å®¹" +#: builtin/clone.c builtin/init-db.c setup.c +#, c-format +msgid "unknown ref storage format '%s'" +msgstr "æœªçŸ¥çš„å¼•ç”¨å„²å˜æ ¼å¼ “%sâ€" #: builtin/clone.c #, c-format @@ -5376,14 +5394,14 @@ msgid "" "--stdin-commits]\n" " [--changed-paths] [--[no-]max-new-filters <n>] [--" "[no-]progress]\n" -" <split options>" +" <split-options>" msgstr "" "git commit-graph write [--object-dir <dir>] [--append]\n" " [--split[=<strategy>]] [--reachable | --stdin-packs | " "--stdin-commits]\n" " [--changed-paths] [--[no-]max-new-filters <n>] [--" "[no-]progress]\n" -" <split options>" +" <split-options>" #: builtin/commit-graph.c builtin/fetch.c builtin/log.c builtin/repack.c msgid "dir" @@ -8264,6 +8282,11 @@ msgstr "ç„¡æ³•è®€å–æ¨¹ï¼ˆ%s)" #: builtin/grep.c #, c-format +msgid "unable to read tree %s" +msgstr "ç„¡æ³•è®€å– %s 樹狀物件" + +#: builtin/grep.c +#, c-format msgid "unable to grep from object of type %s" msgstr "無法抓å–來自於 %s 類型的物件" @@ -8784,11 +8807,6 @@ msgstr "解壓縮嚴é‡çš„ä¸ä¸€è‡´" msgid "SHA1 COLLISION FOUND WITH %s !" msgstr "ç™¼ç¾ %s å‡ºç¾ SHA1 è¡çªï¼" -#: builtin/index-pack.c builtin/pack-objects.c -#, c-format -msgid "unable to read %s" -msgstr "ä¸èƒ½è®€ %s" - #: builtin/index-pack.c #, c-format msgid "cannot read existing object info %s" @@ -8962,11 +8980,13 @@ msgstr "åœ¨æ‰“åŒ…ç‰©ä»¶ä¸ fsck 檢查發生錯誤" msgid "" "git init [-q | --quiet] [--bare] [--template=<template-directory>]\n" " [--separate-git-dir <git-dir>] [--object-format=<format>]\n" +" [--ref-format=<format>]\n" " [-b <branch-name> | --initial-branch=<branch-name>]\n" " [--shared[=<permissions>]] [<directory>]" msgstr "" "git init [-q | --quiet] [--bare] [--template=<template-directory>]\n" " [--separate-git-dir <git-dir>] [--object-format=<format>]\n" +" [--ref-format=<format>]\n" " [-b <branch-name> | --initial-branch=<branch-name>]\n" " [--shared[=<permissions>]] [<directory>]" @@ -9125,7 +9145,7 @@ msgid "" "<file>" msgstr "追蹤 <é–‹å§‹>,<çµæŸ> 範åœä¸æ©«åˆ—或 <檔案> ä¸> :<函數å稱> 的變化å²" -#: builtin/log.c builtin/shortlog.c bundle.c +#: builtin/log.c builtin/replay.c builtin/shortlog.c bundle.c #, c-format msgid "unrecognized argument: %s" msgstr "無法è˜åˆ¥çš„åƒæ•¸ï¼š%s" @@ -9868,6 +9888,13 @@ msgstr "" "git merge-file [<é¸é …>] [-L <檔案1> [-L <åˆå§‹> [-L <åå—2>]]] <檔案1> <åˆå§‹æ–‡" "ä»¶> <檔案2>" +#: builtin/merge-file.c diff.c +msgid "" +"option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and " +"\"histogram\"" +msgstr "" +"diff-algorithm é¸é …有 \"myers\"ã€\"minimal\"ã€\"patience\" å’Œ \"histogram\"" + #: builtin/merge-file.c msgid "send results to standard output" msgstr "å°‡çµæžœå‚³é€åˆ°æ¨™æº–輸出" @@ -9896,6 +9923,14 @@ msgstr "如果è¡çªï¼Œä½¿ç”¨ä»–們的版本" msgid "for conflicts, use a union version" msgstr "如果è¡çªï¼Œä½¿ç”¨è¯åˆç‰ˆæœ¬" +#: builtin/merge-file.c diff.c +msgid "<algorithm>" +msgstr "<演算法>" + +#: builtin/merge-file.c diff.c +msgid "choose a diff algorithm" +msgstr "鏿“‡ä¸€å€‹å·®ç•°æ¼”算法" + #: builtin/merge-file.c msgid "for conflicts, use this marker size" msgstr "如果è¡çªï¼Œä½¿ç”¨æŒ‡å®šé•·åº¦çš„æ¨™è¨˜" @@ -10012,10 +10047,6 @@ msgstr "--trivial-merge 和其他所有é¸é …都ä¸ç›¸å®¹" msgid "unknown strategy option: -X%s" msgstr "未知的ç–ç•¥é¸é …:-X%s" -#: builtin/merge-tree.c -msgid "--merge-base is incompatible with --stdin" -msgstr "--merge-base 與 --stdin ä¸ç›¸å®¹" - #: builtin/merge-tree.c builtin/notes.c #, c-format msgid "malformed input line: '%s'." @@ -10174,7 +10205,7 @@ msgstr "'%s' 沒有指å‘一個æäº¤" msgid "Bad branch.%s.mergeoptions string: %s" msgstr "壞的 branch.%s.mergeoptions å—串:%s" -#: builtin/merge.c builtin/stash.c merge-recursive.c +#: builtin/merge.c merge-recursive.c msgid "Unable to write index." msgstr "ä¸èƒ½å¯«å…¥ç´¢å¼•。" @@ -10182,7 +10213,7 @@ msgstr "ä¸èƒ½å¯«å…¥ç´¢å¼•。" msgid "Not handling anything other than two heads merge." msgstr "未處ç†å…©å€‹é åˆä½µä¹‹å¤–的任何動作。" -#: builtin/merge.c t/helper/test-fast-rebase.c +#: builtin/merge.c #, c-format msgid "unable to write %s" msgstr "ä¸èƒ½å¯« %s" @@ -11170,6 +11201,11 @@ msgstr "ä¸ä¸€è‡´çš„差異計數" #: builtin/pack-objects.c #, c-format +msgid "invalid pack.allowPackReuse value: '%s'" +msgstr "無效的 pack.allowPackReuse 值:“%sâ€" + +#: builtin/pack-objects.c +#, c-format msgid "" "value of uploadpack.blobpackfileuri must be of the form '<object-hash> <pack-" "hash> <uri>' (got '%s')" @@ -11492,10 +11528,10 @@ msgstr "枚舉物件" #, c-format msgid "" "Total %<PRIu32> (delta %<PRIu32>), reused %<PRIu32> (delta %<PRIu32>), pack-" -"reused %<PRIu32>" +"reused %<PRIu32> (from %<PRIuMAX>)" msgstr "" "總共 %<PRIu32> (差異 %<PRIu32>),復用 %<PRIu32> (差異 %<PRIu32>),é‡ç”¨åŒ… " -"%<PRIu32>" +"%<PRIu32> (總共 %<PRIuMAX>)" #: builtin/pack-redundant.c msgid "" @@ -12574,7 +12610,7 @@ msgstr "沒有æ£åœ¨é€²è¡Œçš„é‡å®šåŸºåº•?" msgid "The --edit-todo action can only be used during interactive rebase." msgstr "動作 --edit-todo åªèƒ½ç”¨åœ¨äº’å‹•å¼é‡å®šåŸºåº•éŽç¨‹ä¸ã€‚" -#: builtin/rebase.c t/helper/test-fast-rebase.c +#: builtin/rebase.c msgid "Cannot read HEAD" msgstr "ä¸èƒ½è®€å– HEAD" @@ -12620,12 +12656,6 @@ msgstr "é–‹é—œ `C' 期望一個數å—值" #: builtin/rebase.c msgid "" -"apply options are incompatible with rebase.autoSquash. Consider adding --no-" -"autosquash" -msgstr "apply é¸é …與 rebase.autoSquash ä¸ç›¸å®¹ã€‚è«‹è€ƒæ…®åŠ ä¸Š --no-autosquash" - -#: builtin/rebase.c -msgid "" "apply options are incompatible with rebase.rebaseMerges. Consider adding --" "no-rebase-merges" msgstr "apply é¸é …與 rebase.rebaseMerges ä¸ç›¸å®¹ã€‚è«‹è€ƒæ…®åŠ ä¸Š --no-rebase-merges" @@ -13109,7 +13139,7 @@ msgid "" msgid_plural "" "Note: Some branches outside the refs/remotes/ hierarchy were not removed;\n" "to delete them, use:" -msgstr[0] "注æ„:ref/remotes 層級之外的一個分支未被移除。è¦åˆªé™¤å®ƒï¼Œä½¿ç”¨ï¼š" +msgstr[0] "注æ„:refs/remotes/ 層級之外的一個分支未被移除。è¦åˆªé™¤å®ƒï¼Œä½¿ç”¨ï¼š" #: builtin/remote.c #, c-format @@ -13838,6 +13868,86 @@ msgstr "--convert-graft-file ä¸å¸¶åƒæ•¸" msgid "only one pattern can be given with -l" msgstr "åªèƒ½ç‚º -l æä¾›ä¸€å€‹æ¨¡å¼" +#: builtin/replay.c +msgid "need some commits to replay" +msgstr "需è¦ä¸€äº›æäº¤æ‰èƒ½é‡æ”¾" + +#: builtin/replay.c +msgid "--onto and --advance are incompatible" +msgstr "--onto å’Œ --advance ä¸ç›¸å®¹" + +#: builtin/replay.c +msgid "all positive revisions given must be references" +msgstr "æä¾›çš„æ‰€æœ‰æ£å‘ä¿®è¨‚é›†å¿…é ˆç‚ºå¼•ç”¨" + +#: builtin/replay.c +msgid "argument to --advance must be a reference" +msgstr "傳入 --advance çš„å¼•æ•¸å¿…é ˆç‚ºå¼•ç”¨" + +#: builtin/replay.c +msgid "" +"cannot advance target with multiple sources because ordering would be ill-" +"defined" +msgstr "ç„¡æ³•ç”¨å¤šå€‹ä¾†æºæ¼”進目的地,以å…無法確定排åº" + +#: builtin/replay.c +msgid "" +"cannot implicitly determine whether this is an --advance or --onto operation" +msgstr "無法å‡è¨é€™æ˜¯ --advance 還是 --onto 動作" + +#: builtin/replay.c +msgid "" +"cannot advance target with multiple source branches because ordering would " +"be ill-defined" +msgstr "無法由多個來æºåˆ†æ”¯æ¼”進目的地,以å…無法確定排åº" + +#: builtin/replay.c +msgid "cannot implicitly determine correct base for --onto" +msgstr "無法å‡è¨ --onto çš„æ£ç¢ºåŸºåº•" + +#: builtin/replay.c +msgid "" +"(EXPERIMENTAL!) git replay ([--contained] --onto <newbase> | --advance " +"<branch>) <revision-range>..." +msgstr "" +"(實驗性功能ï¼ï¼‰git replay ([--contained] --onto <newbase> | --advance " +"<branch>) <revision-range>..." + +#: builtin/replay.c +msgid "make replay advance given branch" +msgstr "åœ¨æŒ‡å®šåˆ†æ”¯ä¸Šé€²è¡Œé‡æ”¾æ¼”進" + +#: builtin/replay.c +msgid "replay onto given commit" +msgstr "釿”¾åˆ°æŒ‡å®šæäº¤" + +#: builtin/replay.c +msgid "advance all branches contained in revision-range" +msgstr "演進所有包å«åœ¨ revision-range ä¸çš„分支" + +#: builtin/replay.c +msgid "option --onto or --advance is mandatory" +msgstr "å¿…é ˆå‚³å…¥ --onto 或 --advance é¸é …" + +#: builtin/replay.c +#, c-format +msgid "" +"some rev walking options will be overridden as '%s' bit in 'struct rev_info' " +"will be forced" +msgstr "å°‡è¦†å¯«éƒ¨åˆ†ä¿®è¨‚ç‰ˆéæ·é¸é …,強制使用 “struct rev_info†的 “%s†ä½å…ƒ" + +#: builtin/replay.c +msgid "error preparing revisions" +msgstr "無法準備修訂集" + +#: builtin/replay.c +msgid "replaying down to root commit is not supported yet!" +msgstr "å°šä¸æ”¯æ´é‡æ”¾åˆ°æ ¹æäº¤ï¼" + +#: builtin/replay.c +msgid "replaying merge commits is not supported yet!" +msgstr "å°šä¸æ”¯æ´é‡æ”¾åˆä½µæäº¤ï¼" + #: builtin/rerere.c msgid "" "git rerere [clear | forget <pathspec>... | diff | status | remaining | gc]" @@ -14100,18 +14210,6 @@ msgstr "--prefix éœ€è¦ 1 個引數" msgid "unknown mode for --abbrev-ref: %s" msgstr "--abbrev-ref çš„æ¨¡å¼æœªçŸ¥ï¼š%s" -#: builtin/rev-parse.c revision.c -msgid "--exclude-hidden cannot be used together with --branches" -msgstr "--exclude-hidden 無法與 --branches åŒæ™‚使用" - -#: builtin/rev-parse.c revision.c -msgid "--exclude-hidden cannot be used together with --tags" -msgstr "--exclude-hidden 無法與 --tags åŒæ™‚使用" - -#: builtin/rev-parse.c revision.c -msgid "--exclude-hidden cannot be used together with --remotes" -msgstr "--exclude-hidden 無法與 --remotes åŒæ™‚使用" - #: builtin/rev-parse.c setup.c msgid "this operation must be run in a work tree" msgstr "è©²å‹•ä½œå¿…é ˆåœ¨ä¸€å€‹å·¥ä½œå€ä¸åŸ·è¡Œ" @@ -14610,11 +14708,6 @@ msgstr "ä¸åˆ—å°çµæžœåˆ°æ¨™æº–輸出(例如與 --verify åƒæ•¸å…±ç”¨ï¼‰" msgid "show refs from stdin that aren't in local repository" msgstr "顯示從標準輸入ä¸è®€å…¥çš„ä¸åœ¨æœ¬æ©Ÿç‰ˆæœ¬åº«ä¸çš„引用" -#: builtin/show-ref.c -#, c-format -msgid "only one of '%s', '%s' or '%s' can be given" -msgstr "åªèƒ½å‚³å…¥ “%sâ€ã€â€œ%s†或 “%sâ€" - #: builtin/sparse-checkout.c msgid "" "git sparse-checkout (init | list | set | add | reapply | disable | check-" @@ -16389,14 +16482,14 @@ msgstr "沒有å¯èƒ½çš„來æºåˆ†æ”¯ï¼ŒæŽ¨æ¸¬ç‚º “--orphanâ€" #: builtin/worktree.c #, c-format msgid "" -"If you meant to create a worktree containing a new orphan branch\n" +"If you meant to create a worktree containing a new unborn branch\n" "(branch with no commits) for this repository, you can do so\n" "using the --orphan flag:\n" "\n" " git worktree add --orphan -b %s %s\n" msgstr "" "如果您是想è¦åœ¨é€™å€‹ç‰ˆæœ¬åº«å»ºç«‹ä¸€å€‹å·¥ä½œå€ï¼Œè£¡é¢åŒ…å«ä¸€å€‹\n" -"å¤ç«‹åˆ†æ”¯ï¼ˆå³æ²’有æäº¤çš„分支),å¯ä»¥ä½¿ç”¨ --orphan é”到\n" +"æœªèª•ç”Ÿåˆ†æ”¯ï¼ˆå³æ²’有æäº¤çš„分支),å¯ä»¥ä½¿ç”¨ --orphan é”到\n" "這個效果:\n" "\n" " git worktree add --orphan -b %s %s\n" @@ -16404,14 +16497,14 @@ msgstr "" #: builtin/worktree.c #, c-format msgid "" -"If you meant to create a worktree containing a new orphan branch\n" +"If you meant to create a worktree containing a new unborn branch\n" "(branch with no commits) for this repository, you can do so\n" "using the --orphan flag:\n" "\n" " git worktree add --orphan %s\n" msgstr "" "如果您是想è¦åœ¨é€™å€‹ç‰ˆæœ¬åº«å»ºç«‹ä¸€å€‹å·¥ä½œå€ï¼Œè£¡é¢åŒ…å«ä¸€å€‹\n" -"å¤ç«‹åˆ†æ”¯ï¼ˆå³æ²’有æäº¤çš„分支),å¯ä»¥ä½¿ç”¨ --orphan é”到\n" +"æœªèª•ç”Ÿåˆ†æ”¯ï¼ˆå³æ²’有æäº¤çš„分支),å¯ä»¥ä½¿ç”¨ --orphan é”到\n" "這個效果:\n" "\n" " git worktree add --orphan %s\n" @@ -16483,6 +16576,11 @@ msgstr "æ£åœ¨åˆå§‹åŒ–" #: builtin/worktree.c #, c-format +msgid "could not find created worktree '%s'" +msgstr "找ä¸åˆ°å»ºç«‹çš„工作å€ã€Œ%sã€" + +#: builtin/worktree.c +#, c-format msgid "Preparing worktree (new branch '%s')" msgstr "準備工作å€ï¼ˆæ–°åˆ†æ”¯ '%s')" @@ -16526,11 +16624,6 @@ msgstr "" "æ•…åœæ¢ã€‚使用 “add -f†先覆蓋或抓å–é 端" #: builtin/worktree.c -#, c-format -msgid "'%s' and '%s' cannot be used together" -msgstr "ç„¡æ³•åŒæ™‚使用 “%s†和 “%sâ€" - -#: builtin/worktree.c msgid "checkout <branch> even if already checked out in other worktree" msgstr "簽出 <分支>,å³ä½¿å·²ç¶“被簽出到其它工作å€" @@ -16543,8 +16636,8 @@ msgid "create or reset a branch" msgstr "建立或é‡è¨ä¸€å€‹åˆ†æ”¯" #: builtin/worktree.c -msgid "create unborn/orphaned branch" -msgstr "建立尚無內容(å¤ç«‹ï¼‰çš„分支" +msgid "create unborn branch" +msgstr "建立未誕生分支" #: builtin/worktree.c msgid "populate the new working tree" @@ -16573,12 +16666,8 @@ msgstr "「%sã€ã€ã€Œ%sã€å’Œã€Œ%sã€é¸é …ä¸å¾—åŒæ™‚使用" #: builtin/worktree.c #, c-format -msgid "options '%s', and '%s' cannot be used together" -msgstr "ç„¡æ³•åŒæ™‚使用 “%s†和 “%s†é¸é …" - -#: builtin/worktree.c -msgid "<commit-ish>" -msgstr "<æäº¤æŒ‡ç¤ºå…ƒ>" +msgid "option '%s' and commit-ish cannot be used together" +msgstr "“%s†é¸é …å’Œæäº¤è™Ÿä¸å¾—åŒæ™‚使用" #: builtin/worktree.c msgid "added with --lock" @@ -17367,6 +17456,10 @@ msgid "Create, list, delete refs to replace objects" msgstr "建立ã€åˆ—出ã€åˆªé™¤ç‰©ä»¶å–代引用" #: command-list.h +msgid "EXPERIMENTAL: Replay commits on a new base, works with bare repos too" +msgstr "å¯¦é©—æ€§åŠŸèƒ½ï¼šåœ¨æ–°çš„åŸºåº•é‡æ”¾æäº¤ï¼Œäº¦æ”¯æ´è£¸ç‰ˆæœ¬åº«" + +#: command-list.h msgid "Generates a summary of pending changes" msgstr "生æˆå¾…定更改的摘è¦" @@ -17684,6 +17777,37 @@ msgid "commit-graph file is too small" msgstr "æäº¤åœ–形檔案太å°" #: commit-graph.c +msgid "commit-graph oid fanout chunk is wrong size" +msgstr "æäº¤åœ–å½¢ OID 扇出å€å¡Šå¤§å°æœ‰èª¤" + +#: commit-graph.c +msgid "commit-graph fanout values out of order" +msgstr "æäº¤åœ–形扇出的數值失åº" + +#: commit-graph.c +msgid "commit-graph OID lookup chunk is the wrong size" +msgstr "æäº¤åœ–å½¢ OID 查詢å€å¡Šçš„大尿œ‰èª¤" + +#: commit-graph.c +msgid "commit-graph commit data chunk is wrong size" +msgstr "æäº¤åœ–形的æäº¤è³‡æ–™å€å¡Šå¤§å°æœ‰èª¤" + +#: commit-graph.c +msgid "commit-graph generations chunk is wrong size" +msgstr "æäº¤åœ–形的世代å€å¡Šå¤§å°æœ‰èª¤" + +#: commit-graph.c +msgid "commit-graph changed-path index chunk is too small" +msgstr "æäº¤åœ–形的更動路徑索引å€å¡ŠéŽå°" + +#: commit-graph.c +#, c-format +msgid "" +"ignoring too-small changed-path chunk (%<PRIuMAX> < %<PRIuMAX>) in commit-" +"graph file" +msgstr "忽略æäº¤åœ–形檔案ä¸éŽå°çš„æ›´å‹•路徑å€å¡Š (%<PRIuMAX> < %<PRIuMAX>)" + +#: commit-graph.c #, c-format msgid "commit-graph signature %X does not match signature %X" msgstr "æäº¤åœ–形簽å %X 和簽å %X ä¸ç¬¦åˆ" @@ -17701,7 +17825,19 @@ msgstr "æäº¤åœ–形雜湊版本 %X 和版本 %X ä¸ç¬¦åˆ" #: commit-graph.c #, c-format msgid "commit-graph file is too small to hold %u chunks" -msgstr "commit-graph 檔案ä¸å¤ 放置 %u 個å€å¡Š" +msgstr "æäº¤åœ–形檔案ä¸å¤ 放置 %u 個å€å¡Š" + +#: commit-graph.c +msgid "commit-graph required OID fanout chunk missing or corrupted" +msgstr "æäº¤åœ–形需è¦çš„ OID 扇出å€å¡Šéºå¤±æˆ–æå£ž" + +#: commit-graph.c +msgid "commit-graph required OID lookup chunk missing or corrupted" +msgstr "æäº¤åœ–形需è¦çš„ OID 查詢å€å¡Šéºå¤±æˆ–æå£ž" + +#: commit-graph.c +msgid "commit-graph required commit data chunk missing or corrupted" +msgstr "æäº¤åœ–形需è¦çš„æäº¤è³‡æ–™å€å¡Šéºå¤±æˆ–æå£ž" #: commit-graph.c msgid "commit-graph has no base graphs chunk" @@ -17721,9 +17857,13 @@ msgid "commit count in base graph too high: %<PRIuMAX>" msgstr "基礎圖 (base graph) ä¸çš„æäº¤æ•¸éŽå¤šï¼š%<PRIuMAX>" #: commit-graph.c +msgid "commit-graph chain file too small" +msgstr "æäº¤åœ–å½¢éˆæª”案éŽå°" + +#: commit-graph.c #, c-format msgid "invalid commit-graph chain: line '%s' not a hash" -msgstr "無效的æäº¤åœ–å½¢éˆï¼šè¡Œ '%s' 䏿˜¯ä¸€å€‹é›œæ¹Šå€¼" +msgstr "無效的æäº¤åœ–å½¢éˆï¼šã€Œ%sã€åˆ—䏿˜¯é›œæ¹Šå€¼" #: commit-graph.c msgid "unable to find all commit-graph files" @@ -17747,6 +17887,10 @@ msgid "commit-graph overflow generation data is too small" msgstr "æäº¤åœ–形的溢出世代資料éŽå°" #: commit-graph.c +msgid "commit-graph extra-edges pointer out of bounds" +msgstr "æäº¤åœ–形的延伸邊界指é‡è¶…出範åœ" + +#: commit-graph.c msgid "Loading known commits in commit graph" msgstr "æ£åœ¨è¼‰å…¥æäº¤åœ–ä¸çš„已知æäº¤" @@ -19120,6 +19264,11 @@ msgstr "color-moved-ws:allow-indentation-change ä¸èƒ½èˆ‡å…¶å®ƒç©ºç™½å—元模 msgid "Unknown value for 'diff.submodule' config variable: '%s'" msgstr "è¨å®šè®Šæ•¸ 'diff.submodule' 未知的å–值:'%s'" +#: diff.c transport.c +#, c-format +msgid "unknown value for config '%s': %s" +msgstr "è¨å®š '%s' çš„å–值未知:%s" + #: diff.c #, c-format msgid "" @@ -19214,13 +19363,6 @@ msgid "invalid mode '%s' in --color-moved-ws" msgstr "--color-moved-ws ä¸çš„ç„¡æ•ˆæ¨¡å¼ '%s'" #: diff.c -msgid "" -"option diff-algorithm accepts \"myers\", \"minimal\", \"patience\" and " -"\"histogram\"" -msgstr "" -"diff-algorithm é¸é …有 \"myers\"ã€\"minimal\"ã€\"patience\" å’Œ \"histogram\"" - -#: diff.c #, c-format msgid "invalid argument to %s" msgstr "%s çš„åƒæ•¸ç„¡æ•ˆ" @@ -19277,8 +19419,9 @@ msgid "output only the last line of --stat" msgstr "åªè¼¸å‡º --stat 的最後一行" #: diff.c -msgid "<param1,param2>..." -msgstr "<åƒæ•¸1,åƒæ•¸2>..." +#| msgid "<param1,param2>..." +msgid "<param1>,<param2>..." +msgstr "<param1>,<param2>..." #: diff.c msgid "" @@ -19290,8 +19433,8 @@ msgid "synonym for --dirstat=cumulative" msgstr "å’Œ --dirstat=cumulative åŒç¾©" #: diff.c -msgid "synonym for --dirstat=files,param1,param2..." -msgstr "是 --dirstat=files,param1,param2... çš„åŒç¾©è©ž" +msgid "synonym for --dirstat=files,<param1>,<param2>..." +msgstr "是 --dirstat=files,<param1>,<param2>... çš„åŒç¾©è©ž" #: diff.c msgid "warn if changes introduce conflict markers or whitespace errors" @@ -19514,14 +19657,6 @@ msgid "generate diff using the \"histogram diff\" algorithm" msgstr "使用 \"histogram diff\" 演算法生æˆå·®ç•°" #: diff.c -msgid "<algorithm>" -msgstr "<演算法>" - -#: diff.c -msgid "choose a diff algorithm" -msgstr "鏿“‡ä¸€å€‹å·®ç•°æ¼”算法" - -#: diff.c msgid "<text>" msgstr "<æ–‡å—>" @@ -20940,7 +21075,7 @@ msgstr "" #. conflict in a submodule. The first argument is the submodule #. name, and the second argument is the abbreviated id of the #. commit that needs to be merged. For example: -#. - go to submodule (mysubmodule), and either merge commit abc1234" +#. - go to submodule (mysubmodule), and either merge commit abc1234" #. #: merge-ort.c #, c-format @@ -21275,6 +21410,12 @@ msgid "multi-pack-index OID fanout is of the wrong size" msgstr "多包索引的物件 ID fanout 大å°éŒ¯èª¤" #: midx.c +#, c-format +msgid "" +"oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]" +msgstr "物件 ID 扇出無åºï¼šfanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]" + +#: midx.c msgid "multi-pack-index OID lookup chunk is the wrong size" msgstr "多包索引 OID 查詢å€å¡Šçš„大尿œ‰èª¤" @@ -21333,6 +21474,15 @@ msgid "bad pack-int-id: %u (%u total packs)" msgstr "錯的 pack-int-id:%u(共有 %u 個包)" #: midx.c +msgid "MIDX does not contain the BTMP chunk" +msgstr "MIDX æœªåŒ…å« BTMP å€å¡Š" + +#: midx.c +#, c-format +msgid "could not load bitmapped pack %<PRIu32>" +msgstr "無法載入ä½åœ–化 (bitmapped) çš„å°è£ %<PRIu32>" + +#: midx.c msgid "multi-pack-index stores a 64-bit offset, but off_t is too small" msgstr "多包索引儲å˜ä¸€å€‹64ä½ä½ç§»ï¼Œä½†æ˜¯ off_t 太å°" @@ -21440,12 +21590,6 @@ msgid "Looking for referenced packfiles" msgstr "æ£åœ¨å°‹æ‰¾å¼•用的 packfile" #: midx.c -#, c-format -msgid "" -"oid fanout out of order: fanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]" -msgstr "物件 ID 扇出無åºï¼šfanout[%d] = %<PRIx32> > %<PRIx32> = fanout[%d]" - -#: midx.c msgid "the midx contains no oid" msgstr "midx 沒有 oid" @@ -21820,7 +21964,7 @@ msgstr "%s [無效物件]" #. TRANSLATORS: This is a line of ambiguous commit #. object output. E.g.: #. * -#. "deadbeef commit 2021-01-01 - Some Commit Message" +#. "deadbeef commit 2021-01-01 - Some Commit Message" #. #: object-name.c #, c-format @@ -21830,7 +21974,7 @@ msgstr "%s æäº¤ %s - %s" #. TRANSLATORS: This is a line of ambiguous #. tag object output. E.g.: #. * -#. "deadbeef tag 2022-01-01 - Some Tag Message" +#. "deadbeef tag 2022-01-01 - Some Tag Message" #. * #. The second argument is the YYYY-MM-DD found #. in the tag. @@ -21847,7 +21991,7 @@ msgstr "%s 標籤 %s - %s" #. tag object output where we couldn't parse #. the tag itself. E.g.: #. * -#. "deadbeef [bad tag, could not parse it]" +#. "deadbeef [bad tag, could not parse it]" #. #: object-name.c #, c-format @@ -22075,6 +22219,10 @@ msgstr "多包ä½åœ–缺少需è¦çš„åå‘索引" msgid "could not open pack %s" msgstr "無法開啟å°åŒ… %s" +#: pack-bitmap.c t/helper/test-read-midx.c +msgid "could not determine MIDX preferred pack" +msgstr "無法確定 MIDX å好的å°è£" + #: pack-bitmap.c #, c-format msgid "preferred pack (%s) is invalid" @@ -22100,6 +22248,11 @@ msgstr "ewah ä½åœ–æå£žï¼šæäº¤ “%s†之ä½åœ–的標é éæˆªæ–·" #: pack-bitmap.c #, c-format +msgid "unable to load pack: '%s', disabling pack-reuse" +msgstr "無法載入「%sã€å°è£ï¼Œåœç”¨ pack-reuse" + +#: pack-bitmap.c +#, c-format msgid "object '%s' not found in type bitmaps" msgstr "在類型ä½åœ–ä¸ï¼Œæ‰¾ä¸åˆ°ã€Œ%sã€ç‰©ä»¶" @@ -22213,6 +22366,10 @@ msgstr "%<PRIu64> ä½ç½®çš„修訂版索引 (rev-index) 無效:%<PRIu32> != %<P msgid "multi-pack-index reverse-index chunk is the wrong size" msgstr "多包索引的åå‘索引å€å¡Šå¤§å°æœ‰èª¤" +#: pack-revindex.c +msgid "could not determine preferred pack" +msgstr "無法確定å好å°è£" + #: pack-write.c msgid "cannot both write and verify reverse index" msgstr "ç„¡æ³•åŒæ™‚寫入和驗è‰å€’排索引" @@ -22293,11 +22450,6 @@ msgstr "%s 期望一個éžè² 整數和一個å¯é¸çš„ k/m/g 後綴" #: parse-options.c #, c-format -msgid "%s is incompatible with %s" -msgstr "%s 與 %s ä¸ç›¸å®¹" - -#: parse-options.c -#, c-format msgid "ambiguous option: %s (could be --%s%s or --%s%s)" msgstr "有æ§ç¾©çš„é¸é …:%s(å¯ä»¥æ˜¯ --%s%s 或 --%s%s)" @@ -22687,11 +22839,6 @@ msgstr "ç„¡æ³•åœ¨ç´¢å¼•ä¸æ–°å¢ž '%s'" #: read-cache.c #, c-format -msgid "unable to stat '%s'" -msgstr "ç„¡æ³•å° %s 執行 stat" - -#: read-cache.c -#, c-format msgid "'%s' appears as both a file and as a directory" msgstr "'%s' çœ‹èµ·ä¾†æ—¢æ˜¯æª”æ¡ˆåˆæ˜¯ç›®éŒ„" @@ -23364,17 +23511,12 @@ msgstr "'%s' å·²å˜åœ¨ï¼Œç„¡æ³•建立 '%s'" msgid "cannot process '%s' and '%s' at the same time" msgstr "ç„¡æ³•åŒæ™‚è™•ç† '%s' å’Œ '%s'" -#: refs/files-backend.c -#, c-format -msgid "could not remove reference %s" -msgstr "無法刪除引用 %s" - -#: refs/files-backend.c refs/packed-backend.c +#: refs.c #, c-format msgid "could not delete reference %s: %s" msgstr "無法刪除引用 %s:%s" -#: refs/files-backend.c refs/packed-backend.c +#: refs.c #, c-format msgid "could not delete references: %s" msgstr "無法刪除引用:%s" @@ -24532,7 +24674,7 @@ msgstr "無效的作者身分 '%s'" msgid "corrupt author: missing date information" msgstr "作者資訊æå£žï¼šç¼ºå°‘日期資訊" -#: sequencer.c t/helper/test-fast-rebase.c +#: sequencer.c #, c-format msgid "could not update %s" msgstr "ä¸èƒ½æ›´æ–° %s" @@ -25024,6 +25166,10 @@ msgid "Autostash exists; creating a new stash entry." msgstr "已有自動貯å˜ï¼›å»ºç«‹æ–°è²¯å˜é …目。" #: sequencer.c +msgid "autostash reference is a symref" +msgstr "autostash 引用是符號引用" + +#: sequencer.c msgid "could not detach HEAD" msgstr "ä¸èƒ½åˆ†é›¢é–‹é 指標" @@ -25397,6 +25543,11 @@ msgstr "無效的åˆå§‹åˆ†æ”¯å稱:'%s'" #: setup.c #, c-format +msgid "re-init: ignored --initial-branch=%s" +msgstr "re-init: 忽略 --initial-branch=%s" + +#: setup.c +#, c-format msgid "unable to handle file type %d" msgstr "ä¸èƒ½è™•ç† %d 類型的檔案" @@ -25410,14 +25561,14 @@ msgid "attempt to reinitialize repository with different hash" msgstr "嘗試以ä¸åŒçš„é›œæ¹Šå€¼é‡æ–°åˆå§‹åŒ–版本庫" #: setup.c -#, c-format -msgid "%s already exists" -msgstr "%s 已經å˜åœ¨" +msgid "" +"attempt to reinitialize repository with different reference storage format" +msgstr "嘗試以ä¸åŒçš„å¼•ç”¨å„²å˜æ ¼å¼é‡æ–°åˆå§‹åŒ–版本庫" #: setup.c #, c-format -msgid "re-init: ignored --initial-branch=%s" -msgstr "re-init: 忽略 --initial-branch=%s" +msgid "%s already exists" +msgstr "%s 已經å˜åœ¨" #: setup.c #, c-format @@ -25733,14 +25884,6 @@ msgstr "æ¯æ¬¡è¿ä»£å‰æ¸…é™¤å¿«å–æ¨¹ç‹€ç‰©ä»¶" msgid "number of entries in the cache tree to invalidate (default 0)" msgstr "åœ¨å¿«å–æ¨¹ç‹€ç‰©ä»¶ä¸ï¼Œè¦ä½¿å¤±æ•ˆçš„é …ç›®æ•¸é‡ï¼ˆé è¨å€¼ç‚º 0)" -#: t/helper/test-fast-rebase.c -msgid "unhandled options" -msgstr "未處ç†é¸é …" - -#: t/helper/test-fast-rebase.c -msgid "error preparing revisions" -msgstr "準備修訂版本時發生錯誤" - #: t/helper/test-reach.c #, c-format msgid "commit %s is not marked reachable" @@ -25934,10 +26077,6 @@ msgstr "å”å®šä¸æ”¯æ´è¨å®šé 端æœå‹™è·¯å¾‘" msgid "invalid remote service path" msgstr "無效的é 端æœå‹™è·¯å¾‘" -#: transport-helper.c transport.c -msgid "operation not supported by protocol" -msgstr "å”å®šä¸æ”¯æ´è©²å‹•作" - #: transport-helper.c #, c-format msgid "can't connect to subservice %s" @@ -26103,11 +26242,6 @@ msgstr "å”定 v2 的支æ´å°šæœªå¯¦ç¾" #: transport.c #, c-format -msgid "unknown value for config '%s': %s" -msgstr "è¨å®š '%s' çš„å–值未知:%s" - -#: transport.c -#, c-format msgid "transport '%s' not allowed" msgstr "傳輸 '%s' ä¸å…許" @@ -26165,6 +26299,10 @@ msgstr "通訊å”å®šä¸æ”¯æ´ bundle-uri 動作" msgid "could not retrieve server-advertised bundle-uri list" msgstr "無法å–得伺æœå™¨å…¬ä½ˆçš„ bundle-uri 清單" +#: transport.c +msgid "operation not supported by protocol" +msgstr "å”å®šä¸æ”¯æ´è©²å‹•作" + #: tree-walk.c msgid "too-short tree object" msgstr "太çŸçš„æ¨¹ç‹€ç‰©ä»¶" @@ -27193,6 +27331,11 @@ msgstr "å¦å¤–,您的索引ä¸åŒ…嫿œªæäº¤çš„變更。" msgid "cannot %s: Your index contains uncommitted changes." msgstr "ä¸èƒ½%s:您的索引ä¸åŒ…嫿œªæäº¤çš„變更。" +#: xdiff-interface.c +#, c-format +msgid "unknown style '%s' given for '%s'" +msgstr "給予「%2$sã€çš„「%1$sã€æ¨£å¼æœªçŸ¥" + #: git-merge-octopus.sh git-merge-resolve.sh msgid "" "Error: Your local changes to the following files would be overwritten by " @@ -27649,3 +27792,55 @@ msgstr "ç•¥éŽ %s å«å‚™ä»½å¾Œç¶´ '%s'。\n" #, perl-format msgid "Do you really want to send %s? [y|N]: " msgstr "您真的è¦å‚³é€ %s?[y|N]: " + +#~ msgid "-x and -X cannot be used together" +#~ msgstr "-x å’Œ -X ä¸èƒ½åŒæ™‚使用" + +#~ msgid "" +#~ "--bundle-uri is incompatible with --depth, --shallow-since, and --shallow-" +#~ "exclude" +#~ msgstr "" +#~ "--bundle-uri 與 --depthã€--shallow-since å’Œ --shallow-exclude ä¸ç›¸å®¹" + +#~ msgid "--merge-base is incompatible with --stdin" +#~ msgstr "--merge-base 與 --stdin ä¸ç›¸å®¹" + +#~ msgid "" +#~ "apply options are incompatible with rebase.autoSquash. Consider adding --" +#~ "no-autosquash" +#~ msgstr "apply é¸é …與 rebase.autoSquash ä¸ç›¸å®¹ã€‚è«‹è€ƒæ…®åŠ ä¸Š --no-autosquash" + +#~ msgid "--exclude-hidden cannot be used together with --branches" +#~ msgstr "--exclude-hidden 無法與 --branches åŒæ™‚使用" + +#~ msgid "--exclude-hidden cannot be used together with --tags" +#~ msgstr "--exclude-hidden 無法與 --tags åŒæ™‚使用" + +#~ msgid "--exclude-hidden cannot be used together with --remotes" +#~ msgstr "--exclude-hidden 無法與 --remotes åŒæ™‚使用" + +#, c-format +#~ msgid "only one of '%s', '%s' or '%s' can be given" +#~ msgstr "åªèƒ½å‚³å…¥ “%sâ€ã€â€œ%s†或 “%sâ€" + +#, c-format +#~ msgid "'%s' and '%s' cannot be used together" +#~ msgstr "ç„¡æ³•åŒæ™‚使用 “%s†和 “%sâ€" + +#, c-format +#~ msgid "options '%s', and '%s' cannot be used together" +#~ msgstr "ç„¡æ³•åŒæ™‚使用 “%s†和 “%s†é¸é …" + +#~ msgid "<commit-ish>" +#~ msgstr "<æäº¤æŒ‡ç¤ºå…ƒ>" + +#, c-format +#~ msgid "%s is incompatible with %s" +#~ msgstr "%s 與 %s ä¸ç›¸å®¹" + +#, c-format +#~ msgid "could not remove reference %s" +#~ msgstr "無法刪除引用 %s" + +#~ msgid "unhandled options" +#~ msgstr "未處ç†é¸é …" diff --git a/reachable.c b/reachable.c index f29b06a5d0..3b85add243 100644 --- a/reachable.c +++ b/reachable.c @@ -17,6 +17,7 @@ #include "pack-mtimes.h" #include "config.h" #include "run-command.h" +#include "sequencer.h" struct connectivity_progress { struct progress *progress; @@ -30,6 +31,52 @@ static void update_progress(struct connectivity_progress *cp) display_progress(cp->progress, cp->count); } +static void add_one_file(const char *path, struct rev_info *revs) +{ + struct strbuf buf = STRBUF_INIT; + struct object_id oid; + struct object *object; + + if (!read_oneliner(&buf, path, READ_ONELINER_SKIP_IF_EMPTY)) { + strbuf_release(&buf); + return; + } + strbuf_trim(&buf); + if (!get_oid_hex(buf.buf, &oid)) { + object = parse_object_or_die(&oid, buf.buf); + add_pending_object(revs, object, ""); + } + strbuf_release(&buf); +} + +/* Mark objects recorded in rebase state files as reachable. */ +static void add_rebase_files(struct rev_info *revs) +{ + struct strbuf buf = STRBUF_INIT; + size_t len; + const char *path[] = { + "rebase-apply/autostash", + "rebase-apply/orig-head", + "rebase-merge/autostash", + "rebase-merge/orig-head", + }; + struct worktree **worktrees = get_worktrees(); + + for (struct worktree **wt = worktrees; *wt; wt++) { + strbuf_reset(&buf); + strbuf_addstr(&buf, get_worktree_git_dir(*wt)); + strbuf_complete(&buf, '/'); + len = buf.len; + for (size_t i = 0; i < ARRAY_SIZE(path); i++) { + strbuf_setlen(&buf, len); + strbuf_addstr(&buf, path[i]); + add_one_file(buf.buf, revs); + } + } + strbuf_release(&buf); + free_worktrees(worktrees); +} + static int add_one_ref(const char *path, const struct object_id *oid, int flag, void *cb_data) { @@ -322,6 +369,9 @@ void mark_reachable_objects(struct rev_info *revs, int mark_reflog, head_ref(add_one_ref, revs); other_head_refs(add_one_ref, revs); + /* rebase autostash and orig-head */ + add_rebase_files(revs); + /* Add all reflog info */ if (mark_reflog) add_reflogs_to_pending(revs, 0); diff --git a/ref-filter.c b/ref-filter.c index 46da883096..0ec29f7385 100644 --- a/ref-filter.c +++ b/ref-filter.c @@ -1611,6 +1611,12 @@ static void grab_date(const char *buf, struct atom_value *v, const char *atomnam if (formatp) { formatp++; parse_date_format(formatp, &date_mode); + + /* + * If this is a sort field and a format was specified, we'll + * want to compare formatted date by string value. + */ + v->atom->type = FIELD_STR; } if (!eoemail) @@ -1080,55 +1080,40 @@ static int read_ref_at_ent(struct object_id *ooid, struct object_id *noid, const char *message, void *cb_data) { struct read_ref_at_cb *cb = cb_data; - int reached_count; cb->tz = tz; cb->date = timestamp; - /* - * It is not possible for cb->cnt == 0 on the first iteration because - * that special case is handled in read_ref_at(). - */ - if (cb->cnt > 0) - cb->cnt--; - reached_count = cb->cnt == 0 && !is_null_oid(ooid); - if (timestamp <= cb->at_time || reached_count) { + if (timestamp <= cb->at_time || cb->cnt == 0) { set_read_ref_cutoffs(cb, timestamp, tz, message); /* * we have not yet updated cb->[n|o]oid so they still * hold the values for the previous record. */ - if (!is_null_oid(&cb->ooid) && !oideq(&cb->ooid, noid)) - warning(_("log for ref %s has gap after %s"), + if (!is_null_oid(&cb->ooid)) { + oidcpy(cb->oid, noid); + if (!oideq(&cb->ooid, noid)) + warning(_("log for ref %s has gap after %s"), cb->refname, show_date(cb->date, cb->tz, DATE_MODE(RFC2822))); - if (reached_count) - oidcpy(cb->oid, ooid); - else if (!is_null_oid(&cb->ooid) || cb->date == cb->at_time) + } + else if (cb->date == cb->at_time) oidcpy(cb->oid, noid); else if (!oideq(noid, cb->oid)) warning(_("log for ref %s unexpectedly ended on %s"), cb->refname, show_date(cb->date, cb->tz, DATE_MODE(RFC2822))); + cb->reccnt++; + oidcpy(&cb->ooid, ooid); + oidcpy(&cb->noid, noid); cb->found_it = 1; + return 1; } cb->reccnt++; oidcpy(&cb->ooid, ooid); oidcpy(&cb->noid, noid); - return cb->found_it; -} - -static int read_ref_at_ent_newest(struct object_id *ooid UNUSED, - struct object_id *noid, - const char *email UNUSED, - timestamp_t timestamp, int tz, - const char *message, void *cb_data) -{ - struct read_ref_at_cb *cb = cb_data; - - set_read_ref_cutoffs(cb, timestamp, tz, message); - oidcpy(cb->oid, noid); - /* We just want the first entry */ - return 1; + if (cb->cnt > 0) + cb->cnt--; + return 0; } static int read_ref_at_ent_oldest(struct object_id *ooid, struct object_id *noid, @@ -1140,7 +1125,7 @@ static int read_ref_at_ent_oldest(struct object_id *ooid, struct object_id *noid set_read_ref_cutoffs(cb, timestamp, tz, message); oidcpy(cb->oid, ooid); - if (is_null_oid(cb->oid)) + if (cb->at_time && is_null_oid(cb->oid)) oidcpy(cb->oid, noid); /* We just want the first entry */ return 1; @@ -1163,14 +1148,24 @@ int read_ref_at(struct ref_store *refs, const char *refname, cb.cutoff_cnt = cutoff_cnt; cb.oid = oid; - if (cb.cnt == 0) { - refs_for_each_reflog_ent_reverse(refs, refname, read_ref_at_ent_newest, &cb); - return 0; - } - refs_for_each_reflog_ent_reverse(refs, refname, read_ref_at_ent, &cb); if (!cb.reccnt) { + if (cnt == 0) { + /* + * The caller asked for ref@{0}, and we had no entries. + * It's a bit subtle, but in practice all callers have + * prepped the "oid" field with the current value of + * the ref, which is the most reasonable fallback. + * + * We'll put dummy values into the out-parameters (so + * they're not just uninitialized garbage), and the + * caller can take our return value as a hint that + * we did not find any such reflog. + */ + set_read_ref_cutoffs(&cb, 0, 0, "empty reflog"); + return 1; + } if (flags & GET_OID_QUIETLY) exit(128); else @@ -1635,10 +1630,6 @@ struct ref_iterator *refs_ref_iterator_begin( if (trim) iter = prefix_ref_iterator_begin(iter, "", trim); - /* Sanity check for subclasses: */ - if (!iter->ordered) - BUG("reference iterator is not ordered"); - return iter; } @@ -2564,18 +2555,33 @@ cleanup: return ret; } -int refs_for_each_reflog(struct ref_store *refs, each_ref_fn fn, void *cb_data) +struct do_for_each_reflog_help { + each_reflog_fn *fn; + void *cb_data; +}; + +static int do_for_each_reflog_helper(struct repository *r UNUSED, + const char *refname, + const struct object_id *oid UNUSED, + int flags, + void *cb_data) +{ + struct do_for_each_reflog_help *hp = cb_data; + return hp->fn(refname, hp->cb_data); +} + +int refs_for_each_reflog(struct ref_store *refs, each_reflog_fn fn, void *cb_data) { struct ref_iterator *iter; - struct do_for_each_ref_help hp = { fn, cb_data }; + struct do_for_each_reflog_help hp = { fn, cb_data }; iter = refs->be->reflog_iterator_begin(refs); return do_for_each_repo_ref_iterator(the_repository, iter, - do_for_each_ref_helper, &hp); + do_for_each_reflog_helper, &hp); } -int for_each_reflog(each_ref_fn fn, void *cb_data) +int for_each_reflog(each_reflog_fn fn, void *cb_data) { return refs_for_each_reflog(get_main_ref_store(the_repository), fn, cb_data); } @@ -446,7 +446,20 @@ int refs_create_reflog(struct ref_store *refs, const char *refname, struct strbuf *err); int safe_create_reflog(const char *refname, struct strbuf *err); -/** Reads log for the value of ref during at_time. **/ +/** + * Reads log for the value of ref during at_time (in which case "cnt" should be + * negative) or the reflog "cnt" entries from the top (in which case "at_time" + * should be 0). + * + * If we found the reflog entry in question, returns 0 (and details of the + * entry can be found in the out-parameters). + * + * If we ran out of reflog entries, the out-parameters are filled with the + * details of the oldest entry we did find, and the function returns 1. Note + * that there is one important special case here! If the reflog was empty + * and the caller asked for the 0-th cnt, we will return "1" but leave the + * "oid" field untouched. + **/ int read_ref_at(struct ref_store *refs, const char *refname, unsigned int flags, timestamp_t at_time, int cnt, @@ -541,11 +554,18 @@ int for_each_reflog_ent(const char *refname, each_reflog_ent_fn fn, void *cb_dat int for_each_reflog_ent_reverse(const char *refname, each_reflog_ent_fn fn, void *cb_data); /* + * The signature for the callback function for the {refs_,}for_each_reflog() + * functions below. The memory pointed to by the refname argument is only + * guaranteed to be valid for the duration of a single callback invocation. + */ +typedef int each_reflog_fn(const char *refname, void *cb_data); + +/* * Calls the specified function for each reflog file until it returns nonzero, * and returns the value. Reflog file order is unspecified. */ -int refs_for_each_reflog(struct ref_store *refs, each_ref_fn fn, void *cb_data); -int for_each_reflog(each_ref_fn fn, void *cb_data); +int refs_for_each_reflog(struct ref_store *refs, each_reflog_fn fn, void *cb_data); +int for_each_reflog(each_reflog_fn fn, void *cb_data); #define REFNAME_ALLOW_ONELEVEL 1 #define REFNAME_REFSPEC_PATTERN 2 diff --git a/refs/debug.c b/refs/debug.c index 634681ca44..c7531b17f0 100644 --- a/refs/debug.c +++ b/refs/debug.c @@ -181,7 +181,6 @@ static int debug_ref_iterator_advance(struct ref_iterator *ref_iterator) trace_printf_key(&trace_refs, "iterator_advance: %s (0)\n", diter->iter->refname); - diter->base.ordered = diter->iter->ordered; diter->base.refname = diter->iter->refname; diter->base.oid = diter->iter->oid; diter->base.flags = diter->iter->flags; @@ -222,7 +221,7 @@ debug_ref_iterator_begin(struct ref_store *ref_store, const char *prefix, drefs->refs->be->iterator_begin(drefs->refs, prefix, exclude_patterns, flags); struct debug_ref_iterator *diter = xcalloc(1, sizeof(*diter)); - base_ref_iterator_init(&diter->base, &debug_ref_iterator_vtable, 1); + base_ref_iterator_init(&diter->base, &debug_ref_iterator_vtable); diter->iter = res; trace_printf_key(&trace_refs, "ref_iterator_begin: \"%s\" (0x%x)\n", prefix, flags); diff --git a/refs/files-backend.c b/refs/files-backend.c index 9c1c42fe52..a098d14ea0 100644 --- a/refs/files-backend.c +++ b/refs/files-backend.c @@ -938,8 +938,7 @@ static struct ref_iterator *files_ref_iterator_begin( CALLOC_ARRAY(iter, 1); ref_iterator = &iter->base; - base_ref_iterator_init(ref_iterator, &files_ref_iterator_vtable, - overlay_iter->ordered); + base_ref_iterator_init(ref_iterator, &files_ref_iterator_vtable); iter->iter0 = overlay_iter; iter->repo = ref_store->repo; iter->flags = flags; @@ -2175,10 +2174,8 @@ static int files_for_each_reflog_ent(struct ref_store *ref_store, struct files_reflog_iterator { struct ref_iterator base; - struct ref_store *ref_store; struct dir_iterator *dir_iterator; - struct object_id oid; }; static int files_reflog_iterator_advance(struct ref_iterator *ref_iterator) @@ -2189,25 +2186,13 @@ static int files_reflog_iterator_advance(struct ref_iterator *ref_iterator) int ok; while ((ok = dir_iterator_advance(diter)) == ITER_OK) { - int flags; - if (!S_ISREG(diter->st.st_mode)) continue; - if (diter->basename[0] == '.') - continue; - if (ends_with(diter->basename, ".lock")) + if (check_refname_format(diter->basename, + REFNAME_ALLOW_ONELEVEL)) continue; - if (!refs_resolve_ref_unsafe(iter->ref_store, - diter->relative_path, 0, - &iter->oid, &flags)) { - error("bad ref for %s", diter->path.buf); - continue; - } - iter->base.refname = diter->relative_path; - iter->base.oid = &iter->oid; - iter->base.flags = flags; return ITER_OK; } @@ -2252,7 +2237,7 @@ static struct ref_iterator *reflog_iterator_begin(struct ref_store *ref_store, strbuf_addf(&sb, "%s/logs", gitdir); - diter = dir_iterator_begin(sb.buf, 0); + diter = dir_iterator_begin(sb.buf, DIR_ITERATOR_SORTED); if (!diter) { strbuf_release(&sb); return empty_ref_iterator_begin(); @@ -2261,7 +2246,7 @@ static struct ref_iterator *reflog_iterator_begin(struct ref_store *ref_store, CALLOC_ARRAY(iter, 1); ref_iterator = &iter->base; - base_ref_iterator_init(ref_iterator, &files_reflog_iterator_vtable, 0); + base_ref_iterator_init(ref_iterator, &files_reflog_iterator_vtable); iter->dir_iterator = diter; iter->ref_store = ref_store; strbuf_release(&sb); @@ -2269,32 +2254,6 @@ static struct ref_iterator *reflog_iterator_begin(struct ref_store *ref_store, return ref_iterator; } -static enum iterator_selection reflog_iterator_select( - struct ref_iterator *iter_worktree, - struct ref_iterator *iter_common, - void *cb_data UNUSED) -{ - if (iter_worktree) { - /* - * We're a bit loose here. We probably should ignore - * common refs if they are accidentally added as - * per-worktree refs. - */ - return ITER_SELECT_0; - } else if (iter_common) { - if (parse_worktree_ref(iter_common->refname, NULL, NULL, - NULL) == REF_WORKTREE_SHARED) - return ITER_SELECT_1; - - /* - * The main ref store may contain main worktree's - * per-worktree refs, which should be ignored - */ - return ITER_SKIP_1; - } else - return ITER_DONE; -} - static struct ref_iterator *files_reflog_iterator_begin(struct ref_store *ref_store) { struct files_ref_store *refs = @@ -2305,9 +2264,9 @@ static struct ref_iterator *files_reflog_iterator_begin(struct ref_store *ref_st return reflog_iterator_begin(ref_store, refs->gitcommondir); } else { return merge_ref_iterator_begin( - 0, reflog_iterator_begin(ref_store, refs->base.gitdir), + reflog_iterator_begin(ref_store, refs->base.gitdir), reflog_iterator_begin(ref_store, refs->gitcommondir), - reflog_iterator_select, refs); + ref_iterator_select, refs); } } diff --git a/refs/iterator.c b/refs/iterator.c index 6b680f610e..9db8b056d5 100644 --- a/refs/iterator.c +++ b/refs/iterator.c @@ -25,11 +25,9 @@ int ref_iterator_abort(struct ref_iterator *ref_iterator) } void base_ref_iterator_init(struct ref_iterator *iter, - struct ref_iterator_vtable *vtable, - int ordered) + struct ref_iterator_vtable *vtable) { iter->vtable = vtable; - iter->ordered = !!ordered; iter->refname = NULL; iter->oid = NULL; iter->flags = 0; @@ -74,7 +72,7 @@ struct ref_iterator *empty_ref_iterator_begin(void) struct empty_ref_iterator *iter = xcalloc(1, sizeof(*iter)); struct ref_iterator *ref_iterator = &iter->base; - base_ref_iterator_init(ref_iterator, &empty_ref_iterator_vtable, 1); + base_ref_iterator_init(ref_iterator, &empty_ref_iterator_vtable); return ref_iterator; } @@ -98,6 +96,49 @@ struct merge_ref_iterator { struct ref_iterator **current; }; +enum iterator_selection ref_iterator_select(struct ref_iterator *iter_worktree, + struct ref_iterator *iter_common, + void *cb_data UNUSED) +{ + if (iter_worktree && !iter_common) { + /* + * Return the worktree ref if there are no more common refs. + */ + return ITER_SELECT_0; + } else if (iter_common) { + /* + * In case we have pending worktree and common refs we need to + * yield them based on their lexicographical order. Worktree + * refs that have the same name as common refs shadow the + * latter. + */ + if (iter_worktree) { + int cmp = strcmp(iter_worktree->refname, + iter_common->refname); + if (cmp < 0) + return ITER_SELECT_0; + else if (!cmp) + return ITER_SELECT_0_SKIP_1; + } + + /* + * We now know that the lexicographically-next ref is a common + * ref. When the common ref is a shared one we return it. + */ + if (parse_worktree_ref(iter_common->refname, NULL, NULL, + NULL) == REF_WORKTREE_SHARED) + return ITER_SELECT_1; + + /* + * Otherwise, if the common ref is a per-worktree ref we skip + * it because it would belong to the main worktree, not ours. + */ + return ITER_SKIP_1; + } else { + return ITER_DONE; + } +} + static int merge_ref_iterator_advance(struct ref_iterator *ref_iterator) { struct merge_ref_iterator *iter = @@ -207,7 +248,6 @@ static struct ref_iterator_vtable merge_ref_iterator_vtable = { }; struct ref_iterator *merge_ref_iterator_begin( - int ordered, struct ref_iterator *iter0, struct ref_iterator *iter1, ref_iterator_select_fn *select, void *cb_data) { @@ -222,7 +262,7 @@ struct ref_iterator *merge_ref_iterator_begin( * references through only if they exist in both iterators. */ - base_ref_iterator_init(ref_iterator, &merge_ref_iterator_vtable, ordered); + base_ref_iterator_init(ref_iterator, &merge_ref_iterator_vtable); iter->iter0 = iter0; iter->iter1 = iter1; iter->select = select; @@ -271,12 +311,9 @@ struct ref_iterator *overlay_ref_iterator_begin( } else if (is_empty_ref_iterator(back)) { ref_iterator_abort(back); return front; - } else if (!front->ordered || !back->ordered) { - BUG("overlay_ref_iterator requires ordered inputs"); } - return merge_ref_iterator_begin(1, front, back, - overlay_iterator_select, NULL); + return merge_ref_iterator_begin(front, back, overlay_iterator_select, NULL); } struct prefix_ref_iterator { @@ -315,16 +352,12 @@ static int prefix_ref_iterator_advance(struct ref_iterator *ref_iterator) if (cmp > 0) { /* - * If the source iterator is ordered, then we + * As the source iterator is ordered, we * can stop the iteration as soon as we see a * refname that comes after the prefix: */ - if (iter->iter0->ordered) { - ok = ref_iterator_abort(iter->iter0); - break; - } else { - continue; - } + ok = ref_iterator_abort(iter->iter0); + break; } if (iter->trim) { @@ -396,7 +429,7 @@ struct ref_iterator *prefix_ref_iterator_begin(struct ref_iterator *iter0, CALLOC_ARRAY(iter, 1); ref_iterator = &iter->base; - base_ref_iterator_init(ref_iterator, &prefix_ref_iterator_vtable, iter0->ordered); + base_ref_iterator_init(ref_iterator, &prefix_ref_iterator_vtable); iter->iter0 = iter0; iter->prefix = xstrdup(prefix); diff --git a/refs/packed-backend.c b/refs/packed-backend.c index a499a91c7e..4e826c05ff 100644 --- a/refs/packed-backend.c +++ b/refs/packed-backend.c @@ -1111,7 +1111,7 @@ static struct ref_iterator *packed_ref_iterator_begin( CALLOC_ARRAY(iter, 1); ref_iterator = &iter->base; - base_ref_iterator_init(ref_iterator, &packed_ref_iterator_vtable, 1); + base_ref_iterator_init(ref_iterator, &packed_ref_iterator_vtable); if (exclude_patterns) populate_excluded_jump_list(iter, snapshot, exclude_patterns); diff --git a/refs/ref-cache.c b/refs/ref-cache.c index a372a00941..9f9797209a 100644 --- a/refs/ref-cache.c +++ b/refs/ref-cache.c @@ -486,7 +486,7 @@ struct ref_iterator *cache_ref_iterator_begin(struct ref_cache *cache, CALLOC_ARRAY(iter, 1); ref_iterator = &iter->base; - base_ref_iterator_init(ref_iterator, &cache_ref_iterator_vtable, 1); + base_ref_iterator_init(ref_iterator, &cache_ref_iterator_vtable); ALLOC_GROW(iter->levels, 10, iter->levels_alloc); iter->levels_nr = 1; diff --git a/refs/refs-internal.h b/refs/refs-internal.h index 73a8fa18ad..56641aa57a 100644 --- a/refs/refs-internal.h +++ b/refs/refs-internal.h @@ -318,13 +318,6 @@ enum do_for_each_ref_flags { */ struct ref_iterator { struct ref_iterator_vtable *vtable; - - /* - * Does this `ref_iterator` iterate over references in order - * by refname? - */ - unsigned int ordered : 1; - const char *refname; const struct object_id *oid; unsigned int flags; @@ -393,14 +386,21 @@ typedef enum iterator_selection ref_iterator_select_fn( void *cb_data); /* + * An implementation of ref_iterator_select_fn that merges worktree and common + * refs. Per-worktree refs from the common iterator are ignored, worktree refs + * override common refs. Refs are selected lexicographically. + */ +enum iterator_selection ref_iterator_select(struct ref_iterator *iter_worktree, + struct ref_iterator *iter_common, + void *cb_data); + +/* * Iterate over the entries from iter0 and iter1, with the values * interleaved as directed by the select function. The iterator takes * ownership of iter0 and iter1 and frees them when the iteration is - * over. A derived class should set `ordered` to 1 or 0 based on - * whether it generates its output in order by reference name. + * over. */ struct ref_iterator *merge_ref_iterator_begin( - int ordered, struct ref_iterator *iter0, struct ref_iterator *iter1, ref_iterator_select_fn *select, void *cb_data); @@ -429,8 +429,6 @@ struct ref_iterator *overlay_ref_iterator_begin( * As an convenience to callers, if prefix is the empty string and * trim is zero, this function returns iter0 directly, without * wrapping it. - * - * The resulting ref_iterator is ordered if iter0 is. */ struct ref_iterator *prefix_ref_iterator_begin(struct ref_iterator *iter0, const char *prefix, @@ -441,14 +439,11 @@ struct ref_iterator *prefix_ref_iterator_begin(struct ref_iterator *iter0, /* * Base class constructor for ref_iterators. Initialize the * ref_iterator part of iter, setting its vtable pointer as specified. - * `ordered` should be set to 1 if the iterator will iterate over - * references in order by refname; otherwise it should be set to 0. * This is meant to be called only by the initializers of derived * classes. */ void base_ref_iterator_init(struct ref_iterator *iter, - struct ref_iterator_vtable *vtable, - int ordered); + struct ref_iterator_vtable *vtable); /* * Base class destructor for ref_iterators. Destroy the ref_iterator diff --git a/refs/reftable-backend.c b/refs/reftable-backend.c index c23a516ac2..eaa82967ee 100644 --- a/refs/reftable-backend.c +++ b/refs/reftable-backend.c @@ -482,7 +482,7 @@ static struct reftable_ref_iterator *ref_iterator_for_stack(struct reftable_ref_ int ret; iter = xcalloc(1, sizeof(*iter)); - base_ref_iterator_init(&iter->base, &reftable_ref_iterator_vtable, 1); + base_ref_iterator_init(&iter->base, &reftable_ref_iterator_vtable); iter->prefix = prefix; iter->base.oid = &iter->oid; iter->flags = flags; @@ -507,49 +507,6 @@ done: return iter; } -static enum iterator_selection iterator_select(struct ref_iterator *iter_worktree, - struct ref_iterator *iter_common, - void *cb_data UNUSED) -{ - if (iter_worktree && !iter_common) { - /* - * Return the worktree ref if there are no more common refs. - */ - return ITER_SELECT_0; - } else if (iter_common) { - /* - * In case we have pending worktree and common refs we need to - * yield them based on their lexicographical order. Worktree - * refs that have the same name as common refs shadow the - * latter. - */ - if (iter_worktree) { - int cmp = strcmp(iter_worktree->refname, - iter_common->refname); - if (cmp < 0) - return ITER_SELECT_0; - else if (!cmp) - return ITER_SELECT_0_SKIP_1; - } - - /* - * We now know that the lexicographically-next ref is a common - * ref. When the common ref is a shared one we return it. - */ - if (parse_worktree_ref(iter_common->refname, NULL, NULL, - NULL) == REF_WORKTREE_SHARED) - return ITER_SELECT_1; - - /* - * Otherwise, if the common ref is a per-worktree ref we skip - * it because it would belong to the main worktree, not ours. - */ - return ITER_SKIP_1; - } else { - return ITER_DONE; - } -} - static struct ref_iterator *reftable_be_iterator_begin(struct ref_store *ref_store, const char *prefix, const char **exclude_patterns, @@ -578,8 +535,8 @@ static struct ref_iterator *reftable_be_iterator_begin(struct ref_store *ref_sto * single iterator. */ worktree_iter = ref_iterator_for_stack(refs, refs->worktree_stack, prefix, flags); - return merge_ref_iterator_begin(1, &worktree_iter->base, &main_iter->base, - iterator_select, NULL); + return merge_ref_iterator_begin(&worktree_iter->base, &main_iter->base, + ref_iterator_select, NULL); } static int reftable_be_read_raw_ref(struct ref_store *ref_store, @@ -1640,7 +1597,6 @@ struct reftable_reflog_iterator { struct reftable_ref_store *refs; struct reftable_iterator iter; struct reftable_log_record log; - struct object_id oid; char *last_name; int err; }; @@ -1651,8 +1607,6 @@ static int reftable_reflog_iterator_advance(struct ref_iterator *ref_iterator) (struct reftable_reflog_iterator *)ref_iterator; while (!iter->err) { - int flags; - iter->err = reftable_iterator_next_log(&iter->iter, &iter->log); if (iter->err) break; @@ -1665,17 +1619,13 @@ static int reftable_reflog_iterator_advance(struct ref_iterator *ref_iterator) if (iter->last_name && !strcmp(iter->log.refname, iter->last_name)) continue; - if (!refs_resolve_ref_unsafe(&iter->refs->base, iter->log.refname, - 0, &iter->oid, &flags)) { - error(_("bad ref for %s"), iter->log.refname); + if (check_refname_format(iter->log.refname, + REFNAME_ALLOW_ONELEVEL)) continue; - } free(iter->last_name); iter->last_name = xstrdup(iter->log.refname); iter->base.refname = iter->log.refname; - iter->base.oid = &iter->oid; - iter->base.flags = flags; break; } @@ -1726,9 +1676,8 @@ static struct reftable_reflog_iterator *reflog_iterator_for_stack(struct reftabl int ret; iter = xcalloc(1, sizeof(*iter)); - base_ref_iterator_init(&iter->base, &reftable_reflog_iterator_vtable, 1); + base_ref_iterator_init(&iter->base, &reftable_reflog_iterator_vtable); iter->refs = refs; - iter->base.oid = &iter->oid; ret = refs->err; if (ret) @@ -1761,8 +1710,8 @@ static struct ref_iterator *reftable_be_reflog_iterator_begin(struct ref_store * worktree_iter = reflog_iterator_for_stack(refs, refs->worktree_stack); - return merge_ref_iterator_begin(1, &worktree_iter->base, &main_iter->base, - iterator_select, NULL); + return merge_ref_iterator_begin(&worktree_iter->base, &main_iter->base, + ref_iterator_select, NULL); } static int yield_log_record(struct reftable_log_record *log, diff --git a/reftable/basics.c b/reftable/basics.c index f761e48028..0785aff941 100644 --- a/reftable/basics.c +++ b/reftable/basics.c @@ -64,12 +64,11 @@ void free_names(char **a) reftable_free(a); } -int names_length(char **names) +size_t names_length(char **names) { char **p = names; - for (; *p; p++) { - /* empty */ - } + while (*p) + p++; return p - names; } @@ -89,17 +88,13 @@ void parse_names(char *buf, int size, char ***namesp) next = end; } if (p < next) { - if (names_len == names_cap) { - names_cap = 2 * names_cap + 1; - names = reftable_realloc( - names, names_cap * sizeof(*names)); - } + REFTABLE_ALLOC_GROW(names, names_len + 1, names_cap); names[names_len++] = xstrdup(p); } p = next + 1; } - names = reftable_realloc(names, (names_len + 1) * sizeof(*names)); + REFTABLE_REALLOC_ARRAY(names, names_len + 1); names[names_len] = NULL; *namesp = names; } diff --git a/reftable/basics.h b/reftable/basics.h index 096b36862b..91f3533efe 100644 --- a/reftable/basics.h +++ b/reftable/basics.h @@ -44,14 +44,27 @@ void parse_names(char *buf, int size, char ***namesp); int names_equal(char **a, char **b); /* returns the array size of a NULL-terminated array of strings. */ -int names_length(char **names); +size_t names_length(char **names); /* Allocation routines; they invoke the functions set through * reftable_set_alloc() */ void *reftable_malloc(size_t sz); void *reftable_realloc(void *p, size_t sz); void reftable_free(void *p); -void *reftable_calloc(size_t sz); +void *reftable_calloc(size_t nelem, size_t elsize); + +#define REFTABLE_ALLOC_ARRAY(x, alloc) (x) = reftable_malloc(st_mult(sizeof(*(x)), (alloc))) +#define REFTABLE_CALLOC_ARRAY(x, alloc) (x) = reftable_calloc((alloc), sizeof(*(x))) +#define REFTABLE_REALLOC_ARRAY(x, alloc) (x) = reftable_realloc((x), st_mult(sizeof(*(x)), (alloc))) +#define REFTABLE_ALLOC_GROW(x, nr, alloc) \ + do { \ + if ((nr) > alloc) { \ + alloc = 2 * (alloc) + 1; \ + if (alloc < (nr)) \ + alloc = (nr); \ + REFTABLE_REALLOC_ARRAY(x, alloc); \ + } \ + } while (0) /* Find the longest shared prefix size of `a` and `b` */ struct strbuf; diff --git a/reftable/block.c b/reftable/block.c index 1df3d8a0f0..72eb73b380 100644 --- a/reftable/block.c +++ b/reftable/block.c @@ -51,12 +51,7 @@ static int block_writer_register_restart(struct block_writer *w, int n, if (2 + 3 * rlen + n > w->block_size - w->next) return -1; if (is_restart) { - if (w->restart_len == w->restart_cap) { - w->restart_cap = w->restart_cap * 2 + 1; - w->restarts = reftable_realloc( - w->restarts, sizeof(uint32_t) * w->restart_cap); - } - + REFTABLE_ALLOC_GROW(w->restarts, w->restart_len + 1, w->restart_cap); w->restarts[w->restart_len++] = w->next; } @@ -148,8 +143,10 @@ int block_writer_finish(struct block_writer *w) int block_header_skip = 4 + w->header_off; uLongf src_len = w->next - block_header_skip; uLongf dest_cap = src_len * 1.001 + 12; + uint8_t *compressed; + + REFTABLE_ALLOC_ARRAY(compressed, dest_cap); - uint8_t *compressed = reftable_malloc(dest_cap); while (1) { uLongf out_dest_len = dest_cap; int zresult = compress2(compressed, &out_dest_len, @@ -206,9 +203,9 @@ int block_reader_init(struct block_reader *br, struct reftable_block *block, uLongf dst_len = sz - block_header_skip; /* total size of dest buffer. */ uLongf src_len = block->len - block_header_skip; - /* Log blocks specify the *uncompressed* size in their header. - */ - uncompressed = reftable_malloc(sz); + + /* Log blocks specify the *uncompressed* size in their header. */ + REFTABLE_ALLOC_ARRAY(uncompressed, sz); /* Copy over the block header verbatim. It's not compressed. */ memcpy(uncompressed, block->data, block_header_skip); @@ -342,8 +339,7 @@ int block_iter_next(struct block_iter *it, struct reftable_record *rec) return -1; string_view_consume(&in, n); - strbuf_reset(&it->last_key); - strbuf_addbuf(&it->last_key, &it->key); + strbuf_swap(&it->last_key, &it->key); it->next_off += start.len - in.len; return 0; } @@ -385,23 +381,23 @@ int block_reader_seek(struct block_reader *br, struct block_iter *it, .key = *want, .r = br, }; - struct reftable_record rec = reftable_new_record(block_reader_type(br)); - int err = 0; struct block_iter next = BLOCK_ITER_INIT; + struct reftable_record rec; + int err = 0, i; - int i = binsearch(br->restart_count, &restart_key_less, &args); if (args.error) { err = REFTABLE_FORMAT_ERROR; goto done; } - it->br = br; - if (i > 0) { - i--; - it->next_off = block_reader_restart_offset(br, i); - } else { + i = binsearch(br->restart_count, &restart_key_less, &args); + if (i > 0) + it->next_off = block_reader_restart_offset(br, i - 1); + else it->next_off = br->header_off + 4; - } + it->br = br; + + reftable_record_init(&rec, block_reader_type(br)); /* We're looking for the last entry less/equal than the wanted key, so we have to go one entry too far and then back up. diff --git a/reftable/block_test.c b/reftable/block_test.c index dedb05c7d8..e162c6e33f 100644 --- a/reftable/block_test.c +++ b/reftable/block_test.c @@ -36,7 +36,7 @@ static void test_block_read_write(void) int j = 0; struct strbuf want = STRBUF_INIT; - block.data = reftable_calloc(block_size); + REFTABLE_CALLOC_ARRAY(block.data, block_size); block.len = block_size; block.source = malloc_block_source(); block_writer_init(&bw, BLOCK_TYPE_REF, block.data, block_size, diff --git a/reftable/blocksource.c b/reftable/blocksource.c index 8c41e3c70f..eeed254ba9 100644 --- a/reftable/blocksource.c +++ b/reftable/blocksource.c @@ -29,7 +29,7 @@ static int strbuf_read_block(void *v, struct reftable_block *dest, uint64_t off, { struct strbuf *b = v; assert(off + size <= b->len); - dest->data = reftable_calloc(size); + REFTABLE_CALLOC_ARRAY(dest->data, size); memcpy(dest->data, b->buf + off, size); dest->len = size; return size; @@ -132,7 +132,7 @@ int reftable_block_source_from_file(struct reftable_block_source *bs, return REFTABLE_IO_ERROR; } - p = reftable_calloc(sizeof(*p)); + REFTABLE_CALLOC_ARRAY(p, 1); p->size = st.st_size; p->data = xmmap(NULL, st.st_size, PROT_READ, MAP_PRIVATE, fd, 0); close(fd); diff --git a/reftable/iter.c b/reftable/iter.c index a8d174c040..8b5ebf6183 100644 --- a/reftable/iter.c +++ b/reftable/iter.c @@ -160,8 +160,7 @@ int new_indexed_table_ref_iter(struct indexed_table_ref_iter **dest, int oid_len, uint64_t *offsets, int offset_len) { struct indexed_table_ref_iter empty = INDEXED_TABLE_REF_ITER_INIT; - struct indexed_table_ref_iter *itr = - reftable_calloc(sizeof(struct indexed_table_ref_iter)); + struct indexed_table_ref_iter *itr = reftable_calloc(1, sizeof(*itr)); int err = 0; *itr = empty; diff --git a/reftable/merged.c b/reftable/merged.c index c258ce953e..1aa6cd31b7 100644 --- a/reftable/merged.c +++ b/reftable/merged.c @@ -19,24 +19,23 @@ https://developers.google.com/open-source/licenses/bsd static int merged_iter_init(struct merged_iter *mi) { - int i = 0; - for (i = 0; i < mi->stack_len; i++) { - struct reftable_record rec = reftable_new_record(mi->typ); - int err = iterator_next(&mi->stack[i], &rec); - if (err < 0) { + for (size_t i = 0; i < mi->stack_len; i++) { + struct pq_entry e = { + .index = i, + }; + int err; + + reftable_record_init(&e.rec, mi->typ); + err = iterator_next(&mi->stack[i], &e.rec); + if (err < 0) return err; - } - if (err > 0) { reftable_iterator_destroy(&mi->stack[i]); - reftable_record_release(&rec); - } else { - struct pq_entry e = { - .rec = rec, - .index = i, - }; - merged_iter_pqueue_add(&mi->pq, &e); + reftable_record_release(&e.rec); + continue; } + + merged_iter_pqueue_add(&mi->pq, &e); } return 0; @@ -45,24 +44,23 @@ static int merged_iter_init(struct merged_iter *mi) static void merged_iter_close(void *p) { struct merged_iter *mi = p; - int i = 0; + merged_iter_pqueue_release(&mi->pq); - for (i = 0; i < mi->stack_len; i++) { + for (size_t i = 0; i < mi->stack_len; i++) reftable_iterator_destroy(&mi->stack[i]); - } reftable_free(mi->stack); - strbuf_release(&mi->key); - strbuf_release(&mi->entry_key); } static int merged_iter_advance_nonnull_subiter(struct merged_iter *mi, size_t idx) { struct pq_entry e = { - .rec = reftable_new_record(mi->typ), .index = idx, }; - int err = iterator_next(&mi->stack[idx], &e.rec); + int err; + + reftable_record_init(&e.rec, mi->typ); + err = iterator_next(&mi->stack[idx], &e.rec); if (err < 0) return err; @@ -105,14 +103,19 @@ static int merged_iter_next_entry(struct merged_iter *mi, such a deployment, the loop below must be changed to collect all entries for the same key, and return new the newest one. */ - reftable_record_key(&entry.rec, &mi->entry_key); while (!merged_iter_pqueue_is_empty(mi->pq)) { struct pq_entry top = merged_iter_pqueue_top(mi->pq); - int cmp = 0; - - reftable_record_key(&top.rec, &mi->key); + int cmp; + + /* + * When the next entry comes from the same queue as the current + * entry then it must by definition be larger. This avoids a + * comparison in the most common case. + */ + if (top.index == entry.index) + break; - cmp = strbuf_cmp(&mi->key, &mi->entry_key); + cmp = reftable_record_cmp(&top.rec, &entry.rec); if (cmp > 0) break; @@ -168,14 +171,14 @@ static void iterator_from_merged_iter(struct reftable_iterator *it, } int reftable_new_merged_table(struct reftable_merged_table **dest, - struct reftable_table *stack, int n, + struct reftable_table *stack, size_t n, uint32_t hash_id) { struct reftable_merged_table *m = NULL; uint64_t last_max = 0; uint64_t first_min = 0; - int i = 0; - for (i = 0; i < n; i++) { + + for (size_t i = 0; i < n; i++) { uint64_t min = reftable_table_min_update_index(&stack[i]); uint64_t max = reftable_table_max_update_index(&stack[i]); @@ -190,7 +193,7 @@ int reftable_new_merged_table(struct reftable_merged_table **dest, } } - m = reftable_calloc(sizeof(struct reftable_merged_table)); + REFTABLE_CALLOC_ARRAY(m, 1); m->stack = stack; m->stack_len = n; m->min = first_min; @@ -239,50 +242,36 @@ static int merged_table_seek_record(struct reftable_merged_table *mt, struct reftable_iterator *it, struct reftable_record *rec) { - struct reftable_iterator *iters = reftable_calloc( - sizeof(struct reftable_iterator) * mt->stack_len); struct merged_iter merged = { - .stack = iters, .typ = reftable_record_type(rec), .hash_id = mt->hash_id, .suppress_deletions = mt->suppress_deletions, - .key = STRBUF_INIT, - .entry_key = STRBUF_INIT, }; - int n = 0; - int err = 0; - int i = 0; - for (i = 0; i < mt->stack_len && err == 0; i++) { - int e = reftable_table_seek_record(&mt->stack[i], &iters[n], - rec); - if (e < 0) { - err = e; - } - if (e == 0) { - n++; - } - } - if (err < 0) { - int i = 0; - for (i = 0; i < n; i++) { - reftable_iterator_destroy(&iters[i]); - } - reftable_free(iters); - return err; + struct merged_iter *p; + int err; + + REFTABLE_CALLOC_ARRAY(merged.stack, mt->stack_len); + for (size_t i = 0; i < mt->stack_len; i++) { + err = reftable_table_seek_record(&mt->stack[i], + &merged.stack[merged.stack_len], rec); + if (err < 0) + goto out; + if (!err) + merged.stack_len++; } - merged.stack_len = n; err = merged_iter_init(&merged); - if (err < 0) { + if (err < 0) + goto out; + + p = reftable_malloc(sizeof(struct merged_iter)); + *p = merged; + iterator_from_merged_iter(it, p); + +out: + if (err < 0) merged_iter_close(&merged); - return err; - } else { - struct merged_iter *p = - reftable_malloc(sizeof(struct merged_iter)); - *p = merged; - iterator_from_merged_iter(it, p); - } - return 0; + return err; } int reftable_merged_table_seek_ref(struct reftable_merged_table *mt, diff --git a/reftable/merged.h b/reftable/merged.h index d5b39dfe7f..7d9f95d27e 100644 --- a/reftable/merged.h +++ b/reftable/merged.h @@ -31,8 +31,6 @@ struct merged_iter { uint8_t typ; int suppress_deletions; struct merged_iter_pqueue pq; - struct strbuf key; - struct strbuf entry_key; }; void merged_table_release(struct reftable_merged_table *mt); diff --git a/reftable/merged_test.c b/reftable/merged_test.c index bf090b474e..d0f77a3b8f 100644 --- a/reftable/merged_test.c +++ b/reftable/merged_test.c @@ -88,16 +88,17 @@ static struct reftable_merged_table * merged_table_from_records(struct reftable_ref_record **refs, struct reftable_block_source **source, struct reftable_reader ***readers, int *sizes, - struct strbuf *buf, int n) + struct strbuf *buf, size_t n) { - int i = 0; struct reftable_merged_table *mt = NULL; + struct reftable_table *tabs; int err; - struct reftable_table *tabs = - reftable_calloc(n * sizeof(struct reftable_table)); - *readers = reftable_calloc(n * sizeof(struct reftable_reader *)); - *source = reftable_calloc(n * sizeof(**source)); - for (i = 0; i < n; i++) { + + REFTABLE_CALLOC_ARRAY(tabs, n); + REFTABLE_CALLOC_ARRAY(*readers, n); + REFTABLE_CALLOC_ARRAY(*source, n); + + for (size_t i = 0; i < n; i++) { write_test_table(&buf[i], refs[i], sizes[i]); block_source_from_strbuf(&(*source)[i], &buf[i]); @@ -231,14 +232,10 @@ static void test_merged(void) while (len < 100) { /* cap loops/recursion. */ struct reftable_ref_record ref = { NULL }; int err = reftable_iterator_next_ref(&it, &ref); - if (err > 0) { + if (err > 0) break; - } - if (len == cap) { - cap = 2 * cap + 1; - out = reftable_realloc( - out, sizeof(struct reftable_ref_record) * cap); - } + + REFTABLE_ALLOC_GROW(out, len + 1, cap); out[len++] = ref; } reftable_iterator_destroy(&it); @@ -265,16 +262,17 @@ static struct reftable_merged_table * merged_table_from_log_records(struct reftable_log_record **logs, struct reftable_block_source **source, struct reftable_reader ***readers, int *sizes, - struct strbuf *buf, int n) + struct strbuf *buf, size_t n) { - int i = 0; struct reftable_merged_table *mt = NULL; + struct reftable_table *tabs; int err; - struct reftable_table *tabs = - reftable_calloc(n * sizeof(struct reftable_table)); - *readers = reftable_calloc(n * sizeof(struct reftable_reader *)); - *source = reftable_calloc(n * sizeof(**source)); - for (i = 0; i < n; i++) { + + REFTABLE_CALLOC_ARRAY(tabs, n); + REFTABLE_CALLOC_ARRAY(*readers, n); + REFTABLE_CALLOC_ARRAY(*source, n); + + for (size_t i = 0; i < n; i++) { write_test_log_table(&buf[i], logs[i], sizes[i], i + 1); block_source_from_strbuf(&(*source)[i], &buf[i]); @@ -368,14 +366,10 @@ static void test_merged_logs(void) while (len < 100) { /* cap loops/recursion. */ struct reftable_log_record log = { NULL }; int err = reftable_iterator_next_log(&it, &log); - if (err > 0) { + if (err > 0) break; - } - if (len == cap) { - cap = 2 * cap + 1; - out = reftable_realloc( - out, sizeof(struct reftable_log_record) * cap); - } + + REFTABLE_ALLOC_GROW(out, len + 1, cap); out[len++] = log; } reftable_iterator_destroy(&it); @@ -420,7 +414,7 @@ static void test_default_write_opts(void) }; int err; struct reftable_block_source source = { NULL }; - struct reftable_table *tab = reftable_calloc(sizeof(*tab) * 1); + struct reftable_table *tab = reftable_calloc(1, sizeof(*tab)); uint32_t hash_id; struct reftable_reader *rd = NULL; struct reftable_merged_table *merged = NULL; diff --git a/reftable/pq.c b/reftable/pq.c index dcefeb793a..e0ccce2b97 100644 --- a/reftable/pq.c +++ b/reftable/pq.c @@ -14,20 +14,9 @@ https://developers.google.com/open-source/licenses/bsd int pq_less(struct pq_entry *a, struct pq_entry *b) { - struct strbuf ak = STRBUF_INIT; - struct strbuf bk = STRBUF_INIT; - int cmp = 0; - reftable_record_key(&a->rec, &ak); - reftable_record_key(&b->rec, &bk); - - cmp = strbuf_cmp(&ak, &bk); - - strbuf_release(&ak); - strbuf_release(&bk); - + int cmp = reftable_record_cmp(&a->rec, &b->rec); if (cmp == 0) return a->index > b->index; - return cmp < 0; } @@ -75,13 +64,9 @@ void merged_iter_pqueue_add(struct merged_iter_pqueue *pq, const struct pq_entry { int i = 0; - if (pq->len == pq->cap) { - pq->cap = 2 * pq->cap + 1; - pq->heap = reftable_realloc(pq->heap, - pq->cap * sizeof(struct pq_entry)); - } - + REFTABLE_ALLOC_GROW(pq->heap, pq->len + 1, pq->cap); pq->heap[pq->len++] = *e; + i = pq->len - 1; while (i > 0) { int j = (i - 1) / 2; diff --git a/reftable/publicbasics.c b/reftable/publicbasics.c index bcb82530d6..44b84a125e 100644 --- a/reftable/publicbasics.c +++ b/reftable/publicbasics.c @@ -37,8 +37,9 @@ void reftable_free(void *p) free(p); } -void *reftable_calloc(size_t sz) +void *reftable_calloc(size_t nelem, size_t elsize) { + size_t sz = st_mult(nelem, elsize); void *p = reftable_malloc(sz); memset(p, 0, sz); return p; diff --git a/reftable/reader.c b/reftable/reader.c index 64dc366fb1..b113daab77 100644 --- a/reftable/reader.c +++ b/reftable/reader.c @@ -357,24 +357,32 @@ static int table_iter_next(struct table_iter *ti, struct reftable_record *rec) while (1) { struct table_iter next = TABLE_ITER_INIT; - int err = 0; - if (ti->is_finished) { + int err; + + if (ti->is_finished) return 1; - } + /* + * Check whether the current block still has more records. If + * so, return it. If the iterator returns positive then the + * current block has been exhausted. + */ err = table_iter_next_in_block(ti, rec); - if (err <= 0) { + if (err <= 0) return err; - } + /* + * Otherwise, we need to continue to the next block in the + * table and retry. If there are no more blocks then the + * iterator is drained. + */ err = table_iter_next_block(&next, ti); - if (err != 0) { - ti->is_finished = 1; - } table_iter_block_done(ti); - if (err != 0) { + if (err) { + ti->is_finished = 1; return err; } + table_iter_copy_from(ti, &next); block_iter_close(&next.bi); } @@ -444,13 +452,13 @@ static int reader_start(struct reftable_reader *r, struct table_iter *ti, static int reader_seek_linear(struct table_iter *ti, struct reftable_record *want) { - struct reftable_record rec = - reftable_new_record(reftable_record_type(want)); struct strbuf want_key = STRBUF_INIT; struct strbuf got_key = STRBUF_INIT; struct table_iter next = TABLE_ITER_INIT; + struct reftable_record rec; int err = -1; + reftable_record_init(&rec, reftable_record_type(want)); reftable_record_key(want, &want_key); while (1) { @@ -508,8 +516,38 @@ static int reader_seek_indexed(struct reftable_reader *r, if (err < 0) goto done; + /* + * The index may consist of multiple levels, where each level may have + * multiple index blocks. We start by doing a linear search in the + * highest layer that identifies the relevant index block as well as + * the record inside that block that corresponds to our wanted key. + */ err = reader_seek_linear(&index_iter, &want_index); + if (err < 0) + goto done; + + /* + * Traverse down the levels until we find a non-index entry. + */ while (1) { + /* + * In case we seek a record that does not exist the index iter + * will tell us that the iterator is over. This works because + * the last index entry of the current level will contain the + * last key it knows about. So in case our seeked key is larger + * than the last indexed key we know that it won't exist. + * + * There is one subtlety in the layout of the index section + * that makes this work as expected: the highest-level index is + * at end of the section and will point backwards and thus we + * start reading from the end of the index section, not the + * beginning. + * + * If that wasn't the case and the order was reversed then the + * linear seek would seek into the lower levels and traverse + * all levels of the index only to find out that the key does + * not exist. + */ err = table_iter_next(&index_iter, &index_result); table_iter_block_done(&index_iter); if (err != 0) @@ -539,8 +577,7 @@ static int reader_seek_indexed(struct reftable_reader *r, if (err == 0) { struct table_iter empty = TABLE_ITER_INIT; - struct table_iter *malloced = - reftable_calloc(sizeof(struct table_iter)); + struct table_iter *malloced = reftable_calloc(1, sizeof(*malloced)); *malloced = empty; table_iter_copy_from(malloced, &next); iterator_from_table_iter(it, malloced); @@ -635,8 +672,7 @@ void reader_close(struct reftable_reader *r) int reftable_new_reader(struct reftable_reader **p, struct reftable_block_source *src, char const *name) { - struct reftable_reader *rd = - reftable_calloc(sizeof(struct reftable_reader)); + struct reftable_reader *rd = reftable_calloc(1, sizeof(*rd)); int err = init_reader(rd, src, name); if (err == 0) { *p = rd; @@ -711,7 +747,7 @@ static int reftable_reader_refs_for_unindexed(struct reftable_reader *r, uint8_t *oid) { struct table_iter ti_empty = TABLE_ITER_INIT; - struct table_iter *ti = reftable_calloc(sizeof(struct table_iter)); + struct table_iter *ti = reftable_calloc(1, sizeof(*ti)); struct filtering_ref_iterator *filter = NULL; struct filtering_ref_iterator empty = FILTERING_REF_ITERATOR_INIT; int oid_len = hash_size(r->hash_id); diff --git a/reftable/readwrite_test.c b/reftable/readwrite_test.c index 6b99daeaf2..363fe0f998 100644 --- a/reftable/readwrite_test.c +++ b/reftable/readwrite_test.c @@ -56,7 +56,9 @@ static void write_table(char ***names, struct strbuf *buf, int N, int i = 0, n; struct reftable_log_record log = { NULL }; const struct reftable_stats *stats = NULL; - *names = reftable_calloc(sizeof(char *) * (N + 1)); + + REFTABLE_CALLOC_ARRAY(*names, N + 1); + reftable_writer_set_limits(w, update_index, update_index); for (i = 0; i < N; i++) { char name[100]; @@ -188,7 +190,7 @@ static void test_log_overflow(void) static void test_log_write_read(void) { int N = 2; - char **names = reftable_calloc(sizeof(char *) * (N + 1)); + char **names = reftable_calloc(N + 1, sizeof(*names)); int err; struct reftable_write_options opts = { .block_size = 256, @@ -519,7 +521,7 @@ static void test_table_read_write_seek_index(void) static void test_table_refs_for(int indexed) { int N = 50; - char **want_names = reftable_calloc(sizeof(char *) * (N + 1)); + char **want_names = reftable_calloc(N + 1, sizeof(*want_names)); int want_names_len = 0; uint8_t want_hash[GIT_SHA1_RAWSZ]; @@ -866,6 +868,61 @@ static void test_write_multiple_indices(void) strbuf_release(&buf); } +static void test_write_multi_level_index(void) +{ + struct reftable_write_options opts = { + .block_size = 100, + }; + struct strbuf writer_buf = STRBUF_INIT, buf = STRBUF_INIT; + struct reftable_block_source source = { 0 }; + struct reftable_iterator it = { 0 }; + const struct reftable_stats *stats; + struct reftable_writer *writer; + struct reftable_reader *reader; + int err; + + writer = reftable_new_writer(&strbuf_add_void, &noop_flush, &writer_buf, &opts); + reftable_writer_set_limits(writer, 1, 1); + for (size_t i = 0; i < 200; i++) { + struct reftable_ref_record ref = { + .update_index = 1, + .value_type = REFTABLE_REF_VAL1, + .value.val1 = {i}, + }; + + strbuf_reset(&buf); + strbuf_addf(&buf, "refs/heads/%03" PRIuMAX, (uintmax_t)i); + ref.refname = buf.buf, + + err = reftable_writer_add_ref(writer, &ref); + EXPECT_ERR(err); + } + reftable_writer_close(writer); + + /* + * The written refs should be sufficiently large to result in a + * multi-level index. + */ + stats = reftable_writer_stats(writer); + EXPECT(stats->ref_stats.max_index_level == 2); + + block_source_from_strbuf(&source, &writer_buf); + err = reftable_new_reader(&reader, &source, "filename"); + EXPECT_ERR(err); + + /* + * Seeking the last ref should work as expected. + */ + err = reftable_reader_seek_ref(reader, &it, "refs/heads/199"); + EXPECT_ERR(err); + + reftable_iterator_destroy(&it); + reftable_writer_free(writer); + reftable_reader_free(reader); + strbuf_release(&writer_buf); + strbuf_release(&buf); +} + static void test_corrupt_table_empty(void) { struct strbuf buf = STRBUF_INIT; @@ -916,5 +973,6 @@ int readwrite_test_main(int argc, const char *argv[]) RUN_TEST(test_write_object_id_length); RUN_TEST(test_write_object_id_min_length); RUN_TEST(test_write_multiple_indices); + RUN_TEST(test_write_multi_level_index); return 0; } diff --git a/reftable/record.c b/reftable/record.c index 5c3fbb7b2a..d6bb42e887 100644 --- a/reftable/record.c +++ b/reftable/record.c @@ -377,10 +377,11 @@ static int reftable_ref_record_decode(void *rec, struct strbuf key, assert(hash_size > 0); - r->refname = reftable_realloc(r->refname, key.len + 1); + r->refname = reftable_malloc(key.len + 1); memcpy(r->refname, key.buf, key.len); - r->update_index = update_index; r->refname[key.len] = 0; + + r->update_index = update_index; r->value_type = val_type; switch (val_type) { case REFTABLE_REF_VAL1: @@ -430,7 +431,6 @@ static int reftable_ref_record_is_deletion_void(const void *p) (const struct reftable_ref_record *)p); } - static int reftable_ref_record_equal_void(const void *a, const void *b, int hash_size) { @@ -439,6 +439,13 @@ static int reftable_ref_record_equal_void(const void *a, return reftable_ref_record_equal(ra, rb, hash_size); } +static int reftable_ref_record_cmp_void(const void *_a, const void *_b) +{ + const struct reftable_ref_record *a = _a; + const struct reftable_ref_record *b = _b; + return strcmp(a->refname, b->refname); +} + static void reftable_ref_record_print_void(const void *rec, int hash_size) { @@ -455,6 +462,7 @@ static struct reftable_record_vtable reftable_ref_record_vtable = { .release = &reftable_ref_record_release_void, .is_deletion = &reftable_ref_record_is_deletion_void, .equal = &reftable_ref_record_equal_void, + .cmp = &reftable_ref_record_cmp_void, .print = &reftable_ref_record_print_void, }; @@ -497,12 +505,13 @@ static void reftable_obj_record_copy_from(void *rec, const void *src_rec, (const struct reftable_obj_record *)src_rec; reftable_obj_record_release(obj); - obj->hash_prefix = reftable_malloc(src->hash_prefix_len); + + REFTABLE_ALLOC_ARRAY(obj->hash_prefix, src->hash_prefix_len); obj->hash_prefix_len = src->hash_prefix_len; if (src->hash_prefix_len) memcpy(obj->hash_prefix, src->hash_prefix, obj->hash_prefix_len); - obj->offsets = reftable_malloc(src->offset_len * sizeof(uint64_t)); + REFTABLE_ALLOC_ARRAY(obj->offsets, src->offset_len); obj->offset_len = src->offset_len; COPY_ARRAY(obj->offsets, src->offsets, src->offset_len); } @@ -559,7 +568,8 @@ static int reftable_obj_record_decode(void *rec, struct strbuf key, int n = 0; uint64_t last; int j; - r->hash_prefix = reftable_malloc(key.len); + + REFTABLE_ALLOC_ARRAY(r->hash_prefix, key.len); memcpy(r->hash_prefix, key.buf, key.len); r->hash_prefix_len = key.len; @@ -577,7 +587,7 @@ static int reftable_obj_record_decode(void *rec, struct strbuf key, if (count == 0) return start.len - in.len; - r->offsets = reftable_malloc(count * sizeof(uint64_t)); + REFTABLE_ALLOC_ARRAY(r->offsets, count); r->offset_len = count; n = get_var_int(&r->offsets[0], &in); @@ -625,6 +635,25 @@ static int reftable_obj_record_equal_void(const void *a, const void *b, int hash return 1; } +static int reftable_obj_record_cmp_void(const void *_a, const void *_b) +{ + const struct reftable_obj_record *a = _a; + const struct reftable_obj_record *b = _b; + int cmp; + + cmp = memcmp(a->hash_prefix, b->hash_prefix, + a->hash_prefix_len > b->hash_prefix_len ? + a->hash_prefix_len : b->hash_prefix_len); + if (cmp) + return cmp; + + /* + * When the prefix is the same then the object record that is longer is + * considered to be bigger. + */ + return a->hash_prefix_len - b->hash_prefix_len; +} + static struct reftable_record_vtable reftable_obj_record_vtable = { .key = &reftable_obj_record_key, .type = BLOCK_TYPE_OBJ, @@ -635,6 +664,7 @@ static struct reftable_record_vtable reftable_obj_record_vtable = { .release = &reftable_obj_record_release, .is_deletion = ¬_a_deletion, .equal = &reftable_obj_record_equal_void, + .cmp = &reftable_obj_record_cmp_void, .print = &reftable_obj_record_print, }; @@ -715,12 +745,12 @@ static void reftable_log_record_copy_from(void *rec, const void *src_rec, } if (dst->value.update.new_hash) { - dst->value.update.new_hash = reftable_malloc(hash_size); + REFTABLE_ALLOC_ARRAY(dst->value.update.new_hash, hash_size); memcpy(dst->value.update.new_hash, src->value.update.new_hash, hash_size); } if (dst->value.update.old_hash) { - dst->value.update.old_hash = reftable_malloc(hash_size); + REFTABLE_ALLOC_ARRAY(dst->value.update.old_hash, hash_size); memcpy(dst->value.update.old_hash, src->value.update.old_hash, hash_size); } @@ -953,6 +983,22 @@ static int reftable_log_record_equal_void(const void *a, hash_size); } +static int reftable_log_record_cmp_void(const void *_a, const void *_b) +{ + const struct reftable_log_record *a = _a; + const struct reftable_log_record *b = _b; + int cmp = strcmp(a->refname, b->refname); + if (cmp) + return cmp; + + /* + * Note that the comparison here is reversed. This is because the + * update index is reversed when comparing keys. For reference, see how + * we handle this in reftable_log_record_key()`. + */ + return b->update_index - a->update_index; +} + int reftable_log_record_equal(const struct reftable_log_record *a, const struct reftable_log_record *b, int hash_size) { @@ -1002,6 +1048,7 @@ static struct reftable_record_vtable reftable_log_record_vtable = { .release = &reftable_log_record_release_void, .is_deletion = &reftable_log_record_is_deletion_void, .equal = &reftable_log_record_equal_void, + .cmp = &reftable_log_record_cmp_void, .print = &reftable_log_record_print_void, }; @@ -1077,6 +1124,13 @@ static int reftable_index_record_equal(const void *a, const void *b, int hash_si return ia->offset == ib->offset && !strbuf_cmp(&ia->last_key, &ib->last_key); } +static int reftable_index_record_cmp(const void *_a, const void *_b) +{ + const struct reftable_index_record *a = _a; + const struct reftable_index_record *b = _b; + return strbuf_cmp(&a->last_key, &b->last_key); +} + static void reftable_index_record_print(const void *rec, int hash_size) { const struct reftable_index_record *idx = rec; @@ -1094,6 +1148,7 @@ static struct reftable_record_vtable reftable_index_record_vtable = { .release = &reftable_index_record_release, .is_deletion = ¬_a_deletion, .equal = &reftable_index_record_equal, + .cmp = &reftable_index_record_cmp, .print = &reftable_index_record_print, }; @@ -1147,6 +1202,14 @@ int reftable_record_is_deletion(struct reftable_record *rec) reftable_record_data(rec)); } +int reftable_record_cmp(struct reftable_record *a, struct reftable_record *b) +{ + if (a->type != b->type) + BUG("cannot compare reftable records of different type"); + return reftable_record_vtable(a)->cmp( + reftable_record_data(a), reftable_record_data(b)); +} + int reftable_record_equal(struct reftable_record *a, struct reftable_record *b, int hash_size) { if (a->type != b->type) @@ -1257,45 +1320,22 @@ reftable_record_vtable(struct reftable_record *rec) abort(); } -struct reftable_record reftable_new_record(uint8_t typ) +void reftable_record_init(struct reftable_record *rec, uint8_t typ) { - struct reftable_record clean = { - .type = typ, - }; + memset(rec, 0, sizeof(*rec)); + rec->type = typ; - /* the following is involved, but the naive solution (just return - * `clean` as is, except for BLOCK_TYPE_INDEX), returns a garbage - * clean.u.obj.offsets pointer on Windows VS CI. Go figure. - */ switch (typ) { - case BLOCK_TYPE_OBJ: - { - struct reftable_obj_record obj = { 0 }; - clean.u.obj = obj; - break; - } - case BLOCK_TYPE_INDEX: - { - struct reftable_index_record idx = { - .last_key = STRBUF_INIT, - }; - clean.u.idx = idx; - break; - } case BLOCK_TYPE_REF: - { - struct reftable_ref_record ref = { 0 }; - clean.u.ref = ref; - break; - } case BLOCK_TYPE_LOG: - { - struct reftable_log_record log = { 0 }; - clean.u.log = log; - break; - } + case BLOCK_TYPE_OBJ: + return; + case BLOCK_TYPE_INDEX: + strbuf_init(&rec->u.idx.last_key, 0); + return; + default: + BUG("unhandled record type"); } - return clean; } void reftable_record_print(struct reftable_record *rec, int hash_size) diff --git a/reftable/record.h b/reftable/record.h index fd80cd451d..a05e2be179 100644 --- a/reftable/record.h +++ b/reftable/record.h @@ -62,6 +62,12 @@ struct reftable_record_vtable { /* Are two records equal? This assumes they have the same type. Returns 0 for non-equal. */ int (*equal)(const void *a, const void *b, int hash_size); + /* + * Compare keys of two records with each other. The records must have + * the same type. + */ + int (*cmp)(const void *a, const void *b); + /* Print on stdout, for debugging. */ void (*print)(const void *rec, int hash_size); }; @@ -69,9 +75,6 @@ struct reftable_record_vtable { /* returns true for recognized block types. Block start with the block type. */ int reftable_is_block_type(uint8_t typ); -/* return an initialized record for the given type */ -struct reftable_record reftable_new_record(uint8_t typ); - /* Encode `key` into `dest`. Sets `is_restart` to indicate a restart. Returns * number of bytes written. */ int reftable_encode_key(int *is_restart, struct string_view dest, @@ -100,8 +103,8 @@ struct reftable_obj_record { /* record is a generic wrapper for different types of records. It is normally * created on the stack, or embedded within another struct. If the type is * known, a fresh instance can be initialized explicitly. Otherwise, use - * reftable_new_record() to initialize generically (as the index_record is not - * valid as 0-initialized structure) + * `reftable_record_init()` to initialize generically (as the index_record is + * not valid as 0-initialized structure) */ struct reftable_record { uint8_t type; @@ -113,7 +116,11 @@ struct reftable_record { } u; }; +/* Initialize the reftable record for the given type */ +void reftable_record_init(struct reftable_record *rec, uint8_t typ); + /* see struct record_vtable */ +int reftable_record_cmp(struct reftable_record *a, struct reftable_record *b); int reftable_record_equal(struct reftable_record *a, struct reftable_record *b, int hash_size); void reftable_record_print(struct reftable_record *rec, int hash_size); void reftable_record_key(struct reftable_record *rec, struct strbuf *dest); diff --git a/reftable/record_test.c b/reftable/record_test.c index 2876db7d27..a86cff5526 100644 --- a/reftable/record_test.c +++ b/reftable/record_test.c @@ -16,11 +16,11 @@ static void test_copy(struct reftable_record *rec) { - struct reftable_record copy = { 0 }; + struct reftable_record copy; uint8_t typ; typ = reftable_record_type(rec); - copy = reftable_new_record(typ); + reftable_record_init(©, typ); reftable_record_copy_from(©, rec, GIT_SHA1_RAWSZ); /* do it twice to catch memory leaks */ reftable_record_copy_from(©, rec, GIT_SHA1_RAWSZ); @@ -231,8 +231,8 @@ static void test_reftable_log_record_roundtrip(void) .value_type = REFTABLE_LOG_UPDATE, .value = { .update = { - .new_hash = reftable_calloc(GIT_SHA1_RAWSZ), - .old_hash = reftable_calloc(GIT_SHA1_RAWSZ), + .new_hash = reftable_calloc(GIT_SHA1_RAWSZ, 1), + .old_hash = reftable_calloc(GIT_SHA1_RAWSZ, 1), .name = xstrdup("old name"), .email = xstrdup("old@email"), .message = xstrdup("old message"), diff --git a/reftable/refname.c b/reftable/refname.c index 9573496932..7570e4acf9 100644 --- a/reftable/refname.c +++ b/reftable/refname.c @@ -140,8 +140,8 @@ int validate_ref_record_addition(struct reftable_table tab, { struct modification mod = { .tab = tab, - .add = reftable_calloc(sizeof(char *) * sz), - .del = reftable_calloc(sizeof(char *) * sz), + .add = reftable_calloc(sz, sizeof(*mod.add)), + .del = reftable_calloc(sz, sizeof(*mod.del)), }; int i = 0; int err = 0; diff --git a/reftable/reftable-merged.h b/reftable/reftable-merged.h index 1a6d16915a..c91a2d83a2 100644 --- a/reftable/reftable-merged.h +++ b/reftable/reftable-merged.h @@ -33,7 +33,7 @@ struct reftable_table; the stack array. */ int reftable_new_merged_table(struct reftable_merged_table **dest, - struct reftable_table *stack, int n, + struct reftable_table *stack, size_t n, uint32_t hash_id); /* returns an iterator positioned just before 'name' */ diff --git a/reftable/stack.c b/reftable/stack.c index a1dd79fc06..b64e55648a 100644 --- a/reftable/stack.c +++ b/reftable/stack.c @@ -24,7 +24,8 @@ static int stack_try_add(struct reftable_stack *st, void *arg), void *arg); static int stack_write_compact(struct reftable_stack *st, - struct reftable_writer *wr, int first, int last, + struct reftable_writer *wr, + size_t first, size_t last, struct reftable_log_expiry_config *config); static int stack_check_addition(struct reftable_stack *st, const char *new_tab_name); @@ -57,8 +58,7 @@ static int reftable_fd_flush(void *arg) int reftable_new_stack(struct reftable_stack **dest, const char *dir, struct reftable_write_options config) { - struct reftable_stack *p = - reftable_calloc(sizeof(struct reftable_stack)); + struct reftable_stack *p = reftable_calloc(1, sizeof(*p)); struct strbuf list_file_name = STRBUF_INIT; int err = 0; @@ -101,7 +101,7 @@ static int fd_read_lines(int fd, char ***namesp) goto done; } - buf = reftable_malloc(size + 1); + REFTABLE_ALLOC_ARRAY(buf, size + 1); if (read_in_full(fd, buf, size) != size) { err = REFTABLE_IO_ERROR; goto done; @@ -121,7 +121,7 @@ int read_lines(const char *filename, char ***namesp) int err = 0; if (fd < 0) { if (errno == ENOENT) { - *namesp = reftable_calloc(sizeof(char *)); + REFTABLE_CALLOC_ARRAY(*namesp, 1); return 0; } @@ -198,8 +198,7 @@ void reftable_stack_destroy(struct reftable_stack *st) static struct reftable_reader **stack_copy_readers(struct reftable_stack *st, int cur_len) { - struct reftable_reader **cur = - reftable_calloc(sizeof(struct reftable_reader *) * cur_len); + struct reftable_reader **cur = reftable_calloc(cur_len, sizeof(*cur)); int i = 0; for (i = 0; i < cur_len; i++) { cur[i] = st->readers[i]; @@ -210,18 +209,18 @@ static struct reftable_reader **stack_copy_readers(struct reftable_stack *st, static int reftable_stack_reload_once(struct reftable_stack *st, char **names, int reuse_open) { - int cur_len = !st->merged ? 0 : st->merged->stack_len; + size_t cur_len = !st->merged ? 0 : st->merged->stack_len; struct reftable_reader **cur = stack_copy_readers(st, cur_len); - int err = 0; - int names_len = names_length(names); + size_t names_len = names_length(names); struct reftable_reader **new_readers = - reftable_calloc(sizeof(struct reftable_reader *) * names_len); + reftable_calloc(names_len, sizeof(*new_readers)); struct reftable_table *new_tables = - reftable_calloc(sizeof(struct reftable_table) * names_len); - int new_readers_len = 0; + reftable_calloc(names_len, sizeof(*new_tables)); + size_t new_readers_len = 0; struct reftable_merged_table *new_merged = NULL; struct strbuf table_path = STRBUF_INIT; - int i; + int err = 0; + size_t i; while (*names) { struct reftable_reader *rd = NULL; @@ -229,11 +228,10 @@ static int reftable_stack_reload_once(struct reftable_stack *st, char **names, /* this is linear; we assume compaction keeps the number of tables under control so this is not quadratic. */ - int j = 0; - for (j = 0; reuse_open && j < cur_len; j++) { - if (cur[j] && 0 == strcmp(cur[j]->name, name)) { - rd = cur[j]; - cur[j] = NULL; + for (i = 0; reuse_open && i < cur_len; i++) { + if (cur[i] && 0 == strcmp(cur[i]->name, name)) { + rd = cur[i]; + cur[i] = NULL; break; } } @@ -351,7 +349,7 @@ static int reftable_stack_reload_maybe_reuse(struct reftable_stack *st, goto out; } - names = reftable_calloc(sizeof(char *)); + REFTABLE_CALLOC_ARRAY(names, 1); } else { err = fd_read_lines(fd, &names); if (err < 0) @@ -558,7 +556,7 @@ struct reftable_addition { struct reftable_stack *stack; char **new_tables; - int new_tables_len; + size_t new_tables_len, new_tables_cap; uint64_t next_update_index; }; @@ -609,8 +607,9 @@ done: static void reftable_addition_close(struct reftable_addition *add) { - int i = 0; struct strbuf nm = STRBUF_INIT; + size_t i; + for (i = 0; i < add->new_tables_len; i++) { stack_filename(&nm, add->stack, add->new_tables[i]); unlink(nm.buf); @@ -620,6 +619,7 @@ static void reftable_addition_close(struct reftable_addition *add) reftable_free(add->new_tables); add->new_tables = NULL; add->new_tables_len = 0; + add->new_tables_cap = 0; delete_tempfile(&add->lock_file); strbuf_release(&nm); @@ -638,8 +638,8 @@ int reftable_addition_commit(struct reftable_addition *add) { struct strbuf table_list = STRBUF_INIT; int lock_file_fd = get_tempfile_fd(add->lock_file); - int i = 0; int err = 0; + size_t i; if (add->new_tables_len == 0) goto done; @@ -670,12 +670,12 @@ int reftable_addition_commit(struct reftable_addition *add) } /* success, no more state to clean up. */ - for (i = 0; i < add->new_tables_len; i++) { + for (i = 0; i < add->new_tables_len; i++) reftable_free(add->new_tables[i]); - } reftable_free(add->new_tables); add->new_tables = NULL; add->new_tables_len = 0; + add->new_tables_cap = 0; err = reftable_stack_reload_maybe_reuse(add->stack, 1); if (err) @@ -694,7 +694,7 @@ int reftable_stack_new_addition(struct reftable_addition **dest, { int err = 0; struct reftable_addition empty = REFTABLE_ADDITION_INIT; - *dest = reftable_calloc(sizeof(**dest)); + REFTABLE_CALLOC_ARRAY(*dest, 1); **dest = empty; err = reftable_stack_init_addition(*dest, st); if (err) { @@ -802,11 +802,9 @@ int reftable_addition_add(struct reftable_addition *add, goto done; } - add->new_tables = reftable_realloc(add->new_tables, - sizeof(*add->new_tables) * - (add->new_tables_len + 1)); - add->new_tables[add->new_tables_len] = strbuf_detach(&next_name, NULL); - add->new_tables_len++; + REFTABLE_ALLOC_GROW(add->new_tables, add->new_tables_len + 1, + add->new_tables_cap); + add->new_tables[add->new_tables_len++] = strbuf_detach(&next_name, NULL); done: if (tab_fd > 0) { close(tab_fd); @@ -832,7 +830,8 @@ uint64_t reftable_stack_next_update_index(struct reftable_stack *st) return 1; } -static int stack_compact_locked(struct reftable_stack *st, int first, int last, +static int stack_compact_locked(struct reftable_stack *st, + size_t first, size_t last, struct strbuf *temp_tab, struct reftable_log_expiry_config *config) { @@ -882,22 +881,21 @@ done: } static int stack_write_compact(struct reftable_stack *st, - struct reftable_writer *wr, int first, int last, + struct reftable_writer *wr, + size_t first, size_t last, struct reftable_log_expiry_config *config) { - int subtabs_len = last - first + 1; + size_t subtabs_len = last - first + 1; struct reftable_table *subtabs = reftable_calloc( - sizeof(struct reftable_table) * (last - first + 1)); + last - first + 1, sizeof(*subtabs)); struct reftable_merged_table *mt = NULL; - int err = 0; struct reftable_iterator it = { NULL }; struct reftable_ref_record ref = { NULL }; struct reftable_log_record log = { NULL }; - uint64_t entries = 0; + int err = 0; - int i = 0, j = 0; - for (i = first, j = 0; i <= last; i++) { + for (size_t i = first, j = 0; i <= last; i++) { struct reftable_reader *t = st->readers[i]; reftable_table_from_reader(&subtabs[j++], t); st->stats.bytes += t->size; @@ -981,25 +979,20 @@ done: } /* < 0: error. 0 == OK, > 0 attempt failed; could retry. */ -static int stack_compact_range(struct reftable_stack *st, int first, int last, +static int stack_compact_range(struct reftable_stack *st, + size_t first, size_t last, struct reftable_log_expiry_config *expiry) { + char **delete_on_success = NULL, **subtable_locks = NULL, **listp = NULL; struct strbuf temp_tab_file_name = STRBUF_INIT; struct strbuf new_table_name = STRBUF_INIT; struct strbuf lock_file_name = STRBUF_INIT; struct strbuf ref_list_contents = STRBUF_INIT; struct strbuf new_table_path = STRBUF_INIT; + size_t i, j, compact_count; int err = 0; int have_lock = 0; int lock_file_fd = -1; - int compact_count = last - first + 1; - char **listp = NULL; - char **delete_on_success = - reftable_calloc(sizeof(char *) * (compact_count + 1)); - char **subtable_locks = - reftable_calloc(sizeof(char *) * (compact_count + 1)); - int i = 0; - int j = 0; int is_empty_table = 0; if (first > last || (!expiry && first == last)) { @@ -1007,6 +1000,10 @@ static int stack_compact_range(struct reftable_stack *st, int first, int last, goto done; } + compact_count = last - first + 1; + REFTABLE_CALLOC_ARRAY(delete_on_success, compact_count + 1); + REFTABLE_CALLOC_ARRAY(subtable_locks, compact_count + 1); + st->stats.attempts++; strbuf_reset(&lock_file_name); @@ -1172,12 +1169,14 @@ static int stack_compact_range(struct reftable_stack *st, int first, int last, done: free_names(delete_on_success); - listp = subtable_locks; - while (*listp) { - unlink(*listp); - listp++; + if (subtable_locks) { + listp = subtable_locks; + while (*listp) { + unlink(*listp); + listp++; + } + free_names(subtable_locks); } - free_names(subtable_locks); if (lock_file_fd >= 0) { close(lock_file_fd); lock_file_fd = -1; @@ -1196,17 +1195,17 @@ done: int reftable_stack_compact_all(struct reftable_stack *st, struct reftable_log_expiry_config *config) { - return stack_compact_range(st, 0, st->merged->stack_len - 1, config); + return stack_compact_range(st, 0, st->merged->stack_len ? + st->merged->stack_len - 1 : 0, config); } -static int stack_compact_range_stats(struct reftable_stack *st, int first, - int last, +static int stack_compact_range_stats(struct reftable_stack *st, + size_t first, size_t last, struct reftable_log_expiry_config *config) { int err = stack_compact_range(st, first, last, config); - if (err > 0) { + if (err > 0) st->stats.failures++; - } return err; } @@ -1226,12 +1225,11 @@ int fastlog2(uint64_t sz) return l - 1; } -struct segment *sizes_to_segments(int *seglen, uint64_t *sizes, int n) +struct segment *sizes_to_segments(size_t *seglen, uint64_t *sizes, size_t n) { - struct segment *segs = reftable_calloc(sizeof(struct segment) * n); - int next = 0; + struct segment *segs = reftable_calloc(n, sizeof(*segs)); struct segment cur = { 0 }; - int i = 0; + size_t next = 0, i; if (n == 0) { *seglen = 0; @@ -1257,29 +1255,27 @@ struct segment *sizes_to_segments(int *seglen, uint64_t *sizes, int n) return segs; } -struct segment suggest_compaction_segment(uint64_t *sizes, int n) +struct segment suggest_compaction_segment(uint64_t *sizes, size_t n) { - int seglen = 0; - struct segment *segs = sizes_to_segments(&seglen, sizes, n); struct segment min_seg = { .log = 64, }; - int i = 0; + struct segment *segs; + size_t seglen = 0, i; + + segs = sizes_to_segments(&seglen, sizes, n); for (i = 0; i < seglen; i++) { - if (segment_size(&segs[i]) == 1) { + if (segment_size(&segs[i]) == 1) continue; - } - if (segs[i].log < min_seg.log) { + if (segs[i].log < min_seg.log) min_seg = segs[i]; - } } while (min_seg.start > 0) { - int prev = min_seg.start - 1; - if (fastlog2(min_seg.bytes) < fastlog2(sizes[prev])) { + size_t prev = min_seg.start - 1; + if (fastlog2(min_seg.bytes) < fastlog2(sizes[prev])) break; - } min_seg.start = prev; min_seg.bytes += sizes[prev]; @@ -1292,7 +1288,7 @@ struct segment suggest_compaction_segment(uint64_t *sizes, int n) static uint64_t *stack_table_sizes_for_compaction(struct reftable_stack *st) { uint64_t *sizes = - reftable_calloc(sizeof(uint64_t) * st->merged->stack_len); + reftable_calloc(st->merged->stack_len, sizeof(*sizes)); int version = (st->config.hash_id == GIT_SHA1_FORMAT_ID) ? 1 : 2; int overhead = header_size(version) - 1; int i = 0; @@ -1391,17 +1387,12 @@ static int stack_check_addition(struct reftable_stack *st, while (1) { struct reftable_ref_record ref = { NULL }; err = reftable_iterator_next_ref(&it, &ref); - if (err > 0) { + if (err > 0) break; - } if (err < 0) goto done; - if (len >= cap) { - cap = 2 * cap + 1; - refs = reftable_realloc(refs, cap * sizeof(refs[0])); - } - + REFTABLE_ALLOC_GROW(refs, len + 1, cap); refs[len++] = ref; } diff --git a/reftable/stack.h b/reftable/stack.h index c1e3efa899..d919455669 100644 --- a/reftable/stack.h +++ b/reftable/stack.h @@ -32,13 +32,13 @@ struct reftable_stack { int read_lines(const char *filename, char ***lines); struct segment { - int start, end; + size_t start, end; int log; uint64_t bytes; }; int fastlog2(uint64_t sz); -struct segment *sizes_to_segments(int *seglen, uint64_t *sizes, int n); -struct segment suggest_compaction_segment(uint64_t *sizes, int n); +struct segment *sizes_to_segments(size_t *seglen, uint64_t *sizes, size_t n); +struct segment suggest_compaction_segment(uint64_t *sizes, size_t n); #endif diff --git a/reftable/stack_test.c b/reftable/stack_test.c index 5089392f7b..509f486623 100644 --- a/reftable/stack_test.c +++ b/reftable/stack_test.c @@ -732,7 +732,7 @@ static void test_sizes_to_segments(void) uint64_t sizes[] = { 2, 3, 4, 5, 7, 9 }; /* .................0 1 2 3 4 5 */ - int seglen = 0; + size_t seglen = 0; struct segment *segs = sizes_to_segments(&seglen, sizes, ARRAY_SIZE(sizes)); EXPECT(segs[2].log == 3); @@ -747,7 +747,7 @@ static void test_sizes_to_segments(void) static void test_sizes_to_segments_empty(void) { - int seglen = 0; + size_t seglen = 0; struct segment *segs = sizes_to_segments(&seglen, NULL, 0); EXPECT(seglen == 0); reftable_free(segs); @@ -756,8 +756,7 @@ static void test_sizes_to_segments_empty(void) static void test_sizes_to_segments_all_equal(void) { uint64_t sizes[] = { 5, 5 }; - - int seglen = 0; + size_t seglen = 0; struct segment *segs = sizes_to_segments(&seglen, sizes, ARRAY_SIZE(sizes)); EXPECT(seglen == 1); diff --git a/reftable/tree.c b/reftable/tree.c index a5bf880985..528f33ae38 100644 --- a/reftable/tree.c +++ b/reftable/tree.c @@ -20,8 +20,8 @@ struct tree_node *tree_search(void *key, struct tree_node **rootp, if (!insert) { return NULL; } else { - struct tree_node *n = - reftable_calloc(sizeof(struct tree_node)); + struct tree_node *n; + REFTABLE_CALLOC_ARRAY(n, 1); n->key = key; *rootp = n; return *rootp; diff --git a/reftable/writer.c b/reftable/writer.c index 92935baa70..1d9ff0fbfa 100644 --- a/reftable/writer.c +++ b/reftable/writer.c @@ -49,7 +49,7 @@ static int padded_write(struct reftable_writer *w, uint8_t *data, size_t len, { int n = 0; if (w->pending_padding > 0) { - uint8_t *zeroed = reftable_calloc(w->pending_padding); + uint8_t *zeroed = reftable_calloc(w->pending_padding, sizeof(*zeroed)); int n = w->write(w->write_arg, zeroed, w->pending_padding); if (n < 0) return n; @@ -124,8 +124,7 @@ reftable_new_writer(ssize_t (*writer_func)(void *, const void *, size_t), int (*flush_func)(void *), void *writer_arg, struct reftable_write_options *opts) { - struct reftable_writer *wp = - reftable_calloc(sizeof(struct reftable_writer)); + struct reftable_writer *wp = reftable_calloc(1, sizeof(*wp)); strbuf_init(&wp->block_writer_data.last_key, 0); options_set_defaults(opts); if (opts->block_size >= (1 << 24)) { @@ -133,7 +132,7 @@ reftable_new_writer(ssize_t (*writer_func)(void *, const void *, size_t), abort(); } wp->last_key = reftable_empty_strbuf; - wp->block = reftable_calloc(opts->block_size); + REFTABLE_CALLOC_ARRAY(wp->block, opts->block_size); wp->write = writer_func; wp->write_arg = writer_arg; wp->opts = *opts; @@ -202,12 +201,7 @@ static void writer_index_hash(struct reftable_writer *w, struct strbuf *hash) return; } - if (key->offset_len == key->offset_cap) { - key->offset_cap = 2 * key->offset_cap + 1; - key->offsets = reftable_realloc( - key->offsets, sizeof(uint64_t) * key->offset_cap); - } - + REFTABLE_ALLOC_GROW(key->offsets, key->offset_len + 1, key->offset_cap); key->offsets[key->offset_len++] = off; } @@ -379,20 +373,39 @@ int reftable_writer_add_logs(struct reftable_writer *w, static int writer_finish_section(struct reftable_writer *w) { + struct reftable_block_stats *bstats = NULL; uint8_t typ = block_writer_type(w->block_writer); uint64_t index_start = 0; int max_level = 0; - int threshold = w->opts.unpadded ? 1 : 3; + size_t threshold = w->opts.unpadded ? 1 : 3; int before_blocks = w->stats.idx_stats.blocks; - int err = writer_flush_block(w); - int i = 0; - struct reftable_block_stats *bstats = NULL; + int err; + + err = writer_flush_block(w); if (err < 0) return err; + /* + * When the section we are about to index has a lot of blocks then the + * index itself may span across multiple blocks, as well. This would + * require a linear scan over index blocks only to find the desired + * indexed block, which is inefficient. Instead, we write a multi-level + * index where index records of level N+1 will refer to index blocks of + * level N. This isn't constant time, either, but at least logarithmic. + * + * This loop handles writing this multi-level index. Note that we write + * the lowest-level index pointing to the indexed blocks first. We then + * continue writing additional index levels until the current level has + * less blocks than the threshold so that the highest level will be at + * the end of the index section. + * + * Readers are thus required to start reading the index section from + * its end, which is why we set `index_start` to the beginning of the + * last index section. + */ while (w->index_len > threshold) { struct reftable_index_record *idx = NULL; - int idx_len = 0; + size_t i, idx_len; max_level++; index_start = w->next; @@ -411,33 +424,26 @@ static int writer_finish_section(struct reftable_writer *w) .idx = idx[i], }, }; - if (block_writer_add(w->block_writer, &rec) == 0) { - continue; - } - err = writer_flush_block(w); + err = writer_add_record(w, &rec); if (err < 0) return err; + } - writer_reinit_block_writer(w, BLOCK_TYPE_INDEX); + err = writer_flush_block(w); + if (err < 0) + return err; - err = block_writer_add(w->block_writer, &rec); - if (err != 0) { - /* write into fresh block should always succeed - */ - abort(); - } - } - for (i = 0; i < idx_len; i++) { + for (i = 0; i < idx_len; i++) strbuf_release(&idx[i].last_key); - } reftable_free(idx); } - err = writer_flush_block(w); - if (err < 0) - return err; - + /* + * The index may still contain a number of index blocks lower than the + * threshold. Clear it so that these entries don't leak into the next + * index section. + */ writer_clear_index(w); bstats = writer_reftable_block_stats(w, typ); @@ -630,11 +636,8 @@ done: static void writer_clear_index(struct reftable_writer *w) { - int i = 0; - for (i = 0; i < w->index_len; i++) { + for (size_t i = 0; i < w->index_len; i++) strbuf_release(&w->index[i].last_key); - } - FREE_AND_NULL(w->index); w->index_len = 0; w->index_cap = 0; @@ -682,12 +685,7 @@ static int writer_flush_nonempty_block(struct reftable_writer *w) if (err < 0) return err; - if (w->index_cap == w->index_len) { - w->index_cap = 2 * w->index_cap + 1; - w->index = reftable_realloc( - w->index, - sizeof(struct reftable_index_record) * w->index_cap); - } + REFTABLE_ALLOC_GROW(w->index, w->index_len + 1, w->index_cap); ir.offset = w->next; strbuf_reset(&ir.last_key); @@ -105,7 +105,7 @@ static int remotes_hash_cmp(const void *cmp_data UNUSED, b = container_of(entry_or_key, const struct remote, ent); if (key) - return strncmp(a->name, key->str, key->len) || a->name[key->len]; + return !!xstrncmpz(a->name, key->str, key->len); else return strcmp(a->name, b->name); } @@ -189,8 +189,7 @@ static int branches_hash_cmp(const void *cmp_data UNUSED, b = container_of(entry_or_key, const struct branch, ent); if (key) - return strncmp(a->name, key->str, key->len) || - a->name[key->len]; + return !!xstrncmpz(a->name, key->str, key->len); else return strcmp(a->name, b->name); } diff --git a/repo-settings.c b/repo-settings.c index 30cd478762..a0b590bc6c 100644 --- a/repo-settings.c +++ b/repo-settings.c @@ -43,6 +43,7 @@ void prepare_repo_settings(struct repository *r) if (experimental) { r->settings.fetch_negotiation_algorithm = FETCH_NEGOTIATION_SKIPPING; r->settings.pack_use_bitmap_boundary_traversal = 1; + r->settings.pack_use_multi_pack_reuse = 1; } if (manyfiles) { r->settings.index_version = 4; diff --git a/repository.h b/repository.h index 1645cef518..9bf1e33d25 100644 --- a/repository.h +++ b/repository.h @@ -40,6 +40,7 @@ struct repo_settings { int sparse_index; int pack_read_reverse_index; int pack_use_bitmap_boundary_traversal; + int pack_use_multi_pack_reuse; /* * Does this repository have core.useReplaceRefs=true (on by @@ -973,6 +973,9 @@ static int handle_cache(struct index_state *istate, mmfile[i].ptr = repo_read_object_file(the_repository, &ce->oid, &type, &size); + if (!mmfile[i].ptr) + die(_("unable to read %s"), + oid_to_hex(&ce->oid)); mmfile[i].size = size; } } diff --git a/revision.c b/revision.c index 2424c9bd67..ac45c6d8f2 100644 --- a/revision.c +++ b/revision.c @@ -1686,9 +1686,7 @@ static int handle_one_reflog_ent(struct object_id *ooid, struct object_id *noid, return 0; } -static int handle_one_reflog(const char *refname_in_wt, - const struct object_id *oid UNUSED, - int flag UNUSED, void *cb_data) +static int handle_one_reflog(const char *refname_in_wt, void *cb_data) { struct all_refs_cb *cb = cb_data; struct strbuf refname = STRBUF_INIT; diff --git a/sequencer.c b/sequencer.c index 91de546b32..f49a871ac0 100644 --- a/sequencer.c +++ b/sequencer.c @@ -3641,6 +3641,7 @@ static int do_exec(struct repository *r, const char *command_line) fprintf(stderr, _("Executing: %s\n"), command_line); cmd.use_shell = 1; strvec_push(&cmd.args, command_line); + strvec_push(&cmd.env, "GIT_CHERRY_PICK_HELP"); status = run_command(&cmd); /* force re-reading of the cache */ diff --git a/submodule.c b/submodule.c index 213da79f66..40f13a3685 100644 --- a/submodule.c +++ b/submodule.c @@ -1687,8 +1687,6 @@ static int get_next_submodule(struct child_process *cp, struct strbuf *err, task = get_fetch_task_from_changed(spf, err); if (task) { - struct strbuf submodule_prefix = STRBUF_INIT; - child_process_init(cp); cp->dir = task->repo->gitdir; prepare_submodule_repo_env_in_gitdir(&cp->env); @@ -1698,15 +1696,11 @@ static int get_next_submodule(struct child_process *cp, struct strbuf *err, strvec_pushv(&cp->args, task->git_args.v); strvec_pushv(&cp->args, spf->args.v); strvec_push(&cp->args, task->default_argv); - strvec_push(&cp->args, "--submodule-prefix"); + strvec_pushf(&cp->args, "--submodule-prefix=%s%s/", + spf->prefix, task->sub->path); - strbuf_addf(&submodule_prefix, "%s%s/", - spf->prefix, - task->sub->path); - strvec_push(&cp->args, submodule_prefix.buf); *task_cb = task; - strbuf_release(&submodule_prefix); string_list_insert(&spf->seen_submodule_names, task->sub->name); return 1; } @@ -1714,12 +1708,8 @@ static int get_next_submodule(struct child_process *cp, struct strbuf *err, if (spf->oid_fetch_tasks_nr) { struct fetch_task *task = spf->oid_fetch_tasks[spf->oid_fetch_tasks_nr - 1]; - struct strbuf submodule_prefix = STRBUF_INIT; spf->oid_fetch_tasks_nr--; - strbuf_addf(&submodule_prefix, "%s%s/", - spf->prefix, task->sub->path); - child_process_init(cp); prepare_submodule_repo_env_in_gitdir(&cp->env); cp->git_cmd = 1; @@ -1728,8 +1718,8 @@ static int get_next_submodule(struct child_process *cp, struct strbuf *err, strvec_init(&cp->args); strvec_pushv(&cp->args, spf->args.v); strvec_push(&cp->args, "on-demand"); - strvec_push(&cp->args, "--submodule-prefix"); - strvec_push(&cp->args, submodule_prefix.buf); + strvec_pushf(&cp->args, "--submodule-prefix=%s%s/", + spf->prefix, task->sub->path); /* NEEDSWORK: have get_default_remote from submodule--helper */ strvec_push(&cp->args, "origin"); @@ -1737,7 +1727,6 @@ static int get_next_submodule(struct child_process *cp, struct strbuf *err, append_oid_to_argv, &cp->args); *task_cb = task; - strbuf_release(&submodule_prefix); return 1; } diff --git a/t/helper/test-ref-store.c b/t/helper/test-ref-store.c index 702ec1f128..7a0f6cac53 100644 --- a/t/helper/test-ref-store.c +++ b/t/helper/test-ref-store.c @@ -221,15 +221,21 @@ static int cmd_verify_ref(struct ref_store *refs, const char **argv) return ret; } +static int each_reflog(const char *refname, void *cb_data UNUSED) +{ + printf("%s\n", refname); + return 0; +} + static int cmd_for_each_reflog(struct ref_store *refs, const char **argv UNUSED) { - return refs_for_each_reflog(refs, each_ref, NULL); + return refs_for_each_reflog(refs, each_reflog, NULL); } -static int each_reflog(struct object_id *old_oid, struct object_id *new_oid, - const char *committer, timestamp_t timestamp, - int tz, const char *msg, void *cb_data UNUSED) +static int each_reflog_ent(struct object_id *old_oid, struct object_id *new_oid, + const char *committer, timestamp_t timestamp, + int tz, const char *msg, void *cb_data UNUSED) { printf("%s %s %s %" PRItime " %+05d%s%s", oid_to_hex(old_oid), oid_to_hex(new_oid), committer, timestamp, tz, @@ -241,14 +247,14 @@ static int cmd_for_each_reflog_ent(struct ref_store *refs, const char **argv) { const char *refname = notnull(*argv++, "refname"); - return refs_for_each_reflog_ent(refs, refname, each_reflog, refs); + return refs_for_each_reflog_ent(refs, refname, each_reflog_ent, refs); } static int cmd_for_each_reflog_ent_reverse(struct ref_store *refs, const char **argv) { const char *refname = notnull(*argv++, "refname"); - return refs_for_each_reflog_ent_reverse(refs, refname, each_reflog, refs); + return refs_for_each_reflog_ent_reverse(refs, refname, each_reflog_ent, refs); } static int cmd_reflog_exists(struct ref_store *refs, const char **argv) diff --git a/t/lib-credential.sh b/t/lib-credential.sh index 15fc9a31e2..44799c0d38 100644 --- a/t/lib-credential.sh +++ b/t/lib-credential.sh @@ -50,6 +50,7 @@ helper_test_clean() { reject $1 https example.com user-overwrite reject $1 https example.com user-erase1 reject $1 https example.com user-erase2 + reject $1 https victim.example.com user reject $1 http path.tld user reject $1 https timeout.tld user reject $1 https sso.tld diff --git a/t/t0303-credential-external.sh b/t/t0303-credential-external.sh index 095574bfc6..72ae405c3e 100755 --- a/t/t0303-credential-external.sh +++ b/t/t0303-credential-external.sh @@ -32,9 +32,24 @@ commands. . ./test-lib.sh . "$TEST_DIRECTORY"/lib-credential.sh +# If we're not given a specific external helper to run against, +# there isn't much to test. But we can still run through our +# battery of tests with a fake helper and check that the +# test themselves are self-consistent and clean up after +# themselves. +# +# We'll use the "store" helper, since we can easily inspect +# its state by looking at the on-disk file. But since it doesn't +# implement any caching or expiry logic, we'll cheat and override +# the "check" function to just report all results as OK. if test -z "$GIT_TEST_CREDENTIAL_HELPER"; then - skip_all="used to test external credential helpers" - test_done + GIT_TEST_CREDENTIAL_HELPER=store + GIT_TEST_CREDENTIAL_HELPER_TIMEOUT=store + check () { + test "$1" = "approve" || return 0 + git -c credential.helper=store credential approve + } + check_cleanup=t fi test -z "$GIT_TEST_CREDENTIAL_HELPER_SETUP" || @@ -59,4 +74,11 @@ fi # might be long-term system storage helper_test_clean "$GIT_TEST_CREDENTIAL_HELPER" +if test "$check_cleanup" = "t" +then + test_expect_success 'test cleanup removes everything' ' + test_must_be_empty "$HOME/.git-credentials" + ' +fi + test_done diff --git a/t/t0410-partial-clone.sh b/t/t0410-partial-clone.sh index 6b6424b3df..0f98b21be8 100755 --- a/t/t0410-partial-clone.sh +++ b/t/t0410-partial-clone.sh @@ -49,7 +49,7 @@ test_expect_success 'convert shallow clone to partial clone' ' test_cmp_config -C client 1 core.repositoryformatversion ' -test_expect_success SHA1,REFFILES 'convert to partial clone with noop extension' ' +test_expect_success DEFAULT_REPO_FORMAT 'convert to partial clone with noop extension' ' rm -fr server client && test_create_repo server && test_commit -C server my_commit 1 && @@ -60,7 +60,7 @@ test_expect_success SHA1,REFFILES 'convert to partial clone with noop extension' git -C client fetch --unshallow --filter="blob:none" ' -test_expect_success SHA1,REFFILES 'converting to partial clone fails with unrecognized extension' ' +test_expect_success DEFAULT_REPO_FORMAT 'converting to partial clone fails with unrecognized extension' ' rm -fr server client && test_create_repo server && test_commit -C server my_commit 1 && diff --git a/t/t0600-reffiles-backend.sh b/t/t0600-reffiles-backend.sh index e6a5f1868f..64214340e7 100755 --- a/t/t0600-reffiles-backend.sh +++ b/t/t0600-reffiles-backend.sh @@ -279,31 +279,31 @@ test_expect_success 'setup worktree' ' # direct FS access for creating the reflogs. 3) PSEUDO-WT and refs/bisect/random # do not create reflogs by default, so it is not testing a realistic scenario. test_expect_success 'for_each_reflog()' ' - echo $ZERO_OID > .git/logs/PSEUDO-MAIN && + echo $ZERO_OID >.git/logs/PSEUDO_MAIN_HEAD && mkdir -p .git/logs/refs/bisect && - echo $ZERO_OID > .git/logs/refs/bisect/random && + echo $ZERO_OID >.git/logs/refs/bisect/random && - echo $ZERO_OID > .git/worktrees/wt/logs/PSEUDO-WT && + echo $ZERO_OID >.git/worktrees/wt/logs/PSEUDO_WT_HEAD && mkdir -p .git/worktrees/wt/logs/refs/bisect && - echo $ZERO_OID > .git/worktrees/wt/logs/refs/bisect/wt-random && + echo $ZERO_OID >.git/worktrees/wt/logs/refs/bisect/wt-random && - $RWT for-each-reflog | cut -d" " -f 2- | sort >actual && + $RWT for-each-reflog >actual && cat >expected <<-\EOF && - HEAD 0x1 - PSEUDO-WT 0x0 - refs/bisect/wt-random 0x0 - refs/heads/main 0x0 - refs/heads/wt-main 0x0 + HEAD + PSEUDO_WT_HEAD + refs/bisect/wt-random + refs/heads/main + refs/heads/wt-main EOF test_cmp expected actual && - $RMAIN for-each-reflog | cut -d" " -f 2- | sort >actual && + $RMAIN for-each-reflog >actual && cat >expected <<-\EOF && - HEAD 0x1 - PSEUDO-MAIN 0x0 - refs/bisect/random 0x0 - refs/heads/main 0x0 - refs/heads/wt-main 0x0 + HEAD + PSEUDO_MAIN_HEAD + refs/bisect/random + refs/heads/main + refs/heads/wt-main EOF test_cmp expected actual ' @@ -381,4 +381,95 @@ test_expect_success 'log diagnoses bogus HEAD symref' ' test_grep broken stderr ' +test_expect_success 'empty directory removal' ' + git branch d1/d2/r1 HEAD && + git branch d1/r2 HEAD && + test_path_is_file .git/refs/heads/d1/d2/r1 && + test_path_is_file .git/logs/refs/heads/d1/d2/r1 && + git branch -d d1/d2/r1 && + test_must_fail git show-ref --verify -q refs/heads/d1/d2 && + test_must_fail git show-ref --verify -q logs/refs/heads/d1/d2 && + test_path_is_file .git/refs/heads/d1/r2 && + test_path_is_file .git/logs/refs/heads/d1/r2 +' + +test_expect_success 'symref empty directory removal' ' + git branch e1/e2/r1 HEAD && + git branch e1/r2 HEAD && + git checkout e1/e2/r1 && + test_when_finished "git checkout main" && + test_path_is_file .git/refs/heads/e1/e2/r1 && + test_path_is_file .git/logs/refs/heads/e1/e2/r1 && + git update-ref -d HEAD && + test_must_fail git show-ref --verify -q refs/heads/e1/e2 && + test_must_fail git show-ref --verify -q logs/refs/heads/e1/e2 && + test_path_is_file .git/refs/heads/e1/r2 && + test_path_is_file .git/logs/refs/heads/e1/r2 && + test_path_is_file .git/logs/HEAD +' + +test_expect_success 'directory not created deleting packed ref' ' + git branch d1/d2/r1 HEAD && + git pack-refs --all && + test_path_is_missing .git/refs/heads/d1/d2 && + git update-ref -d refs/heads/d1/d2/r1 && + test_path_is_missing .git/refs/heads/d1/d2 && + test_path_is_missing .git/refs/heads/d1 +' + +test_expect_success SYMLINKS 'git branch -m u v should fail when the reflog for u is a symlink' ' + git branch --create-reflog u && + mv .git/logs/refs/heads/u real-u && + ln -s real-u .git/logs/refs/heads/u && + test_must_fail git branch -m u v +' + +test_expect_success SYMLINKS 'git branch -m with symlinked .git/refs' ' + test_when_finished "rm -rf subdir" && + git init --bare subdir && + + rm -rfv subdir/refs subdir/objects subdir/packed-refs && + ln -s ../.git/refs subdir/refs && + ln -s ../.git/objects subdir/objects && + ln -s ../.git/packed-refs subdir/packed-refs && + + git -C subdir rev-parse --absolute-git-dir >subdir.dir && + git rev-parse --absolute-git-dir >our.dir && + ! test_cmp subdir.dir our.dir && + + git -C subdir log && + git -C subdir branch rename-src && + git rev-parse rename-src >expect && + git -C subdir branch -m rename-src rename-dest && + git rev-parse rename-dest >actual && + test_cmp expect actual && + git branch -D rename-dest +' + +test_expect_success MINGW,SYMLINKS_WINDOWS 'rebase when .git/logs is a symlink' ' + git checkout main && + mv .git/logs actual_logs && + cmd //c "mklink /D .git\logs ..\actual_logs" && + git rebase -f HEAD^ && + test -L .git/logs && + rm .git/logs && + mv actual_logs .git/logs +' + +test_expect_success POSIXPERM 'git reflog expire honors core.sharedRepository' ' + umask 077 && + git config core.sharedRepository group && + git reflog expire --all && + actual="$(ls -l .git/logs/refs/heads/main)" && + case "$actual" in + -rw-rw-*) + : happy + ;; + *) + echo Ooops, .git/logs/refs/heads/main is not 066x [$actual] + false + ;; + esac +' + test_done diff --git a/t/t1301-shared-repo.sh b/t/t1301-shared-repo.sh index 8e2c01e760..b1eb5c01b8 100755 --- a/t/t1301-shared-repo.sh +++ b/t/t1301-shared-repo.sh @@ -137,22 +137,6 @@ test_expect_success POSIXPERM 'info/refs respects umask in unshared repo' ' test_cmp expect actual ' -test_expect_success REFFILES,POSIXPERM 'git reflog expire honors core.sharedRepository' ' - umask 077 && - git config core.sharedRepository group && - git reflog expire --all && - actual="$(ls -l .git/logs/refs/heads/main)" && - case "$actual" in - -rw-rw-*) - : happy - ;; - *) - echo Ooops, .git/logs/refs/heads/main is not 066x [$actual] - false - ;; - esac -' - test_expect_success POSIXPERM 'forced modes' ' test_when_finished "rm -rf new" && mkdir -p templates/hooks && diff --git a/t/t1400-update-ref.sh b/t/t1400-update-ref.sh index f18843bf7a..6ebc3ef945 100755 --- a/t/t1400-update-ref.sh +++ b/t/t1400-update-ref.sh @@ -288,33 +288,6 @@ test_expect_success "set $m (logged by touch)" ' test $A = $(git show-ref -s --verify $m) ' -test_expect_success REFFILES 'empty directory removal' ' - git branch d1/d2/r1 HEAD && - git branch d1/r2 HEAD && - test_path_is_file .git/refs/heads/d1/d2/r1 && - test_path_is_file .git/logs/refs/heads/d1/d2/r1 && - git branch -d d1/d2/r1 && - test_must_fail git show-ref --verify -q refs/heads/d1/d2 && - test_must_fail git show-ref --verify -q logs/refs/heads/d1/d2 && - test_path_is_file .git/refs/heads/d1/r2 && - test_path_is_file .git/logs/refs/heads/d1/r2 -' - -test_expect_success REFFILES 'symref empty directory removal' ' - git branch e1/e2/r1 HEAD && - git branch e1/r2 HEAD && - git checkout e1/e2/r1 && - test_when_finished "git checkout main" && - test_path_is_file .git/refs/heads/e1/e2/r1 && - test_path_is_file .git/logs/refs/heads/e1/e2/r1 && - git update-ref -d HEAD && - test_must_fail git show-ref --verify -q refs/heads/e1/e2 && - test_must_fail git show-ref --verify -q logs/refs/heads/e1/e2 && - test_path_is_file .git/refs/heads/e1/r2 && - test_path_is_file .git/logs/refs/heads/e1/r2 && - test_path_is_file .git/logs/HEAD -' - cat >expect <<EOF $Z $A $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150200 +0000 Initial Creation $A $B $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150260 +0000 Switch @@ -453,15 +426,15 @@ test_expect_success 'Query "main@{2005-05-28}" (past end of history)' ' rm -f expect git update-ref -d $m -test_expect_success REFFILES 'query reflog with gap' ' +test_expect_success 'query reflog with gap' ' test_when_finished "git update-ref -d $m" && - git update-ref $m $F && - cat >.git/logs/$m <<-EOF && - $Z $A $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150320 -0500 - $A $B $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150380 -0500 - $D $F $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL> 1117150680 -0500 - EOF + GIT_COMMITTER_DATE="1117150320 -0500" git update-ref $m $A && + GIT_COMMITTER_DATE="1117150380 -0500" git update-ref $m $B && + GIT_COMMITTER_DATE="1117150480 -0500" git update-ref $m $C && + GIT_COMMITTER_DATE="1117150580 -0500" git update-ref $m $D && + GIT_COMMITTER_DATE="1117150680 -0500" git update-ref $m $F && + git reflog delete $m@{2} && git rev-parse --verify "main@{2005-05-26 23:33:01}" >actual 2>stderr && echo "$B" >expect && @@ -524,51 +497,51 @@ test_expect_success 'given old value for missing pseudoref, do not create' ' test_expect_success 'create pseudoref' ' git update-ref PSEUDOREF $A && - test $A = $(git rev-parse PSEUDOREF) + test $A = $(git show-ref -s --verify PSEUDOREF) ' test_expect_success 'overwrite pseudoref with no old value given' ' git update-ref PSEUDOREF $B && - test $B = $(git rev-parse PSEUDOREF) + test $B = $(git show-ref -s --verify PSEUDOREF) ' test_expect_success 'overwrite pseudoref with correct old value' ' git update-ref PSEUDOREF $C $B && - test $C = $(git rev-parse PSEUDOREF) + test $C = $(git show-ref -s --verify PSEUDOREF) ' test_expect_success 'do not overwrite pseudoref with wrong old value' ' test_must_fail git update-ref PSEUDOREF $D $E 2>err && - test $C = $(git rev-parse PSEUDOREF) && + test $C = $(git show-ref -s --verify PSEUDOREF) && test_grep "cannot lock ref.*expected" err ' test_expect_success 'delete pseudoref' ' git update-ref -d PSEUDOREF && - test_must_fail git rev-parse PSEUDOREF + test_must_fail git show-ref -s --verify PSEUDOREF ' test_expect_success 'do not delete pseudoref with wrong old value' ' git update-ref PSEUDOREF $A && test_must_fail git update-ref -d PSEUDOREF $B 2>err && - test $A = $(git rev-parse PSEUDOREF) && + test $A = $(git show-ref -s --verify PSEUDOREF) && test_grep "cannot lock ref.*expected" err ' test_expect_success 'delete pseudoref with correct old value' ' git update-ref -d PSEUDOREF $A && - test_must_fail git rev-parse PSEUDOREF + test_must_fail git show-ref -s --verify PSEUDOREF ' test_expect_success 'create pseudoref with old OID zero' ' git update-ref PSEUDOREF $A $Z && - test $A = $(git rev-parse PSEUDOREF) + test $A = $(git show-ref -s --verify PSEUDOREF) ' test_expect_success 'do not overwrite pseudoref with old OID zero' ' test_when_finished git update-ref -d PSEUDOREF && test_must_fail git update-ref PSEUDOREF $B $Z 2>err && - test $A = $(git rev-parse PSEUDOREF) && + test $A = $(git show-ref -s --verify PSEUDOREF) && test_grep "already exists" err ' @@ -1668,13 +1641,4 @@ test_expect_success PIPE 'transaction flushes status updates' ' test_cmp expected actual ' -test_expect_success REFFILES 'directory not created deleting packed ref' ' - git branch d1/d2/r1 HEAD && - git pack-refs --all && - test_path_is_missing .git/refs/heads/d1/d2 && - git update-ref -d refs/heads/d1/d2/r1 && - test_path_is_missing .git/refs/heads/d1/d2 && - test_path_is_missing .git/refs/heads/d1 -' - test_done diff --git a/t/t1403-show-ref.sh b/t/t1403-show-ref.sh index d0a8f7b121..33fb7a38ff 100755 --- a/t/t1403-show-ref.sh +++ b/t/t1403-show-ref.sh @@ -174,6 +174,14 @@ test_expect_success 'show-ref --verify HEAD' ' test_must_be_empty actual ' +test_expect_success 'show-ref --verify pseudorefs' ' + git update-ref CHERRY_PICK_HEAD HEAD $ZERO_OID && + test_when_finished "git update-ref -d CHERRY_PICK_HEAD" && + git show-ref -s --verify HEAD >actual && + git show-ref -s --verify CHERRY_PICK_HEAD >expect && + test_cmp actual expect +' + test_expect_success 'show-ref --verify with dangling ref' ' sha1_file() { echo "$*" | sed "s#..#.git/objects/&/#" diff --git a/t/t1404-update-ref-errors.sh b/t/t1404-update-ref-errors.sh index 00b7013705..98e9158bd2 100755 --- a/t/t1404-update-ref-errors.sh +++ b/t/t1404-update-ref-errors.sh @@ -92,9 +92,6 @@ df_test() { else delname="$delref" fi && - cat >expected-err <<-EOF && - fatal: cannot lock ref $SQ$addname$SQ: $SQ$delref$SQ exists; cannot create $SQ$addref$SQ - EOF $pack && if $add_del then @@ -103,7 +100,7 @@ df_test() { printf "%s\n" "delete $delname" "create $addname $D" fi >commands && test_must_fail git update-ref --stdin <commands 2>output.err && - test_cmp expected-err output.err && + grep "fatal:\( cannot lock ref $SQ$addname$SQ:\)\? $SQ$delref$SQ exists; cannot create $SQ$addref$SQ" output.err && printf "%s\n" "$C $delref" >expected-refs && git for-each-ref --format="%(objectname) %(refname)" $prefix/r >actual-refs && test_cmp expected-refs actual-refs @@ -191,69 +188,69 @@ test_expect_success 'one new ref is a simple prefix of another' ' ' -test_expect_success REFFILES 'D/F conflict prevents add long + delete short' ' +test_expect_success 'D/F conflict prevents add long + delete short' ' df_test refs/df-al-ds --add-del foo/bar foo ' -test_expect_success REFFILES 'D/F conflict prevents add short + delete long' ' +test_expect_success 'D/F conflict prevents add short + delete long' ' df_test refs/df-as-dl --add-del foo foo/bar ' -test_expect_success REFFILES 'D/F conflict prevents delete long + add short' ' +test_expect_success 'D/F conflict prevents delete long + add short' ' df_test refs/df-dl-as --del-add foo/bar foo ' -test_expect_success REFFILES 'D/F conflict prevents delete short + add long' ' +test_expect_success 'D/F conflict prevents delete short + add long' ' df_test refs/df-ds-al --del-add foo foo/bar ' -test_expect_success REFFILES 'D/F conflict prevents add long + delete short packed' ' +test_expect_success 'D/F conflict prevents add long + delete short packed' ' df_test refs/df-al-dsp --pack --add-del foo/bar foo ' -test_expect_success REFFILES 'D/F conflict prevents add short + delete long packed' ' +test_expect_success 'D/F conflict prevents add short + delete long packed' ' df_test refs/df-as-dlp --pack --add-del foo foo/bar ' -test_expect_success REFFILES 'D/F conflict prevents delete long packed + add short' ' +test_expect_success 'D/F conflict prevents delete long packed + add short' ' df_test refs/df-dlp-as --pack --del-add foo/bar foo ' -test_expect_success REFFILES 'D/F conflict prevents delete short packed + add long' ' +test_expect_success 'D/F conflict prevents delete short packed + add long' ' df_test refs/df-dsp-al --pack --del-add foo foo/bar ' # Try some combinations involving symbolic refs... -test_expect_success REFFILES 'D/F conflict prevents indirect add long + delete short' ' +test_expect_success 'D/F conflict prevents indirect add long + delete short' ' df_test refs/df-ial-ds --sym-add --add-del foo/bar foo ' -test_expect_success REFFILES 'D/F conflict prevents indirect add long + indirect delete short' ' +test_expect_success 'D/F conflict prevents indirect add long + indirect delete short' ' df_test refs/df-ial-ids --sym-add --sym-del --add-del foo/bar foo ' -test_expect_success REFFILES 'D/F conflict prevents indirect add short + indirect delete long' ' +test_expect_success 'D/F conflict prevents indirect add short + indirect delete long' ' df_test refs/df-ias-idl --sym-add --sym-del --add-del foo foo/bar ' -test_expect_success REFFILES 'D/F conflict prevents indirect delete long + indirect add short' ' +test_expect_success 'D/F conflict prevents indirect delete long + indirect add short' ' df_test refs/df-idl-ias --sym-add --sym-del --del-add foo/bar foo ' -test_expect_success REFFILES 'D/F conflict prevents indirect add long + delete short packed' ' +test_expect_success 'D/F conflict prevents indirect add long + delete short packed' ' df_test refs/df-ial-dsp --sym-add --pack --add-del foo/bar foo ' -test_expect_success REFFILES 'D/F conflict prevents indirect add long + indirect delete short packed' ' +test_expect_success 'D/F conflict prevents indirect add long + indirect delete short packed' ' df_test refs/df-ial-idsp --sym-add --sym-del --pack --add-del foo/bar foo ' -test_expect_success REFFILES 'D/F conflict prevents add long + indirect delete short packed' ' +test_expect_success 'D/F conflict prevents add long + indirect delete short packed' ' df_test refs/df-al-idsp --sym-del --pack --add-del foo/bar foo ' -test_expect_success REFFILES 'D/F conflict prevents indirect delete long packed + indirect add short' ' +test_expect_success 'D/F conflict prevents indirect delete long packed + indirect add short' ' df_test refs/df-idlp-ias --sym-add --sym-del --pack --del-add foo/bar foo ' diff --git a/t/t1405-main-ref-store.sh b/t/t1405-main-ref-store.sh index 976bd71efb..a6bcd62ab6 100755 --- a/t/t1405-main-ref-store.sh +++ b/t/t1405-main-ref-store.sh @@ -33,12 +33,6 @@ test_expect_success 'delete_refs(FOO, refs/tags/new-tag)' ' test_must_fail git rev-parse refs/tags/new-tag -- ' -# In reftable, we keep the reflogs around for deleted refs. -test_expect_success !REFFILES 'delete-reflog(FOO, refs/tags/new-tag)' ' - $RUN delete-reflog FOO && - $RUN delete-reflog refs/tags/new-tag -' - test_expect_success 'rename_refs(main, new-main)' ' git rev-parse main >expected && $RUN rename-ref refs/heads/main refs/heads/new-main && @@ -74,11 +68,11 @@ test_expect_success 'verify_ref(new-main)' ' ' test_expect_success 'for_each_reflog()' ' - $RUN for-each-reflog | sort -k2 | cut -d" " -f 2- >actual && + $RUN for-each-reflog >actual && cat >expected <<-\EOF && - HEAD 0x1 - refs/heads/main 0x0 - refs/heads/new-main 0x0 + HEAD + refs/heads/main + refs/heads/new-main EOF test_cmp expected actual ' diff --git a/t/t1406-submodule-ref-store.sh b/t/t1406-submodule-ref-store.sh index e6a7f7334b..c01f0f14a1 100755 --- a/t/t1406-submodule-ref-store.sh +++ b/t/t1406-submodule-ref-store.sh @@ -63,11 +63,11 @@ test_expect_success 'verify_ref(new-main)' ' ' test_expect_success 'for_each_reflog()' ' - $RUN for-each-reflog | sort | cut -d" " -f 2- >actual && + $RUN for-each-reflog >actual && cat >expected <<-\EOF && - HEAD 0x1 - refs/heads/main 0x0 - refs/heads/new-main 0x0 + HEAD + refs/heads/main + refs/heads/new-main EOF test_cmp expected actual ' diff --git a/t/t1410-reflog.sh b/t/t1410-reflog.sh index d2f5f42e67..5bf883f1e3 100755 --- a/t/t1410-reflog.sh +++ b/t/t1410-reflog.sh @@ -436,4 +436,112 @@ test_expect_success 'empty reflog' ' test_must_be_empty err ' +test_expect_success 'list reflogs' ' + test_when_finished "rm -rf repo" && + git init repo && + ( + cd repo && + git reflog list >actual && + test_must_be_empty actual && + + test_commit A && + cat >expect <<-EOF && + HEAD + refs/heads/main + EOF + git reflog list >actual && + test_cmp expect actual && + + git branch b && + cat >expect <<-EOF && + HEAD + refs/heads/b + refs/heads/main + EOF + git reflog list >actual && + test_cmp expect actual + ) +' + +test_expect_success 'list reflogs with worktree' ' + test_when_finished "rm -rf repo" && + git init repo && + ( + cd repo && + + test_commit A && + git worktree add wt && + git -c core.logAllRefUpdates=always \ + update-ref refs/worktree/main HEAD && + git -c core.logAllRefUpdates=always \ + update-ref refs/worktree/per-worktree HEAD && + git -c core.logAllRefUpdates=always -C wt \ + update-ref refs/worktree/per-worktree HEAD && + git -c core.logAllRefUpdates=always -C wt \ + update-ref refs/worktree/worktree HEAD && + + cat >expect <<-EOF && + HEAD + refs/heads/main + refs/heads/wt + refs/worktree/main + refs/worktree/per-worktree + EOF + git reflog list >actual && + test_cmp expect actual && + + cat >expect <<-EOF && + HEAD + refs/heads/main + refs/heads/wt + refs/worktree/per-worktree + refs/worktree/worktree + EOF + git -C wt reflog list >actual && + test_cmp expect actual + ) +' + +test_expect_success 'reflog list returns error with additional args' ' + cat >expect <<-EOF && + error: list does not accept arguments: ${SQ}bogus${SQ} + EOF + test_must_fail git reflog list bogus 2>err && + test_cmp expect err +' + +test_expect_success 'reflog for symref with unborn target can be listed' ' + test_when_finished "rm -rf repo" && + git init repo && + ( + cd repo && + test_commit A && + git symbolic-ref HEAD refs/heads/unborn && + cat >expect <<-EOF && + HEAD + refs/heads/main + EOF + git reflog list >actual && + test_cmp expect actual + ) +' + +test_expect_success 'reflog with invalid object ID can be listed' ' + test_when_finished "rm -rf repo" && + git init repo && + ( + cd repo && + test_commit A && + test-tool ref-store main update-ref msg refs/heads/missing \ + $(test_oid deadbeef) "$ZERO_OID" REF_SKIP_OID_VERIFICATION && + cat >expect <<-EOF && + HEAD + refs/heads/main + refs/heads/missing + EOF + git reflog list >actual && + test_cmp expect actual + ) +' + test_done diff --git a/t/t2011-checkout-invalid-head.sh b/t/t2011-checkout-invalid-head.sh index 3c8135831b..04f53b1ea1 100755 --- a/t/t2011-checkout-invalid-head.sh +++ b/t/t2011-checkout-invalid-head.sh @@ -29,36 +29,33 @@ test_expect_success REFFILES 'checkout notices failure to lock HEAD' ' test_must_fail git checkout -b other ' -test_expect_success REFFILES 'create ref directory/file conflict scenario' ' +test_expect_success 'create ref directory/file conflict scenario' ' git update-ref refs/heads/outer/inner main && - - # do not rely on symbolic-ref to get a known state, - # as it may use the same code we are testing reset_to_df () { - echo "ref: refs/heads/outer" >.git/HEAD + git symbolic-ref HEAD refs/heads/outer } ' -test_expect_success REFFILES 'checkout away from d/f HEAD (unpacked, to branch)' ' +test_expect_success 'checkout away from d/f HEAD (unpacked, to branch)' ' reset_to_df && git checkout main ' -test_expect_success REFFILES 'checkout away from d/f HEAD (unpacked, to detached)' ' +test_expect_success 'checkout away from d/f HEAD (unpacked, to detached)' ' reset_to_df && git checkout --detach main ' -test_expect_success REFFILES 'pack refs' ' +test_expect_success 'pack refs' ' git pack-refs --all --prune ' -test_expect_success REFFILES 'checkout away from d/f HEAD (packed, to branch)' ' +test_expect_success 'checkout away from d/f HEAD (packed, to branch)' ' reset_to_df && git checkout main ' -test_expect_success REFFILES 'checkout away from d/f HEAD (packed, to detached)' ' +test_expect_success 'checkout away from d/f HEAD (packed, to detached)' ' reset_to_df && git checkout --detach main ' diff --git a/t/t2016-checkout-patch.sh b/t/t2016-checkout-patch.sh index 747eb5563e..c4f9bf09aa 100755 --- a/t/t2016-checkout-patch.sh +++ b/t/t2016-checkout-patch.sh @@ -38,26 +38,32 @@ test_expect_success 'git checkout -p with staged changes' ' verify_state dir/foo index index ' -test_expect_success 'git checkout -p HEAD with NO staged changes: abort' ' - set_and_save_state dir/foo work head && - test_write_lines n y n | git checkout -p HEAD && - verify_saved_state bar && - verify_saved_state dir/foo -' - -test_expect_success 'git checkout -p HEAD with NO staged changes: apply' ' - test_write_lines n y y | git checkout -p HEAD && - verify_saved_state bar && - verify_state dir/foo head head -' - -test_expect_success 'git checkout -p HEAD with change already staged' ' - set_state dir/foo index index && - # the third n is to get out in case it mistakenly does not apply - test_write_lines n y n | git checkout -p HEAD && - verify_saved_state bar && - verify_state dir/foo head head -' +for opt in "HEAD" "@" +do + test_expect_success "git checkout -p $opt with NO staged changes: abort" ' + set_and_save_state dir/foo work head && + test_write_lines n y n | git checkout -p $opt >output && + verify_saved_state bar && + verify_saved_state dir/foo && + test_grep "Discard" output + ' + + test_expect_success "git checkout -p $opt with NO staged changes: apply" ' + test_write_lines n y y | git checkout -p $opt >output && + verify_saved_state bar && + verify_state dir/foo head head && + test_grep "Discard" output + ' + + test_expect_success "git checkout -p $opt with change already staged" ' + set_state dir/foo index index && + # the third n is to get out in case it mistakenly does not apply + test_write_lines n y n | git checkout -p $opt >output && + verify_saved_state bar && + verify_state dir/foo head head && + test_grep "Discard" output + ' +done test_expect_success 'git checkout -p HEAD^...' ' # the third n is to get out in case it mistakenly does not apply diff --git a/t/t2020-checkout-detach.sh b/t/t2020-checkout-detach.sh index 8202ef8c74..bce284c297 100755 --- a/t/t2020-checkout-detach.sh +++ b/t/t2020-checkout-detach.sh @@ -45,6 +45,18 @@ test_expect_success 'checkout branch does not detach' ' check_not_detached ' +for opt in "HEAD" "@" +do + test_expect_success "checkout $opt no-op/don't detach" ' + reset && + cat .git/HEAD >expect && + git checkout $opt && + cat .git/HEAD >actual && + check_not_detached && + test_cmp expect actual + ' +done + test_expect_success 'checkout tag detaches' ' reset && git checkout tag && diff --git a/t/t2024-checkout-dwim.sh b/t/t2024-checkout-dwim.sh index a97416ce65..a3b1449ef1 100755 --- a/t/t2024-checkout-dwim.sh +++ b/t/t2024-checkout-dwim.sh @@ -113,7 +113,7 @@ test_expect_success 'checkout of branch from multiple remotes fails with advice' test_grep ! "^hint: " stderr ' -test_expect_success PERL 'checkout -p with multiple remotes does not print advice' ' +test_expect_success 'checkout -p with multiple remotes does not print advice' ' git checkout -B main && test_might_fail git branch -D foo && diff --git a/t/t2071-restore-patch.sh b/t/t2071-restore-patch.sh index b5c5c0ff7e..27e85be40a 100755 --- a/t/t2071-restore-patch.sh +++ b/t/t2071-restore-patch.sh @@ -4,7 +4,7 @@ test_description='git restore --patch' . ./lib-patch-mode.sh -test_expect_success PERL 'setup' ' +test_expect_success 'setup' ' mkdir dir && echo parent >dir/foo && echo dummy >bar && @@ -16,43 +16,47 @@ test_expect_success PERL 'setup' ' save_head ' -test_expect_success PERL 'restore -p without pathspec is fine' ' +test_expect_success 'restore -p without pathspec is fine' ' echo q >cmd && git restore -p <cmd ' # note: bar sorts before dir/foo, so the first 'n' is always to skip 'bar' -test_expect_success PERL 'saying "n" does nothing' ' +test_expect_success 'saying "n" does nothing' ' set_and_save_state dir/foo work head && test_write_lines n n | git restore -p && verify_saved_state bar && verify_saved_state dir/foo ' -test_expect_success PERL 'git restore -p' ' +test_expect_success 'git restore -p' ' set_and_save_state dir/foo work head && test_write_lines n y | git restore -p && verify_saved_state bar && verify_state dir/foo head head ' -test_expect_success PERL 'git restore -p with staged changes' ' +test_expect_success 'git restore -p with staged changes' ' set_state dir/foo work index && test_write_lines n y | git restore -p && verify_saved_state bar && verify_state dir/foo index index ' -test_expect_success PERL 'git restore -p --source=HEAD' ' - set_state dir/foo work index && - # the third n is to get out in case it mistakenly does not apply - test_write_lines n y n | git restore -p --source=HEAD && - verify_saved_state bar && - verify_state dir/foo head index -' - -test_expect_success PERL 'git restore -p --source=HEAD^' ' +for opt in "HEAD" "@" +do + test_expect_success "git restore -p --source=$opt" ' + set_state dir/foo work index && + # the third n is to get out in case it mistakenly does not apply + test_write_lines n y n | git restore -p --source=$opt >output && + verify_saved_state bar && + verify_state dir/foo head index && + test_grep "Discard" output + ' +done + +test_expect_success 'git restore -p --source=HEAD^' ' set_state dir/foo work index && # the third n is to get out in case it mistakenly does not apply test_write_lines n y n | git restore -p --source=HEAD^ && @@ -60,7 +64,7 @@ test_expect_success PERL 'git restore -p --source=HEAD^' ' verify_state dir/foo parent index ' -test_expect_success PERL 'git restore -p --source=HEAD^...' ' +test_expect_success 'git restore -p --source=HEAD^...' ' set_state dir/foo work index && # the third n is to get out in case it mistakenly does not apply test_write_lines n y n | git restore -p --source=HEAD^... && @@ -68,7 +72,7 @@ test_expect_success PERL 'git restore -p --source=HEAD^...' ' verify_state dir/foo parent index ' -test_expect_success PERL 'git restore -p handles deletion' ' +test_expect_success 'git restore -p handles deletion' ' set_state dir/foo work index && rm dir/foo && test_write_lines n y | git restore -p && @@ -81,21 +85,21 @@ test_expect_success PERL 'git restore -p handles deletion' ' # dir/foo. There's always an extra 'n' to reject edits to dir/foo in # the failure case (and thus get out of the loop). -test_expect_success PERL 'path limiting works: dir' ' +test_expect_success 'path limiting works: dir' ' set_state dir/foo work head && test_write_lines y n | git restore -p dir && verify_saved_state bar && verify_state dir/foo head head ' -test_expect_success PERL 'path limiting works: -- dir' ' +test_expect_success 'path limiting works: -- dir' ' set_state dir/foo work head && test_write_lines y n | git restore -p -- dir && verify_saved_state bar && verify_state dir/foo head head ' -test_expect_success PERL 'path limiting works: HEAD^ -- dir' ' +test_expect_success 'path limiting works: HEAD^ -- dir' ' set_state dir/foo work head && # the third n is to get out in case it mistakenly does not apply test_write_lines y n n | git restore -p --source=HEAD^ -- dir && @@ -103,7 +107,7 @@ test_expect_success PERL 'path limiting works: HEAD^ -- dir' ' verify_state dir/foo parent head ' -test_expect_success PERL 'path limiting works: foo inside dir' ' +test_expect_success 'path limiting works: foo inside dir' ' set_state dir/foo work head && # the third n is to get out in case it mistakenly does not apply test_write_lines y n n | (cd dir && git restore -p foo) && @@ -111,7 +115,7 @@ test_expect_success PERL 'path limiting works: foo inside dir' ' verify_state dir/foo head head ' -test_expect_success PERL 'none of this moved HEAD' ' +test_expect_success 'none of this moved HEAD' ' verify_saved_head ' diff --git a/t/t3200-branch.sh b/t/t3200-branch.sh index de7d3014e4..e36f4d15f2 100755 --- a/t/t3200-branch.sh +++ b/t/t3200-branch.sh @@ -836,35 +836,6 @@ test_expect_success 'renaming a symref is not allowed' ' test_ref_missing refs/heads/new-topic ' -test_expect_success SYMLINKS,REFFILES 'git branch -m u v should fail when the reflog for u is a symlink' ' - git branch --create-reflog u && - mv .git/logs/refs/heads/u real-u && - ln -s real-u .git/logs/refs/heads/u && - test_must_fail git branch -m u v -' - -test_expect_success SYMLINKS,REFFILES 'git branch -m with symlinked .git/refs' ' - test_when_finished "rm -rf subdir" && - git init --bare subdir && - - rm -rfv subdir/refs subdir/objects subdir/packed-refs && - ln -s ../.git/refs subdir/refs && - ln -s ../.git/objects subdir/objects && - ln -s ../.git/packed-refs subdir/packed-refs && - - git -C subdir rev-parse --absolute-git-dir >subdir.dir && - git rev-parse --absolute-git-dir >our.dir && - ! test_cmp subdir.dir our.dir && - - git -C subdir log && - git -C subdir branch rename-src && - git rev-parse rename-src >expect && - git -C subdir branch -m rename-src rename-dest && - git rev-parse rename-dest >actual && - test_cmp expect actual && - git branch -D rename-dest -' - test_expect_success 'test tracking setup via --track' ' git config remote.local.url . && git config remote.local.fetch refs/heads/*:refs/remotes/local/* && diff --git a/t/t3202-show-branch.sh b/t/t3202-show-branch.sh index 6a98b2df76..a1139f79e2 100755 --- a/t/t3202-show-branch.sh +++ b/t/t3202-show-branch.sh @@ -4,9 +4,6 @@ test_description='test show-branch' . ./test-lib.sh -# arbitrary reference time: 2009-08-30 19:20:00 -GIT_TEST_DATE_NOW=1251660000; export GIT_TEST_DATE_NOW - test_expect_success 'error descriptions on empty repository' ' current=$(git branch --show-current) && cat >expect <<-EOF && @@ -187,18 +184,6 @@ test_expect_success 'show branch --merge-base with N arguments' ' test_cmp expect actual ' -test_expect_success 'show branch --reflog=2' ' - sed "s/^> //" >expect <<-\EOF && - > ! [refs/heads/branch10@{0}] (4 years, 5 months ago) commit: branch10 - > ! [refs/heads/branch10@{1}] (4 years, 5 months ago) commit: branch10 - > -- - > + [refs/heads/branch10@{0}] branch10 - > ++ [refs/heads/branch10@{1}] initial - EOF - git show-branch --reflog=2 >actual && - test_cmp actual expect -' - # incompatible options while read combo do @@ -264,4 +249,38 @@ test_expect_success 'error descriptions on orphan branch' ' test_branch_op_in_wt -c new-branch ' +test_expect_success 'setup reflogs' ' + test_commit base && + git checkout -b branch && + test_commit one && + git reset --hard HEAD^ && + test_commit two && + test_commit three +' + +test_expect_success '--reflog shows reflog entries' ' + cat >expect <<-\EOF && + ! [branch@{0}] (0 seconds ago) commit: three + ! [branch@{1}] (60 seconds ago) commit: two + ! [branch@{2}] (2 minutes ago) reset: moving to HEAD^ + ! [branch@{3}] (2 minutes ago) commit: one + ---- + + [branch@{0}] three + ++ [branch@{1}] two + + [branch@{3}] one + ++++ [branch@{2}] base + EOF + # the output always contains relative timestamps; use + # a known time to get deterministic results + GIT_TEST_DATE_NOW=$test_tick \ + git show-branch --reflog branch >actual && + test_cmp expect actual +' + +test_expect_success '--reflog handles missing reflog' ' + git reflog expire --expire=now branch && + git show-branch --reflog branch >actual && + test_must_be_empty actual +' + test_done diff --git a/t/t3400-rebase.sh b/t/t3400-rebase.sh index 57f1392926..e1c8c5f701 100755 --- a/t/t3400-rebase.sh +++ b/t/t3400-rebase.sh @@ -424,16 +424,6 @@ test_expect_success 'refuse to switch to branch checked out elsewhere' ' test_grep "already used by worktree at" err ' -test_expect_success REFFILES,MINGW,SYMLINKS_WINDOWS 'rebase when .git/logs is a symlink' ' - git checkout main && - mv .git/logs actual_logs && - cmd //c "mklink /D .git\logs ..\actual_logs" && - git rebase -f HEAD^ && - test -L .git/logs && - rm .git/logs && - mv actual_logs .git/logs -' - test_expect_success 'rebase when inside worktree subdirectory' ' git init main-wt && ( diff --git a/t/t3404-rebase-interactive.sh b/t/t3404-rebase-interactive.sh index 64b641002e..d1bead61fa 100755 --- a/t/t3404-rebase-interactive.sh +++ b/t/t3404-rebase-interactive.sh @@ -153,6 +153,18 @@ test_expect_success 'rebase -i with the exec command checks tree cleanness' ' git rebase --continue ' +test_expect_success 'cherry-pick works with rebase --exec' ' + test_when_finished "git cherry-pick --abort; \ + git rebase --abort; \ + git checkout primary" && + echo "exec git cherry-pick G" >todo && + ( + set_replace_editor todo && + test_must_fail git rebase -i D D + ) && + test_cmp_rev G CHERRY_PICK_HEAD +' + test_expect_success 'rebase -x with empty command fails' ' test_when_finished "git rebase --abort ||:" && test_must_fail env git rebase -x "" @ 2>actual && diff --git a/t/t3407-rebase-abort.sh b/t/t3407-rebase-abort.sh index ebbaed147a..9f49c4228b 100755 --- a/t/t3407-rebase-abort.sh +++ b/t/t3407-rebase-abort.sh @@ -40,9 +40,24 @@ testrebase() { test_path_is_missing "$state_dir" ' + test_expect_success "pre rebase$type head is marked as reachable" ' + # Clean up the state from the previous one + git checkout -f --detach pre-rebase && + test_tick && + git commit --amend --only -m "reworded" && + orig_head=$(git rev-parse HEAD) && + test_must_fail git rebase$type main && + # Stop ORIG_HEAD marking $state_dir/orig-head as reachable + git update-ref -d ORIG_HEAD && + git reflog expire --expire="$GIT_COMMITTER_DATE" --all && + git prune --expire=now && + git rebase --abort && + test_cmp_rev $orig_head HEAD + ' + test_expect_success "rebase$type --abort after --skip" ' # Clean up the state from the previous one - git reset --hard pre-rebase && + git checkout -B to-rebase pre-rebase && test_must_fail git rebase$type main && test_path_is_dir "$state_dir" && test_must_fail git rebase --skip && diff --git a/t/t3420-rebase-autostash.sh b/t/t3420-rebase-autostash.sh index 693934ee8b..1a820f1481 100755 --- a/t/t3420-rebase-autostash.sh +++ b/t/t3420-rebase-autostash.sh @@ -333,4 +333,14 @@ test_expect_success 'never change active branch' ' test_cmp_rev not-the-feature-branch unrelated-onto-branch ' +test_expect_success 'autostash commit is marked as reachable' ' + echo changed >file0 && + git rebase --autostash --exec "git prune --expire=now" \ + feature-branch^ feature-branch && + # git rebase succeeds if the stash cannot be applied so we need to check + # the contents of file0 + echo changed >expect && + test_cmp expect file0 +' + test_done diff --git a/t/t3903-stash.sh b/t/t3903-stash.sh index 3319240515..00db82fb24 100755 --- a/t/t3903-stash.sh +++ b/t/t3903-stash.sh @@ -1516,4 +1516,56 @@ test_expect_success 'restore untracked files even when we hit conflicts' ' ) ' +test_expect_success 'stash create reports a locked index' ' + test_when_finished "rm -rf repo" && + git init repo && + ( + cd repo && + test_commit A A.file && + echo change >A.file && + touch .git/index.lock && + + cat >expect <<-EOF && + error: could not write index + EOF + test_must_fail git stash create 2>err && + test_cmp expect err + ) +' + +test_expect_success 'stash push reports a locked index' ' + test_when_finished "rm -rf repo" && + git init repo && + ( + cd repo && + test_commit A A.file && + echo change >A.file && + touch .git/index.lock && + + cat >expect <<-EOF && + error: could not write index + EOF + test_must_fail git stash push 2>err && + test_cmp expect err + ) +' + +test_expect_success 'stash apply reports a locked index' ' + test_when_finished "rm -rf repo" && + git init repo && + ( + cd repo && + test_commit A A.file && + echo change >A.file && + git stash push && + touch .git/index.lock && + + cat >expect <<-EOF && + error: could not write index + EOF + test_must_fail git stash apply 2>err && + test_cmp expect err + ) +' + test_done diff --git a/t/t3904-stash-patch.sh b/t/t3904-stash-patch.sh index accfe3845c..368fc2a6cc 100755 --- a/t/t3904-stash-patch.sh +++ b/t/t3904-stash-patch.sh @@ -3,12 +3,6 @@ test_description='stash -p' . ./lib-patch-mode.sh -if ! test_have_prereq PERL -then - skip_all='skipping stash -p tests, perl not available' - test_done -fi - test_expect_success 'setup' ' mkdir dir && echo parent > dir/foo && diff --git a/t/t4042-diff-textconv-caching.sh b/t/t4042-diff-textconv-caching.sh index bf33aedf4b..8ebfa3c1be 100755 --- a/t/t4042-diff-textconv-caching.sh +++ b/t/t4042-diff-textconv-caching.sh @@ -118,4 +118,26 @@ test_expect_success 'log notes cache and still use cache for -p' ' git log --no-walk -p refs/notes/textconv/magic HEAD ' +test_expect_success 'caching is silently ignored outside repo' ' + mkdir -p non-repo && + echo one >non-repo/one && + echo two >non-repo/two && + echo "* diff=test" >attr && + test_expect_code 1 \ + nongit git -c core.attributesFile="$PWD/attr" \ + -c diff.test.textconv="tr a-z A-Z <" \ + -c diff.test.cachetextconv=true \ + diff --no-index one two >actual && + cat >expect <<-\EOF && + diff --git a/one b/two + index 5626abf..f719efd 100644 + --- a/one + +++ b/two + @@ -1 +1 @@ + -ONE + +TWO + EOF + test_cmp expect actual +' + test_done diff --git a/t/t4129-apply-samemode.sh b/t/t4129-apply-samemode.sh index 2775bfadd8..4eb8444029 100755 --- a/t/t4129-apply-samemode.sh +++ b/t/t4129-apply-samemode.sh @@ -103,4 +103,31 @@ test_expect_success POSIXPERM 'do not use core.sharedRepository for working tree ) ' +test_expect_success 'git apply respects core.fileMode' ' + test_config core.fileMode false && + echo true >script.sh && + git add --chmod=+x script.sh && + git ls-files -s script.sh >ls-files-output && + test_grep "^100755" ls-files-output && + test_tick && git commit -m "Add script" && + git ls-tree -r HEAD script.sh >ls-tree-output && + test_grep "^100755" ls-tree-output && + + echo true >>script.sh && + test_tick && git commit -m "Modify script" script.sh && + git format-patch -1 --stdout >patch && + test_grep "^index.*100755$" patch && + + git switch -c branch HEAD^ && + git apply --index patch 2>err && + test_grep ! "has type 100644, expected 100755" err && + git reset --hard && + + git apply patch 2>err && + test_grep ! "has type 100644, expected 100755" err && + + git apply --cached patch 2>err && + test_grep ! "has type 100644, expected 100755" err +' + test_done diff --git a/t/t5332-multi-pack-reuse.sh b/t/t5332-multi-pack-reuse.sh index 99145327a6..3c20738bce 100755 --- a/t/t5332-multi-pack-reuse.sh +++ b/t/t5332-multi-pack-reuse.sh @@ -24,6 +24,27 @@ pack_position () { grep "$1" objects | cut -d" " -f1 } +# test_pack_objects_reused_all <pack-reused> <packs-reused> +test_pack_objects_reused_all () { + : >trace2.txt && + GIT_TRACE2_EVENT="$PWD/trace2.txt" \ + git pack-objects --stdout --revs --all --delta-base-offset \ + >/dev/null && + + test_pack_reused "$1" <trace2.txt && + test_packs_reused "$2" <trace2.txt +} + +# test_pack_objects_reused <pack-reused> <packs-reused> +test_pack_objects_reused () { + : >trace2.txt && + GIT_TRACE2_EVENT="$PWD/trace2.txt" \ + git pack-objects --stdout --revs >/dev/null && + + test_pack_reused "$1" <trace2.txt && + test_packs_reused "$2" <trace2.txt +} + test_expect_success 'preferred pack is reused for single-pack reuse' ' test_config pack.allowPackReuse single && @@ -35,12 +56,24 @@ test_expect_success 'preferred pack is reused for single-pack reuse' ' git multi-pack-index write --bitmap && - : >trace2.txt && - GIT_TRACE2_EVENT="$PWD/trace2.txt" \ - git pack-objects --stdout --revs --all >/dev/null && + test_pack_objects_reused_all 3 1 +' + +test_expect_success 'multi-pack reuse is disabled by default' ' + test_pack_objects_reused_all 3 1 +' + +test_expect_success 'feature.experimental implies multi-pack reuse' ' + test_config feature.experimental true && + + test_pack_objects_reused_all 6 2 +' + +test_expect_success 'multi-pack reuse can be disabled with feature.experimental' ' + test_config feature.experimental true && + test_config pack.allowPackReuse single && - test_pack_reused 3 <trace2.txt && - test_packs_reused 1 <trace2.txt + test_pack_objects_reused_all 3 1 ' test_expect_success 'enable multi-pack reuse' ' @@ -58,21 +91,11 @@ test_expect_success 'reuse all objects from subset of bitmapped packs' ' ^$(git rev-parse A) EOF - : >trace2.txt && - GIT_TRACE2_EVENT="$PWD/trace2.txt" \ - git pack-objects --stdout --revs <in >/dev/null && - - test_pack_reused 6 <trace2.txt && - test_packs_reused 2 <trace2.txt + test_pack_objects_reused 6 2 <in ' test_expect_success 'reuse all objects from all packs' ' - : >trace2.txt && - GIT_TRACE2_EVENT="$PWD/trace2.txt" \ - git pack-objects --stdout --revs --all >/dev/null && - - test_pack_reused 9 <trace2.txt && - test_packs_reused 3 <trace2.txt + test_pack_objects_reused_all 9 3 ' test_expect_success 'reuse objects from first pack with middle gap' ' @@ -105,12 +128,7 @@ test_expect_success 'reuse objects from first pack with middle gap' ' ^$(git rev-parse D) EOF - : >trace2.txt && - GIT_TRACE2_EVENT="$PWD/trace2.txt" \ - git pack-objects --stdout --delta-base-offset --revs <in >/dev/null && - - test_pack_reused 3 <trace2.txt && - test_packs_reused 1 <trace2.txt + test_pack_objects_reused 3 1 <in ' test_expect_success 'reuse objects from middle pack with middle gap' ' @@ -126,12 +144,7 @@ test_expect_success 'reuse objects from middle pack with middle gap' ' ^$(git rev-parse D) EOF - : >trace2.txt && - GIT_TRACE2_EVENT="$PWD/trace2.txt" \ - git pack-objects --stdout --delta-base-offset --revs <in >/dev/null && - - test_pack_reused 3 <trace2.txt && - test_packs_reused 1 <trace2.txt + test_pack_objects_reused 3 1 <in ' test_expect_success 'omit delta with uninteresting base (same pack)' ' @@ -161,10 +174,6 @@ test_expect_success 'omit delta with uninteresting base (same pack)' ' ^$base EOF - : >trace2.txt && - GIT_TRACE2_EVENT="$PWD/trace2.txt" \ - git pack-objects --stdout --delta-base-offset --revs <in >/dev/null && - # We can only reuse the 3 objects corresponding to "other" from # the latest pack. # @@ -176,8 +185,7 @@ test_expect_success 'omit delta with uninteresting base (same pack)' ' # The remaining objects from the other pack are similarly not # reused because their objects are on the uninteresting side of # the query. - test_pack_reused 3 <trace2.txt && - test_packs_reused 1 <trace2.txt + test_pack_objects_reused 3 1 <in ' test_expect_success 'omit delta from uninteresting base (cross pack)' ' @@ -190,15 +198,10 @@ test_expect_success 'omit delta from uninteresting base (cross pack)' ' git multi-pack-index write --bitmap --preferred-pack="pack-$P.idx" && - : >trace2.txt && - GIT_TRACE2_EVENT="$PWD/trace2.txt" \ - git pack-objects --stdout --delta-base-offset --all >/dev/null && - packs_nr="$(find $packdir -type f -name "pack-*.pack" | wc -l)" && objects_nr="$(git rev-list --count --all --objects)" && - test_pack_reused $(($objects_nr - 1)) <trace2.txt && - test_packs_reused $packs_nr <trace2.txt + test_pack_objects_reused_all $(($objects_nr - 1)) $packs_nr ' test_done diff --git a/t/t6300-for-each-ref.sh b/t/t6300-for-each-ref.sh index 843a7fe143..eb6c8204e8 100755 --- a/t/t6300-for-each-ref.sh +++ b/t/t6300-for-each-ref.sh @@ -1356,6 +1356,52 @@ test_expect_success '--no-sort without subsequent --sort prints expected refs' ' test_cmp expected actual ' +test_expect_success 'set up custom date sorting' ' + # Dates: + # - Wed Feb 07 2024 21:34:20 +0000 + # - Tue Dec 14 1999 00:05:22 +0000 + # - Fri Jun 04 2021 11:26:51 +0000 + # - Mon Jan 22 2007 16:44:01 GMT+0000 + i=1 && + for when in 1707341660 945129922 1622806011 1169484241 + do + GIT_COMMITTER_DATE="@$when +0000" \ + GIT_COMMITTER_EMAIL="user@example.com" \ + git tag -m "tag $when" custom-dates-$i && + i=$(($i+1)) || return 1 + done +' + +test_expect_success 'sort by date defaults to full timestamp' ' + cat >expected <<-\EOF && + 945129922 refs/tags/custom-dates-2 + 1169484241 refs/tags/custom-dates-4 + 1622806011 refs/tags/custom-dates-3 + 1707341660 refs/tags/custom-dates-1 + EOF + + git for-each-ref \ + --format="%(creatordate:unix) %(refname)" \ + --sort=creatordate \ + "refs/tags/custom-dates-*" >actual && + test_cmp expected actual +' + +test_expect_success 'sort by custom date format' ' + cat >expected <<-\EOF && + 00:05:22 refs/tags/custom-dates-2 + 11:26:51 refs/tags/custom-dates-3 + 16:44:01 refs/tags/custom-dates-4 + 21:34:20 refs/tags/custom-dates-1 + EOF + + git for-each-ref \ + --format="%(creatordate:format:%H:%M:%S) %(refname)" \ + --sort="creatordate:format:%H:%M:%S" \ + "refs/tags/custom-dates-*" >actual && + test_cmp expected actual +' + test_expect_success 'do not dereference NULL upon %(HEAD) on unborn branch' ' test_when_finished "git checkout main" && git for-each-ref --format="%(HEAD) %(refname:short)" refs/heads/ >actual && diff --git a/t/t6437-submodule-merge.sh b/t/t6437-submodule-merge.sh index 70650521b0..7a3f1cb27c 100755 --- a/t/t6437-submodule-merge.sh +++ b/t/t6437-submodule-merge.sh @@ -113,7 +113,7 @@ test_expect_success 'merging should conflict for non fast-forward' ' git checkout -b test-nonforward-a b && if test "$GIT_TEST_MERGE_ALGORITHM" = ort then - test_must_fail git merge c >actual && + test_must_fail git merge c 2>actual && sub_expect="go to submodule (sub), and either merge commit $(git -C sub rev-parse --short sub-c)" && grep "$sub_expect" actual else @@ -154,9 +154,9 @@ test_expect_success 'merging should conflict for non fast-forward (resolution ex git rev-parse --short sub-d > ../expect) && if test "$GIT_TEST_MERGE_ALGORITHM" = ort then - test_must_fail git merge c >actual && + test_must_fail git merge c >actual 2>sub-actual && sub_expect="go to submodule (sub), and either merge commit $(git -C sub rev-parse --short sub-c)" && - grep "$sub_expect" actual + grep "$sub_expect" sub-actual else test_must_fail git merge c 2> actual fi && @@ -181,9 +181,9 @@ test_expect_success 'merging should fail for ambiguous common parent' ' ) && if test "$GIT_TEST_MERGE_ALGORITHM" = ort then - test_must_fail git merge c >actual && + test_must_fail git merge c >actual 2>sub-actual && sub_expect="go to submodule (sub), and either merge commit $(git -C sub rev-parse --short sub-c)" && - grep "$sub_expect" actual + grep "$sub_expect" sub-actual else test_must_fail git merge c 2> actual fi && @@ -227,7 +227,7 @@ test_expect_success 'merging should fail for changes that are backwards' ' git commit -a -m "f" && git checkout -b test-backward e && - test_must_fail git merge f >actual && + test_must_fail git merge f 2>actual && if test "$GIT_TEST_MERGE_ALGORITHM" = ort then sub_expect="go to submodule (sub), and either merge commit $(git -C sub rev-parse --short sub-d)" && @@ -535,7 +535,7 @@ test_expect_success 'merging should fail with no merge base' ' git checkout -b b init && git add sub && git commit -m "b" && - test_must_fail git merge a >actual && + test_must_fail git merge a 2>actual && if test "$GIT_TEST_MERGE_ALGORITHM" = ort then sub_expect="go to submodule (sub), and either merge commit $(git -C sub rev-parse --short HEAD^1)" && diff --git a/t/t7003-filter-branch.sh b/t/t7003-filter-branch.sh index f6aebe92ff..5ab4d41ee7 100755 --- a/t/t7003-filter-branch.sh +++ b/t/t7003-filter-branch.sh @@ -396,10 +396,7 @@ test_expect_success '--prune-empty is able to prune entire branch' ' git branch prune-entire B && git filter-branch -f --prune-empty --index-filter "git update-index --remove A.t B.t" prune-entire && test_must_fail git rev-parse refs/heads/prune-entire && - if test_have_prereq REFFILES - then - test_must_fail git reflog exists refs/heads/prune-entire - fi + test_must_fail git reflog exists refs/heads/prune-entire ' test_expect_success '--remap-to-ancestor with filename filters' ' diff --git a/t/t7105-reset-patch.sh b/t/t7105-reset-patch.sh index 05079c7246..f4f3b7a677 100755 --- a/t/t7105-reset-patch.sh +++ b/t/t7105-reset-patch.sh @@ -5,7 +5,7 @@ test_description='git reset --patch' TEST_PASSES_SANITIZE_LEAK=true . ./lib-patch-mode.sh -test_expect_success PERL 'setup' ' +test_expect_success 'setup' ' mkdir dir && echo parent > dir/foo && echo dummy > bar && @@ -19,42 +19,46 @@ test_expect_success PERL 'setup' ' # note: bar sorts before foo, so the first 'n' is always to skip 'bar' -test_expect_success PERL 'saying "n" does nothing' ' +test_expect_success 'saying "n" does nothing' ' set_and_save_state dir/foo work work && test_write_lines n n | git reset -p && verify_saved_state dir/foo && verify_saved_state bar ' -test_expect_success PERL 'git reset -p' ' - test_write_lines n y | git reset -p >output && - verify_state dir/foo work head && - verify_saved_state bar && - test_grep "Unstage" output -' - -test_expect_success PERL 'git reset -p HEAD^' ' +for opt in "HEAD" "@" "" +do + test_expect_success "git reset -p $opt" ' + set_and_save_state dir/foo work work && + test_write_lines n y | git reset -p $opt >output && + verify_state dir/foo work head && + verify_saved_state bar && + test_grep "Unstage" output + ' +done + +test_expect_success 'git reset -p HEAD^' ' test_write_lines n y | git reset -p HEAD^ >output && verify_state dir/foo work parent && verify_saved_state bar && test_grep "Apply" output ' -test_expect_success PERL 'git reset -p HEAD^^{tree}' ' +test_expect_success 'git reset -p HEAD^^{tree}' ' test_write_lines n y | git reset -p HEAD^^{tree} >output && verify_state dir/foo work parent && verify_saved_state bar && test_grep "Apply" output ' -test_expect_success PERL 'git reset -p HEAD^:dir/foo (blob fails)' ' +test_expect_success 'git reset -p HEAD^:dir/foo (blob fails)' ' set_and_save_state dir/foo work work && test_must_fail git reset -p HEAD^:dir/foo && verify_saved_state dir/foo && verify_saved_state bar ' -test_expect_success PERL 'git reset -p aaaaaaaa (unknown fails)' ' +test_expect_success 'git reset -p aaaaaaaa (unknown fails)' ' set_and_save_state dir/foo work work && test_must_fail git reset -p aaaaaaaa && verify_saved_state dir/foo && @@ -66,27 +70,27 @@ test_expect_success PERL 'git reset -p aaaaaaaa (unknown fails)' ' # dir/foo. There's always an extra 'n' to reject edits to dir/foo in # the failure case (and thus get out of the loop). -test_expect_success PERL 'git reset -p dir' ' +test_expect_success 'git reset -p dir' ' set_state dir/foo work work && test_write_lines y n | git reset -p dir && verify_state dir/foo work head && verify_saved_state bar ' -test_expect_success PERL 'git reset -p -- foo (inside dir)' ' +test_expect_success 'git reset -p -- foo (inside dir)' ' set_state dir/foo work work && test_write_lines y n | (cd dir && git reset -p -- foo) && verify_state dir/foo work head && verify_saved_state bar ' -test_expect_success PERL 'git reset -p HEAD^ -- dir' ' +test_expect_success 'git reset -p HEAD^ -- dir' ' test_write_lines y n | git reset -p HEAD^ -- dir && verify_state dir/foo work parent && verify_saved_state bar ' -test_expect_success PERL 'none of this moved HEAD' ' +test_expect_success 'none of this moved HEAD' ' verify_saved_head ' diff --git a/t/t7106-reset-unborn-branch.sh b/t/t7106-reset-unborn-branch.sh index d20e5709f9..88d1c8adf4 100755 --- a/t/t7106-reset-unborn-branch.sh +++ b/t/t7106-reset-unborn-branch.sh @@ -34,7 +34,7 @@ test_expect_success 'reset $file' ' test_cmp expect actual ' -test_expect_success PERL 'reset -p' ' +test_expect_success 'reset -p' ' rm .git/index && git add a && echo y >yes && diff --git a/t/t7402-submodule-rebase.sh b/t/t7402-submodule-rebase.sh index 2b3c363078..aa2fdc31d1 100755 --- a/t/t7402-submodule-rebase.sh +++ b/t/t7402-submodule-rebase.sh @@ -116,7 +116,7 @@ test_expect_success 'rebasing submodule that should conflict' ' test_tick && git commit -m fourth && - test_must_fail git rebase --onto HEAD^^ HEAD^ HEAD^0 >actual_output && + test_must_fail git rebase --onto HEAD^^ HEAD^ HEAD^0 2>actual_output && git ls-files -s submodule >actual && ( cd submodule && diff --git a/t/t7502-commit-porcelain.sh b/t/t7502-commit-porcelain.sh index 61c8e810cc..a87c211d0b 100755 --- a/t/t7502-commit-porcelain.sh +++ b/t/t7502-commit-porcelain.sh @@ -485,6 +485,24 @@ test_expect_success 'commit --trailer not confused by --- separator' ' test_cmp expected actual ' +test_expect_success 'commit --trailer with --verbose' ' + cat >msg <<-\EOF && + subject + + body + EOF + GIT_EDITOR=: git commit --edit -F msg --allow-empty \ + --trailer="my-trailer: value" --verbose && + { + cat msg && + echo && + echo "my-trailer: value" + } >expected && + git cat-file commit HEAD >commit.msg && + sed -e "1,/^\$/d" commit.msg >actual && + test_cmp expected actual +' + test_expect_success 'multiple -m' ' >negative && diff --git a/t/t7513-interpret-trailers.sh b/t/t7513-interpret-trailers.sh index 832aff0616..ec9c6de114 100755 --- a/t/t7513-interpret-trailers.sh +++ b/t/t7513-interpret-trailers.sh @@ -1916,4 +1916,23 @@ test_expect_success 'suppress --- handling' ' test_cmp expected actual ' +test_expect_success 'suppressing --- does not disable cut-line handling' ' + echo "real-trailer: before the cut" >expected && + + git interpret-trailers --parse --no-divider >actual <<-\EOF && + subject + + This input has a cut-line in it; we should stop parsing when we see it + and consider only trailers before that line. + + real-trailer: before the cut + + # ------------------------ >8 ------------------------ + # Nothing below this line counts as part of the commit message. + not-a-trailer: too late + EOF + + test_cmp expected actual +' + test_done diff --git a/t/t7514-commit-patch.sh b/t/t7514-commit-patch.sh index 998a2103c7..b4de10a5dd 100755 --- a/t/t7514-commit-patch.sh +++ b/t/t7514-commit-patch.sh @@ -3,12 +3,6 @@ test_description='hunk edit with "commit -p -m"' . ./test-lib.sh -if ! test_have_prereq PERL -then - skip_all="skipping '$test_description' tests, perl not available" - test_done -fi - test_expect_success 'setup (initial)' ' echo line1 >file && git add file && diff --git a/t/t7800-difftool.sh b/t/t7800-difftool.sh index 6a36be1e63..96ae5d5880 100755 --- a/t/t7800-difftool.sh +++ b/t/t7800-difftool.sh @@ -91,58 +91,67 @@ test_expect_success 'difftool forwards arguments to diff' ' rm for-diff ' -test_expect_success 'difftool ignores exit code' ' - test_config difftool.error.cmd false && - git difftool -y -t error branch -' +for opt in '' '--dir-diff' +do + test_expect_success "difftool ${opt} ignores exit code" " + test_config difftool.error.cmd false && + git difftool ${opt} -y -t error branch + " -test_expect_success 'difftool forwards exit code with --trust-exit-code' ' - test_config difftool.error.cmd false && - test_must_fail git difftool -y --trust-exit-code -t error branch -' + test_expect_success "difftool ${opt} forwards exit code with --trust-exit-code" " + test_config difftool.error.cmd false && + test_must_fail git difftool ${opt} -y --trust-exit-code -t error branch + " -test_expect_success 'difftool forwards exit code with --trust-exit-code for built-ins' ' - test_config difftool.vimdiff.path false && - test_must_fail git difftool -y --trust-exit-code -t vimdiff branch -' + test_expect_success "difftool ${opt} forwards exit code with --trust-exit-code for built-ins" " + test_config difftool.vimdiff.path false && + test_must_fail git difftool ${opt} -y --trust-exit-code -t vimdiff branch + " -test_expect_success 'difftool honors difftool.trustExitCode = true' ' - test_config difftool.error.cmd false && - test_config difftool.trustExitCode true && - test_must_fail git difftool -y -t error branch -' + test_expect_success "difftool ${opt} honors difftool.trustExitCode = true" " + test_config difftool.error.cmd false && + test_config difftool.trustExitCode true && + test_must_fail git difftool ${opt} -y -t error branch + " -test_expect_success 'difftool honors difftool.trustExitCode = false' ' - test_config difftool.error.cmd false && - test_config difftool.trustExitCode false && - git difftool -y -t error branch -' + test_expect_success "difftool ${opt} honors difftool.trustExitCode = false" " + test_config difftool.error.cmd false && + test_config difftool.trustExitCode false && + git difftool ${opt} -y -t error branch + " -test_expect_success 'difftool ignores exit code with --no-trust-exit-code' ' - test_config difftool.error.cmd false && - test_config difftool.trustExitCode true && - git difftool -y --no-trust-exit-code -t error branch -' + test_expect_success "difftool ${opt} ignores exit code with --no-trust-exit-code" " + test_config difftool.error.cmd false && + test_config difftool.trustExitCode true && + git difftool ${opt} -y --no-trust-exit-code -t error branch + " -test_expect_success 'difftool stops on error with --trust-exit-code' ' - test_when_finished "rm -f for-diff .git/fail-right-file" && - test_when_finished "git reset -- for-diff" && - write_script .git/fail-right-file <<-\EOF && - echo failed - exit 1 - EOF - >for-diff && - git add for-diff && - test_must_fail git difftool -y --trust-exit-code \ - --extcmd .git/fail-right-file branch >actual && - test_line_count = 1 actual -' + test_expect_success "difftool ${opt} stops on error with --trust-exit-code" " + test_when_finished 'rm -f for-diff .git/fail-right-file' && + test_when_finished 'git reset -- for-diff' && + write_script .git/fail-right-file <<-\EOF && + echo failed + exit 1 + EOF + >for-diff && + git add for-diff && + test_must_fail git difftool ${opt} -y --trust-exit-code \ + --extcmd .git/fail-right-file branch >actual && + test_line_count = 1 actual + " -test_expect_success 'difftool honors exit status if command not found' ' - test_config difftool.nonexistent.cmd i-dont-exist && - test_config difftool.trustExitCode false && - test_must_fail git difftool -y -t nonexistent branch -' + test_expect_success "difftool ${opt} honors exit status if command not found" " + test_config difftool.nonexistent.cmd i-dont-exist && + test_config difftool.trustExitCode false && + if test "${opt}" = '--dir-diff' + then + expected_code=127 + else + expected_code=128 + fi && + test_expect_code \${expected_code} git difftool ${opt} -y -t nonexistent branch + " +done test_expect_success 'difftool honors --gui' ' difftool_test_setup && diff --git a/t/t9002-column.sh b/t/t9002-column.sh index 348cc40658..d5b98e615b 100755 --- a/t/t9002-column.sh +++ b/t/t9002-column.sh @@ -196,4 +196,15 @@ EOF test_cmp expected actual ' +test_expect_success 'padding must be non-negative' ' + cat >input <<\EOF && +1 2 3 4 5 6 +EOF + cat >expected <<\EOF && +fatal: --padding must be non-negative +EOF + test_must_fail git column --mode=column --padding=-1 <input >actual 2>&1 && + test_cmp expected actual +' + test_done diff --git a/t/t9146-git-svn-empty-dirs.sh b/t/t9146-git-svn-empty-dirs.sh index 09606f1b3c..926ac81439 100755 --- a/t/t9146-git-svn-empty-dirs.sh +++ b/t/t9146-git-svn-empty-dirs.sh @@ -20,11 +20,7 @@ test_expect_success 'empty directories exist' ' cd cloned && for i in a b c d d/e d/e/f "weird file name" do - if ! test -d "$i" - then - echo >&2 "$i does not exist" && - exit 1 - fi + test_path_is_dir "$i" || exit 1 done ) ' @@ -37,11 +33,7 @@ test_expect_success 'option automkdirs set to false' ' git svn fetch && for i in a b c d d/e d/e/f "weird file name" do - if test -d "$i" - then - echo >&2 "$i exists" && - exit 1 - fi + test_path_is_missing "$i" || exit 1 done ) ' @@ -52,7 +44,7 @@ test_expect_success 'more emptiness' ' test_expect_success 'git svn rebase creates empty directory' ' ( cd cloned && git svn rebase ) && - test -d cloned/"! !" + test_path_is_dir cloned/"! !" ' test_expect_success 'git svn mkdirs recreates empty directories' ' @@ -62,11 +54,7 @@ test_expect_success 'git svn mkdirs recreates empty directories' ' git svn mkdirs && for i in a b c d d/e d/e/f "weird file name" "! !" do - if ! test -d "$i" - then - echo >&2 "$i does not exist" && - exit 1 - fi + test_path_is_dir "$i" || exit 1 done ) ' @@ -78,25 +66,13 @@ test_expect_success 'git svn mkdirs -r works' ' git svn mkdirs -r7 && for i in a b c d d/e d/e/f "weird file name" do - if ! test -d "$i" - then - echo >&2 "$i does not exist" && - exit 1 - fi + test_path_is_dir "$i" || exit 1 done && - if test -d "! !" - then - echo >&2 "$i should not exist" && - exit 1 - fi && + test_path_is_missing "! !" || exit 1 && git svn mkdirs -r8 && - if ! test -d "! !" - then - echo >&2 "$i not exist" && - exit 1 - fi + test_path_is_dir "! !" || exit 1 ) ' @@ -114,11 +90,7 @@ test_expect_success 'empty directories in trunk exist' ' cd trunk && for i in a "weird file name" do - if ! test -d "$i" - then - echo >&2 "$i does not exist" && - exit 1 - fi + test_path_is_dir "$i" || exit 1 done ) ' @@ -129,7 +101,7 @@ test_expect_success 'remove a top-level directory from svn' ' test_expect_success 'removed top-level directory does not exist' ' git svn clone "$svnrepo" removed && - test ! -e removed/d + test_path_is_missing removed/d ' unhandled=.git/svn/refs/remotes/git-svn/unhandled.log @@ -143,15 +115,11 @@ test_expect_success 'git svn gc-ed files work' ' svn_cmd mkdir -m gz "$svnrepo"/gz && git reset --hard $(git rev-list HEAD | tail -1) && git svn rebase && - test -f "$unhandled".gz && - test -f "$unhandled" && + test_path_is_file "$unhandled".gz && + test_path_is_file "$unhandled" && for i in a b c "weird file name" gz "! !" do - if ! test -d "$i" - then - echo >&2 "$i does not exist" && - exit 1 - fi + test_path_is_dir "$i" || exit 1 done fi ) diff --git a/t/t9210-scalar.sh b/t/t9210-scalar.sh index 4432a30d10..428339e342 100755 --- a/t/t9210-scalar.sh +++ b/t/t9210-scalar.sh @@ -154,7 +154,14 @@ test_expect_success 'scalar clone' ' test_cmp expect actual && test_path_is_missing 1/2 && - test_must_fail git rev-list --missing=print $second && + + # This relies on the fact that the presence of "--missing" + # on the command line forces lazy fetching off before + # "$second^{blob}" gets parsed. Without "^{blob}", a + # bare object name "$second" is taken into the queue and + # the command may not fail with a fixed "rev-list --missing". + test_must_fail git rev-list --missing=print "$second^{blob}" -- && + git rev-list $second && git cat-file blob $second >actual && echo "second" >expect && diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh index 35eb534fdd..b16c284181 100755 --- a/t/t9902-completion.sh +++ b/t/t9902-completion.sh @@ -11,6 +11,11 @@ test_description='test bash completion' # untraceable with such ancient Bash versions. test_untraceable=UnfortunatelyYes +# Override environment and always use master for the default initial branch +# name for these tests, so that rev completion candidates are as expected. +GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=master +export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME + . ./lib-bash.sh complete () @@ -1267,6 +1272,142 @@ test_expect_success 'git switch - with no options, complete local branches and u EOF ' +test_expect_success 'git bisect - when not bisecting, complete only replay and start subcommands' ' + test_completion "git bisect " <<-\EOF + replay Z + start Z + EOF +' + +test_expect_success 'git bisect - complete options to start subcommand' ' + test_completion "git bisect start --" <<-\EOF + --term-new Z + --term-bad Z + --term-old Z + --term-good Z + --no-checkout Z + --first-parent Z + EOF +' + +test_expect_success 'setup for git-bisect tests requiring a repo' ' + git init git-bisect && + ( + cd git-bisect && + echo "initial contents" >file && + git add file && + git commit -am "Initial commit" && + git tag initial && + echo "new line" >>file && + git commit -am "First change" && + echo "another new line" >>file && + git commit -am "Second change" && + git tag final + ) +' + +test_expect_success 'git bisect - start subcommand arguments before double-dash are completed as revs' ' + ( + cd git-bisect && + test_completion "git bisect start " <<-\EOF + HEAD Z + final Z + initial Z + master Z + EOF + ) +' + +# Note that these arguments are <pathspec>s, which in practice the fallback +# completion (not the git completion) later ends up completing as paths. +test_expect_success 'git bisect - start subcommand arguments after double-dash are not completed' ' + ( + cd git-bisect && + test_completion "git bisect start final initial -- " "" + ) +' + +test_expect_success 'setup for git-bisect tests requiring ongoing bisection' ' + ( + cd git-bisect && + git bisect start --term-new=custom_new --term-old=custom_old final initial + ) +' + +test_expect_success 'git-bisect - when bisecting all subcommands are candidates' ' + ( + cd git-bisect && + test_completion "git bisect " <<-\EOF + start Z + bad Z + custom_new Z + custom_old Z + new Z + good Z + old Z + terms Z + skip Z + reset Z + visualize Z + replay Z + log Z + run Z + help Z + EOF + ) +' + +test_expect_success 'git-bisect - options to terms subcommand are candidates' ' + ( + cd git-bisect && + test_completion "git bisect terms --" <<-\EOF + --term-bad Z + --term-good Z + --term-new Z + --term-old Z + EOF + ) +' + +test_expect_success 'git-bisect - git-log options to visualize subcommand are candidates' ' + ( + cd git-bisect && + # The completion used for git-log and here does not complete + # every git-log option, so rather than hope to stay in sync + # with exactly what it does we will just spot-test here. + test_completion "git bisect visualize --sta" <<-\EOF && + --stat Z + EOF + test_completion "git bisect visualize --summar" <<-\EOF + --summary Z + EOF + ) +' + +test_expect_success 'git-bisect - view subcommand is not a candidate' ' + ( + cd git-bisect && + test_completion "git bisect vi" <<-\EOF + visualize Z + EOF + ) +' + +test_expect_success 'git-bisect - existing view subcommand is recognized and enables completion of git-log options' ' + ( + cd git-bisect && + # The completion used for git-log and here does not complete + # every git-log option, so rather than hope to stay in sync + # with exactly what it does we will just spot-test here. + test_completion "git bisect view --sta" <<-\EOF && + --stat Z + EOF + test_completion "git bisect view --summar" <<-\EOF + --summary Z + EOF + ) +' + test_expect_success 'git checkout - completes refs and unique remote branches for DWIM' ' test_completion "git checkout " <<-\EOF HEAD Z @@ -2583,6 +2724,35 @@ test_expect_success 'git config - variable name include' ' EOF ' +test_expect_success 'setup for git config submodule tests' ' + test_create_repo sub && + test_commit -C sub initial && + git submodule add ./sub +' + +test_expect_success 'git config - variable name - submodule and __git_compute_first_level_config_vars_for_section' ' + test_completion "git config submodule." <<-\EOF + submodule.active Z + submodule.alternateErrorStrategy Z + submodule.alternateLocation Z + submodule.fetchJobs Z + submodule.propagateBranches Z + submodule.recurse Z + submodule.sub.Z + EOF +' + +test_expect_success 'git config - variable name - __git_compute_second_level_config_vars_for_section' ' + test_completion "git config submodule.sub." <<-\EOF + submodule.sub.url Z + submodule.sub.update Z + submodule.sub.branch Z + submodule.sub.fetchRecurseSubmodules Z + submodule.sub.ignore Z + submodule.sub.active Z + EOF +' + test_expect_success 'git config - value' ' test_completion "git config color.pager " <<-\EOF false Z diff --git a/t/unit-tests/test-lib.c b/t/unit-tests/test-lib.c index 7bf9dfdb95..66d6980ffb 100644 --- a/t/unit-tests/test-lib.c +++ b/t/unit-tests/test-lib.c @@ -21,12 +21,11 @@ static struct { .result = RESULT_NONE, }; -#ifndef _MSC_VER -#define make_relative(location) location -#else /* * Visual C interpolates the absolute Windows path for `__FILE__`, * but we want to see relative paths, as verified by t0080. + * There are other compilers that do the same, and are not for + * Windows. */ #include "dir.h" @@ -34,32 +33,66 @@ static const char *make_relative(const char *location) { static char prefix[] = __FILE__, buf[PATH_MAX], *p; static size_t prefix_len; + static int need_bs_to_fs = -1; - if (!prefix_len) { + /* one-time preparation */ + if (need_bs_to_fs < 0) { size_t len = strlen(prefix); - const char *needle = "\\t\\unit-tests\\test-lib.c"; + char needle[] = "t\\unit-tests\\test-lib.c"; size_t needle_len = strlen(needle); - if (len < needle_len || strcmp(needle, prefix + len - needle_len)) - die("unexpected suffix of '%s'", prefix); + if (len < needle_len) + die("unexpected prefix '%s'", prefix); + + /* + * The path could be relative (t/unit-tests/test-lib.c) + * or full (/home/user/git/t/unit-tests/test-lib.c). + * Check the slash between "t" and "unit-tests". + */ + prefix_len = len - needle_len; + if (prefix[prefix_len + 1] == '/') { + /* Oh, we're not Windows */ + for (size_t i = 0; i < needle_len; i++) + if (needle[i] == '\\') + needle[i] = '/'; + need_bs_to_fs = 0; + } else { + need_bs_to_fs = 1; + } - /* let it end in a directory separator */ - prefix_len = len - needle_len + 1; + /* + * prefix_len == 0 if the compiler gives paths relative + * to the root of the working tree. Otherwise, we want + * to see that we did find the needle[] at a directory + * boundary. Again we rely on that needle[] begins with + * "t" followed by the directory separator. + */ + if (fspathcmp(needle, prefix + prefix_len) || + (prefix_len && prefix[prefix_len - 1] != needle[1])) + die("unexpected suffix of '%s'", prefix); } - /* Does it not start with the expected prefix? */ - if (fspathncmp(location, prefix, prefix_len)) + /* + * Does it not start with the expected prefix? + * Return it as-is without making it worse. + */ + if (prefix_len && fspathncmp(location, prefix, prefix_len)) return location; - strlcpy(buf, location + prefix_len, sizeof(buf)); + /* + * If we do not need to munge directory separator, we can return + * the substring at the tail of the location. + */ + if (!need_bs_to_fs) + return location + prefix_len; + /* convert backslashes to forward slashes */ + strlcpy(buf, location + prefix_len, sizeof(buf)); for (p = buf; *p; p++) if (*p == '\\') *p = '/'; - return buf; } -#endif static void msg_with_prefix(const char *prefix, const char *format, va_list ap) { @@ -845,16 +845,15 @@ static size_t find_end_of_log_message(const char *input, int no_divider) /* Assume the naive end of the input is already what we want. */ end = strlen(input); - if (no_divider) - return end; - /* Optionally skip over any patch part ("---" line and below). */ - for (s = input; *s; s = next_line(s)) { - const char *v; + if (!no_divider) { + for (s = input; *s; s = next_line(s)) { + const char *v; - if (skip_prefix(s, "---", &v) && isspace(*v)) { - end = s - input; - break; + if (skip_prefix(s, "---", &v) && isspace(*v)) { + end = s - input; + break; + } } } diff --git a/upload-pack.c b/upload-pack.c index 2537affa90..6e0d441ef5 100644 --- a/upload-pack.c +++ b/upload-pack.c @@ -463,7 +463,7 @@ static void create_pack_file(struct upload_pack_data *pack_data, fail: free(output_state); - send_client_data(3, abort_msg, sizeof(abort_msg), + send_client_data(3, abort_msg, strlen(abort_msg), pack_data->use_sideband); die("git upload-pack: %s", abort_msg); } diff --git a/userdiff.c b/userdiff.c index e399543823..92ef649c99 100644 --- a/userdiff.c +++ b/userdiff.c @@ -3,6 +3,7 @@ #include "userdiff.h" #include "attr.h" #include "strbuf.h" +#include "environment.h" static struct userdiff_driver *drivers; static int ndrivers; @@ -323,8 +324,7 @@ static int userdiff_find_by_namelen_cb(struct userdiff_driver *driver, { struct find_by_namelen_data *cb_data = priv; - if (!strncmp(driver->name, cb_data->name, cb_data->len) && - !driver->name[cb_data->len]) { + if (!xstrncmpz(driver->name, cb_data->name, cb_data->len)) { cb_data->driver = driver; return 1; /* tell the caller to stop iterating */ } @@ -460,7 +460,8 @@ struct userdiff_driver *userdiff_get_textconv(struct repository *r, if (!driver->textconv) return NULL; - if (driver->textconv_want_cache && !driver->textconv_cache) { + if (driver->textconv_want_cache && !driver->textconv_cache && + have_git_dir()) { struct notes_cache *c = xmalloc(sizeof(*c)); struct strbuf name = STRBUF_INIT; diff --git a/write-or-die.c b/write-or-die.c index 3942152865..01a9a51fa2 100644 --- a/write-or-die.c +++ b/write-or-die.c @@ -18,20 +18,20 @@ */ void maybe_flush_or_die(FILE *f, const char *desc) { - static int skip_stdout_flush = -1; - if (f == stdout) { - if (skip_stdout_flush < 0) { - skip_stdout_flush = git_env_bool("GIT_FLUSH", -1); - if (skip_stdout_flush < 0) { + static int force_flush_stdout = -1; + + if (force_flush_stdout < 0) { + force_flush_stdout = git_env_bool("GIT_FLUSH", -1); + if (force_flush_stdout < 0) { struct stat st; if (fstat(fileno(stdout), &st)) - skip_stdout_flush = 0; + force_flush_stdout = 1; else - skip_stdout_flush = S_ISREG(st.st_mode); + force_flush_stdout = !S_ISREG(st.st_mode); } } - if (skip_stdout_flush && !ferror(f)) + if (!force_flush_stdout && !ferror(f)) return; } if (fflush(f)) { |
