diff options
357 files changed, 6871 insertions, 3845 deletions
diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 808ddc19b8..900be9957a 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -113,15 +113,13 @@ jobs: cancel-in-progress: ${{ needs.ci-config.outputs.skip_concurrent == 'yes' }} steps: - uses: actions/checkout@v4 - - name: setup SDK - shell: powershell - run: ci/install-sdk.ps1 + - uses: git-for-windows/setup-git-for-windows-sdk@v1 - name: build - shell: powershell + shell: bash env: HOME: ${{runner.workspace}} NO_PERL: 1 - run: git-sdk/usr/bin/bash.exe -l -c 'ci/make-test-artifacts.sh artifacts' + run: . /etc/profile && ci/make-test-artifacts.sh artifacts - name: zip up tracked files run: git archive -o artifacts/tracked.tar.gz HEAD - name: upload tracked files and build artifacts @@ -149,12 +147,10 @@ jobs: - name: extract tracked files and build artifacts shell: bash run: tar xf artifacts.tar.gz && tar xf tracked.tar.gz - - name: setup SDK - shell: powershell - run: ci/install-sdk.ps1 + - uses: git-for-windows/setup-git-for-windows-sdk@v1 - name: test - shell: powershell - run: git-sdk/usr/bin/bash.exe -l -c 'ci/run-test-slice.sh ${{matrix.nr}} 10' + shell: bash + run: . /etc/profile && ci/run-test-slice.sh ${{matrix.nr}} 10 - name: print test failures if: failure() && env.FAILED_TEST_ARTIFACTS != '' shell: bash @@ -286,6 +282,9 @@ jobs: - jobname: osx-gcc cc: gcc-13 pool: macos-13 + - jobname: osx-meson + cc: clang + pool: macos-13 - jobname: linux-gcc-default cc: gcc pool: ubuntu-latest @@ -298,11 +297,15 @@ jobs: - jobname: linux-asan-ubsan cc: clang pool: ubuntu-latest + - jobname: linux-meson + cc: gcc + pool: ubuntu-latest env: CC: ${{matrix.vector.cc}} CC_PACKAGE: ${{matrix.vector.cc_package}} jobname: ${{matrix.vector.jobname}} distro: ${{matrix.vector.pool}} + TEST_OUTPUT_DIRECTORY: ${{github.workspace}}/t runs-on: ${{matrix.vector.pool}} steps: - uses: actions/checkout@v4 diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a1bc92893f..9254e01583 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -20,6 +20,7 @@ test:linux: - saas-linux-medium-amd64 variables: CUSTOM_PATH: "/custom" + TEST_OUTPUT_DIRECTORY: "/tmp/test-output" before_script: - ./ci/install-dependencies.sh script: @@ -31,6 +32,7 @@ test:linux: if test "$CI_JOB_STATUS" != 'success' then sudo --preserve-env --set-home --user=builder ./ci/print-test-failures.sh + mv "$TEST_OUTPUT_DIRECTORY"/failed-test-artifacts t/ fi parallel: matrix: @@ -67,6 +69,9 @@ test:linux: image: fedora:latest - jobname: linux-musl image: alpine:latest + - jobname: linux-meson + image: ubuntu:latest + CC: gcc artifacts: paths: - t/failed-test-artifacts @@ -99,10 +104,13 @@ test:osx: parallel: matrix: - jobname: osx-clang - image: macos-13-xcode-14 + image: macos-14-xcode-15 CC: clang - jobname: osx-reftable - image: macos-13-xcode-14 + image: macos-14-xcode-15 + CC: clang + - jobname: osx-meson + image: macos-14-xcode-15 CC: clang artifacts: paths: diff --git a/Documentation/.gitignore b/Documentation/.gitignore index 649df89474..9f4bb3c4bf 100644 --- a/Documentation/.gitignore +++ b/Documentation/.gitignore @@ -12,6 +12,7 @@ cmds-*.txt mergetools-*.txt SubmittingPatches.txt tmp-doc-diff/ +tmp-meson-diff/ GIT-ASCIIDOCFLAGS /.build/ /GIT-EXCLUDED-PROGRAMS diff --git a/Documentation/Makefile b/Documentation/Makefile index 3392e1ce7e..aedfe99d1d 100644 --- a/Documentation/Makefile +++ b/Documentation/Makefile @@ -181,6 +181,10 @@ endif -include ../config.mak.autogen -include ../config.mak +# Set GIT_VERSION_OVERRIDE such that version_gen knows to substitute +# GIT_VERSION in case it was set by the user. +GIT_VERSION_OVERRIDE := $(GIT_VERSION) + ifndef NO_MAN_BOLD_LITERAL XMLTO_EXTRA += -m manpage-bold-literal.xsl endif @@ -211,12 +215,10 @@ XMLTO_EXTRA += --skip-validation XMLTO_EXTRA += -x manpage.xsl asciidoctor-extensions.rb: asciidoctor-extensions.rb.in FORCE - $(QUIET_GEN)GIT_USER_AGENT="$(GIT_USER_AGENT)" $(SHELL_PATH) ../GIT-VERSION-GEN "$(shell pwd)/.." $< $@+ - @if cmp $@+ $@ >/dev/null 2>&1; then $(RM) $@+; else mv $@+ $@; fi + $(QUIET_GEN)$(call version_gen,"$(shell pwd)/..",$<,$@) else asciidoc.conf: asciidoc.conf.in FORCE - $(QUIET_GEN)GIT_USER_AGENT="$(GIT_USER_AGENT)" $(SHELL_PATH) ../GIT-VERSION-GEN "$(shell pwd)/.." $< $@+ - @if cmp $@+ $@ >/dev/null 2>&1; then $(RM) $@+; else mv $@+ $@; fi + $(QUIET_GEN)$(call version_gen,"$(shell pwd)/..",$<,$@) endif ASCIIDOC_DEPS += docinfo.html @@ -276,13 +278,6 @@ install-pdf: pdf install-html: html '$(SHELL_PATH_SQ)' ./install-webdoc.sh $(DESTDIR)$(htmldir) -../GIT-VERSION-FILE: FORCE - $(QUIET_SUBDIR0)../ $(QUIET_SUBDIR1) GIT-VERSION-FILE - -ifneq ($(filter-out lint-docs clean,$(MAKECMDGOALS)),) --include ../GIT-VERSION-FILE -endif - mergetools_txt = mergetools-diff.txt mergetools-merge.txt # @@ -344,6 +339,7 @@ clean: $(RM) $(cmds_txt) $(mergetools_txt) *.made $(RM) GIT-ASCIIDOCFLAGS $(RM) asciidoc.conf asciidoctor-extensions.rb + $(RM) -rf tmp-meson-diff docinfo.html: docinfo-html.in $(QUIET_GEN)$(RM) $@ && cat $< >$@ @@ -367,12 +363,12 @@ manpage-cmd = $(QUIET_XMLTO)$(XMLTO) -m $(MANPAGE_XSL) $(XMLTO_EXTRA) man $< %.xml : %.txt $(ASCIIDOC_DEPS) $(QUIET_ASCIIDOC)$(TXT_TO_XML) -d manpage -o $@ $< -user-manual.xml: user-manual.txt user-manual.conf $(ASCIIDOC_DEPS) +user-manual.xml: user-manual.txt $(ASCIIDOC_DEPS) $(QUIET_ASCIIDOC)$(TXT_TO_XML) -d book -o $@ $< technical/api-index.txt: technical/api-index-skel.txt \ technical/api-index.sh $(patsubst %,%.txt,$(API_DOCS)) - $(QUIET_GEN)cd technical && '$(SHELL_PATH_SQ)' ./api-index.sh + $(QUIET_GEN)'$(SHELL_PATH_SQ)' technical/api-index.sh ./technical ./technical/api-index.txt technical/%.html: ASCIIDOC_EXTRA += -a git-relative-html-prefix=../ $(patsubst %,%.html,$(API_DOCS) technical/api-index $(TECH_DOCS)): %.html : %.txt \ @@ -416,8 +412,8 @@ gitman.info: gitman.texi $(patsubst %.txt,%.texi,$(MAN_TXT)): %.texi : %.xml $(QUIET_DB2TEXI)$(DOCBOOK2X_TEXI) --to-stdout $*.xml >$@ -howto-index.txt: howto-index.sh $(HOWTO_TXT) - $(QUIET_GEN)'$(SHELL_PATH_SQ)' ./howto-index.sh $(sort $(HOWTO_TXT)) >$@ +howto-index.txt: howto/howto-index.sh $(HOWTO_TXT) + $(QUIET_GEN)'$(SHELL_PATH_SQ)' ./howto/howto-index.sh $(sort $(HOWTO_TXT)) >$@ $(patsubst %,%.html,$(ARTICLES)) : %.html : %.txt $(ASCIIDOC_DEPS) $(QUIET_ASCIIDOC)$(TXT_TO_HTML) $*.txt @@ -499,6 +495,20 @@ lint-docs-fsck-msgids: $(LINT_DOCS_FSCK_MSGIDS) lint-docs-manpages: $(QUIET_GEN)./lint-manpages.sh +.PHONY: lint-docs-meson +lint-docs-meson: + @# awk acts up when trying to match single quotes, so we use \047 instead. + @mkdir -p tmp-meson-diff && \ + awk "/^manpages = {$$/ {flag=1 ; next } /^}$$/ { flag=0 } flag { gsub(/^ \047/, \"\"); gsub(/\047 : [157],\$$/, \"\"); print }" meson.build | \ + grep -v -e '#' -e '^$$' | \ + sort >tmp-meson-diff/meson.txt && \ + ls git*.txt scalar.txt | grep -v -e git-bisect-lk2009.txt -e git-tools.txt >tmp-meson-diff/actual.txt && \ + if ! cmp tmp-meson-diff/meson.txt tmp-meson-diff/actual.txt; then \ + echo "Meson man pages differ from actual man pages:"; \ + diff -u tmp-meson-diff/meson.txt tmp-meson-diff/actual.txt; \ + exit 1; \ + fi + ## Lint: list of targets above .PHONY: lint-docs lint-docs: lint-docs-fsck-msgids @@ -506,6 +516,7 @@ lint-docs: lint-docs-gitlink lint-docs: lint-docs-man-end-blurb lint-docs: lint-docs-man-section-order lint-docs: lint-docs-manpages +lint-docs: lint-docs-meson ifeq ($(wildcard po/Makefile),po/Makefile) doc-l10n install-l10n:: diff --git a/Documentation/RelNotes/2.48.0.txt b/Documentation/RelNotes/2.48.0.txt index dc11ce58be..d62c62dc17 100644 --- a/Documentation/RelNotes/2.48.0.txt +++ b/Documentation/RelNotes/2.48.0.txt @@ -28,6 +28,17 @@ UI, Workflows & Features both learned to trigger fsck over the new objects with configurable fck check levels. + * When "git fetch $remote" notices that refs/remotes/$remote/HEAD is + missing and discovers what branch the other side points with its + HEAD, refs/remotes/$remote/HEAD is updated to point to it. + + * "git fetch" honors "remote.<remote>.followRemoteHEAD" settings to + tweak the remote-tracking HEAD in "refs/remotes/<remote>/HEAD". + + * "git range-diff" learned to optionally show and compare merge + commits in the ranges being compared, with the --diff-merges + option. + Performance, Internal Implementation, Development Support etc. -------------------------------------------------------------- @@ -134,6 +145,29 @@ Performance, Internal Implementation, Development Support etc. * Build procedure update plus introduction of Meson based builds. + * Recent reftable updates mistook a NULL return from a request for + 0-byte allocation as OOM and died unnecessarily, which has been + corrected. + + * Reftable backend adds check for upper limit of log's update_index. + + * Start working to make the codebase buildable with -Wsign-compare. + + * Regression fix for 'show-index' when run outside of a repository. + + * The meson-build procedure is integrated into CI to catch and + prevent bitrotting. + + * "git refs migrate" learned to also migrate the reflog data across + backends. + + * The developer documentation has been updated to give the latest + info on gitk and git-gui maintainer. + + + * CI jobs that run threaded programs under LSan has been giving false + positives from time to time, which has been worked around. + Fixes since v2.47 ----------------- @@ -265,6 +299,27 @@ Fixes since v2.47 * Fix performance regression of a recent "fatten promisor pack with local objects" protection against an unwanted gc. + * "git log -p --remerge-diff --reverse" was completely broken. + (merge f94bfa1516 js/log-remerge-keep-ancestry later to maint). + + * "git bundle create" with an annotated tag on the positive end of + the revision range had a workaround code for older limitation in + the revision walker, which has become unnecessary. + (merge dd1072dfa8 tc/bundle-with-tag-remove-workaround later to maint). + + * GitLab CI updates. + (merge c6b43f663e ps/ci-gitlab-update later to maint). + + * Code to reuse objects based on bitmap contents have been tightened + to avoid race condition even when multiple packs are involved. + (merge 62b3ec8a3f tb/bitmap-fix-pack-reuse later to maint). + + * An earlier "csum-file checksum does not have to be computed with + sha1dc" topic had a few code paths that had initialized an + implementation of a hash function to be used by an unmatching hash + by mistake, which have been corrected. + (merge 599a63409b ps/weak-sha1-for-tail-sum-fix later to maint). + * Other code cleanup, docfix, build fix, etc. (merge 77af53f56f aa/t7300-modernize later to maint). (merge dcd590a39d bf/t-readme-mention-reftable later to maint). @@ -273,3 +328,4 @@ Fixes since v2.47 (merge 168ebb7159 jc/doc-error-message-guidelines later to maint). (merge 18693d7d65 kh/doc-bundle-typofix later to maint). (merge e2f5d3b491 kh/doc-update-ref-grammofix later to maint). + (merge 8525e92886 mh/doc-windows-home-env later to maint). diff --git a/Documentation/SubmittingPatches b/Documentation/SubmittingPatches index db17bc7fe2..958e3cc3d5 100644 --- a/Documentation/SubmittingPatches +++ b/Documentation/SubmittingPatches @@ -692,16 +692,17 @@ rebase when I receive your patches). Some parts of the system have dedicated maintainers with their own repositories. -- `git-gui/` comes from git-gui project, maintained by Johannes Sixt: +- `git-gui/` comes from the git-gui project, maintained by Johannes Sixt: https://github.com/j6t/git-gui -- `gitk-git/` comes from Paul Mackerras's gitk project: + Contibutions should go via the git mailing list. - git://git.ozlabs.org/~paulus/gitk +- `gitk-git/` comes from the gitk project, maintained by Johannes Sixt: - Those who are interested in improving gitk can volunteer to help Paul - maintain it, cf. <YntxL/fTplFm8lr6@cleo>. + https://github.com/j6t/gitk + + Contibutions should go via the git mailing list. - `po/` comes from the localization coordinator, Jiang Xin: diff --git a/Documentation/asciidoc.conf.in b/Documentation/asciidoc.conf.in index dbe36a52ea..f2aef6cb79 100644 --- a/Documentation/asciidoc.conf.in +++ b/Documentation/asciidoc.conf.in @@ -21,16 +21,26 @@ tilde=~ apostrophe=' backtick=` litdd=-- -manmanual='Git Manual' -mansource='Git @GIT_VERSION@' -revdate='@GIT_DATE@' +manmanual=Git Manual +mansource=Git @GIT_VERSION@ +revdate=@GIT_DATE@ + +ifdef::doctype-book[] +[titles] + underlines="__","==","--","~~","^^" +endif::doctype-book[] ifdef::backend-docbook[] [linkgit-inlinemacro] +ifndef::doctype-book[] {0%{target}} {0#<citerefentry>} {0#<refentrytitle>{target}</refentrytitle><manvolnum>{0}</manvolnum>} {0#</citerefentry>} +endif::doctype-book[] +ifdef::doctype-book[] +<ulink url="{target}.html">{target}{0?({0})}</ulink> +endif::doctype-book[] [literal-inlinemacro] {eval:re.sub(r'(<[-a-zA-Z0-9.]+>)', r'<emphasis>\1</emphasis>', re.sub(r'([\[\s|()>]|^|\]|>)(\.?([-a-zA-Z0-9:+=~@,\/_^\$]+\.?)+)',r'\1<literal>\2</literal>', re.sub(r'(\.\.\.?)([^\]$.])', r'<literal>\1</literal>\2', macros.passthroughs[int(attrs['passtext'][1:-1])] if attrs['passtext'][1:-1].isnumeric() else attrs['passtext'][1:-1])))} diff --git a/Documentation/asciidoctor-extensions.rb.in b/Documentation/asciidoctor-extensions.rb.in index c4c200dace..2494f17a51 100644 --- a/Documentation/asciidoctor-extensions.rb.in +++ b/Documentation/asciidoctor-extensions.rb.in @@ -29,8 +29,11 @@ module Git class DocumentPostProcessor < Asciidoctor::Extensions::Postprocessor def process document, output if document.basebackend? 'docbook' + output = output.sub(/<refmiscinfo class="source">.*?<\/refmiscinfo>/, "") + output = output.sub(/<refmiscinfo class="manual">.*?<\/refmiscinfo>/, "") + output = output.sub(/<date>.*?<\/date>/, "<date>@GIT_DATE@</date>") new_tags = "" \ - "<refmiscinfo class=\"source\">@GIT_VERSION@</refmiscinfo>\n" \ + "<refmiscinfo class=\"source\">Git @GIT_VERSION@</refmiscinfo>\n" \ "<refmiscinfo class=\"manual\">Git Manual</refmiscinfo>\n" output = output.sub(/<\/refmeta>/, new_tags + "</refmeta>") end diff --git a/Documentation/config/remote.txt b/Documentation/config/remote.txt index 6d8b7d6c63..4118c219c1 100644 --- a/Documentation/config/remote.txt +++ b/Documentation/config/remote.txt @@ -101,6 +101,19 @@ remote.<name>.serverOption:: The default set of server options used when fetching from this remote. These server options can be overridden by the `--server-option=` command line arguments. + +remote.<name>.followRemoteHEAD:: + How linkgit:git-fetch[1] should handle updates to `remotes/<name>/HEAD`. + The default value is "create", which will create `remotes/<name>/HEAD` + if it exists on the remote, but not locally, but will not touch an + already existing local reference. Setting to "warn" will print + a message if the remote has a different value, than the local one and + in case there is no local reference, it behaves like "create". + A variant on "warn" is "warn-if-not-$branch", which behaves like + "warn", but if `HEAD` on the remote is `$branch` it will be silent. + Setting to "always" will silently update it to the value on the remote. + Finally, setting it to "never" will never change or create the local + reference. + This is a multi-valued variable, and an empty value can be used in a higher priority configuration file (e.g. `.git/config` in a repository) to clear diff --git a/Documentation/git-range-diff.txt b/Documentation/git-range-diff.txt index fbdbe0befe..db0e4279b5 100644 --- a/Documentation/git-range-diff.txt +++ b/Documentation/git-range-diff.txt @@ -10,7 +10,8 @@ SYNOPSIS [verse] 'git range-diff' [--color=[<when>]] [--no-color] [<diff-options>] [--no-dual-color] [--creation-factor=<factor>] - [--left-only | --right-only] + [--left-only | --right-only] [--diff-merges=<format>] + [--remerge-diff] ( <range1> <range2> | <rev1>...<rev2> | <base> <rev1> <rev2> ) [[--] <path>...] @@ -81,6 +82,20 @@ to revert to color all lines according to the outer diff markers Suppress commits that are missing from the second specified range (or the "right range" when using the `<rev1>...<rev2>` format). +--diff-merges=<format>:: + Instead of ignoring merge commits, generate diffs for them using the + corresponding `--diff-merges=<format>` option of linkgit:git-log[1], + and include them in the comparison. ++ +Note: In the common case, the `remerge` mode will be the most natural one +to use, as it shows only the diff on top of what Git's merge machinery would +have produced. In other words, if a merge commit is the result of a +non-conflicting `git merge`, the `remerge` mode will represent it with an empty +diff. + +--remerge-diff:: + Convenience option, equivalent to `--diff-merges=remerge`. + --[no-]notes[=<ref>]:: This flag is passed to the `git log` program (see linkgit:git-log[1]) that generates the patches. diff --git a/Documentation/git-refs.txt b/Documentation/git-refs.txt index ce31f93061..9829984b0a 100644 --- a/Documentation/git-refs.txt +++ b/Documentation/git-refs.txt @@ -57,8 +57,6 @@ KNOWN LIMITATIONS The ref format migration has several known limitations in its current form: -* It is not possible to migrate repositories that have reflogs. - * It is not possible to migrate repositories that have worktrees. * There is no way to block concurrent writes to the repository during an diff --git a/Documentation/git.txt b/Documentation/git.txt index 44f0797ccf..e89a91dd0d 100644 --- a/Documentation/git.txt +++ b/Documentation/git.txt @@ -477,6 +477,14 @@ their values the same way as Boolean valued configuration variables, e.g. Here are the variables: +System +~~~~~~ +`HOME`:: + Specifies the path to the user's home directory. On Windows, if + unset, Git will set a process environment variable equal to: + `$HOMEDRIVE$HOMEPATH` if both `$HOMEDRIVE` and `$HOMEPATH` exist; + otherwise `$USERPROFILE` if `$USERPROFILE` exists. + The Git Repository ~~~~~~~~~~~~~~~~~~ These environment variables apply to 'all' core Git commands. Nb: it diff --git a/Documentation/gitcli.txt b/Documentation/gitcli.txt index bd62cbd043..fcd86d2eee 100644 --- a/Documentation/gitcli.txt +++ b/Documentation/gitcli.txt @@ -91,7 +91,7 @@ scripting Git: written in the 'stuck' form. * Despite the above suggestion, when Arg is a path relative to the - home directory of a user, e.g. ~/directory/file or ~u/d/f, you + home directory of a user, e.g. `~/directory/file` or `~u/d/f`, you may want to use the separate form, e.g. `git foo --file ~/mine`, not `git foo --file=~/mine`. The shell will expand `~/` in the former to your home directory, but most shells keep the tilde in diff --git a/Documentation/howto-index.sh b/Documentation/howto/howto-index.sh index 167b363668..eecd123a93 100755 --- a/Documentation/howto-index.sh +++ b/Documentation/howto/howto-index.sh @@ -48,7 +48,7 @@ do file="$txt" fi - echo "* link:$file[$title] $from + echo "* link:howto/$(basename "$file")[$title] $from $abstract " diff --git a/Documentation/howto/meson.build b/Documentation/howto/meson.build new file mode 100644 index 0000000000..c023c10416 --- /dev/null +++ b/Documentation/howto/meson.build @@ -0,0 +1,62 @@ +howto_sources = [ + 'coordinate-embargoed-releases.txt', + 'keep-canonical-history-correct.txt', + 'maintain-git.txt', + 'new-command.txt', + 'rebase-from-internal-branch.txt', + 'rebuild-from-update-hook.txt', + 'recover-corrupted-blob-object.txt', + 'recover-corrupted-object-harder.txt', + 'revert-a-faulty-merge.txt', + 'revert-branch-rebase.txt', + 'separating-topic-branches.txt', + 'setup-git-server-over-http.txt', + 'update-hook-example.txt', + 'use-git-daemon.txt', + 'using-merge-subtree.txt', + 'using-signed-tag-in-pull-request.txt', +] + +howto_index = custom_target( + command: [ + shell, + meson.current_source_dir() / 'howto-index.sh', + '@INPUT@', + ], + env: script_environment, + capture: true, + input: howto_sources, + output: 'howto-index.txt', +) + +custom_target( + command: asciidoc_html_options, + input: howto_index, + output: 'howto-index.html', + depends: documentation_deps, + install: true, + install_dir: get_option('datadir') / 'doc/git-doc', +) + +foreach howto : howto_sources + howto_stripped = custom_target( + command: [ + find_program('sed'), + '-e', + '1,/^$/d', + '@INPUT@', + ], + input: howto, + output: fs.stem(howto) + '.stripped', + capture: true, + ) + + custom_target( + command: asciidoc_html_options, + input: howto_stripped, + output: fs.stem(howto_stripped.full_path()) + '.html', + depends: documentation_deps, + install: true, + install_dir: get_option('datadir') / 'doc/git-doc/howto', + ) +endforeach diff --git a/Documentation/meson.build b/Documentation/meson.build index f2426ccaa3..2a26fa8a5f 100644 --- a/Documentation/meson.build +++ b/Documentation/meson.build @@ -204,28 +204,87 @@ manpages = { 'gitworkflows.txt' : 7, } -asciidoc = find_program('asciidoc') -git = find_program('git', required: false) -xmlto = find_program('xmlto') +docs_backend = get_option('docs_backend') +if docs_backend == 'auto' + if find_program('asciidoc', required: false).found() + docs_backend = 'asciidoc' + elif find_program('asciidoctor', required: false).found() + docs_backend = 'asciidoctor' + else + error('Neither asciidoc nor asciidoctor were found.') + endif +endif -asciidoc_conf = custom_target( - command: [ - shell, - meson.project_source_root() / 'GIT-VERSION-GEN', - meson.project_source_root(), - '@INPUT@', - '@OUTPUT@', - ], - input: meson.current_source_dir() / 'asciidoc.conf.in', - output: 'asciidoc.conf', - depends: [git_version_file], -) +if docs_backend == 'asciidoc' + asciidoc = find_program('asciidoc', required: true) + asciidoc_html = 'xhtml11' + asciidoc_docbook = 'docbook' + xmlto_extra = [ ] -asciidoc_common_options = [ - asciidoc, - '--conf-file=' + asciidoc_conf.full_path(), - '--attribute=build_dir=' + meson.current_build_dir(), -] + asciidoc_conf = custom_target( + command: [ + shell, + meson.project_source_root() / 'GIT-VERSION-GEN', + meson.project_source_root(), + '@INPUT@', + '@OUTPUT@', + ], + input: 'asciidoc.conf.in', + output: 'asciidoc.conf', + depends: [git_version_file], + env: version_gen_environment, + ) + + asciidoc_common_options = [ + asciidoc, + '--conf-file=' + asciidoc_conf.full_path(), + '--attribute=build_dir=' + meson.current_build_dir(), + ] + + documentation_deps = [ + asciidoc_conf, + ] +elif docs_backend == 'asciidoctor' + asciidoctor = find_program('asciidoctor', required: true) + asciidoc_html = 'xhtml5' + asciidoc_docbook = 'docbook5' + xmlto_extra = [ + '--skip-validation', + '-x', meson.current_source_dir() / 'manpage.xsl', + ] + + asciidoctor_extensions = custom_target( + command: [ + shell, + meson.project_source_root() / 'GIT-VERSION-GEN', + meson.project_source_root(), + '@INPUT@', + '@OUTPUT@', + ], + input: 'asciidoctor-extensions.rb.in', + output: 'asciidoctor-extensions.rb', + depends: [git_version_file], + env: version_gen_environment, + ) + + asciidoc_common_options = [ + asciidoctor, + '--attribute', 'compat-mode', + '--attribute', 'tabsize=8', + '--attribute', 'litdd=--', + '--attribute', 'docinfo=shared', + '--attribute', 'build_dir=' + meson.current_build_dir(), + '--load-path', meson.current_build_dir(), + '--require', 'asciidoctor-extensions', + ] + + documentation_deps = [ + asciidoctor_extensions, + ] +endif + +git = find_program('git', required: false) +xmlto = find_program('xmlto') cmd_lists = [ 'cmds-ancillaryinterrogators.txt', @@ -242,17 +301,14 @@ cmd_lists = [ 'cmds-foreignscminterface.txt', ] -documentation_deps = [ - asciidoc_conf, -] - documentation_deps += custom_target( command: [ perl, - meson.current_source_dir() / 'cmd-list.perl', + '@INPUT@', meson.project_source_root(), meson.current_build_dir(), ] + cmd_lists, + input: 'cmd-list.perl', output: cmd_lists ) @@ -260,15 +316,15 @@ foreach mode : [ 'diff', 'merge' ] documentation_deps += custom_target( command: [ shell, - meson.current_source_dir() / 'generate-mergetool-list.sh', + '@INPUT@', '..', - 'diff', + mode, '@OUTPUT@' ], env: [ 'MERGE_TOOLS_DIR=' + meson.project_source_root() / 'mergetools', - 'TOOL_MODE=' + mode, ], + input: 'generate-mergetool-list.sh', output: 'mergetools-' + mode + '.txt', ) endforeach @@ -277,12 +333,13 @@ foreach manpage, category : manpages if get_option('docs').contains('man') manpage_xml_target = custom_target( command: asciidoc_common_options + [ - '--backend=docbook', + '--backend=' + asciidoc_docbook, '--doctype=manpage', '--out-file=@OUTPUT@', - meson.current_source_dir() / manpage, + '@INPUT@', ], depends: documentation_deps, + input: manpage, output: fs.stem(manpage) + '.xml', ) @@ -290,16 +347,18 @@ foreach manpage, category : manpages manpage_target = custom_target( command: [ xmlto, - '-m', - meson.current_source_dir() / 'manpage-normal.xsl', - '-m', - meson.current_source_dir() / 'manpage-bold-literal.xsl', + '-m', '@INPUT0@', + '-m', '@INPUT1@', '--stringparam', 'man.base.url.for.relative.links=' + get_option('prefix') / get_option('mandir'), 'man', manpage_xml_target, '-o', meson.current_build_dir(), + ] + xmlto_extra, + input: [ + 'manpage-normal.xsl', + 'manpage-bold-literal.xsl', ], output: manpage_path, install: true, @@ -307,18 +366,139 @@ foreach manpage, category : manpages ) endif - if get_option('docs').contains('html') and category == 1 + if get_option('docs').contains('html') custom_target( command: asciidoc_common_options + [ - '--backend=xhtml11', + '--backend=' + asciidoc_html, '--doctype=manpage', '--out-file=@OUTPUT@', - meson.current_source_dir() / manpage, + '@INPUT@', ], depends: documentation_deps, + input: manpage, output: fs.stem(manpage) + '.html', install: true, install_dir: get_option('datadir') / 'doc/git-doc', ) endif endforeach + +if get_option('docs').contains('html') + configure_file( + input: 'docinfo-html.in', + output: 'docinfo.html', + copy: true, + install: true, + install_dir: get_option('datadir') / 'doc/git-doc', + ) + + configure_file( + input: 'docbook-xsl.css', + output: 'docbook-xsl.css', + copy: true, + install: true, + install_dir: get_option('datadir') / 'doc/git-doc', + ) + + install_symlink('index.html', + install_dir: get_option('datadir') / 'doc/git-doc', + pointing_to: 'git.html', + ) + + xsltproc = find_program('xsltproc') + + user_manual_xml = custom_target( + command: asciidoc_common_options + [ + '--backend=' + asciidoc_docbook, + '--doctype=book', + '--out-file=@OUTPUT@', + '@INPUT@', + ], + input: 'user-manual.txt', + output: 'user-manual.xml', + depends: documentation_deps, + ) + + custom_target( + command: [ + xsltproc, + '--xinclude', + '--stringparam', 'html.stylesheet', 'docbook-xsl.css', + '--param', 'generate.consistent.ids', '1', + '--output', '@OUTPUT@', + '@INPUT@', + user_manual_xml, + ], + input: 'docbook.xsl', + output: 'user-manual.html', + install: true, + install_dir: get_option('datadir') / 'doc/git-doc', + ) + + articles = [ + 'DecisionMaking.txt', + 'MyFirstContribution.txt', + 'MyFirstObjectWalk.txt', + 'ReviewingGuidelines.txt', + 'SubmittingPatches', + 'ToolsForGit.txt', + 'git-bisect-lk2009.txt', + 'git-tools.txt', + ] + + foreach article : articles + custom_target( + command: asciidoc_common_options + [ + '--backend=' + asciidoc_html, + '--out-file=@OUTPUT@', + '@INPUT@', + ], + input: article, + output: fs.stem(article) + '.html', + depends: documentation_deps, + install: true, + install_dir: get_option('datadir') / 'doc/git-doc', + ) + endforeach + + asciidoc_html_options = asciidoc_common_options + [ + '--backend=' + asciidoc_html, + '--out-file=@OUTPUT@', + '--attribute', 'git-relative-html-prefix=../', + '@INPUT@', + ] + + subdir('howto') + subdir('technical') +endif + +# Sanity check that we are not missing any tests present in 't/'. This check +# only runs once at configure time and is thus best-effort, only. Furthermore, +# it only verifies man pages for the sake of simplicity. +configured_manpages = manpages.keys() + [ 'git-bisect-lk2009.txt', 'git-tools.txt' ] +actual_manpages = run_command(shell, '-c', 'ls git*.txt scalar.txt', + check: true, + env: script_environment, +).stdout().strip().split('\n') + +if configured_manpages != actual_manpages + missing_manpage = [ ] + foreach actual_manpage : actual_manpages + if actual_manpage not in configured_manpages + missing_manpage += actual_manpage + endif + endforeach + if missing_manpage.length() > 0 + error('Man page found, but not configured:\n\n - ' + '\n - '.join(missing_manpage)) + endif + + superfluous_manpage = [ ] + foreach configured_manpage : configured_manpages + if configured_manpage not in actual_manpages + superfluous_manpage += configured_manpage + endif + endforeach + if superfluous_manpage.length() > 0 + error('Man page configured, but not found:\n\n - ' + '\n - '.join(superfluous_manpage)) + endif +endif diff --git a/Documentation/technical/api-index.sh b/Documentation/technical/api-index.sh index 9c3f4131b8..2964885574 100755 --- a/Documentation/technical/api-index.sh +++ b/Documentation/technical/api-index.sh @@ -1,6 +1,17 @@ #!/bin/sh +if test $# -ne 2 +then + echo >&2 "USAGE: $0 <SOURCE_DIR> <OUTPUT>" + exit 1 +fi + +SOURCE_DIR="$1" +OUTPUT="$2" + ( + cd "$SOURCE_DIR" + c=//////////////////////////////////////////////////////////////// skel=api-index-skel.txt sed -e '/^\/\/ table of contents begin/q' "$skel" @@ -18,11 +29,11 @@ done echo "$c" sed -n -e '/^\/\/ table of contents end/,$p' "$skel" -) >api-index.txt+ +) >"$OUTPUT"+ -if test -f api-index.txt && cmp api-index.txt api-index.txt+ >/dev/null +if test -f "$OUTPUT" && cmp "$OUTPUT" "$OUTPUT"+ >/dev/null then - rm -f api-index.txt+ + rm -f "$OUTPUT"+ else - mv api-index.txt+ api-index.txt + mv "$OUTPUT"+ "$OUTPUT" fi diff --git a/Documentation/technical/meson.build b/Documentation/technical/meson.build new file mode 100644 index 0000000000..21dfb8b5c9 --- /dev/null +++ b/Documentation/technical/meson.build @@ -0,0 +1,66 @@ +api_docs = [ + 'api-error-handling.txt', + 'api-merge.txt', + 'api-parse-options.txt', + 'api-simple-ipc.txt', + 'api-trace2.txt', +] + +articles = [ + 'bitmap-format.txt', + 'build-systems.txt', + 'bundle-uri.txt', + 'commit-graph.txt', + 'directory-rename-detection.txt', + 'hash-function-transition.txt', + 'long-running-process-protocol.txt', + 'multi-pack-index.txt', + 'packfile-uri.txt', + 'pack-heuristics.txt', + 'parallel-checkout.txt', + 'partial-clone.txt', + 'platform-support.txt', + 'racy-git.txt', + 'reftable.txt', + 'remembering-renames.txt', + 'repository-version.txt', + 'rerere.txt', + 'scalar.txt', + 'send-pack-pipeline.txt', + 'shallow.txt', + 'sparse-checkout.txt', + 'sparse-index.txt', + 'trivial-merge.txt', + 'unit-tests.txt', +] + +api_index = custom_target( + command: [ + shell, + meson.current_source_dir() / 'api-index.sh', + meson.current_source_dir(), + '@OUTPUT@', + ], + env: script_environment, + input: api_docs, + output: 'api-index.txt', +) + +custom_target( + command: asciidoc_html_options, + input: api_index, + output: 'api-index.html', + depends: documentation_deps, + install: true, + install_dir: get_option('datadir') / 'doc/git-doc/technical', +) + +foreach article : api_docs + articles + custom_target( + command: asciidoc_html_options, + input: article, + output: fs.stem(article) + '.html', + install: true, + install_dir: get_option('datadir') / 'doc/git-doc/technical', + ) +endforeach diff --git a/Documentation/user-manual.conf b/Documentation/user-manual.conf deleted file mode 100644 index 0148f126dc..0000000000 --- a/Documentation/user-manual.conf +++ /dev/null @@ -1,11 +0,0 @@ -[titles] - underlines="__","==","--","~~","^^" - -[attributes] -caret=^ -startsb=[ -endsb=] -tilde=~ - -[linkgit-inlinemacro] -<ulink url="{target}.html">{target}{0?({0})}</ulink> diff --git a/GIT-BUILD-OPTIONS.in b/GIT-BUILD-OPTIONS.in index f651116102..edff75ae16 100644 --- a/GIT-BUILD-OPTIONS.in +++ b/GIT-BUILD-OPTIONS.in @@ -1,47 +1,48 @@ -SHELL_PATH=@SHELL_PATH@ -TEST_SHELL_PATH=@TEST_SHELL_PATH@ -PERL_PATH=@PERL_PATH@ -PERL_LOCALEDIR=@PERL_LOCALEDIR@ -NO_PERL_CPAN_FALLBACKS=@NO_PERL_CPAN_FALLBACKS@ +BROKEN_PATH_FIX=@BROKEN_PATH_FIX@ DIFF=@DIFF@ -PYTHON_PATH=@PYTHON_PATH@ -TAR=@TAR@ +FSMONITOR_DAEMON_BACKEND=@FSMONITOR_DAEMON_BACKEND@ +FSMONITOR_OS_SETTINGS=@FSMONITOR_OS_SETTINGS@ +GITWEBDIR=@GITWEBDIR@ +GIT_INTEROP_MAKE_OPTS=@GIT_INTEROP_MAKE_OPTS@ +GIT_PERF_LARGE_REPO=@GIT_PERF_LARGE_REPO@ +GIT_PERF_MAKE_COMMAND=@GIT_PERF_MAKE_COMMAND@ +GIT_PERF_MAKE_OPTS=@GIT_PERF_MAKE_OPTS@ +GIT_PERF_REPEAT_COUNT=@GIT_PERF_REPEAT_COUNT@ +GIT_PERF_REPO=@GIT_PERF_REPO@ +GIT_TEST_CMP=@GIT_TEST_CMP@ +GIT_TEST_CMP_USE_COPIED_CONTEXT=@GIT_TEST_CMP_USE_COPIED_CONTEXT@ +GIT_TEST_GITPERLLIB=@GIT_TEST_GITPERLLIB@ +GIT_TEST_INDEX_VERSION=@GIT_TEST_INDEX_VERSION@ +GIT_TEST_MERGE_TOOLS_DIR=@GIT_TEST_MERGE_TOOLS_DIR@ +GIT_TEST_OPTS=@GIT_TEST_OPTS@ +GIT_TEST_PERL_FATAL_WARNINGS=@GIT_TEST_PERL_FATAL_WARNINGS@ +GIT_TEST_POPATH=@GIT_TEST_POPATH@ +GIT_TEST_TEMPLATE_DIR=@GIT_TEST_TEMPLATE_DIR@ +GIT_TEST_TEXTDOMAINDIR=@GIT_TEST_TEXTDOMAINDIR@ +GIT_TEST_UTF8_LOCALE=@GIT_TEST_UTF8_LOCALE@ +LOCALEDIR=@LOCALEDIR@ NO_CURL=@NO_CURL@ -NO_ICONV=@NO_ICONV@ NO_EXPAT=@NO_EXPAT@ -USE_LIBPCRE2=@USE_LIBPCRE2@ +NO_GETTEXT=@NO_GETTEXT@ +NO_GITWEB=@NO_GITWEB@ +NO_ICONV=@NO_ICONV@ NO_PERL=@NO_PERL@ +NO_PERL_CPAN_FALLBACKS=@NO_PERL_CPAN_FALLBACKS@ NO_PTHREADS=@NO_PTHREADS@ NO_PYTHON=@NO_PYTHON@ NO_REGEX=@NO_REGEX@ NO_UNIX_SOCKETS=@NO_UNIX_SOCKETS@ PAGER_ENV=@PAGER_ENV@ -SANITIZE_LEAK=@SANITIZE_LEAK@ +PERL_LOCALEDIR=@PERL_LOCALEDIR@ +PERL_PATH=@PERL_PATH@ +PYTHON_PATH=@PYTHON_PATH@ +RUNTIME_PREFIX=@RUNTIME_PREFIX@ SANITIZE_ADDRESS=@SANITIZE_ADDRESS@ -X=@X@ -FSMONITOR_DAEMON_BACKEND=@FSMONITOR_DAEMON_BACKEND@ -FSMONITOR_OS_SETTINGS=@FSMONITOR_OS_SETTINGS@ +SANITIZE_LEAK=@SANITIZE_LEAK@ +SHELL_PATH=@SHELL_PATH@ +TAR=@TAR@ TEST_OUTPUT_DIRECTORY=@TEST_OUTPUT_DIRECTORY@ -GIT_TEST_OPTS=@GIT_TEST_OPTS@ -GIT_TEST_CMP=@GIT_TEST_CMP@ -GIT_TEST_CMP_USE_COPIED_CONTEXT=@GIT_TEST_CMP_USE_COPIED_CONTEXT@ -GIT_TEST_UTF8_LOCALE=@GIT_TEST_UTF8_LOCALE@ -NO_GETTEXT=@NO_GETTEXT@ -GIT_PERF_REPEAT_COUNT=@GIT_PERF_REPEAT_COUNT@ -GIT_PERF_REPO=@GIT_PERF_REPO@ -GIT_PERF_LARGE_REPO=@GIT_PERF_LARGE_REPO@ -GIT_PERF_MAKE_OPTS=@GIT_PERF_MAKE_OPTS@ -GIT_PERF_MAKE_COMMAND=@GIT_PERF_MAKE_COMMAND@ -GIT_INTEROP_MAKE_OPTS=@GIT_INTEROP_MAKE_OPTS@ -GIT_TEST_INDEX_VERSION=@GIT_TEST_INDEX_VERSION@ -GIT_TEST_PERL_FATAL_WARNINGS=@GIT_TEST_PERL_FATAL_WARNINGS@ -GIT_TEST_TEXTDOMAINDIR=@GIT_TEST_TEXTDOMAINDIR@ -GIT_TEST_POPATH=@GIT_TEST_POPATH@ -GIT_TEST_TEMPLATE_DIR=@GIT_TEST_TEMPLATE_DIR@ -GIT_TEST_GITPERLLIB=@GIT_TEST_GITPERLLIB@ -GIT_TEST_MERGE_TOOLS_DIR=@GIT_TEST_MERGE_TOOLS_DIR@ -RUNTIME_PREFIX=@RUNTIME_PREFIX@ -GITWEBDIR=@GITWEBDIR@ +TEST_SHELL_PATH=@TEST_SHELL_PATH@ USE_GETTEXT_SCHEME=@USE_GETTEXT_SCHEME@ -LOCALEDIR=@LOCALEDIR@ -BROKEN_PATH_FIX=@BROKEN_PATH_FIX@ +USE_LIBPCRE2=@USE_LIBPCRE2@ +X=@X@ diff --git a/GIT-VERSION-GEN b/GIT-VERSION-GEN index de0e63bdfb..6d1cb66d69 100755 --- a/GIT-VERSION-GEN +++ b/GIT-VERSION-GEN @@ -1,6 +1,6 @@ #!/bin/sh -DEF_VER=v2.48.0-rc0 +DEF_VER=v2.48.0-rc2 LF=' ' @@ -27,33 +27,45 @@ fi GIT_CEILING_DIRECTORIES="$SOURCE_DIR/.." export GIT_CEILING_DIRECTORIES -# First see if there is a version file (included in release tarballs), -# then try git-describe, then default. -if test -f "$SOURCE_DIR"/version +if test -z "$GIT_VERSION" then - VN=$(cat "$SOURCE_DIR"/version) || VN="$DEF_VER" -elif { - test -d "$SOURCE_DIR/.git" || - test -d "${GIT_DIR:-.git}" || - test -f "$SOURCE_DIR"/.git; - } && - VN=$(git -C "$SOURCE_DIR" describe --match "v[0-9]*" HEAD 2>/dev/null) && - case "$VN" in - *$LF*) (exit 1) ;; - v[0-9]*) - git -C "$SOURCE_DIR" update-index -q --refresh - test -z "$(git -C "$SOURCE_DIR" diff-index --name-only HEAD --)" || - VN="$VN-dirty" ;; - esac + # First see if there is a version file (included in release tarballs), + # then try git-describe, then default. + if test -f "$SOURCE_DIR"/version + then + VN=$(cat "$SOURCE_DIR"/version) || VN="$DEF_VER" + elif { + test -d "$SOURCE_DIR/.git" || + test -d "${GIT_DIR:-.git}" || + test -f "$SOURCE_DIR"/.git; + } && + VN=$(git -C "$SOURCE_DIR" describe --match "v[0-9]*" HEAD 2>/dev/null) && + case "$VN" in + *$LF*) (exit 1) ;; + v[0-9]*) + git -C "$SOURCE_DIR" update-index -q --refresh + test -z "$(git -C "$SOURCE_DIR" diff-index --name-only HEAD --)" || + VN="$VN-dirty" ;; + esac + then + VN=$(echo "$VN" | sed -e 's/-/./g'); + else + VN="$DEF_VER" + fi + + GIT_VERSION=$(expr "$VN" : v*'\(.*\)') +fi + +if test -z "$GIT_BUILT_FROM_COMMIT" then - VN=$(echo "$VN" | sed -e 's/-/./g'); -else - VN="$DEF_VER" + GIT_BUILT_FROM_COMMIT=$(git -C "$SOURCE_DIR" rev-parse -q --verify HEAD 2>/dev/null) +fi + +if test -z "$GIT_DATE" +then + GIT_DATE=$(git -C "$SOURCE_DIR" show --quiet --format='%as' 2>/dev/null) fi -GIT_VERSION=$(expr "$VN" : v*'\(.*\)') -GIT_BUILT_FROM_COMMIT=$(git -C "$SOURCE_DIR" rev-parse -q --verify HEAD 2>/dev/null) -GIT_DATE=$(git -C "$SOURCE_DIR" show --quiet --format='%as' 2>/dev/null) if test -z "$GIT_USER_AGENT" then GIT_USER_AGENT="git/$GIT_VERSION" @@ -591,13 +591,6 @@ include shared.mak # # Disable -pedantic compilation. -GIT-VERSION-FILE: FORCE - @OLD=$$(cat $@ 2>/dev/null || :) && \ - $(SHELL_PATH) ./GIT-VERSION-GEN "$(shell pwd)" GIT-VERSION-FILE.in $@ && \ - NEW=$$(cat $@ 2>/dev/null || :) && \ - if test "$$OLD" != "$$NEW"; then echo "$$NEW" >&2; fi --include GIT-VERSION-FILE - # Set our default configuration. # # Among the variables below, these: @@ -1344,8 +1337,8 @@ THIRD_PARTY_SOURCES += sha1dc/% THIRD_PARTY_SOURCES += $(UNIT_TEST_DIR)/clar/% THIRD_PARTY_SOURCES += $(UNIT_TEST_DIR)/clar/clar/% -CLAR_TEST_SUITES += ctype -CLAR_TEST_SUITES += strvec +CLAR_TEST_SUITES += u-ctype +CLAR_TEST_SUITES += u-strvec CLAR_TEST_PROG = $(UNIT_TEST_BIN)/unit-tests$(X) CLAR_TEST_OBJS = $(patsubst %,$(UNIT_TEST_DIR)/%.o,$(CLAR_TEST_SUITES)) CLAR_TEST_OBJS += $(UNIT_TEST_DIR)/clar/clar.o @@ -1465,6 +1458,18 @@ ifdef DEVELOPER include config.mak.dev endif +GIT-VERSION-FILE: FORCE + @OLD=$$(cat $@ 2>/dev/null || :) && \ + $(call version_gen,"$(shell pwd)",GIT-VERSION-FILE.in,$@) && \ + NEW=$$(cat $@ 2>/dev/null || :) && \ + if test "$$OLD" != "$$NEW"; then echo "$$NEW" >&2; fi + +# We need to set GIT_VERSION_OVERRIDE before including the version file as +# otherwise any user-provided value for GIT_VERSION would have been overridden +# already. +GIT_VERSION_OVERRIDE := $(GIT_VERSION) +-include GIT-VERSION-FILE + # what 'all' will build and 'install' will install in gitexecdir, # excluding programs for built-in commands ALL_PROGRAMS = $(PROGRAMS) $(SCRIPTS) @@ -1490,7 +1495,6 @@ ifneq ($(filter undefined,$(SANITIZERS)),) BASIC_CFLAGS += -DSHA1DC_FORCE_ALIGNED_ACCESS endif ifneq ($(filter leak,$(SANITIZERS)),) -BASIC_CFLAGS += -DSUPPRESS_ANNOTATED_LEAKS BASIC_CFLAGS += -O0 SANITIZE_LEAK = YesCompiledWithIt endif @@ -2512,8 +2516,7 @@ pager.sp pager.s pager.o: EXTRA_CPPFLAGS = \ -DPAGER_ENV='$(PAGER_ENV_CQ_SQ)' version-def.h: version-def.h.in GIT-VERSION-GEN GIT-VERSION-FILE GIT-USER-AGENT - $(QUIET_GEN)GIT_USER_AGENT="$(GIT_USER_AGENT)" $(SHELL_PATH) ./GIT-VERSION-GEN "$(shell pwd)" $< $@+ - @if cmp $@+ $@ >/dev/null 2>&1; then $(RM) $@+; else mv $@+ $@; fi + $(QUIET_GEN)$(call version_gen,"$(shell pwd)",$<,$@) version.sp version.s version.o: version-def.h @@ -2554,8 +2557,7 @@ $(SCRIPT_SH_GEN) $(SCRIPT_LIB) : % : %.sh generate-script.sh GIT-BUILD-OPTIONS G mv $@+ $@ git.rc: git.rc.in GIT-VERSION-GEN GIT-VERSION-FILE - $(QUIET_GEN)$(SHELL_PATH) ./GIT-VERSION-GEN "$(shell pwd)" $< $@+ - @if cmp $@+ $@ >/dev/null 2>&1; then $(RM) $@+; else mv $@+ $@; fi + $(QUIET_GEN)$(call version_gen,"$(shell pwd)",$<,$@) git.res: git.rc GIT-PREFIX $(QUIET_RC)$(RC) -i $< -o $@ @@ -3143,53 +3145,54 @@ endif # and the first level quoting from the shell that runs "echo". GIT-BUILD-OPTIONS: FORCE @sed \ - -e "s|@SHELL_PATH@|\'$(SHELL_PATH_SQ)\'|" \ - -e "s|@TEST_SHELL_PATH@|\'$(TEST_SHELL_PATH_SQ)\'|" \ - -e "s|@PERL_PATH@|\'$(PERL_PATH_SQ)\'|" \ - -e "s|@PERL_LOCALEDIR@|\'$(perl_localedir_SQ)\'|" \ - -e "s|@NO_PERL_CPAN_FALLBACKS@|\'$(NO_PERL_CPAN_FALLBACKS_SQ)\'|" \ + -e "s!@BROKEN_PATH_FIX@!\'$(BROKEN_PATH_FIX)\'!" \ -e "s|@DIFF@|\'$(DIFF)\'|" \ - -e "s|@PYTHON_PATH@|\'$(PYTHON_PATH_SQ)\'|" \ - -e "s|@TAR@|\'$(TAR)\'|" \ + -e "s|@FSMONITOR_DAEMON_BACKEND@|\'$(FSMONITOR_DAEMON_BACKEND)\'|" \ + -e "s|@FSMONITOR_OS_SETTINGS@|\'$(FSMONITOR_OS_SETTINGS)\'|" \ + -e "s|@GITWEBDIR@|\'$(gitwebdir_SQ)\'|" \ + -e "s|@GIT_INTEROP_MAKE_OPTS@|\'$(GIT_INTEROP_MAKE_OPTS)\'|" \ + -e "s|@GIT_PERF_LARGE_REPO@|\'$(GIT_PERF_LARGE_REPO)\'|" \ + -e "s|@GIT_PERF_MAKE_COMMAND@|\'$(GIT_PERF_MAKE_COMMAND)\'|" \ + -e "s|@GIT_PERF_MAKE_OPTS@|\'$(GIT_PERF_MAKE_OPTS)\'|" \ + -e "s|@GIT_PERF_REPEAT_COUNT@|\'$(GIT_PERF_REPEAT_COUNT)\'|" \ + -e "s|@GIT_PERF_REPO@|\'$(GIT_PERF_REPO)\'|" \ + -e "s|@GIT_TEST_CMP@|\'$(GIT_TEST_CMP)\'|" \ + -e "s|@GIT_TEST_CMP_USE_COPIED_CONTEXT@|\'$(GIT_TEST_CMP_USE_COPIED_CONTEXT)\'|" \ + -e "s|@GIT_TEST_GITPERLLIB@|\'$(shell pwd)/perl/build/lib\'|" \ + -e "s|@GIT_TEST_INDEX_VERSION@|\'$(GIT_TEST_INDEX_VERSION)\'|" \ + -e "s|@GIT_TEST_MERGE_TOOLS_DIR@|\'$(shell pwd)/mergetools\'|" \ + -e "s|@GIT_TEST_OPTS@|\'$(GIT_TEST_OPTS)\'|" \ + -e "s|@GIT_TEST_PERL_FATAL_WARNINGS@|\'$(GIT_TEST_PERL_FATAL_WARNINGS)\'|" \ + -e "s|@GIT_TEST_POPATH@|\'$(shell pwd)/po\'|" \ + -e "s|@GIT_TEST_TEMPLATE_DIR@|\'$(shell pwd)/templates/blt\'|" \ + -e "s|@GIT_TEST_TEXTDOMAINDIR@|\'$(shell pwd)/po/build/locale\'|" \ + -e "s|@GIT_TEST_UTF8_LOCALE@|\'$(GIT_TEST_UTF8_LOCALE)\'|" \ + -e "s|@LOCALEDIR@|\'$(localedir_SQ)\'|" \ -e "s|@NO_CURL@|\'$(NO_CURL)\'|" \ - -e "s|@NO_ICONV@|\'$(NO_ICONV)\'|" \ -e "s|@NO_EXPAT@|\'$(NO_EXPAT)\'|" \ - -e "s|@USE_LIBPCRE2@|\'$(USE_LIBPCRE2)\'|" \ + -e "s|@NO_GETTEXT@|\'$(NO_GETTEXT)\'|" \ + -e "s|@NO_GITWEB@|\'$(NO_GITWEB)\'|" \ + -e "s|@NO_ICONV@|\'$(NO_ICONV)\'|" \ -e "s|@NO_PERL@|\'$(NO_PERL)\'|" \ + -e "s|@NO_PERL_CPAN_FALLBACKS@|\'$(NO_PERL_CPAN_FALLBACKS_SQ)\'|" \ -e "s|@NO_PTHREADS@|\'$(NO_PTHREADS)\'|" \ -e "s|@NO_PYTHON@|\'$(NO_PYTHON)\'|" \ -e "s|@NO_REGEX@|\'$(NO_REGEX)\'|" \ -e "s|@NO_UNIX_SOCKETS@|\'$(NO_UNIX_SOCKETS)\'|" \ -e "s|@PAGER_ENV@|\'$(PAGER_ENV)\'|" \ - -e "s|@SANITIZE_LEAK@|\'$(SANITIZE_LEAK)\'|" \ + -e "s|@PERL_LOCALEDIR@|\'$(perl_localedir_SQ)\'|" \ + -e "s|@PERL_PATH@|\'$(PERL_PATH_SQ)\'|" \ + -e "s|@PYTHON_PATH@|\'$(PYTHON_PATH_SQ)\'|" \ + -e "s|@RUNTIME_PREFIX@|\'$(RUNTIME_PREFIX_OPTION)\'|" \ -e "s|@SANITIZE_ADDRESS@|\'$(SANITIZE_ADDRESS)\'|" \ - -e "s|@X@|\'$(X)\'|" \ - -e "s|@FSMONITOR_DAEMON_BACKEND@|\'$(FSMONITOR_DAEMON_BACKEND)\'|" \ - -e "s|@FSMONITOR_OS_SETTINGS@|\'$(FSMONITOR_OS_SETTINGS)\'|" \ + -e "s|@SANITIZE_LEAK@|\'$(SANITIZE_LEAK)\'|" \ + -e "s|@SHELL_PATH@|\'$(SHELL_PATH_SQ)\'|" \ + -e "s|@TAR@|\'$(TAR)\'|" \ -e "s|@TEST_OUTPUT_DIRECTORY@|\'$(TEST_OUTPUT_DIRECTORY)\'|" \ - -e "s|@GIT_TEST_OPTS@|\'$(GIT_TEST_OPTS)\'|" \ - -e "s|@GIT_TEST_CMP@|\'$(GIT_TEST_CMP)\'|" \ - -e "s|@GIT_TEST_CMP_USE_COPIED_CONTEXT@|\'$(GIT_TEST_CMP_USE_COPIED_CONTEXT)\'|" \ - -e "s|@GIT_TEST_UTF8_LOCALE@|\'$(GIT_TEST_UTF8_LOCALE)\'|" \ - -e "s|@NO_GETTEXT@|\'$(NO_GETTEXT)\'|" \ - -e "s|@GIT_PERF_REPEAT_COUNT@|\'$(GIT_PERF_REPEAT_COUNT)\'|" \ - -e "s|@GIT_PERF_REPO@|\'$(GIT_PERF_REPO)\'|" \ - -e "s|@GIT_PERF_LARGE_REPO@|\'$(GIT_PERF_LARGE_REPO)\'|" \ - -e "s|@GIT_PERF_MAKE_OPTS@|\'$(GIT_PERF_MAKE_OPTS)\'|" \ - -e "s|@GIT_PERF_MAKE_COMMAND@|\'$(GIT_PERF_MAKE_COMMAND)\'|" \ - -e "s|@GIT_INTEROP_MAKE_OPTS@|\'$(GIT_INTEROP_MAKE_OPTS)\'|" \ - -e "s|@GIT_TEST_INDEX_VERSION@|\'$(GIT_TEST_INDEX_VERSION)\'|" \ - -e "s|@GIT_TEST_PERL_FATAL_WARNINGS@|\'$(GIT_TEST_PERL_FATAL_WARNINGS)\'|" \ - -e "s|@GIT_TEST_TEXTDOMAINDIR@|\'$(shell pwd)/po/build/locale\'|" \ - -e "s|@GIT_TEST_POPATH@|\'$(shell pwd)/po\'|" \ - -e "s|@GIT_TEST_TEMPLATE_DIR@|\'$(shell pwd)/templates/blt\'|" \ - -e "s|@GIT_TEST_GITPERLLIB@|\'$(shell pwd)/perl/build/lib\'|" \ - -e "s|@GIT_TEST_MERGE_TOOLS_DIR@|\'$(shell pwd)/mergetools\'|" \ - -e "s|@RUNTIME_PREFIX@|\'$(RUNTIME_PREFIX_OPTION)\'|" \ - -e "s|@GITWEBDIR@|\'$(gitwebdir_SQ)\'|" \ + -e "s|@TEST_SHELL_PATH@|\'$(TEST_SHELL_PATH_SQ)\'|" \ -e "s|@USE_GETTEXT_SCHEME@|\'$(USE_GETTEXT_SCHEME)\'|" \ - -e "s|@LOCALEDIR@|\'$(localedir_SQ)\'|" \ - -e "s!@BROKEN_PATH_FIX@!\'$(BROKEN_PATH_FIX)\'!" \ + -e "s|@USE_LIBPCRE2@|\'$(USE_LIBPCRE2)\'|" \ + -e "s|@X@|\'$(X)\'|" \ GIT-BUILD-OPTIONS.in >$@+ @if grep -q '^[A-Z][A-Z_]*=@.*@$$' $@+; then echo "Unsubstituted build options in $@" >&2 && exit 1; fi @if cmp $@+ $@ >/dev/null 2>&1; then $(RM) $@+; else mv $@+ $@; fi diff --git a/add-interactive.c b/add-interactive.c index 49042b3026..d0f8c10e6f 100644 --- a/add-interactive.c +++ b/add-interactive.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "add-interactive.h" diff --git a/add-patch.c b/add-patch.c index 557903310d..7b598e14df 100644 --- a/add-patch.c +++ b/add-patch.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "add-interactive.h" @@ -53,6 +53,7 @@ static struct { [ADVICE_COMMIT_BEFORE_MERGE] = { "commitBeforeMerge" }, [ADVICE_DETACHED_HEAD] = { "detachedHead" }, [ADVICE_DIVERGING] = { "diverging" }, + [ADVICE_FETCH_SET_HEAD_WARN] = { "fetchRemoteHEADWarn" }, [ADVICE_FETCH_SHOW_FORCED_UPDATES] = { "fetchShowForcedUpdates" }, [ADVICE_FORCE_DELETE_BRANCH] = { "forceDeleteBranch" }, [ADVICE_GRAFT_FILE_DEPRECATED] = { "graftFileDeprecated" }, @@ -160,7 +161,6 @@ void advise_if_enabled(enum advice_type type, const char *advice, ...) int git_default_advice_config(const char *var, const char *value) { const char *k, *slot_name; - int i; if (!strcmp(var, "color.advice")) { advice_use_color = git_config_colorbool(var, value); @@ -179,7 +179,7 @@ int git_default_advice_config(const char *var, const char *value) if (!skip_prefix(var, "advice.", &k)) return 0; - for (i = 0; i < ARRAY_SIZE(advice_setting); i++) { + for (size_t i = 0; i < ARRAY_SIZE(advice_setting); i++) { if (strcasecmp(k, advice_setting[i].key)) continue; advice_setting[i].level = git_config_bool(var, value) @@ -193,9 +193,7 @@ int git_default_advice_config(const char *var, const char *value) void list_config_advices(struct string_list *list, const char *prefix) { - int i; - - for (i = 0; i < ARRAY_SIZE(advice_setting); i++) + for (size_t i = 0; i < ARRAY_SIZE(advice_setting); i++) list_config_item(list, prefix, advice_setting[i].key); } @@ -20,6 +20,7 @@ enum advice_type { ADVICE_COMMIT_BEFORE_MERGE, ADVICE_DETACHED_HEAD, ADVICE_DIVERGING, + ADVICE_FETCH_SET_HEAD_WARN, ADVICE_FETCH_SHOW_FORCED_UPDATES, ADVICE_FORCE_DELETE_BRANCH, ADVICE_GRAFT_FILE_DEPRECATED, @@ -8,6 +8,7 @@ */ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "abspath.h" @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "abspath.h" @@ -7,6 +7,7 @@ */ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "config.h" @@ -29,10 +29,9 @@ static const char en85[] = { static char de85[256]; static void prep_base85(void) { - int i; if (de85['Z']) return; - for (i = 0; i < ARRAY_SIZE(en85); i++) { + for (size_t i = 0; i < ARRAY_SIZE(en85); i++) { int ch = en85[i]; de85[ch] = i + 1; } @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "config.h" @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "refs.h" @@ -1,3 +1,5 @@ +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "git-compat-util.h" #include "bloom.h" #include "diff.h" diff --git a/builtin/add.c b/builtin/add.c index 7d35307792..78dfb26577 100644 --- a/builtin/add.c +++ b/builtin/add.c @@ -3,6 +3,7 @@ * * Copyright (C) 2006 Linus Torvalds */ + #include "builtin.h" #include "advice.h" #include "config.h" @@ -39,9 +40,9 @@ static int chmod_pathspec(struct repository *repo, char flip, int show_only) { - int i, ret = 0; + int ret = 0; - for (i = 0; i < repo->index->cache_nr; i++) { + for (size_t i = 0; i < repo->index->cache_nr; i++) { struct cache_entry *ce = repo->index->cache[i]; int err; @@ -69,9 +70,9 @@ static int renormalize_tracked_files(struct repository *repo, const struct pathspec *pathspec, int flags) { - int i, retval = 0; + int retval = 0; - for (i = 0; i < repo->index->cache_nr; i++) { + for (size_t i = 0; i < repo->index->cache_nr; i++) { struct cache_entry *ce = repo->index->cache[i]; if (!include_sparse && diff --git a/builtin/am.c b/builtin/am.c index bfa95147cf..1338b606fe 100644 --- a/builtin/am.c +++ b/builtin/am.c @@ -5,6 +5,7 @@ */ #define USE_THE_REPOSITORY_VARIABLE + #include "builtin.h" #include "abspath.h" #include "advice.h" diff --git a/builtin/bisect.c b/builtin/bisect.c index 8166d4abf5..8b8d870cd1 100644 --- a/builtin/bisect.c +++ b/builtin/bisect.c @@ -1,4 +1,6 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "copy.h" #include "environment.h" diff --git a/builtin/blame.c b/builtin/blame.c index 6a7bb3b072..867032e4c1 100644 --- a/builtin/blame.c +++ b/builtin/blame.c @@ -4,7 +4,9 @@ * Copyright (c) 2006, 2014 by its authors * See COPYING for licensing conditions */ + #define USE_THE_REPOSITORY_VARIABLE + #include "builtin.h" #include "config.h" #include "color.h" @@ -465,9 +467,14 @@ static void emit_other(struct blame_scoreboard *sb, struct blame_entry *ent, int reset = GIT_COLOR_RESET; } + if (abbrev < MINIMUM_ABBREV) + BUG("abbreviation is smaller than minimum length: %d < %d", + abbrev, MINIMUM_ABBREV); + for (cnt = 0; cnt < ent->num_lines; cnt++) { char ch; - int length = (opt & OUTPUT_LONG_OBJECT_NAME) ? the_hash_algo->hexsz : abbrev; + size_t length = (opt & OUTPUT_LONG_OBJECT_NAME) ? + the_hash_algo->hexsz : (size_t) abbrev; if (opt & OUTPUT_COLOR_LINE) { if (cnt > 0) { @@ -498,7 +505,7 @@ static void emit_other(struct blame_scoreboard *sb, struct blame_entry *ent, int length--; putchar('?'); } - printf("%.*s", length, hex); + fwrite(hex, 1, length, stdout); if (opt & OUTPUT_ANNOTATE_COMPAT) { const char *name; if (opt & OUTPUT_SHOW_EMAIL) diff --git a/builtin/branch.c b/builtin/branch.c index 200909c23e..6e7b0cfddb 100644 --- a/builtin/branch.c +++ b/builtin/branch.c @@ -4,7 +4,9 @@ * Copyright (c) 2006 Kristian Høgsberg <krh@redhat.com> * Based on git-branch.sh by Junio C Hamano. */ + #define USE_THE_REPOSITORY_VARIABLE + #include "builtin.h" #include "config.h" #include "color.h" diff --git a/builtin/cat-file.c b/builtin/cat-file.c index d67b101c20..b13561cf73 100644 --- a/builtin/cat-file.c +++ b/builtin/cat-file.c @@ -3,7 +3,10 @@ * * Copyright (C) Linus Torvalds, 2005 */ + #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "config.h" #include "convert.h" diff --git a/builtin/checkout--worker.c b/builtin/checkout--worker.c index ff6cdccc21..b81002a1df 100644 --- a/builtin/checkout--worker.c +++ b/builtin/checkout--worker.c @@ -1,4 +1,6 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "config.h" #include "entry.h" diff --git a/builtin/checkout-index.c b/builtin/checkout-index.c index 6dd38eb05d..a81501098d 100644 --- a/builtin/checkout-index.c +++ b/builtin/checkout-index.c @@ -4,7 +4,10 @@ * Copyright (C) 2005 Linus Torvalds * */ + #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "config.h" #include "gettext.h" diff --git a/builtin/checkout.c b/builtin/checkout.c index 5e5afa0f26..01ea9ff8b2 100644 --- a/builtin/checkout.c +++ b/builtin/checkout.c @@ -1,4 +1,6 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "advice.h" #include "branch.h" diff --git a/builtin/clean.c b/builtin/clean.c index 9c48dd0271..053c94fc6b 100644 --- a/builtin/clean.c +++ b/builtin/clean.c @@ -5,7 +5,10 @@ * * Based on git-clean.sh by Pavel Roskin */ + #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "abspath.h" #include "config.h" diff --git a/builtin/clone.c b/builtin/clone.c index 21721db28a..fd001d800c 100644 --- a/builtin/clone.c +++ b/builtin/clone.c @@ -7,7 +7,10 @@ * * Clone a repository into a different directory that does not yet exist. */ + #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "abspath.h" diff --git a/builtin/commit.c b/builtin/commit.c index 71d674138c..ef5e622c07 100644 --- a/builtin/commit.c +++ b/builtin/commit.c @@ -4,7 +4,10 @@ * Copyright (c) 2007 Kristian Høgsberg <krh@redhat.com> * Based on git-commit.sh by Junio C Hamano and Linus Torvalds */ + #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "advice.h" #include "config.h" diff --git a/builtin/describe.c b/builtin/describe.c index a6ef8af32a..e2e73f3d75 100644 --- a/builtin/describe.c +++ b/builtin/describe.c @@ -1,4 +1,6 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "config.h" #include "environment.h" diff --git a/builtin/diff-files.c b/builtin/diff-files.c index e0e0ccec23..604b04bb2c 100644 --- a/builtin/diff-files.c +++ b/builtin/diff-files.c @@ -3,7 +3,10 @@ * * Copyright (C) Linus Torvalds, 2005 */ + #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "config.h" #include "diff.h" diff --git a/builtin/diff-index.c b/builtin/diff-index.c index ad503624c0..ebc824602e 100644 --- a/builtin/diff-index.c +++ b/builtin/diff-index.c @@ -1,4 +1,6 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "config.h" #include "diff.h" diff --git a/builtin/diff-tree.c b/builtin/diff-tree.c index 4b6656bb9f..40804e7b48 100644 --- a/builtin/diff-tree.c +++ b/builtin/diff-tree.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE + #include "builtin.h" #include "config.h" #include "diff.h" diff --git a/builtin/diff.c b/builtin/diff.c index 2fe92f373e..a4fffee42c 100644 --- a/builtin/diff.c +++ b/builtin/diff.c @@ -3,7 +3,10 @@ * * Copyright (c) 2006 Junio C Hamano */ + #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "config.h" #include "ewah/ewok.h" diff --git a/builtin/difftool.c b/builtin/difftool.c index 40e971e225..03a8bb92a9 100644 --- a/builtin/difftool.c +++ b/builtin/difftool.c @@ -11,7 +11,9 @@ * * Copyright (C) 2016 Johannes Schindelin */ + #define USE_THE_REPOSITORY_VARIABLE + #include "builtin.h" #include "abspath.h" @@ -364,7 +366,8 @@ static int run_dir_diff(const char *extcmd, int symlinks, const char *prefix, char *lbase_dir = NULL, *rbase_dir = NULL; size_t ldir_len, rdir_len, wtdir_len; const char *workdir, *tmp; - int ret = 0, i; + int ret = 0; + size_t i; FILE *fp = NULL; struct hashmap working_tree_dups = HASHMAP_INIT(working_tree_entry_cmp, NULL); diff --git a/builtin/fast-export.c b/builtin/fast-export.c index e17f262e8e..a5c82eef1d 100644 --- a/builtin/fast-export.c +++ b/builtin/fast-export.c @@ -3,7 +3,10 @@ * * Copyright (C) 2007 Johannes E. Schindelin */ + #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "config.h" #include "gettext.h" diff --git a/builtin/fast-import.c b/builtin/fast-import.c index a67c1c4416..0f86392761 100644 --- a/builtin/fast-import.c +++ b/builtin/fast-import.c @@ -1,4 +1,6 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "abspath.h" #include "environment.h" @@ -1104,7 +1106,7 @@ static void stream_blob(uintmax_t len, struct object_id *oidout, uintmax_t mark) || (pack_size + PACK_SIZE_THRESHOLD + len) < pack_size) cycle_packfile(); - the_hash_algo->init_fn(&checkpoint.ctx); + the_hash_algo->unsafe_init_fn(&checkpoint.ctx); hashfile_checkpoint(pack_file, &checkpoint); offset = checkpoint.offset; diff --git a/builtin/fetch-pack.c b/builtin/fetch-pack.c index 62e8c3aa6b..bed2816c2d 100644 --- a/builtin/fetch-pack.c +++ b/builtin/fetch-pack.c @@ -1,4 +1,6 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "gettext.h" #include "hex.h" diff --git a/builtin/fetch.c b/builtin/fetch.c index 335083eb10..2d37a378ba 100644 --- a/builtin/fetch.c +++ b/builtin/fetch.c @@ -1,7 +1,10 @@ /* * "git fetch" */ + #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "advice.h" #include "config.h" @@ -1574,6 +1577,135 @@ static int backfill_tags(struct display_state *display_state, return retcode; } +static const char *strip_refshead(const char *name){ + skip_prefix(name, "refs/heads/", &name); + return name; +} + +static void set_head_advice_msg(const char *remote, const char *head_name) +{ + const char message_advice_set_head[] = + N_("Run 'git remote set-head %s %s' to follow the change, or set\n" + "'remote.%s.followRemoteHEAD' configuration option to a different value\n" + "if you do not want to see this message. Specifically running\n" + "'git config set remote.%s.followRemoteHEAD %s' will disable the warning\n" + "until the remote changes HEAD to something else."); + + advise_if_enabled(ADVICE_FETCH_SET_HEAD_WARN, _(message_advice_set_head), + remote, head_name, remote, remote, head_name); +} + +static void report_set_head(const char *remote, const char *head_name, + struct strbuf *buf_prev, int updateres) { + struct strbuf buf_prefix = STRBUF_INIT; + const char *prev_head = NULL; + + strbuf_addf(&buf_prefix, "refs/remotes/%s/", remote); + skip_prefix(buf_prev->buf, buf_prefix.buf, &prev_head); + + if (prev_head && strcmp(prev_head, head_name)) { + printf("'HEAD' at '%s' is '%s', but we have '%s' locally.\n", + remote, head_name, prev_head); + set_head_advice_msg(remote, head_name); + } + else if (updateres && buf_prev->len) { + printf("'HEAD' at '%s' is '%s', " + "but we have a detached HEAD pointing to '%s' locally.\n", + remote, head_name, buf_prev->buf); + set_head_advice_msg(remote, head_name); + } + strbuf_release(&buf_prefix); +} + +static int set_head(const struct ref *remote_refs, int follow_remote_head, + const char *no_warn_branch) +{ + int result = 0, create_only, is_bare, was_detached; + struct strbuf b_head = STRBUF_INIT, b_remote_head = STRBUF_INIT, + b_local_head = STRBUF_INIT; + const char *remote = gtransport->remote->name; + char *head_name = NULL; + struct ref *ref, *matches; + struct ref *fetch_map = NULL, **fetch_map_tail = &fetch_map; + struct refspec_item refspec = { + .force = 0, + .pattern = 1, + .src = (char *) "refs/heads/*", + .dst = (char *) "refs/heads/*", + }; + struct string_list heads = STRING_LIST_INIT_DUP; + struct ref_store *refs = get_main_ref_store(the_repository); + + get_fetch_map(remote_refs, &refspec, &fetch_map_tail, 0); + matches = guess_remote_head(find_ref_by_name(remote_refs, "HEAD"), + fetch_map, 1); + for (ref = matches; ref; ref = ref->next) { + string_list_append(&heads, strip_refshead(ref->name)); + } + + if (follow_remote_head == FOLLOW_REMOTE_NEVER) + goto cleanup; + + if (!heads.nr) + result = 1; + else if (heads.nr > 1) + result = 1; + else + head_name = xstrdup(heads.items[0].string); + + if (!head_name) + goto cleanup; + is_bare = is_bare_repository(); + create_only = follow_remote_head == FOLLOW_REMOTE_ALWAYS ? 0 : !is_bare; + if (is_bare) { + strbuf_addstr(&b_head, "HEAD"); + strbuf_addf(&b_remote_head, "refs/heads/%s", head_name); + } else { + strbuf_addf(&b_head, "refs/remotes/%s/HEAD", remote); + strbuf_addf(&b_remote_head, "refs/remotes/%s/%s", remote, head_name); + } + /* make sure it's valid */ + if (!is_bare && !refs_ref_exists(refs, b_remote_head.buf)) { + result = 1; + goto cleanup; + } + was_detached = refs_update_symref_extended(refs, b_head.buf, b_remote_head.buf, + "fetch", &b_local_head, create_only); + if (was_detached == -1) { + result = 1; + goto cleanup; + } + if (verbosity >= 0 && + follow_remote_head == FOLLOW_REMOTE_WARN && + (!no_warn_branch || strcmp(no_warn_branch, head_name))) + report_set_head(remote, head_name, &b_local_head, was_detached); + +cleanup: + free(head_name); + free_refs(fetch_map); + free_refs(matches); + string_list_clear(&heads, 0); + strbuf_release(&b_head); + strbuf_release(&b_local_head); + strbuf_release(&b_remote_head); + return result; +} + +static int uses_remote_tracking(struct transport *transport, struct refspec *rs) +{ + if (!remote_is_configured(transport->remote, 0)) + return 0; + + if (!rs->nr) + rs = &transport->remote->fetch; + + for (int i = 0; i < rs->nr; i++) + if (rs->items[i].dst) + return 1; + + return 0; +} + static int do_fetch(struct transport *transport, struct refspec *rs, const struct fetch_config *config) @@ -1643,6 +1775,11 @@ static int do_fetch(struct transport *transport, "refs/tags/"); } + if (uses_remote_tracking(transport, rs)) { + must_list_refs = 1; + strvec_push(&transport_ls_refs_options.ref_prefixes, "HEAD"); + } + if (must_list_refs) { trace2_region_enter("fetch", "remote_refs", the_repository); remote_refs = transport_get_remote_refs(transport, @@ -1787,6 +1924,13 @@ static int do_fetch(struct transport *transport, "you need to specify exactly one branch with the --set-upstream option")); } } + if (set_head(remote_refs, transport->remote->follow_remote_head, + transport->remote->no_warn_branch)) + ; + /* + * Way too many cases where this can go wrong + * so let's just fail silently for now. + */ cleanup: if (retcode) { diff --git a/builtin/for-each-repo.c b/builtin/for-each-repo.c index fae7f91cf1..325a7925f1 100644 --- a/builtin/for-each-repo.c +++ b/builtin/for-each-repo.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE + #include "builtin.h" #include "config.h" #include "gettext.h" @@ -36,7 +37,7 @@ int cmd_for_each_repo(int argc, { static const char *config_key = NULL; int keep_going = 0; - int i, result = 0; + int result = 0; const struct string_list *values; int err; @@ -61,7 +62,7 @@ int cmd_for_each_repo(int argc, else if (err) return 0; - for (i = 0; i < values->nr; i++) { + for (size_t i = 0; i < values->nr; i++) { int ret = run_command_on_repo(values->items[i].string, argc, argv); if (ret) { if (!keep_going) diff --git a/builtin/fsmonitor--daemon.c b/builtin/fsmonitor--daemon.c index f3f6bd330b..029dc64d6c 100644 --- a/builtin/fsmonitor--daemon.c +++ b/builtin/fsmonitor--daemon.c @@ -1,4 +1,6 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "abspath.h" #include "config.h" diff --git a/builtin/gc.c b/builtin/gc.c index 4ae5196aed..a9b1c36de2 100644 --- a/builtin/gc.c +++ b/builtin/gc.c @@ -9,7 +9,10 @@ * * Copyright (c) 2006 Shawn O. Pearce */ + #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "abspath.h" #include "date.h" diff --git a/builtin/grep.c b/builtin/grep.c index 98b85c7fca..d00ee76f24 100644 --- a/builtin/grep.c +++ b/builtin/grep.c @@ -3,7 +3,10 @@ * * Copyright (c) 2006 Junio C Hamano */ + #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "abspath.h" #include "gettext.h" diff --git a/builtin/help.c b/builtin/help.c index 6a72d991a8..05136279cf 100644 --- a/builtin/help.c +++ b/builtin/help.c @@ -1,8 +1,9 @@ - /* * Builtin help command */ + #define USE_THE_REPOSITORY_VARIABLE + #include "builtin.h" #include "config.h" #include "exec-cmd.h" @@ -129,7 +130,6 @@ static void list_config_help(enum show_config_type type) struct string_list keys = STRING_LIST_INIT_DUP; struct string_list keys_uniq = STRING_LIST_INIT_DUP; struct string_list_item *item; - int i; for (p = config_name_list; *p; p++) { const char *var = *p; @@ -156,7 +156,7 @@ static void list_config_help(enum show_config_type type) e->prefix, e->placeholder); string_list_sort(&keys); - for (i = 0; i < keys.nr; i++) { + for (size_t i = 0; i < keys.nr; i++) { const char *var = keys.items[i].string; const char *wildcard, *tag, *cut; const char *dot = NULL; diff --git a/builtin/index-pack.c b/builtin/index-pack.c index cde49e0b4d..0b62b2589f 100644 --- a/builtin/index-pack.c +++ b/builtin/index-pack.c @@ -1,4 +1,6 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "config.h" #include "delta.h" @@ -1334,7 +1336,6 @@ static void resolve_deltas(struct pack_idx_option *opts) base_cache_limit = opts->delta_base_cache_limit * nr_threads; if (nr_threads > 1 || getenv("GIT_FORCE_THREADS")) { init_thread(); - work_lock(); for (i = 0; i < nr_threads; i++) { int ret = pthread_create(&thread_data[i].thread, NULL, threaded_second_pass, thread_data + i); @@ -1342,7 +1343,6 @@ static void resolve_deltas(struct pack_idx_option *opts) die(_("unable to create thread: %s"), strerror(ret)); } - work_unlock(); for (i = 0; i < nr_threads; i++) pthread_join(thread_data[i].thread, NULL); cleanup_thread(); diff --git a/builtin/log.c b/builtin/log.c index 368f6580a6..75e1b34123 100644 --- a/builtin/log.c +++ b/builtin/log.c @@ -4,7 +4,10 @@ * (C) Copyright 2006 Linus Torvalds * 2006 Junio Hamano */ + #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "abspath.h" #include "config.h" @@ -528,10 +531,14 @@ static int cmd_log_walk_no_free(struct rev_info *rev) * but we didn't actually show the commit. */ rev->max_count++; - if (!rev->reflog_info) { + if (!rev->reflog_info && !rev->remerge_diff) { /* * We may show a given commit multiple times when - * walking the reflogs. + * walking the reflogs. Therefore we still need it. + * + * Likewise, we potentially still need the parents + * of * already shown commits to determine merge + * bases when showing remerge diffs. */ free_commit_buffer(the_repository->parsed_objects, commit); diff --git a/builtin/ls-files.c b/builtin/ls-files.c index e016b0415d..15499cd12b 100644 --- a/builtin/ls-files.c +++ b/builtin/ls-files.c @@ -5,7 +5,10 @@ * * Copyright (C) Linus Torvalds, 2005 */ + #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "config.h" #include "convert.h" diff --git a/builtin/mailsplit.c b/builtin/mailsplit.c index b8f7150ce9..41dd304731 100644 --- a/builtin/mailsplit.c +++ b/builtin/mailsplit.c @@ -4,6 +4,9 @@ * It just splits a mbox into a list of files: "0001" "0002" .. * so you can process them further from there. */ + +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "gettext.h" #include "string-list.h" @@ -172,7 +175,6 @@ static int split_maildir(const char *maildir, const char *dir, char *file = NULL; FILE *f = NULL; int ret = -1; - int i; struct string_list list = STRING_LIST_INIT_DUP; list.cmp = maildir_filename_cmp; @@ -180,7 +182,7 @@ static int split_maildir(const char *maildir, const char *dir, if (populate_maildir_list(&list, maildir) < 0) goto out; - for (i = 0; i < list.nr; i++) { + for (size_t i = 0; i < list.nr; i++) { char *name; free(file); diff --git a/builtin/merge-file.c b/builtin/merge-file.c index cb42865eb5..7e315f374b 100644 --- a/builtin/merge-file.c +++ b/builtin/merge-file.c @@ -1,4 +1,6 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "abspath.h" #include "diff.h" diff --git a/builtin/merge-index.c b/builtin/merge-index.c index a5b87ee3c5..342699edb7 100644 --- a/builtin/merge-index.c +++ b/builtin/merge-index.c @@ -1,4 +1,6 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "hex.h" #include "read-cache-ll.h" diff --git a/builtin/merge-ours.c b/builtin/merge-ours.c index 1fcf53f005..3ecd9172f1 100644 --- a/builtin/merge-ours.c +++ b/builtin/merge-ours.c @@ -7,7 +7,9 @@ * * Pretend we resolved the heads, but declare our tree trumps everybody else. */ + #define USE_THE_REPOSITORY_VARIABLE + #include "git-compat-util.h" #include "builtin.h" #include "diff.h" diff --git a/builtin/merge-tree.c b/builtin/merge-tree.c index c5ed472967..9a6c8b4e4c 100644 --- a/builtin/merge-tree.c +++ b/builtin/merge-tree.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE + #include "builtin.h" #include "tree-walk.h" #include "xdiff-interface.h" @@ -497,10 +498,9 @@ static int real_merge(struct merge_tree_options *o, if (!result.clean) { struct string_list conflicted_files = STRING_LIST_INIT_NODUP; const char *last = NULL; - int i; merge_get_conflicted_files(&result, &conflicted_files); - for (i = 0; i < conflicted_files.nr; i++) { + for (size_t i = 0; i < conflicted_files.nr; i++) { const char *name = conflicted_files.items[i].string; struct stage_info *c = conflicted_files.items[i].util; if (!o->name_only) @@ -584,7 +584,7 @@ int cmd_merge_tree(int argc, if (xopts.nr && o.mode == MODE_TRIVIAL) die(_("--trivial-merge is incompatible with all other options")); - for (int x = 0; x < xopts.nr; x++) + for (size_t x = 0; x < xopts.nr; x++) if (parse_merge_opt(&o.merge_options, xopts.v[x])) die(_("unknown strategy option: -X%s"), xopts.v[x]); diff --git a/builtin/merge.c b/builtin/merge.c index e32c99087f..5f67007bba 100644 --- a/builtin/merge.c +++ b/builtin/merge.c @@ -5,7 +5,10 @@ * * Based on git-merge.sh by Junio C Hamano. */ + #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "abspath.h" diff --git a/builtin/mv.c b/builtin/mv.c index 472a278737..55a7d471dc 100644 --- a/builtin/mv.c +++ b/builtin/mv.c @@ -3,7 +3,9 @@ * * Copyright (C) 2006 Johannes Schindelin */ + #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "builtin.h" #include "abspath.h" diff --git a/builtin/name-rev.c b/builtin/name-rev.c index 765eb20a93..beac166b5c 100644 --- a/builtin/name-rev.c +++ b/builtin/name-rev.c @@ -1,4 +1,6 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "environment.h" #include "gettext.h" diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c index 7dc51c03c4..1c3b842651 100644 --- a/builtin/pack-objects.c +++ b/builtin/pack-objects.c @@ -1,4 +1,6 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "environment.h" #include "gettext.h" diff --git a/builtin/pack-redundant.c b/builtin/pack-redundant.c index bc61990a93..e046575871 100644 --- a/builtin/pack-redundant.c +++ b/builtin/pack-redundant.c @@ -5,6 +5,7 @@ * This file is licensed under the GPL v2. * */ + #define USE_THE_REPOSITORY_VARIABLE #include "builtin.h" @@ -389,7 +390,6 @@ static int cmp_remaining_objects(const void *a, const void *b) static void sort_pack_list(struct pack_list **pl) { struct pack_list **ary, *p; - int i; size_t n = pack_list_size(*pl); if (n < 2) @@ -403,7 +403,7 @@ static void sort_pack_list(struct pack_list **pl) QSORT(ary, n, cmp_remaining_objects); /* link them back again */ - for (i = 0; i < n - 1; i++) + for (size_t i = 0; i < n - 1; i++) ary[i]->next = ary[i + 1]; ary[n - 1]->next = NULL; *pl = ary[0]; diff --git a/builtin/pack-refs.c b/builtin/pack-refs.c index 2d83c1ed2a..4fdd68880e 100644 --- a/builtin/pack-refs.c +++ b/builtin/pack-refs.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE + #include "builtin.h" #include "config.h" #include "gettext.h" diff --git a/builtin/patch-id.c b/builtin/patch-id.c index 93b398e391..f540d8daa7 100644 --- a/builtin/patch-id.c +++ b/builtin/patch-id.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE + #include "builtin.h" #include "config.h" #include "diff.h" @@ -8,13 +9,13 @@ #include "parse-options.h" #include "setup.h" -static void flush_current_id(int patchlen, struct object_id *id, struct object_id *result) +static void flush_current_id(size_t patchlen, struct object_id *id, struct object_id *result) { if (patchlen) printf("%s %s\n", oid_to_hex(result), oid_to_hex(id)); } -static int remove_space(char *line) +static size_t remove_space(char *line) { char *src = line; char *dst = line; @@ -61,10 +62,11 @@ static int scan_hunk_header(const char *p, int *p_before, int *p_after) return 1; } -static int get_one_patchid(struct object_id *next_oid, struct object_id *result, - struct strbuf *line_buf, int stable, int verbatim) +static size_t get_one_patchid(struct object_id *next_oid, struct object_id *result, + struct strbuf *line_buf, int stable, int verbatim) { - int patchlen = 0, found_next = 0; + size_t patchlen = 0; + int found_next = 0; int before = -1, after = -1; int diff_is_binary = 0; char pre_oid_str[GIT_MAX_HEXSZ + 1], post_oid_str[GIT_MAX_HEXSZ + 1]; @@ -76,7 +78,7 @@ static int get_one_patchid(struct object_id *next_oid, struct object_id *result, while (strbuf_getwholeline(line_buf, stdin, '\n') != EOF) { char *line = line_buf->buf; const char *p = line; - int len; + size_t len; /* Possibly skip over the prefix added by "log" or "format-patch" */ if (!skip_prefix(line, "commit ", &p) && @@ -177,7 +179,7 @@ static int get_one_patchid(struct object_id *next_oid, struct object_id *result, static void generate_id_list(int stable, int verbatim) { struct object_id oid, n, result; - int patchlen; + size_t patchlen; struct strbuf line_buf = STRBUF_INIT; oidclr(&oid, the_repository->hash_algo); diff --git a/builtin/prune.c b/builtin/prune.c index 2b1de01339..aeff9ca1b3 100644 --- a/builtin/prune.c +++ b/builtin/prune.c @@ -1,4 +1,6 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "commit.h" #include "diff.h" diff --git a/builtin/pull.c b/builtin/pull.c index edc56907aa..9c4a00620a 100644 --- a/builtin/pull.c +++ b/builtin/pull.c @@ -7,6 +7,7 @@ */ #define USE_THE_REPOSITORY_VARIABLE + #include "builtin.h" #include "advice.h" #include "config.h" @@ -941,11 +942,10 @@ static int get_can_ff(struct object_id *orig_head, static int already_up_to_date(struct object_id *orig_head, struct oid_array *merge_heads) { - int i; struct commit *ours; ours = lookup_commit_reference(the_repository, orig_head); - for (i = 0; i < merge_heads->nr; i++) { + for (size_t i = 0; i < merge_heads->nr; i++) { struct commit_list *list = NULL; struct commit *theirs; int ok; diff --git a/builtin/push.c b/builtin/push.c index 51c609f208..90de3746b5 100644 --- a/builtin/push.c +++ b/builtin/push.c @@ -1,7 +1,9 @@ /* * "git push" */ + #define USE_THE_REPOSITORY_VARIABLE + #include "builtin.h" #include "advice.h" #include "branch.h" @@ -417,7 +419,7 @@ static int do_push(int flags, const struct string_list *push_options, struct remote *remote) { - int i, errs; + int errs; struct strvec *url; struct refspec *push_refspec = &rs; @@ -432,7 +434,7 @@ static int do_push(int flags, } errs = 0; url = push_url_of_remote(remote); - for (i = 0; i < url->nr; i++) { + for (size_t i = 0; i < url->nr; i++) { struct transport *transport = transport_get(remote, url->v[i]); if (flags & TRANSPORT_PUSH_OPTIONS) diff --git a/builtin/range-diff.c b/builtin/range-diff.c index 1b33ab66a7..32ddb6613f 100644 --- a/builtin/range-diff.c +++ b/builtin/range-diff.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE + #include "builtin.h" #include "gettext.h" #include "object-name.h" @@ -21,6 +22,7 @@ int cmd_range_diff(int argc, { struct diff_options diffopt = { NULL }; struct strvec other_arg = STRVEC_INIT; + struct strvec diff_merges_arg = STRVEC_INIT; struct range_diff_options range_diff_opts = { .creation_factor = RANGE_DIFF_CREATION_FACTOR_DEFAULT, .diffopt = &diffopt, @@ -36,6 +38,10 @@ int cmd_range_diff(int argc, OPT_PASSTHRU_ARGV(0, "notes", &other_arg, N_("notes"), N_("passed to 'git log'"), PARSE_OPT_OPTARG), + OPT_PASSTHRU_ARGV(0, "diff-merges", &diff_merges_arg, + N_("style"), N_("passed to 'git log'"), 0), + OPT_PASSTHRU_ARGV(0, "remerge-diff", &diff_merges_arg, NULL, + N_("passed to 'git log'"), PARSE_OPT_NOARG), OPT_BOOL(0, "left-only", &left_only, N_("only emit output related to the first range")), OPT_BOOL(0, "right-only", &right_only, @@ -62,6 +68,12 @@ int cmd_range_diff(int argc, if (!simple_color) diffopt.use_color = 1; + /* If `--diff-merges` was specified, imply `--merges` */ + if (diff_merges_arg.nr) { + range_diff_opts.include_merges = 1; + strvec_pushv(&other_arg, diff_merges_arg.v); + } + for (i = 0; i < argc; i++) if (!strcmp(argv[i], "--")) { dash_dash = i; @@ -155,6 +167,7 @@ int cmd_range_diff(int argc, res = show_range_diff(range1.buf, range2.buf, &range_diff_opts); strvec_clear(&other_arg); + strvec_clear(&diff_merges_arg); strbuf_release(&range1); strbuf_release(&range2); diff --git a/builtin/rebase.c b/builtin/rebase.c index bbaca3c5d5..0498fff3c9 100644 --- a/builtin/rebase.c +++ b/builtin/rebase.c @@ -3,7 +3,10 @@ * * Copyright (c) 2018 Pratik Karki */ + #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "abspath.h" diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c index 9d2c07f68d..c2e9103f11 100644 --- a/builtin/receive-pack.c +++ b/builtin/receive-pack.c @@ -1,4 +1,6 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "abspath.h" diff --git a/builtin/reflog.c b/builtin/reflog.c index 5a0c22f2f7..95f264989b 100644 --- a/builtin/reflog.c +++ b/builtin/reflog.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE + #include "builtin.h" #include "config.h" #include "gettext.h" diff --git a/builtin/remote.c b/builtin/remote.c index 1ad3e70a6b..0435963286 100644 --- a/builtin/remote.c +++ b/builtin/remote.c @@ -1,4 +1,6 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "config.h" #include "gettext.h" @@ -1403,12 +1405,42 @@ static int show(int argc, const char **argv, const char *prefix, return result; } +static void report_set_head_auto(const char *remote, const char *head_name, + struct strbuf *b_local_head, int was_detached) { + struct strbuf buf_prefix = STRBUF_INIT; + const char *prev_head = NULL; + + strbuf_addf(&buf_prefix, "refs/remotes/%s/", remote); + skip_prefix(b_local_head->buf, buf_prefix.buf, &prev_head); + + if (prev_head && !strcmp(prev_head, head_name)) + printf(_("'%s/HEAD' is unchanged and points to '%s'\n"), + remote, head_name); + else if (prev_head) + printf(_("'%s/HEAD' has changed from '%s' and now points to '%s'\n"), + remote, prev_head, head_name); + else if (!b_local_head->len) + printf(_("'%s/HEAD' is now created and points to '%s'\n"), + remote, head_name); + else if (was_detached && b_local_head->len) + printf(_("'%s/HEAD' was detached at '%s' and now points to '%s'\n"), + remote, b_local_head->buf, head_name); + else + printf(_("'%s/HEAD' used to point to '%s' " + "(which is not a remote branch), but now points to '%s'\n"), + remote, b_local_head->buf, head_name); + strbuf_release(&buf_prefix); +} + static int set_head(int argc, const char **argv, const char *prefix, struct repository *repo UNUSED) { - int i, opt_a = 0, opt_d = 0, result = 0; - struct strbuf buf = STRBUF_INIT, buf2 = STRBUF_INIT; + int i, opt_a = 0, opt_d = 0, result = 0, was_detached; + struct strbuf b_head = STRBUF_INIT, b_remote_head = STRBUF_INIT, + b_local_head = STRBUF_INIT; char *head_name = NULL; + struct ref_store *refs = get_main_ref_store(the_repository); + struct remote *remote; struct option options[] = { OPT_BOOL('a', "auto", &opt_a, @@ -1419,8 +1451,10 @@ static int set_head(int argc, const char **argv, const char *prefix, }; argc = parse_options(argc, argv, prefix, options, builtin_remote_sethead_usage, 0); - if (argc) - strbuf_addf(&buf, "refs/remotes/%s/HEAD", argv[0]); + if (argc) { + strbuf_addf(&b_head, "refs/remotes/%s/HEAD", argv[0]); + remote = remote_get(argv[0]); + } if (!opt_a && !opt_d && argc == 2) { head_name = xstrdup(argv[1]); @@ -1439,25 +1473,39 @@ static int set_head(int argc, const char **argv, const char *prefix, head_name = xstrdup(states.heads.items[0].string); free_remote_ref_states(&states); } else if (opt_d && !opt_a && argc == 1) { - if (refs_delete_ref(get_main_ref_store(the_repository), NULL, buf.buf, NULL, REF_NO_DEREF)) - result |= error(_("Could not delete %s"), buf.buf); + if (refs_delete_ref(refs, NULL, b_head.buf, NULL, REF_NO_DEREF)) + result |= error(_("Could not delete %s"), b_head.buf); } else usage_with_options(builtin_remote_sethead_usage, options); - if (head_name) { - strbuf_addf(&buf2, "refs/remotes/%s/%s", argv[0], head_name); - /* make sure it's valid */ - if (!refs_ref_exists(get_main_ref_store(the_repository), buf2.buf)) - result |= error(_("Not a valid ref: %s"), buf2.buf); - else if (refs_update_symref(get_main_ref_store(the_repository), buf.buf, buf2.buf, "remote set-head")) - result |= error(_("Could not setup %s"), buf.buf); - else if (opt_a) - printf("%s/HEAD set to %s\n", argv[0], head_name); - free(head_name); + if (!head_name) + goto cleanup; + strbuf_addf(&b_remote_head, "refs/remotes/%s/%s", argv[0], head_name); + if (!refs_ref_exists(refs, b_remote_head.buf)) { + result |= error(_("Not a valid ref: %s"), b_remote_head.buf); + goto cleanup; + } + was_detached = refs_update_symref_extended(refs, b_head.buf, b_remote_head.buf, + "remote set-head", &b_local_head, 0); + if (was_detached == -1) { + result |= error(_("Could not set up %s"), b_head.buf); + goto cleanup; + } + if (opt_a) + report_set_head_auto(argv[0], head_name, &b_local_head, was_detached); + if (remote->follow_remote_head == FOLLOW_REMOTE_ALWAYS) { + struct strbuf config_name = STRBUF_INIT; + strbuf_addf(&config_name, + "remote.%s.followremotehead", remote->name); + git_config_set(config_name.buf, "warn"); + strbuf_release(&config_name); } - strbuf_release(&buf); - strbuf_release(&buf2); +cleanup: + free(head_name); + strbuf_release(&b_head); + strbuf_release(&b_remote_head); + strbuf_release(&b_local_head); return result; } diff --git a/builtin/repack.c b/builtin/repack.c index 9c21fc482d..0c6dad7df4 100644 --- a/builtin/repack.c +++ b/builtin/repack.c @@ -1,4 +1,6 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "config.h" #include "dir.h" diff --git a/builtin/replay.c b/builtin/replay.c index 2d12a4e403..1afc6d1ee0 100644 --- a/builtin/replay.c +++ b/builtin/replay.c @@ -2,9 +2,11 @@ * "git replay" builtin command */ +#define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "git-compat-util.h" -#define USE_THE_REPOSITORY_VARIABLE #include "builtin.h" #include "environment.h" #include "hex.h" diff --git a/builtin/rerere.c b/builtin/rerere.c index f7143c3f5d..41127e24e5 100644 --- a/builtin/rerere.c +++ b/builtin/rerere.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE + #include "builtin.h" #include "config.h" #include "gettext.h" @@ -55,7 +56,7 @@ int cmd_rerere(int argc, struct repository *repo UNUSED) { struct string_list merge_rr = STRING_LIST_INIT_DUP; - int i, autoupdate = -1, flags = 0; + int autoupdate = -1, flags = 0; struct option options[] = { OPT_SET_INT(0, "rerere-autoupdate", &autoupdate, @@ -98,11 +99,11 @@ int cmd_rerere(int argc, if (setup_rerere(the_repository, &merge_rr, flags | RERERE_READONLY) < 0) return 0; - for (i = 0; i < merge_rr.nr; i++) + for (size_t i = 0; i < merge_rr.nr; i++) printf("%s\n", merge_rr.items[i].string); } else if (!strcmp(argv[0], "remaining")) { rerere_remaining(the_repository, &merge_rr); - for (i = 0; i < merge_rr.nr; i++) { + for (size_t i = 0; i < merge_rr.nr; i++) { if (merge_rr.items[i].util != RERERE_RESOLVED) printf("%s\n", merge_rr.items[i].string); else @@ -114,7 +115,7 @@ int cmd_rerere(int argc, if (setup_rerere(the_repository, &merge_rr, flags | RERERE_READONLY) < 0) return 0; - for (i = 0; i < merge_rr.nr; i++) { + for (size_t i = 0; i < merge_rr.nr; i++) { const char *path = merge_rr.items[i].string; const struct rerere_id *id = merge_rr.items[i].util; if (diff_two(rerere_path(id, "preimage"), path, path, path)) diff --git a/builtin/reset.c b/builtin/reset.c index 7154f88826..73b4537a9a 100644 --- a/builtin/reset.c +++ b/builtin/reset.c @@ -7,7 +7,9 @@ * * Copyright (c) 2005, 2006 Linus Torvalds and Junio C Hamano */ + #define USE_THE_REPOSITORY_VARIABLE + #include "builtin.h" #include "advice.h" #include "config.h" diff --git a/builtin/rev-list.c b/builtin/rev-list.c index 8fe83893fa..3196da7b2d 100644 --- a/builtin/rev-list.c +++ b/builtin/rev-list.c @@ -1,4 +1,6 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "config.h" #include "commit.h" diff --git a/builtin/rev-parse.c b/builtin/rev-parse.c index 8401b4d7ab..949747a6b6 100644 --- a/builtin/rev-parse.c +++ b/builtin/rev-parse.c @@ -3,7 +3,10 @@ * * Copyright (C) Linus Torvalds, 2005 */ + #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "abspath.h" diff --git a/builtin/revert.c b/builtin/revert.c index b7917dddd3..aca6c293cd 100644 --- a/builtin/revert.c +++ b/builtin/revert.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE + #include "git-compat-util.h" #include "builtin.h" #include "parse-options.h" diff --git a/builtin/rm.c b/builtin/rm.c index eaff027258..12ae086a55 100644 --- a/builtin/rm.c +++ b/builtin/rm.c @@ -3,7 +3,10 @@ * * Copyright (C) Linus Torvalds 2006 */ + #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "advice.h" #include "config.h" diff --git a/builtin/shortlog.c b/builtin/shortlog.c index c86b75d981..30075b67be 100644 --- a/builtin/shortlog.c +++ b/builtin/shortlog.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE + #include "builtin.h" #include "config.h" #include "commit.h" diff --git a/builtin/show-branch.c b/builtin/show-branch.c index cd6bdf63bc..fce6b404e9 100644 --- a/builtin/show-branch.c +++ b/builtin/show-branch.c @@ -1,4 +1,6 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "config.h" #include "environment.h" diff --git a/builtin/show-index.c b/builtin/show-index.c index f164c01bbe..756d632b51 100644 --- a/builtin/show-index.c +++ b/builtin/show-index.c @@ -1,4 +1,6 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "gettext.h" #include "hash.h" @@ -38,6 +40,15 @@ int cmd_show_index(int argc, repo_set_hash_algo(the_repository, hash_algo); } + /* + * Fallback to SHA1 if we are running outside of a repository. + * + * TODO: Figure out and implement a way to detect the hash algorithm in use by the + * the index file passed in and use that instead. + */ + if (!the_hash_algo) + repo_set_hash_algo(the_repository, GIT_HASH_SHA1); + hashsz = the_hash_algo->rawsz; if (fread(top_index, 2 * 4, 1, stdin) != 1) diff --git a/builtin/sparse-checkout.c b/builtin/sparse-checkout.c index 34af5b2590..14dcace5f8 100644 --- a/builtin/sparse-checkout.c +++ b/builtin/sparse-checkout.c @@ -1,4 +1,6 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "config.h" #include "dir.h" diff --git a/builtin/stash.c b/builtin/stash.c index c212b1c0b2..dbaa999cf1 100644 --- a/builtin/stash.c +++ b/builtin/stash.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE + #include "builtin.h" #include "abspath.h" #include "config.h" @@ -873,9 +874,8 @@ static void diff_include_untracked(const struct stash_info *info, struct diff_op struct tree *tree[ARRAY_SIZE(oid)]; struct tree_desc tree_desc[ARRAY_SIZE(oid)]; struct unpack_trees_options unpack_tree_opt = { 0 }; - int i; - for (i = 0; i < ARRAY_SIZE(oid); i++) { + for (size_t i = 0; i < ARRAY_SIZE(oid); i++) { tree[i] = parse_tree_indirect(oid[i]); if (parse_tree(tree[i]) < 0) die(_("failed to parse tree")); @@ -1557,12 +1557,11 @@ static int do_push_stash(const struct pathspec *ps, const char *stash_msg, int q repo_read_index_preload(the_repository, NULL, 0); if (!include_untracked && ps->nr) { - int i; char *ps_matched = xcalloc(ps->nr, 1); /* TODO: audit for interaction with sparse-index. */ ensure_full_index(the_repository->index); - for (i = 0; i < the_repository->index->cache_nr; i++) + for (size_t i = 0; i < the_repository->index->cache_nr; i++) ce_path_match(the_repository->index, the_repository->index->cache[i], ps, ps_matched); diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c index 19e5878381..f9b970f8a6 100644 --- a/builtin/submodule--helper.c +++ b/builtin/submodule--helper.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE + #include "builtin.h" #include "abspath.h" #include "environment.h" @@ -194,7 +195,7 @@ static int module_list_compute(const char **argv, struct pathspec *pathspec, struct module_list *list) { - int i, result = 0; + int result = 0; char *ps_matched = NULL; parse_pathspec(pathspec, 0, @@ -207,7 +208,7 @@ static int module_list_compute(const char **argv, if (repo_read_index(the_repository) < 0) die(_("index file corrupt")); - for (i = 0; i < the_repository->index->cache_nr; i++) { + for (size_t i = 0; i < the_repository->index->cache_nr; i++) { const struct cache_entry *ce = the_repository->index->cache[i]; if (!match_pathspec(the_repository->index, pathspec, ce->name, ce_namelen(ce), @@ -3396,7 +3397,6 @@ static void die_on_index_match(const char *path, int force) die(_("index file corrupt")); if (ps.nr) { - int i; char *ps_matched = xcalloc(ps.nr, 1); /* TODO: audit for interaction with sparse-index. */ @@ -3406,7 +3406,7 @@ static void die_on_index_match(const char *path, int force) * Since there is only one pathspec, we just need to * check ps_matched[0] to know if a cache entry matched. */ - for (i = 0; i < the_repository->index->cache_nr; i++) { + for (size_t i = 0; i < the_repository->index->cache_nr; i++) { ce_path_match(the_repository->index, the_repository->index->cache[i], &ps, ps_matched); diff --git a/builtin/tag.c b/builtin/tag.c index affa14d659..c4bd145831 100644 --- a/builtin/tag.c +++ b/builtin/tag.c @@ -5,7 +5,10 @@ * Carlos Rica <jasampler@gmail.com> * Based on git-tag.sh and mktag.c by Linus Torvalds. */ + #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "advice.h" #include "config.h" diff --git a/builtin/unpack-objects.c b/builtin/unpack-objects.c index 02b8d02f63..2197d6d933 100644 --- a/builtin/unpack-objects.c +++ b/builtin/unpack-objects.c @@ -1,4 +1,6 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "bulk-checkin.h" #include "config.h" diff --git a/builtin/update-index.c b/builtin/update-index.c index 45b4a8b555..74bbad9f87 100644 --- a/builtin/update-index.c +++ b/builtin/update-index.c @@ -3,7 +3,10 @@ * * Copyright (C) Linus Torvalds, 2005 */ + #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "bulk-checkin.h" #include "config.h" diff --git a/builtin/update-ref.c b/builtin/update-ref.c index 670e7812d6..4d35bdc4b4 100644 --- a/builtin/update-ref.c +++ b/builtin/update-ref.c @@ -1,4 +1,6 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "config.h" #include "gettext.h" diff --git a/builtin/var.c b/builtin/var.c index 2ecaed51b4..1449656cc9 100644 --- a/builtin/var.c +++ b/builtin/var.c @@ -3,7 +3,9 @@ * * Copyright (C) Eric Biederman, 2005 */ + #define USE_THE_REPOSITORY_VARIABLE + #include "builtin.h" #include "attr.h" @@ -178,10 +180,9 @@ static void list_vars(void) if ((val = ptr->read(0))) { if (ptr->multivalued && *val) { struct string_list list = STRING_LIST_INIT_DUP; - int i; string_list_split(&list, val, '\n', -1); - for (i = 0; i < list.nr; i++) + for (size_t i = 0; i < list.nr; i++) printf("%s=%s\n", ptr->name, list.items[i].string); string_list_clear(&list, 0); } else { diff --git a/builtin/worktree.c b/builtin/worktree.c index 0186d60ab1..c043d4d523 100644 --- a/builtin/worktree.c +++ b/builtin/worktree.c @@ -1,4 +1,6 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "builtin.h" #include "abspath.h" #include "advice.h" diff --git a/bulk-checkin.c b/bulk-checkin.c index 2753d5bbe4..433070a3bd 100644 --- a/bulk-checkin.c +++ b/bulk-checkin.c @@ -3,6 +3,7 @@ */ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "bulk-checkin.h" @@ -271,7 +272,7 @@ static int deflate_blob_to_pack(struct bulk_checkin_packfile *state, OBJ_BLOB, size); the_hash_algo->init_fn(&ctx); the_hash_algo->update_fn(&ctx, obuf, header_len); - the_hash_algo->init_fn(&checkpoint.ctx); + the_hash_algo->unsafe_init_fn(&checkpoint.ctx); /* Note: idx is non-NULL when we are writing */ if ((flags & HASH_WRITE_OBJECT) != 0) diff --git a/bundle-uri.c b/bundle-uri.c index cdf9e4f9e1..744257c49c 100644 --- a/bundle-uri.c +++ b/bundle-uri.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "bundle-uri.h" @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "lockfile.h" @@ -420,36 +421,6 @@ static int write_bundle_refs(int bundle_fd, struct rev_info *revs) e->name); goto skip_write_ref; } - /* - * If you run "git bundle create bndl v1.0..v2.0", the - * name of the positive ref is "v2.0" but that is the - * commit that is referenced by the tag, and not the tag - * itself. - */ - if (!oideq(&oid, &e->item->oid)) { - /* - * Is this the positive end of a range expressed - * in terms of a tag (e.g. v2.0 from the range - * "v1.0..v2.0")? - */ - struct commit *one = lookup_commit_reference(revs->repo, &oid); - struct object *obj; - - if (e->item == &(one->object)) { - /* - * Need to include e->name as an - * independent ref to the pack-objects - * input, so that the tag is included - * in the output; otherwise we would - * end up triggering "empty bundle" - * error. - */ - obj = parse_object_or_die(&oid, e->name); - obj->flags |= SHOWN; - add_pending_object(revs, obj, e->name); - } - goto skip_write_ref; - } ref_count++; write_or_die(bundle_fd, oid_to_hex(&e->item->oid), the_hash_algo->hexsz); diff --git a/cache-tree.c b/cache-tree.c index c595e86120..bcbcad3d61 100644 --- a/cache-tree.c +++ b/cache-tree.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "gettext.h" diff --git a/chunk-format.c b/chunk-format.c index 2dde24e6a3..51b5a2c959 100644 --- a/chunk-format.c +++ b/chunk-format.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "chunk-format.h" diff --git a/ci/install-dependencies.sh b/ci/install-dependencies.sh index d020cb7aa5..d1cb9fa878 100755 --- a/ci/install-dependencies.sh +++ b/ci/install-dependencies.sh @@ -58,6 +58,7 @@ ubuntu-*|ubuntu32-*|debian-*) make libssl-dev libcurl4-openssl-dev libexpat-dev wget sudo default-jre \ tcl tk gettext zlib1g-dev perl-modules liberror-perl libauthen-sasl-perl \ libemail-valid-perl libio-pty-perl libio-socket-ssl-perl libnet-smtp-ssl-perl libdbd-sqlite3-perl libcgi-pm-perl \ + libpcre2-dev meson ninja-build pkg-config \ ${CC_PACKAGE:-${CC:-gcc}} $PYTHON_PACKAGE case "$distro" in @@ -90,6 +91,12 @@ macos-*) sudo xattr -d com.apple.quarantine "$CUSTOM_PATH/p4" "$CUSTOM_PATH/p4d" 2>/dev/null || true rm helix-core-server.tgz + case "$jobname" in + osx-meson) + brew install meson ninja pcre2 + ;; + esac + if test -n "$CC_PACKAGE" then BREW_PACKAGE=${CC_PACKAGE/-/@} @@ -18,7 +18,8 @@ elif test true = "$GITLAB_CI" then begin_group () { need_to_end_group=t - printf "\e[0Ksection_start:$(date +%s):$(echo "$1" | tr ' ' _)[collapsed=true]\r\e[0K$1\n" + printf '\e[0Ksection_start:%s:%s[collapsed=true]\r\e[0K%s\n' \ + "$(date +%s)" "$(echo "$1" | tr ' ' _)" "$1" trap "end_group '$1'" EXIT set -x } @@ -27,7 +28,8 @@ then test -n "$need_to_end_group" || return 0 set +x need_to_end_group= - printf "\e[0Ksection_end:$(date +%s):$(echo "$1" | tr ' ' _)\r\e[0K\n" + printf '\e[0Ksection_end:%s:%s\r\e[0K\n' \ + "$(date +%s)" "$(echo "$1" | tr ' ' _)" trap - EXIT } else @@ -55,8 +57,7 @@ group () { return $res } -begin_group "CI setup" -trap "end_group 'CI setup'" EXIT +begin_group "CI setup via $(basename $0)" # Set 'exit on error' for all CI scripts to let the caller know that # something went wrong. @@ -180,9 +181,9 @@ handle_failed_tests () { } create_failed_test_artifacts () { - mkdir -p t/failed-test-artifacts + mkdir -p "${TEST_OUTPUT_DIRECTORY:-t}"/failed-test-artifacts - for test_exit in t/test-results/*.exit + for test_exit in "${TEST_OUTPUT_DIRECTORY:-t}"/test-results/*.exit do test 0 != "$(cat "$test_exit")" || continue @@ -191,11 +192,11 @@ create_failed_test_artifacts () { printf "\\e[33m\\e[1m=== Failed test: ${test_name} ===\\e[m\\n" echo "The full logs are in the 'print test failures' step below." echo "See also the 'failed-tests-*' artifacts attached to this run." - cat "t/test-results/$test_name.markup" + cat "${TEST_OUTPUT_DIRECTORY:-t}/test-results/$test_name.markup" - trash_dir="t/trash directory.$test_name" - cp "t/test-results/$test_name.out" t/failed-test-artifacts/ - tar czf t/failed-test-artifacts/"$test_name".trash.tar.gz "$trash_dir" + trash_dir="${TEST_OUTPUT_DIRECTORY:-t}/trash directory.$test_name" + cp "${TEST_OUTPUT_DIRECTORY:-t}/test-results/$test_name.out" "${TEST_OUTPUT_DIRECTORY:-t}"/failed-test-artifacts/ + tar czf "${TEST_OUTPUT_DIRECTORY:-t}/failed-test-artifacts/$test_name.trash.tar.gz" "$trash_dir" done } @@ -236,7 +237,7 @@ then CC="${CC_PACKAGE:-${CC:-gcc}}" DONT_SKIP_TAGS=t handle_failed_tests () { - echo "FAILED_TEST_ARTIFACTS=t/failed-test-artifacts" >>$GITHUB_ENV + echo "FAILED_TEST_ARTIFACTS=${TEST_OUTPUT_DIRECTORY:-t}/failed-test-artifacts" >>$GITHUB_ENV create_failed_test_artifacts return 1 } @@ -394,5 +395,5 @@ esac MAKEFLAGS="$MAKEFLAGS CC=${CC:-cc}" -end_group "CI setup" +end_group "CI setup via $(basename $0)" set -x diff --git a/ci/print-test-failures.sh b/ci/print-test-failures.sh index b1f80aeac3..655687dd82 100755 --- a/ci/print-test-failures.sh +++ b/ci/print-test-failures.sh @@ -46,7 +46,7 @@ do ;; github-actions) mkdir -p failed-test-artifacts - echo "FAILED_TEST_ARTIFACTS=t/failed-test-artifacts" >>$GITHUB_ENV + echo "FAILED_TEST_ARTIFACTS=${TEST_OUTPUT_DIRECTORY:t}/failed-test-artifacts" >>$GITHUB_ENV cp "${TEST_EXIT%.exit}.out" failed-test-artifacts/ tar czf failed-test-artifacts/"$test_name".trash.tar.gz "$trash_dir" continue diff --git a/ci/run-build-and-tests.sh b/ci/run-build-and-tests.sh index 2e28d02b20..76667a1277 100755 --- a/ci/run-build-and-tests.sh +++ b/ci/run-build-and-tests.sh @@ -17,6 +17,7 @@ linux-gcc) export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main ;; linux-TEST-vars) + export OPENSSL_SHA1_UNSAFE=YesPlease export GIT_TEST_SPLIT_INDEX=yes export GIT_TEST_MERGE_ALGORITHM=recursive export GIT_TEST_FULL_IN_PACK_ARRAY=true @@ -48,12 +49,29 @@ pedantic) ;; esac -group Build make -if test -n "$run_tests" -then - group "Run tests" make test || - handle_failed_tests -fi -check_unignored_build_artifacts +case "$jobname" in +*-meson) + group "Configure" meson setup build . \ + --warnlevel 2 --werror \ + --wrap-mode nofallback + group "Build" meson compile -C build -- + if test -n "$run_tests" + then + group "Run tests" meson test -C build --print-errorlogs --test-args="$GIT_TEST_OPTS" || ( + ./t/aggregate-results.sh "${TEST_OUTPUT_DIRECTORY:-t}/test-results" + handle_failed_tests + ) + fi + ;; +*) + group Build make + if test -n "$run_tests" + then + group "Run tests" make test || + handle_failed_tests + fi + ;; +esac +check_unignored_build_artifacts save_good_tree @@ -1,3 +1,5 @@ +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "git-compat-util.h" #include "config.h" #include "color.h" @@ -1,3 +1,5 @@ +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "git-compat-util.h" #include "config.h" #include "column.h" diff --git a/combine-diff.c b/combine-diff.c index 33d0ed7097..641bc92dbd 100644 --- a/combine-diff.c +++ b/combine-diff.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "object-store-ll.h" diff --git a/commit-graph.c b/commit-graph.c index e2e2083951..0df66e5a24 100644 --- a/commit-graph.c +++ b/commit-graph.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "config.h" diff --git a/commit-reach.c b/commit-reach.c index c3518aa360..e3edd11995 100644 --- a/commit-reach.c +++ b/commit-reach.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "commit.h" @@ -1765,7 +1765,6 @@ int commit_tree_extended(const char *msg, size_t msg_len, { &compat_sig, r->compat_hash_algo }, { &sig, r->hash_algo }, }; - int i; /* * We write algorithms in the order they were implemented in @@ -1779,7 +1778,7 @@ int commit_tree_extended(const char *msg, size_t msg_len, * We traverse each algorithm in order, and apply the signature * to each buffer. */ - for (i = 0; i < ARRAY_SIZE(bufs); i++) { + for (size_t i = 0; i < ARRAY_SIZE(bufs); i++) { if (!bufs[i].algo) continue; add_header_signature(&buffer, bufs[i].sig, bufs[i].algo); diff --git a/compat/fsmonitor/fsm-listen-darwin.c b/compat/fsmonitor/fsm-listen-darwin.c index dfa551459d..43c3a915a0 100644 --- a/compat/fsmonitor/fsm-listen-darwin.c +++ b/compat/fsmonitor/fsm-listen-darwin.c @@ -208,13 +208,12 @@ static void fsevent_callback(ConstFSEventStreamRef streamRef UNUSED, const char *slash; char *resolved = NULL; struct strbuf tmp = STRBUF_INIT; - int k; /* * Build a list of all filesystem changes into a private/local * list and without holding any locks. */ - for (k = 0; k < num_of_events; k++) { + for (size_t k = 0; k < num_of_events; k++) { /* * On Mac, we receive an array of absolute paths. */ diff --git a/compat/mingw.c b/compat/mingw.c index 63f36c893b..1d5b211b54 100644 --- a/compat/mingw.c +++ b/compat/mingw.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "../git-compat-util.h" #include "win32.h" @@ -2277,7 +2278,7 @@ repeat: old_handle = CreateFileW(wpold, DELETE, FILE_SHARE_WRITE | FILE_SHARE_READ | FILE_SHARE_DELETE, - NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL); if (old_handle == INVALID_HANDLE_VALUE) { errno = err_win_to_posix(GetLastError()); return -1; diff --git a/compat/poll/poll.c b/compat/poll/poll.c index afa6d24584..a2becd16cd 100644 --- a/compat/poll/poll.c +++ b/compat/poll/poll.c @@ -18,6 +18,8 @@ You should have received a copy of the GNU General Public License along with this program; if not, see <http://www.gnu.org/licenses/>. */ +#define DISABLE_SIGN_COMPARE_WARNINGS + /* To bump the minimum Windows version to Windows Vista */ #include "git-compat-util.h" diff --git a/compat/regex/regex.c b/compat/regex/regex.c index e6f4a5d177..4b09cc4e14 100644 --- a/compat/regex/regex.c +++ b/compat/regex/regex.c @@ -17,6 +17,8 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ +#pragma GCC diagnostic ignored "-Wsign-compare" + #ifdef HAVE_CONFIG_H #include "config.h" #endif diff --git a/compat/terminal.c b/compat/terminal.c index d54efa1c5d..584f27bf7e 100644 --- a/compat/terminal.c +++ b/compat/terminal.c @@ -259,14 +259,13 @@ static DWORD cmode_in, cmode_out; void restore_term(void) { if (use_stty) { - int i; struct child_process cp = CHILD_PROCESS_INIT; if (stty_restore.nr == 0) return; strvec_push(&cp.args, "stty"); - for (i = 0; i < stty_restore.nr; i++) + for (size_t i = 0; i < stty_restore.nr; i++) strvec_push(&cp.args, stty_restore.items[i].string); run_command(&cp); string_list_clear(&stty_restore, 0); diff --git a/compat/win32/headless.c b/compat/win32/headless.c index 11392a0b9a..a6eb116ddc 100644 --- a/compat/win32/headless.c +++ b/compat/win32/headless.c @@ -53,7 +53,8 @@ int WINAPI wWinMain(_In_ HINSTANCE instance, wchar_t git_command_line[32768]; size_t size = sizeof(git_command_line) / sizeof(wchar_t); const wchar_t *needs_quotes = L""; - int slash = 0, i; + size_t slash = 0; + int len; STARTUPINFO startup_info = { .cb = sizeof(STARTUPINFO), @@ -66,7 +67,7 @@ int WINAPI wWinMain(_In_ HINSTANCE instance, DWORD exit_code; /* First, determine the full path of argv[0] */ - for (i = 0; _wpgmptr[i]; i++) + for (size_t i = 0; _wpgmptr[i]; i++) if (_wpgmptr[i] == L' ') needs_quotes = L"\""; else if (_wpgmptr[i] == L'\\') @@ -79,16 +80,16 @@ int WINAPI wWinMain(_In_ HINSTANCE instance, extend_path(_wpgmptr, slash); /* Then, add the full path of `git.exe` as argv[0] */ - i = swprintf_s(git_command_line, size, L"%ls%.*ls\\git.exe%ls", - needs_quotes, slash, _wpgmptr, needs_quotes); - if (i < 0) + len = swprintf_s(git_command_line, size, L"%ls%.*ls\\git.exe%ls", + needs_quotes, (int) slash, _wpgmptr, needs_quotes); + if (len < 0) return 127; /* Too long path */ if (*command_line) { /* Now, append the command-line arguments */ - i = swprintf_s(git_command_line + i, size - i, - L" %ls", command_line); - if (i < 0) + len = swprintf_s(git_command_line + len, size - len, + L" %ls", command_line); + if (len < 0) return 127; } diff --git a/compat/win32mmap.c b/compat/win32mmap.c index a4ab4cb939..e951934316 100644 --- a/compat/win32mmap.c +++ b/compat/win32mmap.c @@ -1,3 +1,5 @@ +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "../git-compat-util.h" void *git_mmap(void *start, size_t length, int prot, int flags, int fd, off_t offset) diff --git a/compat/winansi.c b/compat/winansi.c index 1b3f916b9f..ac2ffb7869 100644 --- a/compat/winansi.c +++ b/compat/winansi.c @@ -4,6 +4,8 @@ #undef NOGDI +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "../git-compat-util.h" #include <wingdi.h> #include <winreg.h> @@ -7,6 +7,7 @@ */ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "abspath.h" diff --git a/config.mak.dev b/config.mak.dev index 8eca7fa228..0fd8cc4d35 100644 --- a/config.mak.dev +++ b/config.mak.dev @@ -53,7 +53,6 @@ ifeq ($(filter extra-all,$(DEVOPTS)),) # These are disabled because we have these all over the place. DEVELOPER_CFLAGS += -Wno-empty-body DEVELOPER_CFLAGS += -Wno-missing-field-initializers -DEVELOPER_CFLAGS += -Wno-sign-compare endif endif diff --git a/config.mak.uname b/config.mak.uname index d5112168a4..b12d4e168a 100644 --- a/config.mak.uname +++ b/config.mak.uname @@ -819,10 +819,6 @@ vcxproj: sed -i 's|\(git\)-\([-a-z]*\)\.exe"|\1.exe" \2|g' \ bin-wrappers/git-{receive-pack,upload-archive} git add -f $(test_bindir_programs) - # remote-ext is a builtin, but invoked as if it were external - sed 's|receive-pack|remote-ext|g' \ - <bin-wrappers/git-receive-pack >bin-wrappers/git-remote-ext - git add -f bin-wrappers/git-remote-ext # Add templates $(MAKE) -C templates @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "config.h" diff --git a/contrib/buildsystems/CMakeLists.txt b/contrib/buildsystems/CMakeLists.txt index 49904ca8a9..10dc54fdcb 100644 --- a/contrib/buildsystems/CMakeLists.txt +++ b/contrib/buildsystems/CMakeLists.txt @@ -867,7 +867,7 @@ list(TRANSFORM perl_modules REPLACE "${CMAKE_SOURCE_DIR}/" "") file(STRINGS ${CMAKE_SOURCE_DIR}/perl/header_templates/fixed_prefix.template.pl perl_header ) string(REPLACE "@PATHSEP@" ":" perl_header "${perl_header}") string(REPLACE "@INSTLIBDIR@" "${INSTLIBDIR}" perl_header "${perl_header}") -file(WRITE ${CMAKE_BINARY_DIR}/PERL-HEADER ${perl_header}) +file(WRITE ${CMAKE_BINARY_DIR}/GIT-PERL-HEADER ${perl_header}) add_custom_command(OUTPUT "${CMAKE_BINARY_DIR}/GIT-VERSION-FILE" COMMAND "${SH_EXE}" "${CMAKE_SOURCE_DIR}/GIT-VERSION-GEN" @@ -882,13 +882,17 @@ foreach(script ${git_perl_scripts} ${perl_modules}) string(REPLACE ".perl" "" perl_gen_path "${script}") get_filename_component(perl_gen_dir "${perl_gen_path}" DIRECTORY) + if(script MATCHES "\.pm$") + string(REGEX REPLACE "^perl" "perl/build/lib" perl_gen_dir "${perl_gen_dir}") + string(REGEX REPLACE "^perl" "perl/build/lib" perl_gen_path "${perl_gen_path}") + endif() file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/${perl_gen_dir}") add_custom_command(OUTPUT "${CMAKE_BINARY_DIR}/${perl_gen_path}" COMMAND "${SH_EXE}" "${CMAKE_SOURCE_DIR}/generate-perl.sh" "${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS" "${CMAKE_BINARY_DIR}/GIT-VERSION-FILE" - "${CMAKE_BINARY_DIR}/PERL-HEADER" + "${CMAKE_BINARY_DIR}/GIT-PERL-HEADER" "${CMAKE_SOURCE_DIR}/${script}" "${CMAKE_BINARY_DIR}/${perl_gen_path}" DEPENDS "${CMAKE_SOURCE_DIR}/generate-perl.sh" @@ -1078,7 +1082,7 @@ endif() #wrapper scripts set(wrapper_scripts - git git-upload-pack git-receive-pack git-upload-archive git-shell git-remote-ext scalar) + git git-upload-pack git-receive-pack git-upload-archive git-shell scalar) set(wrapper_test_scripts test-fake-ssh test-tool) @@ -1087,6 +1091,7 @@ set(wrapper_test_scripts foreach(script ${wrapper_scripts}) file(STRINGS ${CMAKE_SOURCE_DIR}/bin-wrappers/wrap-for-bin.sh content NEWLINE_CONSUME) string(REPLACE "@BUILD_DIR@" "${CMAKE_BINARY_DIR}" content "${content}") + string(REPLACE "@TEMPLATE_DIR@" "'${CMAKE_BINARY_DIR}/templates/blt'" content "${content}") string(REPLACE "@PROG@" "${CMAKE_BINARY_DIR}/${script}${EXE_EXTENSION}" content "${content}") file(WRITE ${CMAKE_BINARY_DIR}/bin-wrappers/${script} ${content}) endforeach() @@ -1094,12 +1099,14 @@ endforeach() foreach(script ${wrapper_test_scripts}) file(STRINGS ${CMAKE_SOURCE_DIR}/bin-wrappers/wrap-for-bin.sh content NEWLINE_CONSUME) string(REPLACE "@BUILD_DIR@" "${CMAKE_BINARY_DIR}" content "${content}") + string(REPLACE "@TEMPLATE_DIR@" "'${CMAKE_BINARY_DIR}/templates/blt'" content "${content}") string(REPLACE "@PROG@" "${CMAKE_BINARY_DIR}/t/helper/${script}${EXE_EXTENSION}" content "${content}") file(WRITE ${CMAKE_BINARY_DIR}/bin-wrappers/${script} ${content}) endforeach() file(STRINGS ${CMAKE_SOURCE_DIR}/bin-wrappers/wrap-for-bin.sh content NEWLINE_CONSUME) string(REPLACE "@BUILD_DIR@" "${CMAKE_BINARY_DIR}" content "${content}") +string(REPLACE "@TEMPLATE_DIR@" "'${CMAKE_BINARY_DIR}/templates/blt'" content "${content}") string(REPLACE "@GIT_TEXTDOMAINDIR@" "${CMAKE_BINARY_DIR}/po/build/locale" content "${content}") string(REPLACE "@GITPERLLIB@" "${CMAKE_BINARY_DIR}/perl/build/lib" content "${content}") string(REPLACE "@MERGE_TOOLS_DIR@" "${CMAKE_SOURCE_DIR}/mergetools" content "${content}") @@ -1151,53 +1158,54 @@ if(NOT PYTHON_TESTS) endif() file(STRINGS ${CMAKE_SOURCE_DIR}/GIT-BUILD-OPTIONS.in git_build_options NEWLINE_CONSUME) -string(REPLACE "@SHELL_PATH@" "'${SHELL_PATH}'" git_build_options "${git_build_options}") -string(REPLACE "@TEST_SHELL_PATH@" "'${TEST_SHELL_PATH}'" git_build_options "${git_build_options}") -string(REPLACE "@PERL_PATH@" "'${PERL_PATH}'" git_build_options "${git_build_options}") -string(REPLACE "@PERL_LOCALEDIR@" "'${LOCALEDIR}'" git_build_options "${git_build_options}") -string(REPLACE "@NO_PERL_CPAN_FALLBACKS@" "" git_build_options "${git_build_options}") +string(REPLACE "@BROKEN_PATH_FIX@" "" git_build_options "${git_build_options}") string(REPLACE "@DIFF@" "'${DIFF}'" git_build_options "${git_build_options}") -string(REPLACE "@PYTHON_PATH@" "'${PYTHON_PATH}'" git_build_options "${git_build_options}") -string(REPLACE "@TAR@" "'${TAR}'" git_build_options "${git_build_options}") +string(REPLACE "@FSMONITOR_DAEMON_BACKEND@" "win32" git_build_options "${git_build_options}") +string(REPLACE "@FSMONITOR_OS_SETTINGS@" "win32" git_build_options "${git_build_options}") +string(REPLACE "@GITWEBDIR@" "'${GITWEBDIR}'" git_build_options "${git_build_options}") +string(REPLACE "@GIT_INTEROP_MAKE_OPTS@" "" git_build_options "${git_build_options}") +string(REPLACE "@GIT_PERF_LARGE_REPO@" "" git_build_options "${git_build_options}") +string(REPLACE "@GIT_PERF_MAKE_COMMAND@" "" git_build_options "${git_build_options}") +string(REPLACE "@GIT_PERF_MAKE_OPTS@" "" git_build_options "${git_build_options}") +string(REPLACE "@GIT_PERF_REPEAT_COUNT@" "" git_build_options "${git_build_options}") +string(REPLACE "@GIT_PERF_REPO@" "" git_build_options "${git_build_options}") +string(REPLACE "@GIT_TEST_CMP@" "" git_build_options "${git_build_options}") +string(REPLACE "@GIT_TEST_CMP_USE_COPIED_CONTEXT@" "" git_build_options "${git_build_options}") +string(REPLACE "@GIT_TEST_GITPERLLIB@" "'${CMAKE_BINARY_DIR}/perl/build/lib'" git_build_options "${git_build_options}") +string(REPLACE "@GIT_TEST_INDEX_VERSION@" "" git_build_options "${git_build_options}") +string(REPLACE "@GIT_TEST_MERGE_TOOLS_DIR@" "'${CMAKE_BINARY_DIR}/mergetools'" git_build_options "${git_build_options}") +string(REPLACE "@GIT_TEST_OPTS@" "" git_build_options "${git_build_options}") +string(REPLACE "@GIT_TEST_PERL_FATAL_WARNINGS@" "" git_build_options "${git_build_options}") +string(REPLACE "@GIT_TEST_POPATH@" "'${CMAKE_BINARY_DIR}/po'" git_build_options "${git_build_options}") +string(REPLACE "@GIT_TEST_TEMPLATE_DIR@" "'${CMAKE_BINARY_DIR}/templates/blt'" git_build_options "${git_build_options}") +string(REPLACE "@GIT_TEST_TEXTDOMAINDIR@" "'${CMAKE_BINARY_DIR}/po/build/locale'" git_build_options "${git_build_options}") +string(REPLACE "@GIT_TEST_UTF8_LOCALE@" "" git_build_options "${git_build_options}") +string(REPLACE "@LOCALEDIR@" "'${LOCALEDIR}'" git_build_options "${git_build_options}") string(REPLACE "@NO_CURL@" "${NO_CURL}" git_build_options "${git_build_options}") -string(REPLACE "@NO_ICONV@" "${NO_ICONV}" git_build_options "${git_build_options}") string(REPLACE "@NO_EXPAT@" "${NO_EXPAT}" git_build_options "${git_build_options}") -string(REPLACE "@USE_LIBPCRE2@" "" git_build_options "${git_build_options}") +string(REPLACE "@NO_GETTEXT@" "${NO_GETTEXT}" git_build_options "${git_build_options}") +string(REPLACE "@NO_GITWEB@" "1" git_build_options "${git_build_options}") +string(REPLACE "@NO_ICONV@" "${NO_ICONV}" git_build_options "${git_build_options}") string(REPLACE "@NO_PERL@" "${NO_PERL}" git_build_options "${git_build_options}") +string(REPLACE "@NO_PERL_CPAN_FALLBACKS@" "" git_build_options "${git_build_options}") string(REPLACE "@NO_PTHREADS@" "${NO_PTHREADS}" git_build_options "${git_build_options}") string(REPLACE "@NO_PYTHON@" "${NO_PYTHON}" git_build_options "${git_build_options}") string(REPLACE "@NO_REGEX@" "" git_build_options "${git_build_options}") string(REPLACE "@NO_UNIX_SOCKETS@" "${NO_UNIX_SOCKETS}" git_build_options "${git_build_options}") string(REPLACE "@PAGER_ENV@" "'${PAGER_ENV}'" git_build_options "${git_build_options}") -string(REPLACE "@SANITIZE_LEAK@" "" git_build_options "${git_build_options}") +string(REPLACE "@PERL_LOCALEDIR@" "'${LOCALEDIR}'" git_build_options "${git_build_options}") +string(REPLACE "@PERL_PATH@" "'${PERL_PATH}'" git_build_options "${git_build_options}") +string(REPLACE "@PYTHON_PATH@" "'${PYTHON_PATH}'" git_build_options "${git_build_options}") +string(REPLACE "@RUNTIME_PREFIX@" "'${RUNTIME_PREFIX}'" git_build_options "${git_build_options}") string(REPLACE "@SANITIZE_ADDRESS@" "" git_build_options "${git_build_options}") -string(REPLACE "@X@" "${EXE_EXTENSION}" git_build_options "${git_build_options}") -string(REPLACE "@FSMONITOR_DAEMON_BACKEND@" "win32" git_build_options "${git_build_options}") -string(REPLACE "@FSMONITOR_OS_SETTINGS@" "win32" git_build_options "${git_build_options}") +string(REPLACE "@SANITIZE_LEAK@" "" git_build_options "${git_build_options}") +string(REPLACE "@SHELL_PATH@" "'${SHELL_PATH}'" git_build_options "${git_build_options}") +string(REPLACE "@TAR@" "'${TAR}'" git_build_options "${git_build_options}") string(REPLACE "@TEST_OUTPUT_DIRECTORY@" "" git_build_options "${git_build_options}") -string(REPLACE "@GIT_TEST_OPTS@" "" git_build_options "${git_build_options}") -string(REPLACE "@GIT_TEST_CMP@" "" git_build_options "${git_build_options}") -string(REPLACE "@GIT_TEST_CMP_USE_COPIED_CONTEXT@" "" git_build_options "${git_build_options}") -string(REPLACE "@GIT_TEST_UTF8_LOCALE@" "" git_build_options "${git_build_options}") -string(REPLACE "@NO_GETTEXT@" "${NO_GETTEXT}" git_build_options "${git_build_options}") -string(REPLACE "@GIT_PERF_REPEAT_COUNT@" "" git_build_options "${git_build_options}") -string(REPLACE "@GIT_PERF_REPO@" "" git_build_options "${git_build_options}") -string(REPLACE "@GIT_PERF_LARGE_REPO@" "" git_build_options "${git_build_options}") -string(REPLACE "@GIT_PERF_MAKE_OPTS@" "" git_build_options "${git_build_options}") -string(REPLACE "@GIT_PERF_MAKE_COMMAND@" "" git_build_options "${git_build_options}") -string(REPLACE "@GIT_INTEROP_MAKE_OPTS@" "" git_build_options "${git_build_options}") -string(REPLACE "@GIT_TEST_INDEX_VERSION@" "" git_build_options "${git_build_options}") -string(REPLACE "@GIT_TEST_PERL_FATAL_WARNINGS@" "" git_build_options "${git_build_options}") -string(REPLACE "@GIT_TEST_TEXTDOMAINDIR@" "'${CMAKE_BINARY_DIR}/po/build/locale'" git_build_options "${git_build_options}") -string(REPLACE "@GIT_TEST_POPATH@" "'${CMAKE_BINARY_DIR}/po'" git_build_options "${git_build_options}") -string(REPLACE "@GIT_TEST_TEMPLATE_DIR@" "'${CMAKE_BINARY_DIR}/templates/blt'" git_build_options "${git_build_options}") -string(REPLACE "@GIT_TEST_GITPERLLIB@" "'${CMAKE_BINARY_DIR}/perl/build/lib'" git_build_options "${git_build_options}") -string(REPLACE "@GIT_TEST_MERGE_TOOLS_DIR@" "'${RUNTIME_PREFIX}'" git_build_options "${git_build_options}") -string(REPLACE "@RUNTIME_PREFIX@" "'${RUNTIME_PREFIX}'" git_build_options "${git_build_options}") -string(REPLACE "@GITWEBDIR@" "'${GITWEBDIR}'" git_build_options "${git_build_options}") +string(REPLACE "@TEST_SHELL_PATH@" "'${TEST_SHELL_PATH}'" git_build_options "${git_build_options}") string(REPLACE "@USE_GETTEXT_SCHEME@" "" git_build_options "${git_build_options}") -string(REPLACE "@LOCALEDIR@" "'${LOCALEDIR}'" git_build_options "${git_build_options}") -string(REPLACE "@BROKEN_PATH_FIX@" "" git_build_options "${git_build_options}") +string(REPLACE "@USE_LIBPCRE2@" "" git_build_options "${git_build_options}") +string(REPLACE "@X@" "${EXE_EXTENSION}" git_build_options "${git_build_options}") if(USE_VCPKG) string(APPEND git_build_options "PATH=\"$PATH:$TEST_DIRECTORY/../compat/vcbuild/vcpkg/installed/x64-windows/bin\"\n") endif() @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "advice.h" diff --git a/credential.c b/credential.c index 6dea3859ec..a995031c5f 100644 --- a/credential.c +++ b/credential.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "abspath.h" diff --git a/csum-file.c b/csum-file.c index c203ebf11b..5716016e12 100644 --- a/csum-file.c +++ b/csum-file.c @@ -23,7 +23,7 @@ static void verify_buffer_or_die(struct hashfile *f, if (ret < 0) die_errno("%s: sha1 file read error", f->name); - if (ret != count) + if ((size_t)ret != count) die("%s: sha1 file truncated", f->name); if (memcmp(buf, f->check_buffer, count)) die("sha1 file '%s' validation error", f->name); @@ -504,8 +504,7 @@ static struct daemon_service daemon_service[] = { static void enable_service(const char *name, int ena) { - int i; - for (i = 0; i < ARRAY_SIZE(daemon_service); i++) { + for (size_t i = 0; i < ARRAY_SIZE(daemon_service); i++) { if (!strcmp(daemon_service[i].name, name)) { daemon_service[i].enabled = ena; return; @@ -516,8 +515,7 @@ static void enable_service(const char *name, int ena) static void make_service_overridable(const char *name, int ena) { - int i; - for (i = 0; i < ARRAY_SIZE(daemon_service); i++) { + for (size_t i = 0; i < ARRAY_SIZE(daemon_service); i++) { if (!strcmp(daemon_service[i].name, name)) { daemon_service[i].overridable = ena; return; @@ -738,7 +736,7 @@ static void set_keep_alive(int sockfd) static int execute(void) { char *line = packet_buffer; - int pktlen, len, i; + int pktlen, len; char *addr = getenv("REMOTE_ADDR"), *port = getenv("REMOTE_PORT"); struct hostinfo hi = HOSTINFO_INIT; struct strvec env = STRVEC_INIT; @@ -759,7 +757,7 @@ static int execute(void) if (len != pktlen) parse_extra_args(&hi, &env, line + len + 1, pktlen - len - 1); - for (i = 0; i < ARRAY_SIZE(daemon_service); i++) { + for (size_t i = 0; i < ARRAY_SIZE(daemon_service); i++) { struct daemon_service *s = &(daemon_service[i]); const char *arg; @@ -804,8 +802,7 @@ static int addrcmp(const struct sockaddr_storage *s1, return 0; } -static int max_connections = 32; - +static unsigned int max_connections = 32; static unsigned int live_children; static struct child { @@ -1109,8 +1106,8 @@ static void socksetup(struct string_list *listen_addr, int listen_port, struct s if (!listen_addr->nr) setup_named_sock(NULL, listen_port, socklist); else { - int i, socknum; - for (i = 0; i < listen_addr->nr; i++) { + int socknum; + for (size_t i = 0; i < listen_addr->nr; i++) { socknum = setup_named_sock(listen_addr->items[i].string, listen_port, socklist); @@ -1124,11 +1121,10 @@ static void socksetup(struct string_list *listen_addr, int listen_port, struct s static int service_loop(struct socketlist *socklist) { struct pollfd *pfd; - int i; CALLOC_ARRAY(pfd, socklist->nr); - for (i = 0; i < socklist->nr; i++) { + for (size_t i = 0; i < socklist->nr; i++) { pfd[i].fd = socklist->list[i]; pfd[i].events = POLLIN; } @@ -1136,8 +1132,6 @@ static int service_loop(struct socketlist *socklist) signal(SIGCHLD, child_handler); for (;;) { - int i; - check_dead_children(); if (poll(pfd, socklist->nr, -1) < 0) { @@ -1149,7 +1143,7 @@ static int service_loop(struct socketlist *socklist) continue; } - for (i = 0; i < socklist->nr; i++) { + for (size_t i = 0; i < socklist->nr; i++) { if (pfd[i].revents & POLLIN) { union { struct sockaddr sa; @@ -1321,10 +1315,11 @@ int cmd_main(int argc, const char **argv) continue; } if (skip_prefix(arg, "--max-connections=", &v)) { - if (strtol_i(v, 10, &max_connections)) + int parsed_value; + if (strtol_i(v, 10, &parsed_value)) die(_("invalid max-connections '%s', expecting an integer"), v); - if (max_connections < 0) - max_connections = 0; /* unlimited */ + /* A negative value indicates unlimited children. */ + max_connections = parsed_value < 0 ? 0 : parsed_value; continue; } if (!strcmp(arg, "--strict-paths")) { @@ -4,6 +4,8 @@ * Copyright (C) Linus Torvalds, 2005 */ +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "git-compat-util.h" #include "date.h" #include "gettext.h" diff --git a/decorate.c b/decorate.c index 69aeb142b4..e161e13772 100644 --- a/decorate.c +++ b/decorate.c @@ -2,6 +2,9 @@ * decorate.c - decorate a git object with some arbitrary * data. */ + +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "git-compat-util.h" #include "object.h" #include "decorate.h" diff --git a/delta-islands.c b/delta-islands.c index 8443551259..1c465a6041 100644 --- a/delta-islands.c +++ b/delta-islands.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "object.h" diff --git a/diagnose.c b/diagnose.c index cc2d535b60..b11931df86 100644 --- a/diagnose.c +++ b/diagnose.c @@ -31,7 +31,6 @@ static struct diagnose_option diagnose_options[] = { int option_parse_diagnose(const struct option *opt, const char *arg, int unset) { - int i; enum diagnose_mode *diagnose = opt->value; if (!arg) { @@ -39,7 +38,7 @@ int option_parse_diagnose(const struct option *opt, const char *arg, int unset) return 0; } - for (i = 0; i < ARRAY_SIZE(diagnose_options); i++) { + for (size_t i = 0; i < ARRAY_SIZE(diagnose_options); i++) { if (!strcmp(arg, diagnose_options[i].option_name)) { *diagnose = diagnose_options[i].mode; return 0; @@ -186,7 +185,7 @@ int create_diagnostics_archive(struct strbuf *zip_path, enum diagnose_mode mode) char **argv_copy = NULL; int stdout_fd = -1, archiver_fd = -1; struct strbuf buf = STRBUF_INIT; - int res, i; + int res; struct archive_dir archive_dirs[] = { { ".git", 0 }, { ".git/hooks", 0 }, @@ -239,7 +238,7 @@ int create_diagnostics_archive(struct strbuf *zip_path, enum diagnose_mode mode) /* Only include this if explicitly requested */ if (mode == DIAGNOSE_ALL) { - for (i = 0; i < ARRAY_SIZE(archive_dirs); i++) { + for (size_t i = 0; i < ARRAY_SIZE(archive_dirs); i++) { if (add_directory_to_archiver(&archiver_args, archive_dirs[i].path, archive_dirs[i].recursive)) { diff --git a/diff-delta.c b/diff-delta.c index 77fea08dfb..a4faf73829 100644 --- a/diff-delta.c +++ b/diff-delta.c @@ -11,6 +11,8 @@ * published by the Free Software Foundation. */ +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "git-compat-util.h" #include "delta.h" diff --git a/diff-lib.c b/diff-lib.c index 3cf353946f..c6d3bc4d37 100644 --- a/diff-lib.c +++ b/diff-lib.c @@ -3,6 +3,7 @@ */ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "commit.h" diff --git a/diff-no-index.c b/diff-no-index.c index c5fb06e6d1..6f277892d3 100644 --- a/diff-no-index.c +++ b/diff-no-index.c @@ -4,6 +4,8 @@ * Copyright (c) 2008 by Junio C Hamano */ +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "git-compat-util.h" #include "abspath.h" #include "color.h" @@ -3,6 +3,7 @@ */ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "abspath.h" @@ -205,9 +205,8 @@ static inline void diff_flags_or(struct diff_flags *a, { char *tmp_a = (char *)a; const char *tmp_b = (const char *)b; - int i; - for (i = 0; i < sizeof(struct diff_flags); i++) + for (size_t i = 0; i < sizeof(struct diff_flags); i++) tmp_a[i] |= tmp_b[i]; } diff --git a/diffcore-order.c b/diffcore-order.c index 912513d3e6..f91ef22471 100644 --- a/diffcore-order.c +++ b/diffcore-order.c @@ -1,6 +1,7 @@ /* * Copyright (C) 2005 Junio C Hamano */ + #include "git-compat-util.h" #include "gettext.h" #include "diff.h" diff --git a/diffcore-pickaxe.c b/diffcore-pickaxe.c index 43fef8e8ba..a52d569911 100644 --- a/diffcore-pickaxe.c +++ b/diffcore-pickaxe.c @@ -2,6 +2,9 @@ * Copyright (C) 2005 Junio C Hamano * Copyright (C) 2010 Google Inc. */ + +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "git-compat-util.h" #include "diff.h" #include "diffcore.h" diff --git a/diffcore-rename.c b/diffcore-rename.c index 1b1c1a6a1f..10bb0321b1 100644 --- a/diffcore-rename.c +++ b/diffcore-rename.c @@ -688,7 +688,6 @@ static void cleanup_dir_rename_info(struct dir_rename_info *info, struct hashmap_iter iter; struct strmap_entry *entry; struct string_list to_remove = STRING_LIST_INIT_NODUP; - int i; if (!info->setup) return; @@ -734,7 +733,7 @@ static void cleanup_dir_rename_info(struct dir_rename_info *info, if (strintmap_contains(counts, UNKNOWN_DIR)) strintmap_remove(counts, UNKNOWN_DIR); } - for (i = 0; i < to_remove.nr; ++i) + for (size_t i = 0; i < to_remove.nr; ++i) strmap_remove(info->dir_rename_count, to_remove.items[i].string, 1); string_list_clear(&to_remove, 0); diff --git a/diffcore-rotate.c b/diffcore-rotate.c index 73ca20b331..67b591261a 100644 --- a/diffcore-rotate.c +++ b/diffcore-rotate.c @@ -2,6 +2,7 @@ * Copyright (C) 2021, Google LLC. * Based on diffcore-order.c, which is Copyright (C) 2005, Junio C Hamano */ + #include "git-compat-util.h" #include "gettext.h" #include "diff.h" @@ -7,6 +7,7 @@ */ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "abspath.h" @@ -441,7 +441,7 @@ static int check_path(const char *path, int len, struct stat *st, int skiplen) static void mark_colliding_entries(const struct checkout *state, struct cache_entry *ce, struct stat *st) { - int i, trust_ino = check_stat; + int trust_ino = check_stat; #if defined(GIT_WINDOWS_NATIVE) || defined(__CYGWIN__) trust_ino = 0; @@ -451,7 +451,7 @@ static void mark_colliding_entries(const struct checkout *state, /* TODO: audit for interaction with sparse-index. */ ensure_full_index(state->istate); - for (i = 0; i < state->istate->cache_nr; i++) { + for (size_t i = 0; i < state->istate->cache_nr; i++) { struct cache_entry *dup = state->istate->cache[i]; if (dup == ce) { diff --git a/ewah/ewah_bitmap.c b/ewah/ewah_bitmap.c index 8785cbc54a..67f8f588e0 100644 --- a/ewah/ewah_bitmap.c +++ b/ewah/ewah_bitmap.c @@ -16,6 +16,7 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, see <http://www.gnu.org/licenses/>. */ + #include "git-compat-util.h" #include "ewok.h" #include "ewok_rlw.h" @@ -255,10 +256,8 @@ void ewah_each_bit(struct ewah_bitmap *self, void (*callback)(size_t, void*), vo ++pointer; for (k = 0; k < rlw_get_literal_words(word); ++k) { - int c; - /* todo: zero count optimization */ - for (c = 0; c < BITS_IN_EWORD; ++c, ++pos) { + for (size_t c = 0; c < BITS_IN_EWORD; ++c, ++pos) { if ((self->buffer[pointer] & ((eword_t)1 << c)) != 0) callback(pos, payload); } diff --git a/ewah/ewah_io.c b/ewah/ewah_io.c index 9035ee65ea..da005523b0 100644 --- a/ewah/ewah_io.c +++ b/ewah/ewah_io.c @@ -16,6 +16,9 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, see <http://www.gnu.org/licenses/>. */ + +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "git-compat-util.h" #include "ewok.h" #include "strbuf.h" diff --git a/ewah/ewah_rlw.c b/ewah/ewah_rlw.c index 5093d43e2f..76b4c6c19e 100644 --- a/ewah/ewah_rlw.c +++ b/ewah/ewah_rlw.c @@ -16,6 +16,9 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, see <http://www.gnu.org/licenses/>. */ + +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "git-compat-util.h" #include "ewok.h" #include "ewok_rlw.h" diff --git a/fetch-pack.c b/fetch-pack.c index c095f3a84b..3a227721ed 100644 --- a/fetch-pack.c +++ b/fetch-pack.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "repository.h" diff --git a/fmt-merge-msg.c b/fmt-merge-msg.c index 6acb37b480..5b63c3b088 100644 --- a/fmt-merge-msg.c +++ b/fmt-merge-msg.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "config.h" diff --git a/fsmonitor.c b/fsmonitor.c index 309a2541cb..98b2b476f0 100644 --- a/fsmonitor.c +++ b/fsmonitor.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "config.h" @@ -2,6 +2,8 @@ * Copyright (c) 2010 Ævar Arnfjörð Bjarmason */ +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "git-compat-util.h" #include "abspath.h" #include "environment.h" diff --git a/git-compat-util.h b/git-compat-util.h index a06d4f3809..e283c46c6f 100644 --- a/git-compat-util.h +++ b/git-compat-util.h @@ -44,6 +44,16 @@ struct strbuf; #define GIT_GNUC_PREREQ(maj, min) 0 #endif +#if defined(__GNUC__) || defined(__clang__) +# define PRAGMA(pragma) _Pragma(#pragma) +# define DISABLE_WARNING(warning) PRAGMA(GCC diagnostic ignored #warning) +#else +# define DISABLE_WARNING(warning) +#endif + +#ifdef DISABLE_SIGN_COMPARE_WARNINGS +DISABLE_WARNING(-Wsign-compare) +#endif #ifndef FLEX_ARRAY /* diff --git a/git-gui/git-gui.sh b/git-gui/git-gui.sh index 8fe7538e72..887d6d596c 100755 --- a/git-gui/git-gui.sh +++ b/git-gui/git-gui.sh @@ -1357,7 +1357,6 @@ set current_diff_path {} set is_3way_diff 0 set is_submodule_diff 0 set is_conflict_diff 0 -set diff_empty_count 0 set last_revert {} set last_revert_enc {} @@ -3594,6 +3593,8 @@ $ui_diff tag configure clr1 -font font_diffbold $ui_diff tag configure clr4 -underline 1 $ui_diff tag conf d_info -foreground blue -font font_diffbold +$ui_diff tag conf d_rescan -foreground blue -underline 1 -font font_diffbold +$ui_diff tag bind d_rescan <Button-1> { clear_diff; rescan ui_ready 0 } $ui_diff tag conf d_cr -elide true $ui_diff tag conf d_@ -font font_diffbold diff --git a/git-gui/lib/console.tcl b/git-gui/lib/console.tcl index bb6b9c889e..fafafb81f1 100644 --- a/git-gui/lib/console.tcl +++ b/git-gui/lib/console.tcl @@ -97,7 +97,7 @@ method exec {cmd {after {}}} { lappend cmd 2>@1 set fd_f [_open_stdout_stderr $cmd] } - fconfigure $fd_f -blocking 0 -translation binary + fconfigure $fd_f -blocking 0 -translation binary -encoding [encoding system] fileevent $fd_f readable [cb _read $fd_f $after] } diff --git a/git-gui/lib/diff.tcl b/git-gui/lib/diff.tcl index 871ad488c2..d657bfec05 100644 --- a/git-gui/lib/diff.tcl +++ b/git-gui/lib/diff.tcl @@ -63,28 +63,17 @@ proc force_diff_encoding {enc} { } proc handle_empty_diff {} { - global current_diff_path file_states file_lists - global diff_empty_count + global current_diff_path file_states + global ui_diff set path $current_diff_path set s $file_states($path) if {[lindex $s 0] ne {_M} || [has_textconv $path]} return - # Prevent infinite rescan loops - incr diff_empty_count - if {$diff_empty_count > 1} return - - info_popup [mc "No differences detected. - -%s has no changes. - -The modification date of this file was updated by another application, but the content within the file was not changed. - -A rescan will be automatically started to find other files which may have the same state." [short_path $path]] - - clear_diff - display_file $path __ - rescan ui_ready 0 + $ui_diff conf -state normal + $ui_diff insert end [mc "* No differences detected; stage the file to de-list it from Unstaged Changes.\n"] d_info + $ui_diff insert end [mc "* Click to find other files that may have the same state.\n"] d_rescan + $ui_diff conf -state disabled } proc show_diff {path w {lno {}} {scroll_pos {}} {callback {}}} { @@ -387,7 +376,6 @@ proc read_diff {fd conflict_size cont_info} { global ui_diff diff_active is_submodule_diff global is_3way_diff is_conflict_diff current_diff_header global current_diff_queue - global diff_empty_count $ui_diff conf -state normal while {[gets $fd line] >= 0} { @@ -559,8 +547,6 @@ proc read_diff {fd conflict_size cont_info} { if {[$ui_diff index end] eq {2.0}} { handle_empty_diff - } else { - set diff_empty_count 0 } set callback [lindex $cont_info 1] diff --git a/git-gui/po/bg.po b/git-gui/po/bg.po index 5af78f15a8..27b05038e4 100644 --- a/git-gui/po/bg.po +++ b/git-gui/po/bg.po @@ -1,15 +1,15 @@ # Bulgarian translation of git-gui po-file. -# Copyright (C) 2012, 2013, 2014, 2015, 2016 Alexander Shopov <ash@kambanaria.org>. +# Copyright (C) 2012, 2013, 2014, 2015, 2016, 2024 Alexander Shopov <ash@kambanaria.org>. # This file is distributed under the same license as the git package. -# Alexander Shopov <ash@kambanaria.org>, 2012, 2013, 2014, 2015, 2016. +# Alexander Shopov <ash@kambanaria.org>, 2012, 2013, 2014, 2015, 2016, 2024. # # msgid "" msgstr "" "Project-Id-Version: git-gui master\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-10-13 15:16+0300\n" -"PO-Revision-Date: 2016-10-13 15:16+0300\n" +"POT-Creation-Date: 2020-02-08 22:54+0100\n" +"PO-Revision-Date: 2024-12-22 15:44+0100\n" "Last-Translator: Alexander Shopov <ash@kambanaria.org>\n" "Language-Team: Bulgarian <dict@fsa-bg.org>\n" "Language: bg\n" @@ -18,33 +18,33 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: git-gui.sh:865 +#: git-gui.sh:847 #, tcl-format msgid "Invalid font specified in %s:" msgstr "Указан е неправилен шрифт в „%s“:" -#: git-gui.sh:919 +#: git-gui.sh:901 msgid "Main Font" msgstr "ОÑновен шрифт" -#: git-gui.sh:920 +#: git-gui.sh:902 msgid "Diff/Console Font" msgstr "Шрифт за разликите/конзолата" -#: git-gui.sh:935 git-gui.sh:949 git-gui.sh:962 git-gui.sh:1052 git-gui.sh:1071 -#: git-gui.sh:3147 +#: git-gui.sh:917 git-gui.sh:931 git-gui.sh:944 git-gui.sh:1034 git-gui.sh:1053 +#: git-gui.sh:3212 msgid "git-gui: fatal error" msgstr "git-gui: фатална грешка" -#: git-gui.sh:936 +#: git-gui.sh:918 msgid "Cannot find git in PATH." msgstr "Командата git липÑва в Ð¿ÑŠÑ‚Ñ (PATH)." -#: git-gui.sh:963 +#: git-gui.sh:945 msgid "Cannot parse Git version string:" -msgstr "Ðизът Ñ Ð²ÐµÑ€ÑиÑта на Git не може да бъде интерпретиран:" +msgstr "Ðизът Ñ Ð²ÐµÑ€ÑиÑта на Git не може да Ñе анализира:" -#: git-gui.sh:988 +#: git-gui.sh:970 #, tcl-format msgid "" "Git version cannot be determined.\n" @@ -55,7 +55,7 @@ msgid "" "\n" "Assume '%s' is version 1.5.0?\n" msgstr "" -"ВерÑиÑта на Git не може да бъде определена.\n" +"ВерÑиÑта на Git не може да Ñе определи.\n" "\n" "ВерÑиÑта на „%s“ изглежда, че е „%s“.\n" "\n" @@ -63,506 +63,522 @@ msgstr "" "\n" "Да Ñе приеме ли, че „%s“ е верÑÐ¸Ñ â€ž1.5.0“?\n" -#: git-gui.sh:1285 +#: git-gui.sh:1267 msgid "Git directory not found:" msgstr "ДиректориÑта на Git не е открита:" -#: git-gui.sh:1319 +#: git-gui.sh:1301 msgid "Cannot move to top of working directory:" -msgstr "Ðе може да Ñе премине към родителÑката директориÑ." +msgstr "Ðе може да Ñе премине към родителÑката директориÑ." -#: git-gui.sh:1327 +#: git-gui.sh:1309 msgid "Cannot use bare repository:" msgstr "Голо хранилище не може да Ñе използва:" -#: git-gui.sh:1335 +#: git-gui.sh:1317 msgid "No working directory" msgstr "Работната Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ð»Ð¸Ð¿Ñва" -#: git-gui.sh:1507 lib/checkout_op.tcl:306 +#: git-gui.sh:1491 lib/checkout_op.tcl:306 msgid "Refreshing file status..." msgstr "ОбновÑване на ÑÑŠÑтоÑнието на файла…" -#: git-gui.sh:1567 +#: git-gui.sh:1551 msgid "Scanning for modified files ..." msgstr "Проверка за променени файлове…" -#: git-gui.sh:1645 +#: git-gui.sh:1629 msgid "Calling prepare-commit-msg hook..." msgstr "Куката „prepare-commit-msg“ Ñе изпълнÑва в момента…" -#: git-gui.sh:1662 +#: git-gui.sh:1646 msgid "Commit declined by prepare-commit-msg hook." msgstr "Подаването е отхвърлено от куката „prepare-commit-msg“." -#: git-gui.sh:1820 lib/browser.tcl:252 +#: git-gui.sh:1804 lib/browser.tcl:252 msgid "Ready." msgstr "Готово." -#: git-gui.sh:1984 +#: git-gui.sh:1968 #, tcl-format msgid "" "Display limit (gui.maxfilesdisplayed = %s) reached, not showing all %s files." msgstr "" -"ДоÑтигнат е макÑималниÑÑ‚ размер на ÑпиÑъка за извеждане(gui." -"maxfilesdisplayed = %s), Ñъответно не Ñа показани вÑички %s файла." +"ДоÑтигнат е макÑималниÑÑ‚ размер на ÑпиÑъка за " +"извеждане(gui.maxfilesdisplayed = %s), Ñъответно не Ñа показани вÑички %s " +"файла." -#: git-gui.sh:2107 +#: git-gui.sh:2091 msgid "Unmodified" msgstr "Ðепроменен" -#: git-gui.sh:2109 +#: git-gui.sh:2093 msgid "Modified, not staged" msgstr "Променен, но не е в индекÑа" -#: git-gui.sh:2110 git-gui.sh:2122 +#: git-gui.sh:2094 git-gui.sh:2106 msgid "Staged for commit" msgstr "Ð’ индекÑа за подаване" -#: git-gui.sh:2111 git-gui.sh:2123 +#: git-gui.sh:2095 git-gui.sh:2107 msgid "Portions staged for commit" msgstr "ЧаÑти Ñа в индекÑа за подаване" -#: git-gui.sh:2112 git-gui.sh:2124 +#: git-gui.sh:2096 git-gui.sh:2108 msgid "Staged for commit, missing" msgstr "Ð’ индекÑа за подаване, но липÑва" -#: git-gui.sh:2114 +#: git-gui.sh:2098 msgid "File type changed, not staged" msgstr "Видът на файла е Ñменен, но не е в индекÑа" -#: git-gui.sh:2115 git-gui.sh:2116 +#: git-gui.sh:2099 git-gui.sh:2100 msgid "File type changed, old type staged for commit" msgstr "Видът на файла е Ñменен, но новиÑÑ‚ вид не е в индекÑа" -#: git-gui.sh:2117 +#: git-gui.sh:2101 msgid "File type changed, staged" msgstr "Видът на файла е Ñменен и е в индекÑа" -#: git-gui.sh:2118 +#: git-gui.sh:2102 msgid "File type change staged, modification not staged" msgstr "Видът на файла е Ñменен в индекÑа, но не и Ñъдържанието" -#: git-gui.sh:2119 +#: git-gui.sh:2103 msgid "File type change staged, file missing" msgstr "Видът на файла е Ñменен в индекÑа, но файлът липÑва" -#: git-gui.sh:2121 +#: git-gui.sh:2105 msgid "Untracked, not staged" msgstr "ÐеÑледен" -#: git-gui.sh:2126 +#: git-gui.sh:2110 msgid "Missing" msgstr "ЛипÑващ" -#: git-gui.sh:2127 +#: git-gui.sh:2111 msgid "Staged for removal" msgstr "Ð’ индекÑа за изтриване" -#: git-gui.sh:2128 +#: git-gui.sh:2112 msgid "Staged for removal, still present" msgstr "Ð’ индекÑа за изтриване, но още го има" -#: git-gui.sh:2130 git-gui.sh:2131 git-gui.sh:2132 git-gui.sh:2133 -#: git-gui.sh:2134 git-gui.sh:2135 +#: git-gui.sh:2114 git-gui.sh:2115 git-gui.sh:2116 git-gui.sh:2117 +#: git-gui.sh:2118 git-gui.sh:2119 msgid "Requires merge resolution" msgstr "ИзиÑква коригиране при Ñливане" -#: git-gui.sh:2170 -msgid "Starting gitk... please wait..." -msgstr "Стартиране на „gitk“…, изчакайте…" - -#: git-gui.sh:2182 +#: git-gui.sh:2164 msgid "Couldn't find gitk in PATH" msgstr "Командата „gitk“ липÑва в пътищата, определени от променливата PATH." -#: git-gui.sh:2241 +#: git-gui.sh:2210 git-gui.sh:2245 +#, tcl-format +msgid "Starting %s... please wait..." +msgstr "Стартиране на „%s“…, изчакайте…" + +#: git-gui.sh:2224 msgid "Couldn't find git gui in PATH" msgstr "" "Командата „git gui“ липÑва в пътищата, определени от променливата PATH." -#: git-gui.sh:2676 lib/choose_repository.tcl:41 +#: git-gui.sh:2726 lib/choose_repository.tcl:53 msgid "Repository" msgstr "Хранилище" -#: git-gui.sh:2677 +#: git-gui.sh:2727 msgid "Edit" msgstr "Редактиране" -#: git-gui.sh:2679 lib/choose_rev.tcl:567 +#: git-gui.sh:2729 lib/choose_rev.tcl:567 msgid "Branch" msgstr "Клон" -#: git-gui.sh:2682 lib/choose_rev.tcl:554 +#: git-gui.sh:2732 lib/choose_rev.tcl:554 msgid "Commit@@noun" msgstr "Подаване" -#: git-gui.sh:2685 lib/merge.tcl:127 lib/merge.tcl:174 +#: git-gui.sh:2735 lib/merge.tcl:127 lib/merge.tcl:174 msgid "Merge" msgstr "Сливане" -#: git-gui.sh:2686 lib/choose_rev.tcl:563 +#: git-gui.sh:2736 lib/choose_rev.tcl:563 msgid "Remote" msgstr "Отдалечено хранилище" -#: git-gui.sh:2689 +#: git-gui.sh:2739 msgid "Tools" msgstr "Команди" -#: git-gui.sh:2698 +#: git-gui.sh:2748 msgid "Explore Working Copy" msgstr "Разглеждане на работното копие" -#: git-gui.sh:2704 +#: git-gui.sh:2763 msgid "Git Bash" msgstr "Bash за Git" -#: git-gui.sh:2714 +#: git-gui.sh:2772 msgid "Browse Current Branch's Files" msgstr "Разглеждане на файловете в Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ ÐºÐ»Ð¾Ð½" -#: git-gui.sh:2718 +#: git-gui.sh:2776 msgid "Browse Branch Files..." msgstr "Разглеждане на Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ ÐºÐ»Ð¾Ð½â€¦" -#: git-gui.sh:2723 +#: git-gui.sh:2781 msgid "Visualize Current Branch's History" msgstr "Ð’Ð¸Ð·ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½Ð° иÑториÑта на Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ ÐºÐ»Ð¾Ð½" -#: git-gui.sh:2727 +#: git-gui.sh:2785 msgid "Visualize All Branch History" msgstr "Ð’Ð¸Ð·ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½Ð° иÑториÑта на вÑички клонове" -#: git-gui.sh:2734 +#: git-gui.sh:2792 #, tcl-format msgid "Browse %s's Files" msgstr "Разглеждане на файловете в „%s“" -#: git-gui.sh:2736 +#: git-gui.sh:2794 #, tcl-format msgid "Visualize %s's History" msgstr "Ð’Ð¸Ð·ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½Ð° иÑториÑта на „%s“" -#: git-gui.sh:2741 lib/database.tcl:40 +#: git-gui.sh:2799 lib/database.tcl:40 msgid "Database Statistics" msgstr "СтатиÑтика на базата от данни" -#: git-gui.sh:2744 lib/database.tcl:33 +#: git-gui.sh:2802 lib/database.tcl:33 msgid "Compress Database" msgstr "КомпреÑиране на базата от данни" -#: git-gui.sh:2747 +#: git-gui.sh:2805 msgid "Verify Database" msgstr "Проверка на базата от данни" -#: git-gui.sh:2754 git-gui.sh:2758 git-gui.sh:2762 +#: git-gui.sh:2812 git-gui.sh:2816 git-gui.sh:2820 msgid "Create Desktop Icon" msgstr "ДобавÑне на икона на Ñ€Ð°Ð±Ð¾Ñ‚Ð½Ð¸Ñ Ð¿Ð»Ð¾Ñ‚" -#: git-gui.sh:2770 lib/choose_repository.tcl:193 lib/choose_repository.tcl:201 +#: git-gui.sh:2828 lib/choose_repository.tcl:209 lib/choose_repository.tcl:217 msgid "Quit" msgstr "Спиране на програмата" -#: git-gui.sh:2778 +#: git-gui.sh:2836 msgid "Undo" msgstr "ОтмÑна" -#: git-gui.sh:2781 +#: git-gui.sh:2839 msgid "Redo" msgstr "Повторение" -#: git-gui.sh:2785 git-gui.sh:3399 +#: git-gui.sh:2843 git-gui.sh:3461 msgid "Cut" msgstr "ОтрÑзване" -#: git-gui.sh:2788 git-gui.sh:3402 git-gui.sh:3476 git-gui.sh:3562 +#: git-gui.sh:2846 git-gui.sh:3464 git-gui.sh:3540 git-gui.sh:3633 #: lib/console.tcl:69 msgid "Copy" msgstr "Копиране" -#: git-gui.sh:2791 git-gui.sh:3405 +#: git-gui.sh:2849 git-gui.sh:3467 msgid "Paste" msgstr "ПоÑтавÑне" -#: git-gui.sh:2794 git-gui.sh:3408 lib/branch_delete.tcl:28 -#: lib/remote_branch_delete.tcl:39 +#: git-gui.sh:2852 git-gui.sh:3470 lib/remote_branch_delete.tcl:39 +#: lib/branch_delete.tcl:28 msgid "Delete" msgstr "Изтриване" -#: git-gui.sh:2798 git-gui.sh:3412 git-gui.sh:3566 lib/console.tcl:71 +#: git-gui.sh:2856 git-gui.sh:3474 git-gui.sh:3637 lib/console.tcl:71 msgid "Select All" msgstr "Избиране на вÑичко" -#: git-gui.sh:2807 +#: git-gui.sh:2865 msgid "Create..." msgstr "Създаване…" -#: git-gui.sh:2813 +#: git-gui.sh:2871 msgid "Checkout..." msgstr "ИзтеглÑне…" -#: git-gui.sh:2819 +#: git-gui.sh:2877 msgid "Rename..." msgstr "Преименуване…" -#: git-gui.sh:2824 +#: git-gui.sh:2882 msgid "Delete..." msgstr "Изтриване…" -#: git-gui.sh:2829 +#: git-gui.sh:2887 msgid "Reset..." msgstr "ОтмÑна на промените…" -#: git-gui.sh:2839 +#: git-gui.sh:2897 msgid "Done" msgstr "Готово" -#: git-gui.sh:2841 +#: git-gui.sh:2899 msgid "Commit@@verb" msgstr "Подаване" -#: git-gui.sh:2850 git-gui.sh:3335 -msgid "New Commit" -msgstr "Ðово подаване" - -#: git-gui.sh:2858 git-gui.sh:3342 +#: git-gui.sh:2908 git-gui.sh:3400 msgid "Amend Last Commit" msgstr "ПоправÑне на поÑледното подаване" -#: git-gui.sh:2868 git-gui.sh:3296 lib/remote_branch_delete.tcl:101 +#: git-gui.sh:2918 git-gui.sh:3361 lib/remote_branch_delete.tcl:101 msgid "Rescan" msgstr "ОбновÑване" -#: git-gui.sh:2874 +#: git-gui.sh:2924 msgid "Stage To Commit" msgstr "Към индекÑа за подаване" -#: git-gui.sh:2880 +#: git-gui.sh:2930 msgid "Stage Changed Files To Commit" msgstr "Ð’Ñички променени файлове към индекÑа за подаване" -#: git-gui.sh:2886 +#: git-gui.sh:2936 msgid "Unstage From Commit" msgstr "Изваждане от индекÑа за подаване" -#: git-gui.sh:2892 lib/index.tcl:442 +#: git-gui.sh:2942 lib/index.tcl:521 msgid "Revert Changes" msgstr "Връщане на оригинала" -#: git-gui.sh:2900 git-gui.sh:3613 git-gui.sh:3644 +#: git-gui.sh:2950 git-gui.sh:3700 git-gui.sh:3731 msgid "Show Less Context" msgstr "По-малко контекÑÑ‚" -#: git-gui.sh:2904 git-gui.sh:3617 git-gui.sh:3648 +#: git-gui.sh:2954 git-gui.sh:3704 git-gui.sh:3735 msgid "Show More Context" msgstr "Повече контекÑÑ‚" -#: git-gui.sh:2911 git-gui.sh:3309 git-gui.sh:3423 +#: git-gui.sh:2961 git-gui.sh:3374 git-gui.sh:3485 msgid "Sign Off" msgstr "ПодпиÑване" -#: git-gui.sh:2927 +#: git-gui.sh:2977 msgid "Local Merge..." msgstr "Локално Ñливане…" -#: git-gui.sh:2932 +#: git-gui.sh:2982 msgid "Abort Merge..." msgstr "ПреуÑтановÑване на Ñливане…" -#: git-gui.sh:2944 git-gui.sh:2972 +#: git-gui.sh:2994 git-gui.sh:3022 msgid "Add..." msgstr "ДобавÑне…" -#: git-gui.sh:2948 +#: git-gui.sh:2998 msgid "Push..." msgstr "ИзтлаÑкване…" -#: git-gui.sh:2952 +#: git-gui.sh:3002 msgid "Delete Branch..." msgstr "Изтриване на клон…" -#: git-gui.sh:2962 git-gui.sh:3595 +#: git-gui.sh:3012 git-gui.sh:3666 msgid "Options..." msgstr "Опции…" -#: git-gui.sh:2973 +#: git-gui.sh:3023 msgid "Remove..." msgstr "Премахване…" -#: git-gui.sh:2982 lib/choose_repository.tcl:55 +#: git-gui.sh:3032 lib/choose_repository.tcl:67 msgid "Help" msgstr "Помощ" -#: git-gui.sh:2986 git-gui.sh:2990 lib/about.tcl:14 -#: lib/choose_repository.tcl:49 lib/choose_repository.tcl:58 +#: git-gui.sh:3036 git-gui.sh:3040 lib/choose_repository.tcl:61 +#: lib/choose_repository.tcl:70 lib/about.tcl:14 #, tcl-format msgid "About %s" -msgstr "ОтноÑно %s" +msgstr "ОтноÑно „%s“" -#: git-gui.sh:3014 +#: git-gui.sh:3064 msgid "Online Documentation" msgstr "Ð”Ð¾ÐºÑƒÐ¼ÐµÐ½Ñ‚Ð°Ñ†Ð¸Ñ Ð² Интернет" -#: git-gui.sh:3017 lib/choose_repository.tcl:52 lib/choose_repository.tcl:61 +#: git-gui.sh:3067 lib/choose_repository.tcl:64 lib/choose_repository.tcl:73 msgid "Show SSH Key" msgstr "Показване на ключа за SSH" -#: git-gui.sh:3032 git-gui.sh:3164 +#: git-gui.sh:3097 git-gui.sh:3229 msgid "usage:" msgstr "употреба:" -#: git-gui.sh:3036 git-gui.sh:3168 +#: git-gui.sh:3101 git-gui.sh:3233 msgid "Usage" msgstr "Употреба" -#: git-gui.sh:3117 lib/blame.tcl:573 +#: git-gui.sh:3182 lib/blame.tcl:575 msgid "Error" msgstr "Грешка" -#: git-gui.sh:3148 +#: git-gui.sh:3213 #, tcl-format msgid "fatal: cannot stat path %s: No such file or directory" -msgstr "" -"ФÐТÐЛÐРГРЕШКÐ: пътÑÑ‚ %s не може да бъде открит: такъв файл или Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ " -"нÑма" +msgstr "ФÐТÐЛÐРГРЕШКÐ: пътÑÑ‚ „%s“ липÑва: такъв файл или Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ð½Ñма" -#: git-gui.sh:3181 +#: git-gui.sh:3246 msgid "Current Branch:" msgstr "Текущ клон:" -#: git-gui.sh:3206 +#: git-gui.sh:3271 msgid "Unstaged Changes" msgstr "Промени извън индекÑа" -#: git-gui.sh:3228 +#: git-gui.sh:3293 msgid "Staged Changes (Will Commit)" msgstr "Промени в индекÑа (за подаване)" -#: git-gui.sh:3302 +#: git-gui.sh:3367 msgid "Stage Changed" msgstr "ИндекÑÑŠÑ‚ е променен" -#: git-gui.sh:3321 lib/transport.tcl:137 +#: git-gui.sh:3386 lib/transport.tcl:137 msgid "Push" msgstr "ИзтлаÑкване" -#: git-gui.sh:3356 +#: git-gui.sh:3413 msgid "Initial Commit Message:" msgstr "Първоначално Ñъобщение при подаване:" -#: git-gui.sh:3357 +#: git-gui.sh:3414 msgid "Amended Commit Message:" msgstr "Поправено Ñъобщение при подаване:" -#: git-gui.sh:3358 +#: git-gui.sh:3415 msgid "Amended Initial Commit Message:" msgstr "Поправено първоначално Ñъобщение при подаване:" -#: git-gui.sh:3359 +#: git-gui.sh:3416 msgid "Amended Merge Commit Message:" msgstr "Поправено Ñъобщение при подаване ÑÑŠÑ Ñливане:" -#: git-gui.sh:3360 +#: git-gui.sh:3417 msgid "Merge Commit Message:" msgstr "Съобщение при подаване ÑÑŠÑ Ñливане:" -#: git-gui.sh:3361 +#: git-gui.sh:3418 msgid "Commit Message:" msgstr "Съобщение при подаване:" -#: git-gui.sh:3415 git-gui.sh:3570 lib/console.tcl:73 +#: git-gui.sh:3477 git-gui.sh:3641 lib/console.tcl:73 msgid "Copy All" msgstr "Копиране на вÑичко" -#: git-gui.sh:3439 lib/blame.tcl:105 +#: git-gui.sh:3501 lib/blame.tcl:106 msgid "File:" msgstr "Файл:" -#: git-gui.sh:3558 +#: git-gui.sh:3549 lib/choose_repository.tcl:1100 +msgid "Open" +msgstr "ОтварÑне" + +#: git-gui.sh:3629 msgid "Refresh" msgstr "ОбновÑване" -#: git-gui.sh:3579 +#: git-gui.sh:3650 msgid "Decrease Font Size" -msgstr "По-едър шрифт" +msgstr "По-дребен шрифт" -#: git-gui.sh:3583 +#: git-gui.sh:3654 msgid "Increase Font Size" -msgstr "По-дребен шрифт" +msgstr "По-едър шрифт" -#: git-gui.sh:3591 lib/blame.tcl:294 +#: git-gui.sh:3662 lib/blame.tcl:296 msgid "Encoding" msgstr "Кодиране" -#: git-gui.sh:3602 +#: git-gui.sh:3673 msgid "Apply/Reverse Hunk" msgstr "Прилагане/връщане на парче" -#: git-gui.sh:3607 +#: git-gui.sh:3678 msgid "Apply/Reverse Line" msgstr "Прилагане/връщане на ред" -#: git-gui.sh:3626 +#: git-gui.sh:3684 git-gui.sh:3794 git-gui.sh:3805 +msgid "Revert Hunk" +msgstr "Връщане на парче" + +#: git-gui.sh:3689 git-gui.sh:3801 git-gui.sh:3812 +msgid "Revert Line" +msgstr "Връщане на ред" + +#: git-gui.sh:3694 git-gui.sh:3791 +msgid "Undo Last Revert" +msgstr "ОтмÑна на поÑледното връщане" + +#: git-gui.sh:3713 msgid "Run Merge Tool" msgstr "Изпълнение на програмата за Ñливане" -#: git-gui.sh:3631 +#: git-gui.sh:3718 msgid "Use Remote Version" msgstr "ВерÑÐ¸Ñ Ð¾Ñ‚ отдалеченото хранилище" -#: git-gui.sh:3635 +#: git-gui.sh:3722 msgid "Use Local Version" msgstr "Локална верÑиÑ" -#: git-gui.sh:3639 +#: git-gui.sh:3726 msgid "Revert To Base" msgstr "Връщане към родителÑката верÑиÑ" -#: git-gui.sh:3657 +#: git-gui.sh:3744 msgid "Visualize These Changes In The Submodule" msgstr "Визуализиране на промените в подмодула" -#: git-gui.sh:3661 +#: git-gui.sh:3748 msgid "Visualize Current Branch History In The Submodule" msgstr "Ð’Ð¸Ð·ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½Ð° иÑториÑта на Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ ÐºÐ»Ð¾Ð½ в иÑториÑта за подмодула" -#: git-gui.sh:3665 +#: git-gui.sh:3752 msgid "Visualize All Branch History In The Submodule" msgstr "Ð’Ð¸Ð·ÑƒÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½Ð° иÑториÑта на вÑички клони в иÑториÑта за подмодула" -#: git-gui.sh:3670 +#: git-gui.sh:3757 msgid "Start git gui In The Submodule" msgstr "Стартиране на „git gui“ за подмодула" -#: git-gui.sh:3705 +#: git-gui.sh:3793 msgid "Unstage Hunk From Commit" msgstr "Изваждане на парчето от подаването" -#: git-gui.sh:3707 +#: git-gui.sh:3797 msgid "Unstage Lines From Commit" msgstr "Изваждане на редовете от подаването" -#: git-gui.sh:3709 +#: git-gui.sh:3798 git-gui.sh:3809 +msgid "Revert Lines" +msgstr "Връщане на редовете" + +#: git-gui.sh:3800 msgid "Unstage Line From Commit" msgstr "Изваждане на реда от подаването" -#: git-gui.sh:3712 +#: git-gui.sh:3804 msgid "Stage Hunk For Commit" msgstr "ДобавÑне на парчето за подаване" -#: git-gui.sh:3714 +#: git-gui.sh:3808 msgid "Stage Lines For Commit" msgstr "ДобавÑне на редовете за подаване" -#: git-gui.sh:3716 +#: git-gui.sh:3811 msgid "Stage Line For Commit" msgstr "ДобавÑне на реда за подаване" -#: git-gui.sh:3741 +#: git-gui.sh:3861 msgid "Initializing..." msgstr "Инициализиране…" -#: git-gui.sh:3886 +#: git-gui.sh:4017 #, tcl-format msgid "" "Possible environment issues exist.\n" @@ -574,12 +590,12 @@ msgid "" msgstr "" "Възможно е да има проблем ÑÑŠÑ Ñредата.\n" "\n" -"Ðай-вероÑтно Ñледните променливи нÑма да бъдат\n" -"взети под внимание от подпроцеÑите на Git\n" +"Ðай-вероÑтно Ñледните променливи нÑма да Ñе\n" +"вземат под внимание от подпроцеÑите на Git\n" "от %s:\n" "\n" -#: git-gui.sh:3915 +#: git-gui.sh:4046 msgid "" "\n" "This is due to a known issue with the\n" @@ -589,7 +605,7 @@ msgstr "" "Това е познат проблем и Ñе дължи на\n" "верÑиÑта на Tcl включена в Cygwin." -#: git-gui.sh:3920 +#: git-gui.sh:4051 #, tcl-format msgid "" "\n" @@ -605,341 +621,151 @@ msgstr "" "е да поÑтавите наÑтройките „user.name“ и\n" "„user.email“ в Ð»Ð¸Ñ‡Ð½Ð¸Ñ Ñи файл „~/.gitconfig“.\n" -#: lib/about.tcl:26 -msgid "git-gui - a graphical user interface for Git." -msgstr "git-gui — графичен Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð·Ð° Git." - -#: lib/blame.tcl:73 -#, tcl-format -msgid "%s (%s): File Viewer" -msgstr "%s (%s): Преглед на файлове" - -#: lib/blame.tcl:79 -msgid "Commit:" -msgstr "Подаване:" - -#: lib/blame.tcl:280 -msgid "Copy Commit" -msgstr "Копиране на подаване" - -#: lib/blame.tcl:284 -msgid "Find Text..." -msgstr "ТърÑене на текÑт…" - -#: lib/blame.tcl:288 -msgid "Goto Line..." -msgstr "Към ред…" - -#: lib/blame.tcl:297 -msgid "Do Full Copy Detection" -msgstr "Пълно търÑене на копиране" - -#: lib/blame.tcl:301 -msgid "Show History Context" -msgstr "Показване на контекÑта от иÑториÑта" - -#: lib/blame.tcl:304 -msgid "Blame Parent Commit" -msgstr "Ðнотиране на родителÑкото подаване" - -#: lib/blame.tcl:466 -#, tcl-format -msgid "Reading %s..." -msgstr "Чете Ñе „%s“…" - -#: lib/blame.tcl:594 -msgid "Loading copy/move tracking annotations..." -msgstr "Зареждане на анотациите за проÑледÑване на копирането/премеÑтването…" - -#: lib/blame.tcl:614 -msgid "lines annotated" -msgstr "реда анотирани" - -#: lib/blame.tcl:806 -msgid "Loading original location annotations..." -msgstr "Зареждане на анотациите за първоначалното меÑтоположение…" - -#: lib/blame.tcl:809 -msgid "Annotation complete." -msgstr "Ðнотирането завърши." - -#: lib/blame.tcl:839 -msgid "Busy" -msgstr "ОперациÑта не е завършила" - -#: lib/blame.tcl:840 -msgid "Annotation process is already running." -msgstr "Ð’ момента тече Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð½Ð° анотиране." - -#: lib/blame.tcl:879 -msgid "Running thorough copy detection..." -msgstr "ИзпълнÑва Ñе цÑлоÑтен Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð½Ð° откриване на копиране…" - -#: lib/blame.tcl:947 -msgid "Loading annotation..." -msgstr "Зареждане на анотации…" - -#: lib/blame.tcl:1000 -msgid "Author:" -msgstr "Ðвтор:" - -#: lib/blame.tcl:1004 -msgid "Committer:" -msgstr "Подал:" - -#: lib/blame.tcl:1009 -msgid "Original File:" -msgstr "Първоначален файл:" - -#: lib/blame.tcl:1057 -msgid "Cannot find HEAD commit:" -msgstr "Подаването за връх „HEAD“ не може да Ñе открие:" - -#: lib/blame.tcl:1112 -msgid "Cannot find parent commit:" -msgstr "РодителÑкото подаване не може да бъде открито" - -#: lib/blame.tcl:1127 -msgid "Unable to display parent" -msgstr "РодителÑÑ‚ не може да бъде показан" - -#: lib/blame.tcl:1128 lib/diff.tcl:358 -msgid "Error loading diff:" -msgstr "Грешка при зареждане на разлика:" - -#: lib/blame.tcl:1269 -msgid "Originally By:" -msgstr "Първоначално от:" +#: lib/spellcheck.tcl:57 +msgid "Unsupported spell checker" +msgstr "Тази програма за проверка на правопиÑа не Ñе поддържа" -#: lib/blame.tcl:1275 -msgid "In File:" -msgstr "Във файл:" +#: lib/spellcheck.tcl:65 +msgid "Spell checking is unavailable" +msgstr "ЛипÑва програма за проверка на правопиÑа" -#: lib/blame.tcl:1280 -msgid "Copied Or Moved Here By:" -msgstr "Копирано или премеÑтено тук от:" +#: lib/spellcheck.tcl:68 +msgid "Invalid spell checking configuration" +msgstr "Ðеправилни наÑтройки на проверката на правопиÑа" -#: lib/branch_checkout.tcl:16 +#: lib/spellcheck.tcl:70 #, tcl-format -msgid "%s (%s): Checkout Branch" -msgstr "%s (%s): Клон за изтеглÑне" - -#: lib/branch_checkout.tcl:21 -msgid "Checkout Branch" -msgstr "Клон за изтеглÑне" - -#: lib/branch_checkout.tcl:26 -msgid "Checkout" -msgstr "ИзтеглÑне" +msgid "Reverting dictionary to %s." +msgstr "Ползване на речник за език „%s“." -#: lib/branch_checkout.tcl:30 lib/branch_create.tcl:37 lib/branch_delete.tcl:34 -#: lib/branch_rename.tcl:32 lib/browser.tcl:292 lib/checkout_op.tcl:579 -#: lib/choose_font.tcl:45 lib/merge.tcl:178 lib/option.tcl:127 -#: lib/remote_add.tcl:34 lib/remote_branch_delete.tcl:43 lib/tools_dlg.tcl:41 -#: lib/tools_dlg.tcl:202 lib/tools_dlg.tcl:345 lib/transport.tcl:141 -msgid "Cancel" -msgstr "Отказване" +#: lib/spellcheck.tcl:73 +msgid "Spell checker silently failed on startup" +msgstr "Програмата за Ð¿Ñ€Ð°Ð²Ð¾Ð¿Ð¸Ñ Ð´Ð°Ð¶Ðµ не Ñтартира уÑпешно." -#: lib/branch_checkout.tcl:35 lib/browser.tcl:297 lib/tools_dlg.tcl:321 -msgid "Revision" -msgstr "ВерÑиÑ" +#: lib/spellcheck.tcl:80 +msgid "Unrecognized spell checker" +msgstr "Ðепозната програма за проверка на правопиÑа" -#: lib/branch_checkout.tcl:39 lib/branch_create.tcl:69 lib/option.tcl:310 -msgid "Options" -msgstr "Опции" +#: lib/spellcheck.tcl:186 +msgid "No Suggestions" +msgstr "ÐÑма предложениÑ" -#: lib/branch_checkout.tcl:42 lib/branch_create.tcl:92 -msgid "Fetch Tracking Branch" -msgstr "ИзтеглÑне на промените от ÑÐ»ÐµÐ´ÐµÐ½Ð¸Ñ ÐºÐ»Ð¾Ð½" +#: lib/spellcheck.tcl:388 +msgid "Unexpected EOF from spell checker" +msgstr "Ðеочакван край на файл от програмата за проверка на правопиÑа" -#: lib/branch_checkout.tcl:47 -msgid "Detach From Local Branch" -msgstr "Изтриване от Ð»Ð¾ÐºÐ°Ð»Ð½Ð¸Ñ ÐºÐ»Ð¾Ð½" +#: lib/spellcheck.tcl:392 +msgid "Spell Checker Failed" +msgstr "Грешка в програмата за проверка на правопиÑа" -#: lib/branch_create.tcl:23 +#: lib/transport.tcl:6 lib/remote_add.tcl:132 #, tcl-format -msgid "%s (%s): Create Branch" -msgstr "%s (%s): Създаване на клон" - -#: lib/branch_create.tcl:28 -msgid "Create New Branch" -msgstr "Създаване на нов клон" - -#: lib/branch_create.tcl:33 lib/choose_repository.tcl:407 -msgid "Create" -msgstr "Създаване" - -#: lib/branch_create.tcl:42 -msgid "Branch Name" -msgstr "Име на клона" - -#: lib/branch_create.tcl:44 lib/remote_add.tcl:41 lib/tools_dlg.tcl:51 -msgid "Name:" -msgstr "Име:" - -#: lib/branch_create.tcl:57 -msgid "Match Tracking Branch Name" -msgstr "Съвпадане по името на ÑÐ»ÐµÐ´ÐµÐ½Ð¸Ñ ÐºÐ»Ð¾Ð½" - -#: lib/branch_create.tcl:66 -msgid "Starting Revision" -msgstr "Ðачална верÑиÑ" - -#: lib/branch_create.tcl:72 -msgid "Update Existing Branch:" -msgstr "ОбновÑване на ÑъщеÑтвуващ клон:" - -#: lib/branch_create.tcl:75 -msgid "No" -msgstr "Ðе" - -#: lib/branch_create.tcl:80 -msgid "Fast Forward Only" -msgstr "Само тривиално превъртащо Ñливане" - -#: lib/branch_create.tcl:85 lib/checkout_op.tcl:571 -msgid "Reset" -msgstr "Отначало" - -#: lib/branch_create.tcl:97 -msgid "Checkout After Creation" -msgstr "Преминаване към клона Ñлед Ñъздаването му" - -#: lib/branch_create.tcl:132 -msgid "Please select a tracking branch." -msgstr "Изберете клон за Ñледени." +msgid "fetch %s" +msgstr "доÑтавÑне на „%s“" -#: lib/branch_create.tcl:141 +#: lib/transport.tcl:7 #, tcl-format -msgid "Tracking branch %s is not a branch in the remote repository." -msgstr "СледÑщиÑÑ‚ клон — „%s“, не ÑъщеÑтвува в отдалеченото хранилище." - -#: lib/branch_create.tcl:154 lib/branch_rename.tcl:92 -msgid "Please supply a branch name." -msgstr "Дайте име на клона." +msgid "Fetching new changes from %s" +msgstr "ДоÑтавÑне на промените от „%s“" -#: lib/branch_create.tcl:165 lib/branch_rename.tcl:112 +#: lib/transport.tcl:18 #, tcl-format -msgid "'%s' is not an acceptable branch name." -msgstr "„%s“ не може да Ñе използва за име на клон." +msgid "remote prune %s" +msgstr "окаÑтрÑне на ÑледÑщите клони към „%s“" -#: lib/branch_delete.tcl:16 +#: lib/transport.tcl:19 #, tcl-format -msgid "%s (%s): Delete Branch" -msgstr "%s (%s): Изтриване на клон" - -#: lib/branch_delete.tcl:21 -msgid "Delete Local Branch" -msgstr "Изтриване на локален клон" - -#: lib/branch_delete.tcl:39 -msgid "Local Branches" -msgstr "Локални клони" +msgid "Pruning tracking branches deleted from %s" +msgstr "ОкаÑтрÑне на ÑледÑщите клони на изтритите клони от „%s“" -#: lib/branch_delete.tcl:51 -msgid "Delete Only If Merged Into" -msgstr "Изтриване, Ñамо ако промените Ñа Ñлети и другаде" +#: lib/transport.tcl:25 +msgid "fetch all remotes" +msgstr "доÑтавÑне от вÑички отдалечени" -#: lib/branch_delete.tcl:53 lib/remote_branch_delete.tcl:120 -msgid "Always (Do not perform merge checks)" -msgstr "Винаги (без проверка за Ñливане)" +#: lib/transport.tcl:26 +msgid "Fetching new changes from all remotes" +msgstr "ДоÑтавÑне на промените от вÑички отдалечени хранилища" -#: lib/branch_delete.tcl:103 -#, tcl-format -msgid "The following branches are not completely merged into %s:" -msgstr "Ðе вÑички промени в клоните Ñа Ñлети в „%s“:" +#: lib/transport.tcl:40 +msgid "remote prune all remotes" +msgstr "окаÑтрÑне на ÑледÑщите изтрити" -#: lib/branch_delete.tcl:115 lib/remote_branch_delete.tcl:218 -msgid "" -"Recovering deleted branches is difficult.\n" -"\n" -"Delete the selected branches?" +#: lib/transport.tcl:41 +msgid "Pruning tracking branches deleted from all remotes" msgstr "" -"ВъзÑтановÑването на изтрити клони може да е трудно.\n" -"\n" -"Сигурни ли Ñте, че иÑкате да триете?" +"ОкаÑтрÑне на ÑледÑщите клони на изтритите клони от вÑички отдалечени " +"хранилища" -#: lib/branch_delete.tcl:131 +#: lib/transport.tcl:54 lib/transport.tcl:92 lib/transport.tcl:110 +#: lib/remote_add.tcl:162 #, tcl-format -msgid " - %s:" -msgstr " — „%s:“" +msgid "push %s" +msgstr "изтлаÑкване на „%s“" -#: lib/branch_delete.tcl:141 +#: lib/transport.tcl:55 #, tcl-format -msgid "" -"Failed to delete branches:\n" -"%s" -msgstr "" -"ÐеуÑпешно триене на клони:\n" -"%s" +msgid "Pushing changes to %s" +msgstr "ИзтлаÑкване на промените към „%s“" -#: lib/branch_rename.tcl:15 +#: lib/transport.tcl:93 #, tcl-format -msgid "%s (%s): Rename Branch" -msgstr "%s (%s): Преименуване на клон" +msgid "Mirroring to %s" +msgstr "ИзтлаÑкване на вÑичко към „%s“" -#: lib/branch_rename.tcl:23 -msgid "Rename Branch" -msgstr "Преименуване на клон" +#: lib/transport.tcl:111 +#, tcl-format +msgid "Pushing %s %s to %s" +msgstr "ИзтлаÑкване на %s „%s“ към „%s“" -#: lib/branch_rename.tcl:28 -msgid "Rename" -msgstr "Преименуване" +#: lib/transport.tcl:132 +msgid "Push Branches" +msgstr "Клони за изтлаÑкване" -#: lib/branch_rename.tcl:38 -msgid "Branch:" -msgstr "Клон:" +#: lib/transport.tcl:141 lib/checkout_op.tcl:580 lib/remote_add.tcl:34 +#: lib/browser.tcl:292 lib/branch_checkout.tcl:30 lib/branch_rename.tcl:32 +#: lib/choose_font.tcl:45 lib/option.tcl:127 lib/tools_dlg.tcl:41 +#: lib/tools_dlg.tcl:202 lib/tools_dlg.tcl:345 lib/remote_branch_delete.tcl:43 +#: lib/branch_create.tcl:37 lib/branch_delete.tcl:34 lib/merge.tcl:178 +msgid "Cancel" +msgstr "Отказване" -#: lib/branch_rename.tcl:46 -msgid "New Name:" -msgstr "Ðово име:" +#: lib/transport.tcl:147 +msgid "Source Branches" +msgstr "Клони-източници" -#: lib/branch_rename.tcl:81 -msgid "Please select a branch to rename." -msgstr "Изберете клон за преименуване." +#: lib/transport.tcl:162 +msgid "Destination Repository" +msgstr "Целево хранилище" -#: lib/branch_rename.tcl:102 lib/checkout_op.tcl:202 -#, tcl-format -msgid "Branch '%s' already exists." -msgstr "Клонът „%s“ вече ÑъщеÑтвува." +#: lib/transport.tcl:165 lib/remote_branch_delete.tcl:51 +msgid "Remote:" +msgstr "Отдалечено хранилище:" -#: lib/branch_rename.tcl:123 -#, tcl-format -msgid "Failed to rename '%s'." -msgstr "ÐеуÑпешно преименуване на „%s“." +#: lib/transport.tcl:187 lib/remote_branch_delete.tcl:72 +msgid "Arbitrary Location:" +msgstr "Произволно меÑтоположение:" -#: lib/browser.tcl:17 -msgid "Starting..." -msgstr "Стартиране…" +#: lib/transport.tcl:205 +msgid "Transfer Options" +msgstr "ÐаÑтройки при пренаÑÑнето" -#: lib/browser.tcl:27 -#, tcl-format -msgid "%s (%s): File Browser" -msgstr "%s (%s): Файлов браузър" +#: lib/transport.tcl:207 +msgid "Force overwrite existing branch (may discard changes)" +msgstr "" +"Изрично презапиÑване на ÑъщеÑтвуващ клон (нÑкои промени може да Ñе загубÑÑ‚)" -#: lib/browser.tcl:132 lib/browser.tcl:149 -#, tcl-format -msgid "Loading %s..." -msgstr "Зареждане на „%s“…" +#: lib/transport.tcl:211 +msgid "Use thin pack (for slow network connections)" +msgstr "МакÑимална компреÑÐ¸Ñ (за бавни мрежови връзки)" -#: lib/browser.tcl:193 -msgid "[Up To Parent]" -msgstr "[Към родителÑ]" +#: lib/transport.tcl:215 +msgid "Include tags" +msgstr "Включване на етикетите" -#: lib/browser.tcl:275 +#: lib/transport.tcl:229 #, tcl-format -msgid "%s (%s): Browse Branch Files" -msgstr "%s (%s): Разглеждане на файловете в клона" - -#: lib/browser.tcl:282 -msgid "Browse Branch Files" -msgstr "Разглеждане на файловете в клона" - -#: lib/browser.tcl:288 lib/choose_repository.tcl:422 -#: lib/choose_repository.tcl:509 lib/choose_repository.tcl:518 -#: lib/choose_repository.tcl:1074 -msgid "Browse" -msgstr "Разглеждане" +msgid "%s (%s): Push" +msgstr "%s (%s): ИзтлаÑкване" #: lib/checkout_op.tcl:85 #, tcl-format @@ -951,8 +777,8 @@ msgstr "ДоÑтавÑне на „%s“ от „%s“" msgid "fatal: Cannot resolve %s" msgstr "фатална грешка: „%s“ не може да Ñе открие" -#: lib/checkout_op.tcl:146 lib/console.tcl:81 lib/database.tcl:30 -#: lib/sshkey.tcl:55 +#: lib/checkout_op.tcl:146 lib/sshkey.tcl:58 lib/console.tcl:81 +#: lib/database.tcl:30 msgid "Close" msgstr "ЗатварÑне" @@ -966,6 +792,11 @@ msgstr "Клонът „%s“ не ÑъщеÑтвува." msgid "Failed to configure simplified git-pull for '%s'." msgstr "ÐеуÑпешно наÑтройване на опроÑтен git-pull за „%s“." +#: lib/checkout_op.tcl:202 lib/branch_rename.tcl:102 +#, tcl-format +msgid "Branch '%s' already exists." +msgstr "Клонът „%s“ вече ÑъщеÑтвува." + #: lib/checkout_op.tcl:229 #, tcl-format msgid "" @@ -976,13 +807,13 @@ msgid "" msgstr "" "Клонът „%s“ ÑъщеÑтвува.\n" "\n" -"Той не може да бъде тривиално ÑлÑÑ‚ до „%s“.\n" +"Той не може да Ñе Ñлее тривиално до „%s“.\n" "Ðеобходимо е Ñливане." #: lib/checkout_op.tcl:243 #, tcl-format msgid "Merge strategy '%s' not supported." -msgstr "Ð¡Ñ‚Ñ€Ð°Ñ‚ÐµÐ³Ð¸Ñ Ð·Ð° Ñливане „%s“ не Ñе поддържа." +msgstr "Ð¡Ñ‚Ñ€Ð°Ñ‚ÐµÐ³Ð¸Ñ Ð·Ð° Ñливане „%s“ не Ñе поддържа." #: lib/checkout_op.tcl:262 #, tcl-format @@ -1006,7 +837,7 @@ msgstr "" "хранилището.\n" "\n" "ÐÑкой друг Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð·Ð° Git е променил хранилището междувременно. СъÑтоÑнието " -"трÑбва да бъде проверено, преди да Ñе премине към нов клон.\n" +"трÑбва да Ñе провери, преди да Ñе премине към нов клон.\n" "\n" "Ðвтоматично ще започне нова проверка.\n" @@ -1019,22 +850,22 @@ msgstr "Работната Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ Ñе привежда към „ msgid "files checked out" msgstr "файла Ñа изтеглени" -#: lib/checkout_op.tcl:376 +#: lib/checkout_op.tcl:377 #, tcl-format msgid "Aborted checkout of '%s' (file level merging is required)." msgstr "" "ПреуÑтановÑване на изтеглÑнето на „%s“ (необходимо е пофайлово Ñливане)." -#: lib/checkout_op.tcl:377 +#: lib/checkout_op.tcl:378 msgid "File level merge required." msgstr "Ðеобходимо е пофайлово Ñливане." -#: lib/checkout_op.tcl:381 +#: lib/checkout_op.tcl:382 #, tcl-format msgid "Staying on branch '%s'." msgstr "ОÑтаване върху клона „%s“." -#: lib/checkout_op.tcl:452 +#: lib/checkout_op.tcl:453 msgid "" "You are no longer on a local branch.\n" "\n" @@ -1045,31 +876,35 @@ msgstr "" "\n" "Ðко иÑкате да Ñте на клон, Ñъздайте базиран на „Това неÑвързано изтеглÑне“." -#: lib/checkout_op.tcl:503 lib/checkout_op.tcl:507 +#: lib/checkout_op.tcl:504 lib/checkout_op.tcl:508 #, tcl-format msgid "Checked out '%s'." msgstr "„%s“ е изтеглен." -#: lib/checkout_op.tcl:535 +#: lib/checkout_op.tcl:536 #, tcl-format msgid "Resetting '%s' to '%s' will lose the following commits:" msgstr "" "ЗанулÑването на „%s“ към „%s“ ще доведе до загубването на Ñледните подаваниÑ:" -#: lib/checkout_op.tcl:557 +#: lib/checkout_op.tcl:558 msgid "Recovering lost commits may not be easy." msgstr "ВъзÑтановÑването на загубените Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñ Ð¼Ð¾Ð¶Ðµ да е трудно." -#: lib/checkout_op.tcl:562 +#: lib/checkout_op.tcl:563 #, tcl-format msgid "Reset '%s'?" msgstr "ЗанулÑване на „%s“?" -#: lib/checkout_op.tcl:567 lib/merge.tcl:170 lib/tools_dlg.tcl:336 +#: lib/checkout_op.tcl:568 lib/tools_dlg.tcl:336 lib/merge.tcl:170 msgid "Visualize" msgstr "ВизуализациÑ" -#: lib/checkout_op.tcl:635 +#: lib/checkout_op.tcl:572 lib/branch_create.tcl:85 +msgid "Reset" +msgstr "Отначало" + +#: lib/checkout_op.tcl:636 #, tcl-format msgid "" "Failed to set current branch.\n" @@ -1087,6 +922,327 @@ msgstr "" "Това ÑÑŠÑтоÑние е аварийно и не трÑбва да Ñе Ñлучва. Програмата „%s“ ще " "преуÑтанови работа." +#: lib/remote_add.tcl:20 +#, tcl-format +msgid "%s (%s): Add Remote" +msgstr "%s (%s): ДобавÑне на отдалечено хранилище" + +#: lib/remote_add.tcl:25 +msgid "Add New Remote" +msgstr "ДобавÑне на отдалечено хранилище" + +#: lib/remote_add.tcl:30 lib/tools_dlg.tcl:37 +msgid "Add" +msgstr "ДобавÑне" + +#: lib/remote_add.tcl:39 +msgid "Remote Details" +msgstr "Данни за отдалеченото хранилище" + +#: lib/remote_add.tcl:41 lib/tools_dlg.tcl:51 lib/branch_create.tcl:44 +msgid "Name:" +msgstr "Име:" + +#: lib/remote_add.tcl:50 +msgid "Location:" +msgstr "МеÑтоположение:" + +#: lib/remote_add.tcl:60 +msgid "Further Action" +msgstr "Следващо дейÑтвие" + +#: lib/remote_add.tcl:63 +msgid "Fetch Immediately" +msgstr "Ðезабавно доÑтавÑне" + +#: lib/remote_add.tcl:69 +msgid "Initialize Remote Repository and Push" +msgstr "Инициализиране на отдалеченото хранилище и изтлаÑкване на промените" + +#: lib/remote_add.tcl:75 +msgid "Do Nothing Else Now" +msgstr "Да не Ñе прави нищо" + +#: lib/remote_add.tcl:100 +msgid "Please supply a remote name." +msgstr "Задайте име за отдалеченото хранилище." + +#: lib/remote_add.tcl:113 +#, tcl-format +msgid "'%s' is not an acceptable remote name." +msgstr "Отдалечено хранилище не може да Ñе казва „%s“." + +#: lib/remote_add.tcl:124 +#, tcl-format +msgid "Failed to add remote '%s' of location '%s'." +msgstr "ÐеуÑпешно добавÑне на отдалеченото хранилище „%s“ от Ð°Ð´Ñ€ÐµÑ â€ž%s“." + +#: lib/remote_add.tcl:133 +#, tcl-format +msgid "Fetching the %s" +msgstr "ДоÑтавÑне на „%s“" + +#: lib/remote_add.tcl:156 +#, tcl-format +msgid "Do not know how to initialize repository at location '%s'." +msgstr "Хранилището Ñ Ð¼ÐµÑтоположение „%s“ не може да Ñе инициализира." + +#: lib/remote_add.tcl:163 +#, tcl-format +msgid "Setting up the %s (at %s)" +msgstr "ДобавÑне на хранилище „%s“ (Ñ Ð°Ð´Ñ€ÐµÑ â€ž%s“)" + +#: lib/browser.tcl:17 +msgid "Starting..." +msgstr "Стартиране…" + +#: lib/browser.tcl:27 +#, tcl-format +msgid "%s (%s): File Browser" +msgstr "%s (%s): Файлов браузър" + +#: lib/browser.tcl:132 lib/browser.tcl:149 +#, tcl-format +msgid "Loading %s..." +msgstr "Зареждане на „%s“…" + +#: lib/browser.tcl:193 +msgid "[Up To Parent]" +msgstr "[Към родителÑ]" + +#: lib/browser.tcl:275 +#, tcl-format +msgid "%s (%s): Browse Branch Files" +msgstr "%s (%s): Разглеждане на файловете в клона" + +#: lib/browser.tcl:282 +msgid "Browse Branch Files" +msgstr "Разглеждане на файловете в клона" + +#: lib/browser.tcl:288 lib/choose_repository.tcl:437 +#: lib/choose_repository.tcl:524 lib/choose_repository.tcl:533 +#: lib/choose_repository.tcl:1115 +msgid "Browse" +msgstr "Разглеждане" + +#: lib/browser.tcl:297 lib/branch_checkout.tcl:35 lib/tools_dlg.tcl:321 +msgid "Revision" +msgstr "ВерÑиÑ" + +#: lib/index.tcl:6 +msgid "Unable to unlock the index." +msgstr "ИндекÑÑŠÑ‚ не може да Ñе отключи." + +#: lib/index.tcl:30 +msgid "Index Error" +msgstr "Грешка в индекÑа" + +#: lib/index.tcl:32 +msgid "" +"Updating the Git index failed. A rescan will be automatically started to " +"resynchronize git-gui." +msgstr "" +"ÐеуÑпешно обновÑване на индекÑа на Git. Ðвтоматично ще започне нова проверка " +"за Ñинхронизирането на git-gui." + +#: lib/index.tcl:43 +msgid "Continue" +msgstr "Продължаване" + +#: lib/index.tcl:46 +msgid "Unlock Index" +msgstr "Отключване на индекÑа" + +#: lib/index.tcl:77 lib/index.tcl:146 lib/index.tcl:220 lib/index.tcl:587 +#: lib/choose_repository.tcl:999 +msgid "files" +msgstr "файлове" + +#: lib/index.tcl:326 +msgid "Unstaging selected files from commit" +msgstr "Изваждане на избраните файлове от подаването" + +#: lib/index.tcl:330 +#, tcl-format +msgid "Unstaging %s from commit" +msgstr "Изваждане на „%s“ от подаването" + +#: lib/index.tcl:369 +msgid "Ready to commit." +msgstr "ГотовноÑÑ‚ за подаване." + +#: lib/index.tcl:378 +msgid "Adding selected files" +msgstr "ДобавÑне на избраните файлове" + +#: lib/index.tcl:382 +#, tcl-format +msgid "Adding %s" +msgstr "ДобавÑне на „%s“" + +#: lib/index.tcl:412 +#, tcl-format +msgid "Stage %d untracked files?" +msgstr "Да Ñе добавÑÑ‚ ли %d неÑледени файла към индекÑа?" + +#: lib/index.tcl:420 +msgid "Adding all changed files" +msgstr "ДобавÑне на вÑички променени файлове" + +#: lib/index.tcl:503 +#, tcl-format +msgid "Revert changes in file %s?" +msgstr "Да Ñе махнат ли промените във файла „%s“?" + +#: lib/index.tcl:508 +#, tcl-format +msgid "Revert changes in these %i files?" +msgstr "Да Ñе махнат ли промените в тези %i файла?" + +#: lib/index.tcl:517 +msgid "Any unstaged changes will be permanently lost by the revert." +msgstr "" +"Ð’Ñички промени, които не Ñа били добавени в индекÑа, ще Ñе загубÑÑ‚ " +"безвъзвратно." + +#: lib/index.tcl:520 lib/index.tcl:563 +msgid "Do Nothing" +msgstr "Ðищо да не Ñе прави" + +#: lib/index.tcl:545 +#, tcl-format +msgid "Delete untracked file %s?" +msgstr "Да Ñе изтрие ли неÑледениÑÑ‚ файл „%s“?" + +#: lib/index.tcl:550 +#, tcl-format +msgid "Delete these %i untracked files?" +msgstr "Да Ñе изтриÑÑ‚ ли тези %d неÑледени файла?" + +#: lib/index.tcl:560 +msgid "Files will be permanently deleted." +msgstr "Файловете ще Ñе изтриÑÑ‚ окончателно." + +#: lib/index.tcl:564 +msgid "Delete Files" +msgstr "Изтриване на файлове" + +#: lib/index.tcl:586 +msgid "Deleting" +msgstr "Изтриване" + +#: lib/index.tcl:665 +msgid "Encountered errors deleting files:\n" +msgstr "Грешки при изтриване на файловете:\n" + +#: lib/index.tcl:674 +#, tcl-format +msgid "None of the %d selected files could be deleted." +msgstr "Ðикой от избраните %d файла не бе изтрит." + +#: lib/index.tcl:679 +#, tcl-format +msgid "%d of the %d selected files could not be deleted." +msgstr "%d от избраните %d файла не бÑха изтрити." + +#: lib/index.tcl:726 +msgid "Reverting selected files" +msgstr "Махане на промените в избраните файлове" + +#: lib/index.tcl:730 +#, tcl-format +msgid "Reverting %s" +msgstr "Махане на промените в „%s“" + +#: lib/branch_checkout.tcl:16 +#, tcl-format +msgid "%s (%s): Checkout Branch" +msgstr "%s (%s): Клон за изтеглÑне" + +#: lib/branch_checkout.tcl:21 +msgid "Checkout Branch" +msgstr "Клон за изтеглÑне" + +#: lib/branch_checkout.tcl:26 +msgid "Checkout" +msgstr "ИзтеглÑне" + +#: lib/branch_checkout.tcl:39 lib/option.tcl:310 lib/branch_create.tcl:69 +msgid "Options" +msgstr "Опции" + +#: lib/branch_checkout.tcl:42 lib/branch_create.tcl:92 +msgid "Fetch Tracking Branch" +msgstr "ИзтеглÑне на промените от ÑÐ»ÐµÐ´ÐµÐ½Ð¸Ñ ÐºÐ»Ð¾Ð½" + +#: lib/branch_checkout.tcl:47 +msgid "Detach From Local Branch" +msgstr "Изтриване от Ð»Ð¾ÐºÐ°Ð»Ð½Ð¸Ñ ÐºÐ»Ð¾Ð½" + +#: lib/status_bar.tcl:263 +#, tcl-format +msgid "%s ... %*i of %*i %s (%3i%%)" +msgstr "%s… %*i от общо %*i %s (%3i%%)" + +#: lib/remote.tcl:200 +msgid "Push to" +msgstr "ИзтлаÑкване към" + +#: lib/remote.tcl:218 +msgid "Remove Remote" +msgstr "Премахване на отдалечено хранилище" + +#: lib/remote.tcl:223 +msgid "Prune from" +msgstr "ОкаÑтрÑне от" + +#: lib/remote.tcl:228 +msgid "Fetch from" +msgstr "ДоÑтавÑне от" + +#: lib/remote.tcl:249 lib/remote.tcl:253 lib/remote.tcl:258 lib/remote.tcl:264 +msgid "All" +msgstr "Ð’Ñички" + +#: lib/branch_rename.tcl:15 +#, tcl-format +msgid "%s (%s): Rename Branch" +msgstr "%s (%s): Преименуване на клон" + +#: lib/branch_rename.tcl:23 +msgid "Rename Branch" +msgstr "Преименуване на клон" + +#: lib/branch_rename.tcl:28 +msgid "Rename" +msgstr "Преименуване" + +#: lib/branch_rename.tcl:38 +msgid "Branch:" +msgstr "Клон:" + +#: lib/branch_rename.tcl:46 +msgid "New Name:" +msgstr "Ðово име:" + +#: lib/branch_rename.tcl:81 +msgid "Please select a branch to rename." +msgstr "Изберете клон за преименуване." + +#: lib/branch_rename.tcl:92 lib/branch_create.tcl:154 +msgid "Please supply a branch name." +msgstr "Дайте име на клона." + +#: lib/branch_rename.tcl:112 lib/branch_create.tcl:165 +#, tcl-format +msgid "'%s' is not an acceptable branch name." +msgstr "„%s“ не може да Ñе използва за име на клон." + +#: lib/branch_rename.tcl:123 +#, tcl-format +msgid "Failed to rename '%s'." +msgstr "ÐеуÑпешно преименуване на „%s“." + #: lib/choose_font.tcl:41 msgid "Select" msgstr "Избор" @@ -1111,251 +1267,1099 @@ msgstr "" "Това е примерен текÑÑ‚.\n" "Ðко ви хареÑва как изглежда, изберете шрифта." -#: lib/choose_repository.tcl:33 +#: lib/option.tcl:11 +#, tcl-format +msgid "Invalid global encoding '%s'" +msgstr "Ðеправилно глобално кодиране „%s“" + +#: lib/option.tcl:19 +#, tcl-format +msgid "Invalid repo encoding '%s'" +msgstr "Ðеправилно кодиране „%s“ на хранилището" + +#: lib/option.tcl:119 +msgid "Restore Defaults" +msgstr "Стандартни наÑтройки" + +#: lib/option.tcl:123 +msgid "Save" +msgstr "Запазване" + +#: lib/option.tcl:133 +#, tcl-format +msgid "%s Repository" +msgstr "Хранилище „%s“" + +#: lib/option.tcl:134 +msgid "Global (All Repositories)" +msgstr "Глобално (за вÑички хранилища)" + +#: lib/option.tcl:140 +msgid "User Name" +msgstr "ПотребителÑко име" + +#: lib/option.tcl:141 +msgid "Email Address" +msgstr "ÐÐ´Ñ€ÐµÑ Ð½Ð° е-поща" + +#: lib/option.tcl:143 +msgid "Summarize Merge Commits" +msgstr "Обобщаване на подаваниÑта при Ñливане" + +#: lib/option.tcl:144 +msgid "Merge Verbosity" +msgstr "ПодробноÑти при ÑливаниÑта" + +#: lib/option.tcl:145 +msgid "Show Diffstat After Merge" +msgstr "Извеждане на ÑтатиÑтика Ñлед ÑливаниÑта" + +#: lib/option.tcl:146 +msgid "Use Merge Tool" +msgstr "Използване на програма за Ñливане" + +#: lib/option.tcl:148 +msgid "Trust File Modification Timestamps" +msgstr "Доверие във времето на промÑна на файловете" + +#: lib/option.tcl:149 +msgid "Prune Tracking Branches During Fetch" +msgstr "ОкаÑтрÑне на ÑледÑщите клонове при доÑтавÑне" + +#: lib/option.tcl:150 +msgid "Match Tracking Branches" +msgstr "ÐапаÑване на ÑледÑщите клонове" + +#: lib/option.tcl:151 +msgid "Use Textconv For Diffs and Blames" +msgstr "Използване на „textconv“ за разликите и анотирането" + +#: lib/option.tcl:152 +msgid "Blame Copy Only On Changed Files" +msgstr "Ðнотиране на копието Ñамо по променените файлове" + +#: lib/option.tcl:153 +msgid "Maximum Length of Recent Repositories List" +msgstr "МакÑимален брой на ÑпиÑъка „Скоро ползвани“ хранилища" + +#: lib/option.tcl:154 +msgid "Minimum Letters To Blame Copy On" +msgstr "Минимален брой знаци за анотиране на копието" + +#: lib/option.tcl:155 +msgid "Blame History Context Radius (days)" +msgstr "ИÑторичеÑки обхват за анотиране в дни" + +#: lib/option.tcl:156 +msgid "Number of Diff Context Lines" +msgstr "Брой редове за контекÑта на разликите" + +#: lib/option.tcl:157 +msgid "Additional Diff Parameters" +msgstr "Ðргументи към командата за разликите" + +#: lib/option.tcl:158 +msgid "Commit Message Text Width" +msgstr "Широчина на текÑта на Ñъобщението при подаване" + +#: lib/option.tcl:159 +msgid "New Branch Name Template" +msgstr "Шаблон за името на новите клони" + +#: lib/option.tcl:160 +msgid "Default File Contents Encoding" +msgstr "Кодиране на файловете" + +#: lib/option.tcl:161 +msgid "Warn before committing to a detached head" +msgstr "Предупреждаване при подаване към неÑвързан указател" + +#: lib/option.tcl:162 +msgid "Staging of untracked files" +msgstr "ДобавÑне на неÑледените файлове към индекÑа" + +#: lib/option.tcl:163 +msgid "Show untracked files" +msgstr "Показване на неÑледените файлове" + +#: lib/option.tcl:164 +msgid "Tab spacing" +msgstr "Ширина на табулациÑта" + +#: lib/option.tcl:182 lib/option.tcl:197 lib/option.tcl:220 lib/option.tcl:282 +#: lib/database.tcl:57 +#, tcl-format +msgid "%s:" +msgstr "%s:" + +#: lib/option.tcl:210 +msgid "Change" +msgstr "СмÑна" + +#: lib/option.tcl:254 +msgid "Spelling Dictionary:" +msgstr "ПравопиÑен речник:" + +#: lib/option.tcl:284 +msgid "Change Font" +msgstr "СмÑна на шрифта" + +#: lib/option.tcl:288 +#, tcl-format +msgid "Choose %s" +msgstr "Избор на „%s“" + +#: lib/option.tcl:294 +msgid "pt." +msgstr "тчк." + +#: lib/option.tcl:308 +msgid "Preferences" +msgstr "ÐаÑтройки" + +#: lib/option.tcl:345 +msgid "Failed to completely save options:" +msgstr "ÐеуÑпешно запазване на наÑтройките:" + +#: lib/encoding.tcl:443 +msgid "Default" +msgstr "Стандартното" + +#: lib/encoding.tcl:448 +#, tcl-format +msgid "System (%s)" +msgstr "СиÑтемното (%s)" + +#: lib/encoding.tcl:459 lib/encoding.tcl:465 +msgid "Other" +msgstr "Друго" + +#: lib/tools.tcl:76 +#, tcl-format +msgid "Running %s requires a selected file." +msgstr "За изпълнението на „%s“ трÑбва да изберете файл." + +#: lib/tools.tcl:92 +#, tcl-format +msgid "Are you sure you want to run %1$s on file \"%2$s\"?" +msgstr "Сигурни ли Ñте, че иÑкате да изпълните „%1$s“ върху файла „%2$s“?" + +#: lib/tools.tcl:96 +#, tcl-format +msgid "Are you sure you want to run %s?" +msgstr "Сигурни ли Ñте, че иÑкате да изпълните „%s“?" + +#: lib/tools.tcl:118 +#, tcl-format +msgid "Tool: %s" +msgstr "Команда: %s" + +#: lib/tools.tcl:119 +#, tcl-format +msgid "Running: %s" +msgstr "Изпълнение: %s" + +#: lib/tools.tcl:158 +#, tcl-format +msgid "Tool completed successfully: %s" +msgstr "Командата завърши уÑпешно: %s" + +#: lib/tools.tcl:160 +#, tcl-format +msgid "Tool failed: %s" +msgstr "Командата върна грешка: %s" + +#: lib/mergetool.tcl:8 +msgid "Force resolution to the base version?" +msgstr "Да Ñе използва базовата верÑиÑ" + +#: lib/mergetool.tcl:9 +msgid "Force resolution to this branch?" +msgstr "Да Ñе използва верÑиÑта от този клон" + +#: lib/mergetool.tcl:10 +msgid "Force resolution to the other branch?" +msgstr "Да Ñе използва верÑиÑта от Ð´Ñ€ÑƒÐ³Ð¸Ñ ÐºÐ»Ð¾Ð½" + +#: lib/mergetool.tcl:14 +#, tcl-format +msgid "" +"Note that the diff shows only conflicting changes.\n" +"\n" +"%s will be overwritten.\n" +"\n" +"This operation can be undone only by restarting the merge." +msgstr "" +"Разликата показва Ñамо разликите Ñ ÐºÐ¾Ð½Ñ„Ð»Ð¸ÐºÑ‚.\n" +"\n" +"Файлът „%s“ ще Ñе презапише.\n" +"\n" +"Тази Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¼Ð¾Ð¶Ðµ да Ñе отмени Ñамо чрез започване на Ñливането наново." + +#: lib/mergetool.tcl:45 +#, tcl-format +msgid "File %s seems to have unresolved conflicts, still stage?" +msgstr "" +"Изглежда, че вÑе още има некоригирани конфликти във файла „%s“. Да Ñе добави " +"ли файлът към индекÑа?" + +#: lib/mergetool.tcl:60 +#, tcl-format +msgid "Adding resolution for %s" +msgstr "ДобавÑне на ÐºÐ¾Ñ€ÐµÐºÑ†Ð¸Ñ Ð½Ð° конфликтите в „%s“" + +#: lib/mergetool.tcl:141 +msgid "Cannot resolve deletion or link conflicts using a tool" +msgstr "" +"Конфликтите при Ñимволни връзки или изтриване не може да Ñе коригират Ñ " +"външна програма." + +#: lib/mergetool.tcl:146 +msgid "Conflict file does not exist" +msgstr "Файлът, в който е конфликтът, не ÑъщеÑтвува" + +#: lib/mergetool.tcl:246 +#, tcl-format +msgid "Not a GUI merge tool: '%s'" +msgstr "Това не е графична програма за Ñливане: „%s“" + +#: lib/mergetool.tcl:275 +#, tcl-format +msgid "Unsupported merge tool '%s'" +msgstr "Ðеподдържана програма за Ñливане: „%s“" + +#: lib/mergetool.tcl:310 +msgid "Merge tool is already running, terminate it?" +msgstr "Програмата за Ñливане вече е Ñтартирана. Да Ñе изключи ли?" + +#: lib/mergetool.tcl:330 +#, tcl-format +msgid "" +"Error retrieving versions:\n" +"%s" +msgstr "" +"Грешка при изтеглÑнето на верÑии:\n" +"%s" + +#: lib/mergetool.tcl:350 +#, tcl-format +msgid "" +"Could not start the merge tool:\n" +"\n" +"%s" +msgstr "" +"Програмата за Ñливане не може да Ñе Ñтартира:\n" +"\n" +"%s" + +#: lib/mergetool.tcl:354 +msgid "Running merge tool..." +msgstr "Стартиране на програмата за Ñливане…" + +#: lib/mergetool.tcl:382 lib/mergetool.tcl:390 +msgid "Merge tool failed." +msgstr "Грешка в програмата за Ñливане." + +#: lib/tools_dlg.tcl:22 +#, tcl-format +msgid "%s (%s): Add Tool" +msgstr "%s (%s): ДобавÑне на команда" + +#: lib/tools_dlg.tcl:28 +msgid "Add New Tool Command" +msgstr "ДобавÑне на команда" + +#: lib/tools_dlg.tcl:34 +msgid "Add globally" +msgstr "Глобално добавÑне" + +#: lib/tools_dlg.tcl:46 +msgid "Tool Details" +msgstr "ПодробноÑти за командата" + +#: lib/tools_dlg.tcl:49 +msgid "Use '/' separators to create a submenu tree:" +msgstr "За Ñъздаване на подменюта използвайте знака „/“ за разделител:" + +#: lib/tools_dlg.tcl:60 +msgid "Command:" +msgstr "Команда:" + +#: lib/tools_dlg.tcl:71 +msgid "Show a dialog before running" +msgstr "Преди изпълнение да Ñе извежда диалогов прозорец" + +#: lib/tools_dlg.tcl:77 +msgid "Ask the user to select a revision (sets $REVISION)" +msgstr "ПотребителÑÑ‚ да укаже верÑÐ¸Ñ (задаване на променливата $REVISION)" + +#: lib/tools_dlg.tcl:82 +msgid "Ask the user for additional arguments (sets $ARGS)" +msgstr "" +"ПотребителÑÑ‚ да укаже допълнителни аргументи (задаване на променливата $ARGS)" + +#: lib/tools_dlg.tcl:89 +msgid "Don't show the command output window" +msgstr "Без показване на прозорец Ñ Ð¸Ð·Ñ…Ð¾Ð´Ð° от командата" + +#: lib/tools_dlg.tcl:94 +msgid "Run only if a diff is selected ($FILENAME not empty)" +msgstr "" +"Стартиране Ñамо Ñлед избор на разлика (променливата $FILENAME не е празна)" + +#: lib/tools_dlg.tcl:118 +msgid "Please supply a name for the tool." +msgstr "Задайте име за командата." + +#: lib/tools_dlg.tcl:126 +#, tcl-format +msgid "Tool '%s' already exists." +msgstr "Командата „%s“ вече ÑъщеÑтвува." + +#: lib/tools_dlg.tcl:148 +#, tcl-format +msgid "" +"Could not add tool:\n" +"%s" +msgstr "" +"Командата не може да Ñе добави:\n" +"%s" + +#: lib/tools_dlg.tcl:187 +#, tcl-format +msgid "%s (%s): Remove Tool" +msgstr "%s (%s): Премахване на команда" + +#: lib/tools_dlg.tcl:193 +msgid "Remove Tool Commands" +msgstr "Премахване на команди" + +#: lib/tools_dlg.tcl:198 +msgid "Remove" +msgstr "Премахване" + +#: lib/tools_dlg.tcl:231 +msgid "(Blue denotes repository-local tools)" +msgstr "(командите към локалното хранилище Ñа обозначени в Ñиньо)" + +#: lib/tools_dlg.tcl:283 +#, tcl-format +msgid "%s (%s):" +msgstr "%s (%s):" + +#: lib/tools_dlg.tcl:292 +#, tcl-format +msgid "Run Command: %s" +msgstr "Изпълнение на командата „%s“" + +#: lib/tools_dlg.tcl:306 +msgid "Arguments" +msgstr "Ðргументи" + +#: lib/tools_dlg.tcl:341 +msgid "OK" +msgstr "Добре" + +#: lib/search.tcl:48 +msgid "Find:" +msgstr "ТърÑене:" + +#: lib/search.tcl:50 +msgid "Next" +msgstr "Следваща поÑва" + +#: lib/search.tcl:51 +msgid "Prev" +msgstr "Предишна поÑва" + +#: lib/search.tcl:52 +msgid "RegExp" +msgstr "РегИзр" + +#: lib/search.tcl:54 +msgid "Case" +msgstr "Главни/Малки" + +#: lib/shortcut.tcl:8 lib/shortcut.tcl:43 lib/shortcut.tcl:75 +#, tcl-format +msgid "%s (%s): Create Desktop Icon" +msgstr "%s (%s): ДобавÑне на икона на Ñ€Ð°Ð±Ð¾Ñ‚Ð½Ð¸Ñ Ð¿Ð»Ð¾Ñ‚" + +#: lib/shortcut.tcl:24 lib/shortcut.tcl:65 +msgid "Cannot write shortcut:" +msgstr "Клавишната ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñ†Ð¸Ñ Ð½Ðµ може да Ñе запази:" + +#: lib/shortcut.tcl:140 +msgid "Cannot write icon:" +msgstr "Иконата не може да Ñе запази:" + +#: lib/remote_branch_delete.tcl:29 +#, tcl-format +msgid "%s (%s): Delete Branch Remotely" +msgstr "%s (%s): Изтриване на Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ ÐºÐ»Ð¾Ð½" + +#: lib/remote_branch_delete.tcl:34 +msgid "Delete Branch Remotely" +msgstr "Изтриване на Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ ÐºÐ»Ð¾Ð½" + +#: lib/remote_branch_delete.tcl:48 +msgid "From Repository" +msgstr "От хранилище" + +#: lib/remote_branch_delete.tcl:88 +msgid "Branches" +msgstr "Клони" + +#: lib/remote_branch_delete.tcl:110 +msgid "Delete Only If" +msgstr "Изтриване, Ñамо ако" + +#: lib/remote_branch_delete.tcl:112 +msgid "Merged Into:" +msgstr "СлÑÑ‚ в:" + +#: lib/remote_branch_delete.tcl:120 lib/branch_delete.tcl:53 +msgid "Always (Do not perform merge checks)" +msgstr "Винаги (без проверка за Ñливане)" + +#: lib/remote_branch_delete.tcl:153 +msgid "A branch is required for 'Merged Into'." +msgstr "За данните „СлÑÑ‚ в“ е необходимо да зададете клон." + +#: lib/remote_branch_delete.tcl:185 +#, tcl-format +msgid "" +"The following branches are not completely merged into %s:\n" +"\n" +" - %s" +msgstr "" +"Следните клони не Ñа Ñлети напълно в „%s“:\n" +"\n" +" â— %s" + +#: lib/remote_branch_delete.tcl:190 +#, tcl-format +msgid "" +"One or more of the merge tests failed because you have not fetched the " +"necessary commits. Try fetching from %s first." +msgstr "" +"Поне една от пробите за Ñливане е неуÑпешна, защото не Ñте доÑтавили вÑички " +"необходими подаваниÑ. Пробвайте първо да доÑтавите подаваниÑта от „%s“." + +#: lib/remote_branch_delete.tcl:208 +msgid "Please select one or more branches to delete." +msgstr "Изберете поне един клон за изтриване." + +#: lib/remote_branch_delete.tcl:218 lib/branch_delete.tcl:115 +msgid "" +"Recovering deleted branches is difficult.\n" +"\n" +"Delete the selected branches?" +msgstr "" +"ВъзÑтановÑването на изтрити клони може да е трудно.\n" +"\n" +"Сигурни ли Ñте, че иÑкате да триете?" + +#: lib/remote_branch_delete.tcl:227 +#, tcl-format +msgid "Deleting branches from %s" +msgstr "Изтриване на клони от „%s“" + +#: lib/remote_branch_delete.tcl:300 +msgid "No repository selected." +msgstr "Ðе е избрано хранилище." + +#: lib/remote_branch_delete.tcl:305 +#, tcl-format +msgid "Scanning %s..." +msgstr "ПретърÑване на „%s“…" + +#: lib/choose_repository.tcl:45 msgid "Git Gui" msgstr "ГПИ на Git" -#: lib/choose_repository.tcl:92 lib/choose_repository.tcl:412 +#: lib/choose_repository.tcl:104 lib/choose_repository.tcl:427 msgid "Create New Repository" msgstr "Създаване на ново хранилище" -#: lib/choose_repository.tcl:98 +#: lib/choose_repository.tcl:110 msgid "New..." msgstr "Ðово…" -#: lib/choose_repository.tcl:105 lib/choose_repository.tcl:496 +#: lib/choose_repository.tcl:117 lib/choose_repository.tcl:511 msgid "Clone Existing Repository" msgstr "Клониране на ÑъщеÑтвуващо хранилище" -#: lib/choose_repository.tcl:116 +#: lib/choose_repository.tcl:128 msgid "Clone..." msgstr "Клониране…" -#: lib/choose_repository.tcl:123 lib/choose_repository.tcl:1064 +#: lib/choose_repository.tcl:135 lib/choose_repository.tcl:1105 msgid "Open Existing Repository" msgstr "ОтварÑне на ÑъщеÑтвуващо хранилище" -#: lib/choose_repository.tcl:129 +#: lib/choose_repository.tcl:141 msgid "Open..." msgstr "ОтварÑне…" -#: lib/choose_repository.tcl:142 +#: lib/choose_repository.tcl:154 msgid "Recent Repositories" msgstr "Скоро ползвани" -#: lib/choose_repository.tcl:148 +#: lib/choose_repository.tcl:164 msgid "Open Recent Repository:" msgstr "ОтварÑне на хранилище ползвано наÑкоро:" -#: lib/choose_repository.tcl:316 lib/choose_repository.tcl:323 -#: lib/choose_repository.tcl:330 +#: lib/choose_repository.tcl:331 lib/choose_repository.tcl:338 +#: lib/choose_repository.tcl:345 #, tcl-format msgid "Failed to create repository %s:" msgstr "ÐеуÑпешно Ñъздаване на хранилището „%s“:" -#: lib/choose_repository.tcl:417 +#: lib/choose_repository.tcl:422 lib/branch_create.tcl:33 +msgid "Create" +msgstr "Създаване" + +#: lib/choose_repository.tcl:432 msgid "Directory:" msgstr "ДиректориÑ:" -#: lib/choose_repository.tcl:447 lib/choose_repository.tcl:573 -#: lib/choose_repository.tcl:1098 +#: lib/choose_repository.tcl:462 lib/choose_repository.tcl:588 +#: lib/choose_repository.tcl:1139 msgid "Git Repository" msgstr "Хранилище на Git" -#: lib/choose_repository.tcl:472 +#: lib/choose_repository.tcl:487 #, tcl-format msgid "Directory %s already exists." msgstr "Вече ÑъщеÑтвува Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ â€ž%s“." -#: lib/choose_repository.tcl:476 +#: lib/choose_repository.tcl:491 #, tcl-format msgid "File %s already exists." msgstr "Вече ÑъщеÑтвува файл „%s“." -#: lib/choose_repository.tcl:491 +#: lib/choose_repository.tcl:506 msgid "Clone" msgstr "Клониране" -#: lib/choose_repository.tcl:504 +#: lib/choose_repository.tcl:519 msgid "Source Location:" msgstr "ÐÐ´Ñ€ÐµÑ Ð½Ð° източника:" -#: lib/choose_repository.tcl:513 +#: lib/choose_repository.tcl:528 msgid "Target Directory:" msgstr "Целева директориÑ:" -#: lib/choose_repository.tcl:523 +#: lib/choose_repository.tcl:538 msgid "Clone Type:" msgstr "Вид клониране:" -#: lib/choose_repository.tcl:528 +#: lib/choose_repository.tcl:543 msgid "Standard (Fast, Semi-Redundant, Hardlinks)" msgstr "Стандартно (бързо, чаÑтично ÑподелÑне на файлове, твърди връзки)" -#: lib/choose_repository.tcl:533 +#: lib/choose_repository.tcl:548 msgid "Full Copy (Slower, Redundant Backup)" msgstr "Пълно (бавно, пълноценно резервно копие)" -#: lib/choose_repository.tcl:538 +#: lib/choose_repository.tcl:553 msgid "Shared (Fastest, Not Recommended, No Backup)" msgstr "Споделено (най-бързо, не Ñе препоръчва, не прави резервно копие)" -#: lib/choose_repository.tcl:545 +#: lib/choose_repository.tcl:560 msgid "Recursively clone submodules too" msgstr "РекурÑивно клониране и на подмодулите" -#: lib/choose_repository.tcl:579 lib/choose_repository.tcl:626 -#: lib/choose_repository.tcl:772 lib/choose_repository.tcl:842 -#: lib/choose_repository.tcl:1104 lib/choose_repository.tcl:1112 +#: lib/choose_repository.tcl:594 lib/choose_repository.tcl:641 +#: lib/choose_repository.tcl:790 lib/choose_repository.tcl:864 +#: lib/choose_repository.tcl:1145 lib/choose_repository.tcl:1153 #, tcl-format msgid "Not a Git repository: %s" msgstr "Това не е хранилище на Git: %s" -#: lib/choose_repository.tcl:615 +#: lib/choose_repository.tcl:630 msgid "Standard only available for local repository." -msgstr "Само локални хранилища могат да Ñе клонират Ñтандартно" +msgstr "Само локални хранилища може да Ñе клонират Ñтандартно" -#: lib/choose_repository.tcl:619 +#: lib/choose_repository.tcl:634 msgid "Shared only available for local repository." -msgstr "Само локални хранилища могат да Ñе клонират Ñподелено" +msgstr "Само локални хранилища може да Ñе клонират Ñподелено" -#: lib/choose_repository.tcl:640 +#: lib/choose_repository.tcl:655 #, tcl-format msgid "Location %s already exists." msgstr "МеÑтоположението „%s“ вече ÑъщеÑтвува." -#: lib/choose_repository.tcl:651 +#: lib/choose_repository.tcl:666 msgid "Failed to configure origin" msgstr "ÐеуÑпешно наÑтройване на хранилището-източник" -#: lib/choose_repository.tcl:663 +#: lib/choose_repository.tcl:678 msgid "Counting objects" msgstr "ПреброÑване на обекти" -#: lib/choose_repository.tcl:664 +#: lib/choose_repository.tcl:679 msgid "buckets" msgstr "клетки" -#: lib/choose_repository.tcl:688 +#: lib/choose_repository.tcl:703 #, tcl-format msgid "Unable to copy objects/info/alternates: %s" -msgstr "Обектите/информациÑта/Ñинонимите не могат да бъдат копирани: %s" +msgstr "Обектите/ИнформациÑта/Синонимите не може да Ñе копират: %s" -#: lib/choose_repository.tcl:724 +#: lib/choose_repository.tcl:740 #, tcl-format msgid "Nothing to clone from %s." msgstr "ÐÑма какво да Ñе клонира от „%s“." -#: lib/choose_repository.tcl:726 lib/choose_repository.tcl:940 -#: lib/choose_repository.tcl:952 +#: lib/choose_repository.tcl:742 lib/choose_repository.tcl:962 +#: lib/choose_repository.tcl:974 msgid "The 'master' branch has not been initialized." msgstr "ОÑновниÑÑ‚ клон — „master“ не е инициализиран." -#: lib/choose_repository.tcl:739 +#: lib/choose_repository.tcl:755 msgid "Hardlinks are unavailable. Falling back to copying." msgstr "Ðе Ñе поддържат твърди връзки. Преминава Ñе към копиране." -#: lib/choose_repository.tcl:751 +#: lib/choose_repository.tcl:769 #, tcl-format msgid "Cloning from %s" msgstr "Клониране на „%s“" -#: lib/choose_repository.tcl:782 +#: lib/choose_repository.tcl:800 msgid "Copying objects" msgstr "Копиране на обекти" -#: lib/choose_repository.tcl:783 +#: lib/choose_repository.tcl:801 msgid "KiB" msgstr "KiB" -#: lib/choose_repository.tcl:807 +#: lib/choose_repository.tcl:825 #, tcl-format msgid "Unable to copy object: %s" msgstr "ÐеуÑпешно копиране на обект: %s" -#: lib/choose_repository.tcl:817 +#: lib/choose_repository.tcl:837 msgid "Linking objects" msgstr "Създаване на връзки към обектите" -#: lib/choose_repository.tcl:818 +#: lib/choose_repository.tcl:838 msgid "objects" msgstr "обекти" -#: lib/choose_repository.tcl:826 +#: lib/choose_repository.tcl:846 #, tcl-format msgid "Unable to hardlink object: %s" msgstr "ÐеуÑпешно Ñъздаване на твърда връзка към обект: %s" -#: lib/choose_repository.tcl:881 +#: lib/choose_repository.tcl:903 msgid "Cannot fetch branches and objects. See console output for details." msgstr "" -"Клоните и обектите не могат да бъдат изтеглени. За повече Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ " -"погледнете изхода на конзолата." +"Клоните и обектите не може да Ñе изтеглÑÑ‚. За повече Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¿Ð¾Ð³Ð»ÐµÐ´Ð½ÐµÑ‚Ðµ " +"изхода на конзолата." -#: lib/choose_repository.tcl:892 +#: lib/choose_repository.tcl:914 msgid "Cannot fetch tags. See console output for details." msgstr "" -"Етикетите не могат да бъдат изтеглени. За повече Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¿Ð¾Ð³Ð»ÐµÐ´Ð½ÐµÑ‚Ðµ " -"изхода на конзолата." +"Етикетите не може да Ñе изтеглÑÑ‚. За повече Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¿Ð¾Ð³Ð»ÐµÐ´Ð½ÐµÑ‚Ðµ изхода на " +"конзолата." -#: lib/choose_repository.tcl:916 +#: lib/choose_repository.tcl:938 msgid "Cannot determine HEAD. See console output for details." msgstr "" -"Върхът „HEAD“ не може да бъде определен. За повече Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¿Ð¾Ð³Ð»ÐµÐ´Ð½ÐµÑ‚Ðµ " -"изхода на конзолата." +"Върхът „HEAD“ не може да Ñе определи. За повече Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð¿Ð¾Ð³Ð»ÐµÐ´Ð½ÐµÑ‚Ðµ изхода " +"на конзолата." -#: lib/choose_repository.tcl:925 +#: lib/choose_repository.tcl:947 #, tcl-format msgid "Unable to cleanup %s" -msgstr "„%s“ не може да Ñе зачиÑти" +msgstr "„%s“ не може да Ñе изчиÑти" -#: lib/choose_repository.tcl:931 +#: lib/choose_repository.tcl:953 msgid "Clone failed." msgstr "ÐеуÑпешно клониране." -#: lib/choose_repository.tcl:938 +#: lib/choose_repository.tcl:960 msgid "No default branch obtained." msgstr "Ðе е получен клон по подразбиране." -#: lib/choose_repository.tcl:949 +#: lib/choose_repository.tcl:971 #, tcl-format msgid "Cannot resolve %s as a commit." msgstr "ÐÑма подаване отговарÑщо на „%s“." -#: lib/choose_repository.tcl:961 +#: lib/choose_repository.tcl:998 msgid "Creating working directory" msgstr "Създаване на работната директориÑ" -#: lib/choose_repository.tcl:962 lib/index.tcl:70 lib/index.tcl:136 -#: lib/index.tcl:207 -msgid "files" -msgstr "файлове" - -#: lib/choose_repository.tcl:981 -msgid "Cannot clone submodules." -msgstr "Подмодулите не могат да Ñе клонират." +#: lib/choose_repository.tcl:1028 +msgid "Initial file checkout failed." +msgstr "ÐеуÑпешно първоначално изтеглÑне." -#: lib/choose_repository.tcl:990 +#: lib/choose_repository.tcl:1072 msgid "Cloning submodules" msgstr "Клониране на подмодули" -#: lib/choose_repository.tcl:1015 -msgid "Initial file checkout failed." -msgstr "ÐеуÑпешно първоначално изтеглÑне." - -#: lib/choose_repository.tcl:1059 -msgid "Open" -msgstr "ОтварÑне" +#: lib/choose_repository.tcl:1087 +msgid "Cannot clone submodules." +msgstr "Подмодулите не може да Ñе клонират." -#: lib/choose_repository.tcl:1069 +#: lib/choose_repository.tcl:1110 msgid "Repository:" msgstr "Хранилище:" -#: lib/choose_repository.tcl:1118 +#: lib/choose_repository.tcl:1159 #, tcl-format msgid "Failed to open repository %s:" msgstr "ÐеуÑпешно отварÑне на хранилището „%s“:" +#: lib/about.tcl:26 +msgid "git-gui - a graphical user interface for Git." +msgstr "git-gui — графичен Ð¸Ð½Ñ‚ÐµÑ€Ñ„ÐµÐ¹Ñ Ð·Ð° Git." + +#: lib/blame.tcl:74 +#, tcl-format +msgid "%s (%s): File Viewer" +msgstr "%s (%s): Преглед на файлове" + +#: lib/blame.tcl:80 +msgid "Commit:" +msgstr "Подаване:" + +#: lib/blame.tcl:282 +msgid "Copy Commit" +msgstr "Копиране на подаване" + +#: lib/blame.tcl:286 +msgid "Find Text..." +msgstr "ТърÑене на текÑт…" + +#: lib/blame.tcl:290 +msgid "Goto Line..." +msgstr "Към ред…" + +#: lib/blame.tcl:299 +msgid "Do Full Copy Detection" +msgstr "Пълно търÑене на копиране" + +#: lib/blame.tcl:303 +msgid "Show History Context" +msgstr "Показване на контекÑта от иÑториÑта" + +#: lib/blame.tcl:306 +msgid "Blame Parent Commit" +msgstr "Ðнотиране на родителÑкото подаване" + +#: lib/blame.tcl:468 +#, tcl-format +msgid "Reading %s..." +msgstr "Чете Ñе „%s“…" + +#: lib/blame.tcl:596 +msgid "Loading copy/move tracking annotations..." +msgstr "Зареждане на анотациите за проÑледÑване на копирането/премеÑтването…" + +#: lib/blame.tcl:613 +msgid "lines annotated" +msgstr "реда анотирани" + +#: lib/blame.tcl:815 +msgid "Loading original location annotations..." +msgstr "Зареждане на анотациите за първоначалното меÑтоположение…" + +#: lib/blame.tcl:818 +msgid "Annotation complete." +msgstr "Ðнотирането завърши." + +#: lib/blame.tcl:849 +msgid "Busy" +msgstr "ОперациÑта не е завършила" + +#: lib/blame.tcl:850 +msgid "Annotation process is already running." +msgstr "Ð’ момента тече Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð½Ð° анотиране." + +#: lib/blame.tcl:889 +msgid "Running thorough copy detection..." +msgstr "ИзпълнÑва Ñе цÑлоÑтен Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð½Ð° откриване на копиране…" + +#: lib/blame.tcl:957 +msgid "Loading annotation..." +msgstr "Зареждане на анотации…" + +#: lib/blame.tcl:1010 +msgid "Author:" +msgstr "Ðвтор:" + +#: lib/blame.tcl:1014 +msgid "Committer:" +msgstr "Подал:" + +#: lib/blame.tcl:1019 +msgid "Original File:" +msgstr "Първоначален файл:" + +#: lib/blame.tcl:1067 +msgid "Cannot find HEAD commit:" +msgstr "Подаването за връх „HEAD“ не може да Ñе открие:" + +#: lib/blame.tcl:1122 +msgid "Cannot find parent commit:" +msgstr "РодителÑкото подаване не може да Ñе открие" + +#: lib/blame.tcl:1137 +msgid "Unable to display parent" +msgstr "РодителÑÑ‚ не може да Ñе покаже" + +#: lib/blame.tcl:1138 lib/diff.tcl:345 +msgid "Error loading diff:" +msgstr "Грешка при зареждане на разлика:" + +#: lib/blame.tcl:1279 +msgid "Originally By:" +msgstr "Първоначално от:" + +#: lib/blame.tcl:1285 +msgid "In File:" +msgstr "Във файл:" + +#: lib/blame.tcl:1290 +msgid "Copied Or Moved Here By:" +msgstr "Копирано или премеÑтено тук от:" + +#: lib/diff.tcl:77 +#, tcl-format +msgid "" +"No differences detected.\n" +"\n" +"%s has no changes.\n" +"\n" +"The modification date of this file was updated by another application, but " +"the content within the file was not changed.\n" +"\n" +"A rescan will be automatically started to find other files which may have " +"the same state." +msgstr "" +"Ðе Ñа открити разлики.\n" +"\n" +"ÐÑма промени в „%s“.\n" +"\n" +"Времето на промÑна на файла е бил зададен от друга програма, но Ñъдържанието " +"му не е променено.\n" +"\n" +"Ðвтоматично ще започне нова проверка дали нÑма други файлове в това " +"ÑÑŠÑтоÑние." + +#: lib/diff.tcl:117 +#, tcl-format +msgid "Loading diff of %s..." +msgstr "Зареждане на разликите в „%s“…" + +#: lib/diff.tcl:143 +msgid "" +"LOCAL: deleted\n" +"REMOTE:\n" +msgstr "" +"ЛОКÐЛÐО: изтрит\n" +"ОТДÐЛЕЧЕÐО:\n" + +#: lib/diff.tcl:148 +msgid "" +"REMOTE: deleted\n" +"LOCAL:\n" +msgstr "" +"ОТДÐЛЕЧЕÐО: изтрит\n" +"ЛОКÐЛÐО:\n" + +#: lib/diff.tcl:155 +msgid "LOCAL:\n" +msgstr "ЛОКÐЛÐО:\n" + +#: lib/diff.tcl:158 +msgid "REMOTE:\n" +msgstr "ОТДÐЛЕЧЕÐО:\n" + +#: lib/diff.tcl:220 lib/diff.tcl:344 +#, tcl-format +msgid "Unable to display %s" +msgstr "Файлът „%s“ не може да Ñе покаже" + +#: lib/diff.tcl:221 +msgid "Error loading file:" +msgstr "Грешка при зареждане на файл:" + +#: lib/diff.tcl:227 +msgid "Git Repository (subproject)" +msgstr "Хранилище на Git (подмодул)" + +#: lib/diff.tcl:239 +msgid "* Binary file (not showing content)." +msgstr "◠Двоичен файл (Ñъдържанието не Ñе показва)." + +#: lib/diff.tcl:244 +#, tcl-format +msgid "" +"* Untracked file is %d bytes.\n" +"* Showing only first %d bytes.\n" +msgstr "" +"â— ÐеÑледениÑÑ‚ файл е %d байта.\n" +"◠Показват Ñе Ñамо първите %d байта.\n" + +#: lib/diff.tcl:250 +#, tcl-format +msgid "" +"\n" +"* Untracked file clipped here by %s.\n" +"* To see the entire file, use an external editor.\n" +msgstr "" +"\n" +"â— ÐеÑледениÑÑ‚ файл е отрÑзан дотук от програмата „%s“.\n" +"◠Използвайте външен редактор, за да видите Ñ†ÐµÐ»Ð¸Ñ Ñ„Ð°Ð¹Ð».\n" + +#: lib/diff.tcl:583 +msgid "Failed to unstage selected hunk." +msgstr "Избраното парче не може да Ñе извади от индекÑа." + +#: lib/diff.tcl:591 +msgid "Failed to revert selected hunk." +msgstr "Избраното парче не може да Ñе върне." + +#: lib/diff.tcl:594 +msgid "Failed to stage selected hunk." +msgstr "Избраното парче не може да Ñе добави към индекÑа." + +#: lib/diff.tcl:687 +msgid "Failed to unstage selected line." +msgstr "ИзбраниÑÑ‚ ред не може да Ñе извади от индекÑа." + +#: lib/diff.tcl:696 +msgid "Failed to revert selected line." +msgstr "ИзбраниÑÑ‚ ред не може да Ñе върне." + +#: lib/diff.tcl:700 +msgid "Failed to stage selected line." +msgstr "ИзбраниÑÑ‚ ред не може да Ñе добави към индекÑа." + +#: lib/diff.tcl:889 +msgid "Failed to undo last revert." +msgstr "ÐеуÑпешна отмÑна на поÑледното връщане." + +#: lib/sshkey.tcl:34 +msgid "No keys found." +msgstr "Ðе Ñа открити ключове." + +#: lib/sshkey.tcl:37 +#, tcl-format +msgid "Found a public key in: %s" +msgstr "Открит е публичен ключ в „%s“" + +#: lib/sshkey.tcl:43 +msgid "Generate Key" +msgstr "Генериране на ключ" + +#: lib/sshkey.tcl:61 +msgid "Copy To Clipboard" +msgstr "Копиране към ÑиÑÑ‚ÐµÐ¼Ð½Ð¸Ñ Ð±ÑƒÑ„ÐµÑ€" + +#: lib/sshkey.tcl:75 +msgid "Your OpenSSH Public Key" +msgstr "ПубличниÑÑ‚ ви ключ за OpenSSH" + +#: lib/sshkey.tcl:83 +msgid "Generating..." +msgstr "Генериране…" + +#: lib/sshkey.tcl:89 +#, tcl-format +msgid "" +"Could not start ssh-keygen:\n" +"\n" +"%s" +msgstr "" +"Програмата „ssh-keygen“ не може да Ñе Ñтартира:\n" +"\n" +"%s" + +#: lib/sshkey.tcl:116 +msgid "Generation failed." +msgstr "ÐеуÑпешно генериране." + +#: lib/sshkey.tcl:123 +msgid "Generation succeeded, but no keys found." +msgstr "Генерирането завърши уÑпешно, а не Ñа намерени ключове." + +#: lib/sshkey.tcl:126 +#, tcl-format +msgid "Your key is in: %s" +msgstr "Ключът ви е в „%s“" + +#: lib/branch_create.tcl:23 +#, tcl-format +msgid "%s (%s): Create Branch" +msgstr "%s (%s): Създаване на клон" + +#: lib/branch_create.tcl:28 +msgid "Create New Branch" +msgstr "Създаване на нов клон" + +#: lib/branch_create.tcl:42 +msgid "Branch Name" +msgstr "Име на клона" + +#: lib/branch_create.tcl:57 +msgid "Match Tracking Branch Name" +msgstr "Съвпадане по името на ÑÐ»ÐµÐ´ÐµÐ½Ð¸Ñ ÐºÐ»Ð¾Ð½" + +#: lib/branch_create.tcl:66 +msgid "Starting Revision" +msgstr "Ðачална верÑиÑ" + +#: lib/branch_create.tcl:72 +msgid "Update Existing Branch:" +msgstr "ОбновÑване на ÑъщеÑтвуващ клон:" + +#: lib/branch_create.tcl:75 +msgid "No" +msgstr "Ðе" + +#: lib/branch_create.tcl:80 +msgid "Fast Forward Only" +msgstr "Само тривиално превъртащо Ñливане" + +#: lib/branch_create.tcl:97 +msgid "Checkout After Creation" +msgstr "Преминаване към клона Ñлед Ñъздаването му" + +#: lib/branch_create.tcl:132 +msgid "Please select a tracking branch." +msgstr "Изберете клон за Ñледени." + +#: lib/branch_create.tcl:141 +#, tcl-format +msgid "Tracking branch %s is not a branch in the remote repository." +msgstr "СледÑщиÑÑ‚ клон — „%s“, не ÑъщеÑтвува в отдалеченото хранилище." + +#: lib/console.tcl:59 +msgid "Working... please wait..." +msgstr "Ð’ момента Ñе извършва дейÑтвие, изчакайте…" + +#: lib/console.tcl:186 +msgid "Success" +msgstr "УÑпех" + +#: lib/console.tcl:200 +msgid "Error: Command Failed" +msgstr "Грешка: неуÑпешно изпълнение на команда" + +#: lib/line.tcl:17 +msgid "Goto Line:" +msgstr "Към ред:" + +#: lib/line.tcl:23 +msgid "Go" +msgstr "Към" + #: lib/choose_rev.tcl:52 msgid "This Detached Checkout" msgstr "Това неÑвързано изтеглÑне" @@ -1422,24 +2426,24 @@ msgstr "" "Ð’ момента вÑе още не Ñте завършили Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¿Ð¾ Ñливане. Ðе може да поправите " "предишното подаване, оÑвен ако първо не преуÑтановите текущото Ñливане.\n" -#: lib/commit.tcl:48 +#: lib/commit.tcl:56 msgid "Error loading commit data for amend:" msgstr "Грешка при зареждане на данните от подаване, които да Ñе поправÑÑ‚:" -#: lib/commit.tcl:75 +#: lib/commit.tcl:83 msgid "Unable to obtain your identity:" -msgstr "ИдентификациÑта ви не може да бъде определена:" +msgstr "ИдентификациÑта ви не може да Ñе определи:" -#: lib/commit.tcl:80 +#: lib/commit.tcl:88 msgid "Invalid GIT_COMMITTER_IDENT:" msgstr "Ðеправилно поле „GIT_COMMITTER_IDENT“:" -#: lib/commit.tcl:129 +#: lib/commit.tcl:138 #, tcl-format msgid "warning: Tcl does not support encoding '%s'." msgstr "предупреждение: Tcl не поддържа кодирането „%s“." -#: lib/commit.tcl:149 +#: lib/commit.tcl:158 msgid "" "Last scanned state does not match repository state.\n" "\n" @@ -1452,11 +2456,11 @@ msgstr "" "хранилището.\n" "\n" "ÐÑкой друг Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð·Ð° Git е променил хранилището междувременно. СъÑтоÑнието " -"трÑбва да бъде проверено преди ново подаване.\n" +"трÑбва да Ñе провери преди ново подаване.\n" "\n" "Ðвтоматично ще започне нова проверка.\n" -#: lib/commit.tcl:173 +#: lib/commit.tcl:182 #, tcl-format msgid "" "Unmerged files cannot be committed.\n" @@ -1464,12 +2468,12 @@ msgid "" "File %s has merge conflicts. You must resolve them and stage the file " "before committing.\n" msgstr "" -"ÐеÑлетите файлове не могат да бъдат подавани.\n" +"ÐеÑлетите файлове не може да Ñе подадат.\n" "\n" "Във файла „%s“ има конфликти при Ñливане. За да го подадете, трÑбва първо да " "коригирате конфликтите и да добавите файла към индекÑа за подаване.\n" -#: lib/commit.tcl:181 +#: lib/commit.tcl:190 #, tcl-format msgid "" "Unknown file state %s detected.\n" @@ -1478,9 +2482,9 @@ msgid "" msgstr "" "Ðепознато ÑÑŠÑтоÑние на файл „%s“.\n" "\n" -"Файлът „%s“ не може да бъде подаден чрез текущата програма.\n" +"Файлът „%s“ не може да Ñе подаде чрез текущата програма.\n" -#: lib/commit.tcl:189 +#: lib/commit.tcl:198 msgid "" "No changes to commit.\n" "\n" @@ -1490,7 +2494,7 @@ msgstr "" "\n" "ТрÑбва да добавите поне един файл към индекÑа, за да подадете.\n" -#: lib/commit.tcl:204 +#: lib/commit.tcl:213 msgid "" "Please supply a commit message.\n" "\n" @@ -1508,15 +2512,15 @@ msgstr "" "◠Втори ред: празен.\n" "◠ОÑтаналите редове: опишете защо Ñе налага тази промÑна.\n" -#: lib/commit.tcl:235 +#: lib/commit.tcl:244 msgid "Calling pre-commit hook..." msgstr "ИзпълнÑване на куката преди подаване…" -#: lib/commit.tcl:250 +#: lib/commit.tcl:259 msgid "Commit declined by pre-commit hook." msgstr "Подаването е отхвърлено от куката преди подаване." -#: lib/commit.tcl:269 +#: lib/commit.tcl:278 msgid "" "You are about to commit on a detached head. This is a potentially dangerous " "thing to do because if you switch to another branch you will lose your " @@ -1532,32 +2536,32 @@ msgstr "" " \n" "Сигурни ли Ñте, че иÑкате да извършите текущото подаване?" -#: lib/commit.tcl:290 +#: lib/commit.tcl:299 msgid "Calling commit-msg hook..." msgstr "ИзпълнÑване на куката за Ñъобщението при подаване…" -#: lib/commit.tcl:305 +#: lib/commit.tcl:314 msgid "Commit declined by commit-msg hook." msgstr "Подаването е отхвърлено от куката за Ñъобщението при подаване." -#: lib/commit.tcl:318 +#: lib/commit.tcl:327 msgid "Committing changes..." msgstr "Подаване на промените…" -#: lib/commit.tcl:334 +#: lib/commit.tcl:344 msgid "write-tree failed:" msgstr "неуÑпешно запазване на дървото (write-tree):" -#: lib/commit.tcl:335 lib/commit.tcl:382 lib/commit.tcl:403 +#: lib/commit.tcl:345 lib/commit.tcl:395 lib/commit.tcl:422 msgid "Commit failed." msgstr "ÐеуÑпешно подаване." -#: lib/commit.tcl:352 +#: lib/commit.tcl:362 #, tcl-format msgid "Commit %s appears to be corrupt" msgstr "Подаването „%s“ изглежда повредено" -#: lib/commit.tcl:357 +#: lib/commit.tcl:367 msgid "" "No changes to commit.\n" "\n" @@ -1572,34 +2576,63 @@ msgstr "" "\n" "Ðвтоматично ще започне нова проверка.\n" -#: lib/commit.tcl:364 +#: lib/commit.tcl:374 msgid "No changes to commit." msgstr "ÐÑма промени за подаване." -#: lib/commit.tcl:381 +#: lib/commit.tcl:394 msgid "commit-tree failed:" msgstr "неуÑпешно подаване на дървото (commit-tree):" -#: lib/commit.tcl:402 +#: lib/commit.tcl:421 msgid "update-ref failed:" msgstr "неуÑпешно обновÑване на указателите (update-ref):" -#: lib/commit.tcl:495 +#: lib/commit.tcl:514 #, tcl-format msgid "Created commit %s: %s" msgstr "УÑпешно подаване %s: %s" -#: lib/console.tcl:59 -msgid "Working... please wait..." -msgstr "Ð’ момента Ñе извършва дейÑтвие, изчакайте…" +#: lib/branch_delete.tcl:16 +#, tcl-format +msgid "%s (%s): Delete Branch" +msgstr "%s (%s): Изтриване на клон" -#: lib/console.tcl:186 -msgid "Success" -msgstr "УÑпех" +#: lib/branch_delete.tcl:21 +msgid "Delete Local Branch" +msgstr "Изтриване на локален клон" -#: lib/console.tcl:200 -msgid "Error: Command Failed" -msgstr "Грешка: неуÑпешно изпълнение на команда" +#: lib/branch_delete.tcl:39 +msgid "Local Branches" +msgstr "Локални клони" + +#: lib/branch_delete.tcl:51 +msgid "Delete Only If Merged Into" +msgstr "Изтриване, Ñамо ако промените Ñа Ñлети и другаде" + +#: lib/branch_delete.tcl:103 +#, tcl-format +msgid "The following branches are not completely merged into %s:" +msgstr "Ðе вÑички промени в клоните Ñа Ñлети в „%s“:" + +#: lib/branch_delete.tcl:131 +#, tcl-format +msgid " - %s:" +msgstr " — „%s:“" + +#: lib/branch_delete.tcl:141 +#, tcl-format +msgid "" +"Failed to delete branches:\n" +"%s" +msgstr "" +"ÐеуÑпешно триене на клони:\n" +"%s" + +#: lib/date.tcl:25 +#, tcl-format +msgid "Invalid date from Git: %s" +msgstr "Ðеправилни данни от Git: %s" #: lib/database.tcl:42 msgid "Number of loose objects" @@ -1629,12 +2662,6 @@ msgstr "Пакетирани обекти за окаÑтрÑне" msgid "Garbage files" msgstr "Файлове за боклука" -#: lib/database.tcl:57 lib/option.tcl:182 lib/option.tcl:197 lib/option.tcl:220 -#: lib/option.tcl:282 -#, tcl-format -msgid "%s:" -msgstr "%s:" - #: lib/database.tcl:66 #, tcl-format msgid "%s (%s): Database Statistics" @@ -1665,129 +2692,6 @@ msgstr "" "\n" "Да Ñе започне ли компреÑирането?" -#: lib/date.tcl:25 -#, tcl-format -msgid "Invalid date from Git: %s" -msgstr "Ðеправилни данни от Git: %s" - -#: lib/diff.tcl:77 -#, tcl-format -msgid "" -"No differences detected.\n" -"\n" -"%s has no changes.\n" -"\n" -"The modification date of this file was updated by another application, but " -"the content within the file was not changed.\n" -"\n" -"A rescan will be automatically started to find other files which may have " -"the same state." -msgstr "" -"Ðе Ñа открити разлики.\n" -"\n" -"ÐÑма промени в „%s“.\n" -"\n" -"Времето на промÑна на файла е бил зададен от друга програма, но Ñъдържанието " -"му не е променено.\n" -"\n" -"Ðвтоматично ще започне нова проверка дали нÑма други файлове в това " -"ÑÑŠÑтоÑние." - -#: lib/diff.tcl:117 -#, tcl-format -msgid "Loading diff of %s..." -msgstr "Зареждане на разликите в „%s“…" - -#: lib/diff.tcl:143 -msgid "" -"LOCAL: deleted\n" -"REMOTE:\n" -msgstr "" -"ЛОКÐЛÐО: изтрит\n" -"ОТДÐЛЕЧЕÐО:\n" - -#: lib/diff.tcl:148 -msgid "" -"REMOTE: deleted\n" -"LOCAL:\n" -msgstr "" -"ОТДÐЛЕЧЕÐО: изтрит\n" -"ЛОКÐЛÐО:\n" - -#: lib/diff.tcl:155 -msgid "LOCAL:\n" -msgstr "ЛОКÐЛÐО:\n" - -#: lib/diff.tcl:158 -msgid "REMOTE:\n" -msgstr "ОТДÐЛЕЧЕÐО:\n" - -#: lib/diff.tcl:220 lib/diff.tcl:357 -#, tcl-format -msgid "Unable to display %s" -msgstr "Файлът „%s“ не може да бъде показан" - -#: lib/diff.tcl:221 -msgid "Error loading file:" -msgstr "Грешка при зареждане на файл:" - -#: lib/diff.tcl:227 -msgid "Git Repository (subproject)" -msgstr "Хранилище на Git (подмодул)" - -#: lib/diff.tcl:239 -msgid "* Binary file (not showing content)." -msgstr "◠Двоичен файл (Ñъдържанието не Ñе показва)." - -#: lib/diff.tcl:244 -#, tcl-format -msgid "" -"* Untracked file is %d bytes.\n" -"* Showing only first %d bytes.\n" -msgstr "" -"â— ÐеÑледениÑÑ‚ файл е %d байта.\n" -"◠Показват Ñе Ñамо първите %d байта.\n" - -#: lib/diff.tcl:250 -#, tcl-format -msgid "" -"\n" -"* Untracked file clipped here by %s.\n" -"* To see the entire file, use an external editor.\n" -msgstr "" -"\n" -"â— ÐеÑледениÑÑ‚ файл е отрÑзан дотук от програмата „%s“.\n" -"◠Използвайте външен редактор, за да видите Ñ†ÐµÐ»Ð¸Ñ Ñ„Ð°Ð¹Ð».\n" - -#: lib/diff.tcl:580 -msgid "Failed to unstage selected hunk." -msgstr "Избраното парче не може да бъде извадено от индекÑа." - -#: lib/diff.tcl:587 -msgid "Failed to stage selected hunk." -msgstr "Избраното парче не може да бъде добавено към индекÑа." - -#: lib/diff.tcl:666 -msgid "Failed to unstage selected line." -msgstr "ИзбраниÑÑ‚ ред не може да бъде изваден от индекÑа." - -#: lib/diff.tcl:674 -msgid "Failed to stage selected line." -msgstr "ИзбраниÑÑ‚ ред не може да бъде добавен към индекÑа." - -#: lib/encoding.tcl:443 -msgid "Default" -msgstr "Стандартното" - -#: lib/encoding.tcl:448 -#, tcl-format -msgid "System (%s)" -msgstr "СиÑтемното (%s)" - -#: lib/encoding.tcl:459 lib/encoding.tcl:465 -msgid "Other" -msgstr "Друго" - #: lib/error.tcl:20 #, tcl-format msgid "%s: error" @@ -1812,98 +2716,6 @@ msgstr "Преди да можете да подадете, коригирайт msgid "%s (%s): error" msgstr "%s (%s): грешка" -#: lib/index.tcl:6 -msgid "Unable to unlock the index." -msgstr "ИндекÑÑŠÑ‚ не може да бъде отключен." - -#: lib/index.tcl:17 -msgid "Index Error" -msgstr "Грешка в индекÑа" - -#: lib/index.tcl:19 -msgid "" -"Updating the Git index failed. A rescan will be automatically started to " -"resynchronize git-gui." -msgstr "" -"ÐеуÑпешно обновÑване на индекÑа на Git. Ðвтоматично ще започне нова проверка " -"за Ñинхронизирането на git-gui." - -#: lib/index.tcl:30 -msgid "Continue" -msgstr "Продължаване" - -#: lib/index.tcl:33 -msgid "Unlock Index" -msgstr "Отключване на индекÑа" - -#: lib/index.tcl:294 -msgid "Unstaging selected files from commit" -msgstr "Изваждане на избраните файлове от подаването" - -#: lib/index.tcl:298 -#, tcl-format -msgid "Unstaging %s from commit" -msgstr "Изваждане на „%s“ от подаването" - -#: lib/index.tcl:337 -msgid "Ready to commit." -msgstr "ГотовноÑÑ‚ за подаване." - -#: lib/index.tcl:346 -msgid "Adding selected files" -msgstr "ДобавÑне на избраните файлове" - -#: lib/index.tcl:350 -#, tcl-format -msgid "Adding %s" -msgstr "ДобавÑне на „%s“" - -#: lib/index.tcl:380 -#, tcl-format -msgid "Stage %d untracked files?" -msgstr "Да Ñе добавÑÑ‚ ли %d неÑледени файла към индекÑа?" - -#: lib/index.tcl:388 -msgid "Adding all changed files" -msgstr "ДобавÑне на вÑички променени файлове" - -#: lib/index.tcl:428 -#, tcl-format -msgid "Revert changes in file %s?" -msgstr "Да Ñе махнат ли промените във файла „%s“?" - -#: lib/index.tcl:430 -#, tcl-format -msgid "Revert changes in these %i files?" -msgstr "Да Ñе махнат ли промените в тези %i файла?" - -#: lib/index.tcl:438 -msgid "Any unstaged changes will be permanently lost by the revert." -msgstr "" -"Ð’Ñички промени, които не Ñа били вкарани в индекÑа, ще бъдат безвъзвратно " -"загубени." - -#: lib/index.tcl:441 -msgid "Do Nothing" -msgstr "Ðищо да не Ñе прави" - -#: lib/index.tcl:459 -msgid "Reverting selected files" -msgstr "Махане на промените в избраните файлове" - -#: lib/index.tcl:463 -#, tcl-format -msgid "Reverting %s" -msgstr "Махане на промените в „%s“" - -#: lib/line.tcl:17 -msgid "Goto Line:" -msgstr "Към ред:" - -#: lib/line.tcl:23 -msgid "Go" -msgstr "Придвижване" - #: lib/merge.tcl:13 msgid "" "Cannot merge while amending.\n" @@ -1927,7 +2739,7 @@ msgstr "" "ПоÑледно уÑтановеното ÑÑŠÑтоÑние не Ð¾Ñ‚Ð³Ð¾Ð²Ð°Ñ€Ñ Ð½Ð° това в хранилището.\n" "\n" "ÐÑкой друг Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð·Ð° Git е променил хранилището междувременно. СъÑтоÑнието " -"трÑбва да бъде проверено, преди да Ñе извърши Ñливане.\n" +"трÑбва да Ñе провери, преди да Ñе извърши Ñливане.\n" "\n" "Ðвтоматично ще започне нова проверка.\n" "\n" @@ -2005,7 +2817,7 @@ msgid "" "\n" "You must finish amending this commit.\n" msgstr "" -"ПоправÑнето не може да бъде преуÑтановено.\n" +"ПоправÑнето не може да Ñе преуÑтанови.\n" "\n" "ТрÑбва да завършите поправката на това подаване.\n" @@ -2019,7 +2831,7 @@ msgid "" msgstr "" "Да Ñе преуÑтанови ли Ñливането?\n" "\n" -"Ð’ такъв Ñлучай â—ВСИЧКИ◠неподадени промени ще бъдат безвъзвратно загубени.\n" +"Ð’ такъв Ñлучай â—ВСИЧКИ◠неподадени промени ще Ñе загубÑÑ‚ безвъзвратно.\n" "\n" "ÐаиÑтина ли да Ñе преуÑтанови Ñливането?" @@ -2033,775 +2845,22 @@ msgid "" msgstr "" "Да Ñе занулÑÑ‚ ли промените?\n" "\n" -"Ð’ такъв Ñлучай â—ВСИЧКИ◠неподадени промени ще бъдат безвъзвратно загубени.\n" +"Ð’ такъв Ñлучай â—ВСИЧКИ◠неподадени промени ще Ñе загубÑÑ‚ безвъзвратно.\n" "\n" "ÐаиÑтина ли да Ñе занулÑÑ‚ промените?" -#: lib/merge.tcl:245 +#: lib/merge.tcl:246 msgid "Aborting" msgstr "ПреуÑтановÑване" -#: lib/merge.tcl:245 +#: lib/merge.tcl:247 msgid "files reset" msgstr "файла ÑÑŠÑ Ð·Ð°Ð½ÑƒÐ»ÐµÐ½Ð¸ промени" -#: lib/merge.tcl:273 +#: lib/merge.tcl:277 msgid "Abort failed." msgstr "ÐеуÑпешно преуÑтановÑване." -#: lib/merge.tcl:275 +#: lib/merge.tcl:279 msgid "Abort completed. Ready." msgstr "УÑпешно преуÑтановÑване. ГотовноÑÑ‚ за Ñледващо дейÑтвие." - -#: lib/mergetool.tcl:8 -msgid "Force resolution to the base version?" -msgstr "Да Ñе използва базовата верÑиÑ" - -#: lib/mergetool.tcl:9 -msgid "Force resolution to this branch?" -msgstr "Да Ñе използва верÑиÑта от този клон" - -#: lib/mergetool.tcl:10 -msgid "Force resolution to the other branch?" -msgstr "Да Ñе използва верÑиÑта от Ð´Ñ€ÑƒÐ³Ð¸Ñ ÐºÐ»Ð¾Ð½" - -#: lib/mergetool.tcl:14 -#, tcl-format -msgid "" -"Note that the diff shows only conflicting changes.\n" -"\n" -"%s will be overwritten.\n" -"\n" -"This operation can be undone only by restarting the merge." -msgstr "" -"Разликата показва Ñамо разликите Ñ ÐºÐ¾Ð½Ñ„Ð»Ð¸ÐºÑ‚.\n" -"\n" -"Файлът „%s“ ще бъде презапиÑан.\n" -"\n" -"Тази Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð¼Ð¾Ð¶Ðµ да бъде отменена Ñамо чрез започване на Ñливането наново." - -#: lib/mergetool.tcl:45 -#, tcl-format -msgid "File %s seems to have unresolved conflicts, still stage?" -msgstr "" -"Изглежда, че вÑе още има некоригирани конфликти във файла „%s“. Да Ñе добави " -"ли файлът към индекÑа?" - -#: lib/mergetool.tcl:60 -#, tcl-format -msgid "Adding resolution for %s" -msgstr "ДобавÑне на ÐºÐ¾Ñ€ÐµÐºÑ†Ð¸Ñ Ð½Ð° конфликтите в „%s“" - -#: lib/mergetool.tcl:141 -msgid "Cannot resolve deletion or link conflicts using a tool" -msgstr "" -"Конфликтите при Ñимволни връзки или изтриване не могат да бъдат коригирани Ñ " -"външна програма." - -#: lib/mergetool.tcl:146 -msgid "Conflict file does not exist" -msgstr "Файлът, в който е конфликтът, не ÑъщеÑтвува" - -#: lib/mergetool.tcl:246 -#, tcl-format -msgid "Not a GUI merge tool: '%s'" -msgstr "Това не е графична програма за Ñливане: „%s“" - -#: lib/mergetool.tcl:275 -#, tcl-format -msgid "Unsupported merge tool '%s'" -msgstr "Ðеподдържана програма за Ñливане: „%s“" - -#: lib/mergetool.tcl:310 -msgid "Merge tool is already running, terminate it?" -msgstr "Програмата за Ñливане вече е Ñтартирана. Да бъде ли изключена?" - -#: lib/mergetool.tcl:330 -#, tcl-format -msgid "" -"Error retrieving versions:\n" -"%s" -msgstr "" -"Грешка при изтеглÑнето на верÑии:\n" -"%s" - -#: lib/mergetool.tcl:350 -#, tcl-format -msgid "" -"Could not start the merge tool:\n" -"\n" -"%s" -msgstr "" -"Програмата за Ñливане не може да бъде Ñтартирана:\n" -"\n" -"%s" - -#: lib/mergetool.tcl:354 -msgid "Running merge tool..." -msgstr "Стартиране на програмата за Ñливане…" - -#: lib/mergetool.tcl:382 lib/mergetool.tcl:390 -msgid "Merge tool failed." -msgstr "Грешка в програмата за Ñливане." - -#: lib/option.tcl:11 -#, tcl-format -msgid "Invalid global encoding '%s'" -msgstr "Ðеправилно глобално кодиране „%s“" - -#: lib/option.tcl:19 -#, tcl-format -msgid "Invalid repo encoding '%s'" -msgstr "Ðеправилно кодиране „%s“ на хранилището" - -#: lib/option.tcl:119 -msgid "Restore Defaults" -msgstr "Стандартни наÑтройки" - -#: lib/option.tcl:123 -msgid "Save" -msgstr "Запазване" - -#: lib/option.tcl:133 -#, tcl-format -msgid "%s Repository" -msgstr "Хранилище „%s“" - -#: lib/option.tcl:134 -msgid "Global (All Repositories)" -msgstr "Глобално (за вÑички хранилища)" - -#: lib/option.tcl:140 -msgid "User Name" -msgstr "ПотребителÑко име" - -#: lib/option.tcl:141 -msgid "Email Address" -msgstr "ÐÐ´Ñ€ÐµÑ Ð½Ð° е-поща" - -#: lib/option.tcl:143 -msgid "Summarize Merge Commits" -msgstr "Обобщаване на подаваниÑта при Ñливане" - -#: lib/option.tcl:144 -msgid "Merge Verbosity" -msgstr "ПодробноÑти при ÑливаниÑта" - -#: lib/option.tcl:145 -msgid "Show Diffstat After Merge" -msgstr "Извеждане на ÑтатиÑтика Ñлед ÑливаниÑта" - -#: lib/option.tcl:146 -msgid "Use Merge Tool" -msgstr "Използване на програма за Ñливане" - -#: lib/option.tcl:148 -msgid "Trust File Modification Timestamps" -msgstr "Доверие във времето на промÑна на файловете" - -#: lib/option.tcl:149 -msgid "Prune Tracking Branches During Fetch" -msgstr "ОкаÑтрÑне на ÑледÑщите клонове при доÑтавÑне" - -#: lib/option.tcl:150 -msgid "Match Tracking Branches" -msgstr "ÐапаÑване на ÑледÑщите клонове" - -#: lib/option.tcl:151 -msgid "Use Textconv For Diffs and Blames" -msgstr "Използване на „textconv“ за разликите и анотирането" - -#: lib/option.tcl:152 -msgid "Blame Copy Only On Changed Files" -msgstr "Ðнотиране на копието Ñамо по променените файлове" - -#: lib/option.tcl:153 -msgid "Maximum Length of Recent Repositories List" -msgstr "МакÑимален брой на ÑпиÑъка „Скоро ползвани“ хранилища" - -#: lib/option.tcl:154 -msgid "Minimum Letters To Blame Copy On" -msgstr "Минимален брой знаци за анотиране на копието" - -#: lib/option.tcl:155 -msgid "Blame History Context Radius (days)" -msgstr "ИÑторичеÑки обхват за анотиране в дни" - -#: lib/option.tcl:156 -msgid "Number of Diff Context Lines" -msgstr "Брой редове за контекÑта на разликите" - -#: lib/option.tcl:157 -msgid "Additional Diff Parameters" -msgstr "Ðргументи към командата за разликите" - -#: lib/option.tcl:158 -msgid "Commit Message Text Width" -msgstr "Широчина на текÑта на Ñъобщението при подаване" - -#: lib/option.tcl:159 -msgid "New Branch Name Template" -msgstr "Шаблон за името на новите клони" - -#: lib/option.tcl:160 -msgid "Default File Contents Encoding" -msgstr "Кодиране на файловете" - -#: lib/option.tcl:161 -msgid "Warn before committing to a detached head" -msgstr "Предупреждаване при подаване към неÑвързан указател" - -#: lib/option.tcl:162 -msgid "Staging of untracked files" -msgstr "ДобавÑне на неÑледените файлове към индекÑа" - -#: lib/option.tcl:163 -msgid "Show untracked files" -msgstr "Показване на неÑледените файлове" - -#: lib/option.tcl:164 -msgid "Tab spacing" -msgstr "Ширина на табулациÑта" - -#: lib/option.tcl:210 -msgid "Change" -msgstr "СмÑна" - -#: lib/option.tcl:254 -msgid "Spelling Dictionary:" -msgstr "ПравопиÑен речник:" - -#: lib/option.tcl:284 -msgid "Change Font" -msgstr "СмÑна на шрифта" - -#: lib/option.tcl:288 -#, tcl-format -msgid "Choose %s" -msgstr "Избор на „%s“" - -#: lib/option.tcl:294 -msgid "pt." -msgstr "тчк." - -#: lib/option.tcl:308 -msgid "Preferences" -msgstr "ÐаÑтройки" - -#: lib/option.tcl:345 -msgid "Failed to completely save options:" -msgstr "ÐеуÑпешно запазване на наÑтройките:" - -#: lib/remote.tcl:200 -msgid "Push to" -msgstr "ИзтлаÑкване към" - -#: lib/remote.tcl:218 -msgid "Remove Remote" -msgstr "Премахване на отдалечено хранилище" - -#: lib/remote.tcl:223 -msgid "Prune from" -msgstr "ОкаÑтрÑне от" - -#: lib/remote.tcl:228 -msgid "Fetch from" -msgstr "ДоÑтавÑне от" - -#: lib/remote.tcl:253 lib/remote.tcl:258 -msgid "All" -msgstr "Ð’Ñички" - -#: lib/remote_add.tcl:20 -#, tcl-format -msgid "%s (%s): Add Remote" -msgstr "%s (%s): ДобавÑне на отдалечено хранилище" - -#: lib/remote_add.tcl:25 -msgid "Add New Remote" -msgstr "ДобавÑне на отдалечено хранилище" - -#: lib/remote_add.tcl:30 lib/tools_dlg.tcl:37 -msgid "Add" -msgstr "ДобавÑне" - -#: lib/remote_add.tcl:39 -msgid "Remote Details" -msgstr "Данни за отдалеченото хранилище" - -#: lib/remote_add.tcl:50 -msgid "Location:" -msgstr "МеÑтоположение:" - -#: lib/remote_add.tcl:60 -msgid "Further Action" -msgstr "Следващо дейÑтвие" - -#: lib/remote_add.tcl:63 -msgid "Fetch Immediately" -msgstr "Ðезабавно доÑтавÑне" - -#: lib/remote_add.tcl:69 -msgid "Initialize Remote Repository and Push" -msgstr "Инициализиране на отдалеченото хранилище и изтлаÑкване на промените" - -#: lib/remote_add.tcl:75 -msgid "Do Nothing Else Now" -msgstr "Да не Ñе прави нищо" - -#: lib/remote_add.tcl:100 -msgid "Please supply a remote name." -msgstr "Задайте име за отдалеченото хранилище." - -#: lib/remote_add.tcl:113 -#, tcl-format -msgid "'%s' is not an acceptable remote name." -msgstr "Отдалечено хранилище не може да Ñе казва „%s“." - -#: lib/remote_add.tcl:124 -#, tcl-format -msgid "Failed to add remote '%s' of location '%s'." -msgstr "ÐеуÑпешно добавÑне на отдалеченото хранилище „%s“ от Ð°Ð´Ñ€ÐµÑ â€ž%s“." - -#: lib/remote_add.tcl:132 lib/transport.tcl:6 -#, tcl-format -msgid "fetch %s" -msgstr "доÑтавÑне на „%s“" - -#: lib/remote_add.tcl:133 -#, tcl-format -msgid "Fetching the %s" -msgstr "ДоÑтавÑне на „%s“" - -#: lib/remote_add.tcl:156 -#, tcl-format -msgid "Do not know how to initialize repository at location '%s'." -msgstr "Хранилището Ñ Ð¼ÐµÑтоположение „%s“ не може да бъде инициализирано." - -#: lib/remote_add.tcl:162 lib/transport.tcl:54 lib/transport.tcl:92 -#: lib/transport.tcl:110 -#, tcl-format -msgid "push %s" -msgstr "изтлаÑкване на „%s“" - -#: lib/remote_add.tcl:163 -#, tcl-format -msgid "Setting up the %s (at %s)" -msgstr "ДобавÑне на хранилище „%s“ (Ñ Ð°Ð´Ñ€ÐµÑ â€ž%s“)" - -#: lib/remote_branch_delete.tcl:29 -#, tcl-format -msgid "%s (%s): Delete Branch Remotely" -msgstr "%s (%s): Изтриване на Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ ÐºÐ»Ð¾Ð½" - -#: lib/remote_branch_delete.tcl:34 -msgid "Delete Branch Remotely" -msgstr "Изтриване на Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¸Ñ ÐºÐ»Ð¾Ð½" - -#: lib/remote_branch_delete.tcl:48 -msgid "From Repository" -msgstr "От хранилище" - -#: lib/remote_branch_delete.tcl:51 lib/transport.tcl:165 -msgid "Remote:" -msgstr "Отдалечено хранилище:" - -#: lib/remote_branch_delete.tcl:72 lib/transport.tcl:187 -msgid "Arbitrary Location:" -msgstr "Произволно меÑтоположение:" - -#: lib/remote_branch_delete.tcl:88 -msgid "Branches" -msgstr "Клони" - -#: lib/remote_branch_delete.tcl:110 -msgid "Delete Only If" -msgstr "Изтриване, Ñамо ако" - -#: lib/remote_branch_delete.tcl:112 -msgid "Merged Into:" -msgstr "СлÑÑ‚ в:" - -#: lib/remote_branch_delete.tcl:153 -msgid "A branch is required for 'Merged Into'." -msgstr "За данните „СлÑÑ‚ в“ е необходимо да зададете клон." - -#: lib/remote_branch_delete.tcl:185 -#, tcl-format -msgid "" -"The following branches are not completely merged into %s:\n" -"\n" -" - %s" -msgstr "" -"Следните клони не Ñа Ñлети напълно в „%s“:\n" -"\n" -" â— %s" - -#: lib/remote_branch_delete.tcl:190 -#, tcl-format -msgid "" -"One or more of the merge tests failed because you have not fetched the " -"necessary commits. Try fetching from %s first." -msgstr "" -"Поне една от пробите за Ñливане е неуÑпешна, защото не Ñте доÑтавили вÑички " -"необходими подаваниÑ. Пробвайте първо да доÑтавите подаваниÑта от „%s“." - -#: lib/remote_branch_delete.tcl:208 -msgid "Please select one or more branches to delete." -msgstr "Изберете поне един клон за изтриване." - -#: lib/remote_branch_delete.tcl:227 -#, tcl-format -msgid "Deleting branches from %s" -msgstr "Изтриване на клони от „%s“" - -#: lib/remote_branch_delete.tcl:300 -msgid "No repository selected." -msgstr "Ðе е избрано хранилище." - -#: lib/remote_branch_delete.tcl:305 -#, tcl-format -msgid "Scanning %s..." -msgstr "ПретърÑване на „%s“…" - -#: lib/search.tcl:48 -msgid "Find:" -msgstr "ТърÑене:" - -#: lib/search.tcl:50 -msgid "Next" -msgstr "Следваща поÑва" - -#: lib/search.tcl:51 -msgid "Prev" -msgstr "Предишна поÑва" - -#: lib/search.tcl:52 -msgid "RegExp" -msgstr "РегИзр" - -#: lib/search.tcl:54 -msgid "Case" -msgstr "Главни/малки" - -#: lib/shortcut.tcl:8 lib/shortcut.tcl:43 lib/shortcut.tcl:75 -#, tcl-format -msgid "%s (%s): Create Desktop Icon" -msgstr "%s (%s): ДобавÑне на икона на Ñ€Ð°Ð±Ð¾Ñ‚Ð½Ð¸Ñ Ð¿Ð»Ð¾Ñ‚" - -#: lib/shortcut.tcl:24 lib/shortcut.tcl:65 -msgid "Cannot write shortcut:" -msgstr "Клавишната ÐºÐ¾Ð¼Ð±Ð¸Ð½Ð°Ñ†Ð¸Ñ Ð½Ðµ може да бъде запазена:" - -#: lib/shortcut.tcl:140 -msgid "Cannot write icon:" -msgstr "Иконата не може да бъде запазена:" - -#: lib/spellcheck.tcl:57 -msgid "Unsupported spell checker" -msgstr "Тази програма за проверка на правопиÑа не Ñе поддържа" - -#: lib/spellcheck.tcl:65 -msgid "Spell checking is unavailable" -msgstr "ЛипÑва програма за проверка на правопиÑа" - -#: lib/spellcheck.tcl:68 -msgid "Invalid spell checking configuration" -msgstr "Ðеправилни наÑтройки на проверката на правопиÑа" - -#: lib/spellcheck.tcl:70 -#, tcl-format -msgid "Reverting dictionary to %s." -msgstr "Ползване на речник за език „%s“." - -#: lib/spellcheck.tcl:73 -msgid "Spell checker silently failed on startup" -msgstr "Програмата за Ð¿Ñ€Ð°Ð²Ð¾Ð¿Ð¸Ñ Ð´Ð°Ð¶Ðµ не Ñтартира уÑпешно." - -#: lib/spellcheck.tcl:80 -msgid "Unrecognized spell checker" -msgstr "Ðепозната програма за проверка на правопиÑа" - -#: lib/spellcheck.tcl:186 -msgid "No Suggestions" -msgstr "ÐÑма предложениÑ" - -#: lib/spellcheck.tcl:388 -msgid "Unexpected EOF from spell checker" -msgstr "Ðеочакван край на файл от програмата за проверка на правопиÑа" - -#: lib/spellcheck.tcl:392 -msgid "Spell Checker Failed" -msgstr "Грешка в програмата за проверка на правопиÑа" - -#: lib/sshkey.tcl:31 -msgid "No keys found." -msgstr "Ðе Ñа открити ключове." - -#: lib/sshkey.tcl:34 -#, tcl-format -msgid "Found a public key in: %s" -msgstr "Открит е публичен ключ в „%s“" - -#: lib/sshkey.tcl:40 -msgid "Generate Key" -msgstr "Генериране на ключ" - -#: lib/sshkey.tcl:58 -msgid "Copy To Clipboard" -msgstr "Копиране към ÑиÑÑ‚ÐµÐ¼Ð½Ð¸Ñ Ð±ÑƒÑ„ÐµÑ€" - -#: lib/sshkey.tcl:72 -msgid "Your OpenSSH Public Key" -msgstr "ПубличниÑÑ‚ ви ключ за OpenSSH" - -#: lib/sshkey.tcl:80 -msgid "Generating..." -msgstr "Генериране…" - -#: lib/sshkey.tcl:86 -#, tcl-format -msgid "" -"Could not start ssh-keygen:\n" -"\n" -"%s" -msgstr "" -"Програмата „ssh-keygen“ не може да бъде Ñтартирана:\n" -"\n" -"%s" - -#: lib/sshkey.tcl:113 -msgid "Generation failed." -msgstr "ÐеуÑпешно генериране." - -#: lib/sshkey.tcl:120 -msgid "Generation succeeded, but no keys found." -msgstr "Генерирането завърши уÑпешно, а не Ñа намерени ключове." - -#: lib/sshkey.tcl:123 -#, tcl-format -msgid "Your key is in: %s" -msgstr "Ключът ви е в „%s“" - -#: lib/status_bar.tcl:87 -#, tcl-format -msgid "%s ... %*i of %*i %s (%3i%%)" -msgstr "%s… %*i от общо %*i %s (%3i%%)" - -#: lib/tools.tcl:76 -#, tcl-format -msgid "Running %s requires a selected file." -msgstr "За изпълнението на „%s“ трÑбва да изберете файл." - -#: lib/tools.tcl:92 -#, tcl-format -msgid "Are you sure you want to run %1$s on file \"%2$s\"?" -msgstr "Сигурни ли Ñте, че иÑкате да изпълните „%1$s“ върху файла „%2$s“?" - -#: lib/tools.tcl:96 -#, tcl-format -msgid "Are you sure you want to run %s?" -msgstr "Сигурни ли Ñте, че иÑкате да изпълните „%s“?" - -#: lib/tools.tcl:118 -#, tcl-format -msgid "Tool: %s" -msgstr "Команда: %s" - -#: lib/tools.tcl:119 -#, tcl-format -msgid "Running: %s" -msgstr "Изпълнение: %s" - -#: lib/tools.tcl:158 -#, tcl-format -msgid "Tool completed successfully: %s" -msgstr "Командата завърши уÑпешно: %s" - -#: lib/tools.tcl:160 -#, tcl-format -msgid "Tool failed: %s" -msgstr "Командата върна грешка: %s" - -#: lib/tools_dlg.tcl:22 -#, tcl-format -msgid "%s (%s): Add Tool" -msgstr "%s (%s): ДобавÑне на команда" - -#: lib/tools_dlg.tcl:28 -msgid "Add New Tool Command" -msgstr "ДобавÑне на команда" - -#: lib/tools_dlg.tcl:34 -msgid "Add globally" -msgstr "Глобално добавÑне" - -#: lib/tools_dlg.tcl:46 -msgid "Tool Details" -msgstr "ПодробноÑти за командата" - -#: lib/tools_dlg.tcl:49 -msgid "Use '/' separators to create a submenu tree:" -msgstr "За Ñъздаване на подменюта използвайте знака „/“ за разделител:" - -#: lib/tools_dlg.tcl:60 -msgid "Command:" -msgstr "Команда:" - -#: lib/tools_dlg.tcl:71 -msgid "Show a dialog before running" -msgstr "Преди изпълнение да Ñе извежда диалогов прозорец" - -#: lib/tools_dlg.tcl:77 -msgid "Ask the user to select a revision (sets $REVISION)" -msgstr "ПотребителÑÑ‚ да укаже верÑÐ¸Ñ (задаване на променливата $REVISION)" - -#: lib/tools_dlg.tcl:82 -msgid "Ask the user for additional arguments (sets $ARGS)" -msgstr "" -"ПотребителÑÑ‚ да укаже допълнителни аргументи (задаване на променливата $ARGS)" - -#: lib/tools_dlg.tcl:89 -msgid "Don't show the command output window" -msgstr "Без показване на прозорец Ñ Ð¸Ð·Ñ…Ð¾Ð´Ð° от командата" - -#: lib/tools_dlg.tcl:94 -msgid "Run only if a diff is selected ($FILENAME not empty)" -msgstr "" -"Стартиране Ñамо Ñлед избор на разлика (променливата $FILENAME не е празна)" - -#: lib/tools_dlg.tcl:118 -msgid "Please supply a name for the tool." -msgstr "Задайте име за командата." - -#: lib/tools_dlg.tcl:126 -#, tcl-format -msgid "Tool '%s' already exists." -msgstr "Командата „%s“ вече ÑъщеÑтвува." - -#: lib/tools_dlg.tcl:148 -#, tcl-format -msgid "" -"Could not add tool:\n" -"%s" -msgstr "" -"Командата не може да бъде добавена:\n" -"%s" - -#: lib/tools_dlg.tcl:187 -#, tcl-format -msgid "%s (%s): Remove Tool" -msgstr "%s (%s): Премахване на команда" - -#: lib/tools_dlg.tcl:193 -msgid "Remove Tool Commands" -msgstr "Премахване на команди" - -#: lib/tools_dlg.tcl:198 -msgid "Remove" -msgstr "Премахване" - -#: lib/tools_dlg.tcl:231 -msgid "(Blue denotes repository-local tools)" -msgstr "(командите към локалното хранилище Ñа обозначени в Ñиньо)" - -#: lib/tools_dlg.tcl:283 -#, tcl-format -msgid "%s (%s):" -msgstr "%s (%s):" - -#: lib/tools_dlg.tcl:292 -#, tcl-format -msgid "Run Command: %s" -msgstr "Изпълнение на командата „%s“" - -#: lib/tools_dlg.tcl:306 -msgid "Arguments" -msgstr "Ðргументи" - -#: lib/tools_dlg.tcl:341 -msgid "OK" -msgstr "Добре" - -#: lib/transport.tcl:7 -#, tcl-format -msgid "Fetching new changes from %s" -msgstr "ДоÑтавÑне на промените от „%s“" - -#: lib/transport.tcl:18 -#, tcl-format -msgid "remote prune %s" -msgstr "окаÑтрÑне на ÑледÑщите клони към „%s“" - -#: lib/transport.tcl:19 -#, tcl-format -msgid "Pruning tracking branches deleted from %s" -msgstr "ОкаÑтрÑне на ÑледÑщите клони на изтритите клони от „%s“" - -#: lib/transport.tcl:25 -msgid "fetch all remotes" -msgstr "доÑтавÑне от вÑички отдалечени" - -#: lib/transport.tcl:26 -msgid "Fetching new changes from all remotes" -msgstr "ДоÑтавÑне на промените от вÑички отдалечени хранилища" - -#: lib/transport.tcl:40 -msgid "remote prune all remotes" -msgstr "окаÑтрÑне на ÑледÑщите изтрити" - -#: lib/transport.tcl:41 -msgid "Pruning tracking branches deleted from all remotes" -msgstr "" -"ОкаÑтрÑне на ÑледÑщите клони на изтритите клони от вÑички отдалечени " -"хранилища" - -#: lib/transport.tcl:55 -#, tcl-format -msgid "Pushing changes to %s" -msgstr "ИзтлаÑкване на промените към „%s“" - -#: lib/transport.tcl:93 -#, tcl-format -msgid "Mirroring to %s" -msgstr "ИзтлаÑкване на вÑичко към „%s“" - -#: lib/transport.tcl:111 -#, tcl-format -msgid "Pushing %s %s to %s" -msgstr "ИзтлаÑкване на %s „%s“ към „%s“" - -#: lib/transport.tcl:132 -msgid "Push Branches" -msgstr "Клони за изтлаÑкване" - -#: lib/transport.tcl:147 -msgid "Source Branches" -msgstr "Клони-източници" - -#: lib/transport.tcl:162 -msgid "Destination Repository" -msgstr "Целево хранилище" - -#: lib/transport.tcl:205 -msgid "Transfer Options" -msgstr "ÐаÑтройки при пренаÑÑнето" - -#: lib/transport.tcl:207 -msgid "Force overwrite existing branch (may discard changes)" -msgstr "" -"Изрично презапиÑване на ÑъщеÑтвуващ клон (нÑкои промени може да бъдат " -"загубени)" - -#: lib/transport.tcl:211 -msgid "Use thin pack (for slow network connections)" -msgstr "МакÑимална компреÑÐ¸Ñ (за бавни мрежови връзки)" - -#: lib/transport.tcl:215 -msgid "Include tags" -msgstr "Включване на етикетите" - -#: lib/transport.tcl:229 -#, tcl-format -msgid "%s (%s): Push" -msgstr "%s (%s): ИзтлаÑкване" @@ -55,7 +55,7 @@ static void list_builtins(struct string_list *list, unsigned int exclude_option) static void exclude_helpers_from_list(struct string_list *list) { - int i = 0; + size_t i = 0; while (i < list->nr) { if (strstr(list->items[i].string, "--")) @@ -75,7 +75,6 @@ static int match_token(const char *spec, int len, const char *token) static int list_cmds(const char *spec) { struct string_list list = STRING_LIST_INIT_DUP; - int i; int nongit; /* @@ -113,7 +112,7 @@ static int list_cmds(const char *spec) if (*spec == ',') spec++; } - for (i = 0; i < list.nr; i++) + for (size_t i = 0; i < list.nr; i++) puts(list.items[i].string); string_list_clear(&list, 0); return 0; @@ -322,10 +321,9 @@ static int handle_options(const char ***argv, int *argc, int *envchanged) trace2_cmd_name("_query_"); if (!strcmp(cmd, "parseopt")) { struct string_list list = STRING_LIST_INIT_DUP; - int i; list_builtins(&list, NO_PARSEOPT); - for (i = 0; i < list.nr; i++) + for (size_t i = 0; i < list.nr; i++) printf("%s ", list.items[i].string); string_list_clear(&list, 0); exit(0); @@ -651,8 +649,7 @@ static struct cmd_struct commands[] = { static struct cmd_struct *get_builtin(const char *s) { - int i; - for (i = 0; i < ARRAY_SIZE(commands); i++) { + for (size_t i = 0; i < ARRAY_SIZE(commands); i++) { struct cmd_struct *p = commands + i; if (!strcmp(s, p->cmd)) return p; @@ -667,8 +664,7 @@ int is_builtin(const char *s) static void list_builtins(struct string_list *out, unsigned int exclude_option) { - int i; - for (i = 0; i < ARRAY_SIZE(commands); i++) { + for (size_t i = 0; i < ARRAY_SIZE(commands); i++) { if (exclude_option && (commands[i].option & exclude_option)) continue; @@ -679,7 +675,6 @@ static void list_builtins(struct string_list *out, unsigned int exclude_option) void load_builtin_commands(const char *prefix, struct cmdnames *cmds) { const char *name; - int i; /* * Callers can ask for a subset of the commands based on a certain @@ -690,7 +685,7 @@ void load_builtin_commands(const char *prefix, struct cmdnames *cmds) if (!skip_prefix(prefix, "git-", &prefix)) BUG("prefix '%s' must start with 'git-'", prefix); - for (i = 0; i < ARRAY_SIZE(commands); i++) + for (size_t i = 0; i < ARRAY_SIZE(commands); i++) if (skip_prefix(commands[i].cmd, prefix, &name)) add_cmdname(cmds, name, strlen(name)); } @@ -812,7 +807,7 @@ static int run_argv(struct strvec *args) handle_builtin(args); else if (get_builtin(args->v[0])) { struct child_process cmd = CHILD_PROCESS_INIT; - int i; + int err; /* * The current process is committed to launching a @@ -826,7 +821,7 @@ static int run_argv(struct strvec *args) commit_pager_choice(); strvec_push(&cmd.args, "git"); - for (i = 0; i < args->nr; i++) + for (size_t i = 0; i < args->nr; i++) strvec_push(&cmd.args, args->v[i]); trace_argv_printf(cmd.args.v, "trace: exec:"); @@ -839,9 +834,9 @@ static int run_argv(struct strvec *args) cmd.clean_on_exit = 1; cmd.wait_after_clean = 1; cmd.trace2_child_class = "git_alias"; - i = run_command(&cmd); - if (i >= 0 || errno != ENOENT) - exit(i); + err = run_command(&cmd); + if (err >= 0 || errno != ENOENT) + exit(err); die("could not execute builtin %s", args->v[0]); } @@ -850,9 +845,8 @@ static int run_argv(struct strvec *args) seen = unsorted_string_list_lookup(&cmd_list, args->v[0]); if (seen) { - int i; struct strbuf sb = STRBUF_INIT; - for (i = 0; i < cmd_list.nr; i++) { + for (size_t i = 0; i < cmd_list.nr; i++) { struct string_list_item *item = &cmd_list.items[i]; strbuf_addf(&sb, "\n %s", item->string); @@ -946,7 +940,7 @@ int cmd_main(int argc, const char **argv) */ setup_path(); - for (size_t i = 0; i < argc; i++) + for (int i = 0; i < argc; i++) strvec_push(&args, argv[i]); while (1) { diff --git a/gitk-git/gitk b/gitk-git/gitk index 7a087f123d..47a7c1d29c 100755 --- a/gitk-git/gitk +++ b/gitk-git/gitk @@ -1969,6 +1969,10 @@ proc confirm_popup {msg {owner .}} { return $confirm_ok } +proc haveselectionclipboard {} { + return [expr {[tk windowingsystem] eq "x11"}] +} + proc setoptions {} { global use_ttk @@ -2089,7 +2093,7 @@ proc makewindow {} { global diffcontextstring diffcontext global ignorespace global maincursor textcursor curtextcursor - global rowctxmenu fakerowmenu mergemax wrapcomment + global rowctxmenu fakerowmenu mergemax wrapcomment wrapdefault global highlight_files gdttype global searchstring sstring global bgcolor fgcolor bglist fglist diffcolors diffbgcolors selectbgcolor @@ -2223,7 +2227,7 @@ proc makewindow {} { set sha1entry .tf.bar.sha1 set entries $sha1entry set sha1but .tf.bar.sha1label - button $sha1but -text "[mc "SHA1 ID:"] " -state disabled -relief flat \ + button $sha1but -text "[mc "Commit ID:"] " -state disabled -relief flat \ -command gotocommit -width 8 $sha1but conf -disabledforeground [$sha1but cget -foreground] pack .tf.bar.sha1label -side left @@ -2431,7 +2435,7 @@ proc makewindow {} { set ctext .bleft.bottom.ctext text $ctext -background $bgcolor -foreground $fgcolor \ -state disabled -undo 0 -font textfont \ - -yscrollcommand scrolltext -wrap none \ + -yscrollcommand scrolltext -wrap $wrapdefault \ -xscrollcommand ".bleft.bottom.sbhorizontal set" if {$have_tk85} { $ctext conf -tabstyle wordprocessor @@ -7344,7 +7348,7 @@ proc selectline {l isnew {desired_loc {}} {switch_to_patch 0}} { global mergemax numcommits pending_select global cmitmode showneartags allcommits global targetrow targetid lastscrollrows - global autoselect autosellen jump_to_here + global autocopy autoselect autosellen jump_to_here global vinlinediff unset -nocomplain pending_select @@ -7410,9 +7414,13 @@ proc selectline {l isnew {desired_loc {}} {switch_to_patch 0}} { $sha1entry delete 0 end $sha1entry insert 0 $id - if {$autoselect} { + if {$autoselect && [haveselectionclipboard]} { $sha1entry selection range 0 $autosellen } + if {$autocopy} { + clipboard clear + clipboard append [string range $id 0 [expr $autosellen - 1]] + } rhighlight_sel $id $ctext conf -state normal @@ -8756,7 +8764,7 @@ proc sha1change {n1 n2 op} { if {$state == "normal"} { $sha1but conf -state normal -relief raised -text "[mc "Goto:"] " } else { - $sha1but conf -state disabled -relief flat -text "[mc "SHA1 ID:"] " + $sha1but conf -state disabled -relief flat -text "[mc "Commit ID:"] " } } @@ -8775,7 +8783,7 @@ proc gotocommit {} { set matches [longid $id] if {$matches ne {}} { if {[llength $matches] > 1} { - error_popup [mc "Short SHA1 id %s is ambiguous" $id] + error_popup [mc "Short commit ID %s is ambiguous" $id] return } set id [lindex $matches 0] @@ -8792,7 +8800,7 @@ proc gotocommit {} { return } if {[regexp {^[0-9a-fA-F]{4,}$} $sha1string]} { - set msg [mc "SHA1 id %s is not known" $sha1string] + set msg [mc "Commit ID %s is not known" $sha1string] } else { set msg [mc "Revision %s is not in the current view" $sha1string] } @@ -11576,12 +11584,13 @@ proc create_prefs_page {w} { proc prefspage_general {notebook} { global NS maxwidth maxgraphpct showneartags showlocalchanges - global tabstop limitdiffs autoselect autosellen extdifftool perfile_attrs + global tabstop wrapcomment wrapdefault limitdiffs + global autocopy autoselect autosellen extdifftool perfile_attrs global hideremotes want_ttk have_ttk maxrefs web_browser set page [create_prefs_page $notebook.general] - ${NS}::label $page.ldisp -text [mc "Commit list display options"] + ${NS}::label $page.ldisp -text [mc "Commit list display options"] -font mainfontbold grid $page.ldisp - -sticky w -pady 10 ${NS}::label $page.spacer -text " " ${NS}::label $page.maxwidthl -text [mc "Maximum graph width (lines)"] @@ -11594,19 +11603,38 @@ proc prefspage_general {notebook} { ${NS}::checkbutton $page.showlocal -text [mc "Show local changes"] \ -variable showlocalchanges grid x $page.showlocal -sticky w - ${NS}::checkbutton $page.autoselect -text [mc "Auto-select SHA1 (length)"] \ - -variable autoselect - spinbox $page.autosellen -from 1 -to 40 -width 4 -textvariable autosellen - grid x $page.autoselect $page.autosellen -sticky w ${NS}::checkbutton $page.hideremotes -text [mc "Hide remote refs"] \ -variable hideremotes grid x $page.hideremotes -sticky w - ${NS}::label $page.ddisp -text [mc "Diff display options"] + ${NS}::checkbutton $page.autocopy -text [mc "Copy commit ID to clipboard"] \ + -variable autocopy + grid x $page.autocopy -sticky w + if {[haveselectionclipboard]} { + ${NS}::checkbutton $page.autoselect -text [mc "Copy commit ID to X11 selection"] \ + -variable autoselect + grid x $page.autoselect -sticky w + } + spinbox $page.autosellen -from 1 -to 40 -width 4 -textvariable autosellen + ${NS}::label $page.autosellenl -text [mc "Length of commit ID to copy"] + grid x $page.autosellenl $page.autosellen -sticky w + + ${NS}::label $page.ddisp -text [mc "Diff display options"] -font mainfontbold grid $page.ddisp - -sticky w -pady 10 ${NS}::label $page.tabstopl -text [mc "Tab spacing"] spinbox $page.tabstop -from 1 -to 20 -width 4 -textvariable tabstop grid x $page.tabstopl $page.tabstop -sticky w + + ${NS}::label $page.wrapcommentl -text [mc "Wrap comment text"] + ${NS}::combobox $page.wrapcomment -values {none char word} -state readonly \ + -textvariable wrapcomment + grid x $page.wrapcommentl $page.wrapcomment -sticky w + + ${NS}::label $page.wrapdefaultl -text [mc "Wrap other text"] + ${NS}::combobox $page.wrapdefault -values {none char word} -state readonly \ + -textvariable wrapdefault + grid x $page.wrapdefaultl $page.wrapdefault -sticky w + ${NS}::checkbutton $page.ntag -text [mc "Display nearby tags/heads"] \ -variable showneartags grid x $page.ntag -sticky w @@ -11635,7 +11663,7 @@ proc prefspage_general {notebook} { pack configure $page.webbrowserf.l -padx 10 grid x $page.webbrowserf $page.webbrowser -sticky ew - ${NS}::label $page.lgen -text [mc "General options"] + ${NS}::label $page.lgen -text [mc "General options"] -font mainfontbold grid $page.lgen - -sticky w -pady 10 ${NS}::checkbutton $page.want_ttk -variable want_ttk \ -text [mc "Use themed widgets"] @@ -11654,7 +11682,7 @@ proc prefspage_colors {notebook} { set page [create_prefs_page $notebook.colors] - ${NS}::label $page.cdisp -text [mc "Colors: press to choose"] + ${NS}::label $page.cdisp -text [mc "Colors: press to choose"] -font mainfontbold grid $page.cdisp - -sticky w -pady 10 label $page.ui -padx 40 -relief sunk -background $uicolor ${NS}::button $page.uibut -text [mc "Interface"] \ @@ -11712,7 +11740,7 @@ proc prefspage_colors {notebook} { proc prefspage_fonts {notebook} { global NS set page [create_prefs_page $notebook.fonts] - ${NS}::label $page.cfont -text [mc "Fonts: press to choose"] + ${NS}::label $page.cfont -text [mc "Fonts: press to choose"] -font mainfontbold grid $page.cfont - -sticky w -pady 10 mkfontdisp mainfont $page [mc "Main font"] mkfontdisp textfont $page [mc "Diff display font"] @@ -11725,7 +11753,7 @@ proc doprefs {} { global oldprefs prefstop showneartags showlocalchanges global uicolor bgcolor fgcolor ctext diffcolors selectbgcolor markbgcolor global tabstop limitdiffs autoselect autosellen extdifftool perfile_attrs - global hideremotes want_ttk have_ttk + global hideremotes want_ttk have_ttk wrapcomment wrapdefault set top .gitkprefs set prefstop $top @@ -11734,7 +11762,7 @@ proc doprefs {} { return } foreach v {maxwidth maxgraphpct showneartags showlocalchanges \ - limitdiffs tabstop perfile_attrs hideremotes want_ttk} { + limitdiffs tabstop perfile_attrs hideremotes want_ttk wrapcomment wrapdefault} { set oldprefs($v) [set $v] } ttk_toplevel $top @@ -11860,7 +11888,7 @@ proc prefscan {} { global oldprefs prefstop foreach v {maxwidth maxgraphpct showneartags showlocalchanges \ - limitdiffs tabstop perfile_attrs hideremotes want_ttk} { + limitdiffs tabstop perfile_attrs hideremotes want_ttk wrapcomment wrapdefault} { global $v set $v $oldprefs($v) } @@ -11874,7 +11902,8 @@ proc prefsok {} { global oldprefs prefstop showneartags showlocalchanges global fontpref mainfont textfont uifont global limitdiffs treediffs perfile_attrs - global hideremotes + global hideremotes wrapcomment wrapdefault + global ctext catch {destroy $prefstop} unset prefstop @@ -11923,6 +11952,12 @@ proc prefsok {} { if {$hideremotes != $oldprefs(hideremotes)} { rereadrefs } + if {$wrapcomment != $oldprefs(wrapcomment)} { + $ctext tag conf comment -wrap $wrapcomment + } + if {$wrapdefault != $oldprefs(wrapdefault)} { + $ctext configure -wrap $wrapdefault + } } proc formatdate {d} { @@ -12392,6 +12427,7 @@ set downarrowlen 5 set mingaplen 100 set cmitmode "patch" set wrapcomment "none" +set wrapdefault "none" set showneartags 1 set hideremotes 0 set maxrefs 20 @@ -12400,6 +12436,7 @@ set maxlinelen 200 set showlocalchanges 1 set limitdiffs 1 set datetimeformat "%Y-%m-%d %H:%M:%S" +set autocopy 0 set autoselect 1 set autosellen 40 set perfile_attrs 0 @@ -12497,7 +12534,8 @@ config_check_tmp_exists 50 set config_variables { mainfont textfont uifont tabstop findmergefiles maxgraphpct maxwidth - cmitmode wrapcomment autoselect autosellen showneartags maxrefs visiblerefs + cmitmode wrapcomment wrapdefault autocopy autoselect autosellen + showneartags maxrefs visiblerefs hideremotes showlocalchanges datetimeformat limitdiffs uicolor want_ttk bgcolor fgcolor uifgcolor uifgdisabledcolor colors diffcolors mergecolors markbgcolor diffcontext selectbgcolor foundbgcolor currentsearchhitbgcolor @@ -12687,7 +12725,7 @@ catch { wm iconphoto . -default gitlogo gitlogo32 } # wait for the window to become visible -tkwait visibility . +if {![winfo viewable .]} {tkwait visibility .} set_window_title update readrefs diff --git a/gitk-git/po/bg.po b/gitk-git/po/bg.po index 87ab1fac24..773a049831 100644 --- a/gitk-git/po/bg.po +++ b/gitk-git/po/bg.po @@ -1,15 +1,15 @@ # Bulgarian translation of gitk po-file. -# Copyright (C) 2014, 2015, 2019 Alexander Shopov <ash@kambanaria.org>. +# Copyright (C) 2014, 2015, 2019, 2020, 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, 2019. +# Alexander Shopov <ash@kambanaria.org>, 2014, 2015, 2019, 2020, 2024. # # msgid "" msgstr "" "Project-Id-Version: gitk master\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-03-04 11:27+0100\n" -"PO-Revision-Date: 2019-03-04 11:39+0100\n" +"POT-Creation-Date: 2024-12-24 11:01+0100\n" +"PO-Revision-Date: 2024-12-24 11:05+0100\n" "Last-Translator: Alexander Shopov <ash@kambanaria.org>\n" "Language-Team: Bulgarian <dict@fsa-bg.org>\n" "Language: bg\n" @@ -18,32 +18,32 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#: gitk:140 +#: gitk:139 msgid "Couldn't get list of unmerged files:" -msgstr "СпиÑъкът Ñ Ð½ÐµÑлети файлове не може да бъде получен:" +msgstr "СпиÑъкът Ñ Ð½ÐµÑлети файлове не може да Ñе получи:" -#: gitk:212 gitk:2403 +#: gitk:211 gitk:2430 msgid "Color words" msgstr "ОцветÑване на думите" -#: gitk:217 gitk:2403 gitk:8249 gitk:8282 +#: gitk:216 gitk:2430 gitk:8335 gitk:8368 msgid "Markup words" msgstr "ОтбелÑзване на думите" -#: gitk:324 +#: gitk:323 msgid "Error parsing revisions:" msgstr "Грешка при анализ на верÑиите:" -#: gitk:380 +#: gitk:389 msgid "Error executing --argscmd command:" msgstr "Грешка при изпълнение на командата Ñ â€ž--argscmd“." -#: gitk:393 +#: gitk:402 msgid "No files selected: --merge specified but no files are unmerged." msgstr "" "Ðе Ñа избрани файлове — указана е опциÑта „--merge“, но нÑма неÑлети файлове." -#: gitk:396 +#: gitk:405 msgid "" "No files selected: --merge specified but no unmerged files are within file " "limit." @@ -51,326 +51,326 @@ msgstr "" "Ðе Ñа избрани файлове — указана е опциÑта „--merge“, но нÑма неÑлети файлове " "в ограничениÑта." -#: gitk:418 gitk:566 +#: gitk:430 gitk:585 msgid "Error executing git log:" msgstr "Грешка при изпълнение на „git log“:" -#: gitk:436 gitk:582 +#: gitk:448 gitk:601 msgid "Reading" msgstr "Прочитане" -#: gitk:496 gitk:4549 +#: gitk:508 gitk:4596 msgid "Reading commits..." msgstr "Прочитане на подаваниÑта…" -#: gitk:499 gitk:1641 gitk:4552 +#: gitk:511 gitk:1660 gitk:4599 msgid "No commits selected" msgstr "Ðе Ñа избрани подаваниÑ" -#: gitk:1449 gitk:4069 gitk:12583 +#: gitk:1468 gitk:4116 gitk:12738 msgid "Command line" msgstr "Команден ред" -#: gitk:1515 +#: gitk:1534 msgid "Can't parse git log output:" msgstr "Изходът от „git log“ не може да Ñе анализира:" -#: gitk:1744 +#: gitk:1763 msgid "No commit information available" msgstr "ЛипÑва Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° подаваниÑ" -#: gitk:1907 gitk:1936 gitk:4339 gitk:9789 gitk:11388 gitk:11668 +#: gitk:1930 gitk:1959 gitk:4386 gitk:9875 gitk:11485 gitk:11805 msgid "OK" msgstr "Добре" -#: gitk:1938 gitk:4341 gitk:9225 gitk:9304 gitk:9434 gitk:9520 gitk:9791 -#: gitk:11389 gitk:11669 +#: gitk:1961 gitk:4388 gitk:9311 gitk:9390 gitk:9520 gitk:9606 gitk:9877 +#: gitk:11486 gitk:11806 msgid "Cancel" msgstr "Отказ" -#: gitk:2087 +#: gitk:2114 msgid "&Update" msgstr "&ОбновÑване" -#: gitk:2088 +#: gitk:2115 msgid "&Reload" msgstr "&Презареждане" -#: gitk:2089 +#: gitk:2116 msgid "Reread re&ferences" -msgstr "&Ðаново прочитане" +msgstr "Прочитане &наново" -#: gitk:2090 +#: gitk:2117 msgid "&List references" msgstr "&ИзброÑване на указателите" -#: gitk:2092 +#: gitk:2119 msgid "Start git &gui" msgstr "&Стартиране на „git gui“" -#: gitk:2094 +#: gitk:2121 msgid "&Quit" msgstr "&Спиране на програмата" -#: gitk:2086 +#: gitk:2113 msgid "&File" msgstr "&Файл" -#: gitk:2098 +#: gitk:2125 msgid "&Preferences" msgstr "&ÐаÑтройки" -#: gitk:2097 +#: gitk:2124 msgid "&Edit" msgstr "&Редактиране" -#: gitk:2102 +#: gitk:2129 msgid "&New view..." msgstr "&Ðов изглед…" -#: gitk:2103 +#: gitk:2130 msgid "&Edit view..." msgstr "&Редактиране на изгледа…" -#: gitk:2104 +#: gitk:2131 msgid "&Delete view" msgstr "&Изтриване на изгледа" -#: gitk:2106 +#: gitk:2133 msgid "&All files" msgstr "&Ð’Ñички файлове" -#: gitk:2101 +#: gitk:2128 msgid "&View" msgstr "&Изглед" -#: gitk:2111 gitk:2121 +#: gitk:2138 gitk:2148 msgid "&About gitk" msgstr "&ОтноÑно gitk" -#: gitk:2112 gitk:2126 +#: gitk:2139 gitk:2153 msgid "&Key bindings" msgstr "&Клавишни комбинации" -#: gitk:2110 gitk:2125 +#: gitk:2137 gitk:2152 msgid "&Help" msgstr "Помо&щ" -#: gitk:2203 gitk:8681 -msgid "SHA1 ID:" -msgstr "SHA1:" +#: gitk:2230 gitk:8767 +msgid "Commit ID:" +msgstr "Подаване:" -#: gitk:2247 +#: gitk:2274 msgid "Row" msgstr "Ред" -#: gitk:2285 +#: gitk:2312 msgid "Find" msgstr "ТърÑене" -#: gitk:2313 +#: gitk:2340 msgid "commit" msgstr "подаване" -#: gitk:2317 gitk:2319 gitk:4711 gitk:4734 gitk:4758 gitk:6779 gitk:6851 -#: gitk:6936 +#: gitk:2344 gitk:2346 gitk:4758 gitk:4781 gitk:4805 gitk:6826 gitk:6898 +#: gitk:6983 msgid "containing:" msgstr "Ñъдържащо:" -#: gitk:2320 gitk:3550 gitk:3555 gitk:4787 +#: gitk:2347 gitk:3597 gitk:3602 gitk:4834 msgid "touching paths:" msgstr "в пътищата:" -#: gitk:2321 gitk:4801 +#: gitk:2348 gitk:4848 msgid "adding/removing string:" msgstr "добавÑщо/премахващо низ" -#: gitk:2322 gitk:4803 +#: gitk:2349 gitk:4850 msgid "changing lines matching:" msgstr "променÑщо редове напаÑващи:" -#: gitk:2331 gitk:2333 gitk:4790 +#: gitk:2358 gitk:2360 gitk:4837 msgid "Exact" msgstr "Точно" -#: gitk:2333 gitk:4878 gitk:6747 +#: gitk:2360 gitk:4925 gitk:6794 msgid "IgnCase" msgstr "Без региÑтър" -#: gitk:2333 gitk:4760 gitk:4876 gitk:6743 +#: gitk:2360 gitk:4807 gitk:4923 gitk:6790 msgid "Regexp" msgstr "Рег. израз" -#: gitk:2335 gitk:2336 gitk:4898 gitk:4928 gitk:4935 gitk:6872 gitk:6940 +#: gitk:2362 gitk:2363 gitk:4945 gitk:4975 gitk:4982 gitk:6919 gitk:6987 msgid "All fields" msgstr "Ð’Ñички полета" -#: gitk:2336 gitk:4895 gitk:4928 gitk:6810 +#: gitk:2363 gitk:4942 gitk:4975 gitk:6857 msgid "Headline" msgstr "Първи ред" -#: gitk:2337 gitk:4895 gitk:6810 gitk:6940 gitk:7413 +#: gitk:2364 gitk:4942 gitk:6857 gitk:6987 gitk:7499 msgid "Comments" msgstr "Коментари" -#: gitk:2337 gitk:4895 gitk:4900 gitk:4935 gitk:6810 gitk:7348 gitk:8859 -#: gitk:8874 +#: gitk:2364 gitk:4942 gitk:4947 gitk:4982 gitk:6857 gitk:7434 gitk:8945 +#: gitk:8960 msgid "Author" msgstr "Ðвтор" -#: gitk:2337 gitk:4895 gitk:6810 gitk:7350 +#: gitk:2364 gitk:4942 gitk:6857 gitk:7436 msgid "Committer" msgstr "Подаващ" -#: gitk:2371 +#: gitk:2398 msgid "Search" msgstr "ТърÑене" -#: gitk:2379 +#: gitk:2406 msgid "Diff" msgstr "Разлики" -#: gitk:2381 +#: gitk:2408 msgid "Old version" msgstr "Стара верÑиÑ" -#: gitk:2383 +#: gitk:2410 msgid "New version" msgstr "Ðова верÑиÑ" -#: gitk:2386 +#: gitk:2413 msgid "Lines of context" msgstr "КонтекÑÑ‚ в редове" -#: gitk:2396 +#: gitk:2423 msgid "Ignore space change" msgstr "Празните знаци без значение" -#: gitk:2400 gitk:2402 gitk:7983 gitk:8235 +#: gitk:2427 gitk:2429 gitk:8069 gitk:8321 msgid "Line diff" msgstr "Поредови разлики" -#: gitk:2467 +#: gitk:2502 msgid "Patch" msgstr "Кръпка" -#: gitk:2469 +#: gitk:2504 msgid "Tree" msgstr "Дърво" -#: gitk:2639 gitk:2660 +#: gitk:2674 gitk:2695 msgid "Diff this -> selected" msgstr "Разлики между това и избраното" -#: gitk:2640 gitk:2661 +#: gitk:2675 gitk:2696 msgid "Diff selected -> this" msgstr "Разлики между избраното и това" -#: gitk:2641 gitk:2662 +#: gitk:2676 gitk:2697 msgid "Make patch" msgstr "Създаване на кръпка" -#: gitk:2642 gitk:9283 +#: gitk:2677 gitk:9369 msgid "Create tag" msgstr "Създаване на етикет" -#: gitk:2643 -msgid "Copy commit summary" -msgstr "Копиране на информациÑта за подаване" +#: gitk:2678 +msgid "Copy commit reference" +msgstr "Копиране на ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»Ñ Ð½Ð° подаване" -#: gitk:2644 gitk:9414 +#: gitk:2679 gitk:9500 msgid "Write commit to file" msgstr "Запазване на подаването във файл" -#: gitk:2645 +#: gitk:2680 msgid "Create new branch" msgstr "Създаване на нов клон" -#: gitk:2646 +#: gitk:2681 msgid "Cherry-pick this commit" msgstr "Отбиране на това подаване" -#: gitk:2647 +#: gitk:2682 msgid "Reset HEAD branch to here" msgstr "Привеждане на върха на клона към текущото подаване" -#: gitk:2648 +#: gitk:2683 msgid "Mark this commit" msgstr "ОтбелÑзване на това подаване" -#: gitk:2649 +#: gitk:2684 msgid "Return to mark" msgstr "Връщане към отбелÑзаното подаване" -#: gitk:2650 +#: gitk:2685 msgid "Find descendant of this and mark" msgstr "Откриване и отбелÑзване на наÑледниците" -#: gitk:2651 +#: gitk:2686 msgid "Compare with marked commit" msgstr "Сравнение Ñ Ð¾Ñ‚Ð±ÐµÐ»Ñзаното подаване" -#: gitk:2652 gitk:2663 +#: gitk:2687 gitk:2698 msgid "Diff this -> marked commit" msgstr "Разлики между това и отбелÑзаното" -#: gitk:2653 gitk:2664 +#: gitk:2688 gitk:2699 msgid "Diff marked commit -> this" msgstr "Разлики между отбелÑзаното и това" -#: gitk:2654 +#: gitk:2689 msgid "Revert this commit" msgstr "ОтмÑна на това подаване" -#: gitk:2670 +#: gitk:2705 msgid "Check out this branch" msgstr "ИзтеглÑне на този клон" -#: gitk:2671 +#: gitk:2706 msgid "Rename this branch" msgstr "Преименуване на този клон" -#: gitk:2672 +#: gitk:2707 msgid "Remove this branch" msgstr "Изтриване на този клон" -#: gitk:2673 +#: gitk:2708 msgid "Copy branch name" msgstr "Копиране на името на клона" -#: gitk:2680 +#: gitk:2715 msgid "Highlight this too" msgstr "ОтбелÑзване и на това" -#: gitk:2681 +#: gitk:2716 msgid "Highlight this only" msgstr "ОтбелÑзване Ñамо на това" -#: gitk:2682 +#: gitk:2717 msgid "External diff" msgstr "Външна програма за разлики" -#: gitk:2683 +#: gitk:2718 msgid "Blame parent commit" msgstr "Ðнотиране на родителÑкото подаване" -#: gitk:2684 +#: gitk:2719 msgid "Copy path" msgstr "Копиране на пътÑ" -#: gitk:2691 +#: gitk:2726 msgid "Show origin of this line" msgstr "Показване на произхода на този ред" -#: gitk:2692 +#: gitk:2727 msgid "Run git gui blame on this line" msgstr "Изпълнение на „git gui blame“ върху този ред" -#: gitk:3036 +#: gitk:3081 msgid "About gitk" msgstr "ОтноÑно gitk" -#: gitk:3038 +#: gitk:3083 msgid "" "\n" "Gitk - a commit viewer for git\n" @@ -386,324 +386,324 @@ msgstr "" "\n" "Използвайте и разпроÑтранÑвайте при уÑловиÑта на ОПЛ на ГÐУ" -#: gitk:3046 gitk:3113 gitk:10004 +#: gitk:3091 gitk:3158 gitk:10090 msgid "Close" msgstr "ЗатварÑне" -#: gitk:3067 +#: gitk:3112 msgid "Gitk key bindings" msgstr "Клавишни комбинации" -#: gitk:3070 +#: gitk:3115 msgid "Gitk key bindings:" msgstr "Клавишни комбинации:" -#: gitk:3072 +#: gitk:3117 #, tcl-format msgid "<%s-Q>\t\tQuit" msgstr "<%s-Q>\t\tСпиране на програмата" -#: gitk:3073 +#: gitk:3118 #, tcl-format msgid "<%s-W>\t\tClose window" msgstr "<%s-W>\t\tЗатварÑне на прозореца" -#: gitk:3074 +#: gitk:3119 msgid "<Home>\t\tMove to first commit" msgstr "<Home>\t\tКъм първото подаване" -#: gitk:3075 +#: gitk:3120 msgid "<End>\t\tMove to last commit" msgstr "<End>\t\tКъм поÑледното подаване" -#: gitk:3076 +#: gitk:3121 msgid "<Up>, p, k\tMove up one commit" msgstr "<Up>, p, k\tЕдно подаване нагоре" -#: gitk:3077 +#: gitk:3122 msgid "<Down>, n, j\tMove down one commit" msgstr "<Down>, n, j\tЕдно подаване надолу" -#: gitk:3078 +#: gitk:3123 msgid "<Left>, z, h\tGo back in history list" msgstr "<Left>, z, h\tÐазад в иÑториÑта" -#: gitk:3079 +#: gitk:3124 msgid "<Right>, x, l\tGo forward in history list" msgstr "<Right>, x, l\tÐапред в иÑториÑта" -#: gitk:3080 +#: gitk:3125 #, tcl-format msgid "<%s-n>\tGo to n-th parent of current commit in history list" msgstr "<%s-n>\tКъм n-Ñ‚Ð¸Ñ Ñ€Ð¾Ð´Ð¸Ñ‚ÐµÐ» на текущото подаване в иÑториÑта" -#: gitk:3081 +#: gitk:3126 msgid "<PageUp>\tMove up one page in commit list" msgstr "<PageUp>\tСтраница нагоре в ÑпиÑъка Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñта" -#: gitk:3082 +#: gitk:3127 msgid "<PageDown>\tMove down one page in commit list" msgstr "<PageDown>\tСтраница надолу в ÑпиÑъка Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñта" -#: gitk:3083 +#: gitk:3128 #, tcl-format msgid "<%s-Home>\tScroll to top of commit list" msgstr "<%s-Home>\tКъм началото на ÑпиÑъка Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñта" -#: gitk:3084 +#: gitk:3129 #, tcl-format msgid "<%s-End>\tScroll to bottom of commit list" msgstr "<%s-End>\tКъм ÐºÑ€Ð°Ñ Ð½Ð° ÑпиÑъка Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñта" -#: gitk:3085 +#: gitk:3130 #, tcl-format msgid "<%s-Up>\tScroll commit list up one line" msgstr "<%s-Up>\tРед нагоре в ÑпиÑъка Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñ" -#: gitk:3086 +#: gitk:3131 #, tcl-format msgid "<%s-Down>\tScroll commit list down one line" msgstr "<%s-Down>\tРед надолу в ÑпиÑъка Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñ" -#: gitk:3087 +#: gitk:3132 #, tcl-format msgid "<%s-PageUp>\tScroll commit list up one page" msgstr "<%s-PageUp>\tСтраница нагоре в ÑпиÑъка Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñ" -#: gitk:3088 +#: gitk:3133 #, tcl-format msgid "<%s-PageDown>\tScroll commit list down one page" msgstr "<%s-PageDown>\tСтраница надолу в ÑпиÑъка Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñ" -#: gitk:3089 +#: gitk:3134 msgid "<Shift-Up>\tFind backwards (upwards, later commits)" msgstr "<Shift-Up>\tТърÑене назад (визуално нагоре, иÑторичеÑки — поÑледващи)" -#: gitk:3090 +#: gitk:3135 msgid "<Shift-Down>\tFind forwards (downwards, earlier commits)" msgstr "" "<Shift-Down>\tТърÑене напред (визуално надолу, иÑторичеÑки — предхождащи)" -#: gitk:3091 +#: gitk:3136 msgid "<Delete>, b\tScroll diff view up one page" msgstr "<Delete>, b\tСтраница нагоре в изгледа за разлики" -#: gitk:3092 +#: gitk:3137 msgid "<Backspace>\tScroll diff view up one page" msgstr "<Backspace>\tСтраница надолу в изгледа за разлики" -#: gitk:3093 +#: gitk:3138 msgid "<Space>\t\tScroll diff view down one page" msgstr "<Space>\t\tСтраница надолу в изгледа за разлики" -#: gitk:3094 +#: gitk:3139 msgid "u\t\tScroll diff view up 18 lines" msgstr "u\t\t18 реда нагоре в изгледа за разлики" -#: gitk:3095 +#: gitk:3140 msgid "d\t\tScroll diff view down 18 lines" msgstr "d\t\t18 реда надолу в изгледа за разлики" -#: gitk:3096 +#: gitk:3141 #, tcl-format msgid "<%s-F>\t\tFind" msgstr "<%s-F>\t\tТърÑене" -#: gitk:3097 +#: gitk:3142 #, tcl-format msgid "<%s-G>\t\tMove to next find hit" msgstr "<%s-G>\t\tКъм Ñледващата поÑва" -#: gitk:3098 +#: gitk:3143 msgid "<Return>\tMove to next find hit" msgstr "<Return>\tКъм Ñледващата поÑва" -#: gitk:3099 +#: gitk:3144 msgid "g\t\tGo to commit" msgstr "g\t\tКъм поÑледното подаване" -#: gitk:3100 +#: gitk:3145 msgid "/\t\tFocus the search box" msgstr "/\t\tÐ¤Ð¾ÐºÑƒÑ Ð²ÑŠÑ€Ñ…Ñƒ полето за търÑене" -#: gitk:3101 +#: gitk:3146 msgid "?\t\tMove to previous find hit" msgstr "?\t\tКъм предишната поÑва" -#: gitk:3102 +#: gitk:3147 msgid "f\t\tScroll diff view to next file" msgstr "f\t\tСледващ файл в изгледа за разлики" -#: gitk:3103 +#: gitk:3148 #, tcl-format msgid "<%s-S>\t\tSearch for next hit in diff view" msgstr "<%s-S>\t\tТърÑене на Ñледващата поÑва в изгледа за разлики" -#: gitk:3104 +#: gitk:3149 #, tcl-format msgid "<%s-R>\t\tSearch for previous hit in diff view" msgstr "<%s-R>\t\tТърÑене на предишната поÑва в изгледа за разлики" -#: gitk:3105 +#: gitk:3150 #, tcl-format msgid "<%s-KP+>\tIncrease font size" msgstr "<%s-KP+>\tПо-голÑм размер на шрифта" -#: gitk:3106 +#: gitk:3151 #, tcl-format msgid "<%s-plus>\tIncrease font size" msgstr "<%s-plus>\tПо-голÑм размер на шрифта" -#: gitk:3107 +#: gitk:3152 #, tcl-format msgid "<%s-KP->\tDecrease font size" msgstr "<%s-KP->\tПо-малък размер на шрифта" -#: gitk:3108 +#: gitk:3153 #, tcl-format msgid "<%s-minus>\tDecrease font size" msgstr "<%s-minus>\tПо-малък размер на шрифта" -#: gitk:3109 +#: gitk:3154 msgid "<F5>\t\tUpdate" msgstr "<F5>\t\tОбновÑване" -#: gitk:3574 gitk:3583 +#: gitk:3621 gitk:3630 #, tcl-format msgid "Error creating temporary directory %s:" msgstr "Грешка при Ñъздаването на временната Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ â€ž%s“:" -#: gitk:3596 +#: gitk:3643 #, tcl-format msgid "Error getting \"%s\" from %s:" msgstr "Грешка при получаването на „%s“ от %s:" -#: gitk:3659 +#: gitk:3706 msgid "command failed:" msgstr "неуÑпешно изпълнение на команда:" -#: gitk:3808 +#: gitk:3855 msgid "No such commit" msgstr "Такова подаване нÑма" -#: gitk:3822 +#: gitk:3869 msgid "git gui blame: command failed:" msgstr "„git gui blame“: неуÑпешно изпълнение на команда:" -#: gitk:3853 +#: gitk:3900 #, tcl-format msgid "Couldn't read merge head: %s" -msgstr "Върхът за Ñливане не може да бъде прочетен: %s" +msgstr "Върхът за Ñливане не може да Ñе прочете: %s" -#: gitk:3861 +#: gitk:3908 #, tcl-format msgid "Error reading index: %s" msgstr "Грешка при прочитане на индекÑа: %s" -#: gitk:3886 +#: gitk:3933 #, tcl-format msgid "Couldn't start git blame: %s" -msgstr "Командата „git blame“ не може да бъде Ñтартирана: %s" +msgstr "Командата „git blame“ не може да Ñе Ñтартира: %s" -#: gitk:3889 gitk:6778 +#: gitk:3936 gitk:6825 msgid "Searching" msgstr "ТърÑене" -#: gitk:3921 +#: gitk:3968 #, tcl-format msgid "Error running git blame: %s" msgstr "Грешка при изпълнението на „git blame“: %s" -#: gitk:3949 +#: gitk:3996 #, tcl-format msgid "That line comes from commit %s, which is not in this view" msgstr "Този ред идва от подаването %s, което не е в изгледа" -#: gitk:3963 +#: gitk:4010 msgid "External diff viewer failed:" msgstr "ÐеуÑпешно изпълнение на външната програма за разлики:" -#: gitk:4067 +#: gitk:4114 msgid "All files" msgstr "Ð’Ñички файлове" -#: gitk:4091 +#: gitk:4138 msgid "View" msgstr "Изглед" -#: gitk:4094 +#: gitk:4141 msgid "Gitk view definition" msgstr "Ð”ÐµÑ„Ð¸Ð½Ð¸Ñ†Ð¸Ñ Ð½Ð° изглед в Gitk" -#: gitk:4098 +#: gitk:4145 msgid "Remember this view" msgstr "Запазване на този изглед" -#: gitk:4099 +#: gitk:4146 msgid "References (space separated list):" msgstr "Указатели (ÑпиÑък Ñ Ñ€Ð°Ð·Ð´ÐµÐ»Ð¸Ñ‚ÐµÐ» интервал):" -#: gitk:4100 +#: gitk:4147 msgid "Branches & tags:" msgstr "Клони и етикети:" -#: gitk:4101 +#: gitk:4148 msgid "All refs" msgstr "Ð’Ñички указатели" -#: gitk:4102 +#: gitk:4149 msgid "All (local) branches" msgstr "Ð’Ñички (локални) клони" -#: gitk:4103 +#: gitk:4150 msgid "All tags" msgstr "Ð’Ñички етикети" -#: gitk:4104 +#: gitk:4151 msgid "All remote-tracking branches" msgstr "Ð’Ñички ÑледÑщи клони" -#: gitk:4105 +#: gitk:4152 msgid "Commit Info (regular expressions):" msgstr "Ð˜Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° подаване (рег. изр.):" -#: gitk:4106 +#: gitk:4153 msgid "Author:" msgstr "Ðвтор:" -#: gitk:4107 +#: gitk:4154 msgid "Committer:" msgstr "Подал:" -#: gitk:4108 +#: gitk:4155 msgid "Commit Message:" msgstr "Съобщение при подаване:" -#: gitk:4109 +#: gitk:4156 msgid "Matches all Commit Info criteria" msgstr "Съвпадение по вÑички характериÑтики на подаването" -#: gitk:4110 +#: gitk:4157 msgid "Matches no Commit Info criteria" msgstr "Ðе Ñъвпада по Ð½Ð¸ÐºÐ¾Ñ Ð¾Ñ‚ характериÑтиките на подаването" -#: gitk:4111 +#: gitk:4158 msgid "Changes to Files:" msgstr "Промени по файловете:" -#: gitk:4112 +#: gitk:4159 msgid "Fixed String" msgstr "ДоÑловен низ" -#: gitk:4113 +#: gitk:4160 msgid "Regular Expression" msgstr "РегулÑрен израз" -#: gitk:4114 +#: gitk:4161 msgid "Search string:" msgstr "Ðиз за търÑене:" -#: gitk:4115 +#: gitk:4162 msgid "" "Commit Dates (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March 17, 2009 " "15:27:38\"):" @@ -711,204 +711,208 @@ msgstr "" "Дата на подаване („2 weeks ago“ (преди 2 Ñедмици), „2009-03-17 15:27:38“, " "„March 17, 2009 15:27:38“):" -#: gitk:4116 +#: gitk:4163 msgid "Since:" msgstr "От:" -#: gitk:4117 +#: gitk:4164 msgid "Until:" msgstr "До:" -#: gitk:4118 +#: gitk:4165 msgid "Limit and/or skip a number of revisions (positive integer):" msgstr "" "Ограничаване и/или преÑкачане на определен брой верÑии (неотрицателно цÑло " "чиÑло):" -#: gitk:4119 +#: gitk:4166 msgid "Number to show:" msgstr "Брой показани:" -#: gitk:4120 +#: gitk:4167 msgid "Number to skip:" msgstr "Брой преÑкочени:" -#: gitk:4121 +#: gitk:4168 msgid "Miscellaneous options:" msgstr "Разни:" -#: gitk:4122 +#: gitk:4169 msgid "Strictly sort by date" msgstr "Подреждане по дата" -#: gitk:4123 +#: gitk:4170 msgid "Mark branch sides" msgstr "ОтбелÑзване на Ñтраните по клона" -#: gitk:4124 +#: gitk:4171 msgid "Limit to first parent" msgstr "Само Ð¿ÑŠÑ€Ð²Ð¸Ñ Ñ€Ð¾Ð´Ð¸Ñ‚ÐµÐ»" -#: gitk:4125 +#: gitk:4172 msgid "Simple history" msgstr "ОпроÑтена иÑториÑ" -#: gitk:4126 +#: gitk:4173 msgid "Additional arguments to git log:" msgstr "Допълнителни аргументи към „git log“:" -#: gitk:4127 +#: gitk:4174 msgid "Enter files and directories to include, one per line:" msgstr "Въведете файловете и директориите за включване, по елемент на ред" -#: gitk:4128 +#: gitk:4175 msgid "Command to generate more commits to include:" msgstr "" -"Команда за генерирането на допълнителни подаваниÑ, които да бъдат включени:" +"Команда за генерирането на допълнителни подаваниÑ, които да Ñе включат:" -#: gitk:4252 +#: gitk:4299 msgid "Gitk: edit view" msgstr "Gitk: редактиране на изглед" -#: gitk:4260 +#: gitk:4307 msgid "-- criteria for selecting revisions" msgstr "— критерии за избор на верÑии" -#: gitk:4265 +#: gitk:4312 msgid "View Name" msgstr "Име на изглед" -#: gitk:4340 +#: gitk:4387 msgid "Apply (F5)" msgstr "Прилагане (F5)" -#: gitk:4378 +#: gitk:4425 msgid "Error in commit selection arguments:" msgstr "Грешка в аргументите за избор на подаваниÑ:" -#: gitk:4433 gitk:4486 gitk:4948 gitk:4962 gitk:6232 gitk:12524 gitk:12525 +#: gitk:4480 gitk:4533 gitk:4995 gitk:5009 gitk:6279 gitk:12679 gitk:12680 msgid "None" msgstr "ÐÑма" -#: gitk:5045 gitk:5050 +#: gitk:5092 gitk:5097 msgid "Descendant" msgstr "ÐаÑледник" -#: gitk:5046 +#: gitk:5093 msgid "Not descendant" msgstr "Ðе е наÑледник" -#: gitk:5053 gitk:5058 +#: gitk:5100 gitk:5105 msgid "Ancestor" msgstr "ПредшеÑтвеник" -#: gitk:5054 +#: gitk:5101 msgid "Not ancestor" msgstr "Ðе е предшеÑтвеник" -#: gitk:5348 +#: gitk:5395 msgid "Local changes checked in to index but not committed" msgstr "Локални промени добавени към индекÑа, но неподадени" -#: gitk:5384 +#: gitk:5431 msgid "Local uncommitted changes, not checked in to index" msgstr "Локални промени извън индекÑа" -#: gitk:7158 +#: gitk:7179 +msgid "Error starting web browser:" +msgstr "Грешка при Ñтартирането на уеб браузър:" + +#: gitk:7240 msgid "and many more" msgstr "и още много" -#: gitk:7161 +#: gitk:7243 msgid "many" msgstr "много" -#: gitk:7352 +#: gitk:7438 msgid "Tags:" msgstr "Етикети:" -#: gitk:7369 gitk:7375 gitk:8854 +#: gitk:7455 gitk:7461 gitk:8940 msgid "Parent" msgstr "Родител" -#: gitk:7380 +#: gitk:7466 msgid "Child" msgstr "Дете" -#: gitk:7389 +#: gitk:7475 msgid "Branch" msgstr "Клон" -#: gitk:7392 +#: gitk:7478 msgid "Follows" msgstr "Следва" -#: gitk:7395 +#: gitk:7481 msgid "Precedes" msgstr "ПредшеÑтва" -#: gitk:7990 +#: gitk:8076 #, tcl-format msgid "Error getting diffs: %s" msgstr "Грешка при получаването на разликите: %s" -#: gitk:8679 +#: gitk:8765 msgid "Goto:" msgstr "Към ред:" -#: gitk:8700 +#: gitk:8786 #, tcl-format -msgid "Short SHA1 id %s is ambiguous" -msgstr "Съкратената Ñума по SHA1 %s не е еднозначна" +msgid "Short commit ID %s is ambiguous" +msgstr "Съкратената контролна Ñума %s не е еднозначна" -#: gitk:8707 +#: gitk:8793 #, tcl-format msgid "Revision %s is not known" msgstr "Ðепозната верÑÐ¸Ñ %s" -#: gitk:8717 +#: gitk:8803 #, tcl-format -msgid "SHA1 id %s is not known" -msgstr "Ðепозната Ñума по SHA1 %s" +msgid "Commit ID %s is not known" +msgstr "Ðепозната контролна Ñума %s" -#: gitk:8719 +#: gitk:8805 #, tcl-format msgid "Revision %s is not in the current view" msgstr "ВерÑÐ¸Ñ %s не е в Ñ‚ÐµÐºÑƒÑ‰Ð¸Ñ Ð¸Ð·Ð³Ð»ÐµÐ´" -#: gitk:8861 gitk:8876 +#: gitk:8947 gitk:8962 msgid "Date" msgstr "Дата" -#: gitk:8864 +#: gitk:8950 msgid "Children" msgstr "Деца" -#: gitk:8927 +#: gitk:9013 #, tcl-format msgid "Reset %s branch to here" msgstr "ЗанулÑване на клона „%s“ към текущото подаване" -#: gitk:8929 +#: gitk:9015 msgid "Detached head: can't reset" msgstr "ÐеÑвързан връх: невъзможно занулÑване" -#: gitk:9034 gitk:9040 +#: gitk:9120 gitk:9126 msgid "Skipping merge commit " msgstr "ПропуÑкане на подаването на Ñливането" -#: gitk:9049 gitk:9054 +#: gitk:9135 gitk:9140 msgid "Error getting patch ID for " msgstr "Грешка при получаването на идентификатора на " -#: gitk:9050 gitk:9055 +#: gitk:9136 gitk:9141 msgid " - stopping\n" msgstr " — Ñпиране\n" -#: gitk:9060 gitk:9063 gitk:9071 gitk:9085 gitk:9094 +#: gitk:9146 gitk:9149 gitk:9157 gitk:9171 gitk:9180 msgid "Commit " msgstr "Подаване" -#: gitk:9064 +#: gitk:9150 msgid "" " is the same patch as\n" " " @@ -916,7 +920,7 @@ msgstr "" " е Ñъщата кръпка като\n" " " -#: gitk:9072 +#: gitk:9158 msgid "" " differs from\n" " " @@ -924,7 +928,7 @@ msgstr "" " Ñе различава от\n" " " -#: gitk:9074 +#: gitk:9160 msgid "" "Diff of commits:\n" "\n" @@ -932,147 +936,147 @@ msgstr "" "Разлика между подаваниÑта:\n" "\n" -#: gitk:9086 gitk:9095 +#: gitk:9172 gitk:9181 #, tcl-format msgid " has %s children - stopping\n" msgstr " има %s деца — Ñпиране\n" -#: gitk:9114 +#: gitk:9200 #, tcl-format msgid "Error writing commit to file: %s" msgstr "Грешка при запазването на подаването във файл: %s" -#: gitk:9120 +#: gitk:9206 #, tcl-format msgid "Error diffing commits: %s" msgstr "Грешка при изчиÑлÑването на разликите между подаваниÑта: %s" -#: gitk:9166 +#: gitk:9252 msgid "Top" msgstr "Ðай-горе" -#: gitk:9167 +#: gitk:9253 msgid "From" msgstr "От" -#: gitk:9172 +#: gitk:9258 msgid "To" msgstr "До" -#: gitk:9196 +#: gitk:9282 msgid "Generate patch" msgstr "Генериране на кръпка" -#: gitk:9198 +#: gitk:9284 msgid "From:" msgstr "От:" -#: gitk:9207 +#: gitk:9293 msgid "To:" msgstr "До:" -#: gitk:9216 +#: gitk:9302 msgid "Reverse" msgstr "Обръщане" -#: gitk:9218 gitk:9428 +#: gitk:9304 gitk:9514 msgid "Output file:" msgstr "Запазване във файла:" -#: gitk:9224 +#: gitk:9310 msgid "Generate" msgstr "Генериране" -#: gitk:9262 +#: gitk:9348 msgid "Error creating patch:" msgstr "Грешка при Ñъздаването на кръпка:" -#: gitk:9285 gitk:9416 gitk:9504 +#: gitk:9371 gitk:9502 gitk:9590 msgid "ID:" msgstr "Идентификатор:" -#: gitk:9294 +#: gitk:9380 msgid "Tag name:" msgstr "Име на етикет:" -#: gitk:9297 +#: gitk:9383 msgid "Tag message is optional" msgstr "Съобщението за етикет е незадължително" -#: gitk:9299 +#: gitk:9385 msgid "Tag message:" msgstr "Съобщение за етикет:" -#: gitk:9303 gitk:9474 +#: gitk:9389 gitk:9560 msgid "Create" msgstr "Създаване" -#: gitk:9321 +#: gitk:9407 msgid "No tag name specified" msgstr "ЛипÑва име на етикет" -#: gitk:9325 +#: gitk:9411 #, tcl-format msgid "Tag \"%s\" already exists" msgstr "Етикетът „%s“ вече ÑъщеÑтвува" -#: gitk:9335 +#: gitk:9421 msgid "Error creating tag:" msgstr "Грешка при Ñъздаването на етикет:" -#: gitk:9425 +#: gitk:9511 msgid "Command:" msgstr "Команда:" -#: gitk:9433 +#: gitk:9519 msgid "Write" msgstr "Запазване" -#: gitk:9451 +#: gitk:9537 msgid "Error writing commit:" msgstr "Грешка при запазването на подаването:" -#: gitk:9473 +#: gitk:9559 msgid "Create branch" msgstr "Създаване на клон" -#: gitk:9489 +#: gitk:9575 #, tcl-format msgid "Rename branch %s" msgstr "Преименуване на клона „%s“" -#: gitk:9490 +#: gitk:9576 msgid "Rename" msgstr "Преименуване" -#: gitk:9514 +#: gitk:9600 msgid "Name:" msgstr "Име:" -#: gitk:9538 +#: gitk:9624 msgid "Please specify a name for the new branch" msgstr "Укажете име за Ð½Ð¾Ð²Ð¸Ñ ÐºÐ»Ð¾Ð½" -#: gitk:9543 +#: gitk:9629 #, tcl-format msgid "Branch '%s' already exists. Overwrite?" -msgstr "Клонът „%s“ вече ÑъщеÑтвува. Да бъде ли презапиÑан?" +msgstr "Клонът „%s“ вече ÑъщеÑтвува. Да Ñе презапише ли?" -#: gitk:9587 +#: gitk:9673 msgid "Please specify a new name for the branch" msgstr "Укажете ново име за клона" -#: gitk:9650 +#: gitk:9736 #, tcl-format msgid "Commit %s is already included in branch %s -- really re-apply it?" msgstr "" -"Подаването „%s“ вече е включено в клона „%s“ — да бъде ли приложено отново?" +"Подаването „%s“ вече е включено в клона „%s“ — да Ñе приложи ли отново?" -#: gitk:9655 +#: gitk:9741 msgid "Cherry-picking" msgstr "Отбиране" -#: gitk:9664 +#: gitk:9750 #, tcl-format msgid "" "Cherry-pick failed because of local changes to file '%s'.\n" @@ -1081,7 +1085,7 @@ msgstr "" "ÐеуÑпешно отбиране, защото във файла „%s“ има локални промени.\n" "Подайте, занулете или ги Ñкатайте и пробвайте отново." -#: gitk:9670 +#: gitk:9756 msgid "" "Cherry-pick failed because of merge conflict.\n" "Do you wish to run git citool to resolve it?" @@ -1089,20 +1093,20 @@ msgstr "" "ÐеуÑпешно отбиране поради конфликти при Ñливане.\n" "ИÑкате ли да ги коригирате чрез „git citool“?" -#: gitk:9686 gitk:9744 +#: gitk:9772 gitk:9830 msgid "No changes committed" msgstr "Ðе Ñа подадени промени" -#: gitk:9713 +#: gitk:9799 #, tcl-format msgid "Commit %s is not included in branch %s -- really revert it?" -msgstr "Подаването „%s“ не е включено в клона „%s“. Да бъде ли отменено?" +msgstr "Подаването „%s“ не е включено в клона „%s“. Да Ñе отменени ли?" -#: gitk:9718 +#: gitk:9804 msgid "Reverting" msgstr "ОтмÑна" -#: gitk:9726 +#: gitk:9812 #, tcl-format msgid "" "Revert failed because of local changes to the following files:%s Please " @@ -1111,7 +1115,7 @@ msgstr "" "ÐеуÑпешна отмÑна, защото във файла „%s“ има локални промени.\n" "Подайте, занулете или ги Ñкатайте и пробвайте отново." -#: gitk:9730 +#: gitk:9816 msgid "" "Revert failed because of merge conflict.\n" " Do you wish to run git citool to resolve it?" @@ -1119,53 +1123,53 @@ msgstr "" "ÐеуÑпешно отмÑна поради конфликти при Ñливане.\n" "ИÑкате ли да ги коригирате чрез „git citool“?" -#: gitk:9773 +#: gitk:9859 msgid "Confirm reset" msgstr "Потвърждаване на занулÑването" -#: gitk:9775 +#: gitk:9861 #, tcl-format msgid "Reset branch %s to %s?" msgstr "Да Ñе занули ли клонът „%s“ към „%s“?" -#: gitk:9777 +#: gitk:9863 msgid "Reset type:" msgstr "Вид занулÑване:" -#: gitk:9780 +#: gitk:9866 msgid "Soft: Leave working tree and index untouched" msgstr "Слабо: работното дърво и индекÑа оÑтават Ñъщите" -#: gitk:9783 +#: gitk:9869 msgid "Mixed: Leave working tree untouched, reset index" msgstr "СмеÑено: работното дърво оÑтава Ñъщото, индекÑÑŠÑ‚ Ñе занулÑва" -#: gitk:9786 +#: gitk:9872 msgid "" "Hard: Reset working tree and index\n" "(discard ALL local changes)" msgstr "" "Силно: занулÑване и на работното дърво, и на индекÑа\n" -"(ВСИЧКИ локални промени ще бъдат безвъзвратно загубени)" +"(ВСИЧКИ локални промени ще Ñе загубÑÑ‚ безвъзвратно)" -#: gitk:9803 +#: gitk:9889 msgid "Resetting" msgstr "ЗанулÑване" -#: gitk:9876 +#: gitk:9962 #, tcl-format msgid "A local branch named %s exists already" msgstr "Вече ÑъщеÑтвува локален клон „%s“." -#: gitk:9884 +#: gitk:9970 msgid "Checking out" msgstr "ИзтеглÑне" -#: gitk:9943 +#: gitk:10029 msgid "Cannot delete the currently checked-out branch" -msgstr "Текущо изтеглениÑÑ‚ клон не може да бъде изтрит" +msgstr "Текущо изтеглениÑÑ‚ клон не може да Ñе изтрие" -#: gitk:9949 +#: gitk:10035 #, tcl-format msgid "" "The commits on branch %s aren't on any other branch.\n" @@ -1174,16 +1178,16 @@ msgstr "" "ПодаваниÑта на клона „%s“ не Ñа на никой друг клон.\n" "ÐаиÑтина ли иÑкате да изтриете клона „%s“?" -#: gitk:9980 +#: gitk:10066 #, tcl-format msgid "Tags and heads: %s" msgstr "Етикети и върхове: %s" -#: gitk:9997 +#: gitk:10083 msgid "Filter" msgstr "Филтриране" -#: gitk:10293 +#: gitk:10390 msgid "" "Error reading commit topology information; branch and preceding/following " "tag information will be incomplete." @@ -1191,201 +1195,237 @@ msgstr "" "Грешка при прочитането на топологиÑта на подаваниÑта. ИнформациÑта за клона " "и предшеÑтващите/Ñледващите етикети ще е непълна." -#: gitk:11270 +#: gitk:11367 msgid "Tag" msgstr "Етикет" -#: gitk:11274 +#: gitk:11371 msgid "Id" msgstr "Идентификатор" -#: gitk:11357 +#: gitk:11454 msgid "Gitk font chooser" msgstr "Избор на шрифт за Gitk" -#: gitk:11374 +#: gitk:11471 msgid "B" msgstr "Ч" -#: gitk:11377 +#: gitk:11474 msgid "I" msgstr "К" -#: gitk:11495 +#: gitk:11593 msgid "Commit list display options" msgstr "ÐаÑтройки на ÑпиÑъка Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñ" -#: gitk:11498 +#: gitk:11596 msgid "Maximum graph width (lines)" msgstr "МакÑимална широчина на графа (в редове)" -#: gitk:11502 +#: gitk:11600 #, no-tcl-format msgid "Maximum graph width (% of pane)" msgstr "МакÑимална широчина на графа (% от панела)" -#: gitk:11505 +#: gitk:11603 msgid "Show local changes" msgstr "Показване на локалните промени" -#: gitk:11508 -msgid "Auto-select SHA1 (length)" -msgstr "Ðвтоматично избиране на SHA1 (дължина)" - -#: gitk:11512 +#: gitk:11606 msgid "Hide remote refs" msgstr "Скриване на отдалечените указатели" -#: gitk:11516 +#: gitk:11610 +msgid "Copy commit ID to clipboard" +msgstr "Копиране на контролната Ñума към буфера за обмен" + +#: gitk:11614 +msgid "Copy commit ID to X11 selection" +msgstr "Копиране на контролната Ñума в ÑелекциÑта на X11" + +#: gitk:11619 +msgid "Length of commit ID to copy" +msgstr "Дължина на контролната Ñума, коÑто Ñе копира" + +#: gitk:11622 msgid "Diff display options" msgstr "ÐаÑтройки на показването на разликите" -#: gitk:11518 +#: gitk:11624 msgid "Tab spacing" msgstr "Широчина на табулатора" -#: gitk:11521 +#: gitk:11628 +msgid "Wrap comment text" +msgstr "ПренаÑÑне на думите в коментарите" + +#: gitk:11633 +msgid "Wrap other text" +msgstr "ПренаÑÑне на Ð´Ñ€ÑƒÐ³Ð¸Ñ Ñ‚ÐµÐºÑÑ‚" + +#: gitk:11638 msgid "Display nearby tags/heads" msgstr "Извеждане на близките етикети и върхове" -#: gitk:11524 +#: gitk:11641 msgid "Maximum # tags/heads to show" msgstr "МакÑимален брой етикети/върхове за показване" -#: gitk:11527 +#: gitk:11644 msgid "Limit diffs to listed paths" msgstr "Разлика Ñамо в избраните пътища" -#: gitk:11530 +#: gitk:11647 msgid "Support per-file encodings" msgstr "Поддръжка на различни ÐºÐ¾Ð´Ð¸Ñ€Ð°Ð½Ð¸Ñ Ð·Ð° вÑеки файл" -#: gitk:11536 gitk:11683 +#: gitk:11653 gitk:11820 msgid "External diff tool" msgstr "Външен инÑтрумент за разлики" -#: gitk:11537 +#: gitk:11654 msgid "Choose..." msgstr "Избор…" -#: gitk:11542 +#: gitk:11661 +msgid "Web browser" +msgstr "Уеб браузър" + +#: gitk:11666 msgid "General options" msgstr "Общи наÑтройки" -#: gitk:11545 +#: gitk:11669 msgid "Use themed widgets" msgstr "Използване на тема за графичните обекти" -#: gitk:11547 +#: gitk:11671 msgid "(change requires restart)" msgstr "(промÑната изиÑква реÑтартиране на Gitk)" -#: gitk:11549 +#: gitk:11673 msgid "(currently unavailable)" msgstr "(в момента недоÑтъпно)" -#: gitk:11560 +#: gitk:11685 msgid "Colors: press to choose" msgstr "Цветове: избира Ñе Ñ Ð½Ð°Ñ‚Ð¸Ñкане" -#: gitk:11563 +#: gitk:11688 msgid "Interface" msgstr "ИнтерфейÑ" -#: gitk:11564 +#: gitk:11689 msgid "interface" msgstr "интерфейÑ" -#: gitk:11567 +#: gitk:11692 msgid "Background" msgstr "Фон" -#: gitk:11568 gitk:11598 +#: gitk:11693 gitk:11735 msgid "background" msgstr "фон" -#: gitk:11571 +#: gitk:11696 msgid "Foreground" msgstr "Знаци" -#: gitk:11572 +#: gitk:11697 msgid "foreground" msgstr "знаци" -#: gitk:11575 +#: gitk:11700 msgid "Diff: old lines" msgstr "Разлика: Ñтари редове" -#: gitk:11576 +#: gitk:11701 msgid "diff old lines" msgstr "разлика, Ñтари редове" -#: gitk:11580 +#: gitk:11705 +msgid "Diff: old lines bg" +msgstr "Разлика: фон на Ñтари редове" + +#: gitk:11707 +msgid "diff old lines bg" +msgstr "разлика, фон на Ñтари редове" + +#: gitk:11711 msgid "Diff: new lines" msgstr "Разлика: нови редове" -#: gitk:11581 +#: gitk:11712 msgid "diff new lines" msgstr "разлика, нови редове" -#: gitk:11585 +#: gitk:11716 +msgid "Diff: new lines bg" +msgstr "Разлика: фон на нови редове" + +#: gitk:11718 +msgid "diff new lines bg" +msgstr "разлика, фон на нови редове" + +#: gitk:11722 msgid "Diff: hunk header" msgstr "Разлика: начало на парче" -#: gitk:11587 +#: gitk:11724 msgid "diff hunk header" msgstr "разлика, начало на парче" -#: gitk:11591 +#: gitk:11728 msgid "Marked line bg" msgstr "Фон на отбелÑзан ред" -#: gitk:11593 +#: gitk:11730 msgid "marked line background" msgstr "фон на отбелÑзан ред" -#: gitk:11597 +#: gitk:11734 msgid "Select bg" msgstr "Избор на фон" -#: gitk:11606 +#: gitk:11743 msgid "Fonts: press to choose" msgstr "Шрифтове: избира Ñе Ñ Ð½Ð°Ñ‚Ð¸Ñкане" -#: gitk:11608 +#: gitk:11745 msgid "Main font" msgstr "ОÑновен шрифт" -#: gitk:11609 +#: gitk:11746 msgid "Diff display font" msgstr "Шрифт за разликите" -#: gitk:11610 +#: gitk:11747 msgid "User interface font" msgstr "Шрифт на интерфейÑа" -#: gitk:11632 +#: gitk:11769 msgid "Gitk preferences" msgstr "ÐаÑтройки на Gitk" -#: gitk:11641 +#: gitk:11778 msgid "General" msgstr "Общи" -#: gitk:11642 +#: gitk:11779 msgid "Colors" msgstr "Цветове" -#: gitk:11643 +#: gitk:11780 msgid "Fonts" msgstr "Шрифтове" -#: gitk:11693 +#: gitk:11830 #, tcl-format msgid "Gitk: choose color for %s" msgstr "Gitk: избор на цвÑÑ‚ на „%s“" -#: gitk:12206 +#: gitk:12350 msgid "" "Sorry, gitk cannot run with this version of Tcl/Tk.\n" " Gitk requires at least Tcl/Tk 8.4." @@ -1393,15 +1433,15 @@ msgstr "" "Тази верÑÐ¸Ñ Ð½Ð° Tcl/Tk не Ñе поддържа от Gitk.\n" " Ðеобходима ви е поне Tcl/Tk 8.4." -#: gitk:12416 +#: gitk:12571 msgid "Cannot find a git repository here." msgstr "Тук липÑва хранилище на Git." -#: gitk:12463 +#: gitk:12618 #, tcl-format msgid "Ambiguous argument '%s': both revision and filename" msgstr "Ðееднозначен аргумент „%s“: има и такава верÑиÑ, и такъв файл" -#: gitk:12475 +#: gitk:12630 msgid "Bad arguments to gitk:" msgstr "Ðеправилни аргументи на gitk:" diff --git a/gitk-git/po/sv.po b/gitk-git/po/sv.po index 2a06fe5bbc..5afbe6da1d 100644 --- a/gitk-git/po/sv.po +++ b/gitk-git/po/sv.po @@ -3,14 +3,14 @@ # This file is distributed under the same license as the gitk package. # # Mikael Magnusson <mikachu@gmail.com>, 2008. -# Peter Krefting <peter@softwolves.pp.se>, 2008, 2009, 2010, 2012, 2013, 2015. +# Peter Krefting <peter@softwolves.pp.se>, 2008-2023. # msgid "" msgstr "" "Project-Id-Version: sv\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2015-12-09 09:40+0100\n" -"PO-Revision-Date: 2015-12-11 09:46+0100\n" +"POT-Creation-Date: 2023-10-26 21:39+0100\n" +"PO-Revision-Date: 2023-10-26 21:42+0100\n" "Last-Translator: Peter Krefting <peter@softwolves.pp.se>\n" "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" "Language: sv\n" @@ -18,35 +18,35 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Gtranslator 2.91.6\n" +"X-Generator: Gtranslator 3.38.0\n" -#: gitk:140 +#: gitk:139 msgid "Couldn't get list of unmerged files:" msgstr "Kunde inte hämta lista över ej sammanslagna filer:" -#: gitk:212 gitk:2381 +#: gitk:211 gitk:2406 msgid "Color words" msgstr "Färga ord" -#: gitk:217 gitk:2381 gitk:8221 gitk:8254 +#: gitk:216 gitk:2406 gitk:8307 gitk:8340 msgid "Markup words" msgstr "Märk upp ord" -#: gitk:324 +#: gitk:323 msgid "Error parsing revisions:" msgstr "Fel vid tolkning av revisioner:" -#: gitk:380 +#: gitk:379 msgid "Error executing --argscmd command:" msgstr "Fel vid körning av --argscmd-kommando:" -#: gitk:393 +#: gitk:392 msgid "No files selected: --merge specified but no files are unmerged." msgstr "" "Inga filer valdes: --merge angavs men det finns inga filer som inte har " "slagits samman." -#: gitk:396 +#: gitk:395 msgid "" "No files selected: --merge specified but no unmerged files are within file " "limit." @@ -54,322 +54,326 @@ msgstr "" "Inga filer valdes: --merge angavs men det finns inga filer inom " "filbegränsningen." -#: gitk:418 gitk:566 +#: gitk:417 gitk:565 msgid "Error executing git log:" msgstr "Fel vid körning av git log:" -#: gitk:436 gitk:582 +#: gitk:435 gitk:581 msgid "Reading" msgstr "Läser" -#: gitk:496 gitk:4526 +#: gitk:495 gitk:4572 msgid "Reading commits..." msgstr "Läser incheckningar..." -#: gitk:499 gitk:1637 gitk:4529 +#: gitk:498 gitk:1640 gitk:4575 msgid "No commits selected" msgstr "Inga incheckningar markerade" -#: gitk:1445 gitk:4046 gitk:12447 +#: gitk:1448 gitk:4092 gitk:12674 msgid "Command line" msgstr "Kommandorad" -#: gitk:1511 +#: gitk:1514 msgid "Can't parse git log output:" msgstr "Kan inte tolka utdata frÃ¥n git log:" -#: gitk:1740 +#: gitk:1743 msgid "No commit information available" msgstr "Ingen incheckningsinformation är tillgänglig" -#: gitk:1903 gitk:1932 gitk:4316 gitk:9684 gitk:11256 gitk:11536 +#: gitk:1910 gitk:1939 gitk:4362 gitk:9847 gitk:11451 gitk:11751 msgid "OK" msgstr "OK" -#: gitk:1934 gitk:4318 gitk:9197 gitk:9276 gitk:9406 gitk:9455 gitk:9686 -#: gitk:11257 gitk:11537 +#: gitk:1941 gitk:4364 gitk:9283 gitk:9362 gitk:9492 gitk:9578 gitk:9849 +#: gitk:11452 gitk:11752 msgid "Cancel" msgstr "Avbryt" -#: gitk:2069 +#: gitk:2090 msgid "&Update" msgstr "&Uppdatera" -#: gitk:2070 +#: gitk:2091 msgid "&Reload" msgstr "Läs &om" -#: gitk:2071 +#: gitk:2092 msgid "Reread re&ferences" msgstr "Läs om &referenser" -#: gitk:2072 +#: gitk:2093 msgid "&List references" msgstr "&Visa referenser" -#: gitk:2074 +#: gitk:2095 msgid "Start git &gui" msgstr "Starta git &gui" -#: gitk:2076 +#: gitk:2097 msgid "&Quit" msgstr "&Avsluta" -#: gitk:2068 +#: gitk:2089 msgid "&File" msgstr "&Arkiv" -#: gitk:2080 +#: gitk:2101 msgid "&Preferences" msgstr "&Inställningar" -#: gitk:2079 +#: gitk:2100 msgid "&Edit" msgstr "&Redigera" -#: gitk:2084 +#: gitk:2105 msgid "&New view..." msgstr "&Ny vy..." -#: gitk:2085 +#: gitk:2106 msgid "&Edit view..." msgstr "&Ändra vy..." -#: gitk:2086 +#: gitk:2107 msgid "&Delete view" msgstr "&Ta bort vy" -#: gitk:2088 +#: gitk:2109 msgid "&All files" msgstr "&Alla filer" -#: gitk:2083 +#: gitk:2104 msgid "&View" msgstr "&Visa" -#: gitk:2093 gitk:2103 +#: gitk:2114 gitk:2124 msgid "&About gitk" msgstr "&Om gitk" -#: gitk:2094 gitk:2108 +#: gitk:2115 gitk:2129 msgid "&Key bindings" msgstr "&Tangentbordsbindningar" -#: gitk:2092 gitk:2107 +#: gitk:2113 gitk:2128 msgid "&Help" msgstr "&Hjälp" -#: gitk:2185 gitk:8653 +#: gitk:2206 gitk:8739 msgid "SHA1 ID:" msgstr "SHA1-id:" -#: gitk:2229 +#: gitk:2250 msgid "Row" msgstr "Rad" -#: gitk:2267 +#: gitk:2288 msgid "Find" msgstr "Sök" -#: gitk:2295 +#: gitk:2316 msgid "commit" msgstr "incheckning" -#: gitk:2299 gitk:2301 gitk:4688 gitk:4711 gitk:4735 gitk:6756 gitk:6828 -#: gitk:6913 +#: gitk:2320 gitk:2322 gitk:4734 gitk:4757 gitk:4781 gitk:6802 gitk:6874 +#: gitk:6959 msgid "containing:" msgstr "som innehÃ¥ller:" -#: gitk:2302 gitk:3527 gitk:3532 gitk:4764 +#: gitk:2323 gitk:3573 gitk:3578 gitk:4810 msgid "touching paths:" msgstr "som rör sökväg:" -#: gitk:2303 gitk:4778 +#: gitk:2324 gitk:4824 msgid "adding/removing string:" msgstr "som lägger/till tar bort sträng:" -#: gitk:2304 gitk:4780 +#: gitk:2325 gitk:4826 msgid "changing lines matching:" msgstr "ändrar rader som matchar:" -#: gitk:2313 gitk:2315 gitk:4767 +#: gitk:2334 gitk:2336 gitk:4813 msgid "Exact" msgstr "Exakt" -#: gitk:2315 gitk:4855 gitk:6724 +#: gitk:2336 gitk:4901 gitk:6770 msgid "IgnCase" msgstr "IgnVersaler" -#: gitk:2315 gitk:4737 gitk:4853 gitk:6720 +#: gitk:2336 gitk:4783 gitk:4899 gitk:6766 msgid "Regexp" msgstr "Reg.uttr." -#: gitk:2317 gitk:2318 gitk:4875 gitk:4905 gitk:4912 gitk:6849 gitk:6917 +#: gitk:2338 gitk:2339 gitk:4921 gitk:4951 gitk:4958 gitk:6895 gitk:6963 msgid "All fields" msgstr "Alla fält" -#: gitk:2318 gitk:4872 gitk:4905 gitk:6787 +#: gitk:2339 gitk:4918 gitk:4951 gitk:6833 msgid "Headline" msgstr "Rubrik" -#: gitk:2319 gitk:4872 gitk:6787 gitk:6917 gitk:7390 +#: gitk:2340 gitk:4918 gitk:6833 gitk:6963 gitk:7471 msgid "Comments" msgstr "Kommentarer" -#: gitk:2319 gitk:4872 gitk:4877 gitk:4912 gitk:6787 gitk:7325 gitk:8831 -#: gitk:8846 +#: gitk:2340 gitk:4918 gitk:4923 gitk:4958 gitk:6833 gitk:7406 gitk:8917 +#: gitk:8932 msgid "Author" msgstr "Författare" -#: gitk:2319 gitk:4872 gitk:6787 gitk:7327 +#: gitk:2340 gitk:4918 gitk:6833 gitk:7408 msgid "Committer" msgstr "Incheckare" -#: gitk:2350 +#: gitk:2374 msgid "Search" msgstr "Sök" -#: gitk:2358 +#: gitk:2382 msgid "Diff" msgstr "Diff" -#: gitk:2360 +#: gitk:2384 msgid "Old version" msgstr "Gammal version" -#: gitk:2362 +#: gitk:2386 msgid "New version" msgstr "Ny version" -#: gitk:2364 +#: gitk:2389 msgid "Lines of context" msgstr "Rader sammanhang" -#: gitk:2374 +#: gitk:2399 msgid "Ignore space change" msgstr "Ignorera ändringar i blanksteg" -#: gitk:2378 gitk:2380 gitk:7960 gitk:8207 +#: gitk:2403 gitk:2405 gitk:8041 gitk:8293 msgid "Line diff" msgstr "Rad-diff" -#: gitk:2445 +#: gitk:2478 msgid "Patch" msgstr "Patch" -#: gitk:2447 +#: gitk:2480 msgid "Tree" msgstr "Träd" -#: gitk:2617 gitk:2638 +#: gitk:2650 gitk:2671 msgid "Diff this -> selected" msgstr "Diff denna -> markerad" -#: gitk:2618 gitk:2639 +#: gitk:2651 gitk:2672 msgid "Diff selected -> this" msgstr "Diff markerad -> denna" -#: gitk:2619 gitk:2640 +#: gitk:2652 gitk:2673 msgid "Make patch" msgstr "Skapa patch" -#: gitk:2620 gitk:9255 +#: gitk:2653 gitk:9341 msgid "Create tag" msgstr "Skapa tagg" -#: gitk:2621 -msgid "Copy commit summary" -msgstr "Kopiera incheckningssammanfattning" +#: gitk:2654 +msgid "Copy commit reference" +msgstr "Kopiera incheckningsreferens" -#: gitk:2622 gitk:9386 +#: gitk:2655 gitk:9472 msgid "Write commit to file" msgstr "Skriv incheckning till fil" -#: gitk:2623 gitk:9443 +#: gitk:2656 msgid "Create new branch" msgstr "Skapa ny gren" -#: gitk:2624 +#: gitk:2657 msgid "Cherry-pick this commit" msgstr "Plocka denna incheckning" -#: gitk:2625 +#: gitk:2658 msgid "Reset HEAD branch to here" msgstr "Ã…terställ HEAD-grenen hit" -#: gitk:2626 +#: gitk:2659 msgid "Mark this commit" msgstr "Markera denna incheckning" -#: gitk:2627 +#: gitk:2660 msgid "Return to mark" msgstr "Ã…tergÃ¥ till markering" -#: gitk:2628 +#: gitk:2661 msgid "Find descendant of this and mark" msgstr "Hitta efterföljare till denna och markera" -#: gitk:2629 +#: gitk:2662 msgid "Compare with marked commit" msgstr "Jämför med markerad incheckning" -#: gitk:2630 gitk:2641 +#: gitk:2663 gitk:2674 msgid "Diff this -> marked commit" msgstr "Diff denna -> markerad incheckning" -#: gitk:2631 gitk:2642 +#: gitk:2664 gitk:2675 msgid "Diff marked commit -> this" msgstr "Diff markerad incheckning -> denna" -#: gitk:2632 +#: gitk:2665 msgid "Revert this commit" msgstr "Ã…ngra denna incheckning" -#: gitk:2648 +#: gitk:2681 msgid "Check out this branch" msgstr "Checka ut denna gren" -#: gitk:2649 +#: gitk:2682 +msgid "Rename this branch" +msgstr "Byt namn pÃ¥ denna gren" + +#: gitk:2683 msgid "Remove this branch" msgstr "Ta bort denna gren" -#: gitk:2650 +#: gitk:2684 msgid "Copy branch name" msgstr "Kopiera namn pÃ¥ gren" -#: gitk:2657 +#: gitk:2691 msgid "Highlight this too" msgstr "Markera även detta" -#: gitk:2658 +#: gitk:2692 msgid "Highlight this only" msgstr "Markera bara detta" -#: gitk:2659 +#: gitk:2693 msgid "External diff" msgstr "Extern diff" -#: gitk:2660 +#: gitk:2694 msgid "Blame parent commit" msgstr "Klandra föräldraincheckning" -#: gitk:2661 +#: gitk:2695 msgid "Copy path" msgstr "Kopiera sökväg" -#: gitk:2668 +#: gitk:2702 msgid "Show origin of this line" msgstr "Visa ursprunget för den här raden" -#: gitk:2669 +#: gitk:2703 msgid "Run git gui blame on this line" msgstr "Kör git gui blame pÃ¥ den här raden" -#: gitk:3013 +#: gitk:3057 msgid "About gitk" msgstr "Om gitk" -#: gitk:3015 +#: gitk:3059 msgid "" "\n" "Gitk - a commit viewer for git\n" @@ -385,525 +389,529 @@ msgstr "" "\n" "Använd och vidareförmedla enligt villkoren i GNU General Public License" -#: gitk:3023 gitk:3090 gitk:9872 +#: gitk:3067 gitk:3134 gitk:10062 msgid "Close" msgstr "Stäng" -#: gitk:3044 +#: gitk:3088 msgid "Gitk key bindings" msgstr "Tangentbordsbindningar för Gitk" -#: gitk:3047 +#: gitk:3091 msgid "Gitk key bindings:" msgstr "Tangentbordsbindningar för Gitk:" -#: gitk:3049 +#: gitk:3093 #, tcl-format msgid "<%s-Q>\t\tQuit" msgstr "<%s-Q>\t\tAvsluta" -#: gitk:3050 +#: gitk:3094 #, tcl-format msgid "<%s-W>\t\tClose window" msgstr "<%s-W>\t\tStäng fönster" -#: gitk:3051 +#: gitk:3095 msgid "<Home>\t\tMove to first commit" msgstr "<Home>\t\tGÃ¥ till första incheckning" -#: gitk:3052 +#: gitk:3096 msgid "<End>\t\tMove to last commit" msgstr "<End>\t\tGÃ¥ till sista incheckning" -#: gitk:3053 +#: gitk:3097 msgid "<Up>, p, k\tMove up one commit" msgstr "<Upp>, p, k\tGÃ¥ en incheckning upp" -#: gitk:3054 +#: gitk:3098 msgid "<Down>, n, j\tMove down one commit" msgstr "<Ned>, n, j\tGÃ¥ en incheckning ned" -#: gitk:3055 +#: gitk:3099 msgid "<Left>, z, h\tGo back in history list" msgstr "<Vänster>, z, h\tGÃ¥ bakÃ¥t i historiken" -#: gitk:3056 +#: gitk:3100 msgid "<Right>, x, l\tGo forward in history list" msgstr "<Höger>, x, l\tGÃ¥ framÃ¥t i historiken" -#: gitk:3057 +#: gitk:3101 #, tcl-format msgid "<%s-n>\tGo to n-th parent of current commit in history list" msgstr "<%s-n>\tGÃ¥ till aktuell inchecknings n:te förälder i historielistan" -#: gitk:3058 +#: gitk:3102 msgid "<PageUp>\tMove up one page in commit list" msgstr "<PageUp>\tGÃ¥ upp en sida i incheckningslistan" -#: gitk:3059 +#: gitk:3103 msgid "<PageDown>\tMove down one page in commit list" msgstr "<PageDown>\tGÃ¥ ned en sida i incheckningslistan" -#: gitk:3060 +#: gitk:3104 #, tcl-format msgid "<%s-Home>\tScroll to top of commit list" msgstr "<%s-Home>\tRulla till början av incheckningslistan" -#: gitk:3061 +#: gitk:3105 #, tcl-format msgid "<%s-End>\tScroll to bottom of commit list" msgstr "<%s-End>\tRulla till slutet av incheckningslistan" -#: gitk:3062 +#: gitk:3106 #, tcl-format msgid "<%s-Up>\tScroll commit list up one line" msgstr "<%s-Upp>\tRulla incheckningslistan upp ett steg" -#: gitk:3063 +#: gitk:3107 #, tcl-format msgid "<%s-Down>\tScroll commit list down one line" msgstr "<%s-Ned>\tRulla incheckningslistan ned ett steg" -#: gitk:3064 +#: gitk:3108 #, tcl-format msgid "<%s-PageUp>\tScroll commit list up one page" msgstr "<%s-PageUp>\tRulla incheckningslistan upp en sida" -#: gitk:3065 +#: gitk:3109 #, tcl-format msgid "<%s-PageDown>\tScroll commit list down one page" msgstr "<%s-PageDown>\tRulla incheckningslistan ned en sida" -#: gitk:3066 +#: gitk:3110 msgid "<Shift-Up>\tFind backwards (upwards, later commits)" msgstr "<Skift-Upp>\tSök bakÃ¥t (uppÃ¥t, senare incheckningar)" -#: gitk:3067 +#: gitk:3111 msgid "<Shift-Down>\tFind forwards (downwards, earlier commits)" msgstr "<Skift-Ned>\tSök framÃ¥t (nedÃ¥t, tidigare incheckningar)" -#: gitk:3068 +#: gitk:3112 msgid "<Delete>, b\tScroll diff view up one page" msgstr "<Delete>, b\tRulla diffvisningen upp en sida" -#: gitk:3069 +#: gitk:3113 msgid "<Backspace>\tScroll diff view up one page" msgstr "<Baksteg>\tRulla diffvisningen upp en sida" -#: gitk:3070 +#: gitk:3114 msgid "<Space>\t\tScroll diff view down one page" msgstr "<Blanksteg>\tRulla diffvisningen ned en sida" -#: gitk:3071 +#: gitk:3115 msgid "u\t\tScroll diff view up 18 lines" msgstr "u\t\tRulla diffvisningen upp 18 rader" -#: gitk:3072 +#: gitk:3116 msgid "d\t\tScroll diff view down 18 lines" msgstr "d\t\tRulla diffvisningen ned 18 rader" -#: gitk:3073 +#: gitk:3117 #, tcl-format msgid "<%s-F>\t\tFind" msgstr "<%s-F>\t\tSök" -#: gitk:3074 +#: gitk:3118 #, tcl-format msgid "<%s-G>\t\tMove to next find hit" msgstr "<%s-G>\t\tGÃ¥ till nästa sökträff" -#: gitk:3075 +#: gitk:3119 msgid "<Return>\tMove to next find hit" msgstr "<Return>\t\tGÃ¥ till nästa sökträff" -#: gitk:3076 +#: gitk:3120 msgid "g\t\tGo to commit" msgstr "g\t\tGÃ¥ till incheckning" -#: gitk:3077 +#: gitk:3121 msgid "/\t\tFocus the search box" msgstr "/\t\tFokusera sökrutan" -#: gitk:3078 +#: gitk:3122 msgid "?\t\tMove to previous find hit" msgstr "?\t\tGÃ¥ till föregÃ¥ende sökträff" -#: gitk:3079 +#: gitk:3123 msgid "f\t\tScroll diff view to next file" msgstr "f\t\tRulla diffvisningen till nästa fil" -#: gitk:3080 +#: gitk:3124 #, tcl-format msgid "<%s-S>\t\tSearch for next hit in diff view" msgstr "<%s-S>\t\tGÃ¥ till nästa sökträff i diffvisningen" -#: gitk:3081 +#: gitk:3125 #, tcl-format msgid "<%s-R>\t\tSearch for previous hit in diff view" msgstr "<%s-R>\t\tGÃ¥ till föregÃ¥ende sökträff i diffvisningen" -#: gitk:3082 +#: gitk:3126 #, tcl-format msgid "<%s-KP+>\tIncrease font size" msgstr "<%s-Num+>\tÖka teckenstorlek" -#: gitk:3083 +#: gitk:3127 #, tcl-format msgid "<%s-plus>\tIncrease font size" msgstr "<%s-plus>\tÖka teckenstorlek" -#: gitk:3084 +#: gitk:3128 #, tcl-format msgid "<%s-KP->\tDecrease font size" msgstr "<%s-Num->\tMinska teckenstorlek" -#: gitk:3085 +#: gitk:3129 #, tcl-format msgid "<%s-minus>\tDecrease font size" msgstr "<%s-minus>\tMinska teckenstorlek" -#: gitk:3086 +#: gitk:3130 msgid "<F5>\t\tUpdate" msgstr "<F5>\t\tUppdatera" -#: gitk:3551 gitk:3560 +#: gitk:3597 gitk:3606 #, tcl-format msgid "Error creating temporary directory %s:" msgstr "Fel vid skapande av temporär katalog %s:" -#: gitk:3573 +#: gitk:3619 #, tcl-format msgid "Error getting \"%s\" from %s:" -msgstr "Fel vid hämtning av \"%s\" frÃ¥n %s:" +msgstr "Fel vid hämtning av â€%s†frÃ¥n %s:" -#: gitk:3636 +#: gitk:3682 msgid "command failed:" msgstr "kommando misslyckades:" -#: gitk:3785 +#: gitk:3831 msgid "No such commit" msgstr "Incheckning saknas" -#: gitk:3799 +#: gitk:3845 msgid "git gui blame: command failed:" msgstr "git gui blame: kommando misslyckades:" -#: gitk:3830 +#: gitk:3876 #, tcl-format msgid "Couldn't read merge head: %s" msgstr "Kunde inte läsa sammanslagningshuvud: %s" -#: gitk:3838 +#: gitk:3884 #, tcl-format msgid "Error reading index: %s" msgstr "Fel vid läsning av index: %s" -#: gitk:3863 +#: gitk:3909 #, tcl-format msgid "Couldn't start git blame: %s" msgstr "Kunde inte starta git blame: %s" -#: gitk:3866 gitk:6755 +#: gitk:3912 gitk:6801 msgid "Searching" msgstr "Söker" -#: gitk:3898 +#: gitk:3944 #, tcl-format msgid "Error running git blame: %s" msgstr "Fel vid körning av git blame: %s" -#: gitk:3926 +#: gitk:3972 #, tcl-format msgid "That line comes from commit %s, which is not in this view" msgstr "Raden kommer frÃ¥n incheckningen %s, som inte finns i denna vy" -#: gitk:3940 +#: gitk:3986 msgid "External diff viewer failed:" msgstr "Externt diff-verktyg misslyckades:" -#: gitk:4044 +#: gitk:4090 msgid "All files" msgstr "Alla filer" -#: gitk:4068 +#: gitk:4114 msgid "View" msgstr "Visa" -#: gitk:4071 +#: gitk:4117 msgid "Gitk view definition" msgstr "Definition av Gitk-vy" -#: gitk:4075 +#: gitk:4121 msgid "Remember this view" msgstr "Spara denna vy" -#: gitk:4076 +#: gitk:4122 msgid "References (space separated list):" msgstr "Referenser (blankstegsavdelad lista):" -#: gitk:4077 +#: gitk:4123 msgid "Branches & tags:" msgstr "Grenar & taggar:" -#: gitk:4078 +#: gitk:4124 msgid "All refs" msgstr "Alla referenser" -#: gitk:4079 +#: gitk:4125 msgid "All (local) branches" msgstr "Alla (lokala) grenar" -#: gitk:4080 +#: gitk:4126 msgid "All tags" msgstr "Alla taggar" -#: gitk:4081 +#: gitk:4127 msgid "All remote-tracking branches" msgstr "Alla fjärrspÃ¥rande grenar" -#: gitk:4082 +#: gitk:4128 msgid "Commit Info (regular expressions):" msgstr "Incheckningsinfo (reguljära uttryck):" -#: gitk:4083 +#: gitk:4129 msgid "Author:" msgstr "Författare:" -#: gitk:4084 +#: gitk:4130 msgid "Committer:" msgstr "Incheckare:" -#: gitk:4085 +#: gitk:4131 msgid "Commit Message:" msgstr "Incheckningsmeddelande:" -#: gitk:4086 +#: gitk:4132 msgid "Matches all Commit Info criteria" msgstr "Motsvarar alla kriterier för incheckningsinfo" -#: gitk:4087 +#: gitk:4133 msgid "Matches no Commit Info criteria" msgstr "Motsvarar inga kriterier för incheckningsinfo" -#: gitk:4088 +#: gitk:4134 msgid "Changes to Files:" msgstr "Ändringar av filer:" -#: gitk:4089 +#: gitk:4135 msgid "Fixed String" msgstr "Fast sträng" -#: gitk:4090 +#: gitk:4136 msgid "Regular Expression" msgstr "Reguljärt uttryck" -#: gitk:4091 +#: gitk:4137 msgid "Search string:" msgstr "Söksträng:" -#: gitk:4092 +#: gitk:4138 msgid "" "Commit Dates (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March 17, 2009 " "15:27:38\"):" msgstr "" -"Incheckingsdatum (\"2 weeks ago\", \"2009-03-17 15:27:38\", \"March 17, 2009 " -"15:27:38\"):" +"Incheckningsdatum (â€2 weeks agoâ€, â€2009-03-17 15:27:38â€, â€March 17, 2009 " +"15:27:38â€):" -#: gitk:4093 +#: gitk:4139 msgid "Since:" msgstr "FrÃ¥n:" -#: gitk:4094 +#: gitk:4140 msgid "Until:" msgstr "Till:" -#: gitk:4095 +#: gitk:4141 msgid "Limit and/or skip a number of revisions (positive integer):" msgstr "Begränsa och/eller hoppa över ett antal revisioner (positivt heltal):" -#: gitk:4096 +#: gitk:4142 msgid "Number to show:" msgstr "Antal att visa:" -#: gitk:4097 +#: gitk:4143 msgid "Number to skip:" msgstr "Antal att hoppa över:" -#: gitk:4098 +#: gitk:4144 msgid "Miscellaneous options:" msgstr "Diverse alternativ:" -#: gitk:4099 +#: gitk:4145 msgid "Strictly sort by date" msgstr "Strikt datumsortering" -#: gitk:4100 +#: gitk:4146 msgid "Mark branch sides" msgstr "Markera sidogrenar" -#: gitk:4101 +#: gitk:4147 msgid "Limit to first parent" msgstr "Begränsa till första förälder" -#: gitk:4102 +#: gitk:4148 msgid "Simple history" msgstr "Enkel historik" -#: gitk:4103 +#: gitk:4149 msgid "Additional arguments to git log:" msgstr "Ytterligare argument till git log:" -#: gitk:4104 +#: gitk:4150 msgid "Enter files and directories to include, one per line:" msgstr "Ange filer och kataloger att ta med, en per rad:" -#: gitk:4105 +#: gitk:4151 msgid "Command to generate more commits to include:" msgstr "Kommando för att generera fler incheckningar att ta med:" -#: gitk:4229 +#: gitk:4275 msgid "Gitk: edit view" msgstr "Gitk: redigera vy" -#: gitk:4237 +#: gitk:4283 msgid "-- criteria for selecting revisions" msgstr " - kriterier för val av revisioner" -#: gitk:4242 +#: gitk:4288 msgid "View Name" msgstr "Namn pÃ¥ vy" -#: gitk:4317 +#: gitk:4363 msgid "Apply (F5)" msgstr "Använd (F5)" -#: gitk:4355 +#: gitk:4401 msgid "Error in commit selection arguments:" msgstr "Fel i argument för val av incheckningar:" -#: gitk:4410 gitk:4463 gitk:4925 gitk:4939 gitk:6209 gitk:12388 gitk:12389 +#: gitk:4456 gitk:4509 gitk:4971 gitk:4985 gitk:6255 gitk:12615 gitk:12616 msgid "None" msgstr "Inget" -#: gitk:5022 gitk:5027 +#: gitk:5068 gitk:5073 msgid "Descendant" msgstr "Avkomling" -#: gitk:5023 +#: gitk:5069 msgid "Not descendant" msgstr "Inte avkomling" -#: gitk:5030 gitk:5035 +#: gitk:5076 gitk:5081 msgid "Ancestor" msgstr "Förfader" -#: gitk:5031 +#: gitk:5077 msgid "Not ancestor" msgstr "Inte förfader" -#: gitk:5325 +#: gitk:5371 msgid "Local changes checked in to index but not committed" msgstr "Lokala ändringar sparade i indexet men inte incheckade" -#: gitk:5361 +#: gitk:5407 msgid "Local uncommitted changes, not checked in to index" msgstr "Lokala ändringar, ej sparade i indexet" -#: gitk:7135 +#: gitk:7155 +msgid "Error starting web browser:" +msgstr "Fel när webbläsaren skulle startas:" + +#: gitk:7216 msgid "and many more" msgstr "med mÃ¥nga flera" -#: gitk:7138 +#: gitk:7219 msgid "many" msgstr "mÃ¥nga" -#: gitk:7329 +#: gitk:7410 msgid "Tags:" msgstr "Taggar:" -#: gitk:7346 gitk:7352 gitk:8826 +#: gitk:7427 gitk:7433 gitk:8912 msgid "Parent" msgstr "Förälder" -#: gitk:7357 +#: gitk:7438 msgid "Child" msgstr "Barn" -#: gitk:7366 +#: gitk:7447 msgid "Branch" msgstr "Gren" -#: gitk:7369 +#: gitk:7450 msgid "Follows" msgstr "Följer" -#: gitk:7372 +#: gitk:7453 msgid "Precedes" msgstr "FöregÃ¥r" -#: gitk:7967 +#: gitk:8048 #, tcl-format msgid "Error getting diffs: %s" msgstr "Fel vid hämtning av diff: %s" -#: gitk:8651 +#: gitk:8737 msgid "Goto:" msgstr "GÃ¥ till:" -#: gitk:8672 +#: gitk:8758 #, tcl-format msgid "Short SHA1 id %s is ambiguous" msgstr "Förkortat SHA1-id %s är tvetydigt" -#: gitk:8679 +#: gitk:8765 #, tcl-format msgid "Revision %s is not known" msgstr "Revisionen %s är inte känd" -#: gitk:8689 +#: gitk:8775 #, tcl-format msgid "SHA1 id %s is not known" msgstr "SHA-id:t %s är inte känt" -#: gitk:8691 +#: gitk:8777 #, tcl-format msgid "Revision %s is not in the current view" msgstr "Revisionen %s finns inte i den nuvarande vyn" -#: gitk:8833 gitk:8848 +#: gitk:8919 gitk:8934 msgid "Date" msgstr "Datum" -#: gitk:8836 +#: gitk:8922 msgid "Children" msgstr "Barn" -#: gitk:8899 +#: gitk:8985 #, tcl-format msgid "Reset %s branch to here" msgstr "Ã…terställ grenen %s hit" -#: gitk:8901 +#: gitk:8987 msgid "Detached head: can't reset" msgstr "FrÃ¥nkopplad head: kan inte Ã¥terställa" -#: gitk:9006 gitk:9012 +#: gitk:9092 gitk:9098 msgid "Skipping merge commit " msgstr "Hoppar över sammanslagningsincheckning " -#: gitk:9021 gitk:9026 +#: gitk:9107 gitk:9112 msgid "Error getting patch ID for " msgstr "Fel vid hämtning av patch-id för " -#: gitk:9022 gitk:9027 +#: gitk:9108 gitk:9113 msgid " - stopping\n" msgstr " - stannar\n" -#: gitk:9032 gitk:9035 gitk:9043 gitk:9057 gitk:9066 +#: gitk:9118 gitk:9121 gitk:9129 gitk:9143 gitk:9152 msgid "Commit " msgstr "Incheckning " -#: gitk:9036 +#: gitk:9122 msgid "" " is the same patch as\n" " " @@ -911,7 +919,7 @@ msgstr "" " är samma patch som\n" " " -#: gitk:9044 +#: gitk:9130 msgid "" " differs from\n" " " @@ -919,7 +927,7 @@ msgstr "" " skiljer sig frÃ¥n\n" " " -#: gitk:9046 +#: gitk:9132 msgid "" "Diff of commits:\n" "\n" @@ -927,141 +935,158 @@ msgstr "" "Skillnad mellan incheckningar:\n" "\n" -#: gitk:9058 gitk:9067 +#: gitk:9144 gitk:9153 #, tcl-format msgid " has %s children - stopping\n" msgstr " har %s barn - stannar\n" -#: gitk:9086 +#: gitk:9172 #, tcl-format msgid "Error writing commit to file: %s" msgstr "Fel vid skrivning av incheckning till fil: %s" -#: gitk:9092 +#: gitk:9178 #, tcl-format msgid "Error diffing commits: %s" msgstr "Fel vid jämförelse av incheckningar: %s" -#: gitk:9138 +#: gitk:9224 msgid "Top" msgstr "Topp" -#: gitk:9139 +#: gitk:9225 msgid "From" msgstr "FrÃ¥n" -#: gitk:9144 +#: gitk:9230 msgid "To" msgstr "Till" -#: gitk:9168 +#: gitk:9254 msgid "Generate patch" msgstr "Generera patch" -#: gitk:9170 +#: gitk:9256 msgid "From:" msgstr "FrÃ¥n:" -#: gitk:9179 +#: gitk:9265 msgid "To:" msgstr "Till:" -#: gitk:9188 +#: gitk:9274 msgid "Reverse" msgstr "Vänd" -#: gitk:9190 gitk:9400 +#: gitk:9276 gitk:9486 msgid "Output file:" msgstr "Utdatafil:" -#: gitk:9196 +#: gitk:9282 msgid "Generate" msgstr "Generera" -#: gitk:9234 +#: gitk:9320 msgid "Error creating patch:" msgstr "Fel vid generering av patch:" -#: gitk:9257 gitk:9388 gitk:9445 +#: gitk:9343 gitk:9474 gitk:9562 msgid "ID:" msgstr "Id:" -#: gitk:9266 +#: gitk:9352 msgid "Tag name:" msgstr "Taggnamn:" -#: gitk:9269 +#: gitk:9355 msgid "Tag message is optional" msgstr "Taggmeddelandet är valfritt" -#: gitk:9271 +#: gitk:9357 msgid "Tag message:" msgstr "Taggmeddelande:" -#: gitk:9275 gitk:9454 +#: gitk:9361 gitk:9532 msgid "Create" msgstr "Skapa" -#: gitk:9293 +#: gitk:9379 msgid "No tag name specified" msgstr "Inget taggnamn angavs" -#: gitk:9297 +#: gitk:9383 #, tcl-format msgid "Tag \"%s\" already exists" -msgstr "Taggen \"%s\" finns redan" +msgstr "Taggen â€%s†finns redan" -#: gitk:9307 +#: gitk:9393 msgid "Error creating tag:" msgstr "Fel vid skapande av tagg:" -#: gitk:9397 +#: gitk:9483 msgid "Command:" msgstr "Kommando:" -#: gitk:9405 +#: gitk:9491 msgid "Write" msgstr "Skriv" -#: gitk:9423 +#: gitk:9509 msgid "Error writing commit:" msgstr "Fel vid skrivning av incheckning:" -#: gitk:9450 +#: gitk:9531 +msgid "Create branch" +msgstr "Skapa gren" + +#: gitk:9547 +#, tcl-format +msgid "Rename branch %s" +msgstr "Byt namn pÃ¥ grenen %s" + +#: gitk:9548 +msgid "Rename" +msgstr "Byt namn" + +#: gitk:9572 msgid "Name:" msgstr "Namn:" -#: gitk:9473 +#: gitk:9596 msgid "Please specify a name for the new branch" msgstr "Ange ett namn för den nya grenen" -#: gitk:9478 +#: gitk:9601 #, tcl-format msgid "Branch '%s' already exists. Overwrite?" -msgstr "Grenen \"%s\" finns redan. Skriva över?" +msgstr "Grenen â€%s†finns redan. Skriva över?" + +#: gitk:9645 +msgid "Please specify a new name for the branch" +msgstr "Ange ett nytt namn för grenen" -#: gitk:9545 +#: gitk:9708 #, tcl-format msgid "Commit %s is already included in branch %s -- really re-apply it?" msgstr "" "Incheckningen %s finns redan pÃ¥ grenen %s -- skall den verkligen appliceras " "pÃ¥ nytt?" -#: gitk:9550 +#: gitk:9713 msgid "Cherry-picking" msgstr "Plockar" -#: gitk:9559 +#: gitk:9722 #, tcl-format msgid "" "Cherry-pick failed because of local changes to file '%s'.\n" "Please commit, reset or stash your changes and try again." msgstr "" -"Cherry-pick misslyckades pÃ¥ grund av lokala ändringar i filen \"%s\".\n" +"Cherry-pick misslyckades pÃ¥ grund av lokala ändringar i filen â€%sâ€.\n" "Checka in, Ã¥terställ eller spara undan (stash) dina ändringar och försök " "igen." -#: gitk:9565 +#: gitk:9728 msgid "" "Cherry-pick failed because of merge conflict.\n" "Do you wish to run git citool to resolve it?" @@ -1069,20 +1094,20 @@ msgstr "" "Cherry-pick misslyckades pÃ¥ grund av en sammanslagningskonflikt.\n" "Vill du köra git citool för att lösa den?" -#: gitk:9581 gitk:9639 +#: gitk:9744 gitk:9802 msgid "No changes committed" msgstr "Inga ändringar incheckade" -#: gitk:9608 +#: gitk:9771 #, tcl-format msgid "Commit %s is not included in branch %s -- really revert it?" msgstr "Incheckningen %s finns inte pÃ¥ grenen %s -- vill du verkligen Ã¥ngra?" -#: gitk:9613 +#: gitk:9776 msgid "Reverting" msgstr "Ã…ngrar" -#: gitk:9621 +#: gitk:9784 #, tcl-format msgid "" "Revert failed because of local changes to the following files:%s Please " @@ -1092,7 +1117,7 @@ msgstr "" "Checka in, Ã¥terställ eller spara undan (stash) dina ändringar och försök " "igen." -#: gitk:9625 +#: gitk:9788 msgid "" "Revert failed because of merge conflict.\n" " Do you wish to run git citool to resolve it?" @@ -1100,28 +1125,28 @@ msgstr "" "Misslyckades med att Ã¥ngra pÃ¥ grund av en sammanslagningskonflikt.\n" " Vill du köra git citool för att lösa den?" -#: gitk:9668 +#: gitk:9831 msgid "Confirm reset" msgstr "Bekräfta Ã¥terställning" -#: gitk:9670 +#: gitk:9833 #, tcl-format msgid "Reset branch %s to %s?" msgstr "Ã…terställa grenen %s till %s?" -#: gitk:9672 +#: gitk:9835 msgid "Reset type:" msgstr "Typ av Ã¥terställning:" -#: gitk:9675 +#: gitk:9838 msgid "Soft: Leave working tree and index untouched" msgstr "Mjuk: Rör inte utcheckning och index" -#: gitk:9678 +#: gitk:9841 msgid "Mixed: Leave working tree untouched, reset index" msgstr "Blandad: Rör inte utcheckning, Ã¥terställ index" -#: gitk:9681 +#: gitk:9844 msgid "" "Hard: Reset working tree and index\n" "(discard ALL local changes)" @@ -1129,19 +1154,24 @@ msgstr "" "HÃ¥rd: Ã…terställ utcheckning och index\n" "(förkastar ALLA lokala ändringar)" -#: gitk:9698 +#: gitk:9861 msgid "Resetting" msgstr "Ã…terställer" -#: gitk:9758 +#: gitk:9934 +#, tcl-format +msgid "A local branch named %s exists already" +msgstr "Det finns redan en lokal gren som heter %s" + +#: gitk:9942 msgid "Checking out" msgstr "Checkar ut" -#: gitk:9811 +#: gitk:10001 msgid "Cannot delete the currently checked-out branch" msgstr "Kan inte ta bort den just nu utcheckade grenen" -#: gitk:9817 +#: gitk:10007 #, tcl-format msgid "" "The commits on branch %s aren't on any other branch.\n" @@ -1150,16 +1180,16 @@ msgstr "" "Incheckningarna pÃ¥ grenen %s existerar inte pÃ¥ nÃ¥gon annan gren.\n" "Vill du verkligen ta bort grenen %s?" -#: gitk:9848 +#: gitk:10038 #, tcl-format msgid "Tags and heads: %s" msgstr "Taggar och huvuden: %s" -#: gitk:9865 +#: gitk:10055 msgid "Filter" msgstr "Filter" -#: gitk:10161 +#: gitk:10356 msgid "" "Error reading commit topology information; branch and preceding/following " "tag information will be incomplete." @@ -1167,201 +1197,221 @@ msgstr "" "Fel vid läsning av information om incheckningstopologi; information om " "grenar och föregÃ¥ende/senare taggar kommer inte vara komplett." -#: gitk:11138 +#: gitk:11333 msgid "Tag" msgstr "Tagg" -#: gitk:11142 +#: gitk:11337 msgid "Id" msgstr "Id" -#: gitk:11225 +#: gitk:11420 msgid "Gitk font chooser" msgstr "Teckensnittsväljare för Gitk" -#: gitk:11242 +#: gitk:11437 msgid "B" msgstr "F" -#: gitk:11245 +#: gitk:11440 msgid "I" msgstr "K" -#: gitk:11363 +#: gitk:11558 msgid "Commit list display options" msgstr "Alternativ för incheckningslistvy" -#: gitk:11366 +#: gitk:11561 msgid "Maximum graph width (lines)" msgstr "Maximal grafbredd (rader)" -#: gitk:11370 +#: gitk:11565 #, no-tcl-format msgid "Maximum graph width (% of pane)" msgstr "Maximal grafbredd (% av ruta)" -#: gitk:11373 +#: gitk:11568 msgid "Show local changes" msgstr "Visa lokala ändringar" -#: gitk:11376 +#: gitk:11571 msgid "Auto-select SHA1 (length)" msgstr "Välj SHA1 (längd) automatiskt" -#: gitk:11380 +#: gitk:11575 msgid "Hide remote refs" msgstr "Dölj fjärr-referenser" -#: gitk:11384 +#: gitk:11579 msgid "Diff display options" msgstr "Alternativ för diffvy" -#: gitk:11386 +#: gitk:11581 msgid "Tab spacing" msgstr "Blanksteg för tabulatortecken" -#: gitk:11389 +#: gitk:11584 msgid "Display nearby tags/heads" msgstr "Visa närliggande taggar/huvuden" -#: gitk:11392 +#: gitk:11587 msgid "Maximum # tags/heads to show" msgstr "Maximalt antal taggar/huvuden att visa" -#: gitk:11395 +#: gitk:11590 msgid "Limit diffs to listed paths" msgstr "Begränsa diff till listade sökvägar" -#: gitk:11398 +#: gitk:11593 msgid "Support per-file encodings" msgstr "Stöd för filspecifika teckenkodningar" -#: gitk:11404 gitk:11551 +#: gitk:11599 gitk:11766 msgid "External diff tool" msgstr "Externt diff-verktyg" -#: gitk:11405 +#: gitk:11600 msgid "Choose..." msgstr "Välj..." -#: gitk:11410 +#: gitk:11607 +msgid "Web browser" +msgstr "Webbläsare" + +#: gitk:11612 msgid "General options" msgstr "Allmänna inställningar" -#: gitk:11413 +#: gitk:11615 msgid "Use themed widgets" msgstr "Använd tema pÃ¥ fönsterelement" -#: gitk:11415 +#: gitk:11617 msgid "(change requires restart)" msgstr "(ändringen kräver omstart)" -#: gitk:11417 +#: gitk:11619 msgid "(currently unavailable)" msgstr "(för närvarande inte tillgängligt)" -#: gitk:11428 +#: gitk:11631 msgid "Colors: press to choose" msgstr "Färger: tryck för att välja" -#: gitk:11431 +#: gitk:11634 msgid "Interface" msgstr "Gränssnitt" -#: gitk:11432 +#: gitk:11635 msgid "interface" msgstr "gränssnitt" -#: gitk:11435 +#: gitk:11638 msgid "Background" msgstr "Bakgrund" -#: gitk:11436 gitk:11466 +#: gitk:11639 gitk:11681 msgid "background" msgstr "bakgrund" -#: gitk:11439 +#: gitk:11642 msgid "Foreground" msgstr "Förgrund" -#: gitk:11440 +#: gitk:11643 msgid "foreground" msgstr "förgrund" -#: gitk:11443 +#: gitk:11646 msgid "Diff: old lines" msgstr "Diff: gamla rader" -#: gitk:11444 +#: gitk:11647 msgid "diff old lines" msgstr "diff gamla rader" -#: gitk:11448 +#: gitk:11651 +msgid "Diff: old lines bg" +msgstr "Diff: gamla rader bg" + +#: gitk:11653 +msgid "diff old lines bg" +msgstr "diff gamla rader bg" + +#: gitk:11657 msgid "Diff: new lines" msgstr "Diff: nya rader" -#: gitk:11449 +#: gitk:11658 msgid "diff new lines" msgstr "diff nya rader" -#: gitk:11453 +#: gitk:11662 +msgid "Diff: new lines bg" +msgstr "Diff: nya rader bg" + +#: gitk:11664 +msgid "diff new lines bg" +msgstr "diff nya rader bg" + +#: gitk:11668 msgid "Diff: hunk header" msgstr "Diff: delhuvud" -#: gitk:11455 +#: gitk:11670 msgid "diff hunk header" msgstr "diff delhuvud" -#: gitk:11459 +#: gitk:11674 msgid "Marked line bg" msgstr "Markerad rad bakgrund" -#: gitk:11461 +#: gitk:11676 msgid "marked line background" msgstr "markerad rad bakgrund" -#: gitk:11465 +#: gitk:11680 msgid "Select bg" msgstr "Markerad bakgrund" -#: gitk:11474 +#: gitk:11689 msgid "Fonts: press to choose" msgstr "Teckensnitt: tryck för att välja" -#: gitk:11476 +#: gitk:11691 msgid "Main font" msgstr "Huvudteckensnitt" -#: gitk:11477 +#: gitk:11692 msgid "Diff display font" msgstr "Teckensnitt för diffvisning" -#: gitk:11478 +#: gitk:11693 msgid "User interface font" msgstr "Teckensnitt för användargränssnitt" -#: gitk:11500 +#: gitk:11715 msgid "Gitk preferences" msgstr "Inställningar för Gitk" -#: gitk:11509 +#: gitk:11724 msgid "General" msgstr "Allmänt" -#: gitk:11510 +#: gitk:11725 msgid "Colors" msgstr "Färger" -#: gitk:11511 +#: gitk:11726 msgid "Fonts" msgstr "Teckensnitt" -#: gitk:11561 +#: gitk:11776 #, tcl-format msgid "Gitk: choose color for %s" msgstr "Gitk: välj färg för %s" -#: gitk:12074 +#: gitk:12289 msgid "" "Sorry, gitk cannot run with this version of Tcl/Tk.\n" " Gitk requires at least Tcl/Tk 8.4." @@ -1369,45 +1419,15 @@ msgstr "" "Gitk kan tyvärr inte köra med denna version av Tcl/Tk.\n" " Gitk kräver Ã¥tminstone Tcl/Tk 8.4." -#: gitk:12284 +#: gitk:12507 msgid "Cannot find a git repository here." msgstr "Hittar inget git-arkiv här." -#: gitk:12331 +#: gitk:12554 #, tcl-format msgid "Ambiguous argument '%s': both revision and filename" -msgstr "Tvetydigt argument \"%s\": bÃ¥de revision och filnamn" +msgstr "Tvetydigt argument â€%sâ€: bÃ¥de revision och filnamn" -#: gitk:12343 +#: gitk:12566 msgid "Bad arguments to gitk:" msgstr "Felaktiga argument till gitk:" - -#~ msgid "mc" -#~ msgstr "mc" - -#~ msgid "next" -#~ msgstr "nästa" - -#~ msgid "prev" -#~ msgstr "föreg" - -#~ msgid "CDate" -#~ msgstr "Skapat datum" - -#~ msgid "Cannot find the git directory \"%s\"." -#~ msgstr "Hittar inte git-katalogen \"%s\"." - -#~ msgid "SHA1 ID: " -#~ msgstr "SHA1-id: " - -#~ msgid "- stopping\n" -#~ msgstr "- stannar\n" - -#~ msgid "Tag/Head %s is not known" -#~ msgstr "Tagg/huvud %s är okänt" - -#~ msgid "/\t\tMove to next find hit, or redo find" -#~ msgstr "/\t\tGÃ¥ till nästa sökträff, eller sök pÃ¥ nytt" - -#~ msgid "Name" -#~ msgstr "Namn" diff --git a/gpg-interface.c b/gpg-interface.c index 07335987a6..0896458de5 100644 --- a/gpg-interface.c +++ b/gpg-interface.c @@ -127,9 +127,7 @@ static struct gpg_format *use_format = &gpg_format[0]; static struct gpg_format *get_format_by_name(const char *str) { - int i; - - for (i = 0; i < ARRAY_SIZE(gpg_format); i++) + for (size_t i = 0; i < ARRAY_SIZE(gpg_format); i++) if (!strcmp(gpg_format[i].name, str)) return gpg_format + i; return NULL; @@ -137,9 +135,9 @@ static struct gpg_format *get_format_by_name(const char *str) static struct gpg_format *get_format_by_sig(const char *sig) { - int i, j; + int j; - for (i = 0; i < ARRAY_SIZE(gpg_format); i++) + for (size_t i = 0; i < ARRAY_SIZE(gpg_format); i++) for (j = 0; gpg_format[i].sigs[j]; j++) if (starts_with(sig, gpg_format[i].sigs[j])) return gpg_format + i; @@ -227,7 +225,7 @@ static void parse_gpg_output(struct signature_check *sigc) { const char *buf = sigc->gpg_status; const char *line, *next; - int i, j; + int j; int seen_exclusive_status = 0; /* Iterate over all lines */ @@ -242,7 +240,7 @@ static void parse_gpg_output(struct signature_check *sigc) continue; /* Iterate over all search strings */ - for (i = 0; i < ARRAY_SIZE(sigcheck_gpg_status); i++) { + for (size_t i = 0; i < ARRAY_SIZE(sigcheck_gpg_status); i++) { if (skip_prefix(line, sigcheck_gpg_status[i].check, &line)) { /* * GOODSIG, BADSIG etc. can occur only once for @@ -699,7 +697,7 @@ size_t parse_signed_buffer(const char *buf, size_t size) match = len; eol = memchr(buf + len, '\n', size - len); - len += eol ? eol - (buf + len) + 1 : size - len; + len += eol ? (size_t) (eol - (buf + len) + 1) : size - len; } return match; } @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "gettext.h" @@ -1,3 +1,5 @@ +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "git-compat-util.h" #include "config.h" #include "gettext.h" @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "config.h" @@ -60,8 +60,7 @@ static inline void list_config_item(struct string_list *list, #define define_list_config_array(array) \ void list_config_##array(struct string_list *list, const char *prefix) \ { \ - int i; \ - for (i = 0; i < ARRAY_SIZE(array); i++) \ + for (size_t i = 0; i < ARRAY_SIZE(array); i++) \ if (array[i]) \ list_config_item(list, prefix, array[i]); \ } \ @@ -70,11 +69,10 @@ struct string_list #define define_list_config_array_extra(array, values) \ void list_config_##array(struct string_list *list, const char *prefix) \ { \ - int i; \ static const char *extra[] = values; \ - for (i = 0; i < ARRAY_SIZE(extra); i++) \ + for (size_t i = 0; i < ARRAY_SIZE(extra); i++) \ list_config_item(list, prefix, extra[i]); \ - for (i = 0; i < ARRAY_SIZE(array); i++) \ + for (size_t i = 0; i < ARRAY_SIZE(array); i++) \ if (array[i]) \ list_config_item(list, prefix, array[i]); \ } \ @@ -7,8 +7,7 @@ static int get_hash_hex_algop(const char *hex, unsigned char *hash, const struct git_hash_algo *algop) { - int i; - for (i = 0; i < algop->rawsz; i++) { + for (size_t i = 0; i < algop->rawsz; i++) { int val = hex2chr(hex); if (val < 0) return -1; @@ -83,7 +82,6 @@ char *hash_to_hex_algop_r(char *buffer, const unsigned char *hash, { static const char hex[] = "0123456789abcdef"; char *buf = buffer; - int i; /* * Our struct object_id has been memset to 0, so default to printing @@ -92,7 +90,7 @@ char *hash_to_hex_algop_r(char *buffer, const unsigned char *hash, if (algop == &hash_algos[0]) algop = the_hash_algo; - for (i = 0; i < algop->rawsz; i++) { + for (size_t i = 0; i < algop->rawsz; i++) { unsigned int val = *hash++; *buf++ = hex[val >> 4]; *buf++ = hex[val & 0xf]; diff --git a/http-backend.c b/http-backend.c index 73eec4ea3d..33cf378282 100644 --- a/http-backend.c +++ b/http-backend.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "config.h" diff --git a/http-push.c b/http-push.c index 4d24e6b8d4..43da1c7cd3 100644 --- a/http-push.c +++ b/http-push.c @@ -1338,7 +1338,6 @@ static struct object_list **process_tree(struct tree *tree, static int get_delta(struct rev_info *revs, struct remote_lock *lock) { - int i; struct commit *commit; struct object_list **p = &objects; int count = 0; @@ -1351,7 +1350,7 @@ static int get_delta(struct rev_info *revs, struct remote_lock *lock) count += add_send_request(&commit->object, lock); } - for (i = 0; i < revs->pending.nr; i++) { + for (size_t i = 0; i < revs->pending.nr; i++) { struct object_array_entry *entry = revs->pending.objects + i; struct object *obj = entry->item; const char *name = entry->name; diff --git a/http-walker.c b/http-walker.c index 43cde0ebe5..7918ddc096 100644 --- a/http-walker.c +++ b/http-walker.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "repository.h" @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "git-curl-compat.h" diff --git a/imap-send.c b/imap-send.c index 25c68fd90d..68ab1aea83 100644 --- a/imap-send.c +++ b/imap-send.c @@ -22,6 +22,7 @@ */ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "config.h" diff --git a/json-writer.c b/json-writer.c index 25b9201f9c..8c5187e9fd 100644 --- a/json-writer.c +++ b/json-writer.c @@ -1,3 +1,5 @@ +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "git-compat-util.h" #include "json-writer.h" @@ -32,6 +32,8 @@ String Matching: An Aid to Bibliographic Search," CACM June 1975, Vol. 18, No. 6, which describes the failure function used below. */ +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "git-compat-util.h" #include "kwset.h" diff --git a/line-log.c b/line-log.c index bc67b75d10..628e3fe3ae 100644 --- a/line-log.c +++ b/line-log.c @@ -1,3 +1,5 @@ +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "git-compat-util.h" #include "diffcore.h" #include "line-range.h" diff --git a/list-objects-filter-options.c b/list-objects-filter-options.c index fa72e81e4a..948376d42d 100644 --- a/list-objects-filter-options.c +++ b/list-objects-filter-options.c @@ -394,8 +394,6 @@ void list_objects_filter_copy( struct list_objects_filter_options *dest, const struct list_objects_filter_options *src) { - int i; - /* Copy everything. We will overwrite the pointers shortly. */ memcpy(dest, src, sizeof(struct list_objects_filter_options)); @@ -404,7 +402,7 @@ void list_objects_filter_copy( dest->sparse_oid_name = xstrdup_or_null(src->sparse_oid_name); ALLOC_ARRAY(dest->sub, dest->sub_alloc); - for (i = 0; i < src->sub_nr; i++) + for (size_t i = 0; i < src->sub_nr; i++) list_objects_filter_copy(&dest->sub[i], &src->sub[i]); } diff --git a/list-objects.c b/list-objects.c index d11a389b3a..943e62e868 100644 --- a/list-objects.c +++ b/list-objects.c @@ -284,7 +284,6 @@ void mark_edges_uninteresting(struct rev_info *revs, int sparse) { struct commit_list *list; - int i; if (sparse) { struct oidset set; @@ -321,7 +320,7 @@ void mark_edges_uninteresting(struct rev_info *revs, } if (revs->edge_hint_aggressive) { - for (i = 0; i < revs->cmdline.nr; i++) { + for (size_t i = 0; i < revs->cmdline.nr; i++) { struct object *obj = revs->cmdline.rev[i].item; struct commit *commit = (struct commit *)obj; if (obj->type != OBJ_COMMIT || !(obj->flags & UNINTERESTING)) @@ -344,11 +343,9 @@ static void add_pending_tree(struct rev_info *revs, struct tree *tree) static void traverse_non_commits(struct traversal_context *ctx, struct strbuf *base) { - int i; - assert(base->len == 0); - for (i = 0; i < ctx->revs->pending.nr; i++) { + for (size_t i = 0; i < ctx->revs->pending.nr; i++) { struct object_array_entry *pending = ctx->revs->pending.objects + i; struct object *obj = pending->item; const char *name = pending->name; diff --git a/log-tree.c b/log-tree.c index 83cc4b1cfb..d08eb672a9 100644 --- a/log-tree.c +++ b/log-tree.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "commit-reach.h" @@ -53,12 +53,10 @@ static enum { */ static int ref_match(const struct strvec *prefixes, const char *refname) { - int i; - if (!prefixes->nr) return 1; /* no restriction */ - for (i = 0; i < prefixes->nr; i++) { + for (size_t i = 0; i < prefixes->nr; i++) { const char *prefix = prefixes->v[i]; if (starts_with(refname, prefix)) diff --git a/mailinfo.c b/mailinfo.c index d1f42bd7e3..aa263bf490 100644 --- a/mailinfo.c +++ b/mailinfo.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "config.h" @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "environment.h" diff --git a/match-trees.c b/match-trees.c index 147b03abf1..a1c8b91eae 100644 --- a/match-trees.c +++ b/match-trees.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "hex.h" diff --git a/mem-pool.c b/mem-pool.c index a3ba38831d..62441dcc71 100644 --- a/mem-pool.c +++ b/mem-pool.c @@ -2,6 +2,8 @@ * Memory Pool implementation logic. */ +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "git-compat-util.h" #include "mem-pool.h" #include "gettext.h" diff --git a/merge-ll.c b/merge-ll.c index 62fc625552..b2dc26da4f 100644 --- a/merge-ll.c +++ b/merge-ll.c @@ -5,6 +5,7 @@ */ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "config.h" diff --git a/merge-ort.c b/merge-ort.c index 11029c10be..46e78c3ffa 100644 --- a/merge-ort.c +++ b/merge-ort.c @@ -15,6 +15,7 @@ */ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "merge-ort.h" diff --git a/merge-recursive.c b/merge-recursive.c index ed64a4c537..5dfaf32b2c 100644 --- a/merge-recursive.c +++ b/merge-recursive.c @@ -5,6 +5,7 @@ */ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "merge-recursive.h" @@ -25,11 +25,11 @@ int try_merge_command(struct repository *r, const char *head_arg, struct commit_list *remotes) { struct child_process cmd = CHILD_PROCESS_INIT; - int i, ret; + int ret; struct commit_list *j; strvec_pushf(&cmd.args, "merge-%s", strategy); - for (i = 0; i < xopts_nr; i++) + for (size_t i = 0; i < xopts_nr; i++) strvec_pushf(&cmd.args, "--%s", xopts[i]); for (j = common; j; j = j->next) strvec_push(&cmd.args, merge_argument(j->item)); diff --git a/meson.build b/meson.build index 0dccebcdf1..0064eb64f5 100644 --- a/meson.build +++ b/meson.build @@ -201,6 +201,16 @@ if get_option('sane_tool_path') != '' script_environment.prepend('PATH', get_option('sane_tool_path')) endif +# The environment used by GIT-VERSION-GEN. Note that we explicitly override +# environment variables that might be set by the user. This is by design so +# that we always use whatever Meson has configured instead of what is present +# in the environment. +version_gen_environment = script_environment +version_gen_environment.set('GIT_BUILT_FROM_COMMIT', get_option('built_from_commit')) +version_gen_environment.set('GIT_DATE', get_option('build_date')) +version_gen_environment.set('GIT_USER_AGENT', get_option('user_agent')) +version_gen_environment.set('GIT_VERSION', get_option('version')) + compiler = meson.get_compiler('c') libgit_sources = [ @@ -712,7 +722,6 @@ else build_options_config.set('SANITIZE_ADDRESS', '') endif if get_option('b_sanitize').contains('leak') - libgit_c_args += '-DSUPPRESS_ANNOTATED_LEAKS' build_options_config.set('SANITIZE_LEAK', 'YesCompiledWithIt') else build_options_config.set('SANITIZE_LEAK', '') @@ -740,7 +749,7 @@ endif # features. It is optional if you want to neither execute tests nor use any of # these optional features. perl_required = get_option('perl') -if get_option('tests') +if get_option('tests') or get_option('gitweb').enabled() perl_required = true endif @@ -1447,34 +1456,6 @@ else build_options_config.set('RUNTIME_PREFIX', 'false') endif -foreach key, value : { - 'DIFF': diff.full_path(), - 'GIT_TEST_CMP': diff.full_path() + ' -u', - 'GIT_TEST_GITPERLLIB': meson.project_build_root() / 'perl', - 'GIT_TEST_MERGE_TOOLS_DIR': meson.project_source_root() / 'mergetools', - 'GIT_TEST_POPATH': meson.project_source_root() / 'po', - 'GIT_TEST_TEMPLATE_DIR': meson.project_build_root() / 'templates', - 'GIT_TEST_TEXTDOMAINDIR': meson.project_build_root() / 'po', - 'PAGER_ENV': get_option('pager_environment'), - 'PERL_PATH': perl.found() ? perl.full_path() : '', - 'PYTHON_PATH': python.found () ? python.full_path() : '', - 'SHELL_PATH': shell.full_path(), - 'TAR': tar.full_path(), - 'TEST_OUTPUT_DIRECTORY': test_output_directory, - 'TEST_SHELL_PATH': shell.full_path(), -} - if value != '' and cygpath.found() - value = run_command(cygpath, value, check: true).stdout().strip() - endif - build_options_config.set_quoted(key, value) -endforeach - -configure_file( - input: 'GIT-BUILD-OPTIONS.in', - output: 'GIT-BUILD-OPTIONS', - configuration: build_options_config, -) - git_version_file = custom_target( command: [ shell, @@ -1485,6 +1466,7 @@ git_version_file = custom_target( ], input: meson.current_source_dir() / 'GIT-VERSION-FILE.in', output: 'GIT-VERSION-FILE', + env: version_gen_environment, build_always_stale: true, ) @@ -1501,6 +1483,7 @@ version_def_h = custom_target( # Depend on GIT-VERSION-FILE so that we don't always try to rebuild this # target for the same commit. depends: [git_version_file], + env: version_gen_environment, ) # Build a separate library for "version.c" so that we do not have to rebuild @@ -1544,6 +1527,7 @@ if host_machine.system() == 'windows' input: meson.current_source_dir() / 'git.rc.in', output: 'git.rc', depends: [git_version_file], + env: version_gen_environment, ) common_main_sources += import('windows').compile_resources(git_rc, @@ -1874,7 +1858,18 @@ if intl.found() subdir('po') endif subdir('contrib') -subdir('gitweb') + +# Gitweb requires Perl, so we disable the auto-feature if Perl was not found. +# We make sure further up that Perl is required in case the gitweb option is +# enabled. +gitweb_option = get_option('gitweb').disable_auto_if(not perl.found()) +if gitweb_option.allowed() + subdir('gitweb') + build_options_config.set('NO_GITWEB', '') +else + build_options_config.set('NO_GITWEB', '1') +endif + subdir('templates') # Everything but the bin-wrappers need to come before this target such that we @@ -1889,10 +1884,39 @@ if get_option('docs') != [] subdir('Documentation') endif +foreach key, value : { + 'DIFF': diff.full_path(), + 'GIT_TEST_CMP': diff.full_path() + ' -u', + 'GIT_TEST_GITPERLLIB': meson.project_build_root() / 'perl', + 'GIT_TEST_MERGE_TOOLS_DIR': meson.project_source_root() / 'mergetools', + 'GIT_TEST_POPATH': meson.project_source_root() / 'po', + 'GIT_TEST_TEMPLATE_DIR': meson.project_build_root() / 'templates', + 'GIT_TEST_TEXTDOMAINDIR': meson.project_build_root() / 'po', + 'PAGER_ENV': get_option('pager_environment'), + 'PERL_PATH': perl.found() ? perl.full_path() : '', + 'PYTHON_PATH': python.found () ? python.full_path() : '', + 'SHELL_PATH': shell.full_path(), + 'TAR': tar.full_path(), + 'TEST_OUTPUT_DIRECTORY': test_output_directory, + 'TEST_SHELL_PATH': shell.full_path(), +} + if value != '' and cygpath.found() + value = run_command(cygpath, value, check: true).stdout().strip() + endif + build_options_config.set_quoted(key, value) +endforeach + +configure_file( + input: 'GIT-BUILD-OPTIONS.in', + output: 'GIT-BUILD-OPTIONS', + configuration: build_options_config, +) + summary({ 'curl': curl.found(), 'expat': expat.found(), 'gettext': intl.found(), + 'gitweb': gitweb_option.allowed(), 'https': https_backend, 'iconv': iconv.found(), 'pcre2': pcre2.found(), diff --git a/meson_options.txt b/meson_options.txt index 32a72139ba..f50bb40cdf 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -16,6 +16,16 @@ option('runtime_prefix', type: 'boolean', value: false, option('sane_tool_path', type: 'string', value: '', description: 'A colon-separated list of paths to prepend to PATH if your tools in /usr/bin are broken.') +# Build information compiled into Git and other parts like documentation. +option('build_date', type: 'string', value: '', + description: 'Build date reported by our documentation.') +option('built_from_commit', type: 'string', value: '', + description: 'Commit that Git was built from reported by git-version(1).') +option('user_agent', type: 'string', value: '', + description: 'User agent reported to remote servers.') +option('version', type: 'string', value: '', + description: 'Version string reported by git-version(1) and other tools.') + # Features supported by Git. option('curl', type: 'feature', value: 'enabled', description: 'Build helpers used to access remotes with the HTTP transport.') @@ -23,6 +33,8 @@ option('expat', type: 'feature', value: 'enabled', description: 'Build helpers used to push to remotes with the HTTP transport.') option('gettext', type: 'feature', value: 'auto', description: 'Build translation files.') +option('gitweb', type: 'feature', value: 'auto', + description: 'Build Git web interface. Requires Perl.') option('iconv', type: 'feature', value: 'auto', description: 'Support reencoding strings with different encodings.') option('pcre2', type: 'feature', value: 'enabled', @@ -73,6 +85,8 @@ option('docs', type: 'array', choices: ['man', 'html'], value: [], description: 'Which documenattion formats to build and install.') option('default_help_format', type: 'combo', choices: ['man', 'html'], value: 'man', description: 'Default format used when executing git-help(1).') +option('docs_backend', type: 'combo', choices: ['asciidoc', 'asciidoctor', 'auto'], value: 'auto', + description: 'Which backend to use to generate documentation.') # Testing. option('tests', type: 'boolean', value: true, diff --git a/midx-write.c b/midx-write.c index bcd1d50eb0..0066594fa6 100644 --- a/midx-write.c +++ b/midx-write.c @@ -1,3 +1,5 @@ +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "git-compat-util.h" #include "abspath.h" #include "config.h" @@ -1,3 +1,5 @@ +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "git-compat-util.h" #include "config.h" #include "dir.h" diff --git a/name-hash.c b/name-hash.c index 95528e3bcd..d66de1cdfd 100644 --- a/name-hash.c +++ b/name-hash.c @@ -7,6 +7,7 @@ */ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "environment.h" diff --git a/negotiator/skipping.c b/negotiator/skipping.c index abedb70a48..616df6bf3a 100644 --- a/negotiator/skipping.c +++ b/negotiator/skipping.c @@ -134,7 +134,6 @@ static int push_parent(struct data *data, struct entry *entry, struct entry *parent_entry; if (to_push->object.flags & SEEN) { - int i; if (to_push->object.flags & POPPED) /* * The entry for this commit has already been popped, @@ -145,7 +144,7 @@ static int push_parent(struct data *data, struct entry *entry, /* * Find the existing entry and use it. */ - for (i = 0; i < data->rev_list.nr; i++) { + for (size_t i = 0; i < data->rev_list.nr; i++) { parent_entry = data->rev_list.array[i].data; if (parent_entry->commit == to_push) goto parent_found; @@ -248,7 +247,7 @@ static int ack(struct fetch_negotiator *n, struct commit *c) static void release(struct fetch_negotiator *n) { struct data *data = n->data; - for (int i = 0; i < data->rev_list.nr; i++) + for (size_t i = 0; i < data->rev_list.nr; i++) free(data->rev_list.array[i].data); clear_prio_queue(&data->rev_list); FREE_AND_NULL(data); diff --git a/notes-merge.c b/notes-merge.c index dadbbabf86..8d701ed428 100644 --- a/notes-merge.c +++ b/notes-merge.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "advice.h" @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "config.h" diff --git a/object-file-convert.c b/object-file-convert.c index 3887d6d57b..eba71955cf 100644 --- a/object-file-convert.c +++ b/object-file-convert.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "gettext.h" diff --git a/object-file.c b/object-file.c index 891eaa2b4b..5b792b3dd4 100644 --- a/object-file.c +++ b/object-file.c @@ -8,6 +8,7 @@ */ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "abspath.h" diff --git a/object-name.c b/object-name.c index a563635a8c..88d1313028 100644 --- a/object-name.c +++ b/object-name.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "object-name.h" @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "gettext.h" diff --git a/oss-fuzz/fuzz-parse-attr-line.c b/oss-fuzz/fuzz-parse-attr-line.c index 45a4c4e53c..e0e4bc6358 100644 --- a/oss-fuzz/fuzz-parse-attr-line.c +++ b/oss-fuzz/fuzz-parse-attr-line.c @@ -1,3 +1,5 @@ +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "git-compat-util.h" #include <stddef.h> #include <stdlib.h> diff --git a/pack-bitmap-write.c b/pack-bitmap-write.c index 49758e2525..4f8be53c2b 100644 --- a/pack-bitmap-write.c +++ b/pack-bitmap-write.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "environment.h" diff --git a/pack-bitmap.c b/pack-bitmap.c index 7aa2410d9b..60b5da9d0b 100644 --- a/pack-bitmap.c +++ b/pack-bitmap.c @@ -1,3 +1,5 @@ +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "git-compat-util.h" #include "commit.h" #include "gettext.h" @@ -396,8 +398,7 @@ static int open_midx_bitmap_1(struct bitmap_index *bitmap_git, struct stat st; char *bitmap_name = midx_bitmap_filename(midx); int fd = git_open(bitmap_name); - uint32_t i, preferred_pack; - struct packed_git *preferred; + uint32_t i; if (fd < 0) { if (errno != ENOENT) @@ -454,18 +455,6 @@ static int open_midx_bitmap_1(struct bitmap_index *bitmap_git, } } - if (midx_preferred_pack(bitmap_git->midx, &preferred_pack) < 0) { - warning(_("could not determine MIDX preferred pack")); - goto cleanup; - } - - preferred = bitmap_git->midx->packs[preferred_pack]; - if (!is_pack_valid(preferred)) { - warning(_("preferred pack (%s) is invalid"), - preferred->pack_name); - goto cleanup; - } - return 0; cleanup: @@ -2304,8 +2293,10 @@ void reuse_partial_packfile_from_bitmap(struct bitmap_index *bitmap_git, if (!pack.bitmap_nr) continue; - ALLOC_GROW(packs, packs_nr + 1, packs_alloc); - memcpy(&packs[packs_nr++], &pack, sizeof(pack)); + if (is_pack_valid(pack.p)) { + ALLOC_GROW(packs, packs_nr + 1, packs_alloc); + memcpy(&packs[packs_nr++], &pack, sizeof(pack)); + } objects_nr += pack.p->num_objects; } @@ -2339,16 +2330,22 @@ void reuse_partial_packfile_from_bitmap(struct bitmap_index *bitmap_git, pack_int_id = -1; } - ALLOC_GROW(packs, packs_nr + 1, packs_alloc); - packs[packs_nr].p = pack; - packs[packs_nr].pack_int_id = pack_int_id; - packs[packs_nr].bitmap_nr = pack->num_objects; - packs[packs_nr].bitmap_pos = 0; - packs[packs_nr].from_midx = bitmap_git->midx; + if (is_pack_valid(pack)) { + ALLOC_GROW(packs, packs_nr + 1, packs_alloc); + packs[packs_nr].p = pack; + packs[packs_nr].pack_int_id = pack_int_id; + packs[packs_nr].bitmap_nr = pack->num_objects; + packs[packs_nr].bitmap_pos = 0; + packs[packs_nr].from_midx = bitmap_git->midx; + packs_nr++; + } - objects_nr = packs[packs_nr++].bitmap_nr; + objects_nr = pack->num_objects; } + if (!packs_nr) + return; + word_alloc = objects_nr / BITS_IN_EWORD; if (objects_nr % BITS_IN_EWORD) word_alloc++; diff --git a/pack-check.c b/pack-check.c index e883dae3f2..8d9f6da7ce 100644 --- a/pack-check.c +++ b/pack-check.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "environment.h" diff --git a/packfile.c b/packfile.c index 9c4bd81a8c..cc7ab6403a 100644 --- a/packfile.c +++ b/packfile.c @@ -1,3 +1,4 @@ +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "environment.h" diff --git a/parallel-checkout.c b/parallel-checkout.c index 01736f1352..7cc6b30528 100644 --- a/parallel-checkout.c +++ b/parallel-checkout.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "config.h" diff --git a/parse-options.h b/parse-options.h index f0801d4532..d01361ca97 100644 --- a/parse-options.h +++ b/parse-options.h @@ -353,6 +353,18 @@ struct option { .callback = parse_opt_noop_cb, \ } +static char *parse_options_noop_ignored_value MAYBE_UNUSED; +#define OPT_NOOP_ARG(s, l) { \ + .type = OPTION_CALLBACK, \ + .short_name = (s), \ + .long_name = (l), \ + .value = &parse_options_noop_ignored_value, \ + .argh = "ignored", \ + .help = N_("no-op (backward compatibility)"), \ + .flags = PARSE_OPT_HIDDEN, \ + .callback = parse_opt_noop_cb, \ +} + #define OPT_ALIAS(s, l, source_long_name) { \ .type = OPTION_ALIAS, \ .short_name = (s), \ @@ -1142,12 +1142,12 @@ int strbuf_normalize_path(struct strbuf *src) */ int longest_ancestor_length(const char *path, struct string_list *prefixes) { - int i, max_len = -1; + int max_len = -1; if (!strcmp(path, "/")) return -1; - for (i = 0; i < prefixes->nr; i++) { + for (size_t i = 0; i < prefixes->nr; i++) { const char *ceil = prefixes->items[i].string; int len = strlen(ceil); diff --git a/pathspec.c b/pathspec.c index 0fc6f84a6e..89663645e1 100644 --- a/pathspec.c +++ b/pathspec.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "abspath.h" diff --git a/pkt-line.c b/pkt-line.c index 24479eae4d..a5bcbc96fb 100644 --- a/pkt-line.c +++ b/pkt-line.c @@ -39,7 +39,6 @@ static int packet_trace_pack(const char *buf, unsigned int len, int sideband) static void packet_trace(const char *buf, unsigned int len, int write) { - int i; struct strbuf out; static int in_pack, sideband; @@ -72,7 +71,7 @@ static void packet_trace(const char *buf, unsigned int len, int write) get_trace_prefix(), write ? '>' : '<'); /* XXX we should really handle printable utf8 */ - for (i = 0; i < len; i++) { + for (unsigned int i = 0; i < len; i++) { /* suppress newlines */ if (buf[i] == '\n') continue; @@ -338,30 +337,32 @@ int write_packetized_from_buf_no_flush_count(const char *src_in, size_t len, } static int get_packet_data(int fd, char **src_buf, size_t *src_size, - void *dst, unsigned size, int options) + void *dst, size_t size, int options) { - ssize_t ret; + size_t bytes_read; if (fd >= 0 && src_buf && *src_buf) BUG("multiple sources given to packet_read"); /* Read up to "size" bytes from our source, whatever it is. */ if (src_buf && *src_buf) { - ret = size < *src_size ? size : *src_size; - memcpy(dst, *src_buf, ret); - *src_buf += ret; - *src_size -= ret; + bytes_read = size < *src_size ? size : *src_size; + memcpy(dst, *src_buf, bytes_read); + *src_buf += bytes_read; + *src_size -= bytes_read; } else { - ret = read_in_full(fd, dst, size); + ssize_t ret = read_in_full(fd, dst, size); if (ret < 0) { if (options & PACKET_READ_GENTLE_ON_READ_ERROR) return error_errno(_("read error")); die_errno(_("read error")); } + + bytes_read = (size_t) ret; } /* And complain if we didn't get enough bytes to satisfy the read. */ - if (ret != size) { + if (bytes_read != size) { if (options & PACKET_READ_GENTLE_ON_EOF) return -1; @@ -370,7 +371,7 @@ static int get_packet_data(int fd, char **src_buf, size_t *src_size, die(_("the remote end hung up unexpectedly")); } - return ret; + return 0; } int packet_length(const char lenbuf_hex[4], size_t size) @@ -225,6 +225,14 @@ # mailmap файл за ÑъответÑтвиÑта на имената и адреÑите на е-поща # unit test поединичен теÑÑ‚ # test suite група теÑтове +# object database базата от данни за обектите +# expecting integer изиÑква Ñе чиÑло +# timeout макÑимално изчакване +# init timeout макÑимално първоначално изчакване +# implies option включва опциÑта +# cache-tree кеша на обектите-дървета +# acquire lock придобивам ключалка +# detached отделѐн, неÑвързан # # ------------------------ # „$var“ - може да не Ñработва за shell има gettext и eval_gettext - проверка - намират Ñе леÑно по „$ @@ -251,10 +259,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.45\n" +"Project-Id-Version: git 2.48\n" "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n" -"POT-Creation-Date: 2024-10-05 01:20+0000\n" -"PO-Revision-Date: 2024-10-05 13:20+0200\n" +"POT-Creation-Date: 2024-12-27 22:37+0100\n" +"PO-Revision-Date: 2024-12-27 22:40+0100\n" "Last-Translator: Alexander Shopov <ash@kambanaria.org>\n" "Language-Team: Bulgarian <dict@fsa-bg.org>\n" "Language: bg\n" @@ -564,8 +572,8 @@ msgstr "" #, c-format msgid "Discard mode change from worktree [y,n,q,a,d%s,?]? " msgstr "" -"Премахване на промÑната в права̀та за доÑтъп от работното дърво [y,n,q,a," -"d%s,?]? " +"Премахване на промÑната в права̀та за доÑтъп от работното дърво " +"[y,n,q,a,d%s,?]? " #, c-format msgid "Discard deletion from worktree [y,n,q,a,d%s,?]? " @@ -605,8 +613,8 @@ msgstr "" #, c-format msgid "Discard mode change from index and worktree [y,n,q,a,d%s,?]? " msgstr "" -"Премахване на промÑната в права̀та за доÑтъп от индекÑа и работното дърво [y," -"n,q,a,d%s,?]? " +"Премахване на промÑната в права̀та за доÑтъп от индекÑа и работното дърво " +"[y,n,q,a,d%s,?]? " #, c-format msgid "Discard deletion from index and worktree [y,n,q,a,d%s,?]? " @@ -641,8 +649,8 @@ msgstr "" #, c-format msgid "Apply mode change to index and worktree [y,n,q,a,d%s,?]? " msgstr "" -"Прилагане на промÑната в права̀та за доÑтъп от индекÑа и работното дърво [y,n," -"q,a,d%s,?]? " +"Прилагане на промÑната в права̀та за доÑтъп от индекÑа и работното дърво " +"[y,n,q,a,d%s,?]? " #, c-format msgid "Apply deletion to index and worktree [y,n,q,a,d%s,?]? " @@ -676,8 +684,8 @@ msgstr "" #, c-format msgid "Apply mode change to worktree [y,n,q,a,d%s,?]? " msgstr "" -"Прилагане на промÑната в права̀та за доÑтъп към работното дърво [y,n,q,a," -"d%s,?]? " +"Прилагане на промÑната в права̀та за доÑтъп към работното дърво " +"[y,n,q,a,d%s,?]? " #, c-format msgid "Apply deletion to worktree [y,n,q,a,d%s,?]? " @@ -893,12 +901,12 @@ msgstr "Променени Ñа Ñамо двоични файлове." #, c-format msgid "" "\n" -"Disable this message with \"git config advice.%s false\"" +"Disable this message with \"git config set advice.%s false\"" msgstr "" "\n" "За да изключите това предупреждение, изпълнете:\n" "\n" -" git config advice.%s false" +" git config set advice.%s false" #, c-format msgid "%shint:%s%.*s%s\n" @@ -1016,8 +1024,8 @@ msgstr "" "\n" " git switch -\n" "\n" -"Може да Ñпрете това Ñъобщение ÑÑŠÑ Ð·Ð°Ð´Ð°Ð²Ð°Ð½Ðµ на наÑтройката „advice." -"detachedHead“\n" +"Може да Ñпрете това Ñъобщение ÑÑŠÑ Ð·Ð°Ð´Ð°Ð²Ð°Ð½Ðµ на наÑтройката " +"„advice.detachedHead“\n" "да е „false“ (лъжа̀).\n" #, c-format @@ -1247,7 +1255,7 @@ msgstr "двоичната кръпка не може да Ñе приложи Ð #, c-format msgid "binary patch to '%s' creates incorrect result (expecting %s, got %s)" msgstr "" -"двоичната кръпка за „%s“ води до неправилни резултати (очакваше Ñе: „%s“, а " +"двоичната кръпка за „%s“ води до неправилни резултати (изиÑква Ñе: „%s“, а " "бе получено: „%s“)" #, c-format @@ -2651,9 +2659,9 @@ 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] [ЛОШО [ДОБРО…]] " -"[--] [ПЪТ…]" +"git bisect start [--term-(new,bad)=УПРÐВЛЯВÐЩÐ_ДУМР--term-" +"(old,good)=УПРÐВЛЯВÐЩÐ_ДУМÐ] [--no-checkout] [--first-parent] [ЛОШО " +"[ДОБРО…]] [--] [ПЪТ…]" msgid "git bisect (good|bad) [<rev>...]" msgstr "git bisect (good|bad) [ВЕРСИЯ…]" @@ -2936,7 +2944,7 @@ msgstr "ОПЦИИте_ЗÐ_ВЕРСИЯТРÑа документирани в #, c-format msgid "expecting a color: %s" -msgstr "трÑбва да е цвÑÑ‚: %s" +msgstr "изиÑква Ñе цвÑÑ‚: %s" msgid "must end with a color" msgstr "трÑбва да завършва Ñ Ñ†Ð²ÑÑ‚" @@ -3349,8 +3357,8 @@ msgid "HEAD not found below refs/heads!" msgstr "Ð’ директориÑта „refs/heads“ липÑва файл „HEAD“" msgid "" -"branch with --recurse-submodules can only be used if submodule." -"propagateBranches is enabled" +"branch with --recurse-submodules can only be used if " +"submodule.propagateBranches is enabled" msgstr "" "може да Ñе ползва клон Ñ Ð¾Ð¿Ñ†Ð¸Ñта „--recurse-submodules“, Ñамо ако " "наÑтройката „submodule.propagateBranches“ е зададена" @@ -3653,8 +3661,8 @@ msgstr "позволÑване на опциите „-s“ и „-t“ да рРmsgid "use mail map file" msgstr "" -"използване на файл за ÑъответÑтвиÑта на имената и адреÑите на е-поща („." -"mailmap“)" +"използване на файл за ÑъответÑтвиÑта на имената и адреÑите на е-поща " +"(„.mailmap“)" msgid "Batch objects requested on stdin (or --batch-all-objects)" msgstr "" @@ -4206,7 +4214,7 @@ msgstr "" "„zdiff3“)" msgid "detach HEAD at named commit" -msgstr "отделÑне на ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»Ñ â€žHEAD“ към указаното подаване" +msgstr "отделÑне на ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»Ñ â€žHEAD“ при указаното подаване" msgid "force checkout (throw away local modifications)" msgstr "принудително изтеглÑне (вашите промѐни ще бъдат занулени)" @@ -4220,8 +4228,8 @@ msgstr "нов неродѐн клон" msgid "update ignored files (default)" msgstr "обновÑване на игнорираните файлове (Ñтандартно)" -msgid "do not check if another worktree is holding the given ref" -msgstr "без проверка дали друго работно дърво държи указателÑ" +msgid "do not check if another worktree is using this branch" +msgstr "без проверка дали друго работно дърво ползва този клон" msgid "checkout our version for unmerged files" msgstr "изтеглÑне на вашата верÑÐ¸Ñ Ð½Ð° неÑлетите файлове" @@ -4525,10 +4533,10 @@ msgstr "плитко клониране до тази ДЪЛБОЧИÐÐ" msgid "create a shallow clone since a specific time" msgstr "плитко клониране до момент във времето" -msgid "revision" -msgstr "ВЕРСИЯ" +msgid "ref" +msgstr "УКÐЗ" -msgid "deepen history of shallow clone, excluding rev" +msgid "deepen history of shallow clone, excluding ref" msgstr "задълбочаване на иÑториÑта на плитко хранилище до изключващ указател" msgid "clone only one branch, HEAD or --branch" @@ -5509,9 +5517,10 @@ msgstr "" msgid "" "git config unset [<file-option>] [--all] [--value=<value>] [--fixed-value] " -"<name> <value>" +"<name>" msgstr "" -"git config unset [ОПЦИЯ_ЗÐ_ФÐЙЛ] [--all] [--value=СТОЙÐОСТ] [--fixed-value]" +"git config unset [ОПЦИЯ_ЗÐ_ФÐЙЛ] [--all] [--value=СТОЙÐОСТ] [--fixed-value] " +"ИМЕ" msgid "git config rename-section [<file-option>] <old-name> <new-name>" msgstr "git config rename-section [ОПЦИЯ_ЗÐ_ФÐЙЛ] СТÐРО_ИМЕ ÐОВО_ИМЕ" @@ -5963,12 +5972,8 @@ msgid "traversed %lu commits\n" msgstr "обходени Ñа %lu подаваниÑ\n" #, c-format -msgid "" -"more than %i tags found; listed %i most recent\n" -"gave up search at %s\n" -msgstr "" -"открити Ñа над %i етикета, изведени Ñа поÑледните %i,\n" -"търÑенето бе прекратено при „%s“.\n" +msgid "found %i tags; gave up search at %s\n" +msgstr "открити Ñа %i етикета. ТърÑенето приключи при „%s“\n" #, c-format msgid "describe %s\n" @@ -6414,6 +6419,27 @@ msgstr "„%s“ е неправилен обект" msgid "the object %s does not exist" msgstr "обектът „%s“ не ÑъщеÑтвува" +#, c-format +msgid "" +"Run 'git remote set-head %s %s' to follow the change, or set\n" +"'remote.%s.followRemoteHEAD' configuration option to a different value\n" +"if you do not want to see this message. Specifically running\n" +"'git config set remote.%s.followRemoteHEAD %s' will disable the warning\n" +"until the remote changes HEAD to something else." +msgstr "" +"Изпълнете\n" +"\n" +" git remote set-head %s %s\n" +"\n" +"за да Ñледвате промÑната или задайте друга ÑтойноÑÑ‚ на наÑтройката\n" +"„remote.%s.followRemoteHEAD, ако не иÑкате тези ÑъобщениÑ.\n" +"Изпълнението на\n" +"\n" +" git config set remote.%s.followRemoteHEAD %s\n" +"\n" +"ще изключи предупреждението, докато отдалечениÑÑ‚ указател HEAD не\n" +"започне да Ñочи нещо друго." + msgid "multiple branches detected, incompatible with --set-upstream" msgstr "" "заÑечени Ñа множеÑтво клони, това е неÑъвмеÑтимо Ñ Ð¾Ð¿Ñ†Ð¸Ñта „--set-upstream“" @@ -6553,6 +6579,9 @@ msgstr "КÐРТÐ_С_УКÐЗÐТЕЛИ" msgid "specify fetch refmap" msgstr "указване на КÐРТÐта_С_УКÐЗÐТЕЛИ за доÑтавÑне" +msgid "revision" +msgstr "ВЕРСИЯ" + msgid "report that we have only objects reachable from this object" msgstr "докладване, че вÑички обекти може Ñа доÑтижими при започване от този" @@ -6608,8 +6637,8 @@ msgid "protocol does not support --negotiate-only, exiting" msgstr "протоколът не поддържа опциÑта „--negotiate-only“, изход от програмата" msgid "" -"--filter can only be used with the remote configured in extensions." -"partialclone" +"--filter can only be used with the remote configured in " +"extensions.partialclone" msgstr "" "опциÑта „--filter“ може да Ñе ползва Ñамо Ñ Ð¾Ñ‚Ð´Ð°Ð»ÐµÑ‡ÐµÐ½Ð¾Ñ‚Ð¾ хранилище указано в " "наÑтройката „extensions.partialclone“" @@ -6859,7 +6888,7 @@ msgstr "„%s“ Ñочи към нещо необичайно (%s)" #, c-format msgid "%s: detached HEAD points at nothing" -msgstr "%s: неÑвързаниÑÑ‚ връх „HEAD“ не Ñочи към нищо" +msgstr "%s: отделениÑÑ‚ връх „HEAD“ не Ñочи към нищо" #, c-format msgid "notice: %s points to an unborn branch (%s)" @@ -7169,8 +7198,8 @@ msgstr "неуÑпешно изпълнение на „git multi-pack-index rep msgid "" "skipping incremental-repack task because core.multiPackIndex is disabled" msgstr "" -"задачата „incremental-repack“ Ñе преÑкача, защото наÑтройката „core." -"multiPackIndex“ е изключена" +"задачата „incremental-repack“ Ñе преÑкача, защото наÑтройката " +"„core.multiPackIndex“ е изключена" #, c-format msgid "lock file '%s' exists, skipping maintenance" @@ -7291,8 +7320,25 @@ msgstr "липÑват както таймери на systemd, така и cront msgid "%s scheduler is not available" msgstr "планиращиÑÑ‚ модул „%s“ липÑва" -msgid "another process is scheduling background maintenance" -msgstr "друг Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð·Ð°Ð´Ð°Ð²Ð° поддръжката на заден фон" +#, c-format +msgid "" +"unable to create '%s.lock': %s.\n" +"\n" +"Another scheduled git-maintenance(1) process seems to be running in this\n" +"repository. Please make sure no other maintenance processes are running and\n" +"then try again. If it still fails, a git-maintenance(1) process may have\n" +"crashed in this repository earlier: remove the file manually to continue." +msgstr "" +"Файлът-ключалка „%s.lock“ не може да бъде Ñъздаден: %s\n" +"\n" +"Изглежда, че и друг Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð½Ð° git-maintenance(1) е пуÑнат в това\n" +"хранилище. Уверете Ñе, че вÑички подобни процеÑи Ñа Ñпрени и опитайте\n" +"отново. Ðко това не помогне, вероÑтната причина е, че нÑкой Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð½Ð°\n" +"git-maintenance(1) в това хранилище е забил. За да продължите работа,\n" +"ще трÑбва ръчно да изтриете файла:" + +msgid "cannot acquire lock for scheduled background maintenance" +msgstr "не може да Ñе придобие ключалката за поддръжката на заден фон" msgid "git maintenance start [--scheduler=<scheduler>]" msgstr "git maintenance start [--scheduler=ПЛÐÐИРÐЩ_МОДУЛ]" @@ -7876,6 +7922,24 @@ msgid_plural "chain length = %d: %lu objects" msgstr[0] "дължината на веригата е %d: %lu обект" msgstr[1] "дължината на веригата е %d: %lu обекта" +msgid "could not start pack-objects to repack local links" +msgstr "" +"командата „pack-objects“ не може да Ñе Ñтартира за препакетирането на " +"локалните връзки" + +msgid "failed to feed local object to pack-objects" +msgstr "локалните обекти не може да Ñе подадат на командата „pack-objects“" + +msgid "index-pack: Expecting full hex object ID lines only from pack-objects." +msgstr "" +"index-pack: от „pack-objects“ Ñе изиÑкват редове Ñамо Ñ Ð¿ÑŠÐ»Ð½Ð¸ шеÑтнайÑетични " +"указатели." + +msgid "could not finish pack-objects to repack local links" +msgstr "" +"командата „pack-objects“ не може да завърши за препакетирането на локалните " +"връзки" + msgid "Cannot come back to cwd" msgstr "ПроцеÑÑŠÑ‚ не може да Ñе върне към предишната работна директориÑ" @@ -7887,6 +7951,9 @@ msgstr "неправилна ÑтойноÑÑ‚ „%s“" msgid "unknown hash algorithm '%s'" msgstr "непознат алгоритъм за контролни Ñуми „%s“" +msgid "--promisor cannot be used with a pack name" +msgstr "опциÑта „--promisor“ е неÑъвмеÑтима Ñ Ð¸Ð¼Ðµ на пакет" + msgid "--stdin requires a git repository" msgstr "„--stdin“ изиÑква хранилище на git" @@ -9283,11 +9350,14 @@ msgstr "git notes [--ref УКÐЗÐТЕЛ_ЗÐ_БЕЛЕЖКÐ] [list [ОБЕКТ msgid "" "git notes [--ref <notes-ref>] add [-f] [--allow-empty] [--[no-]separator|--" "separator=<paragraph-break>] [--[no-]stripspace] [-m <msg> | -F <file> | (-c " -"| -C) <object>] [<object>]" +"| -C) <object>] [<object>] [-e]" msgstr "" +"git notes [--ref <notes-ref>] add [-f] [--allow-empty] [--[no-]separator|--" +"separator=<paragraph-break>] [--[no-]stripspace] [-m <msg> | -F <file> | (-c " +"| -C) <object>] [<object>] [-e]\n" "git notes [--ref УКÐЗÐТЕЛ_ЗÐ_БЕЛЕЖКÐ] add [-f] [--allow-empty] [--" "[no-]separator|--separator=<paragraph-break>] [--[no-]stripspace] [-m " -"СЪОБЩЕÐИЕ|-F ФÐЙЛ|(-c|-C) ОБЕКТ] [ОБЕКТ]" +"СЪОБЩЕÐИЕ|-F ФÐЙЛ|(-c|-C) ОБЕКТ] [ОБЕКТ] [-e]" msgid "git notes [--ref <notes-ref>] copy [-f] <from-object> <to-object>" msgstr "" @@ -9296,11 +9366,11 @@ msgstr "" msgid "" "git notes [--ref <notes-ref>] append [--allow-empty] [--[no-]separator|--" "separator=<paragraph-break>] [--[no-]stripspace] [-m <msg> | -F <file> | (-c " -"| -C) <object>] [<object>]" +"| -C) <object>] [<object>] [-e]" msgstr "" "git notes [--ref УКÐЗÐТЕЛ_ЗÐ_БЕЛЕЖКÐ] append [--allow-empty] [--" "[no-]separator|--separator=КРÐЙ_ÐÐ_ÐБЗÐЦ] [--[no-]stripspace] [-m СЪОБЩЕÐИЕ " -"| -F ФÐЙЛ|(-c|-C) ОБЕКТ] [ОБЕКТ]" +"| -F ФÐЙЛ|(-c|-C) ОБЕКТ] [ОБЕКТ] [-e]" msgid "git notes [--ref <notes-ref>] edit [--allow-empty] [<object>]" msgstr "git notes [--ref УКÐЗÐТЕЛ_ЗÐ_БЕЛЕЖКÐ] edit [--allow-empty] [ОБЕКТ]" @@ -9422,6 +9492,9 @@ msgstr "ФÐЙЛ ÑÑŠÑ Ñъдържанието на бележката" msgid "reuse and edit specified note object" msgstr "преизползване и редактиране на ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ ÐžÐ‘Ð•ÐšÐ¢-бележка" +msgid "edit note message in editor" +msgstr "редактиране на Ñъобщението в редактора" + msgid "reuse specified note object" msgstr "преизползване на ÑƒÐºÐ°Ð·Ð°Ð½Ð¸Ñ ÐžÐ‘Ð•ÐšÐ¢-бележка" @@ -9660,7 +9733,7 @@ msgstr "неуÑпешно запиÑване на индекÑи на база #, c-format msgid "wrote %<PRIu32> objects while expecting %<PRIu32>" -msgstr "бÑха запиÑани %<PRIu32> обекти, а Ñе очакваха %<PRIu32>" +msgstr "бÑха запиÑани %<PRIu32> обекти, а Ñе изиÑкват %<PRIu32>" msgid "disabling bitmap writing, as some objects are not being packed" msgstr "" @@ -9940,6 +10013,9 @@ msgstr "как да Ñе обработват липÑващите обекти" msgid "do not pack objects in promisor packfiles" msgstr "без пакетиране на обекти в гарантиращи пакети" +msgid "implies --missing=allow-any" +msgstr "включва опциÑта „--missing=allow-any“" + msgid "respect islands during delta compression" msgstr "без промÑна на групите при делта компреÑиÑ" @@ -10315,7 +10391,7 @@ msgid "" " git push %s HEAD:<name-of-remote-branch>\n" msgstr "" "Ð’ момента не Ñте на никой клон. За да изтлаÑкате иÑториÑта до ÑÑŠÑтоÑнието,\n" -"Ñочено в момента от ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»Ñ â€žHEAD“, използвайте командата:\n" +"Ñочено в момента от (неÑвързаниÑ) указател „HEAD“, използвайте командата:\n" "\n" " git push %s HEAD:ИМЕ_ÐÐ_ОТДÐЛЕЧЕÐИЯ_КЛОÐ\n" @@ -11592,6 +11668,30 @@ msgid_plural " Local refs configured for 'git push'%s:" msgstr[0] " ЛокалниÑÑ‚ указател, наÑтроен за „git push“%s:" msgstr[1] " Локалните указатели, наÑтроени за „git push“%s:" +#, c-format +msgid "'%s/HEAD' is unchanged and points to '%s'\n" +msgstr "„%s/HEAD“ не е променен и Ñочи към „%s“\n" + +#, c-format +msgid "'%s/HEAD' has changed from '%s' and now points to '%s'\n" +msgstr "„%s/HEAD“ е променен от „%s“ и Ñега Ñочи към „%s“\n" + +#, c-format +msgid "'%s/HEAD' is now created and points to '%s'\n" +msgstr "„%s/HEAD“ е Ñъздаден и Ñочи към „%s“\n" + +#, c-format +msgid "'%s/HEAD' was detached at '%s' and now points to '%s'\n" +msgstr "„%s/HEAD“ е отделѐн при „%s“ и Ñочи към „%s“\n" + +#, c-format +msgid "" +"'%s/HEAD' used to point to '%s' (which is not a remote branch), but now " +"points to '%s'\n" +msgstr "" +"„%s/HEAD“ Ñочеше към „%s“ (което не е отдалечен клон), но Ñега Ñочи към " +"„%s“\n" + msgid "set refs/remotes/<name>/HEAD according to remote" msgstr "задаване на refs/remotes/ИМЕ/HEAD Ñпоред отдалеченото хранилище" @@ -11614,7 +11714,7 @@ msgid "Not a valid ref: %s" msgstr "Ðеправилен указател: %s" #, c-format -msgid "Could not setup %s" +msgid "Could not set up %s" msgstr "„%s“ не може да Ñе наÑтрои" #, c-format @@ -12287,8 +12387,8 @@ msgstr "" " или: git rev-parse --sq-quote [ÐРГУМЕÐТ…]\n" " или: git rev-parse [ОПЦИЯ…] [ÐРГУМЕÐТ…]\n" "\n" -"За повече Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° Ð¿ÑŠÑ€Ð²Ð¸Ñ Ð²Ð°Ñ€Ð¸Ð°Ð½Ñ‚ изпълнете „git rev-parse --parseopt -" -"h“" +"За повече Ð¸Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ð¸Ñ Ð·Ð° Ð¿ÑŠÑ€Ð²Ð¸Ñ Ð²Ð°Ñ€Ð¸Ð°Ð½Ñ‚ изпълнете „git rev-parse --parseopt " +"-h“" msgid "--resolve-git-dir requires an argument" msgstr "опциÑта „--resolve-git-dir“ изиÑква аргумент" @@ -13119,7 +13219,7 @@ msgstr "добавÑне на „# “ в началото на вÑеки реР#, c-format msgid "Expecting a full ref name, got %s" -msgstr "Очаква Ñе пълно име на указател, а не „%s“" +msgstr "ИзиÑква Ñе пълно име на указател, а не „%s“" #, c-format msgid "could not get a repository handle for submodule '%s'" @@ -13546,7 +13646,8 @@ msgid "don't print cloning progress" msgstr "без извеждане на напредъка на клонирането" msgid "disallow cloning into non-empty directory, implies --init" -msgstr "предотвратÑване на клониране в непразна иÑториÑ, включва „--init“" +msgstr "" +"предотвратÑване на клониране в непразна иÑториÑ, включва опциÑта „--init“" msgid "" "git submodule [--quiet] update [--init [--filter=<filter-spec>]] [--remote] " @@ -14403,6 +14504,9 @@ msgstr "задаване на режима на Ñледене (виж git-branc msgid "try to match the new branch name with a remote-tracking branch" msgstr "опит за напаÑване на името на Ð½Ð¾Ð²Ð¸Ñ ÐºÐ»Ð¾Ð½ Ñ Ñ‚Ð¾Ð²Ð° на ÑледÑщ клон" +msgid "use relative paths for worktrees" +msgstr "използване на отноÑителни пътища за работните дървета" + #, c-format msgid "options '%s', '%s', and '%s' cannot be used together" msgstr "опциите „%s“, „%s“ и „%s“ Ñа неÑъвмеÑтими" @@ -14684,6 +14788,26 @@ msgstr "файлът „%s“ не може да бъде Ñъздаден" msgid "index-pack died" msgstr "командата „git index-pack“ не завърши уÑпешно" +#, c-format +msgid "directory '%s' is present in index, but not sparse" +msgstr "директориÑта „%s“ е в индекÑа, но не е чаÑтична" + +msgid "corrupted cache-tree has entries not present in index" +msgstr "повредениÑÑ‚ кеш на обектите-дървета Ñъдържа запиÑи извън индекÑа" + +#, c-format +msgid "%s with flags 0x%x should not be in cache-tree" +msgstr "„%s“ Ñ Ñ„Ð»Ð°Ð³Ð¾Ð²Ðµ 0x%x не трÑбва да е в кеша на обектите-дървета" + +#, c-format +msgid "bad subtree '%.*s'" +msgstr "неправилно поддърво „%.*s“" + +#, c-format +msgid "cache-tree for path %.*s does not match. Expected %s got %s" +msgstr "" +"кешираниÑÑ‚ обект-дърво за Ð¿ÑŠÑ‚Ñ â€ž%.*s“ не Ñъвпада. ИзиÑква Ñе „%s“, а не „%s“" + msgid "terminating chunk id appears earlier than expected" msgstr "идентификаторът за краен Ð¾Ñ‚ÐºÑŠÑ Ñе ÑвÑва по-рано от очакваното" @@ -15468,7 +15592,7 @@ msgstr "временниÑÑ‚ файл на гра̀фа Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸ÑтР#, c-format msgid "cannot merge graphs with %<PRIuMAX>, %<PRIuMAX> commits" msgstr "" -"не може да Ñе ÑлеÑÑ‚ графове Ñ %<PRIuMAX> и %<PRIuMAX> Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñ (Ñъответно)" +"не може да Ñе ÑлеÑÑ‚ гра̀фи Ñ %<PRIuMAX> и %<PRIuMAX> Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñ (Ñъответно)" #, c-format msgid "cannot merge graph %s, too many commits: %<PRIuMAX>" @@ -15490,8 +15614,8 @@ msgid "" "attempting to write a commit-graph, but 'commitGraph.changedPathsVersion' " "(%d) is not supported" msgstr "" -"опит за Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° гра̀фа Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñта, но наÑтройката „commitGraph." -"changedPathsVersion“ (%d) не Ñе поддържа" +"опит за Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° гра̀фа Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñта, но наÑтройката " +"„commitGraph.changedPathsVersion“ (%d) не Ñе поддържа" msgid "too many commits to write graph" msgstr "прекалено много Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñ Ð·Ð° запиÑване на гра̀фа" @@ -15578,7 +15702,7 @@ msgid "" "to convert the grafts into replace refs.\n" "\n" "Turn this message off by running\n" -"\"git config advice.graftFileDeprecated false\"" +"\"git config set advice.graftFileDeprecated false\"" msgstr "" "Поддръжката на „<GIT_DIR>/info/grafts“ е оÑтарÑла.\n" "Ð’ бъдеща верÑÐ¸Ñ Ð½Ð° Git ще бъде премахната.\n" @@ -15590,7 +15714,7 @@ msgstr "" "\n" "За да изключите това Ñъобщение, изпълнете:\n" "\n" -" git config advice.graftFileDeprecated false" +" git config set advice.graftFileDeprecated false" #, c-format msgid "commit %s exists in commit-graph but not in the object database" @@ -16445,6 +16569,24 @@ msgstr "адреÑÑŠÑ‚ е без Ñхема: %s" msgid "credential url cannot be parsed: %s" msgstr "адреÑÑŠÑ‚ за Ð¸Ð´ÐµÐ½Ñ‚Ð¸Ñ„Ð¸ÐºÐ°Ñ†Ð¸Ñ Ð½Ðµ може да Ñе анализира: „%s“" +#, c-format +msgid "invalid timeout '%s', expecting a non-negative integer" +msgstr "" +"неправилна ÑтойноÑÑ‚ за „timeout“ (макÑимално изчакване) „%s“, изиÑква Ñе " +"неотрицателно цÑло чиÑло" + +#, c-format +msgid "invalid init-timeout '%s', expecting a non-negative integer" +msgstr "" +"неправилна ÑтойноÑÑ‚ за „init-timeout“ (макÑимално първоначално изчакване): " +"„%s“, изиÑква Ñе неотрицателно цÑло чиÑло" + +#, c-format +msgid "invalid max-connections '%s', expecting an integer" +msgstr "" +"неправилна ÑтойноÑÑ‚ за „max-connections“ (макÑÐ¸Ð¼Ð°Ð»Ð½Ð¸Ñ Ð±Ñ€Ð¾Ð¹ връзки): „%s“, " +"изиÑква Ñе цÑло чиÑло" + msgid "in the future" msgstr "в бъдещето" @@ -17170,6 +17312,22 @@ msgstr "неправилен път към проÑтранÑтва от имеРmsgid "too many args to run %s" msgstr "прекалено много аргументи за изпълнение „%s“" +#, c-format +msgid "" +"You are attempting to fetch %s, which is in the commit graph file but not in " +"the object database.\n" +"This is probably due to repo corruption.\n" +"If you are attempting to repair this repo corruption by refetching the " +"missing object, use 'git fetch --refetch' with the missing object." +msgstr "" +"Пробвате да доÑтавите „%s“, което е в гра̀фа Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñта, но не и в базата " +"от данни за обектите.\n" +"Ðай-вероÑтната причина е повредено хранилище.\n" +"За да поправите хранилището като изтеглите липÑÐ²Ð°Ñ‰Ð¸Ñ Ð¾Ð±ÐµÐºÑ‚ наново, " +"изпълнете:\n" +"\n" +" git fetch --refetch" + msgid "git fetch-pack: expected shallow list" msgstr "git fetch-pack: очаква Ñе плитък ÑпиÑък" @@ -17770,11 +17928,12 @@ msgstr[1] "" #, c-format msgid "" "The '%s' hook was ignored because it's not set as executable.\n" -"You can disable this warning with `git config advice.ignoredHook false`." +"You can disable this warning with `git config set advice.ignoredHook false`." msgstr "" "Куката „%s“ Ñе преÑкача, защото липÑват права̀ за изпълнение.\n" "За да изключите това предупреждение, изпълнете:\n" -" git config advice.ignoredHook false" +"\n" +" git config set advice.ignoredHook false" msgid "not a git repository" msgstr "не е хранилище на Git" @@ -17791,15 +17950,9 @@ msgstr "" msgid "Delegation control is not supported with cURL < 7.22.0" msgstr "Управлението на делегирането не Ñе поддържа от cURL < 7.22.0" -msgid "Public key pinning not supported with cURL < 7.39.0" -msgstr "Задаването на поÑтоÑнен публичен ключ не Ñе поддържа от cURL < 7.39.0" - msgid "Unknown value for http.proactiveauth" msgstr "Ðепозната ÑтойноÑÑ‚ за „http.proactiveauth“" -msgid "CURLSSLOPT_NO_REVOKE not supported with cURL < 7.44.0" -msgstr "„CURLSSLOPT_NO_REVOKE“ не Ñе поддържа от cURL < 7.44.0" - #, c-format msgid "Unsupported SSL backend '%s'. Supported SSL backends:" msgstr "Ðеподдържана Ñ€ÐµÐ°Ð»Ð¸Ð·Ð°Ñ†Ð¸Ñ Ð½Ð° SSL „%s“. Поддържат Ñе:" @@ -17992,6 +18145,10 @@ msgid "unable to format message: %s" msgstr "Ñъобщението не може да Ñе форматира: %s" #, c-format +msgid "invalid marker-size '%s', expecting an integer" +msgstr "неправилен размер на маркер: „%s“, изиÑква Ñе цÑло чиÑло" + +#, c-format msgid "Failed to merge submodule %s (not checked out)" msgstr "ÐеуÑпешно Ñливане на подмодула „%s“ (не е изтеглен)" @@ -19147,7 +19304,7 @@ msgid "" "\n" "where \"$br\" is somehow empty and a 40-hex ref is created. Please\n" "examine these refs and maybe delete them. Turn this message off by\n" -"running \"git config advice.objectNameWarning false\"" +"running \"git config set advice.objectNameWarning false\"" msgstr "" "При нормална работа Git никога не Ñъздава указатели, които завършват\n" "Ñ 40 шеÑтнадеÑетични знака, защото Ñтандартно те ще бъдат преÑкачани.\n" @@ -19159,7 +19316,7 @@ msgstr "" "Ñе Ñъздава подобен указател. Прегледайте тези указатели и ги изтрийте.\n" "За да изключите това Ñъобщение, изпълнете:\n" "\n" -" git config advice.objectNameWarning false" +" config set advice.objectNameWarning false" #, c-format msgid "log for '%.*s' only goes back to %s" @@ -19330,15 +19487,6 @@ 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“ е неправилен" - msgid "corrupt bitmap lookup table: triplet position out of index" msgstr "" "повредена таблица ÑÑŠÑ ÑъответÑтвиÑ: меÑтоположението на тройката е извън " @@ -20497,20 +20645,28 @@ msgstr "журналът Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñта за ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»Ñ â€ž%s msgid "log for %s is empty" msgstr "журналът Ñ Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñта за ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»Ñ â€ž%s“ е празен" -msgid "refusing to force and skip creation of reflog" -msgstr "" -"принудителна Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð±ÐµÐ· Ñъздаване на журнал на указателите нÑма да Ñе " -"приеме" - #, c-format -msgid "refusing to update ref with bad name '%s'" -msgstr "указател не може да Ñе обнови Ñ Ð³Ñ€ÐµÑˆÐ½Ð¾ име „%s“" +msgid "refusing to update reflog for pseudoref '%s'" +msgstr "журналът на указателите нÑма да Ñе обнови Ñ Ð¿Ñевдо ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»Ñ â€ž%s“" #, c-format msgid "refusing to update pseudoref '%s'" msgstr "пÑевдо указателÑÑ‚ „%s“ нÑма да Ñе обнови" #, c-format +msgid "refusing to update reflog with bad name '%s'" +msgstr "журналът на указателите нÑма да Ñе обнови Ñ Ð³Ñ€ÐµÑˆÐ½Ð¾ име „%s“" + +#, c-format +msgid "refusing to update ref with bad name '%s'" +msgstr "указател не може да Ñе обнови Ñ Ð³Ñ€ÐµÑˆÐ½Ð¾ име „%s“" + +msgid "refusing to force and skip creation of reflog" +msgstr "" +"принудителна Ð¾Ð¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð±ÐµÐ· Ñъздаване на журнал на указателите нÑма да Ñе " +"приеме" + +#, c-format msgid "update_ref failed for ref '%s': %s" msgstr "неуÑпешно обновÑване на ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ»Ñ (update_ref) „%s“: %s" @@ -20560,6 +20716,10 @@ msgstr "" "„%s“, но вмеÑто това е обикновен указател" #, c-format +msgid "cannot read ref file '%s'" +msgstr "файлът Ñ ÑƒÐºÐ°Ð·Ð°Ñ‚ÐµÐ» „%s“ не може да Ñе прочете" + +#, c-format msgid "cannot open directory %s" msgstr "директориÑта „%s“ не може да бъде отворена" @@ -20781,6 +20941,10 @@ msgid "more than one uploadpack given, using the first" msgstr "зададен е повече от един пакет за изпращане, ще Ñе ползва първиÑÑ‚" #, c-format +msgid "unrecognized followRemoteHEAD value '%s' ignored" +msgstr "непознатата ÑтойноÑÑ‚ за „followRemoteHEAD“: „%s“, Ñе преÑкача" + +#, c-format msgid "unrecognized value transfer.credentialsInUrl: '%s'" msgstr "непозната ÑтойноÑÑ‚ за „transfer.credentialsInUrl“: „%s“" @@ -22788,6 +22952,11 @@ msgstr "подаването „%s“ не е отбелÑзано като до msgid "too many commits marked reachable" msgstr "прекалено много Ð¿Ð¾Ð´Ð°Ð²Ð°Ð½Ð¸Ñ Ñа отбелÑзани като доÑтижими" +msgid "could not determine MIDX preferred pack" +msgstr "" +"предпочитаниÑÑ‚ пакет за файла Ñ Ð¸Ð½Ð´ÐµÐºÑа за множеÑтво пакети не може да Ñе " +"определи" + msgid "test-tool serve-v2 [<options>]" msgstr "test-tool serve-v2 [ОПЦИЯ…]" @@ -23444,6 +23613,9 @@ msgstr "„.git“ е повреден" msgid ".git file incorrect" msgstr "„.git“ е неправилен" +msgid ".git file absolute/relative path mismatch" +msgstr "неÑъвпадение на абÑолютниÑ/отноÑÐ¸Ñ‚ÐµÐ»Ð½Ð¸Ñ Ð¿ÑŠÑ‚ на „.git“" + msgid "not a valid path" msgstr "неправилен път" @@ -23459,6 +23631,9 @@ msgstr "не може да Ñе открие хранилище: „.git“ е Ð msgid "gitdir unreadable" msgstr "директориÑта „gitdir“ не може да Ñе прочете" +msgid "gitdir absolute/relative path mismatch" +msgstr "„gitdir“ указва неÑъвпадение на абÑолютниÑ/отноÑÐ¸Ñ‚ÐµÐ»Ð½Ð¸Ñ Ð¿ÑŠÑ‚" + msgid "gitdir incorrect" msgstr "неправилна Ð´Ð¸Ñ€ÐµÐºÑ‚Ð¾Ñ€Ð¸Ñ â€žgitdir“" @@ -23495,6 +23670,14 @@ msgstr "„%s“ не може да Ñе изчиÑти в „%s“" msgid "failed to set extensions.worktreeConfig setting" msgstr "неуÑпешно задаване на наÑтройката „extensions.worktreeConfig“" +msgid "unable to upgrade repository format to support relative worktrees" +msgstr "" +"форматът на хранилището не може да Ñе обнови за поддръжката на отноÑителни " +"работни дървета" + +msgid "unable to set extensions.relativeWorktrees setting" +msgstr "неуÑпешно задаване на наÑтройката „extensions.relativeWorktrees“" + #, c-format msgid "could not setenv '%s'" msgstr "променливата на Ñредата „%s“ не може да Ñе зададе чрез „setenv“" @@ -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: 2024-10-04 08:33+0700\n" -"PO-Revision-Date: 2024-10-04 08:52+0700\n" +"POT-Creation-Date: 2024-12-23 18:57+0000\n" +"PO-Revision-Date: 2025-01-06 15:50+0700\n" "Last-Translator: Bagas Sanjaya <bagasdotme@gmail.com>\n" "Language-Team: Indonesian\n" "Language: id\n" @@ -755,10 +755,10 @@ msgstr "Hanya berkas biner yang berubah." #, c-format msgid "" "\n" -"Disable this message with \"git config advice.%s false\"" +"Disable this message with \"git config set advice.%s false\"" msgstr "" "\n" -"Nonaktifkan pesan ini dengan \"git config advice.%s false\"" +"Nonaktifkan pesan ini dengan \"git config set advice.%s false\"" #: advice.c #, c-format @@ -1670,9 +1670,10 @@ msgstr "bukan nama objek valid: %s" msgid "not a tree object: %s" msgstr "bukan objek pohon: %s" -#: archive.c builtin/clone.c -msgid "unable to checkout working tree" -msgstr "tidak dapat men-checkout pohon kerja" +#: archive.c +#, c-format +msgid "failed to unpack tree object %s" +msgstr "gagal membuka objek pohon %s" #: archive.c #, c-format @@ -3734,11 +3735,11 @@ msgstr "HEAD tidak ditemukan di bawah refs/heads!" #: builtin/branch.c msgid "" -"branch with --recurse-submodules can only be used if submodule." -"propagateBranches is enabled" +"branch with --recurse-submodules can only be used if " +"submodule.propagateBranches is enabled" msgstr "" -"cabang dengan --recurse-submodules hanya dapat digunakan jika submodule." -"propagateBranches diaktifkan" +"cabang dengan --recurse-submodules hanya dapat digunakan jika " +"submodule.propagateBranches diaktifkan" #: builtin/branch.c msgid "--recurse-submodules can only be used to create branches" @@ -4767,7 +4768,7 @@ msgstr "gaya konflik '%s' tidak dikenal" msgid "perform a 3-way merge with the new branch" msgstr "lakukan penggabungan 3 arah dengan cabang baru" -#: builtin/checkout.c builtin/log.c parse-options.h +#: builtin/checkout.c builtin/log.c builtin/range-diff.c parse-options.h msgid "style" msgstr "gaya" @@ -4796,9 +4797,8 @@ msgid "update ignored files (default)" msgstr "perbarui berkas yang diabaikan (default)" #: builtin/checkout.c -msgid "do not check if another worktree is holding the given ref" -msgstr "" -"jangan periksa jika pohon kerja yang lain mempunyai referensi yang diberikan" +msgid "do not check if another worktree is using this branch" +msgstr "jangan periksa jika pohon kerja yang lain menggunakan cabang ini" #: builtin/checkout.c msgid "checkout our version for unmerged files" @@ -5179,14 +5179,13 @@ msgstr "buat klon dangkal sedalam kedalaman tersebut" 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" +#: builtin/clone.c builtin/fetch.c builtin/pull.c +msgid "ref" +msgstr "referensi" #: builtin/clone.c builtin/fetch.c builtin/pull.c -msgid "deepen history of shallow clone, excluding rev" -msgstr "perdalam riwayat klon dangkal, tidak termasuk rev" +msgid "deepen history of shallow clone, excluding ref" +msgstr "perdalam riwayat klon dangkal, kecualikan referensi" #: builtin/clone.c builtin/submodule--helper.c msgid "clone only one branch, HEAD or --branch" @@ -5349,6 +5348,10 @@ msgid "remote HEAD refers to nonexistent ref, unable to checkout" msgstr "HEAD remote merujuk pada ref yang tidak ada, tidak dapat men-checkout" #: builtin/clone.c +msgid "unable to checkout working tree" +msgstr "tidak dapat men-checkout pohon kerja" + +#: builtin/clone.c msgid "unable to write parameters to config file" msgstr "tidak dapat menulis parameter ke berkas konfigurasi" @@ -6347,10 +6350,10 @@ msgstr "" #: builtin/config.c msgid "" "git config unset [<file-option>] [--all] [--value=<value>] [--fixed-value] " -"<name> <value>" +"<name>" msgstr "" -"git config unset [<opsi berkas] [--all] [--value=<nilai>] [--fixed-value] " -"<nama> <nilai>" +"git config unset [<opsi berkas>] [--all] [--value=<nilai>] [--fixed-value] " +"<nama>" #: builtin/config.c msgid "git config rename-section [<file-option>] <old-name> <new-name>" @@ -6907,12 +6910,8 @@ msgstr "%lu komit dilintasi\n" #: builtin/describe.c #, c-format -msgid "" -"more than %i tags found; listed %i most recent\n" -"gave up search at %s\n" -msgstr "" -"lebih dari %i tag ditemukan; %i terbaru didaftarkan\n" -"menyerah mencari pada %s\n" +msgid "found %i tags; gave up search at %s\n" +msgstr "dapat %i tag; menyerah mencari pada %s\n" #: builtin/describe.c #, c-format @@ -7389,8 +7388,8 @@ msgstr "" "fetch secara normal mengindikasikan cabang mana ada pembaruan terpaksa,\n" "tapi pemeriksaan tersebut sudah dinonaktifkan. Untuk aktifkan kembali, " "gunakan\n" -"bendera '--show-forced-updates' atau jalankan 'git config fetch." -"showForcedUpdates true'." +"bendera '--show-forced-updates' atau jalankan 'git config " +"fetch.showForcedUpdates true'." #: builtin/fetch.c #, c-format @@ -7468,6 +7467,21 @@ msgid "the object %s does not exist" msgstr "objek '%s' tidak ada" #: builtin/fetch.c +#, c-format +msgid "" +"Run 'git remote set-head %s %s' to follow the change, or set\n" +"'remote.%s.followRemoteHEAD' configuration option to a different value\n" +"if you do not want to see this message. Specifically running\n" +"'git config set remote.%s.followRemoteHEAD %s' will disable the warning\n" +"until the remote changes HEAD to something else." +msgstr "" +"Jalankan 'git remote set-head %s %s' untuk mengikuti perubahan, atau setel\n" +"opsi konfigurasi 'remote.%s.followRemoteHEAD' ke nilai yang berbeda jika\n" +"Anda tidak ingin melihat pesan ini lagi. Secara rinci menjalakan\n" +"'git config set remote.%s followRemoteHEAD %s' akan mematikan peringatan\n" +"ini sampai remote mengubah HEAD ke yang lain." + +#: builtin/fetch.c msgid "multiple branches detected, incompatible with --set-upstream" msgstr "banyak cabang terdeteksi, tidak kompatibel dengan --set-upstream" @@ -7641,6 +7655,10 @@ msgstr "peta referensi" msgid "specify fetch refmap" msgstr "sebutkan ambil peta referensi" +#: builtin/fetch.c builtin/pull.c builtin/rebase.c builtin/replay.c +msgid "revision" +msgstr "revisi" + #: builtin/fetch.c builtin/pull.c msgid "report that we have only objects reachable from this object" msgstr "" @@ -7711,8 +7729,8 @@ msgstr "protokol tidak mendukung --negotiate-only, keluar." #: builtin/fetch.c msgid "" -"--filter can only be used with the remote configured in extensions." -"partialclone" +"--filter can only be used with the remote configured in " +"extensions.partialclone" msgstr "" "--filter hanya dapat digunakan dengan remote yang terkonfigurasi di " "extensions.partialclone" @@ -8565,8 +8583,25 @@ msgid "%s scheduler is not available" msgstr "penjadwal %s tidak tersedia" #: builtin/gc.c -msgid "another process is scheduling background maintenance" -msgstr "proses lainnya sedang menjadwalkan peme" +#, c-format +msgid "" +"unable to create '%s.lock': %s.\n" +"\n" +"Another scheduled git-maintenance(1) process seems to be running in this\n" +"repository. Please make sure no other maintenance processes are running and\n" +"then try again. If it still fails, a git-maintenance(1) process may have\n" +"crashed in this repository earlier: remove the file manually to continue." +msgstr "" +"Tidak dapat membuat '%s.lock': %s.\n" +"\n" +"Sepertinya proses git-maintenance(1) lainnya berjalan pada repositori ini.\n" +"Pastikan tidak ada proses pemeliharaan lainnya yang berjalan dan coba lagi.\n" +"Jika masih gagal, suatu proses git-maintenance(1) bisa jadi hancur pada\n" +"repositori ini sebelumnya: hapus berkas secara manual untuk melanjutkan." + +#: builtin/gc.c +msgid "cannot acquire lock for scheduled background maintenance" +msgstr "tidak dapat memperoleh kunci untuk pemeliharran balik layar terjadwal" #: builtin/gc.c msgid "git maintenance start [--scheduler=<scheduler>]" @@ -9298,6 +9333,23 @@ msgstr[0] "panjang rantai = %d: %lu objek" msgstr[1] "panjang rantai = %d: %lu objek" #: builtin/index-pack.c +msgid "could not start pack-objects to repack local links" +msgstr "tidak dapat memulai pack-objects untuk mempak ulang tautan lokal" + +#: builtin/index-pack.c +msgid "failed to feed local object to pack-objects" +msgstr "tidak dapat memasukkan objek ke pada pack-objects" + +#: builtin/index-pack.c +msgid "index-pack: Expecting full hex object ID lines only from pack-objects." +msgstr "" +"index-pack: Mengharapkan hanya baris hex ID objek penuh daripack-objects." + +#: builtin/index-pack.c +msgid "could not finish pack-objects to repack local links" +msgstr "tidak dapat menyelesaikan pack-objects untuk mempak ulang tautan lokal" + +#: builtin/index-pack.c msgid "Cannot come back to cwd" msgstr "tidak dapat kembali ke direktori kerja saat ini" @@ -9312,6 +9364,10 @@ msgid "unknown hash algorithm '%s'" msgstr "algoritma hash tak dikenal '%s'" #: builtin/index-pack.c +msgid "--promisor cannot be used with a pack name" +msgstr "--promisor tidak dapat digunakan dengan nama pak" + +#: builtin/index-pack.c msgid "--stdin requires a git repository" msgstr "--stdin memerlukan repositori git" @@ -11055,11 +11111,11 @@ msgstr "git notes [--ref <referensi catan>] [list [<objek>]]" msgid "" "git notes [--ref <notes-ref>] add [-f] [--allow-empty] [--[no-]separator|--" "separator=<paragraph-break>] [--[no-]stripspace] [-m <msg> | -F <file> | (-c " -"| -C) <object>] [<object>]" +"| -C) <object>] [<object>] [-e]" msgstr "" "git notes [--ref <referensi catatan>] add [-f] [--allow-empty] [--" "[no-]separator|--separator=<pemisah paragraf>] [--[no-]stripspace] [-m " -"<pesan | -F <berkas> | (-c | -C) <objek>] [<objek>]" +"<pesan> | -F <berkas> | (-c | -C) <objek>] [<objek>] [-e]" #: builtin/notes.c msgid "git notes [--ref <notes-ref>] copy [-f] <from-object> <to-object>" @@ -11070,11 +11126,11 @@ msgstr "" msgid "" "git notes [--ref <notes-ref>] append [--allow-empty] [--[no-]separator|--" "separator=<paragraph-break>] [--[no-]stripspace] [-m <msg> | -F <file> | (-c " -"| -C) <object>] [<object>]" +"| -C) <object>] [<object>] [-e]" msgstr "" "git notes [--ref <referensi catatan>] append [--alow-empty] [--" "[no]separator|--separator=<pemisah paragraf>] [--[no-]stripspace] [-m " -"<pesan> | -F <berkas> | (-c | -C) <objek>] [<objek>]" +"<pesan> | -F <berkas> | (-c | -C) <objek>] [<objek>] [-e]" #: builtin/notes.c msgid "git notes [--ref <notes-ref>] edit [--allow-empty] [<object>]" @@ -11228,6 +11284,10 @@ msgid "reuse and edit specified note object" msgstr "gunakan ulang dan sunting objek catatan yang disebutkan" #: builtin/notes.c +msgid "edit note message in editor" +msgstr "sunting pesan catatan dalam penyunting" + +#: builtin/notes.c msgid "reuse specified note object" msgstr "gunakan ulang objek catatan yang disebutkan" @@ -11857,6 +11917,10 @@ msgid "do not pack objects in promisor packfiles" msgstr "jangan pak objek di dalam pak penjanji" #: builtin/pack-objects.c +msgid "implies --missing=allow-any" +msgstr "mengimplikasikan --missing=allow-any" + +#: builtin/pack-objects.c msgid "respect islands during delta compression" msgstr "patuhi pulau selama pemampatan delta" @@ -12269,8 +12333,8 @@ msgid "" msgstr "" "\n" "Untuk menghindari konfigurasi cabang hulu otomatis ketika namanya\n" -"tidak akan cocok dengan cabang lokal, lihat opsi 'simple' dari branch." -"autoSetupMerge\n" +"tidak akan cocok dengan cabang lokal, lihat opsi 'simple' dari " +"branch.autoSetupMerge\n" "di 'git help config'.\n" #: builtin/push.c @@ -13811,6 +13875,35 @@ msgstr[0] " Referensi lokal dikonfigurasi untuk 'git push'%s:" msgstr[1] " Referensi lokal dikonfigurasi untuk 'git push'%s:" #: builtin/remote.c +#, c-format +msgid "'%s/HEAD' is unchanged and points to '%s'\n" +msgstr "'%s/HEAD' tak berubah dan menunjuk pada '%s'\n" + +#: builtin/remote.c +#, c-format +msgid "'%s/HEAD' has changed from '%s' and now points to '%s'\n" +msgstr "'%s/HEAD' berubah dari '%s' dan sekarang menunjuk pada '%s'\n" + +#: builtin/remote.c +#, c-format +msgid "'%s/HEAD' is now created and points to '%s'\n" +msgstr "'%s/HEAD' sekarang dibuat dan menunjuk pada '%s'\n" + +#: builtin/remote.c +#, c-format +msgid "'%s/HEAD' was detached at '%s' and now points to '%s'\n" +msgstr "%s/HEAD' terlepas pada '%s' dan sekarang menunjuk pada '%s'\n" + +#: builtin/remote.c +#, c-format +msgid "" +"'%s/HEAD' used to point to '%s' (which is not a remote branch), but now " +"points to '%s'\n" +msgstr "" +"'%s/HEAD' dulunya menunjuk pada '%s' (yang bukan cabang remote), tetapi " +"sekarang menunjuk pada '%s'\n" + +#: builtin/remote.c msgid "set refs/remotes/<name>/HEAD according to remote" msgstr "setel refs/remotes/<nama>/HEAD tergantung remote" @@ -13838,8 +13931,8 @@ msgstr "Bukan referensi valid: %s" #: builtin/remote.c #, c-format -msgid "Could not setup %s" -msgstr "Tidak dapat mengatur %s" +msgid "Could not set up %s" +msgstr "Tidak dapat menyiapkan %s" #: builtin/remote.c #, c-format @@ -17247,6 +17340,10 @@ msgstr "pasang mode pelacakan (lihat git-branch(1))" msgid "try to match the new branch name with a remote-tracking branch" msgstr "coba cocokkan nama cabang baru dengan sebuah cabang pelacakan remote" +#: builtin/worktree.c +msgid "use relative paths for worktrees" +msgstr "gunakan jalur relatif untuk pohon kerja" + #: builtin/worktree.c diff.c parse-options.c #, c-format msgid "options '%s', '%s', and '%s' cannot be used together" @@ -17588,6 +17685,31 @@ msgstr "tidak dapat membuat '%s'" msgid "index-pack died" msgstr "index-pack mati" +#: cache-tree.c +#, c-format +msgid "directory '%s' is present in index, but not sparse" +msgstr "direktori '%s' ada pada indeks, tapi bukan tipis" + +#: cache-tree.c unpack-trees.c +msgid "corrupted cache-tree has entries not present in index" +msgstr "pohon tembolok rusak mempunyai entri yang tidak ada pada indeks" + +#: cache-tree.c +#, c-format +msgid "%s with flags 0x%x should not be in cache-tree" +msgstr "%s dengan bendera 0x%x tidak boleh ada di pohon tembolok" + +#: cache-tree.c +#, c-format +msgid "bad subtree '%.*s'" +msgstr "subpohon jelek '%.*s'" + +#: cache-tree.c +#, c-format +msgid "cache-tree for path %.*s does not match. Expected %s got %s" +msgstr "" +"pohon tembolok untuk jalur %.*s tidak cocok. %s diharapkan tapi dapat %s" + #: chunk-format.c msgid "terminating chunk id appears earlier than expected" msgstr "id bingkah pengakhiran muncul lebih awal dari yang diharapkan" @@ -18714,16 +18836,16 @@ msgid "" "to convert the grafts into replace refs.\n" "\n" "Turn this message off by running\n" -"\"git config advice.graftFileDeprecated false\"" +"\"git config set advice.graftFileDeprecated false\"" msgstr "" "Dukungan untuk <GIT_DIR>/info/grafts usang dan akan dihapus\n" -"pada versi Git di masa yang akan datang.\n" +"pada versi Git mendatang.\n" "\n" "Mohon gunakan \"git replace --convert-graft-file\"\n" "untuk mengkonversi cangkuk ke referensi penggantian.\n" "\n" "Matikan pesan ini dengan menjalankan\n" -"\"git config advice.graftFileDeprecated false\"" +"\"git config set advice.graftFileDeprecated false\"" #: commit.c #, c-format @@ -19739,6 +19861,21 @@ msgstr "url tidak punya skema: %s" msgid "credential url cannot be parsed: %s" msgstr "url kredensial tidak dapat diuraikan: %s" +#: daemon.c +#, c-format +msgid "invalid timeout '%s', expecting a non-negative integer" +msgstr "timeout '%s' tidak valid, bilangan bulat non-negatif diharapkan" + +#: daemon.c +#, c-format +msgid "invalid init-timeout '%s', expecting a non-negative integer" +msgstr "init-timeout '%s' tidak valid, bilangan bulat non-negatif diharapkan" + +#: daemon.c +#, c-format +msgid "invalid max-connections '%s', expecting an integer" +msgstr "max-connections '%s' tidak valid, bilangan bulat diharapkan" + #: date.c msgid "in the future" msgstr "di masa depan" @@ -20632,6 +20769,21 @@ msgid "too many args to run %s" msgstr "terlalu banyak argumen untuk menjalankan %s" #: fetch-pack.c +#, c-format +msgid "" +"You are attempting to fetch %s, which is in the commit graph file but not in " +"the object database.\n" +"This is probably due to repo corruption.\n" +"If you are attempting to repair this repo corruption by refetching the " +"missing object, use 'git fetch --refetch' with the missing object." +msgstr "" +"Anda mencoba mengambil %s, yang ada di dalam berkas grafik komit tapi bukan " +"di dalam basis data objek.\n" +"Bisa jadi ini dikarenakan kerusakan repositori.\n" +"Apabila Anda mencoba memperbaiki keruskanan repositori ini dengan mengambil " +"ulang objek yang hilang, gunakan 'git fetch --refetch' dengan objek tersebut." + +#: fetch-pack.c msgid "git fetch-pack: expected shallow list" msgstr "git fetch-pack: daftar dangkal diharapkan" @@ -21351,11 +21503,11 @@ msgstr[1] "" #, c-format msgid "" "The '%s' hook was ignored because it's not set as executable.\n" -"You can disable this warning with `git config advice.ignoredHook false`." +"You can disable this warning with `git config set advice.ignoredHook false`." msgstr "" -"Kait '%s' diabaikan karena tidak disetel sebagai dapat dieksekusi.\n" -"Anda dapat menonaktifkan peringatan ini dengan `git config advice." -"ignoredHook false`." +"Kait '%s' diabaikan karena tidak disetel sebagai berkas yang dapat\n" +"dieksekusi. Anda dapat menonaktifkan peringatan ini dengan\n" +"`git config set advice.ignoredHook false`." #: http-fetch.c msgid "not a git repository" @@ -21376,18 +21528,10 @@ msgid "Delegation control is not supported with cURL < 7.22.0" msgstr "Kontrol delegasi tidak didukung oleh cURL < 7.22.0" #: http.c -msgid "Public key pinning not supported with cURL < 7.39.0" -msgstr "Penyematan kunci publik tidak didukung oleh cURL < 7.39.0" - -#: http.c msgid "Unknown value for http.proactiveauth" msgstr "nilai tidak dikenal untuk http.proactiveauth" #: http.c -msgid "CURLSSLOPT_NO_REVOKE not supported with cURL < 7.44.0" -msgstr "CURLSSLOPT_NO_REVOKE tidak didukung dengan cURL < 7.44.0" - -#: http.c #, c-format msgid "Unsupported SSL backend '%s'. Supported SSL backends:" msgstr "Tulang punggung SSL '%s' tidak didukung, yang didukung:" @@ -21609,6 +21753,11 @@ msgstr "CRLF terkutip terdeteksi" msgid "unable to format message: %s" msgstr "tidak dapat memformat pesan: %s" +#: merge-ll.c +#, c-format +msgid "invalid marker-size '%s', expecting an integer" +msgstr "marker-size '%s' tidak valid, bilangan bulat diharapkan" + #: merge-ort.c merge-recursive.c #, c-format msgid "Failed to merge submodule %s (not checked out)" @@ -22955,19 +23104,17 @@ msgid "" "\n" "where \"$br\" is somehow empty and a 40-hex ref is created. Please\n" "examine these refs and maybe delete them. Turn this message off by\n" -"running \"git config advice.objectNameWarning false\"" +"running \"git config set advice.objectNameWarning false\"" msgstr "" "Biasanya Git tidak pernah membuat sebuah referensi yang diakhiri dengan\n" -"40 karakter hex, karena akan diabaikan ketika Anda hanya menyebutkan 40-" -"hex.\n" +"40 karakter hex, karena akan diabaikan ketika Anda hanya merincikan 40-hex.\n" "Referensi tersebut bisa tidak sengaja dibuat. Misalnya,\n" "\n" " git switch -c $br $(git rev-parse ...)\n" "\n" "dimana \"$br\" entah bagaimana kosong dan referensi 40-hex dibuat.\n" -"Mohon periksa referensi tersebut dan mungkin hapus. Matikan pesan ini " -"dengan\n" -"menjalankan \"git config advice.objectNameWarning false\"" +"Mohon periksa referensi tersebut dan mungkin hapus. Matikan pesan ini\n" +"dengan menjalankan \"git config set advice.objectNameWarning false\"" #: object-name.c #, c-format @@ -23166,15 +23313,6 @@ 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" -msgstr "pak yang disukai '%s' kadaluarsa" - #: pack-bitmap.c msgid "corrupt bitmap lookup table: triplet position out of index" msgstr "tabel pencarian bitmap rusak: posisi kembar tiga di luar indeks" @@ -24546,8 +24684,19 @@ msgid "log for %s is empty" msgstr "log untuk %s kosong" #: refs.c -msgid "refusing to force and skip creation of reflog" -msgstr "menolak memaksa dan melewatkan pembuatan reflog" +#, c-format +msgid "refusing to update reflog for pseudoref '%s'" +msgstr "menolak memperbarui reflog untuk referensi semu '%s'" + +#: refs.c +#, c-format +msgid "refusing to update pseudoref '%s'" +msgstr "menolak memperbarui referensi semu '%s'" + +#: refs.c +#, c-format +msgid "refusing to update reflog with bad name '%s'" +msgstr "menolak memperbarui reflog dengan nama jelek '%s'" #: refs.c #, c-format @@ -24555,9 +24704,8 @@ msgid "refusing to update ref with bad name '%s'" msgstr "menolak memperbarui referensi dengan nama jelek '%s'" #: refs.c -#, c-format -msgid "refusing to update pseudoref '%s'" -msgstr "menolak memperbarui referensi semu '%s'" +msgid "refusing to force and skip creation of reflog" +msgstr "menolak memaksa dan melewatkan pembuatan reflog" #: refs.c #, c-format @@ -24622,6 +24770,11 @@ msgstr "" #: refs/files-backend.c #, c-format +msgid "cannot read ref file '%s'" +msgstr "tidak dapat membaca berkas referensi '%s'" + +#: refs/files-backend.c +#, c-format msgid "cannot open directory %s" msgstr "tidak dapat membuka direktori %s" @@ -24885,6 +25038,11 @@ msgstr "lebih dari satu paket unggah diberikan, gunakan yang pertama" #: remote.c #, c-format +msgid "unrecognized followRemoteHEAD value '%s' ignored" +msgstr "nilai followRemoteHEAD yang tak dikenal '%s' diabaikan" + +#: remote.c +#, c-format msgid "unrecognized value transfer.credentialsInUrl: '%s'" msgstr "nilai transfer.credentialsInUrl tidak dikenal: '%s'" @@ -27240,6 +27398,10 @@ msgstr "komit %s tidak ditandai sebagai dapat dicapai" msgid "too many commits marked reachable" msgstr "terlalu banyak komit yang ditandai sebagai dapat dicapai" +#: t/helper/test-read-midx.c +msgid "could not determine MIDX preferred pack" +msgstr "tidak dapat menentukan pak MIDX terpilih" + #: t/helper/test-serve-v2.c msgid "test-tool serve-v2 [<options>]" msgstr "test-tool serve-v2 [<opsi>]" @@ -28027,6 +28189,10 @@ msgid ".git file incorrect" msgstr "berkas .git salah" #: worktree.c +msgid ".git file absolute/relative path mismatch" +msgstr "jalur absolut/relative berkas .git tidak cocok" + +#: worktree.c msgid "not a valid path" msgstr "bukan jalur valid" @@ -28048,6 +28214,10 @@ msgid "gitdir unreadable" msgstr "gitdir tidak dapat dibaca" #: worktree.c +msgid "gitdir absolute/relative path mismatch" +msgstr "jalur absolut/relatif gitdir tidak cocok" + +#: worktree.c msgid "gitdir incorrect" msgstr "gitdir salah" @@ -28091,6 +28261,16 @@ msgstr "tidak dapat menyetel balik %s di '%s'" msgid "failed to set extensions.worktreeConfig setting" msgstr "gagal menyetel setelan extensions.worktreeConfig" +#: worktree.c +msgid "unable to upgrade repository format to support relative worktrees" +msgstr "" +"tidak dapat meningkatkan format repositori untuk mendukung pohon kerja " +"relatif" + +#: worktree.c +msgid "unable to set extensions.relativeWorktrees setting" +msgstr "gagal menyetel setelan extensions.relativeWorktrees" + #: wrapper.c #, c-format msgid "could not setenv '%s'" @@ -5,10 +5,10 @@ # msgid "" msgstr "" -"Project-Id-Version: git 2.47.0\n" +"Project-Id-Version: git 2.48.0\n" "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n" -"POT-Creation-Date: 2024-09-19 02:06+0000\n" -"PO-Revision-Date: 2024-09-28 15:45+0100\n" +"POT-Creation-Date: 2024-12-30 11:57+0100\n" +"PO-Revision-Date: 2024-12-30 12:03+0100\n" "Last-Translator: Peter Krefting <peter@softwolves.pp.se>\n" "Language-Team: Svenska <tp-sv@listor.tp-sv.se>\n" "Language: sv\n" @@ -624,10 +624,10 @@ msgstr "Endast binära filer ändrade." #, c-format msgid "" "\n" -"Disable this message with \"git config advice.%s false\"" +"Disable this message with \"git config set advice.%s false\"" msgstr "" "\n" -"SlÃ¥ av meddelandet med â€git config advice.%s falseâ€" +"SlÃ¥ av meddelandet med â€git config set advice.%s falseâ€" #, c-format msgid "%shint:%s%.*s%s\n" @@ -1300,7 +1300,7 @@ msgstr "fel i deflate (%d)" #, c-format msgid "unable to start '%s' filter" -msgstr "kane inte starta filtret â€%sâ€" +msgstr "kan inte starta filtret â€%sâ€" msgid "unable to redirect descriptor" msgstr "kan inte omdirigera handtag" @@ -1358,6 +1358,10 @@ msgid "not a tree object: %s" msgstr "inte ett trädobjekt: %s" #, c-format +msgid "failed to unpack tree object %s" +msgstr "misslyckades packa upp trädobjektet %s" + +#, c-format msgid "File not found: %s" msgstr "Hittar inte filen: %s" @@ -2808,7 +2812,7 @@ msgstr "kunde inte slÃ¥ upp HEAD" #, c-format msgid "HEAD (%s) points outside of refs/heads/" -msgstr "HEAD (%s) pekar utenför refs/heads/" +msgstr "HEAD (%s) pekar utanför refs/heads/" #, c-format msgid "branch %s is being rebased at %s" @@ -2824,7 +2828,7 @@ msgstr "HEAD i arbetskatalogen %s har inte uppdaterats" #, c-format msgid "invalid branch name: '%s'" -msgstr "gelaktigt namn pÃ¥ gren: â€%sâ€" +msgstr "felaktigt namn pÃ¥ gren: â€%sâ€" #, c-format msgid "no commit on branch '%s' yet" @@ -3297,7 +3301,7 @@ msgid "read commands from stdin" msgstr "läs kommandon frÃ¥n standard in" msgid "with --batch[-check]: ignores stdin, batches all known objects" -msgstr "med --batch[-check]: ignorear standard in, buntar alla kända objekt" +msgstr "med --batch[-check]: ignorerar standard in, buntar alla kända objekt" msgid "Change or optimize batch output" msgstr "Ändra eller optimera buntutdata" @@ -3683,13 +3687,13 @@ msgid "" "one remote, e.g. the 'origin' remote, consider setting\n" "checkout.defaultRemote=origin in your config." msgstr "" -"Om du menade checka ut en spÃ¥rad fjärrgren pÃ¥ t.ex â€originâ€, kan du\n" +"Om du menade checka ut en spÃ¥rad fjärrgren pÃ¥ t.ex. â€originâ€, kan du\n" "göra det genom att ange hela namnet med flaggan --track:\n" "\n" " git checkout --track origin/<namn>\n" "\n" "Om du alltid vill att utcheckningar med tvetydiga <namn> ska\n" -"föredra en fjärr, t.ex fjärren â€origin†kan du ställa in\n" +"föredra en fjärr, t.ex. fjärren â€origin†kan du ställa in\n" "checkout.defaultRemote=origin i din konfiguration." #, c-format @@ -3795,7 +3799,7 @@ msgid "Cannot switch branch to a non-commit '%s'" msgstr "Kan inte växla gren till icke-incheckningen â€%sâ€" msgid "missing branch or commit argument" -msgstr "saknar gren- eller incheckingsargument" +msgstr "saknar gren- eller incheckningsargument" #, c-format msgid "unknown conflict style '%s'" @@ -3825,9 +3829,8 @@ msgstr "ny ofödd gren" msgid "update ignored files (default)" msgstr "uppdatera ignorerade filer (standard)" -msgid "do not check if another worktree is holding the given ref" -msgstr "" -"kontrollera inte om en annan arbetskatalog hÃ¥ller den angivna referensen" +msgid "do not check if another worktree is using this branch" +msgstr "kontrollera inte om en annan arbetskatalog använder grenen" msgid "checkout our version for unmerged files" msgstr "checka ut vÃ¥r version för ej sammanslagna filer" @@ -4125,11 +4128,11 @@ msgstr "skapa en grund klon pÃ¥ detta djup" msgid "create a shallow clone since a specific time" msgstr "skapa en grund klon frÃ¥n en angiven tidpunkt" -msgid "revision" -msgstr "revision" +msgid "ref" +msgstr "ref" -msgid "deepen history of shallow clone, excluding rev" -msgstr "fördjupa historik för grund klon, exkludera revisionen" +msgid "deepen history of shallow clone, excluding ref" +msgstr "fördjupa historik för grund klon, exkludera ref" msgid "clone only one branch, HEAD or --branch" msgstr "klona endast en gren, HEAD eller --branch" @@ -4422,7 +4425,7 @@ msgid "the object directory to store the graph" msgstr "objektkatalogen där grafen ska lagras" msgid "if the commit-graph is split, only verify the tip file" -msgstr "om inchecknignsgrafen är delad, kontrollera bara spetsfilen" +msgstr "om incheckningsgrafen är delad, kontrollera bara spetsfilen" #, c-format msgid "Could not open commit-graph '%s'" @@ -4468,7 +4471,7 @@ msgstr "tillÃ¥t skriva en inkrementell incheckningsgraffil" msgid "maximum number of commits in a non-base split commit-graph" msgstr "" -"maximalt antal incheckningar i en delad incheckingsgraf som inte är bad" +"maximalt antal incheckningar i en delad incheckningsgraf som inte är bad" msgid "maximum ratio between two levels of a split commit-graph" msgstr "maximalt förhÃ¥llande mellan tvÃ¥ nivÃ¥er av en delad incheckningsgraf" @@ -4477,7 +4480,7 @@ msgid "only expire files older than a given date-time" msgstr "lÃ¥t tid endast gÃ¥ ut för filer äldre än givet datum och tid" msgid "maximum number of changed-path Bloom filters to compute" -msgstr "maximalt antal Bloom-filer med ändrad sökväg att beräkna" +msgstr "maximalt antal Bloom-filter med ändrad sökväg att beräkna" msgid "use at most one of --reachable, --stdin-commits, or --stdin-packs" msgstr "använd som mest en av --reachable, --stdin-commits och --stdin-packs" @@ -5054,10 +5057,10 @@ msgstr "" msgid "" "git config unset [<file-option>] [--all] [--value=<value>] [--fixed-value] " -"<name> <value>" +"<name>" msgstr "" "git config unset [<filflagga>] [--all] [--value=<värde>] [--fixed-value] " -"<namn> <värde>" +"<namn>" msgid "git config rename-section [<file-option>] <old-name> <new-name>" msgstr "git config rename-section [<filflagga>] <gammalt-namn> <nytt-namn>" @@ -5423,7 +5426,7 @@ msgstr "â€credential-cache†ej tillgänglig; stöd för unix-uttag saknas" #, c-format msgid "unable to get credential storage lock in %d ms" -msgstr "kan inte erhÃ¥lla lÃ¥set för lagring av inlogginsuppgifter pÃ¥ %d ms" +msgstr "kan inte erhÃ¥lla lÃ¥set för lagring av inloggningsuppgifter pÃ¥ %d ms" msgid "" "git describe [--all] [--tags] [--contains] [--abbrev=<n>] [<commit-ish>...]" @@ -5490,12 +5493,8 @@ msgid "traversed %lu commits\n" msgstr "traverserade %lu incheckningar\n" #, c-format -msgid "" -"more than %i tags found; listed %i most recent\n" -"gave up search at %s\n" -msgstr "" -"mer än %i taggar hittades; listar de %i senaste\n" -"gav upp sökningen vid %s\n" +msgid "found %i tags; gave up search at %s\n" +msgstr "hittade %i taggar; gav upp sökning vid %s\n" #, c-format msgid "describe %s\n" @@ -5783,7 +5782,7 @@ msgid "Expected 'to' command, got %s" msgstr "Förväntade â€toâ€-kommando, fick %s" msgid "Expected format name:filename for submodule rewrite option" -msgstr "Förvändae formatet namn:filnamn för undermodul-omskrivningsflaggan" +msgstr "Förväntade formatet namn:filnamn för undermodul-omskrivningsflaggan" #, c-format msgid "feature '%s' forbidden in input without --allow-unsafe-features" @@ -5927,6 +5926,20 @@ msgstr "%s är inte ett giltigt objekt" msgid "the object %s does not exist" msgstr "objektet %s finns inte" +#, c-format +msgid "" +"Run 'git remote set-head %s %s' to follow the change, or set\n" +"'remote.%s.followRemoteHEAD' configuration option to a different value\n" +"if you do not want to see this message. Specifically running\n" +"'git config set remote.%s.followRemoteHEAD %s' will disable the warning\n" +"until the remote changes HEAD to something else." +msgstr "" +"Kör â€git remote set-head %s %s†för att följa ändringen, eller sätt\n" +"konfigurationsflaggan â€remote %s.followRemoteHEAD†till ett annat värde\n" +"om du inte vill se det här meddelandet. Du kan specifikt inaktivera\n" +"varningen till fjärren ändrar HEAD till nÃ¥got annat genom att köra\n" +"â€git config set remote %s.followRemoteHEAD %sâ€." + msgid "multiple branches detected, incompatible with --set-upstream" msgstr "flera grenar upptäcktes, inkompatibelt med --set-upstream" @@ -6064,6 +6077,9 @@ msgstr "referenskarta" msgid "specify fetch refmap" msgstr "ange referenskarta för â€fetchâ€" +msgid "revision" +msgstr "revision" + msgid "report that we have only objects reachable from this object" msgstr "rapportera att vi bara har objekt nÃ¥bara frÃ¥n detta objektet" @@ -6077,7 +6093,7 @@ msgid "check for forced-updates on all updated branches" msgstr "se efter tvingade uppdateringar i alla uppdaterade grenar" msgid "write the commit-graph after fetching" -msgstr "skriv incheckingsgrafen efter hämtning" +msgstr "skriv incheckningsgrafen efter hämtning" msgid "accept refspecs from stdin" msgstr "ta emot referenser frÃ¥n standard in" @@ -6125,7 +6141,7 @@ msgid "--atomic can only be used when fetching from one remote" msgstr "--atomic kan bara användas vid hämtning frÃ¥n en fjärr" msgid "--stdin can only be used when fetching from one remote" -msgstr "--stdin kan bara användas vid hämtning fÃ¥rn en fjärr" +msgstr "--stdin kan bara användas vid hämtning frÃ¥n en fjärr" msgid "" "git fmt-merge-msg [-m <message>] [--log[=<n>] | --no-log] [--file <file>]" @@ -6422,7 +6438,7 @@ msgid "report root nodes" msgstr "rapportera rotnoder" msgid "make index objects head nodes" -msgstr "gör indexojekt till huvudnoder" +msgstr "gör indexobjekt till huvudnoder" msgid "make reflogs head nodes (default)" msgstr "gör refloggar till huvudnoder (standard)" @@ -6789,8 +6805,25 @@ msgstr "varken systemd-timer eller crontab är tillgänglig" msgid "%s scheduler is not available" msgstr "%s-schemaläggare är inte tillgänglig" -msgid "another process is scheduling background maintenance" -msgstr "en annan process schemalägger bakgrundsunderhÃ¥ll" +#, c-format +msgid "" +"unable to create '%s.lock': %s.\n" +"\n" +"Another scheduled git-maintenance(1) process seems to be running in this\n" +"repository. Please make sure no other maintenance processes are running and\n" +"then try again. If it still fails, a git-maintenance(1) process may have\n" +"crashed in this repository earlier: remove the file manually to continue." +msgstr "" +"Kunde inte skapa â€%s.lockâ€: %s.\n" +"\n" +"Det verkar som en annan schemalagd git-maintenance(1)-process kör i det\n" +"här arkivet. Se till att inga andra underhÃ¥llsprocesser körs och försök\n" +"sedan igen. Om det fortfarande misslyckas kanske en git-maintenance(1)-\n" +"process har kraschat i det här arkivet tidigare: ta bort filen manuellt\n" +"för att fortsätta." + +msgid "cannot acquire lock for scheduled background maintenance" +msgstr "kan inte erhÃ¥lla lÃ¥set för schemalagt bakgrundsunderhÃ¥ll" msgid "git maintenance start [--scheduler=<scheduler>]" msgstr "git maintenance start [--scheduler=<schemaläggare>]" @@ -7320,7 +7353,7 @@ msgstr "paketfilnamnet â€%s†slutar inte med â€.%sâ€" #, c-format msgid "cannot write %s file '%s'" -msgstr "kan inte ta skriva %s-fil â€%sâ€" +msgstr "kan inte skriva %s-fil â€%sâ€" #, c-format msgid "cannot close written %s file '%s'" @@ -7357,6 +7390,19 @@ msgid_plural "chain length = %d: %lu objects" msgstr[0] "kedjelängd = %d: %lu objekt" msgstr[1] "kedjelängd = %d: %lu objekt" +msgid "could not start pack-objects to repack local links" +msgstr "kunde inte starta pack-objects för att packa om lokala länkar" + +msgid "failed to feed local object to pack-objects" +msgstr "misslyckades sända lokala objekt till pack-objects" + +msgid "index-pack: Expecting full hex object ID lines only from pack-objects." +msgstr "" +"index-pack: Förväntar kompletta hex-objekt-ID-rader endast frÃ¥n pack-objects." + +msgid "could not finish pack-objects to repack local links" +msgstr "kunde inte avsluta pack-objects för att packa om lokala länkar" + msgid "Cannot come back to cwd" msgstr "Kan inte gÃ¥ tillbaka till arbetskatalogen (cwd)" @@ -7368,6 +7414,9 @@ msgstr "felaktig %s" msgid "unknown hash algorithm '%s'" msgstr "okänd hashningsalgoritm â€%sâ€" +msgid "--promisor cannot be used with a pack name" +msgstr "--promisor kan inte användas med ett paketnamn" + msgid "--stdin requires a git repository" msgstr "--stdin kräver ett git-arkiv" @@ -7683,7 +7732,7 @@ msgid "cover-from-description-mode" msgstr "cover-from-description-läge" msgid "generate parts of a cover letter based on a branch's description" -msgstr "skapa delar av omslagsbrevet baserat pÃ¥ grenbeskrivelsen" +msgstr "skapa delar av omslagsbrevet baserat pÃ¥ grenbeskrivningen" msgid "use branch description from file" msgstr "använd grenbeskrivningar frÃ¥n fil" @@ -7925,7 +7974,7 @@ msgid "show debugging data" msgstr "visa felsökningsutdata" msgid "suppress duplicate entries" -msgstr "undertyck dublettposter" +msgstr "undertryck dublettposter" msgid "show sparse directories in the presence of a sparse index" msgstr "visa glesa kataloger när et glest index existerar" @@ -8017,7 +8066,7 @@ msgid "keep subject" msgstr "behÃ¥ll ärenderad" msgid "keep non patch brackets in subject" -msgstr "behÃ¥ll hakparanterser som inte är â€patch†i ärenderaden" +msgstr "behÃ¥ll hakparenteser som inte är â€patch†i ärenderaden" msgid "copy Message-ID to the end of commit message" msgstr "kopiera Message-ID till slutet av incheckningsmeddelandet" @@ -8172,7 +8221,7 @@ msgid "git merge-tree [--write-tree] [<options>] <branch1> <branch2>" msgstr "git merge-tree [--write-tree] [<flaggor>] <gren1> <gren2>" msgid "git merge-tree [--trivial-merge] <base-tree> <branch1> <branch2>" -msgstr "git merge-tree [--trivial-merge] <baseträd> <gren1> <gren2>" +msgstr "git merge-tree [--trivial-merge] <basträd> <gren1> <gren2>" msgid "do a real merge instead of a trivial merge" msgstr "gör en riktig sammanslagning istället för en enkel sammanslagning" @@ -8708,11 +8757,11 @@ msgstr "git notes [--ref <anteckningsref>] [list [<objekt>]]" msgid "" "git notes [--ref <notes-ref>] add [-f] [--allow-empty] [--[no-]separator|--" "separator=<paragraph-break>] [--[no-]stripspace] [-m <msg> | -F <file> | (-c " -"| -C) <object>] [<object>]" +"| -C) <object>] [<object>] [-e]" msgstr "" "git notes [--ref <anteckningsref>] add [-f] [--allow-empty] [--" "[no-]separator|--separator=<styckebrytning>] [--[no-]stripspace] [-m <medd> " -"| -F <fil> | (-c | -C) <objekt>] [<objekt>]" +"| -F <fil> | (-c | -C) <objekt>] [<objekt>] [-e]" msgid "git notes [--ref <notes-ref>] copy [-f] <from-object> <to-object>" msgstr "" @@ -8721,11 +8770,11 @@ msgstr "" msgid "" "git notes [--ref <notes-ref>] append [--allow-empty] [--[no-]separator|--" "separator=<paragraph-break>] [--[no-]stripspace] [-m <msg> | -F <file> | (-c " -"| -C) <object>] [<object>]" +"| -C) <object>] [<object>] [-e]" msgstr "" "git notes [--ref <anteckningsref>] append [--allow-empty] [--" "[no-]separator|--separator=<styckebrytning>] [--[no-]stripspace] [-m <medd> " -"| -F <fil> | (-c | -C) <objekt>] [<objekt>]" +"| -F <fil> | (-c | -C) <objekt>] [<objekt>] [-e]" msgid "git notes [--ref <notes-ref>] edit [--allow-empty] [<object>]" msgstr "git notes [--ref <anteckningsref>] edit [--allow-empty] [<objekt>]" @@ -8844,6 +8893,9 @@ msgstr "anteckningsinnehÃ¥ll i en fil" msgid "reuse and edit specified note object" msgstr "Ã¥teranvänd och redigera angivet anteckningsobjekt" +msgid "edit note message in editor" +msgstr "redigera anteckning i textredigeringsprogram" + msgid "reuse specified note object" msgstr "Ã¥teranvänd angivet anteckningsobjekt" @@ -9192,7 +9244,7 @@ msgstr "kan inte öppna paketfilen" #, c-format msgid "loose object at %s could not be examined" -msgstr "lösa objekt pÃ¥ %s kunde inte underökas" +msgstr "lösa objekt pÃ¥ %s kunde inte undersökas" msgid "unable to force loose object" msgstr "kan inte tvinga lösa objekt" @@ -9336,6 +9388,9 @@ msgstr "hantering av saknade objekt" msgid "do not pack objects in promisor packfiles" msgstr "packa inte objekt i kontraktspackfiler" +msgid "implies --missing=allow-any" +msgstr "implicerar --missing=allow-any" + msgid "respect islands during delta compression" msgstr "respektera öar under deltakomprimering" @@ -9638,7 +9693,7 @@ msgid "Need to specify how to reconcile divergent branches." msgstr "MÃ¥ste ange hur avvikande grenar skall förlikas." msgid "cannot rebase with locally recorded submodule modifications" -msgstr "kan inte ombasera med lokalt lagrade ändringar i undermoful" +msgstr "kan inte ombasera med lokalt lagrade ändringar i undermodul" msgid "git push [<options>] [<repository> [<refspec>...]]" msgstr "git push [<flaggor>] [<arkiv> [<refspec>...]]" @@ -10156,7 +10211,7 @@ msgid "empty exec command" msgstr "tomt exec-kommando" msgid "rebase onto given branch instead of upstream" -msgstr "ombasera mot given grenen istället för uppström" +msgstr "ombasera mot given gren istället för uppström" msgid "use the merge-base of upstream and branch as the current base" msgstr "använd sammanslagningsbasen mellan uppströms och gren som aktuell bas" @@ -10548,7 +10603,7 @@ msgid "process the reflogs of all references" msgstr "hantera referensloggar för alla referenser" msgid "limits processing to reflogs from the current worktree only" -msgstr "begränsar hantering av referensloggar till endst aktuell arbetskatalog" +msgstr "begränsar hantering av referensloggar till endast aktuell arbetskatalog" #, c-format msgid "Marking reachable objects..." @@ -10919,6 +10974,30 @@ msgid_plural " Local refs configured for 'git push'%s:" msgstr[0] " Lokal referens konfigurerad för â€git pushâ€%s:" msgstr[1] " Lokala referenser konfigurerade för â€git pushâ€%s:" +#, c-format +msgid "'%s/HEAD' is unchanged and points to '%s'\n" +msgstr "â€%s/HEAD†är oförändrad och pekar pÃ¥ â€%sâ€\n" + +#, c-format +msgid "'%s/HEAD' has changed from '%s' and now points to '%s'\n" +msgstr "â€%s/HEAD†har ändrats frÃ¥n â€%s†och pekar nu pÃ¥ â€%sâ€\n" + +#, c-format +msgid "'%s/HEAD' is now created and points to '%s'\n" +msgstr "â€%s/HEAD†har nu skapats och pekar pÃ¥ â€%sâ€\n" + +#, c-format +msgid "'%s/HEAD' was detached at '%s' and now points to '%s'\n" +msgstr "â€%s/HEAD†kopplades frÃ¥n vid â€%s†och pekar nu pÃ¥ â€%sâ€\n" + +#, c-format +msgid "" +"'%s/HEAD' used to point to '%s' (which is not a remote branch), but now " +"points to '%s'\n" +msgstr "" +"â€%s/HEAD†pekade tidigare pÃ¥ â€%s†(som inte är en fjärrgren), men pekar nu " +"pÃ¥ â€%sâ€\n" + msgid "set refs/remotes/<name>/HEAD according to remote" msgstr "sätt refs/remotes/<namn>/HEAD enligt fjärren" @@ -10940,7 +11019,7 @@ msgid "Not a valid ref: %s" msgstr "Inte en giltig referens: %s" #, c-format -msgid "Could not setup %s" +msgid "Could not set up %s" msgstr "Kunde inte ställa in %s" #, c-format @@ -11787,7 +11866,7 @@ msgstr "Ingen sökvägsangivelse gavs. Vilka filer ska jag ta bort?" msgid "please stage your changes to .gitmodules or stash them to proceed" msgstr "" -"löa dina ändringar i .gitmodules eller använd â€stash†för att fortsätta" +"köa dina ändringar i .gitmodules eller använd â€stash†för att fortsätta" #, c-format msgid "not removing '%s' recursively without -r" @@ -11861,7 +11940,7 @@ msgid "linewrap output" msgstr "radbryt utdata" msgid "field" -msgstr "föt" +msgstr "fält" msgid "group by field" msgstr "gruppera efter fält" @@ -12022,7 +12101,7 @@ msgid "stricter reference checking, requires exact ref path" msgstr "striktare referenskontroll, kräver exakt referenssökväg" msgid "show the HEAD reference, even if it would be filtered out" -msgstr "visa HEAD-refrens, även när den skulle filtreras ut" +msgstr "visa HEAD-referens, även när den skulle filtreras ut" msgid "dereference tags into object IDs" msgstr "avreferera taggar till objekt-id" @@ -12079,7 +12158,7 @@ msgid "initialize the sparse-checkout in cone mode" msgstr "initiera sparse-checkout i konläge" msgid "toggle the use of a sparse index" -msgstr "slÃ¥ pÃ¥/av använding av glest index" +msgstr "slÃ¥ pÃ¥/av användning av glest index" #, c-format msgid "unable to create leading directories of %s" @@ -12250,7 +12329,7 @@ msgstr "Inga â€stashâ€-poster hittades." #, c-format msgid "%s is not a valid reference" -msgstr "%s är inte en giltigt referens" +msgstr "%s är inte en giltig referens" msgid "git stash clear with arguments is unimplemented" msgstr "â€git stash clear†med argument har inte implementerats" @@ -12501,7 +12580,7 @@ msgstr "" "HEAD" msgid "git submodule status [--quiet] [--cached] [--recursive] [<path>...]" -msgstr "git submodule status [--quitet] [--cached] [--recursive] [<sökväg>...]" +msgstr "git submodule status [--quiet] [--cached] [--recursive] [<sökväg>...]" #, c-format msgid "* %s %s(blob)->%s(submodule)" @@ -12524,7 +12603,7 @@ msgid "unexpected mode %o" msgstr "okänt läge %o" msgid "use the commit stored in the index instead of the submodule HEAD" -msgstr "använd incechkning lagrad i indexet istället för undermodulens HEAD" +msgstr "använd incheckning lagrad i indexet istället för undermodulens HEAD" msgid "compare the commit in the index with that in the submodule HEAD" msgstr "jämför incheckningen i indexet med den i undermodulens HEAD" @@ -13641,6 +13720,9 @@ msgstr "ställ in spÃ¥rningsläge (se git-branch(1))" msgid "try to match the new branch name with a remote-tracking branch" msgstr "försök träffa namn pÃ¥ ny gren mot en fjärrspÃ¥rande gren" +msgid "use relative paths for worktrees" +msgstr "använd relativa sökvägar för arbetskataloger" + #, c-format msgid "options '%s', '%s', and '%s' cannot be used together" msgstr "flaggorna â€%sâ€, â€%s†och â€%s†kan inte användas samtidigt" @@ -13802,7 +13884,7 @@ msgstr "misslyckades lagra maximal skaparsymbol" #, c-format msgid "unrecognized bundle mode from URI '%s'" -msgstr "okänt buntlägre frÃ¥n URI:en â€%sâ€" +msgstr "okänt buntläge frÃ¥n URI:en â€%sâ€" #, c-format msgid "exceeded bundle URI recursion limit (%d)" @@ -13912,6 +13994,26 @@ msgstr "kan inte skapa â€%sâ€" msgid "index-pack died" msgstr "index-pack dog" +#, c-format +msgid "directory '%s' is present in index, but not sparse" +msgstr "katalogen â€%s†finns i indexet, men inte glest" + +msgid "corrupted cache-tree has entries not present in index" +msgstr "trasigt cacheträd innehÃ¥ller poster som inte finns i indexet" + +#, c-format +msgid "%s with flags 0x%x should not be in cache-tree" +msgstr "%s med flaggorna 0x%x borde inte finnas i cacheträdet" + +#, c-format +msgid "bad subtree '%.*s'" +msgstr "felaktigt underträd â€%.*sâ€" + +#, c-format +msgid "cache-tree for path %.*s does not match. Expected %s got %s" +msgstr "" +"cacheträd för sökvägen %.*s stämmer inte överens. Förväntade %s fick %s" + msgid "terminating chunk id appears earlier than expected" msgstr "avslutande stycke-id förekommer tidigare än förväntat" @@ -14131,7 +14233,7 @@ msgid "Send a collection of patches from stdin to an IMAP folder" msgstr "Sänd en samling patchar frÃ¥n stdin till en IMAP-mapp" msgid "Build pack index file for an existing packed archive" -msgstr "SKapa pack-indexfiler för ett befintligt packat arkiv" +msgstr "Skapa pack-indexfiler för ett befintligt packat arkiv" msgid "Create an empty Git repository or reinitialize an existing one" msgstr "Skapa tomt Git-arkiv eller ominitiera ett befintligt" @@ -14353,7 +14455,7 @@ msgid "Creates a temporary file with a blob's contents" msgstr "Skapar temporära filer med innehÃ¥llet frÃ¥n en blob" msgid "Unpack objects from a packed archive" -msgstr "Packa upp objekt frÃ¥n ett pakat arkiv" +msgstr "Packa upp objekt frÃ¥n ett packat arkiv" msgid "Register file contents in the working tree to the index" msgstr "Registrera filinnehÃ¥llet frÃ¥n arbetskatalogen i indexet" @@ -14410,7 +14512,7 @@ msgid "Git for CVS users" msgstr "Git för CVS-användare" msgid "Tweaking diff output" -msgstr "Justrea diff-utdata" +msgstr "Justera diff-utdata" msgid "A useful minimum set of commands for Everyday Git" msgstr "Ett användbart minsta uppsättning kommandon för vardags-Git" @@ -14518,7 +14620,7 @@ 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" +msgstr "incheckningsgrafens ändrade-sökvägar-indexstycke är för litet" #, c-format msgid "" @@ -14582,10 +14684,10 @@ 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" +msgstr "ogiltig incheckningsgrafkedja: rad â€%s†är inte ett hash-värde" msgid "unable to find all commit-graph files" -msgstr "kan inte hitta alla incheckingsgraffiler" +msgstr "kan inte hitta alla incheckningsgraffiler" msgid "invalid commit position. commit-graph is likely corrupt" msgstr "ogiltig incheckningsposition. incheckningsgrafen är troligtvis trasig" @@ -14627,8 +14729,8 @@ msgstr "Samlar refererade incheckningar" #, c-format msgid "Finding commits for commit graph in %<PRIuMAX> pack" msgid_plural "Finding commits for commit graph in %<PRIuMAX> packs" -msgstr[0] "Söker incheckningar för incheckingsgraf i %<PRIuMAX> paket" -msgstr[1] "Söker incheckningar för incheckingsgraf i %<PRIuMAX> paket" +msgstr[0] "Söker incheckningar för incheckningsgraf i %<PRIuMAX> paket" +msgstr[1] "Söker incheckningar för incheckningsgraf i %<PRIuMAX> paket" #, c-format msgid "error adding pack %s" @@ -14639,10 +14741,10 @@ msgid "error opening index for %s" msgstr "fel vid öppning av indexet för %s" msgid "Finding commits for commit graph among packed objects" -msgstr "Söker incheckningar för incheckingsgraf i packade objekt" +msgstr "Söker incheckningar för incheckningsgraf i packade objekt" msgid "Finding extra edges in commit graph" -msgstr "Söker ytterligare kanter i incheckingsgraf" +msgstr "Söker ytterligare kanter i incheckningsgraf" msgid "failed to write correct number of base graph ids" msgstr "misslyckades skriva korrekt antal bas-graf-id:n" @@ -14664,7 +14766,7 @@ msgid "unable to open commit-graph chain file" msgstr "kan inte öppna incheckningsgrafkedjefilen" msgid "failed to rename base commit-graph file" -msgstr "misslyckades byta namn pÃ¥ bas-incheckingsgraffilen" +msgstr "misslyckades byta namn pÃ¥ bas-incheckningsgraffilen" msgid "failed to rename temporary commit-graph file" msgstr "misslyckades byta namn pÃ¥ temporär incheckningsgraffil" @@ -14777,7 +14879,7 @@ msgid "" "to convert the grafts into replace refs.\n" "\n" "Turn this message off by running\n" -"\"git config advice.graftFileDeprecated false\"" +"\"git config set advice.graftFileDeprecated false\"" msgstr "" "Stöd för <GIT_DIR>/info/grafts avrÃ¥ds frÃ¥n och\n" "kommer tas bort i en framtida version av Git.\n" @@ -14786,7 +14888,7 @@ msgstr "" "för att omvandla grafts till ersättningsreferenser.\n" "\n" "SlÃ¥ av detta meddelande genom att skriva\n" -"â€git config advice.graftFileDeprecated falseâ€" +"â€git config set advice.graftFileDeprecated falseâ€" #, c-format msgid "commit %s exists in commit-graph but not in the object database" @@ -15233,7 +15335,7 @@ msgstr "referensen â€%s†pekar inte pÃ¥ en blob" #, c-format msgid "unable to resolve config blob '%s'" -msgstr "kan inte slÃ¥ upp konfigurerings-bloben â€%sâ€" +msgstr "kan inte slÃ¥ upp konfigurerings-blobben â€%sâ€" msgid "unable to parse command-line config" msgstr "kan inte tolka kommandoradskonfiguration" @@ -15595,7 +15697,20 @@ msgstr "url saknar protokoll: %s" #, c-format msgid "credential url cannot be parsed: %s" -msgstr "kan inte tolka url för inloggingsuppgifter: %s" +msgstr "kan inte tolka url för inloggningsuppgifter: %s" + +#, c-format +msgid "invalid timeout '%s', expecting a non-negative integer" +msgstr "felaktig tidsgräns â€%sâ€, förväntade ett icke-negativt heltal" + +#, c-format +msgid "invalid init-timeout '%s', expecting a non-negative integer" +msgstr "" +"felaktig värde för init-timeout â€%sâ€, förväntade ett icke-negativt heltal" + +#, c-format +msgid "invalid max-connections '%s', expecting an integer" +msgstr "felaktigt värde för max-connections â€%sâ€, förväntade ett heltal" msgid "in the future" msgstr "i framtiden" @@ -15987,7 +16102,7 @@ msgid "use default prefixes a/ and b/" msgstr "använd standardprefixen a/ och b/" msgid "show context between diff hunks up to the specified number of lines" -msgstr "visa sammnhang mellan diff-stycken upp till angivet antal rader" +msgstr "visa sammanhang mellan diff-stycken upp till angivet antal rader" msgid "<char>" msgstr "<tecken>" @@ -16296,6 +16411,20 @@ msgstr "felaktig git-namnrymdssökväg â€%sâ€" msgid "too many args to run %s" msgstr "för mÃ¥nga flaggor för att köra %s" +#, c-format +msgid "" +"You are attempting to fetch %s, which is in the commit graph file but not in " +"the object database.\n" +"This is probably due to repo corruption.\n" +"If you are attempting to repair this repo corruption by refetching the " +"missing object, use 'git fetch --refetch' with the missing object." +msgstr "" +"Du försöker hämta %s som är i incheckningsgrafen men inte i " +"objektdatabasen.\n" +"Det händer antagligen pÃ¥ grund av att arkivet är trasigt.\n" +"Om du försöker reparera det trasiga arkivet genom att hämta om det saknade " +"objektet, använd â€git fetch --refetch†med det saknade objektet." + msgid "git fetch-pack: expected shallow list" msgstr "git fetch-pack: förväntade grund lista" @@ -16493,7 +16622,7 @@ msgstr "Servern tillÃ¥ter inte förfrÃ¥gan om ej tillkännagivet objekt %s" #, c-format msgid "fsmonitor_ipc__send_query: invalid path '%s'" -msgstr "fsmonitor_ipc__send_query: ogilitg sökväg â€%sâ€" +msgstr "fsmonitor_ipc__send_query: ogiltig sökväg â€%sâ€" #, c-format msgid "fsmonitor_ipc__send_query: unspecified error on '%s'" @@ -16767,7 +16896,7 @@ msgid "Interacting with Others" msgstr "Interaktion med andra" msgid "Low-level Commands / Manipulators" -msgstr "LÃ¥gnivÃ¥kommandon / maniupulerare" +msgstr "LÃ¥gnivÃ¥kommandon / manipulerare" msgid "Low-level Commands / Interrogators" msgstr "LÃ¥gnivÃ¥kommandon / frÃ¥gare" @@ -16807,7 +16936,7 @@ msgid "External commands" msgstr "Externa kommandon" msgid "Command aliases" -msgstr "Kommadoalias" +msgstr "Kommandoalias" msgid "See 'git help <command>' to read about a specific subcommand" msgstr "Se â€git help <kommando>†för att läsa om ett specifikt underkommando" @@ -16880,10 +17009,10 @@ msgstr[1] "" #, c-format msgid "" "The '%s' hook was ignored because it's not set as executable.\n" -"You can disable this warning with `git config advice.ignoredHook false`." +"You can disable this warning with `git config set advice.ignoredHook false`." msgstr "" "Kroken â€%s†ignorerades eftersom den inte är markerad som körbar.\n" -"Du kan inaktivera varningen med â€git config advice.ignoredHook falseâ€." +"Du kan inaktivera varningen med â€git config set advice.ignoredHook falseâ€." msgid "not a git repository" msgstr "inte ett git-arkiv" @@ -16900,15 +17029,9 @@ msgstr "http.postBuffer har negativt värde; använder förvalet %d" msgid "Delegation control is not supported with cURL < 7.22.0" msgstr "Delegerad styrning stöds inte av cURL < 7.22.0" -msgid "Public key pinning not supported with cURL < 7.39.0" -msgstr "FastnÃ¥lning av öppen nyckel stöds inte av cURL < 7.39.0" - msgid "Unknown value for http.proactiveauth" msgstr "Okänt värde för http.proactiveauth" -msgid "CURLSSLOPT_NO_REVOKE not supported with cURL < 7.44.0" -msgstr "CURLSSLOPT_NO_REVOKE stöds inte av cURL < 7.44.0" - #, c-format msgid "Unsupported SSL backend '%s'. Supported SSL backends:" msgstr "SSL-bakändan â€%s†stöds inte. Dessa SSL-bakändor stöds:" @@ -17092,6 +17215,10 @@ msgid "unable to format message: %s" msgstr "kan inte formatera meddelandet: %s" #, c-format +msgid "invalid marker-size '%s', expecting an integer" +msgstr "felaktigt värde för marker-size â€%sâ€, förväntade ett heltal" + +#, c-format msgid "Failed to merge submodule %s (not checked out)" msgstr "Misslyckades slÃ¥ ihop undermodulen %s (ej utcheckad)" @@ -17152,7 +17279,7 @@ msgid "" "CONFLICT (implicit dir rename): Existing file/dir at %s in the way of " "implicit directory rename(s) putting the following path(s) there: %s." msgstr "" -"KONFLIKT (implicit nämnändrad kat): Befintlig fil/kat vid %s är i vägen för " +"KONFLIKT (implicit namnändrad kat): Befintlig fil/kat vid %s är i vägen för " "implicit namnändrad(e) katalog(er) som lägger dit följande sökväg(ar): %s." #, c-format @@ -17314,7 +17441,7 @@ msgid "" " - resolve any other conflicts in the superproject\n" " - commit the resulting index in the superproject\n" msgstr "" -"Rekursiv sammanslaning med undermoduler stöder för närvarande endast enkla " +"Rekursiv sammanslagning med undermoduler stöder för närvarande endast enkla " "fall.\n" "Du mÃ¥ste hantera sammanslagning av undermoduler i konflikt manuellt.\n" "Detta kan göras genom att utföra följande steg:\n" @@ -17996,6 +18123,14 @@ msgid "missing mapping of %s to %s" msgstr "saknar koppling av %s till %s" #, c-format +msgid "unable to open %s" +msgstr "kan inte öppna %s" + +#, c-format +msgid "files '%s' and '%s' differ in contents" +msgstr "filerna â€%s†och â€%s†har olika innehÃ¥ll" + +#, c-format msgid "unable to write file %s" msgstr "kan inte skriva filen %s" @@ -18039,7 +18174,7 @@ msgstr "kan inte utföra â€deflate†pÃ¥ nytt strömobjekt (%d)" #, c-format msgid "deflateEnd on stream object failed (%d)" -msgstr "â€deflatEend†pÃ¥ strömobjektet misslyckades (%d)" +msgstr "â€deflateEnd†pÃ¥ strömobjektet misslyckades (%d)" #, c-format msgid "unable to create directory %s" @@ -18081,10 +18216,6 @@ msgid "%s is not a valid '%s' object" msgstr "%s är inte ett giltigt â€%sâ€-objekt" #, c-format -msgid "unable to open %s" -msgstr "kan inte öppna %s" - -#, c-format msgid "hash mismatch for %s (expected %s)" msgstr "hash stämmer inte för %s (förväntade %s)" @@ -18185,7 +18316,7 @@ msgid "" "\n" "where \"$br\" is somehow empty and a 40-hex ref is created. Please\n" "examine these refs and maybe delete them. Turn this message off by\n" -"running \"git config advice.objectNameWarning false\"" +"running \"git config set advice.objectNameWarning false\"" msgstr "" "Git skapar normalt aldrig referenser som slutar med 40 hexadecimala\n" "tecken, dÃ¥ detta ignoreras när du anger 40-hex enbart. Dessa\n" @@ -18195,7 +18326,7 @@ msgstr "" "\n" "där â€$br†pÃ¥ nÃ¥got sätt blivit tomt och en 40-hex-referens skapats.\n" "Undersök referenserna och ta kanske bort dem. Stäng av meddelandet\n" -"genom att köra â€git config advice.objectNameWarning falseâ€" +"genom att köra â€git config set advice.objectNameWarning falseâ€" #, c-format msgid "log for '%.*s' only goes back to %s" @@ -18313,7 +18444,7 @@ msgid "" "corrupted bitmap index file (too short to fit pseudo-merge table header)" msgstr "" "trasig bitkarteindexfil (för kort för att fÃ¥ plats för pseudo-" -"sammanslagningsatbellhuvudet)" +"sammanslagningstabellhuvudet)" msgid "corrupted bitmap index file (too short to fit pseudo-merge table)" msgstr "" @@ -18354,13 +18485,6 @@ 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" - msgid "corrupt bitmap lookup table: triplet position out of index" msgstr "trasig bitkarteuppslagstabell: trippelposition utanför indexet" @@ -18414,7 +18538,7 @@ msgstr "bitkarteresultat stämmer inte överens" #, c-format msgid "pseudo-merge index out of range (%<PRIu32> >= %<PRIuMAX>)" -msgstr "pseudosammanslaningsindex utenför intervallet (%<PRIu32> ≥ %<PRIuMAX>)" +msgstr "pseudosammanslagningsindex utanför intervallet (%<PRIu32> ≥ %<PRIuMAX>)" #, c-format msgid "could not find '%s' in pack '%s' at offset %<PRIuMAX>" @@ -18509,7 +18633,7 @@ msgstr "offset före slutet av packindex för %s (trasigt index?)" #, c-format msgid "offset beyond end of pack index for %s (truncated index?)" -msgstr "offset borton slutet av packindex för %s (trunkerat index?)" +msgstr "offset bortom slutet av packindex för %s (trunkerat index?)" #, c-format msgid "malformed expiration date '%s'" @@ -18885,7 +19009,7 @@ msgid "" "could not parse first line of `log` output: did not start with 'commit ': " "'%s'" msgstr "" -"kunde inte tolka första raden i â€logâ€-updata: börjar inte med â€commit â€: â€%sâ€" +"kunde inte tolka första raden i â€logâ€-utdata: börjar inte med â€commit â€: â€%sâ€" #, c-format msgid "could not parse git header '%.*s'" @@ -19000,7 +19124,7 @@ msgstr "%s: öppning av indexfilen misslyckades" #, c-format msgid "%s: cannot stat the open index" -msgstr "%s: kan inte ta startus pÃ¥ det öppna indexet" +msgstr "%s: kan inte ta status pÃ¥ det öppna indexet" #, c-format msgid "%s: index file smaller than expected" @@ -19269,7 +19393,7 @@ msgstr "kan inte helt tolka %s=%s" #, c-format msgid "value expected %s=" -msgstr "vädre förväntades %s=" +msgstr "värde förväntades %s=" #, c-format msgid "positive value expected '%s' in %%(%s)" @@ -19475,18 +19599,26 @@ msgstr "loggen för referensen %s slutade oväntat pÃ¥ %s" msgid "log for %s is empty" msgstr "loggen för %s är tom" -msgid "refusing to force and skip creation of reflog" -msgstr "vägrar att tvinga och hoppa över skapande av reflogg" - #, c-format -msgid "refusing to update ref with bad name '%s'" -msgstr "vägrar uppdatera referens med trasigt namn â€%sâ€" +msgid "refusing to update reflog for pseudoref '%s'" +msgstr "vägrar uppdatera referenslogg för pseudoreferensen â€%sâ€" #, c-format msgid "refusing to update pseudoref '%s'" msgstr "vägrar uppdatera pseudoreferensen â€%sâ€" #, c-format +msgid "refusing to update reflog with bad name '%s'" +msgstr "vägrar uppdatera referenslogg med trasigt namn â€%sâ€" + +#, c-format +msgid "refusing to update ref with bad name '%s'" +msgstr "vägrar uppdatera referens med trasigt namn â€%sâ€" + +msgid "refusing to force and skip creation of reflog" +msgstr "vägrar att tvinga och hoppa över skapande av reflogg" + +#, c-format msgid "update_ref failed for ref '%s': %s" msgstr "update_ref misslyckades för referensen â€%sâ€: %s" @@ -19536,6 +19668,10 @@ msgstr "" "men är en vanlig referens" #, c-format +msgid "cannot read ref file '%s'" +msgstr "kan inte läsa ref-fil â€%sâ€" + +#, c-format msgid "cannot open directory %s" msgstr "kunde inte öppna katalogen %s" @@ -19741,6 +19877,10 @@ msgid "more than one uploadpack given, using the first" msgstr "mer än en uploadpack angavs, använder den första" #, c-format +msgid "unrecognized followRemoteHEAD value '%s' ignored" +msgstr "okänt värde â€%s†för followRemoteHEAD ignorerades" + +#, c-format msgid "unrecognized value transfer.credentialsInUrl: '%s'" msgstr "okänt värde transfer.credentialsInUrl: â€%sâ€" @@ -19792,7 +19932,7 @@ msgid "" "\n" "Neither worked, so we gave up. You must fully qualify the ref." msgstr "" -"MÃ¥let du angav är inte ett komplett referensamn (dvs.,\n" +"MÃ¥let du angav är inte ett komplett referensnamn (dvs.,\n" "startar med â€refs/â€). Vi försökte gissa vad du menade genom att:\n" "\n" "- Se efter en referens som motsvarar â€%s†pÃ¥ fjärrsidan.\n" @@ -20050,7 +20190,7 @@ msgstr "misslyckades hitta trädet för %s." #, c-format msgid "unsupported section for hidden refs: %s" -msgstr "sktionen för dolda referenser stöds ej: %s" +msgstr "sektionen för dolda referenser stöds ej: %s" msgid "--exclude-hidden= passed more than once" msgstr "--exclude-hidden= angavs mer än en gÃ¥ng" @@ -20333,7 +20473,7 @@ msgid "" "not sending a push certificate since the receiving end does not support --" "signed push" msgstr "" -"sänder inte push-certifikat eftersom mottagarsidan inte stlder push med --" +"sänder inte push-certifikat eftersom mottagarsidan inte stöder push med --" "signed" msgid "the receiving end does not support --atomic push" @@ -20693,7 +20833,7 @@ msgstr "â€%s†är inte ett giltigt referensnamn" #, c-format msgid "update-ref requires a fully qualified refname e.g. refs/heads/%s" -msgstr "update-ref kräver ett fullständigt referensnamn, t.ex refs/heads/%s" +msgstr "update-ref kräver ett fullständigt referensnamn, t.ex. refs/heads/%s" #, c-format msgid "'%s' does not accept merge commits" @@ -21665,6 +21805,9 @@ msgstr "incheckning %s är inte märkt nÃ¥bar" msgid "too many commits marked reachable" msgstr "för mÃ¥nga incheckningar markerade nÃ¥bara" +msgid "could not determine MIDX preferred pack" +msgstr "kunde inte bestämma det föredragna MIDX-paketet" + msgid "test-tool serve-v2 [<options>]" msgstr "test-tool serve-v2 [<flaggor>]" @@ -21698,7 +21841,7 @@ msgstr "" "[<buntstorlek>]" msgid "name or pathname of unix domain socket" -msgstr "namn eller sövkäg till unixdomän-uttag" +msgstr "namn eller sökväg till unixdomän-uttag" msgid "named-pipe name" msgstr "namn pÃ¥ namngivet rör" @@ -21800,10 +21943,10 @@ msgstr "kunde inte läsa referensen %s" #, c-format msgid "unknown response to connect: %s" -msgstr "okänt svar pÃ¥ ansluntning: %s" +msgstr "okänt svar pÃ¥ anslutning: %s" msgid "setting remote service path not supported by protocol" -msgstr "protkollet stöder inte att sätta sökväg till fjärrtjänst" +msgstr "protokollet 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" @@ -21816,7 +21959,7 @@ msgid "--negotiate-only requires protocol v2" msgstr "--negotiate-only kräver protokoll v2" msgid "'option' without a matching 'ok/error' directive" -msgstr "â€option†utan mostsvarande â€ok/errorâ€-direktiv" +msgstr "â€option†utan motsvarande â€ok/errorâ€-direktiv" #, c-format msgid "expected ok/error, helper said '%s'" @@ -22319,6 +22462,9 @@ msgstr ".git-filen är trasig" msgid ".git file incorrect" msgstr ".git-filen är felaktig" +msgid ".git file absolute/relative path mismatch" +msgstr "absolut/relativ sökväg för .git-fil stämmer inte överens" + msgid "not a valid path" msgstr "inte en giltig sökväg" @@ -22334,6 +22480,9 @@ msgstr "kan inte hitta arkivet; â€.gitâ€-filen är trasig" msgid "gitdir unreadable" msgstr "gitdir är oläsbar" +msgid "gitdir absolute/relative path mismatch" +msgstr "absolut/relativ sökväg för git-katalog stämmer inte överens" + msgid "gitdir incorrect" msgstr "gitdir är felaktig" @@ -22368,6 +22517,13 @@ msgstr "kan inte slÃ¥ av %s i â€%sâ€" msgid "failed to set extensions.worktreeConfig setting" msgstr "misslyckades ändra inställningen extensions.worktreeConfig" +msgid "unable to upgrade repository format to support relative worktrees" +msgstr "" +"kunde inte uppgradera arkivformat till att stöda relativa arbetskataloger" + +msgid "unable to set extensions.relativeWorktrees setting" +msgstr "misslyckades ändra inställningen extensions.relativeWorktrees" + #, c-format msgid "could not setenv '%s'" msgstr "kunde inte lagra miljövariabeln â€%sâ€" @@ -22866,7 +23022,7 @@ msgstr "Kan inte byta katalog till $cdup, toppnivÃ¥n pÃ¥ arbetskatalogen" #, sh-format msgid "fatal: $program_name cannot be used without a working tree." -msgstr "ödesdigetrt: $program_name kan inte användas utan arbetskatalog." +msgstr "ödesdigert: $program_name kan inte användas utan arbetskatalog." msgid "Cannot rewrite branches: You have unstaged changes." msgstr "Kan inte skriva om grenar: Du har oköade ändringar." @@ -22915,7 +23071,7 @@ msgid "--dump-aliases incompatible with other options\n" msgstr "--dump-aliases är inkompatibelt med andra flaggor\n" msgid "--dump-aliases and --translate-aliases are mutually exclusive\n" -msgstr "--dump-aliases och --translate-aliases är ömsesidigt utelsutande\n" +msgstr "--dump-aliases och --translate-aliases är ömsesidigt uteslutande\n" msgid "" "fatal: found configuration options for 'sendmail'\n" @@ -22956,7 +23112,7 @@ msgstr "varning: â€:include:†stöds inte: %s\n" #, perl-format msgid "warning: `/file` or `|pipe` redirection not supported: %s\n" -msgstr "varning: omdirigering til â€/fil†eller â€|rör†stöds inte: %s\n" +msgstr "varning: omdirigering till â€/fil†eller â€|rör†stöds inte: %s\n" #, perl-format msgid "warning: sendmail line is not recognized: %s\n" @@ -23184,7 +23340,7 @@ msgid "cannot send message as 7bit" msgstr "kan inte sända brev som sjubitars" msgid "invalid transfer encoding" -msgstr "ogiltig överföringskondning" +msgstr "ogiltig överföringskodning" #, perl-format msgid "" @@ -23217,10 +23373,3 @@ msgstr "" #, perl-format msgid "Do you really want to send %s? [y|N]: " msgstr "Vill du verkligen sända %s? [y=ja, n=nej]: " - -#~ msgid "revision walk setup failed\n" -#~ msgstr "misslyckades starta revisionstraversering\n" - -#, c-format -#~ msgid "unable to parse contact: %s" -#~ msgstr "kan inte tolka kontakt: %s" @@ -2,7 +2,7 @@ # Git Türkçe çevirileri # 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-2024 +# Emir SARI <emir_sari@icloud.com>, 2020-2025 # # ######################################################### # # Git Türkçe kavramlar dizini / Git Turkish Glossary # @@ -96,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: 2024-10-03 06:52+0300\n" -"PO-Revision-Date: 2024-10-03 07:00+0300\n" +"POT-Creation-Date: 2024-12-23 18:57+0000\n" +"PO-Revision-Date: 2025-01-01 15: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" @@ -714,10 +714,10 @@ msgstr "Yalnızca ikili dosyalar deÄŸiÅŸtirildi." #, c-format msgid "" "\n" -"Disable this message with \"git config advice.%s false\"" +"Disable this message with \"git config set advice.%s false\"" msgstr "" "\n" -"Bu iletiyi \"git config advice.%s false\" ile devre dışı bırakın" +"Bu iletiyi \"git config set advice.%s false\" ile devre dışı bırakın" #, c-format msgid "%shint:%s%.*s%s\n" @@ -1441,8 +1441,9 @@ msgstr "geçerli bir nesne adı deÄŸil: %s" msgid "not a tree object: %s" msgstr "bir aÄŸaç nesnesi deÄŸil: %s" -msgid "unable to checkout working tree" -msgstr "çalışma aÄŸacı çıkış yapılamıyor" +#, c-format +msgid "failed to unpack tree object %s" +msgstr "%s aÄŸaç nesnesi açılamadı" #, c-format msgid "File not found: %s" @@ -3072,8 +3073,8 @@ msgid "HEAD not found below refs/heads!" msgstr "HEAD, refs/heads altında bulunamadı!" msgid "" -"branch with --recurse-submodules can only be used if submodule." -"propagateBranches is enabled" +"branch with --recurse-submodules can only be used if " +"submodule.propagateBranches is enabled" msgstr "" "--recurse-submodules ile dallanma, yalnızca submodule.propagateBranches " "etkinleÅŸtirilmiÅŸse kullanılabilir" @@ -3921,9 +3922,8 @@ msgstr "yeni henüz doÄŸmamış dal" msgid "update ignored files (default)" msgstr "yok sayılan dosyaları güncelle (öntanımlı)" -msgid "do not check if another worktree is holding the given ref" -msgstr "" -"verilen baÅŸvuruyu baÅŸka bir çalışma aÄŸacının tutup tutmadığını denetleme" +msgid "do not check if another worktree is using this branch" +msgstr "bu dalı baÅŸka bir çalışma aÄŸacının kullanıp kullanmadığını denetleme" msgid "checkout our version for unmerged files" msgstr "birleÅŸtirilmeyen dosyalar için bizdeki sürümü çıkış yap" @@ -4224,11 +4224,11 @@ msgstr "verilen derinlikte sığ bir depo oluÅŸtur" msgid "create a shallow clone since a specific time" msgstr "verilen zamandan sonrasını içeren bir sığ depo oluÅŸtur" -msgid "revision" -msgstr "revizyon" +msgid "ref" +msgstr "baÅŸvuru" -msgid "deepen history of shallow clone, excluding rev" -msgstr "revizyonu hariç tutarak sığ klonun geçmiÅŸini derinleÅŸtir" +msgid "deepen history of shallow clone, excluding ref" +msgstr "baÅŸvuru hariç tutarak sığ klonun geçmiÅŸini derinleÅŸtir" msgid "clone only one branch, HEAD or --branch" msgstr "yalnızca bir dal klonla, HEAD veya --branch" @@ -4355,6 +4355,9 @@ msgstr "sparse-checkout ilklendirilemedi" msgid "remote HEAD refers to nonexistent ref, unable to checkout" msgstr "uzak konum HEAD'i, var olmayan baÅŸvuruya baÅŸvuruyor; çıkış yapılamıyor" +msgid "unable to checkout working tree" +msgstr "çalışma aÄŸacı çıkış yapılamıyor" + msgid "unable to write parameters to config file" msgstr "parametreler yapılandırma dosyasına yazılamıyor" @@ -5163,10 +5166,10 @@ msgstr "" msgid "" "git config unset [<file-option>] [--all] [--value=<value>] [--fixed-value] " -"<name> <value>" +"<name>" msgstr "" "git config unset [<dosya-seçeneÄŸi>] [--all] [--value=<deÄŸer>] [--fixed-" -"value] <ad> <deÄŸer>" +"value] <ad>" msgid "git config rename-section [<file-option>] <old-name> <new-name>" msgstr "git config rename-section [<dosya-seçeneÄŸi>] <eski-ad> <yeni-ad>" @@ -5601,12 +5604,8 @@ msgid "traversed %lu commits\n" msgstr "%lu iÅŸleme katedildi\n" #, c-format -msgid "" -"more than %i tags found; listed %i most recent\n" -"gave up search at %s\n" -msgstr "" -"%i etiketten fazla etiket bulundu; en son %i listelendi\n" -"ÅŸu konumda arama bırakıldı: %s\n" +msgid "found %i tags; gave up search at %s\n" +msgstr "%i etiket bulundu; arama ÅŸurada bitirildi: %s\n" #, c-format msgid "describe %s\n" @@ -6040,6 +6039,21 @@ msgstr "%s geçerli bir nesne deÄŸil" msgid "the object %s does not exist" msgstr "%s diye bir nesne yok" +#, c-format +msgid "" +"Run 'git remote set-head %s %s' to follow the change, or set\n" +"'remote.%s.followRemoteHEAD' configuration option to a different value\n" +"if you do not want to see this message. Specifically running\n" +"'git config set remote.%s.followRemoteHEAD %s' will disable the warning\n" +"until the remote changes HEAD to something else." +msgstr "" +"DeÄŸiÅŸikliÄŸi izlemek için 'git remote set-head %s %s' yapın veya\n" +"'remote.%s.followRemoteHEAD' yapılandırma seçeneÄŸini baÅŸka bir\n" +"deÄŸere ayarlayın (bu iletiyi görmek istemiyorsanız). Özellikle\n" +"'git config set remote.%s.followRemoteHEAD %s' komutunu çalıştırmak\n" +"uyarıyı HEAD'e veya baÅŸka bir ÅŸeye uzaktan deÄŸiÅŸiklik olana dek\n" +"devre dışı bırakır." + msgid "multiple branches detected, incompatible with --set-upstream" msgstr "birden çok dal algılandı, --set-upstream ile uyumsuz" @@ -6178,6 +6192,9 @@ msgstr "ilgili baÅŸvuru" msgid "specify fetch refmap" msgstr "getirme ile ilgili baÅŸvuruları belirt" +msgid "revision" +msgstr "revizyon" + msgid "report that we have only objects reachable from this object" msgstr "yalnızca bu nesneden ulaşılabilir nesnelerimiz olduÄŸunu bildir" @@ -6232,8 +6249,8 @@ msgid "protocol does not support --negotiate-only, exiting" msgstr "protokol, --negotiate-only desteklemediÄŸinden çıkılıyor" msgid "" -"--filter can only be used with the remote configured in extensions." -"partialclone" +"--filter can only be used with the remote configured in " +"extensions.partialclone" msgstr "" "--filter, yalnızca extensions.partialclone içinde yapılandırılmış uzak konum " "ile kullanılabilir" @@ -6898,8 +6915,27 @@ msgstr "ne systemd zamanlayıcıları ne de crontab kullanılabiliyor" msgid "%s scheduler is not available" msgstr "%s planlayıcısı kullanılamıyor" -msgid "another process is scheduling background maintenance" -msgstr "baÅŸka bir iÅŸlem arka plan bakımı zamanını planlıyor" +#, c-format +msgid "" +"unable to create '%s.lock': %s.\n" +"\n" +"Another scheduled git-maintenance(1) process seems to be running in this\n" +"repository. Please make sure no other maintenance processes are running and\n" +"then try again. If it still fails, a git-maintenance(1) process may have\n" +"crashed in this repository earlier: remove the file manually to continue." +msgstr "" +"'%s.lock' oluÅŸturulamıyor: %s.\n" +"\n" +"Bu depoda baÅŸka bir planlı git-maintenance(1) süreci çalışıyor gibi\n" +"görünüyor. Lütfen baÅŸka bir bakım sürecinin çalışmıyor olduÄŸundan emin\n" +"olun ve yeniden deneyin. EÄŸer hâlâ baÅŸarısız oluyorsa bir git-" +"maintenance(1)\n" +"süreci bu depo içinde daha önceden çakılmış olabilir: Sürdürmek için " +"dosyayı\n" +"elle kaldırın." + +msgid "cannot acquire lock for scheduled background maintenance" +msgstr "planlı arka plan bakımı için kilit alınamıyor" msgid "git maintenance start [--scheduler=<scheduler>]" msgstr "git maintenance start [--scheduler=<görev-planlayıcı>]" @@ -7472,8 +7508,22 @@ msgid_plural "chain length = %d: %lu objects" msgstr[0] "zincir uzunluÄŸu = %d: %lu nesne" msgstr[1] "zincir uzunluÄŸu = %d: %lu nesne" +msgid "could not start pack-objects to repack local links" +msgstr "yerel baÄŸlantıları yeniden paketleme için pack-objects baÅŸlatılamadı" + +msgid "failed to feed local object to pack-objects" +msgstr "yerel nesne pack-objects'e beslenemedi" + +msgid "index-pack: Expecting full hex object ID lines only from pack-objects." +msgstr "" +"index-pack: Onaltılı tam nesne kimliÄŸi satırları yalnızca pack-objects'ten " +"bekleniyor." + +msgid "could not finish pack-objects to repack local links" +msgstr "yerel baÄŸlantıları yeniden paketleme için pack-objects bitirilemedi" + msgid "Cannot come back to cwd" -msgstr "Åžu anki çalışma dizinine geri gelinemiyor" +msgstr "Geçerli çalışma dizinine geri gelinemiyor" #, c-format msgid "bad %s" @@ -7483,6 +7533,9 @@ msgstr "hatalı %s" msgid "unknown hash algorithm '%s'" msgstr "bilinmeyen saÄŸlama algoritması '%s'" +msgid "--promisor cannot be used with a pack name" +msgstr "--promisor bir paket adıyla kullanılamaz" + msgid "--stdin requires a git repository" msgstr "--stdin bir git dizini gerektirir" @@ -8826,11 +8879,11 @@ msgstr "git notes [--ref <not-bÅŸvr>] [list [<nesne>]]" msgid "" "git notes [--ref <notes-ref>] add [-f] [--allow-empty] [--[no-]separator|--" "separator=<paragraph-break>] [--[no-]stripspace] [-m <msg> | -F <file> | (-c " -"| -C) <object>] [<object>]" +"| -C) <object>] [<object>] [-e]" msgstr "" -"git notes [--ref <not-bÅŸv>] add [-f] [--allow-empty] [--[no-]separator|--" -"separator=<paragraf-sonu>] [--[no-]stripspace] [-m <ilet> | -F <dosya> | (-c " -"| -C) <nesne>] [<nesne>]" +"git notes [--ref <notlar-baÅŸ>] add [-f] [--allow-empty] [--[no-]separator|--" +"separator=<paragraf-kes>] [--[no-]stripspace] [-m <ileti> | -F <dosya> | (-c " +"| -C) <nesne>] [<nesne>] [-e]" msgid "git notes [--ref <notes-ref>] copy [-f] <from-object> <to-object>" msgstr "git notes [--ref <not-bÅŸvr>] copy [-f] <nesneden> <nesneye>" @@ -8838,11 +8891,11 @@ msgstr "git notes [--ref <not-bÅŸvr>] copy [-f] <nesneden> <nesneye>" msgid "" "git notes [--ref <notes-ref>] append [--allow-empty] [--[no-]separator|--" "separator=<paragraph-break>] [--[no-]stripspace] [-m <msg> | -F <file> | (-c " -"| -C) <object>] [<object>]" +"| -C) <object>] [<object>] [-e]" msgstr "" -"git notes [--ref <not-bÅŸv>] append [--allow-empty] [--[no-]separator|--" -"separator=<paragraf-sonu>] [--[no-]stripspace] [-m <ileti> | -F <dosya> | (-" -"c | -C) <nesne>] [<nesne>]" +"git notes [--ref <notlar-baÅŸ>] append [--allow-empty] [--[no-]separator|--" +"separator=<paragraf-kes>] [--[no-]stripspace] [-m <ileti> | -F <dosya> | (-c " +"| -C) <nesne>] [<nesne>] [-e]" msgid "git notes [--ref <notes-ref>] edit [--allow-empty] [<object>]" msgstr "git notes [--ref <not-bÅŸvr>] edit [--allow-empty] [<nesne>]" @@ -8960,6 +9013,9 @@ msgstr "not içeriÄŸi bir dosyada" msgid "reuse and edit specified note object" msgstr "belirtilen not nesnesini düzenle ve yeniden kullan" +msgid "edit note message in editor" +msgstr "not iletisini düzenleyicide aç" + msgid "reuse specified note object" msgstr "belirtilen not nesnesini yeniden kullan" @@ -9456,6 +9512,9 @@ msgstr "eksik nesneler için iÅŸlem" msgid "do not pack objects in promisor packfiles" msgstr "nesneleri vaatçi paket dosyalarıyla paketleme" +msgid "implies --missing=allow-any" +msgstr "--missing=allow-any ima eder" + msgid "respect islands during delta compression" msgstr "delta sıkıştırması sırasında adalara uy" @@ -11057,6 +11116,31 @@ msgid_plural " Local refs configured for 'git push'%s:" msgstr[0] " 'git push'%s için yapılandırılan yerel baÅŸvuru:" msgstr[1] " 'git push'%s için yapılandırılan yerel baÅŸvurular:" +#, c-format +msgid "'%s/HEAD' is unchanged and points to '%s'\n" +msgstr "'%s/HEAD' deÄŸiÅŸtirilmedi ve '%s' konumuna iÅŸaret ediyor\n" + +#, c-format +msgid "'%s/HEAD' has changed from '%s' and now points to '%s'\n" +msgstr "'%s/HEAD', '%s' konumundan '%s' konumuna deÄŸiÅŸtirildi\n" + +#, c-format +msgid "'%s/HEAD' is now created and points to '%s'\n" +msgstr "'%s/HEAD' ÅŸimdi oluÅŸturuldu ve '%s' konumuna iÅŸaret ediyor\n" + +#, c-format +msgid "'%s/HEAD' was detached at '%s' and now points to '%s'\n" +msgstr "" +"'%s/HEAD', '%s' konumunda ayrıldı ve artık '%s' konumuna iÅŸaret ediyor\n" + +#, c-format +msgid "" +"'%s/HEAD' used to point to '%s' (which is not a remote branch), but now " +"points to '%s'\n" +msgstr "" +"'%s/HEAD', uzak dal olmayan '%s' konumuna iÅŸaret ediyordu; ancak ÅŸimdi '%s' " +"konumuna iÅŸaret ediyor\n" + msgid "set refs/remotes/<name>/HEAD according to remote" msgstr "refs/remotes/<ad>/HEAD'i uzak konuma göre ayarla" @@ -11078,7 +11162,7 @@ msgid "Not a valid ref: %s" msgstr "Geçerli bir baÅŸvuru deÄŸil: %s" #, c-format -msgid "Could not setup %s" +msgid "Could not set up %s" msgstr "%s ayarlanamadı" #, c-format @@ -13779,6 +13863,9 @@ msgstr "izleme kipini ayarla (bkz: git-branch(1))" msgid "try to match the new branch name with a remote-tracking branch" msgstr "yeni dalın adını bir uzak izleme dalıyla eÅŸleÅŸtirmeyi dene" +msgid "use relative paths for worktrees" +msgstr "çalışma aÄŸaçları için göreceli yollar kullan" + #, c-format msgid "options '%s', '%s', and '%s' cannot be used together" msgstr "'%s', '%s' ve '%s' seçenekleri birlikte kullanılamaz" @@ -14050,6 +14137,25 @@ msgstr "'%s' oluÅŸturulamıyor" msgid "index-pack died" msgstr "index-pack sonlandı" +#, c-format +msgid "directory '%s' is present in index, but not sparse" +msgstr "'%s' dizini indekste var; ancak aralıklı deÄŸil" + +msgid "corrupted cache-tree has entries not present in index" +msgstr "hasarlı cache-tree'de indekste olmayan girdiler var" + +#, c-format +msgid "%s with flags 0x%x should not be in cache-tree" +msgstr "%s, 0x%x bayraklı olarak cache-tree'de olmamalı" + +#, c-format +msgid "bad subtree '%.*s'" +msgstr "hatalı alt aÄŸaç '%.*s'" + +#, c-format +msgid "cache-tree for path %.*s does not match. Expected %s got %s" +msgstr "%.*s yolu için olan cache-tree eÅŸleÅŸmiyor. %s bekleniyordu, %s alındı" + msgid "terminating chunk id appears earlier than expected" msgstr "iri parça numarası sonlandırması beklenenden önce ortaya çıkıyor" @@ -14829,8 +14935,8 @@ msgid "" "attempting to write a commit-graph, but 'commitGraph.changedPathsVersion' " "(%d) is not supported" msgstr "" -"bir commit-graph yazılmaya çalışılıyor; ancak 'commitGraph." -"changedPathsVersion' (%d) desteklenmiyor" +"bir commit-graph yazılmaya çalışılıyor; ancak " +"'commitGraph.changedPathsVersion' (%d) desteklenmiyor" msgid "too many commits to write graph" msgstr "grafik yazımı için pek fazla iÅŸleme" @@ -14909,7 +15015,7 @@ msgid "" "to convert the grafts into replace refs.\n" "\n" "Turn this message off by running\n" -"\"git config advice.graftFileDeprecated false\"" +"\"git config set advice.graftFileDeprecated false\"" msgstr "" "<GIT_DIR>/info/grafts desteÄŸi artık kullanılmamalı\n" "ve ileriki bir Git sürümünde kaldırılacak.\n" @@ -14917,7 +15023,7 @@ msgstr "" "Aşıları deÄŸiÅŸtirme baÅŸvurularına dönüştürmek için\n" "lütfen \"git replace --convert-graft-file\" kullanın.\n" "\n" -"\"git config advice.graftFileDeprecated false\"\n" +"\"git config set advice.graftFileDeprecated false\"\n" "kullanarak bu iletiyi kapatabilirsiniz" #, c-format @@ -15176,8 +15282,8 @@ msgid "" "remote URLs cannot be configured in file directly or indirectly included by " "includeIf.hasconfig:remote.*.url" msgstr "" -"uzak URL'ler dosya içinde doÄŸrudan veya baÅŸka türlü includeIf.hasconfig:" -"remote.*.url kullanarak yapılandırılamaz" +"uzak URL'ler dosya içinde doÄŸrudan veya baÅŸka türlü " +"includeIf.hasconfig:remote.*.url kullanarak yapılandırılamaz" #, c-format msgid "invalid config format: %s" @@ -15733,6 +15839,19 @@ msgstr "url'nin ÅŸeması yok: %s" msgid "credential url cannot be parsed: %s" msgstr "yetki url'si ayrıştırılamıyor: %s" +#, c-format +msgid "invalid timeout '%s', expecting a non-negative integer" +msgstr "geçersiz zaman aşımı '%s', negatif olmayan bir tamsayı bekleniyor" + +#, c-format +msgid "invalid init-timeout '%s', expecting a non-negative integer" +msgstr "" +"geçersiz ilklendirme zaman aşımı '%s', negatif olmayan bir tamsayı bekleniyor" + +#, c-format +msgid "invalid max-connections '%s', expecting an integer" +msgstr "geçersiz en çok baÄŸlantı '%s', bir tamsayı bekleniyor" + msgid "in the future" msgstr "gelecekte" @@ -16439,6 +16558,20 @@ msgstr "hatalı git ad alanı yolu \"%s\"" msgid "too many args to run %s" msgstr "%s çalıştırmak için pek fazla argüman" +#, c-format +msgid "" +"You are attempting to fetch %s, which is in the commit graph file but not in " +"the object database.\n" +"This is probably due to repo corruption.\n" +"If you are attempting to repair this repo corruption by refetching the " +"missing object, use 'git fetch --refetch' with the missing object." +msgstr "" +"İşleme grafiÄŸinde bulunan; ancak nesne veritabanında bulunmayan %s ögesini " +"getirmeyi deniyorsunuz.\n" +"Bu, büyük olasılıkla depo hasarından dolayı oluyor.\n" +"Bu depo hasarını eksik nesneyi yeniden getirerek onarmayı düşünüyorsanız " +"eksik nesneyle birlikte 'git fetch --refetch' kullanmayı deneyin." + msgid "git fetch-pack: expected shallow list" msgstr "git fetch-pack: sığ bir liste bekleniyordu" @@ -17024,10 +17157,10 @@ msgstr[1] "" #, c-format msgid "" "The '%s' hook was ignored because it's not set as executable.\n" -"You can disable this warning with `git config advice.ignoredHook false`." +"You can disable this warning with `git config set advice.ignoredHook false`." msgstr "" "'%s' kancası yok sayıldı; çünkü bir yürütülebilir olarak ayarlanmamış.\n" -"Bu uyarıyı 'git config advice.ignoredHook false' ile kapatabilirsiniz." +"Bu uyarıyı 'git config set advice.ignoredHook false' ile kapatabilirsiniz." msgid "not a git repository" msgstr "bir git deposu deÄŸil" @@ -17043,15 +17176,9 @@ msgstr "http.postBuffer için negatif deÄŸer; %d olarak varsayılıyor" msgid "Delegation control is not supported with cURL < 7.22.0" msgstr "Delegasyon denetimi cURL < 7.22.0 tarafından desteklenmiyor" -msgid "Public key pinning not supported with cURL < 7.39.0" -msgstr "Ortak anahtar iÄŸnelemesi cURL < 7.39.0 tarafından desteklenmiyor" - msgid "Unknown value for http.proactiveauth" msgstr "http.proactiveauth için bilinmeyen deÄŸer" -msgid "CURLSSLOPT_NO_REVOKE not supported with cURL < 7.44.0" -msgstr "CURLSSLOPT_NO_REVOKE cURL < 7.44.0 tarafından desteklenmiyor" - #, c-format msgid "Unsupported SSL backend '%s'. Supported SSL backends:" msgstr "Desteklenmeyen SSL arka ucu '%s'. Desteklenen SSL arka uçları:" @@ -17238,6 +17365,10 @@ msgid "unable to format message: %s" msgstr "ileti biçimlendirilemiyor: %s" #, c-format +msgid "invalid marker-size '%s', expecting an integer" +msgstr "geçersiz imleyici boyutu '%s', bir tamsayı bekleniyor" + +#, c-format msgid "Failed to merge submodule %s (not checked out)" msgstr "%s altmodülü birleÅŸtirilemedi (çıkış yapılmadı)" @@ -18339,7 +18470,7 @@ msgid "" "\n" "where \"$br\" is somehow empty and a 40-hex ref is created. Please\n" "examine these refs and maybe delete them. Turn this message off by\n" -"running \"git config advice.objectNameWarning false\"" +"running \"git config set advice.objectNameWarning false\"" msgstr "" "Git normalde hiçbir zaman 40 onaltılı karakterlerle biten bir baÅŸvuru\n" "oluÅŸturmaz; çünkü 40 onaltılı bir baÅŸvuru, onu belirlediÄŸiniz zaman yok\n" @@ -18350,7 +18481,7 @@ msgstr "" "komutunda \"$br\" bir ÅŸekilde boÅŸ kalmış ve 40 onaltılı bir baÅŸvuru\n" "oluÅŸturulmuÅŸ. Lütfen bu baÅŸvuruları inceleyin ve gerekirse silin. Bu " "iletiyi\n" -"kapatmak için \"git config advice.objectNameWarning\" yapın" +"kapatmak için \"git config set advice.objectNameWarning\" yapın" #, c-format msgid "log for '%.*s' only goes back to %s" @@ -18511,13 +18642,6 @@ 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 "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" @@ -19343,8 +19467,8 @@ msgid "" msgstr "" "Bu iletiden kaçınmak için, bir iÅŸlemeyi kaldırırken açıkça \"drop\" " "kullanın.\n" -"Uyarıların düzeyini deÄŸiÅŸtirmek için 'git config rebase." -"missingCommitsCheck'\n" +"Uyarıların düzeyini deÄŸiÅŸtirmek için 'git config " +"rebase.missingCommitsCheck'\n" "kullanın. Kullanılabilir davranışlar: ignore, warn, error.\n" "\n" @@ -19626,18 +19750,27 @@ msgstr "" msgid "log for %s is empty" msgstr "%s için olan günlük boÅŸ" -msgid "refusing to force and skip creation of reflog" -msgstr "baÅŸvuru günlüğünün oluÅŸturulma/atlanma zorlanması reddediliyor" - #, c-format -msgid "refusing to update ref with bad name '%s'" -msgstr "hatalı ada iye '%s' baÅŸvurusunu güncelleme reddediliyor" +msgid "refusing to update reflog for pseudoref '%s'" +msgstr "" +"'%s' yalancı baÅŸvurusu için olan baÅŸvuru günlüğünü güncelleme reddediliyor" #, c-format msgid "refusing to update pseudoref '%s'" msgstr "'%s' yalancı baÅŸvurusunun güncellenmesi reddediliyor" #, c-format +msgid "refusing to update reflog with bad name '%s'" +msgstr "hatalı adlı '%s' baÅŸvuru günlüğünü güncelleme reddediliyor" + +#, c-format +msgid "refusing to update ref with bad name '%s'" +msgstr "hatalı ada iye '%s' baÅŸvurusunu güncelleme reddediliyor" + +msgid "refusing to force and skip creation of reflog" +msgstr "baÅŸvuru günlüğünün oluÅŸturulma/atlanma zorlanması reddediliyor" + +#, c-format msgid "update_ref failed for ref '%s': %s" msgstr "'%s' baÅŸvurusu için update_ref baÅŸarısız oldu: %s" @@ -19687,6 +19820,10 @@ msgstr "" "bekleniyordu; ancak bu normal bir baÅŸvuru" #, c-format +msgid "cannot read ref file '%s'" +msgstr "baÅŸvuru dosyası '%s' yazılamıyor" + +#, c-format msgid "cannot open directory %s" msgstr "%s dizini açılamıyor" @@ -19894,6 +20031,10 @@ msgid "more than one uploadpack given, using the first" msgstr "birden fazla uploadpack verildi, birincisi kullanılıyor" #, c-format +msgid "unrecognized followRemoteHEAD value '%s' ignored" +msgstr "tanımlanamayan followRemoteHEAD deÄŸeri '%s' yok sayıldı" + +#, c-format msgid "unrecognized value transfer.credentialsInUrl: '%s'" msgstr "tanımlanamayan deÄŸer transfer.credentialsInUrl: '%s'" @@ -21814,6 +21955,9 @@ msgstr "%s iÅŸlemesi ulaşılabilir olarak imlenmedi" msgid "too many commits marked reachable" msgstr "pek fazla iÅŸleme ulaşılabilir olarak imlenmiÅŸ" +msgid "could not determine MIDX preferred pack" +msgstr "MIDX yeÄŸlenen paketi algılanamadı" + msgid "test-tool serve-v2 [<options>]" msgstr "test-tool serve-v2 [<seçenekler>]" @@ -22462,6 +22606,9 @@ msgstr ".git dosyası bozuk" msgid ".git file incorrect" msgstr ".git dosyası doÄŸru deÄŸil" +msgid ".git file absolute/relative path mismatch" +msgstr ".git dosyası mutlak/göreceli yolu uyumsuzluÄŸu" + msgid "not a valid path" msgstr "geçerli bir yol deÄŸil" @@ -22477,6 +22624,9 @@ msgstr "depo konumu bulunamıyor: .git dosyası bozuk" msgid "gitdir unreadable" msgstr "okunamayan gitdir" +msgid "gitdir absolute/relative path mismatch" +msgstr "gitdir mutlak/göreceli yolu uyumsuzluÄŸu" + msgid "gitdir incorrect" msgstr "doÄŸru olmayan gitdir" @@ -22511,6 +22661,13 @@ msgstr "%s, '%s' içinde ayarı kaldırılamıyor" msgid "failed to set extensions.worktreeConfig setting" msgstr "extensions.worktreeConfig yapılandırması ayarlanamadı" +msgid "unable to upgrade repository format to support relative worktrees" +msgstr "" +"depo biçimi göreceli çalışma aÄŸaçlarını desteklemesi için yükseltilemiyor" + +msgid "unable to set extensions.relativeWorktrees setting" +msgstr "extensions.relativeWorktrees yapılandırması ayarlanamadı" + #, c-format msgid "could not setenv '%s'" msgstr "setenv '%s' yapılamadı" diff --git a/po/zh_TW.po b/po/zh_TW.po index 5e6818f453..a61f544304 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -30,8 +30,8 @@ msgid "" msgstr "" "Project-Id-Version: Git\n" "Report-Msgid-Bugs-To: Git Mailing List <git@vger.kernel.org>\n" -"POT-Creation-Date: 2024-10-05 01:20+0000\n" -"PO-Revision-Date: 2024-10-05 15:45+0800\n" +"POT-Creation-Date: 2024-12-28 13:16+0800\n" +"PO-Revision-Date: 2024-12-28 13:23+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" @@ -764,10 +764,10 @@ msgstr "åªæœ‰äºŒé€²ä½æª”案更動了。" #, c-format msgid "" "\n" -"Disable this message with \"git config advice.%s false\"" +"Disable this message with \"git config set advice.%s false\"" msgstr "" "\n" -"請使用「git config advice.%s falseã€åœç”¨æ¤è¨Šæ¯" +"請使用「git config set advice.%s falseã€åœç”¨æ¤è¨Šæ¯" #: advice.c #, c-format @@ -941,12 +941,12 @@ msgstr "引數éŽå¤š" #: apply.c #, c-format msgid "unrecognized whitespace option '%s'" -msgstr "空白å—å…ƒé¸é …「%sã€ç„¡æ³•è˜åˆ¥" +msgstr "空白å—å…ƒé¸é …「%sã€ä¸èªè˜" #: apply.c #, c-format msgid "unrecognized whitespace ignore option '%s'" -msgstr "空白å—元忽略é¸é …「%sã€ç„¡æ³•è˜åˆ¥" +msgstr "空白å—元忽略é¸é …「%sã€ä¸èªè˜" #: apply.c archive.c builtin/add.c builtin/branch.c builtin/checkout-index.c #: builtin/checkout.c builtin/clean.c builtin/clone.c builtin/commit.c @@ -1081,7 +1081,7 @@ msgstr "二進ä½ä¿®è£œæª”在第 %d 列æå£žï¼š%.*s" #: apply.c #, c-format msgid "unrecognized binary patch at line %d" -msgstr "第 %d 列的二進ä½ä¿®è£œæª”無法è˜åˆ¥" +msgstr "第 %d 列的二進ä½ä¿®è£œæª”ä¸èªè˜" #: apply.c #, c-format @@ -2620,7 +2620,7 @@ msgstr "" #: builtin/am.c builtin/reset.c #, c-format msgid "Could not parse object '%s'." -msgstr "無法解æžã€Œ%sã€ç‰©ä»¶ã€‚" +msgstr "無法解æžç‰©ä»¶ã€Œ%sã€ã€‚" #: builtin/am.c msgid "failed to clean index" @@ -2917,7 +2917,7 @@ msgstr "「%sã€ä¸æ˜¯æœ‰æ•ˆçš„æäº¤" #, c-format msgid "" "could not check out original HEAD '%s'. Try 'git bisect reset <commit>'." -msgstr "ä¸èƒ½ç°½å‡ºåŽŸå§‹ HEAD「%sã€ã€‚請嘗試「git bisect reset <commit>ã€ã€‚" +msgstr "無法簽出原始 HEAD「%sã€ã€‚請嘗試「git bisect reset <commit>ã€ã€‚" #: builtin/bisect.c #, c-format @@ -3021,7 +3021,7 @@ msgstr "「 ã€ä¸æ˜¯æœ‰æ•ˆè¡“語" #: builtin/bisect.c #, c-format msgid "unrecognized option: '%s'" -msgstr "無法è˜åˆ¥é¸é …:「%sã€" +msgstr "ä¸èªè˜é¸é …:「%sã€" #: builtin/bisect.c #, c-format @@ -3460,7 +3460,7 @@ msgstr "ç„¡æ³•è§£æžæ ¼å¼åŒ–å—串" #: builtin/branch.c msgid "could not resolve HEAD" -msgstr "ç„¡æ³•è§£æž HEAD 指標" +msgstr "ç„¡æ³•è§£æž HEAD" #: builtin/branch.c #, c-format @@ -4689,7 +4689,7 @@ msgstr "未知的è¡çªè¼¸å‡ºé¢¨æ ¼ã€Œ%sã€" msgid "perform a 3-way merge with the new branch" msgstr "和新分支進行三方åˆä½µ" -#: builtin/checkout.c builtin/log.c parse-options.h +#: builtin/checkout.c builtin/log.c builtin/range-diff.c parse-options.h msgid "style" msgstr "style" @@ -4718,8 +4718,8 @@ msgid "update ignored files (default)" msgstr "更新忽略的檔案(é è¨å€¼ï¼‰" #: builtin/checkout.c -msgid "do not check if another worktree is holding the given ref" -msgstr "䏿ª¢æŸ¥å…¶ä»–å·¥ä½œå€æ˜¯å¦æ£åœ¨ä½”用指定的引用" +msgid "do not check if another worktree is using this branch" +msgstr "䏿ª¢æŸ¥å…¶ä»–å·¥ä½œå€æ˜¯å¦æ£åœ¨ä½¿ç”¨æ¤åˆ†æ”¯" #: builtin/checkout.c msgid "checkout our version for unmerged files" @@ -4875,7 +4875,7 @@ msgstr "無法移除 %s" #: builtin/clean.c #, c-format msgid "could not lstat %s\n" -msgstr "ä¸èƒ½å° %s 進行 lstat\n" +msgstr "ç„¡æ³•å° %s 進行 lstat\n" #: builtin/clean.c msgid "Refusing to remove current working directory\n" @@ -5099,14 +5099,13 @@ msgstr "建立指定深度的淺層複製" 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" +#: builtin/clone.c builtin/fetch.c builtin/pull.c +msgid "ref" +msgstr "ref" #: builtin/clone.c builtin/fetch.c builtin/pull.c -msgid "deepen history of shallow clone, excluding rev" -msgstr "å–得更多淺層複製的éŽåŽ»æ·å²è¨˜éŒ„,除了特定修訂版" +msgid "deepen history of shallow clone, excluding ref" +msgstr "å–得更多淺層複製的éŽå¾€æ·å²è¨˜éŒ„,除了特定修訂版" #: builtin/clone.c builtin/submodule--helper.c msgid "clone only one branch, HEAD or --branch" @@ -5325,12 +5324,12 @@ msgstr "å·¥ä½œå€ '%s' 已經å˜åœ¨ã€‚" #: builtin/clone.c builtin/difftool.c builtin/log.c builtin/worktree.c #, c-format msgid "could not create leading directories of '%s'" -msgstr "ä¸èƒ½ç‚º '%s' 建立先導目錄" +msgstr "無法為「%sã€å»ºç«‹å‰å°Žç›®éŒ„" #: builtin/clone.c #, c-format msgid "could not create work tree dir '%s'" -msgstr "ä¸èƒ½å»ºç«‹å·¥ä½œå€ç›®éŒ„ '%s'" +msgstr "無法建立工作å€ç›®éŒ„「%sã€" #: builtin/clone.c #, c-format @@ -5495,7 +5494,7 @@ msgstr "無法開啟æäº¤åœ–éˆã€Œ%sã€" #: builtin/commit-graph.c #, c-format msgid "unrecognized --split argument, %s" -msgstr "無法è˜åˆ¥çš„ --split åƒæ•¸ï¼Œ%s" +msgstr "ä¸èªè˜çš„ --split åƒæ•¸ï¼Œ%s" #: builtin/commit-graph.c #, c-format @@ -5789,12 +5788,12 @@ msgstr "(æ£å¾žæ¨™æº–輸入ä¸è®€å–日誌訊æ¯ï¼‰\n" #: builtin/commit.c msgid "could not read log from standard input" -msgstr "ä¸èƒ½å¾žæ¨™æº–輸入ä¸è®€å–日誌訊æ¯" +msgstr "無法從標準輸入ä¸è®€å–記錄" #: builtin/commit.c #, c-format msgid "could not read log file '%s'" -msgstr "ä¸èƒ½è®€å–日誌檔案 '%s'" +msgstr "ç„¡æ³•è®€å–æ—¥èªŒæª”案「%sã€" #: builtin/commit.c #, c-format @@ -5803,11 +5802,11 @@ msgstr "「%sã€å’Œã€Œ%s:%sã€é¸é …ä¸å¾—åŒæ™‚使用" #: builtin/commit.c msgid "could not read SQUASH_MSG" -msgstr "ä¸èƒ½è®€å– SQUASH_MSG" +msgstr "ç„¡æ³•è®€å– SQUASH_MSG" #: builtin/commit.c msgid "could not read MERGE_MSG" -msgstr "ä¸èƒ½è®€å– MERGE_MSG" +msgstr "ç„¡æ³•è®€å– MERGE_MSG" #: builtin/commit.c bundle.c rerere.c sequencer.c #, c-format @@ -5816,7 +5815,7 @@ msgstr "無法開啟「%sã€" #: builtin/commit.c msgid "could not write commit template" -msgstr "ä¸èƒ½å¯«æäº¤ç¯„本" +msgstr "無法寫入æäº¤æ¨¡æ¿" #: builtin/commit.c #, c-format @@ -6192,7 +6191,7 @@ msgstr "å…許空的æäº¤èªªæ˜Ž" #: builtin/commit.c sequencer.c msgid "could not parse HEAD commit" -msgstr "ä¸èƒ½è§£æž HEAD æäº¤" +msgstr "ç„¡æ³•è§£æž HEAD æäº¤" #: builtin/commit.c #, c-format @@ -6201,12 +6200,12 @@ msgstr "æå£žçš„ MERGE_HEAD 檔案(%s)" #: builtin/commit.c msgid "could not read MERGE_MODE" -msgstr "ä¸èƒ½è®€å– MERGE_MODE" +msgstr "ç„¡æ³•è®€å– MERGE_MODE" #: builtin/commit.c #, c-format msgid "could not read commit message: %s" -msgstr "ä¸èƒ½è®€å–æäº¤èªªæ˜Žï¼š%s" +msgstr "ç„¡æ³•è®€å–æäº¤èªªæ˜Žï¼š%s" #: builtin/commit.c #, c-format @@ -6255,10 +6254,10 @@ msgstr "" #: builtin/config.c msgid "" "git config unset [<file-option>] [--all] [--value=<value>] [--fixed-value] " -"<name> <value>" +"<name>" msgstr "" -"git config unset [<檔案é¸é …>] [--all] [--value=<值>] [--fixed-value] <å稱> <" -"值>" +"git config unset [<file-option>] [--all] [--value=<value>] [--fixed-value] " +"<name>" #: builtin/config.c msgid "git config rename-section [<file-option>] <old-name> <new-name>" @@ -6390,7 +6389,7 @@ msgstr "除了顯示組態值,é¡å¤–顯示其éµå" #: builtin/config.c #, c-format msgid "unrecognized --type argument, %s" -msgstr "無法è˜åˆ¥çš„ --type åƒæ•¸ï¼Œ%s" +msgstr "ä¸èªè˜çš„ --type åƒæ•¸ï¼Œ%s" #: builtin/config.c msgid "only one type at a time" @@ -6804,12 +6803,8 @@ msgstr "已鿷 %lu 個æäº¤\n" #: builtin/describe.c #, c-format -msgid "" -"more than %i tags found; listed %i most recent\n" -"gave up search at %s\n" -msgstr "" -"發ç¾å¤šæ–¼ %i 個標籤,列出最近的 %i 個\n" -"在 %s 放棄æœå°‹\n" +msgid "found %i tags; gave up search at %s\n" +msgstr "找到 %i 個標籤;在 %s 放棄æœå°‹\n" #: builtin/describe.c #, c-format @@ -6997,7 +6992,7 @@ msgstr "å·¥ä½œå€æª”案被留了下來。" #: builtin/difftool.c sequencer.c #, c-format msgid "could not copy '%s' to '%s'" -msgstr "ä¸èƒ½è¤‡è£½ '%s' 至 '%s'" +msgstr "無法將「%sã€è¤‡è£½åˆ°ã€Œ%sã€" #: builtin/difftool.c #, c-format @@ -7358,6 +7353,21 @@ msgid "the object %s does not exist" msgstr "%s 物件ä¸å˜åœ¨" #: builtin/fetch.c +#, c-format +msgid "" +"Run 'git remote set-head %s %s' to follow the change, or set\n" +"'remote.%s.followRemoteHEAD' configuration option to a different value\n" +"if you do not want to see this message. Specifically running\n" +"'git config set remote.%s.followRemoteHEAD %s' will disable the warning\n" +"until the remote changes HEAD to something else." +msgstr "" +"執行「git remote set-head %s %sã€ä»¥è¿½è¹¤é€™å€‹è®Šæ›´ï¼Œæˆ–者\n" +"å¦‚æžœæ‚¨ä¸æƒ³çœ‹åˆ°é€™å‰‡è¨Šæ¯ï¼Œè«‹å°‡ã€Œremote.%s.followRemoteHEADã€\n" +"組態é¸é …è¨å®šæˆä¸åŒçš„值。更具體些來說,執行\n" +"「git config set remote.%s.followRemoteHEAD %sã€æœƒåœç”¨é€™å€‹è¦å‘Šï¼Œ\n" +"直到é 端將 HEAD 變更為其他內容。" + +#: builtin/fetch.c msgid "multiple branches detected, incompatible with --set-upstream" msgstr "檢測到多分支,和 --set-upstream ä¸ç›¸å®¹" @@ -7397,12 +7407,12 @@ msgstr "æ£åœ¨å–å¾— %s\n" #: builtin/fetch.c #, c-format msgid "could not fetch %s" -msgstr "ä¸èƒ½å–å¾— %s" +msgstr "無法å–å¾— %s" #: builtin/fetch.c #, c-format msgid "could not fetch '%s' (exit code: %d)\n" -msgstr "無法å–å¾— '%s'(離開碼:%d)\n" +msgstr "無法å–得「%sã€ï¼ˆé›¢é–‹ç¢¼ï¼š%d)\n" #: builtin/fetch.c msgid "" @@ -7527,6 +7537,10 @@ msgstr "å¼•ç”¨æ˜ å°„" msgid "specify fetch refmap" msgstr "指定å–å¾—å‹•ä½œçš„å¼•ç”¨æ˜ å°„" +#: builtin/fetch.c builtin/pull.c builtin/rebase.c builtin/replay.c +msgid "revision" +msgstr "revision" + #: builtin/fetch.c builtin/pull.c msgid "report that we have only objects reachable from this object" msgstr "å ±å‘Šæˆ‘å€‘åªæ“有從該物件開始å¯ä»¥å–得的物件" @@ -7788,18 +7802,18 @@ msgstr "懸空 %s %s" #: builtin/fsck.c msgid "could not create lost-found" -msgstr "ä¸èƒ½å»ºç«‹ lost-found" +msgstr "無法建立 lost-found" #: builtin/fsck.c builtin/gc.c builtin/rebase.c rebase-interactive.c rerere.c #: sequencer.c #, c-format msgid "could not write '%s'" -msgstr "ä¸èƒ½å¯«å…¥ '%s'" +msgstr "無法寫入「%sã€" #: builtin/fsck.c #, c-format msgid "could not finish '%s'" -msgstr "ä¸èƒ½å®Œæˆ '%s'" +msgstr "無法完æˆã€Œ%sã€" #: builtin/fsck.c #, c-format @@ -8069,7 +8083,7 @@ msgstr "無法啟動 fsmonitor 監è½åŸ·è¡Œç·’" #: builtin/fsmonitor--daemon.c msgid "could not start fsmonitor health thread" -msgstr "無法啟動 fsmonitor å¥åº·ç›£è½åŸ·è¡Œç·’" +msgstr "無法啟動 fsmonitor å¥åº·æª¢æŸ¥åŸ·è¡Œç·’" #: builtin/fsmonitor--daemon.c msgid "could not initialize listener thread" @@ -8077,7 +8091,7 @@ msgstr "無法åˆå§‹åŒ–監è½åŸ·è¡Œç·’" #: builtin/fsmonitor--daemon.c msgid "could not initialize health thread" -msgstr "無法åˆå§‹åŒ–å¥åº·ç›£è½åŸ·è¡Œç·’" +msgstr "無法åˆå§‹åŒ–å¥åº·æª¢æŸ¥åŸ·è¡Œç·’" #: builtin/fsmonitor--daemon.c #, c-format @@ -8251,7 +8265,7 @@ msgstr "ä¸å…許 --no-schedule" #: builtin/gc.c #, c-format msgid "unrecognized --schedule argument '%s'" -msgstr "無法è˜åˆ¥çš„ --schedule 引數 '%s'" +msgstr "ä¸èªè˜çš„ --schedule 引數 '%s'" #: builtin/gc.c msgid "failed to write commit-graph" @@ -8425,7 +8439,7 @@ msgstr "無法執行 systemctl" #: builtin/gc.c #, c-format msgid "unrecognized --scheduler argument '%s'" -msgstr "無法è˜åˆ¥çš„ --scheduler 引數 '%s'" +msgstr "ä¸èªè˜çš„ --scheduler 引數 '%s'" #: builtin/gc.c msgid "neither systemd timers nor crontab are available" @@ -8437,8 +8451,26 @@ msgid "%s scheduler is not available" msgstr "無法使用 %s 排程器" #: builtin/gc.c -msgid "another process is scheduling background maintenance" -msgstr "其他處ç†ç¨‹åºæ£åœ¨æŽ’定背景ç¶è·å·¥ä½œ" +#, c-format +msgid "" +"unable to create '%s.lock': %s.\n" +"\n" +"Another scheduled git-maintenance(1) process seems to be running in this\n" +"repository. Please make sure no other maintenance processes are running and\n" +"then try again. If it still fails, a git-maintenance(1) process may have\n" +"crashed in this repository earlier: remove the file manually to continue." +msgstr "" +"無法建立「%s.lockã€ï¼š%s。\n" +"\n" +"似乎有å¦ä¸€å€‹æŽ’定的 git-maintenance(1) ç¨‹åºæ£åœ¨æ¤\n" +"版本庫ä¸åŸ·è¡Œã€‚è«‹ç¢ºä¿æ²’有其他ç¶è·ç¨‹åºæ£åœ¨åŸ·è¡Œï¼Œ\n" +"然後å†è©¦ä¸€æ¬¡ã€‚如果ä»ç„¶å¤±æ•—,å¯èƒ½æ˜¯å…ˆå‰çš„\n" +"git-maintenance(1) 程åºåœ¨é€™å€‹ç‰ˆæœ¬åº«ä¸æ„外䏿–·ï¼š\n" +"請手動移除檔案以繼續。" + +#: builtin/gc.c +msgid "cannot acquire lock for scheduled background maintenance" +msgstr "無法å–得用來進行排定背景ç¶è·çš„鎖" #: builtin/gc.c msgid "git maintenance start [--scheduler=<scheduler>]" @@ -8727,7 +8759,7 @@ msgstr "--open-files-in-pager 僅用於工作å€" #: builtin/grep.c msgid "--[no-]exclude-standard cannot be used for tracked contents" -msgstr "--[no-]exclude-standard ä¸èƒ½ç”¨æ–¼å·²è¿½è¹¤å…§å®¹" +msgstr "--[no-]exclude-standard 無法用於已追蹤內容" #: builtin/grep.c msgid "both --cached and trees are given" @@ -8825,7 +8857,7 @@ msgstr "git help [[-i|--info] [-m|--man] [-w|--web]] [<command>|<doc>]" #: builtin/help.c #, c-format msgid "unrecognized help format '%s'" -msgstr "無法è˜åˆ¥çš„å”åŠ©æ ¼å¼ '%s'" +msgstr "ä¸èªè˜çš„å”åŠ©æ ¼å¼ '%s'" #: builtin/help.c msgid "Failed to start emacsclient." @@ -9158,6 +9190,22 @@ msgid_plural "chain length = %d: %lu objects" msgstr[0] "éˆé•· = %d: %lu 物件" #: builtin/index-pack.c +msgid "could not start pack-objects to repack local links" +msgstr "無法啟動 pack-objects 來釿–°æ‰“包本機連çµ" + +#: builtin/index-pack.c +msgid "failed to feed local object to pack-objects" +msgstr "無法將本機物件喂給 pack-objects" + +#: builtin/index-pack.c +msgid "index-pack: Expecting full hex object ID lines only from pack-objects." +msgstr "index-pack:åªé 期接å—來自 pack-objects 的完整åå…進ä½ç‰©ä»¶ ID。" + +#: builtin/index-pack.c +msgid "could not finish pack-objects to repack local links" +msgstr "ç„¡æ³•çµæŸ pack-objects 來釿–°å°åŒ…" + +#: builtin/index-pack.c msgid "Cannot come back to cwd" msgstr "無法返回目å‰å·¥ä½œç›®éŒ„" @@ -9172,6 +9220,10 @@ msgid "unknown hash algorithm '%s'" msgstr "未知的「%sã€é›œæ¹Šç®—法" #: builtin/index-pack.c +msgid "--promisor cannot be used with a pack name" +msgstr "--promisor ä¸èƒ½èˆ‡å°åŒ…å稱一起使用" + +#: builtin/index-pack.c msgid "--stdin requires a git repository" msgstr "--stdin 需è¦ä¸€å€‹ git 版本庫" @@ -9256,7 +9308,7 @@ msgstr "" #: builtin/interpret-trailers.c wrapper.c #, c-format msgid "could not stat %s" -msgstr "ä¸èƒ½å° %s å‘¼å« stat" +msgstr "無法 stat %s" #: builtin/interpret-trailers.c #, c-format @@ -9270,21 +9322,21 @@ msgstr "檔案 %s 使用者ä¸å¯å¯«" #: builtin/interpret-trailers.c msgid "could not open temporary file" -msgstr "ä¸èƒ½é–‹å•Ÿæš«å˜æª”" +msgstr "ç„¡æ³•é–‹å•Ÿæš«å˜æª”" #: builtin/interpret-trailers.c #, c-format msgid "could not read input file '%s'" -msgstr "ä¸èƒ½è®€å–輸入檔案 '%s'" +msgstr "無法讀å–輸入檔案「%sã€" #: builtin/interpret-trailers.c builtin/mktag.c imap-send.c msgid "could not read from stdin" -msgstr "ä¸èƒ½è‡ªæ¨™æº–輸入讀å–" +msgstr "無法從標準輸入讀å–" #: builtin/interpret-trailers.c #, c-format msgid "could not rename temporary file to %s" -msgstr "ä¸èƒ½é‡æ–°å‘½åæš«å˜æª”為 %s" +msgstr "ç„¡æ³•å°‡æš«å˜æª”釿–°å‘½å為 %s" #: builtin/interpret-trailers.c msgid "edit files in place" @@ -9388,7 +9440,7 @@ msgstr "追蹤 <é–‹å§‹>,<çµæŸ> 範åœä¸æ©«åˆ—或 <檔案> ä¸> :<函數å稱 #: builtin/log.c builtin/replay.c builtin/shortlog.c bundle.c #, c-format msgid "unrecognized argument: %s" -msgstr "無法è˜åˆ¥çš„引數:%s" +msgstr "ä¸èªè˜çš„引數:%s" #: builtin/log.c msgid "-L<range>:<file> cannot be used with pathspec" @@ -9407,7 +9459,7 @@ msgstr "git show %s: æå£žçš„æª”案" #: builtin/log.c #, c-format msgid "could not read object %s" -msgstr "ä¸èƒ½è®€å–物件 %s" +msgstr "無法讀å–物件 %s" #: builtin/log.c #, c-format @@ -9474,7 +9526,7 @@ msgstr "無法將 '%s' è§£æžç‚ºä¸€å€‹æœ‰æ•ˆå¼•用" #: builtin/log.c msgid "could not find exact merge base" -msgstr "ä¸èƒ½æ‰¾åˆ°æº–確的åˆä½µåŸºç¤Ž" +msgstr "找ä¸åˆ°æº–確的åˆä½µåŸºç¤Ž" #: builtin/log.c msgid "" @@ -9727,7 +9779,7 @@ msgstr "--remerge-diff ç„¡æ„義" #: builtin/log.c builtin/submodule--helper.c rerere.c submodule.c #, c-format msgid "could not create directory '%s'" -msgstr "ä¸èƒ½å»ºç«‹ç›®éŒ„ '%s'" +msgstr "無法建立「%sã€ç›®éŒ„" #: builtin/log.c msgid "--interdiff requires --cover-letter or single patch" @@ -9776,7 +9828,7 @@ msgstr "git cherry [-v] [<上游> [<é > [<é™åˆ¶>]]]" #, c-format msgid "" "Could not find a tracked remote branch, please specify <upstream> manually.\n" -msgstr "ä¸èƒ½æ‰¾åˆ°è¿½è¹¤çš„é 端分支,請手動指定 <上游>。\n" +msgstr "無法找到追蹤的é 端分支,請手動指定 <上游>。\n" #: builtin/ls-files.c builtin/ls-tree.c #, c-format @@ -9900,7 +9952,7 @@ msgid "" "--format cannot be used with -s, -o, -k, -t, --resolve-undo, --deduplicate, " "--eol" msgstr "" -"--format ä¸èƒ½å’Œ -sã€-oã€-kã€-tã€--resolve-undoã€--deduplicateã€--eol 一起使用" +"--format 無法和 -sã€-oã€-kã€-tã€--resolve-undoã€--deduplicateã€--eol 一起使用" #: builtin/ls-remote.c msgid "" @@ -10162,7 +10214,7 @@ msgstr "未知é¸é … %s" #: builtin/merge-recursive.c #, c-format msgid "could not parse object '%s'" -msgstr "ä¸èƒ½è§£æžç‰©ä»¶ '%s'" +msgstr "無法解æžç‰©ä»¶ã€Œ%sã€" #: builtin/merge-recursive.c #, c-format @@ -10177,7 +10229,7 @@ msgstr "ä¸èƒ½è™•ç†å…©å€‹é åˆä½µä¹‹å¤–的任何動作。" #: builtin/merge-recursive.c #, c-format msgid "could not resolve ref '%s'" -msgstr "無法解æžå¼•用 '%s'" +msgstr "無法解æžå¼•用「%sã€" #: builtin/merge-recursive.c #, c-format @@ -10280,7 +10332,7 @@ msgstr "é¸é … `%s' 需è¦ä¸€å€‹å€¼" #: builtin/merge.c #, c-format msgid "Could not find merge strategy '%s'.\n" -msgstr "ä¸èƒ½æ‰¾åˆ°åˆä½µç–ç•¥ '%s'。\n" +msgstr "找ä¸åˆ°åˆä½µç–略「%sã€ã€‚\n" #: builtin/merge.c #, c-format @@ -10368,7 +10420,7 @@ msgstr "ç¹žéŽ pre-merge-commit å’Œ commit-msg 掛鉤" #: builtin/merge.c msgid "could not run stash." -msgstr "ä¸èƒ½åŸ·è¡Œè²¯å˜ã€‚" +msgstr "無法執行貯å˜ã€‚" #: builtin/merge.c msgid "stash failed" @@ -10428,7 +10480,7 @@ msgstr "ä¸èƒ½å¯« %s" #: builtin/merge.c #, c-format msgid "Could not read from '%s'" -msgstr "ä¸èƒ½å¾ž '%s' 讀å–" +msgstr "無法從「%sã€é€²è¡Œè®€å–" #: builtin/merge.c #, c-format @@ -10495,7 +10547,7 @@ msgstr "環境 '%2$s' ä¸å˜åœ¨å£žçš„å–值 '%1$s'" #: builtin/merge.c editor.c read-cache.c wrapper.c #, c-format msgid "could not close '%s'" -msgstr "ä¸èƒ½é—œé–‰ '%s'" +msgstr "無法關閉「%sã€" #: builtin/merge.c #, c-format @@ -10885,11 +10937,11 @@ msgstr "git notes [--ref <註解引用>] [list [<物件>]]" msgid "" "git notes [--ref <notes-ref>] add [-f] [--allow-empty] [--[no-]separator|--" "separator=<paragraph-break>] [--[no-]stripspace] [-m <msg> | -F <file> | (-c " -"| -C) <object>] [<object>]" +"| -C) <object>] [<object>] [-e]" msgstr "" "git notes [--ref <notes-ref>] add [-f] [--allow-empty] [--[no-]separator|--" "separator=<paragraph-break>] [--[no-]stripspace] [-m <msg> | -F <file> | (-c " -"| -C) <object>] [<object>]" +"| -C) <object>] [<object>] [-e]" #: builtin/notes.c msgid "git notes [--ref <notes-ref>] copy [-f] <from-object> <to-object>" @@ -10899,11 +10951,11 @@ msgstr "git notes [--ref <註解引用>] copy [-f] <來æºç‰©ä»¶> <目標物件> msgid "" "git notes [--ref <notes-ref>] append [--allow-empty] [--[no-]separator|--" "separator=<paragraph-break>] [--[no-]stripspace] [-m <msg> | -F <file> | (-c " -"| -C) <object>] [<object>]" +"| -C) <object>] [<object>] [-e]" msgstr "" "git notes [--ref <notes-ref>] append [--allow-empty] [--[no-]separator|--" "separator=<paragraph-break>] [--[no-]stripspace] [-m <msg> | -F <file> | (-c " -"| -C) <object>] [<object>]" +"| -C) <object>] [<object>] [-e]" #: builtin/notes.c msgid "git notes [--ref <notes-ref>] edit [--allow-empty] [<object>]" @@ -10984,7 +11036,7 @@ msgstr "為下é¢çš„物件寫/編輯說明:" #: builtin/notes.c msgid "could not read 'show' output" -msgstr "ä¸èƒ½è®€å– 'show' 的輸出" +msgstr "無法讀å–「showã€çš„輸出" #: builtin/notes.c #, c-format @@ -11007,7 +11059,7 @@ msgstr "註解內容被留在 %s ä¸" #: builtin/notes.c builtin/tag.c #, c-format msgid "could not open or read '%s'" -msgstr "ä¸èƒ½é–‹å•Ÿæˆ–è®€å– '%s'" +msgstr "無法開啟或讀å–「%sã€" #: builtin/notes.c #, c-format @@ -11055,6 +11107,10 @@ msgid "reuse and edit specified note object" msgstr "é‡ç”¨å’Œç·¨è¼¯æŒ‡å®šçš„註解物件" #: builtin/notes.c +msgid "edit note message in editor" +msgstr "在編輯器ä¸ç·¨è¼¯å‚™è¨»è¨Šæ¯" + +#: builtin/notes.c msgid "reuse specified note object" msgstr "é‡ç”¨æŒ‡å®šçš„註解物件" @@ -11352,7 +11408,7 @@ msgstr "%s çš„ delta 基準ä½ç§»è¶Šç•Œ" #: builtin/pack-objects.c msgid "Counting objects" -msgstr "物件計數ä¸" +msgstr "æ£åœ¨è¨ˆç®—物件數é‡" #: builtin/pack-objects.c pack-bitmap.c #, c-format @@ -11668,6 +11724,10 @@ msgid "do not pack objects in promisor packfiles" msgstr "ä¸è¦æ‰“包 promisor packfile ä¸çš„物件" #: builtin/pack-objects.c +msgid "implies --missing=allow-any" +msgstr "éš±å« --missing=allow-any" + +#: builtin/pack-objects.c msgid "respect islands during delta compression" msgstr "在差異壓縮時尊é‡è³‡æ–™å³¶" @@ -11696,7 +11756,7 @@ msgstr "錯誤的打包壓縮級別 %d" #: builtin/pack-objects.c msgid "--max-pack-size cannot be used to build a pack for transfer" -msgstr "ä¸èƒ½ä½¿ç”¨ --max-pack-size 來組建傳輸用的包檔案" +msgstr "ä¸èƒ½ä½¿ç”¨ --max-pack-size 來建構傳輸用的包檔案" #: builtin/pack-objects.c msgid "minimum pack size limit is 1 MiB" @@ -12330,7 +12390,7 @@ msgstr "" #: builtin/push.c msgid "--all can't be combined with refspecs" -msgstr "--all ä¸èƒ½å’Œå¼•ç”¨è¦æ ¼åŒæ™‚使用" +msgstr "--all ç„¡æ³•å’Œå¼•ç”¨è¦æ ¼åŒæ™‚使用" #: builtin/push.c msgid "--mirror can't be combined with refspecs" @@ -12492,12 +12552,12 @@ msgstr "" #: builtin/rebase.c sequencer.c #, c-format msgid "could not read '%s'." -msgstr "ä¸èƒ½è®€å– '%s'。" +msgstr "無法讀å–「%sã€ã€‚" #: builtin/rebase.c #, c-format msgid "could not create temporary %s" -msgstr "無法建立暫時的 %s" +msgstr "無法建立暫å˜ç”¨çš„ %s" #: builtin/rebase.c msgid "could not mark as interactive" @@ -12505,7 +12565,7 @@ msgstr "無法標記為互動å¼" #: builtin/rebase.c msgid "could not generate todo list" -msgstr "無法生æˆå¾…辦列表" +msgstr "無法產生待辦列表" #: builtin/rebase.c msgid "a base commit must be provided with --upstream or --onto" @@ -12534,7 +12594,7 @@ msgstr "忽略無效的 allow_rerere_autoupdate:'%s'" #: builtin/rebase.c builtin/rm.c sequencer.c #, c-format msgid "could not remove '%s'" -msgstr "無法刪除 '%s'" +msgstr "無法刪除「%sã€" #: builtin/rebase.c #, c-format @@ -12577,7 +12637,7 @@ msgstr "--empty=ask 已棄用。請改用「--empty=stopã€ã€‚" msgid "" "unrecognized empty type '%s'; valid values are \"drop\", \"keep\", and " "\"stop\"." -msgstr "無法è˜åˆ¥ç©ºé¡žåž‹ã€Œ%sã€ï¼›æœ‰æ•ˆçš„æ•¸å€¼æœ‰ã€Œdropã€ã€ã€Œkeepã€è·Ÿã€Œstopã€ã€‚" +msgstr "ä¸èªè˜ç©ºé¡žåž‹ã€Œ%sã€ï¼›æœ‰æ•ˆçš„æ•¸å€¼æœ‰ã€Œdropã€ã€ã€Œkeepã€è·Ÿã€Œstopã€ã€‚" #: builtin/rebase.c msgid "" @@ -12879,7 +12939,7 @@ msgstr "無效的上游 '%s'" #: builtin/rebase.c msgid "Could not create new root commit" -msgstr "ä¸èƒ½å»ºç«‹æ–°çš„æ ¹æäº¤" +msgstr "ç„¡æ³•å»ºç«‹æ–°çš„æ ¹æäº¤" #: builtin/rebase.c #, c-format @@ -13235,7 +13295,7 @@ msgstr "æ›´æ–° %s ä¸" #: builtin/remote.c #, c-format msgid "Could not fetch %s" -msgstr "ä¸èƒ½å–å¾— %s" +msgstr "無法å–å¾— %s" #: builtin/remote.c msgid "" @@ -13290,7 +13350,7 @@ msgstr "é 端 %s 已經å˜åœ¨ã€‚" #: builtin/remote.c #, c-format msgid "Could not setup master '%s'" -msgstr "無法è¨å®š master '%s'" +msgstr "無法é…ç½® master「%sã€" #: builtin/remote.c trailer.c #, c-format @@ -13305,7 +13365,7 @@ msgstr "branch.%s.rebase=%s 未處ç†ã€‚å‡è¨æˆ 'true'" #: builtin/remote.c #, c-format msgid "Could not get fetch map for refspec %s" -msgstr "ç„¡æ³•å¾—åˆ°å¼•ç”¨è¦æ ¼ %s çš„å–得列表" +msgstr "無法å–å¾—å¼•ç”¨è¦æ ¼ %s çš„ fetch æ˜ å°„" #: builtin/remote.c msgid "(matching)" @@ -13318,12 +13378,12 @@ msgstr "(刪除)" #: builtin/remote.c #, c-format msgid "could not set '%s'" -msgstr "無法è¨å®š '%s'" +msgstr "無法è¨å®šã€Œ%sã€" #: builtin/remote.c config.c #, c-format msgid "could not unset '%s'" -msgstr "ä¸èƒ½å–消è¨å®š '%s'" +msgstr "ç„¡æ³•å–æ¶ˆè¨å®šã€Œ%sã€" #: builtin/remote.c #, c-format @@ -13344,7 +13404,7 @@ msgstr "沒有æ¤é 端版本庫:'%s'" #: builtin/remote.c #, c-format msgid "Could not rename config section '%s' to '%s'" -msgstr "ä¸èƒ½é‡æ–°å‘½åè¨å®šå°ç¯€ '%s' 到 '%s'" +msgstr "無法將組態的「%sã€å€æ®µé‡æ–°å‘½å為「%sã€" #: builtin/remote.c #, c-format @@ -13383,7 +13443,7 @@ msgstr[0] "注æ„:refs/remotes/ 層級之外的一個分支未被移除。è¦å #: builtin/remote.c #, c-format msgid "Could not remove config section '%s'" -msgstr "ä¸èƒ½ç§»é™¤è¨å®šå°ç¯€ '%s'" +msgstr "無法移除組態的「%sã€å€æ®µ" #: builtin/remote.c #, c-format @@ -13555,6 +13615,33 @@ msgid_plural " Local refs configured for 'git push'%s:" msgstr[0] " 為 'git push' è¨å®šçš„æœ¬æ©Ÿå¼•用%s:" #: builtin/remote.c +#, c-format +msgid "'%s/HEAD' is unchanged and points to '%s'\n" +msgstr "「%s/HEADã€æ²’有變更,指å‘「%sã€\n" + +#: builtin/remote.c +#, c-format +msgid "'%s/HEAD' has changed from '%s' and now points to '%s'\n" +msgstr "「%s/HEADã€å·²ç¶“從「%sã€è®Šæ›´ï¼Œç¾åœ¨æŒ‡å‘「%sã€\n" + +#: builtin/remote.c +#, c-format +msgid "'%s/HEAD' is now created and points to '%s'\n" +msgstr "「%s/HEADã€ç¾åœ¨å·²ç¶“建立並指å‘「%sã€\n" + +#: builtin/remote.c +#, c-format +msgid "'%s/HEAD' was detached at '%s' and now points to '%s'\n" +msgstr "「%s/HEADã€å·²ç¶“在「%sã€è™•分離,ç¾åœ¨æŒ‡å‘「%sã€\n" + +#: builtin/remote.c +#, c-format +msgid "" +"'%s/HEAD' used to point to '%s' (which is not a remote branch), but now " +"points to '%s'\n" +msgstr "「%s/HEADã€åŽŸæœ¬æŒ‡å‘「%sã€ï¼ˆä¸æ˜¯é 端分支),但ç¾åœ¨æŒ‡å‘「%sã€\n" + +#: builtin/remote.c msgid "set refs/remotes/<name>/HEAD according to remote" msgstr "æ ¹æ“šé 端è¨å®š refs/remotes/<å稱>/HEAD" @@ -13582,8 +13669,8 @@ msgstr "䏿˜¯ä¸€å€‹æœ‰æ•ˆå¼•用:%s" #: builtin/remote.c #, c-format -msgid "Could not setup %s" -msgstr "ä¸èƒ½è¨å®š %s" +msgid "Could not set up %s" +msgstr "無法é…ç½® %s" # è¯è€…ï¼šè«‹ç¶æŒå‰å°Žç©ºæ ¼ #: builtin/remote.c @@ -13702,7 +13789,7 @@ msgstr "repack:期望來自 pack-objects 的完整åå…進ä½ç‰©ä»¶ ID。" #: builtin/repack.c msgid "could not finish pack-objects to repack promisor objects" -msgstr "ç„¡æ³•å®Œæˆ pack-objects 來釿–°æ‰“包 promisor 物件" +msgstr "ç„¡æ³•çµæŸ pack-objects 來釿–°æ‰“包 promisor 物件" #: builtin/repack.c #, c-format @@ -13722,7 +13809,7 @@ msgstr "%s 包太大,以致ä¸èƒ½ç¸®åˆ" #: builtin/repack.c #, c-format msgid "could not open tempfile %s for writing" -msgstr "無法開啟 '%s' æš«å˜æª”進行寫入" +msgstr "ç„¡æ³•é–‹å•Ÿæš«å˜æª” %s 進行寫入" #: builtin/repack.c msgid "could not close refs snapshot tempfile" @@ -13986,7 +14073,7 @@ msgstr "新物件和舊物件相åŒï¼š'%s'" #: builtin/replace.c #, c-format msgid "could not parse %s as a commit" -msgstr "無法將 %s è§£æžç‚ºä¸€å€‹æäº¤" +msgstr "無法將 %s è§£æžç‚ºæäº¤" #: builtin/replace.c #, c-format @@ -14017,7 +14104,7 @@ msgstr "在å–代的æäº¤ä¸ç°½å將被移除ï¼" #: builtin/replace.c #, c-format msgid "could not write replacement commit for: '%s'" -msgstr "ä¸èƒ½ç‚º '%s' 寫å–代æäº¤" +msgstr "ç„¡æ³•å¯«å…¥ä¸‹åˆ—é …ç›®çš„æ›¿ä»£æäº¤ï¼šã€Œ%sã€" #: builtin/replace.c #, c-format @@ -14035,7 +14122,7 @@ msgid "" "could not convert the following graft(s):\n" "%s" msgstr "" -"ä¸èƒ½è½‰æ›ä¸‹åˆ—ç§»æ¤ï¼š\n" +"無法轉æ›ä¸‹åˆ—ç§»æ¤ï¼š\n" "%s" #: builtin/replace.c @@ -14072,7 +14159,7 @@ msgstr "ä½¿ç”¨æ¤æ ¼å¼" #: builtin/replace.c msgid "--format cannot be used when not listing" -msgstr "ä¸åˆ—出時ä¸èƒ½ä½¿ç”¨ --format" +msgstr "éžåˆ—出æ“作ä¸èƒ½ä½¿ç”¨ --format" #: builtin/replace.c msgid "-f only makes sense when writing a replacement" @@ -14338,11 +14425,11 @@ msgstr "" #: builtin/reset.c #, c-format msgid "Could not reset index file to revision '%s'." -msgstr "ä¸èƒ½é‡è¨ç´¢å¼•檔案至版本 '%s'。" +msgstr "無法將索引檔案é‡è¨åˆ°ä¿®è¨‚版「%sã€ã€‚" #: builtin/reset.c msgid "Could not write new index file." -msgstr "ä¸èƒ½å¯«å…¥æ–°çš„索引檔案。" +msgstr "無法寫入新的索引檔案。" #: builtin/rev-list.c #, c-format @@ -15231,7 +15318,7 @@ msgstr "無法在åˆä½µéŽç¨‹å¥—用貯å˜" #: builtin/stash.c #, c-format msgid "could not generate diff %s^!." -msgstr "無法生æˆå·®ç•° %s^!." +msgstr "無法產生差異 %s^!." #: builtin/stash.c msgid "conflicts in index. Try without --index." @@ -15239,7 +15326,7 @@ msgstr "ç´¢å¼•ä¸æœ‰è¡çªã€‚請試試看ä¸ç”¨ --index。" #: builtin/stash.c msgid "could not save index tree" -msgstr "ä¸èƒ½å„²å˜ç´¢å¼•樹" +msgstr "無法儲å˜ç´¢å¼•樹" #: builtin/stash.c #, c-format @@ -15415,14 +15502,14 @@ msgstr "期望一個完整的引用å稱,å»å¾—到 %s" #: builtin/submodule--helper.c #, c-format msgid "could not get a repository handle for submodule '%s'" -msgstr "無法ç²å¾—忍¡çµ„ '%s' çš„ç‰ˆæœ¬åº«å¥æŸ„" +msgstr "無法å–得忍¡çµ„「%sã€çš„版本庫控制代碼" #: builtin/submodule--helper.c #, c-format msgid "" "could not look up configuration '%s'. Assuming this repository is its own " "authoritative upstream." -msgstr "無法找到è¨å®š '%s'。å‡å®šé€™å€‹ç‰ˆæœ¬åº«æ˜¯å…¶è‡ªèº«çš„官方上游。" +msgstr "找ä¸åˆ°ã€Œ%sã€çµ„æ…‹è¨å®šã€‚å‡å®šé€™å€‹ç‰ˆæœ¬åº«æ˜¯å…¶è‡ªèº«çš„官方上游。" #: builtin/submodule--helper.c #, c-format @@ -15501,7 +15588,7 @@ msgstr "在 .gitmodules 䏿²’有發ç¾è·¯å¾‘ '%s' çš„åæ¨¡çµ„æ˜ å°„" #: builtin/submodule--helper.c #, c-format msgid "could not resolve HEAD ref inside the submodule '%s'" -msgstr "無法解æžå模組 '%s' çš„ HEAD 引用" +msgstr "無法解æžå模組「%sã€çš„ HEAD 引用" #: builtin/submodule--helper.c #, c-format @@ -15540,7 +15627,7 @@ msgstr "%s" #: builtin/submodule--helper.c #, c-format msgid "couldn't hash object from '%s'" -msgstr "無法雜湊來自 '%s' 的物件" +msgstr "無法雜湊來自「%sã€çš„物件" #: builtin/submodule--helper.c #, c-format @@ -15569,7 +15656,7 @@ msgstr "git submodule summary [<options>] [<commit>] [--] [<path>]" #: builtin/submodule--helper.c msgid "could not fetch a revision for HEAD" -msgstr "無法å–å¾— HEAD 的版本" +msgstr "無法å–å¾— HEAD 的修訂版" #: builtin/submodule--helper.c #, c-format @@ -15617,12 +15704,12 @@ msgstr "已清除目錄 '%s'\n" #: builtin/submodule--helper.c #, c-format msgid "Could not remove submodule work tree '%s'\n" -msgstr "ç„¡æ³•ç§»é™¤åæ¨¡çµ„å·¥ä½œå€ '%s'\n" +msgstr "ç„¡æ³•ç§»é™¤åæ¨¡çµ„工作å€ã€Œ%sã€\n" #: builtin/submodule--helper.c #, c-format msgid "could not create empty submodule directory %s" -msgstr "ä¸èƒ½å»ºç«‹ç©ºçš„忍¡çµ„目錄 %s" +msgstr "ç„¡æ³•å»ºç«‹ç©ºçš„åæ¨¡çµ„目錄 %s" #: builtin/submodule--helper.c #, c-format @@ -15662,7 +15749,7 @@ msgstr "" #: builtin/submodule--helper.c #, c-format msgid "could not get a repository handle for gitdir '%s'" -msgstr "無法å–å¾— gitdir「%sã€çš„版本庫控點" +msgstr "無法å–å¾— gitdir「%sã€çš„版本庫控制代碼" #: builtin/submodule--helper.c #, c-format @@ -15697,7 +15784,7 @@ msgstr "無法複製 '%s' åˆ°åæ¨¡çµ„路徑 '%s'" #: builtin/submodule--helper.c #, c-format msgid "could not get submodule directory for '%s'" -msgstr "無法得到 '%s' çš„åæ¨¡çµ„目錄" +msgstr "無法å–得「%sã€çš„忍¡çµ„目錄" #: builtin/submodule--helper.c msgid "alternative anchor for relative paths" @@ -16826,7 +16913,7 @@ msgstr "ç„¡æ³•å–æ¶ˆã€Œ%2$sã€ä¸ã€Œ%1$sã€çš„è¨å®š" #: builtin/worktree.c #, c-format msgid "could not create directory of '%s'" -msgstr "ä¸èƒ½å»ºç«‹ç›®éŒ„ '%s'" +msgstr "無法建立「%sã€çš„目錄" #: builtin/worktree.c msgid "initializing" @@ -16917,6 +17004,10 @@ msgstr "è¨å®šè¿½è¹¤æ¨¡å¼ï¼ˆåƒè¦‹ git-branch(1))" msgid "try to match the new branch name with a remote-tracking branch" msgstr "嘗試為新分支å符åˆä¸€å€‹é 端追蹤分支" +#: builtin/worktree.c +msgid "use relative paths for worktrees" +msgstr "å°å·¥ä½œå€ä½¿ç”¨ç›¸å°è·¯å¾‘" + #: builtin/worktree.c diff.c parse-options.c #, c-format msgid "options '%s', '%s', and '%s' cannot be used together" @@ -16987,7 +17078,7 @@ msgstr "'%s' 是一個主工作å€" #: builtin/worktree.c #, c-format msgid "could not figure out destination name from '%s'" -msgstr "無法從 '%s' 算出目的地å稱" +msgstr "無法從「%sã€å¾—出目的地å稱" #: builtin/worktree.c #, c-format @@ -17117,7 +17208,7 @@ msgstr "ç„¡æ³•å„²å˜æœ€å¤§çš„建立權æ–" #: bundle-uri.c #, c-format msgid "unrecognized bundle mode from URI '%s'" -msgstr "無法è˜åˆ¥å¾ž URI「%sã€å–回的套件包模å¼" +msgstr "ä¸èªè˜å¾ž URI「%sã€å–回的套件包模å¼" #: bundle-uri.c #, c-format @@ -17158,7 +17249,7 @@ msgstr "bundle-uri: åˆ—æœ‰ç©ºéµæˆ–空值" #: bundle.c #, c-format msgid "unrecognized bundle hash algorithm: %s" -msgstr "無法è˜åˆ¥çš„套件包雜湊演算法:%s" +msgstr "ä¸èªè˜çš„套件包雜湊演算法:%s" #: bundle.c #, c-format @@ -17173,7 +17264,7 @@ msgstr "「%sã€ä¸åƒæ˜¯ä¸€å€‹ v2 或 v3 版本的套件包檔案" #: bundle.c #, c-format msgid "unrecognized header: %s%s (%d)" -msgstr "無法è˜åˆ¥çš„æ¨™é :%s%s (%d)" +msgstr "ä¸èªè˜çš„æ¨™é :%s%s (%d)" #: bundle.c msgid "Repository lacks these prerequisite commits:" @@ -17251,6 +17342,30 @@ msgstr "無法建立「%sã€" msgid "index-pack died" msgstr "index-pack 終æ¢" +#: cache-tree.c +#, c-format +msgid "directory '%s' is present in index, but not sparse" +msgstr "「%sã€ç›®éŒ„已經在索引裡é¢ï¼Œä½†ä¸åœ¨ç¨€ç–簽出當ä¸ã€‚" + +#: cache-tree.c unpack-trees.c +msgid "corrupted cache-tree has entries not present in index" +msgstr "æå£žçš„å¿«å–æ¨¹æœ‰ä¸åœ¨ç´¢å¼•ä¸çš„é …ç›®" + +#: cache-tree.c +#, c-format +msgid "%s with flags 0x%x should not be in cache-tree" +msgstr "有 0x%2$x 標記的 %1$s 䏿‡‰è©²åœ¨å¿«å–樹當ä¸" + +#: cache-tree.c +#, c-format +msgid "bad subtree '%.*s'" +msgstr "「%.*sã€å樹æå£ž" + +#: cache-tree.c +#, c-format +msgid "cache-tree for path %.*s does not match. Expected %s got %s" +msgstr "%.*s è·¯å¾‘çš„å¿«å–æ¨¹ä¸ç¬¦ã€‚é æœŸæ˜¯ %s,å»å¾—到 %s" + #: chunk-format.c msgid "terminating chunk id appears earlier than expected" msgstr "終æ¢å€å¡Š ID æ¯”é æœŸé‚„早出ç¾" @@ -18339,7 +18454,7 @@ msgstr "æ£åœ¨é©—è‰æäº¤åœ–ä¸çš„æäº¤" #: commit-reach.c sequencer.c #, c-format msgid "could not parse commit %s" -msgstr "ä¸èƒ½è§£æžæäº¤ %s" +msgstr "ç„¡æ³•è§£æžæäº¤ %s" #: commit.c #, c-format @@ -18355,7 +18470,7 @@ msgid "" "to convert the grafts into replace refs.\n" "\n" "Turn this message off by running\n" -"\"git config advice.graftFileDeprecated false\"" +"\"git config set advice.graftFileDeprecated false\"" msgstr "" "å° <GIT_DIR>/info/grafts 的支æ´å·²æ£„用,並將在\n" "未來的 Git 版本ä¸è¢«ç§»é™¤ã€‚\n" @@ -18363,8 +18478,8 @@ msgstr "" "請使用「git replace --convert-graft-fileã€å°‡\n" "grafts 轉æ›ç‚ºå–代引用。\n" "\n" -"è¨å®šã€Œgit config advice.graftFileDeprecated falseã€\n" -"å¯ä»¥å°‡æœ¬è¨Šæ¯é—œé–‰" +"è¨å®šã€Œgit config set advice.graftFileDeprecated falseã€\n" +"å¯ä»¥é—œé–‰æ¤è¨Šæ¯" #: commit.c #, c-format @@ -18672,7 +18787,7 @@ msgstr "" #: config.c #, c-format msgid "could not expand include path '%s'" -msgstr "無法展開包å«è·¯å¾‘ '%s'" +msgstr "無法展開包å«è·¯å¾‘「%sã€" #: config.c msgid "relative config includes must come from files" @@ -18971,7 +19086,7 @@ msgstr "ä¸å…許多列備註:「%sã€" #: config.c #, c-format msgid "could not lock config file %s" -msgstr "ä¸èƒ½éŽ–å®šè¨å®šæª”案 %s" +msgstr "無法鎖定組態檔案 %s" #: config.c #, c-format @@ -19001,12 +19116,12 @@ msgstr "å° %s å‘¼å« chmod 失敗" #: config.c #, c-format msgid "could not write config file %s" -msgstr "ä¸èƒ½å¯«å…¥è¨å®šæª”案 %s" +msgstr "無法寫入組態檔案 %s" #: config.c #, c-format msgid "could not set '%s' to '%s'" -msgstr "ä¸èƒ½è¨å®š '%s' 為 '%s'" +msgstr "無法將「%sã€è¨ç‚ºã€Œ%sã€" #: config.c #, c-format @@ -19205,7 +19320,7 @@ msgstr "無法 fork" #: connected.c msgid "Could not run 'git rev-list'" -msgstr "ä¸èƒ½åŸ·è¡Œ 'git rev-list'" +msgstr "無法執行「git rev-listã€" #: connected.c msgid "failed write to rev-list" @@ -19362,6 +19477,21 @@ msgstr "URL 沒有 Scheme:%s" msgid "credential url cannot be parsed: %s" msgstr "ç„¡æ³•è§£æžæ†‘è‰ URL:%s" +#: daemon.c +#, c-format +msgid "invalid timeout '%s', expecting a non-negative integer" +msgstr "無效的 timeout「%sã€ï¼Œé 期為éžè² 整數" + +#: daemon.c +#, c-format +msgid "invalid init-timeout '%s', expecting a non-negative integer" +msgstr "無效的 init-timeout「%sã€ï¼Œæ‡‰ç‚ºéžè² 整數" + +#: daemon.c +#, c-format +msgid "invalid max-connections '%s', expecting an integer" +msgstr "無效的 max-connections「%sã€ï¼Œæ‡‰ç‚ºæ•´æ•¸" + #: date.c msgid "in the future" msgstr "在將來" @@ -19458,7 +19588,7 @@ msgstr "無法å°å˜ä¸å˜åœ¨çš„路徑「%sã€" #: diagnose.c dir.c #, c-format msgid "could not open directory '%s'" -msgstr "ä¸èƒ½é–‹å•Ÿç›®éŒ„ '%s'" +msgstr "無法開啟目錄「%sã€" #: diagnose.c #, c-format @@ -20133,12 +20263,12 @@ msgstr "è·¯å¾‘è¦æ ¼ '%s' 未符åˆä»»ä½• git 已知檔案" #: dir.c #, c-format msgid "unrecognized pattern: '%s'" -msgstr "無法è˜åˆ¥æ¨£å¼ï¼šã€Œ%sã€" +msgstr "ä¸èªè˜æ¨£å¼ï¼šã€Œ%sã€" #: dir.c #, c-format msgid "unrecognized negative pattern: '%s'" -msgstr "無法è˜åˆ¥å呿¨¡å¼ï¼šã€Œ%sã€" +msgstr "ä¸èªè˜å呿¨¡å¼ï¼šã€Œ%sã€" #: dir.c #, c-format @@ -20178,12 +20308,12 @@ msgstr "版本庫 %s ä¸çš„索引檔案æå£ž" #: dir.c #, c-format msgid "could not create directories for %s" -msgstr "ä¸èƒ½ç‚º %s 建立目錄" +msgstr "無法建立 %s 的目錄" #: dir.c #, c-format msgid "could not migrate git directory from '%s' to '%s'" -msgstr "ä¸èƒ½å¾ž '%s' é·ç§» git 目錄到 '%s'" +msgstr "無法從「%sã€é·ç§» git 目錄到「%sã€" #: editor.c #, c-format @@ -20193,12 +20323,12 @@ msgstr "æç¤ºï¼šç‰å¾…您的編輯器關閉檔案...%c" #: editor.c sequencer.c wrapper.c #, c-format msgid "could not write to '%s'" -msgstr "ä¸èƒ½å¯«å…¥ '%s'" +msgstr "無法寫入「%sã€" #: editor.c #, c-format msgid "could not edit '%s'" -msgstr "無法編輯 '%s'" +msgstr "無法編輯「%sã€" #: entry.c msgid "Filtering content" @@ -20207,7 +20337,7 @@ msgstr "éŽæ¿¾å…§å®¹" #: entry.c #, c-format msgid "could not stat file '%s'" -msgstr "ä¸èƒ½å°æª”案 '%s' å‘¼å« stat" +msgstr "無法 stat 檔案「%sã€" #: environment.c #, c-format @@ -20220,6 +20350,23 @@ msgid "too many args to run %s" msgstr "執行 %s çš„åƒæ•¸å¤ªå¤š" #: fetch-pack.c +#, c-format +msgid "" +"You are attempting to fetch %s, which is in the commit graph file but not in " +"the object database.\n" +"This is probably due to repo corruption.\n" +"If you are attempting to repair this repo corruption by refetching the " +"missing object, use 'git fetch --refetch' with the missing object." +msgstr "" +"ä½ æ£åœ¨å˜—試å–å¾— %s。這個物件在æäº¤åœ–檔案ä¸ï¼Œ\n" +"但ä¸åœ¨ç‰©ä»¶è³‡æ–™åº«ä¸ã€‚\n" +"\n" +"這å¯èƒ½æ˜¯ç”±æ–¼å„²å˜åº«æå£žæ‰€è‡´ã€‚\n" +"\n" +"å¦‚æžœä½ æƒ³é€éŽé‡æ–°æ“·å–éºå¤±çš„物件來修復儲å˜åº«æå£žï¼Œ\n" +"請使用「git fetch --refetchã€ä¸¦æŒ‡å®šéºå¤±çš„物件。" + +#: fetch-pack.c msgid "git fetch-pack: expected shallow list" msgstr "git fetch-pack:應為 shallow 列表" @@ -20647,7 +20794,7 @@ msgstr "執行指令 '%s' 失敗:%s\n" #: gpg-interface.c msgid "could not create temporary file" -msgstr "ä¸èƒ½å»ºç«‹æš«å˜æª”" +msgstr "ç„¡æ³•å»ºç«‹æš«å˜æª”" #: gpg-interface.c #, c-format @@ -20925,10 +21072,10 @@ msgstr[0] "" #, c-format msgid "" "The '%s' hook was ignored because it's not set as executable.\n" -"You can disable this warning with `git config advice.ignoredHook false`." +"You can disable this warning with `git config set advice.ignoredHook false`." msgstr "" -"å› ç‚ºæ²’æœ‰å°‡æŽ›é‰¤ '%s' è¨å®šç‚ºå¯åŸ·è¡Œï¼ŒæŽ›é‰¤è¢«å¿½ç•¥ã€‚您å¯ä»¥é€éŽ\n" -"è¨å®š `git config advice.ignoredHook false` 來關閉這æ¢è¦å‘Šã€‚" +"å› ç‚ºæ²’æœ‰å°‡æŽ›é‰¤ã€Œ%sã€è¨å®šç‚ºå¯åŸ·è¡Œï¼Œå› æ¤å¿½ç•¥é€™å€‹æŽ›é‰¤ã€‚\n" +"您å¯ä»¥é€éŽè¨å®šã€Œgit config set advice.ignoredHook falseã€ä¾†é—œé–‰é€™å‰‡è¦å‘Šã€‚" #: http-fetch.c msgid "not a git repository" @@ -20949,18 +21096,10 @@ msgid "Delegation control is not supported with cURL < 7.22.0" msgstr "䏿”¯æ´å§”è¨—æŽ§åˆ¶ï¼Œå› ç‚º cURL < 7.22.0" #: http.c -msgid "Public key pinning not supported with cURL < 7.39.0" -msgstr "䏿”¯æ´å…¬é‘°æª”æ¡ˆéŽ–å®šï¼Œå› ç‚º cURL < 7.39.0" - -#: http.c msgid "Unknown value for http.proactiveauth" msgstr "http.proactiveauth 的值未知" #: http.c -msgid "CURLSSLOPT_NO_REVOKE not supported with cURL < 7.44.0" -msgstr "䏿”¯æ´ CURLSSLOPT_NO_REVOKEï¼Œå› ç‚º cURL < 7.44.0" - -#: http.c #, c-format msgid "Unsupported SSL backend '%s'. Supported SSL backends:" msgstr "䏿”¯æ´çš„ SSL 後端 '%s'。支æ´çš„ SSL 後端:" @@ -20968,12 +21107,12 @@ msgstr "䏿”¯æ´çš„ SSL 後端 '%s'。支æ´çš„ SSL 後端:" #: http.c #, c-format msgid "Could not set SSL backend to '%s': cURL was built without SSL backends" -msgstr "無法將 SSL 後端è¨å®šç‚º '%s':組建 cURL æ™‚æœªåŠ å…¥ SSL 後端" +msgstr "無法將 SSL 後端è¨å®šç‚ºã€Œ%sã€ï¼šçµ„建 cURL æ™‚æœªåŠ å…¥ SSL 後端" #: http.c #, c-format msgid "Could not set SSL backend to '%s': already set" -msgstr "無法將 SSL 後端è¨å®šç‚º '%s':已經è¨å®š" +msgstr "無法將 SSL 後端è¨å®šç‚ºã€Œ%sã€ï¼šå·²ç¶“è¨å®š" #: http.c msgid "refusing to read cookies from http.cookiefile '-'" @@ -21089,7 +21228,7 @@ msgstr "ä¸èƒ½æ··ç”¨å¤šç¨®éŽæ¿¾è¦æ ¼" #: list-objects-filter-options.c msgid "unable to upgrade repository format to support partial clone" -msgstr "無法å‡ç´šç‰ˆæœ¬åº«æ ¼å¼ï¼Œä»¥è‡´ä¸æ”¯æ´éƒ¨åˆ†è¤‡è£½" +msgstr "無法å‡ç´šç‰ˆæœ¬åº«æ ¼å¼ï¼Œä»¥æ”¯æ´éƒ¨åˆ†è¤‡è£½" #: list-objects-filter-options.h msgid "args" @@ -21180,6 +21319,11 @@ msgstr "嵿¸¬åˆ°ç”±å¯åˆ—å°å—å…ƒ (quoted) 所組æˆçš„ CRLF" msgid "unable to format message: %s" msgstr "ç„¡æ³•æ ¼å¼åŒ–訊æ¯ï¼š%s" +#: merge-ll.c +#, c-format +msgid "invalid marker-size '%s', expecting an integer" +msgstr "無效的 marker-size「%sã€ï¼Œæ‡‰ç‚ºæ•´æ•¸" + #: merge-ort.c merge-recursive.c #, c-format msgid "Failed to merge submodule %s (not checked out)" @@ -21751,7 +21895,7 @@ msgstr "åˆä½µæœªè¿”回æäº¤" #: merge-recursive.c #, c-format msgid "Could not parse object '%s'" -msgstr "ä¸èƒ½è§£æžç‰©ä»¶ '%s'" +msgstr "無法解æžç‰©ä»¶ã€Œ%sã€" #: merge.c msgid "failed to read the cache" @@ -21871,7 +22015,7 @@ msgstr "無法將一個增é‡å¤šå°è£ç´¢å¼•的套件è¨ç‚ºéŽæœŸ" #: midx-write.c msgid "Counting referenced objects" -msgstr "æ£åœ¨è¨ˆç®—引用物件" +msgstr "æ£åœ¨è¨ˆç®—引用物件數é‡" #: midx-write.c msgid "Finding and deleting unreferenced packfiles" @@ -21883,11 +22027,11 @@ msgstr "ç„¡æ³•é‡æ–°å°è£å¢žé‡çš„多å°è£ç´¢å¼•" #: midx-write.c msgid "could not start pack-objects" -msgstr "ä¸èƒ½é–‹å§‹ pack-objects" +msgstr "無法啟動 pack-objects" #: midx-write.c msgid "could not finish pack-objects" -msgstr "ä¸èƒ½çµæŸ pack-objects" +msgstr "ç„¡æ³•çµæŸ pack-objects" #: midx.c msgid "multi-pack-index OID fanout is of the wrong size" @@ -22489,17 +22633,17 @@ msgid "" "\n" "where \"$br\" is somehow empty and a 40-hex ref is created. Please\n" "examine these refs and maybe delete them. Turn this message off by\n" -"running \"git config advice.objectNameWarning false\"" +"running \"git config set advice.objectNameWarning false\"" msgstr "" -"Git é€šå¸¸ä¸æœƒå»ºç«‹ä»¥ 40 個åå…進ä½å—å…ƒçµå°¾çš„引用,\n" -"å› ç‚ºç•¶æ‚¨åªæä¾› 40 個åå…進ä½å—元時,其將被忽略。\n" -"這些引用å¯èƒ½è¢«æ„外建立。例如:\n" +"Git é€šå¸¸ä¸æœƒå»ºç«‹ä»¥ 40 個åå…進ä½å—å…ƒçµå°¾çš„åƒç…§ï¼Œ\n" +"å› ç‚ºåœ¨æŒ‡å®š 40 個åå…進ä½å—元時會被忽略。\n" +"這些åƒç…§å¯èƒ½æ˜¯æ„外建立的。例如,\n" "\n" " git switch -c $br $(git rev-parse ...)\n" "\n" -"當「$brã€å› 為æŸäº›åŽŸå› ç©ºç™½æ™‚ï¼Œæœƒå»ºç«‹å‡º 40 ä½åå…進ä½çš„引用。\n" -"請檢查這些引用,並視需è¦åˆªé™¤ã€‚執行\n" -"「git config advice.objectNameWarning falseã€å‘½ä»¤ä»¥é—œé–‰æœ¬è¨Šæ¯é€šçŸ¥" +"å…¶ä¸ã€Œ$brã€ä¸çŸ¥ä½•故為空白,導致建立了一個 40 個\n" +"åå…進ä½å—元的åƒç…§ã€‚請檢查這些åƒç…§ï¼Œå¿…è¦æ™‚刪除它們。\n" +"è‹¥è¦é—œé–‰æ¤è¨Šæ¯ï¼Œè«‹åŸ·è¡Œã€Œgit config set advice.objectNameWarning falseã€" #: object-name.c #, c-format @@ -22693,15 +22837,6 @@ 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" -msgstr "å好的å°åŒ… (%s) 無效" - #: pack-bitmap.c msgid "corrupt bitmap lookup table: triplet position out of index" msgstr "ä½åœ–查詢表æå£žï¼šä¸‰å…ƒçµ„ä½ç½®è¶…出索引" @@ -22774,7 +22909,7 @@ msgstr "å½åˆä½µç´¢å¼•超出範åœï¼ˆ%<PRIu32> >= %<PRIuMAX>)" #: pack-bitmap.c #, c-format msgid "could not find '%s' in pack '%s' at offset %<PRIuMAX>" -msgstr "在「%2$sã€å°åŒ…,ä½ç§» %3$<PRIuMAX> 的地方找ä¸åˆ°ã€Œ%1$sã€" +msgstr "無法在「%2$sã€å°åŒ…,ä½ç§» %3$<PRIuMAX> 的地方找到「%1$sã€" #: pack-bitmap.c #, c-format @@ -23071,7 +23206,7 @@ msgstr "è§£æž %s 失敗" #: path.c #, c-format msgid "Could not make %s writable by group" -msgstr "ä¸èƒ½è¨å®š %s 為組å¯å¯«" +msgstr "無法è¨å®š %s 為群組å¯å¯«" #: pathspec.c msgid "Escape character '\\' not allowed as last character in attr value" @@ -23325,16 +23460,16 @@ msgstr "ç„¡æ³•è®€å–æäº¤ %s 的延伸å½åˆä½µè¡¨" #: range-diff.c msgid "could not start `log`" -msgstr "ä¸èƒ½å•Ÿå‹• `log`" +msgstr "無法啟動「logã€" #: range-diff.c msgid "could not read `log` output" -msgstr "ä¸èƒ½è®€å– `log` 的輸出" +msgstr "無法讀å–「logã€çš„輸出" #: range-diff.c sequencer.c #, c-format msgid "could not parse commit '%s'" -msgstr "ä¸èƒ½è§£æžæäº¤ '%s'" +msgstr "ç„¡æ³•è§£æžæäº¤ã€Œ%sã€" #: range-diff.c #, c-format @@ -23346,7 +23481,7 @@ msgstr "無法解æžç¬¬ä¸€è¡Œã€Œlogã€è¼¸å‡ºï¼šé–‹é 䏿˜¯ã€Œcommitã€ï¼šã€Œ%sã #: range-diff.c #, c-format msgid "could not parse git header '%.*s'" -msgstr "ç„¡æ³•è§£æž git é '%.*s'" +msgstr "ç„¡æ³•è§£æž git 標é 「%.*sã€" #: range-diff.c msgid "failed to generate diff" @@ -23355,7 +23490,7 @@ msgstr "ç”Ÿæˆ diff 失敗" #: range-diff.c #, c-format msgid "could not parse log for '%s'" -msgstr "ä¸èƒ½è§£æž '%s' 的日誌" +msgstr "無法解æžã€Œ%sã€çš„æ—¥èªŒ" #: reachable.c #, c-format @@ -23509,7 +23644,7 @@ msgstr "ç„¡æ³•åŠ å…¥ load_index_extensions 執行緒:%s" #: read-cache.c #, c-format msgid "could not freshen shared index '%s'" -msgstr "ç„¡æ³•é‡æ–°æ•´ç†å…±äº«ç´¢å¼• '%s'" +msgstr "無法更新共享索引「%sã€" #: read-cache.c #, c-format @@ -23567,7 +23702,7 @@ msgstr "" #, c-format msgid "" "unrecognized setting %s for option rebase.missingCommitsCheck. Ignoring." -msgstr "é¸é … rebase.missingCommitsCheck 的值 %s 無法è˜åˆ¥ã€‚已忽略。" +msgstr "é¸é … rebase.missingCommitsCheck 的值 %s ä¸èªè˜ã€‚已忽略。" #: rebase-interactive.c msgid "" @@ -23669,7 +23804,7 @@ msgstr "" #: rebase-interactive.c #, c-format msgid "could not write '%s'." -msgstr "ä¸èƒ½å¯«å…¥ '%s'。" +msgstr "無法寫入「%sã€ã€‚" #: rebase-interactive.c #, c-format @@ -23728,7 +23863,7 @@ msgstr "%%(%.*s) ä¸å–引數" #: ref-filter.c #, c-format msgid "unrecognized %%(%.*s) argument: %s" -msgstr "無法è˜åˆ¥çš„ %%(%.*s) 引數:%s" +msgstr "ä¸èªè˜çš„ %%(%.*s) 引數:%s" #: ref-filter.c #, c-format @@ -23738,7 +23873,7 @@ msgstr "æœŸæœ›çš„æ ¼å¼ï¼š%%(color:<é¡è‰²>)" #: ref-filter.c #, c-format msgid "unrecognized color: %%(color:%s)" -msgstr "無法è˜åˆ¥çš„é¡è‰²ï¼š%%(color:%s)" +msgstr "ä¸èªè˜çš„é¡è‰²ï¼š%%(color:%s)" #: ref-filter.c #, c-format @@ -23798,17 +23933,17 @@ msgstr "æœŸæœ›çš„æ ¼å¼ï¼š%%(align:<寬度>,<ä½ç½®>)" #: ref-filter.c #, c-format msgid "unrecognized position:%s" -msgstr "無法è˜åˆ¥çš„ä½ç½®ï¼š%s" +msgstr "ä¸èªè˜çš„ä½ç½®ï¼š%s" #: ref-filter.c #, c-format msgid "unrecognized width:%s" -msgstr "無法è˜åˆ¥çš„寬度:%s" +msgstr "ä¸èªè˜çš„寬度:%s" #: ref-filter.c #, c-format msgid "unrecognized %%(%s) argument: %s" -msgstr "無法è˜åˆ¥çš„ %%(%s) åƒæ•¸ï¼š%s" +msgstr "ä¸èªè˜çš„ %%(%s) åƒæ•¸ï¼š%s" #: ref-filter.c #, c-format @@ -23879,7 +24014,7 @@ msgstr "本命令拒絕 atom %%(%.*s)" #: ref-filter.c #, c-format msgid "--format=%.*s cannot be used with --python, --shell, --tcl" -msgstr "--format=%.*s ä¸èƒ½å’Œ --pythonã€--shellã€--tcl 一起使用" +msgstr "--format=%.*s 無法和 --pythonã€--shellã€--tcl 一起使用" #: ref-filter.c msgid "failed to run 'describe'" @@ -24037,8 +24172,19 @@ msgid "log for %s is empty" msgstr "%s 的日誌為空" #: refs.c -msgid "refusing to force and skip creation of reflog" -msgstr "拒絕強制並略éŽå»ºç«‹å¼•用日誌" +#, c-format +msgid "refusing to update reflog for pseudoref '%s'" +msgstr "拒絕更新å½å¼•用「%s〠的 reflog" + +#: refs.c +#, c-format +msgid "refusing to update pseudoref '%s'" +msgstr "拒絕更新å½å¼•用「%sã€" + +#: refs.c +#, c-format +msgid "refusing to update reflog with bad name '%s'" +msgstr "拒絕更新有錯誤å稱「%sã€çš„ reflog" #: refs.c #, c-format @@ -24046,9 +24192,8 @@ msgid "refusing to update ref with bad name '%s'" msgstr "拒絕更新有錯誤å稱 '%s' 的引用" #: refs.c -#, c-format -msgid "refusing to update pseudoref '%s'" -msgstr "拒絕更新å½å¼•用「%sã€" +msgid "refusing to force and skip creation of reflog" +msgstr "拒絕強制並略éŽå»ºç«‹å¼•用日誌" #: refs.c #, c-format @@ -24111,6 +24256,11 @@ msgstr "無法鎖定引用「%sã€ï¼šé 期是指å‘「%sã€çš„ç¬¦è™Ÿå¼•ç”¨ï¼Œä½ #: refs/files-backend.c #, c-format +msgid "cannot read ref file '%s'" +msgstr "無法寫入åƒç…§æª”案「%sã€" + +#: refs/files-backend.c +#, c-format msgid "cannot open directory %s" msgstr "無法開啟 %s 目錄" @@ -24367,8 +24517,13 @@ msgstr "æä¾›äº†ä¸€å€‹ä»¥ä¸Šçš„ uploadpack,使用第一個" #: remote.c #, c-format +msgid "unrecognized followRemoteHEAD value '%s' ignored" +msgstr "已經忽略ä¸èªè˜çš„「%sã€æ•¸å€¼" + +#: remote.c +#, c-format msgid "unrecognized value transfer.credentialsInUrl: '%s'" -msgstr "數值 transfer.credentialsInUrl 無法è˜åˆ¥ï¼šã€Œ%sã€" +msgstr "數值 transfer.credentialsInUrl ä¸èªè˜ï¼šã€Œ%sã€" #: remote.c #, c-format @@ -24657,7 +24812,7 @@ msgstr "寫入 '%s' (%s) 時發生錯誤" #: rerere.c #, c-format msgid "could not parse conflict hunks in '%s'" -msgstr "ä¸èƒ½è§£æž '%s' ä¸çš„è¡çªå€å¡Š" +msgstr "無法解æžã€Œ%sã€ä¸çš„è¡çªå€å¡Š" #: rerere.c #, c-format @@ -24724,7 +24879,7 @@ msgstr "如果å¯èƒ½ï¼Œé‡ç”¨è¡çªè§£æ±ºæ›´æ–°ç´¢å¼•" #: reset.c msgid "could not determine HEAD revision" -msgstr "ä¸èƒ½ç¢ºå®š HEAD 版本" +msgstr "無法確定 HEAD 修訂版" #: reset.c sequencer.c #, c-format @@ -25110,7 +25265,7 @@ msgstr "無效的æäº¤èªªæ˜Žæ¸…ç†æ¨¡å¼ '%s'" #: sequencer.c #, c-format msgid "could not delete '%s'" -msgstr "無法刪除 '%s'" +msgstr "無法刪除「%sã€" #: sequencer.c msgid "revert" @@ -25185,12 +25340,12 @@ msgstr "" #: sequencer.c #, c-format msgid "could not lock '%s'" -msgstr "ä¸èƒ½éŽ–å®š '%s'" +msgstr "無法鎖定「%sã€" #: sequencer.c #, c-format msgid "could not write eol to '%s'" -msgstr "ä¸èƒ½å°‡æ›è¡Œç¬¦è™Ÿå¯«å…¥ '%s'" +msgstr "無法將æ›è¡Œç¬¦è™Ÿå¯«å…¥ã€Œ%sã€" #: sequencer.c #, c-format @@ -25220,7 +25375,7 @@ msgstr "ä¸èƒ½æ›´æ–°å¿«å–樹" #: sequencer.c msgid "could not resolve HEAD commit" -msgstr "ä¸èƒ½è§£æž HEAD æäº¤" +msgstr "ç„¡æ³•è§£æž HEAD æäº¤" #: sequencer.c #, c-format @@ -25347,7 +25502,7 @@ msgstr "無法找到新建立的æäº¤" #: sequencer.c msgid "could not parse newly created commit" -msgstr "ä¸èƒ½è§£æžæ–°å»ºç«‹çš„æäº¤" +msgstr "ç„¡æ³•è§£æžæ–°å»ºç«‹çš„æäº¤" #: sequencer.c msgid "unable to resolve HEAD after creating commit" @@ -25364,7 +25519,7 @@ msgstr " (æ ¹æäº¤)" #: sequencer.c msgid "could not parse HEAD" -msgstr "ä¸èƒ½è§£æž HEAD" +msgstr "ç„¡æ³•è§£æž HEAD" #: sequencer.c #, c-format @@ -25392,12 +25547,12 @@ msgstr "作者資訊æå£žï¼šç¼ºå°‘日期資訊" #: sequencer.c #, c-format msgid "could not update %s" -msgstr "ä¸èƒ½æ›´æ–° %s" +msgstr "無法更新 %s" #: sequencer.c #, c-format msgid "could not parse parent commit %s" -msgstr "ä¸èƒ½è§£æžçˆ¶æäº¤ %s" +msgstr "無法解æžçˆ¶æäº¤ %s" #: sequencer.c #, c-format @@ -25438,16 +25593,16 @@ msgstr "需è¦ä¸€å€‹ HEAD 來修復" #: sequencer.c msgid "could not read HEAD" -msgstr "ä¸èƒ½è®€å– HEAD" +msgstr "ç„¡æ³•è®€å– HEAD" #: sequencer.c msgid "could not read HEAD's commit message" -msgstr "ä¸èƒ½è®€å– HEAD çš„æäº¤èªªæ˜Ž" +msgstr "ç„¡æ³•è®€å– HEAD çš„æäº¤èªªæ˜Ž" #: sequencer.c #, c-format msgid "could not read commit message of %s" -msgstr "ä¸èƒ½è®€å– %s çš„æäº¤èªªæ˜Ž" +msgstr "ç„¡æ³•è®€å– %s çš„æäº¤èªªæ˜Ž" #: sequencer.c msgid "your index file is unmerged." @@ -25482,12 +25637,12 @@ msgstr "%s:ä¸èƒ½è§£æžçˆ¶æäº¤ %s" #: sequencer.c #, c-format msgid "could not revert %s... %s" -msgstr "ä¸èƒ½é‚„原 %s... %s" +msgstr "無法還原 %s... %s" #: sequencer.c #, c-format msgid "could not apply %s... %s" -msgstr "ä¸èƒ½å¥—用 %s... %s" +msgstr "無法套用 %s... %s" #: sequencer.c #, c-format @@ -25580,7 +25735,7 @@ msgstr "缺少 %s çš„åƒæ•¸" #: sequencer.c #, c-format msgid "could not parse '%s'" -msgstr "ç„¡æ³•è§£æž '%s'" +msgstr "無法解æžã€Œ%sã€" #: sequencer.c #, c-format @@ -25655,7 +25810,7 @@ msgstr "嘗試 \"git cherry-pick (--continue | %s--abort | --quit)\"" #: sequencer.c #, c-format msgid "could not create sequencer directory '%s'" -msgstr "ä¸èƒ½å»ºç«‹åºåˆ—目錄 '%s'" +msgstr "無法建立åºåˆ—目錄「%sã€" #: sequencer.c msgid "no cherry-pick or revert in progress" @@ -25742,12 +25897,12 @@ msgstr "" #: sequencer.c #, c-format msgid "Could not apply %s... %.*s" -msgstr "ä¸èƒ½å¥—用 %s... %.*s" +msgstr "無法套用 %s... %.*s" #: sequencer.c #, c-format msgid "Could not merge %.*s" -msgstr "ä¸èƒ½åˆä½µ %.*s" +msgstr "無法åˆä½µ %.*s" #: sequencer.c #, c-format @@ -25799,7 +25954,7 @@ msgstr "éžæ³•的標籤å稱:'%.*s'" #: sequencer.c #, c-format msgid "could not resolve '%s'" -msgstr "ç„¡æ³•è§£æž '%s'" +msgstr "無法解æžã€Œ%sã€" #: sequencer.c msgid "writing fake root commit" @@ -25830,12 +25985,12 @@ msgstr "ç« éšåˆä¸¦ä¸èƒ½åœ¨ä¸€å€‹æ–°çš„æ ¹æäº¤ä¸ŠåŸ·è¡Œ" #: sequencer.c #, c-format msgid "could not get commit message of '%s'" -msgstr "ä¸èƒ½å–å¾— '%s' çš„æäº¤èªªæ˜Ž" +msgstr "無法å–得「%sã€çš„æäº¤èªªæ˜Ž" #: sequencer.c #, c-format msgid "could not even attempt to merge '%.*s'" -msgstr "甚至ä¸èƒ½å˜—試åˆä½µ '%.*s'" +msgstr "甚至無法嘗試åˆä½µã€Œ%.*sã€" #: sequencer.c msgid "merge: Unable to write new index file" @@ -25877,7 +26032,7 @@ msgstr "æ„外的 stash 回應:'%s'" #: sequencer.c #, c-format msgid "Could not create directory for '%s'" -msgstr "ä¸èƒ½ç‚º '%s' 建立目錄" +msgstr "無法建立「%sã€çš„目錄" #: sequencer.c #, c-format @@ -25923,7 +26078,7 @@ msgstr "autostash 引用是符號引用" #: sequencer.c msgid "could not detach HEAD" -msgstr "ä¸èƒ½åˆ†é›¢é–‹é 指標" +msgstr "ç„¡æ³•åˆ†é›¢é–‹é æŒ‡æ¨™" #: sequencer.c #, c-format @@ -25950,7 +26105,7 @@ msgstr "" "無法執行待辦指令\n" "\n" " %.*s\n" -"å·²è¢«é‡æ–°å®‰æŽ’,在繼續之å‰ç·¨è¼¯æŒ‡ä»¤ï¼Œè«‹å…ˆç·¨è¼¯å¾…辦列表:\n" +"å·²ç¶“é‡æ–°å®‰æŽ’。若è¦åœ¨ç¹¼çºŒä¹‹å‰ç·¨è¼¯æŒ‡ä»¤ï¼Œè«‹å…ˆç·¨è¼¯å¾…辦列表:\n" "\n" " git rebase --edit-todo\n" " git rebase --continue\n" @@ -25972,16 +26127,16 @@ msgstr "未知指令 %d" #: sequencer.c msgid "could not read orig-head" -msgstr "ä¸èƒ½è®€å– orig-head" +msgstr "ç„¡æ³•è®€å– orig-head" #: sequencer.c msgid "could not read 'onto'" -msgstr "ä¸èƒ½è®€å– 'onto'" +msgstr "無法讀å–「ontoã€" #: sequencer.c #, c-format msgid "could not update HEAD to %s" -msgstr "ä¸èƒ½æ›´æ–° HEAD 為 %s" +msgstr "無法將 HEAD 更新到 %s" #: sequencer.c #, c-format @@ -26018,15 +26173,15 @@ msgstr "" #: sequencer.c #, c-format msgid "could not write file: '%s'" -msgstr "ä¸èƒ½å¯«å…¥æª”案:'%s'" +msgstr "無法寫入檔案:「%sã€" #: sequencer.c msgid "could not remove CHERRY_PICK_HEAD" -msgstr "ä¸èƒ½åˆªé™¤ CHERRY_PICK_HEAD" +msgstr "無法刪除 CHERRY_PICK_HEAD" #: sequencer.c msgid "could not commit staged changes." -msgstr "ä¸èƒ½æäº¤æš«å˜çš„修改。" +msgstr "無法æäº¤æš«å˜çš„修改。" #: sequencer.c #, c-format @@ -26446,7 +26601,7 @@ msgstr "忽略å¯èƒ½è¢«è§£æžç‚ºå‘½ä»¤åˆ—é¸é …çš„ '%s':%s" #: submodule-config.c #, c-format msgid "Could not update .gitmodules entry %s" -msgstr "ä¸èƒ½æ›´æ–° .gitmodules æ¢ç›® %s" +msgstr "無法更新 .gitmodules æ¢ç›® %s" #: submodule.c msgid "Cannot change unmerged .gitmodules, resolve merge conflicts first" @@ -26498,7 +26653,7 @@ msgstr "忍¡çµ„æ¢ç›® '%s'(%s)是一個 %sï¼Œä¸æ˜¯ä¸€å€‹æäº¤" msgid "" "Could not run 'git rev-list <commits> --not --remotes -n 1' command in " "submodule %s" -msgstr "無法在 %s 忍¡çµ„執行 'git rev-list <æäº¤> --not --remotes -n 1' 命令" +msgstr "無法在 %s 忍¡çµ„執行「git rev-list <æäº¤> --not --remotes -n 1ã€å‘½ä»¤" #: submodule.c #, c-format @@ -26552,7 +26707,7 @@ msgstr "無法將 '%s' è˜åˆ¥ç‚ºä¸€å€‹ git 版本庫" #: submodule.c #, c-format msgid "Could not run 'git status --porcelain=2' in submodule %s" -msgstr "無法在 %s 忍¡çµ„執行 'git status --porcelain=2'" +msgstr "無法在 %s 忍¡çµ„執行「git status --porcelain=2ã€" #: submodule.c #, c-format @@ -26562,17 +26717,17 @@ msgstr "%s 忍¡çµ„執行 'git status --porcelain=2' 失敗" #: submodule.c #, c-format msgid "could not start 'git status' in submodule '%s'" -msgstr "ç„¡æ³•åœ¨åæ¨¡çµ„ '%s' ä¸å•Ÿå‹• 'git status'" +msgstr "ç„¡æ³•åœ¨åæ¨¡çµ„「%sã€ä¸å•Ÿå‹•「git statusã€" #: submodule.c #, c-format msgid "could not run 'git status' in submodule '%s'" -msgstr "ç„¡æ³•åœ¨åæ¨¡çµ„ '%s' ä¸åŸ·è¡Œ 'git status'" +msgstr "ç„¡æ³•åœ¨åæ¨¡çµ„「%sã€ä¸åŸ·è¡Œã€Œgit statusã€" #: submodule.c #, c-format msgid "Could not unset core.worktree setting in submodule '%s'" -msgstr "ç„¡æ³•åœ¨åæ¨¡çµ„ '%s' ä¸å–消 core.worktree çš„è¨å®š" +msgstr "ç„¡æ³•åœ¨åæ¨¡çµ„「%sã€ä¸å–消 core.worktree çš„è¨å®š" #: submodule.c #, c-format @@ -26617,7 +26772,7 @@ msgstr "䏿”¯æ´å°æœ‰å¤šå€‹å·¥ä½œå€çš„忍¡çµ„ '%s' 執行 relocate_gitdir" #: submodule.c #, c-format msgid "could not lookup name for submodule '%s'" -msgstr "ä¸èƒ½æŸ¥è©¢å模組 '%s' çš„å稱" +msgstr "ç„¡æ³•æŸ¥è©¢åæ¨¡çµ„「%sã€çš„å稱" #: submodule.c #, c-format @@ -26678,6 +26833,10 @@ msgstr "æäº¤ %s 沒有標記為å¯ä»¥å–å¾—" msgid "too many commits marked reachable" msgstr "太多æäº¤æ¨™è¨˜ç‚ºå¯ä»¥å–å¾—" +#: t/helper/test-read-midx.c +msgid "could not determine MIDX preferred pack" +msgstr "無法確定 MIDX å好的å°è£" + #: t/helper/test-serve-v2.c msgid "test-tool serve-v2 [<options>]" msgstr "test-tool serve-v2 [<é¸é …>]" @@ -26833,7 +26992,7 @@ msgstr "%s 也鎖定了 %s" #: transport-helper.c msgid "couldn't run fast-import" -msgstr "ä¸èƒ½åŸ·è¡Œ fast-import" +msgstr "無法執行 fast-import" #: transport-helper.c msgid "error while running fast-import" @@ -27014,7 +27173,7 @@ msgstr "伺æœå™¨ä¸æ”¯æ´ã€Œç‰å¾…完æˆã€(wait-for-done) 功能" #: transport.c msgid "could not parse transport.color.* config" -msgstr "ä¸èƒ½è§£æž transport.color.* è¨å®š" +msgstr "ç„¡æ³•è§£æž transport.color.* 組態" #: transport.c msgid "support for protocol v2 not implemented yet" @@ -27453,6 +27612,10 @@ msgid ".git file incorrect" msgstr ".git æª”æ¡ˆä¸æ£ç¢º" #: worktree.c +msgid ".git file absolute/relative path mismatch" +msgstr ".git æª”æ¡ˆçš„çµ•å°æˆ–相å°è·¯å¾‘ä¸ä¸€è‡´" + +#: worktree.c msgid "not a valid path" msgstr "éžæœ‰æ•ˆè·¯å¾‘" @@ -27473,6 +27636,10 @@ msgid "gitdir unreadable" msgstr "ç„¡æ³•è®€å– gitdir" #: worktree.c +msgid "gitdir absolute/relative path mismatch" +msgstr "gitdir çš„çµ•å°æˆ–相å°è·¯å¾‘ä¸ä¸€è‡´" + +#: worktree.c msgid "gitdir incorrect" msgstr "䏿£ç¢ºçš„ gitdir" @@ -27516,10 +27683,18 @@ msgstr "ç„¡æ³•å–æ¶ˆåœ¨ã€Œ%2$sã€è¨å®šçš„ %1$s" msgid "failed to set extensions.worktreeConfig setting" msgstr "無法è¨å®š extensions.worktreeConfig è¨å®š" +#: worktree.c +msgid "unable to upgrade repository format to support relative worktrees" +msgstr "無法å‡ç´šç‰ˆæœ¬åº«æ ¼å¼ï¼Œä»¥æ”¯æ´ç›¸å°è·¯å¾‘工作å€" + +#: worktree.c +msgid "unable to set extensions.relativeWorktrees setting" +msgstr "無法è¨å®š extensions.relativeWorktrees è¨å®š" + #: wrapper.c #, c-format msgid "could not setenv '%s'" -msgstr "無法 setenv '%s'" +msgstr "無法 setenv「%sã€" #: wrapper.c #, c-format @@ -27529,7 +27704,7 @@ msgstr "ä¸èƒ½å»ºç«‹ '%s'" #: wrapper.c #, c-format msgid "could not open '%s' for reading and writing" -msgstr "無法開啟 '%s' 進行讀寫" +msgstr "無法開啟「%sã€é€²è¡Œè®€å¯«" #: wrapper.c #, c-format @@ -28582,6 +28757,24 @@ msgstr "ç•¥éŽ %s å«å‚™ä»½å¾Œç¶´ '%s'。\n" msgid "Do you really want to send %s? [y|N]: " msgstr "您真的è¦å‚³é€ %s?[y|N]: " +#, c-format +#~ msgid "preferred pack (%s) is invalid" +#~ msgstr "å好的å°åŒ… (%s) 無效" + +#, c-format +#~ msgid "" +#~ "more than %i tags found; listed %i most recent\n" +#~ "gave up search at %s\n" +#~ msgstr "" +#~ "發ç¾å¤šæ–¼ %i 個標籤,列出最近的 %i 個\n" +#~ "在 %s 放棄æœå°‹\n" + +#~ msgid "Public key pinning not supported with cURL < 7.39.0" +#~ msgstr "䏿”¯æ´å…¬é‘°æª”æ¡ˆéŽ–å®šï¼Œå› ç‚º cURL < 7.39.0" + +#~ msgid "CURLSSLOPT_NO_REVOKE not supported with cURL < 7.44.0" +#~ msgstr "䏿”¯æ´ CURLSSLOPT_NO_REVOKEï¼Œå› ç‚º cURL < 7.44.0" + #~ msgid "revision walk setup failed\n" #~ msgstr "ä¿®è¨‚ç‰ˆéæ·è¨å®šå¤±æ•—\n" diff --git a/preload-index.c b/preload-index.c index 7926eb09a6..ab94d6f399 100644 --- a/preload-index.c +++ b/preload-index.c @@ -3,6 +3,7 @@ */ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "pathspec.h" @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "config.h" diff --git a/prio-queue.c b/prio-queue.c index 450775a374..ec33ac27db 100644 --- a/prio-queue.c +++ b/prio-queue.c @@ -1,26 +1,29 @@ #include "git-compat-util.h" #include "prio-queue.h" -static inline int compare(struct prio_queue *queue, int i, int j) +static inline int compare(struct prio_queue *queue, size_t i, size_t j) { int cmp = queue->compare(queue->array[i].data, queue->array[j].data, queue->cb_data); if (!cmp) - cmp = queue->array[i].ctr - queue->array[j].ctr; + cmp = (queue->array[i].ctr > queue->array[j].ctr) - + (queue->array[i].ctr < queue->array[j].ctr); return cmp; } -static inline void swap(struct prio_queue *queue, int i, int j) +static inline void swap(struct prio_queue *queue, size_t i, size_t j) { SWAP(queue->array[i], queue->array[j]); } void prio_queue_reverse(struct prio_queue *queue) { - int i, j; + size_t i, j; if (queue->compare) BUG("prio_queue_reverse() on non-LIFO queue"); + if (!queue->nr) + return; for (i = 0; i < (j = (queue->nr - 1) - i); i++) swap(queue, i, j); } @@ -35,7 +38,7 @@ void clear_prio_queue(struct prio_queue *queue) void prio_queue_put(struct prio_queue *queue, void *thing) { - int ix, parent; + size_t ix, parent; /* Append at the end */ ALLOC_GROW(queue->array, queue->nr + 1, queue->alloc); @@ -58,7 +61,7 @@ void prio_queue_put(struct prio_queue *queue, void *thing) void *prio_queue_get(struct prio_queue *queue) { void *result; - int ix, child; + size_t ix, child; if (!queue->nr) return NULL; diff --git a/prio-queue.h b/prio-queue.h index 4f9a37e6be..36f370625f 100644 --- a/prio-queue.h +++ b/prio-queue.h @@ -30,7 +30,7 @@ struct prio_queue { prio_queue_compare_fn compare; unsigned insertion_ctr; void *cb_data; - int alloc, nr; + size_t alloc, nr; struct prio_queue_entry *array; }; diff --git a/progress.c b/progress.c index 0d44c18edc..a8fdfceb5c 100644 --- a/progress.c +++ b/progress.c @@ -10,6 +10,7 @@ #define GIT_TEST_PROGRESS_ONLY #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "pager.h" diff --git a/pseudo-merge.c b/pseudo-merge.c index bb59965ed2..971f54cfe1 100644 --- a/pseudo-merge.c +++ b/pseudo-merge.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "pseudo-merge.h" @@ -1,3 +1,5 @@ +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "git-compat-util.h" #include "path.h" #include "quote.h" diff --git a/range-diff.c b/range-diff.c index 10885ba301..9501c358a8 100644 --- a/range-diff.c +++ b/range-diff.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "environment.h" @@ -38,7 +39,8 @@ struct patch_util { * as struct object_id (will need to be free()d). */ static int read_patches(const char *range, struct string_list *list, - const struct strvec *other_arg) + const struct strvec *other_arg, + unsigned int include_merges) { struct child_process cp = CHILD_PROCESS_INIT; struct strbuf buf = STRBUF_INIT, contents = STRBUF_INIT; @@ -49,7 +51,7 @@ static int read_patches(const char *range, struct string_list *list, size_t size; int ret = -1; - strvec_pushl(&cp.args, "log", "--no-color", "-p", "--no-merges", + strvec_pushl(&cp.args, "log", "--no-color", "-p", "--reverse", "--date-order", "--decorate=no", "--no-prefix", "--submodule=short", /* @@ -64,6 +66,8 @@ static int read_patches(const char *range, struct string_list *list, "--pretty=medium", "--show-notes-by-default", NULL); + if (!include_merges) + strvec_push(&cp.args, "--no-merges"); strvec_push(&cp.args, range); if (other_arg) strvec_pushv(&cp.args, other_arg->v); @@ -96,11 +100,14 @@ static int read_patches(const char *range, struct string_list *list, } if (skip_prefix(line, "commit ", &p)) { + char *q; if (util) { string_list_append(list, buf.buf)->util = util; strbuf_reset(&buf); } CALLOC_ARRAY(util, 1); + if (include_merges && (q = strstr(p, " (from "))) + *q = '\0'; if (repo_get_oid(the_repository, p, &util->oid)) { error(_("could not parse commit '%s'"), p); FREE_AND_NULL(util); @@ -571,13 +578,14 @@ int show_range_diff(const char *range1, const char *range2, struct string_list branch1 = STRING_LIST_INIT_DUP; struct string_list branch2 = STRING_LIST_INIT_DUP; + unsigned int include_merges = range_diff_opts->include_merges; if (range_diff_opts->left_only && range_diff_opts->right_only) res = error(_("options '%s' and '%s' cannot be used together"), "--left-only", "--right-only"); - if (!res && read_patches(range1, &branch1, range_diff_opts->other_arg)) + if (!res && read_patches(range1, &branch1, range_diff_opts->other_arg, include_merges)) res = error(_("could not parse log for '%s'"), range1); - if (!res && read_patches(range2, &branch2, range_diff_opts->other_arg)) + if (!res && read_patches(range2, &branch2, range_diff_opts->other_arg, include_merges)) res = error(_("could not parse log for '%s'"), range2); if (!res) { diff --git a/range-diff.h b/range-diff.h index 2f69f6a434..cd85000b5a 100644 --- a/range-diff.h +++ b/range-diff.h @@ -16,6 +16,7 @@ struct range_diff_options { int creation_factor; unsigned dual_color:1; unsigned left_only:1, right_only:1; + unsigned include_merges:1; const struct diff_options *diffopt; /* may be NULL */ const struct strvec *other_arg; /* may be NULL */ }; diff --git a/read-cache.c b/read-cache.c index 01d0b3ad22..15d79839c2 100644 --- a/read-cache.c +++ b/read-cache.c @@ -5,6 +5,7 @@ */ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "bulk-checkin.h" diff --git a/ref-filter.c b/ref-filter.c index 84c6036107..23054694c2 100644 --- a/ref-filter.c +++ b/ref-filter.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "environment.h" @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "gettext.h" @@ -3,6 +3,7 @@ */ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "advice.h" @@ -30,6 +31,7 @@ #include "date.h" #include "commit.h" #include "wildmatch.h" +#include "ident.h" /* * List of all available backends @@ -1198,6 +1200,7 @@ void ref_transaction_free(struct ref_transaction *transaction) for (i = 0; i < transaction->nr; i++) { free(transaction->updates[i]->msg); + free(transaction->updates[i]->committer_info); free((char *)transaction->updates[i]->new_target); free((char *)transaction->updates[i]->old_target); free(transaction->updates[i]); @@ -1212,6 +1215,7 @@ struct ref_update *ref_transaction_add_update( const struct object_id *new_oid, const struct object_id *old_oid, const char *new_target, const char *old_target, + const char *committer_info, const char *msg) { struct ref_update *update; @@ -1236,12 +1240,44 @@ struct ref_update *ref_transaction_add_update( oidcpy(&update->new_oid, new_oid); if ((flags & REF_HAVE_OLD) && old_oid) oidcpy(&update->old_oid, old_oid); - if (!(flags & REF_SKIP_CREATE_REFLOG)) + if (!(flags & REF_SKIP_CREATE_REFLOG)) { + update->committer_info = xstrdup_or_null(committer_info); update->msg = normalize_reflog_message(msg); + } return update; } +static int transaction_refname_valid(const char *refname, + const struct object_id *new_oid, + unsigned int flags, struct strbuf *err) +{ + if (flags & REF_SKIP_REFNAME_VERIFICATION) + return 1; + + if (is_pseudo_ref(refname)) { + const char *refusal_msg; + if (flags & REF_LOG_ONLY) + refusal_msg = _("refusing to update reflog for pseudoref '%s'"); + else + refusal_msg = _("refusing to update pseudoref '%s'"); + strbuf_addf(err, refusal_msg, refname); + return 0; + } else if ((new_oid && !is_null_oid(new_oid)) ? + check_refname_format(refname, REFNAME_ALLOW_ONELEVEL) : + !refname_is_safe(refname)) { + const char *refusal_msg; + if (flags & REF_LOG_ONLY) + refusal_msg = _("refusing to update reflog with bad name '%s'"); + else + refusal_msg = _("refusing to update ref with bad name '%s'"); + strbuf_addf(err, refusal_msg, refname); + return 0; + } + + return 1; +} + int ref_transaction_update(struct ref_transaction *transaction, const char *refname, const struct object_id *new_oid, @@ -1259,21 +1295,8 @@ int ref_transaction_update(struct ref_transaction *transaction, return -1; } - if (!(flags & REF_SKIP_REFNAME_VERIFICATION) && - ((new_oid && !is_null_oid(new_oid)) ? - check_refname_format(refname, REFNAME_ALLOW_ONELEVEL) : - !refname_is_safe(refname))) { - strbuf_addf(err, _("refusing to update ref with bad name '%s'"), - refname); - return -1; - } - - if (!(flags & REF_SKIP_REFNAME_VERIFICATION) && - is_pseudo_ref(refname)) { - strbuf_addf(err, _("refusing to update pseudoref '%s'"), - refname); + if (!transaction_refname_valid(refname, new_oid, flags, err)) return -1; - } if (flags & ~REF_TRANSACTION_UPDATE_ALLOWED_FLAGS) BUG("illegal flags 0x%x passed to ref_transaction_update()", flags); @@ -1290,7 +1313,38 @@ int ref_transaction_update(struct ref_transaction *transaction, ref_transaction_add_update(transaction, refname, flags, new_oid, old_oid, new_target, - old_target, msg); + old_target, NULL, msg); + + return 0; +} + +int ref_transaction_update_reflog(struct ref_transaction *transaction, + const char *refname, + const struct object_id *new_oid, + const struct object_id *old_oid, + const char *committer_info, unsigned int flags, + const char *msg, unsigned int index, + struct strbuf *err) +{ + struct ref_update *update; + + assert(err); + + flags |= REF_LOG_ONLY | REF_NO_DEREF; + + if (!transaction_refname_valid(refname, new_oid, flags, err)) + return -1; + + update = ref_transaction_add_update(transaction, refname, flags, + new_oid, old_oid, NULL, NULL, + committer_info, msg); + /* + * While we do set the old_oid value, we unset the flag to skip + * old_oid verification which only makes sense for refs. + */ + update->flags &= ~REF_HAVE_OLD; + update->index = index; + return 0; } @@ -2167,19 +2221,53 @@ int peel_iterated_oid(struct repository *r, const struct object_id *base, struct int refs_update_symref(struct ref_store *refs, const char *ref, const char *target, const char *logmsg) { + return refs_update_symref_extended(refs, ref, target, logmsg, NULL, 0); +} + +int refs_update_symref_extended(struct ref_store *refs, const char *ref, + const char *target, const char *logmsg, + struct strbuf *referent, int create_only) +{ struct ref_transaction *transaction; struct strbuf err = STRBUF_INIT; - int ret = 0; + int ret = 0, prepret = 0; transaction = ref_store_transaction_begin(refs, 0, &err); - if (!transaction || - ref_transaction_update(transaction, ref, NULL, NULL, - target, NULL, REF_NO_DEREF, - logmsg, &err) || - ref_transaction_commit(transaction, &err)) { + if (!transaction) { + error_return: ret = error("%s", err.buf); + goto cleanup; + } + if (create_only) { + if (ref_transaction_create(transaction, ref, NULL, target, + REF_NO_DEREF, logmsg, &err)) + goto error_return; + prepret = ref_transaction_prepare(transaction, &err); + if (prepret && prepret != TRANSACTION_CREATE_EXISTS) + goto error_return; + } else { + if (ref_transaction_update(transaction, ref, NULL, NULL, + target, NULL, REF_NO_DEREF, + logmsg, &err) || + ref_transaction_prepare(transaction, &err)) + goto error_return; + } + + if (referent && refs_read_symbolic_ref(refs, ref, referent) == NOT_A_SYMREF) { + struct object_id oid; + if (!refs_read_ref(refs, ref, &oid)) { + strbuf_addstr(referent, oid_to_hex(&oid)); + ret = NOT_A_SYMREF; + } } + if (prepret == TRANSACTION_CREATE_EXISTS) + goto cleanup; + + if (ref_transaction_commit(transaction, &err)) + goto error_return; + +cleanup: strbuf_release(&err); if (transaction) ref_transaction_free(transaction); @@ -2676,6 +2764,7 @@ struct migration_data { struct ref_store *old_refs; struct ref_transaction *transaction; struct strbuf *errbuf; + struct strbuf sb; }; static int migrate_one_ref(const char *refname, const char *referent UNUSED, const struct object_id *oid, @@ -2708,6 +2797,52 @@ done: return ret; } +struct reflog_migration_data { + unsigned int index; + const char *refname; + struct ref_store *old_refs; + struct ref_transaction *transaction; + struct strbuf *errbuf; + struct strbuf *sb; +}; + +static int migrate_one_reflog_entry(struct object_id *old_oid, + struct object_id *new_oid, + const char *committer, + timestamp_t timestamp, int tz, + const char *msg, void *cb_data) +{ + struct reflog_migration_data *data = cb_data; + const char *date; + int ret; + + date = show_date(timestamp, tz, DATE_MODE(NORMAL)); + strbuf_reset(data->sb); + /* committer contains name and email */ + strbuf_addstr(data->sb, fmt_ident("", committer, WANT_BLANK_IDENT, date, 0)); + + ret = ref_transaction_update_reflog(data->transaction, data->refname, + new_oid, old_oid, data->sb->buf, + REF_HAVE_NEW | REF_HAVE_OLD, msg, + data->index++, data->errbuf); + return ret; +} + +static int migrate_one_reflog(const char *refname, void *cb_data) +{ + struct migration_data *migration_data = cb_data; + struct reflog_migration_data data = { + .refname = refname, + .old_refs = migration_data->old_refs, + .transaction = migration_data->transaction, + .errbuf = migration_data->errbuf, + .sb = &migration_data->sb, + }; + + return refs_for_each_reflog_ent(migration_data->old_refs, refname, + migrate_one_reflog_entry, &data); +} + static int move_files(const char *from_path, const char *to_path, struct strbuf *errbuf) { struct strbuf from_buf = STRBUF_INIT, to_buf = STRBUF_INIT; @@ -2774,13 +2909,6 @@ done: return ret; } -static int count_reflogs(const char *reflog UNUSED, void *payload) -{ - size_t *reflog_count = payload; - (*reflog_count)++; - return 0; -} - static int has_worktrees(void) { struct worktree **worktrees = get_worktrees(); @@ -2805,8 +2933,9 @@ int repo_migrate_ref_storage_format(struct repository *repo, struct ref_store *old_refs = NULL, *new_refs = NULL; struct ref_transaction *transaction = NULL; struct strbuf new_gitdir = STRBUF_INIT; - struct migration_data data; - size_t reflog_count = 0; + struct migration_data data = { + .sb = STRBUF_INIT, + }; int did_migrate_refs = 0; int ret; @@ -2819,21 +2948,6 @@ int repo_migrate_ref_storage_format(struct repository *repo, old_refs = get_main_ref_store(repo); /* - * We do not have any interfaces that would allow us to write many - * reflog entries. Once we have them we can remove this restriction. - */ - if (refs_for_each_reflog(old_refs, count_reflogs, &reflog_count) < 0) { - strbuf_addstr(errbuf, "cannot count reflogs"); - ret = -1; - goto done; - } - if (reflog_count) { - strbuf_addstr(errbuf, "migrating reflogs is not supported yet"); - ret = -1; - goto done; - } - - /* * Worktrees complicate the migration because every worktree has a * separate ref storage. While it should be feasible to implement, this * is pushed out to a future iteration. @@ -2858,17 +2972,21 @@ int repo_migrate_ref_storage_format(struct repository *repo, * This operation is safe as we do not yet modify the main * repository. * - * 3. If we're in dry-run mode then we are done and can hand over the + * 3. Enumerate all reflogs and write them into the new ref storage. + * This operation is safe as we do not yet modify the main + * repository. + * + * 4. If we're in dry-run mode then we are done and can hand over the * directory to the caller for inspection. If not, we now start * with the destructive part. * - * 4. Delete the old ref storage from disk. As we have a copy of refs + * 5. Delete the old ref storage from disk. As we have a copy of refs * in the new ref storage it's okay(ish) if we now get interrupted * as there is an equivalent copy of all refs available. * - * 5. Move the new ref storage files into place. + * 6. Move the new ref storage files into place. * - * 6. Change the repository format to the new ref format. + * 7. Change the repository format to the new ref format. */ strbuf_addf(&new_gitdir, "%s/%s", old_refs->gitdir, "ref_migration.XXXXXX"); if (!mkdtemp(new_gitdir.buf)) { @@ -2910,6 +3028,10 @@ int repo_migrate_ref_storage_format(struct repository *repo, if (ret < 0) goto done; + ret = refs_for_each_reflog(old_refs, migrate_one_reflog, &data); + if (ret < 0) + goto done; + ret = ref_transaction_commit(transaction, errbuf); if (ret < 0) goto done; @@ -2985,6 +3107,7 @@ done: } ref_transaction_free(transaction); strbuf_release(&new_gitdir); + strbuf_release(&data.sb); return ret; } @@ -2993,4 +3116,3 @@ int ref_update_expects_existing_old_ref(struct ref_update *update) return (update->flags & REF_HAVE_OLD) && (!is_null_oid(&update->old_oid) || update->old_target); } - @@ -83,6 +83,17 @@ int refs_read_ref_full(struct ref_store *refs, const char *refname, int refs_read_ref(struct ref_store *refs, const char *refname, struct object_id *oid); +#define NOT_A_SYMREF -2 + +/* + * Read the symbolic ref named "refname" and write its immediate referent into + * the provided buffer. Referent is left empty if "refname" is not a symbolic + * ref. It does not resolve the symbolic reference recursively in case the + * target is also a symbolic ref. + * + * Returns 0 on success, -2 if the "refname" is not a symbolic ref, + * -1 otherwise. + */ int refs_read_symbolic_ref(struct ref_store *ref_store, const char *refname, struct strbuf *referent); @@ -604,6 +615,10 @@ int refs_copy_existing_ref(struct ref_store *refs, const char *oldref, int refs_update_symref(struct ref_store *refs, const char *refname, const char *target, const char *logmsg); +int refs_update_symref_extended(struct ref_store *refs, const char *refname, + const char *target, const char *logmsg, + struct strbuf *referent, int create_only); + enum action_on_err { UPDATE_REFS_MSG_ON_ERR, UPDATE_REFS_DIE_ON_ERR, @@ -757,6 +772,20 @@ int ref_transaction_update(struct ref_transaction *transaction, struct strbuf *err); /* + * Similar to`ref_transaction_update`, but this function is only for adding + * a reflog update. Supports providing custom committer information. The index + * field can be utiltized to order updates as desired. When not used, the + * updates default to being ordered by refname. + */ +int ref_transaction_update_reflog(struct ref_transaction *transaction, + const char *refname, + const struct object_id *new_oid, + const struct object_id *old_oid, + const char *committer_info, unsigned int flags, + const char *msg, unsigned int index, + struct strbuf *err); + +/* * Add a reference creation to transaction. new_oid is the value that * the reference should have after the update; it must not be * null_oid. It is verified that the reference does not exist @@ -805,8 +834,10 @@ int ref_transaction_verify(struct ref_transaction *transaction, /* Naming conflict (for example, the ref names A and A/B conflict). */ #define TRANSACTION_NAME_CONFLICT -1 +/* When only creation was requested, but the ref already exists. */ +#define TRANSACTION_CREATE_EXISTS -2 /* All other errors. */ -#define TRANSACTION_GENERIC_ERROR -2 +#define TRANSACTION_GENERIC_ERROR -3 /* * Perform the preparatory stages of committing `transaction`. Acquire diff --git a/refs/debug.c b/refs/debug.c index a893ae0c90..fbc4df08b4 100644 --- a/refs/debug.c +++ b/refs/debug.c @@ -83,9 +83,8 @@ static void print_update(int i, const char *refname, static void print_transaction(struct ref_transaction *transaction) { - int i; trace_printf_key(&trace_refs, "transaction {\n"); - for (i = 0; i < transaction->nr; i++) { + for (size_t i = 0; i < transaction->nr; i++) { struct ref_update *u = transaction->updates[i]; print_update(i, u->refname, &u->old_oid, &u->new_oid, u->flags, u->type, u->msg); diff --git a/refs/files-backend.c b/refs/files-backend.c index 64f51f0da9..5cfb8b7ca8 100644 --- a/refs/files-backend.c +++ b/refs/files-backend.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "../git-compat-util.h" #include "../abspath.h" @@ -71,6 +72,7 @@ struct ref_lock { char *ref_name; struct lock_file lk; struct object_id old_oid; + unsigned int count; /* track users of the lock (ref update + reflog updates) */ }; struct files_ref_store { @@ -598,10 +600,9 @@ static int files_read_symbolic_ref(struct ref_store *ref_store, const char *refn unsigned int type; ret = read_ref_internal(ref_store, refname, &oid, referent, &type, &failure_errno, 1); - if (ret) - return ret; - - return !(type & REF_ISSYMREF); + if (!ret && !(type & REF_ISSYMREF)) + return NOT_A_SYMREF; + return ret; } int parse_loose_ref_contents(const struct git_hash_algo *algop, @@ -638,9 +639,12 @@ int parse_loose_ref_contents(const struct git_hash_algo *algop, static void unlock_ref(struct ref_lock *lock) { - rollback_lock_file(&lock->lk); - free(lock->ref_name); - free(lock); + lock->count--; + if (!lock->count) { + rollback_lock_file(&lock->lk); + free(lock->ref_name); + free(lock); + } } /* @@ -696,6 +700,7 @@ static int lock_raw_ref(struct files_ref_store *refs, *lock_p = CALLOC_ARRAY(lock, 1); lock->ref_name = xstrdup(refname); + lock->count = 1; files_ref_path(refs, &ref_file, refname); retry: @@ -1169,6 +1174,7 @@ static struct ref_lock *lock_ref_oid_basic(struct files_ref_store *refs, goto error_return; lock->ref_name = xstrdup(refname); + lock->count = 1; if (raceproof_create_file(ref_file.buf, create_reflock, &lock->lk)) { unable_to_lock_message(ref_file.buf, errno, err); @@ -1264,7 +1270,7 @@ static void prune_ref(struct files_ref_store *refs, struct ref_to_prune *r) ref_transaction_add_update( transaction, r->name, REF_NO_DEREF | REF_HAVE_NEW | REF_HAVE_OLD | REF_IS_PRUNING, - null_oid(), &r->oid, NULL, NULL, NULL); + null_oid(), &r->oid, NULL, NULL, NULL, NULL); if (ref_transaction_commit(transaction, &err)) goto cleanup; @@ -1858,6 +1864,9 @@ static int log_ref_write_fd(int fd, const struct object_id *old_oid, struct strbuf sb = STRBUF_INIT; int ret = 0; + if (!committer) + committer = git_committer_info(0); + strbuf_addf(&sb, "%s %s %s", oid_to_hex(old_oid), oid_to_hex(new_oid), committer); if (msg && *msg) { strbuf_addch(&sb, '\t'); @@ -1871,8 +1880,10 @@ static int log_ref_write_fd(int fd, const struct object_id *old_oid, } static int files_log_ref_write(struct files_ref_store *refs, - const char *refname, const struct object_id *old_oid, - const struct object_id *new_oid, const char *msg, + const char *refname, + const struct object_id *old_oid, + const struct object_id *new_oid, + const char *committer_info, const char *msg, int flags, struct strbuf *err) { int logfd, result; @@ -1889,8 +1900,7 @@ static int files_log_ref_write(struct files_ref_store *refs, if (logfd < 0) return 0; - result = log_ref_write_fd(logfd, old_oid, new_oid, - git_committer_info(0), msg); + result = log_ref_write_fd(logfd, old_oid, new_oid, committer_info, msg); if (result) { struct strbuf sb = STRBUF_INIT; int save_errno = errno; @@ -1974,8 +1984,7 @@ static int commit_ref_update(struct files_ref_store *refs, files_assert_main_repository(refs, "commit_ref_update"); clear_loose_ref_cache(refs); - if (files_log_ref_write(refs, lock->ref_name, - &lock->old_oid, oid, + if (files_log_ref_write(refs, lock->ref_name, &lock->old_oid, oid, NULL, logmsg, flags, err)) { char *old_msg = strbuf_detach(err, NULL); strbuf_addf(err, "cannot update the ref '%s': %s", @@ -2007,9 +2016,9 @@ static int commit_ref_update(struct files_ref_store *refs, if (head_ref && (head_flag & REF_ISSYMREF) && !strcmp(head_ref, lock->ref_name)) { struct strbuf log_err = STRBUF_INIT; - if (files_log_ref_write(refs, "HEAD", - &lock->old_oid, oid, - logmsg, flags, &log_err)) { + if (files_log_ref_write(refs, "HEAD", &lock->old_oid, + oid, NULL, logmsg, flags, + &log_err)) { error("%s", log_err.buf); strbuf_release(&log_err); } @@ -2408,7 +2417,7 @@ static int split_head_update(struct ref_update *update, transaction, "HEAD", update->flags | REF_LOG_ONLY | REF_NO_DEREF, &update->new_oid, &update->old_oid, - NULL, NULL, update->msg); + NULL, NULL, update->committer_info, update->msg); /* * Add "HEAD". This insertion is O(N) in the transaction @@ -2472,7 +2481,8 @@ static int split_symref_update(struct ref_update *update, transaction, referent, new_flags, update->new_target ? NULL : &update->new_oid, update->old_target ? NULL : &update->old_oid, - update->new_target, update->old_target, update->msg); + update->new_target, update->old_target, NULL, + update->msg); new_update->parent_update = update; @@ -2509,14 +2519,18 @@ static int split_symref_update(struct ref_update *update, static int check_old_oid(struct ref_update *update, struct object_id *oid, struct strbuf *err) { + int ret = TRANSACTION_GENERIC_ERROR; + if (!(update->flags & REF_HAVE_OLD) || oideq(oid, &update->old_oid)) return 0; - if (is_null_oid(&update->old_oid)) + if (is_null_oid(&update->old_oid)) { strbuf_addf(err, "cannot lock ref '%s': " "reference already exists", ref_update_original_update_refname(update)); + ret = TRANSACTION_CREATE_EXISTS; + } else if (is_null_oid(oid)) strbuf_addf(err, "cannot lock ref '%s': " "reference is missing but expected %s", @@ -2529,9 +2543,15 @@ static int check_old_oid(struct ref_update *update, struct object_id *oid, oid_to_hex(oid), oid_to_hex(&update->old_oid)); - return -1; + return ret; } +struct files_transaction_backend_data { + struct ref_transaction *packed_transaction; + int packed_refs_locked; + struct strmap ref_locks; +}; + /* * Prepare for carrying out update: * - Lock the reference referred to by update. @@ -2554,11 +2574,14 @@ static int lock_ref_for_update(struct files_ref_store *refs, { struct strbuf referent = STRBUF_INIT; int mustexist = ref_update_expects_existing_old_ref(update); + struct files_transaction_backend_data *backend_data; int ret = 0; struct ref_lock *lock; files_assert_main_repository(refs, "lock_ref_for_update"); + backend_data = transaction->backend_data; + if ((update->flags & REF_HAVE_NEW) && ref_update_has_null_new_value(update)) update->flags |= REF_DELETING; @@ -2569,22 +2592,32 @@ static int lock_ref_for_update(struct files_ref_store *refs, goto out; } - ret = lock_raw_ref(refs, update->refname, mustexist, - affected_refnames, - &lock, &referent, - &update->type, err); - if (ret) { - char *reason; + lock = strmap_get(&backend_data->ref_locks, update->refname); + if (lock) { + lock->count++; + } else { + ret = lock_raw_ref(refs, update->refname, mustexist, + affected_refnames, + &lock, &referent, + &update->type, err); + if (ret) { + char *reason; + + reason = strbuf_detach(err, NULL); + strbuf_addf(err, "cannot lock ref '%s': %s", + ref_update_original_update_refname(update), reason); + free(reason); + goto out; + } - reason = strbuf_detach(err, NULL); - strbuf_addf(err, "cannot lock ref '%s': %s", - ref_update_original_update_refname(update), reason); - free(reason); - goto out; + strmap_put(&backend_data->ref_locks, update->refname, lock); } update->backend_data = lock; + if (update->flags & REF_LOG_ONLY) + goto out; + if (update->type & REF_ISSYMREF) { if (update->flags & REF_NO_DEREF) { /* @@ -2609,9 +2642,11 @@ static int lock_ref_for_update(struct files_ref_store *refs, ret = TRANSACTION_GENERIC_ERROR; goto out; } - } else if (check_old_oid(update, &lock->old_oid, err)) { - ret = TRANSACTION_GENERIC_ERROR; - goto out; + } else { + ret = check_old_oid(update, &lock->old_oid, err); + if (ret) { + goto out; + } } } else { /* @@ -2642,9 +2677,11 @@ static int lock_ref_for_update(struct files_ref_store *refs, update->old_target); ret = TRANSACTION_GENERIC_ERROR; goto out; - } else if (check_old_oid(update, &lock->old_oid, err)) { - ret = TRANSACTION_GENERIC_ERROR; - goto out; + } else { + ret = check_old_oid(update, &lock->old_oid, err); + if (ret) { + goto out; + } } /* @@ -2727,11 +2764,6 @@ out: return ret; } -struct files_transaction_backend_data { - struct ref_transaction *packed_transaction; - int packed_refs_locked; -}; - /* * Unlock any references in `transaction` that are still locked, and * mark the transaction closed. @@ -2764,6 +2796,8 @@ static void files_transaction_cleanup(struct files_ref_store *refs, if (backend_data->packed_refs_locked) packed_refs_unlock(refs->packed_ref_store); + strmap_clear(&backend_data->ref_locks, 0); + free(backend_data); } @@ -2793,6 +2827,7 @@ static int files_transaction_prepare(struct ref_store *ref_store, goto cleanup; CALLOC_ARRAY(backend_data, 1); + strmap_init(&backend_data->ref_locks); transaction->backend_data = backend_data; /* @@ -2805,13 +2840,16 @@ static int files_transaction_prepare(struct ref_store *ref_store, */ for (i = 0; i < transaction->nr; i++) { struct ref_update *update = transaction->updates[i]; - struct string_list_item *item = - string_list_append(&affected_refnames, update->refname); + struct string_list_item *item; if ((update->flags & REF_IS_PRUNING) && !(update->flags & REF_NO_DEREF)) BUG("REF_IS_PRUNING set without REF_NO_DEREF"); + if (update->flags & REF_LOG_ONLY) + continue; + + item = string_list_append(&affected_refnames, update->refname); /* * We store a pointer to update in item->util, but at * the moment we never use the value of this field @@ -2891,7 +2929,7 @@ static int files_transaction_prepare(struct ref_store *ref_store, packed_transaction, update->refname, REF_HAVE_NEW | REF_NO_DEREF, &update->new_oid, NULL, - NULL, NULL, NULL); + NULL, NULL, NULL, NULL); } } @@ -2969,7 +3007,8 @@ static int parse_and_write_reflog(struct files_ref_store *refs, } if (files_log_ref_write(refs, lock->ref_name, &lock->old_oid, - &update->new_oid, update->msg, update->flags, err)) { + &update->new_oid, update->committer_info, + update->msg, update->flags, err)) { char *old_msg = strbuf_detach(err, NULL); strbuf_addf(err, "cannot update the ref '%s': %s", @@ -3010,8 +3049,9 @@ static int files_transaction_finish_initial(struct files_ref_store *refs, /* Fail if a refname appears more than once in the transaction: */ for (i = 0; i < transaction->nr; i++) - string_list_append(&affected_refnames, - transaction->updates[i]->refname); + if (!(transaction->updates[i]->flags & REF_LOG_ONLY)) + string_list_append(&affected_refnames, + transaction->updates[i]->refname); string_list_sort(&affected_refnames); if (ref_update_reject_duplicates(&affected_refnames, err)) { ret = TRANSACTION_GENERIC_ERROR; @@ -3055,10 +3095,12 @@ static int files_transaction_finish_initial(struct files_ref_store *refs, } /* - * packed-refs don't support symbolic refs and root refs, so we - * have to queue these references via the loose transaction. + * packed-refs don't support symbolic refs, root refs and reflogs, + * so we have to queue these references via the loose transaction. */ - if (update->new_target || is_root_ref(update->refname)) { + if (update->new_target || + is_root_ref(update->refname) || + (update->flags & REF_LOG_ONLY)) { if (!loose_transaction) { loose_transaction = ref_store_transaction_begin(&refs->base, 0, err); if (!loose_transaction) { @@ -3067,15 +3109,22 @@ static int files_transaction_finish_initial(struct files_ref_store *refs, } } - ref_transaction_add_update(loose_transaction, update->refname, - update->flags & ~REF_HAVE_OLD, - update->new_target ? NULL : &update->new_oid, NULL, - update->new_target, NULL, NULL); + if (update->flags & REF_LOG_ONLY) + ref_transaction_add_update(loose_transaction, update->refname, + update->flags, &update->new_oid, + &update->old_oid, NULL, NULL, + update->committer_info, update->msg); + else + ref_transaction_add_update(loose_transaction, update->refname, + update->flags & ~REF_HAVE_OLD, + update->new_target ? NULL : &update->new_oid, NULL, + update->new_target, NULL, update->committer_info, + NULL); } else { ref_transaction_add_update(packed_transaction, update->refname, update->flags & ~REF_HAVE_OLD, &update->new_oid, &update->old_oid, - NULL, NULL, NULL); + NULL, NULL, update->committer_info, NULL); } } diff --git a/refs/iterator.c b/refs/iterator.c index 8e999d81fc..d25e568bf0 100644 --- a/refs/iterator.c +++ b/refs/iterator.c @@ -3,6 +3,8 @@ * documentation about the design and use of reference iterators. */ +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "git-compat-util.h" #include "refs.h" #include "refs/refs-internal.h" diff --git a/refs/packed-backend.c b/refs/packed-backend.c index 3406f1e71d..a7b6f74b6e 100644 --- a/refs/packed-backend.c +++ b/refs/packed-backend.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "../git-compat-util.h" #include "../config.h" diff --git a/refs/refs-internal.h b/refs/refs-internal.h index 58aa56d1b2..16550862d3 100644 --- a/refs/refs-internal.h +++ b/refs/refs-internal.h @@ -113,6 +113,14 @@ struct ref_update { void *backend_data; unsigned int type; char *msg; + char *committer_info; + + /* + * The index overrides the default sort algorithm. This is needed + * when migrating reflogs and we want to ensure we carry over the + * same order. + */ + unsigned int index; /* * If this ref_update was split off of a symref update via @@ -154,6 +162,7 @@ struct ref_update *ref_transaction_add_update( const struct object_id *new_oid, const struct object_id *old_oid, const char *new_target, const char *old_target, + const char *committer_info, const char *msg); /* @@ -674,6 +683,11 @@ struct ref_storage_be { ref_iterator_begin_fn *iterator_begin; read_raw_ref_fn *read_raw_ref; + + /* + * Please refer to `refs_read_symbolic_ref()` for the expected + * behaviour. + */ read_symbolic_ref_fn *read_symbolic_ref; reflog_iterator_begin_fn *reflog_iterator_begin; diff --git a/refs/reftable-backend.c b/refs/reftable-backend.c index 31c58db29f..00d95a9a2f 100644 --- a/refs/reftable-backend.c +++ b/refs/reftable-backend.c @@ -920,8 +920,12 @@ static int reftable_be_read_symbolic_ref(struct ref_store *ref_store, return ret; ret = reftable_backend_read_ref(be, refname, &oid, referent, &type); - if (type != REF_ISSYMREF) + if (ret) ret = -1; + else if (type == REF_ISSYMREF) + ; /* happy */ + else + ret = NOT_A_SYMREF; return ret; } @@ -1087,8 +1091,9 @@ static int reftable_be_transaction_prepare(struct ref_store *ref_store, if (ret) goto done; - string_list_append(&affected_refnames, - transaction->updates[i]->refname); + if (!(transaction->updates[i]->flags & REF_LOG_ONLY)) + string_list_append(&affected_refnames, + transaction->updates[i]->refname); } /* @@ -1198,7 +1203,8 @@ static int reftable_be_transaction_prepare(struct ref_store *ref_store, new_update = ref_transaction_add_update( transaction, "HEAD", u->flags | REF_LOG_ONLY | REF_NO_DEREF, - &u->new_oid, &u->old_oid, NULL, NULL, u->msg); + &u->new_oid, &u->old_oid, NULL, NULL, NULL, + u->msg); string_list_insert(&affected_refnames, new_update->refname); } @@ -1281,7 +1287,8 @@ static int reftable_be_transaction_prepare(struct ref_store *ref_store, transaction, referent.buf, new_flags, u->new_target ? NULL : &u->new_oid, u->old_target ? NULL : &u->old_oid, - u->new_target, u->old_target, u->msg); + u->new_target, u->old_target, + u->committer_info, u->msg); new_update->parent_update = u; @@ -1328,10 +1335,13 @@ static int reftable_be_transaction_prepare(struct ref_store *ref_store, goto done; } } else if ((u->flags & REF_HAVE_OLD) && !oideq(¤t_oid, &u->old_oid)) { - if (is_null_oid(&u->old_oid)) + ret = TRANSACTION_NAME_CONFLICT; + if (is_null_oid(&u->old_oid)) { strbuf_addf(err, _("cannot lock ref '%s': " "reference already exists"), ref_update_original_update_refname(u)); + ret = TRANSACTION_CREATE_EXISTS; + } else if (is_null_oid(¤t_oid)) strbuf_addf(err, _("cannot lock ref '%s': " "reference is missing but expected %s"), @@ -1343,7 +1353,6 @@ static int reftable_be_transaction_prepare(struct ref_store *ref_store, ref_update_original_update_refname(u), oid_to_hex(¤t_oid), oid_to_hex(&u->old_oid)); - ret = -1; goto done; } @@ -1399,8 +1408,17 @@ static int reftable_be_transaction_abort(struct ref_store *ref_store UNUSED, static int transaction_update_cmp(const void *a, const void *b) { - return strcmp(((struct reftable_transaction_update *)a)->update->refname, - ((struct reftable_transaction_update *)b)->update->refname); + struct reftable_transaction_update *update_a = (struct reftable_transaction_update *)a; + struct reftable_transaction_update *update_b = (struct reftable_transaction_update *)b; + + /* + * If there is an index set, it should take preference (default is 0). + * This ensures that updates with indexes are sorted amongst themselves. + */ + if (update_a->update->index || update_b->update->index) + return update_a->update->index - update_b->update->index; + + return strcmp(update_a->update->refname, update_b->update->refname); } static int write_transaction_table(struct reftable_writer *writer, void *cb_data) @@ -1410,6 +1428,7 @@ static int write_transaction_table(struct reftable_writer *writer, void *cb_data struct reftable_log_record *logs = NULL; struct ident_split committer_ident = {0}; size_t logs_nr = 0, logs_alloc = 0, i; + uint64_t max_update_index = ts; const char *committer_info; int ret = 0; @@ -1499,12 +1518,34 @@ static int write_transaction_table(struct reftable_writer *writer, void *cb_data } if (create_reflog) { + struct ident_split c; + ALLOC_GROW(logs, logs_nr + 1, logs_alloc); log = &logs[logs_nr++]; memset(log, 0, sizeof(*log)); - fill_reftable_log_record(log, &committer_ident); - log->update_index = ts; + if (u->committer_info) { + if (split_ident_line(&c, u->committer_info, + strlen(u->committer_info))) + BUG("failed splitting committer info"); + } else { + c = committer_ident; + } + + fill_reftable_log_record(log, &c); + + /* + * Updates are sorted by the writer. So updates for the same + * refname need to contain different update indices. + */ + log->update_index = ts + u->index; + + /* + * Note the max update_index so the limit can be set later on. + */ + if (log->update_index > max_update_index) + max_update_index = log->update_index; + log->refname = xstrdup(u->refname); memcpy(log->value.update.new_hash, u->new_oid.hash, GIT_MAX_RAWSZ); @@ -1568,6 +1609,8 @@ static int write_transaction_table(struct reftable_writer *writer, void *cb_data * and log blocks. */ if (logs) { + reftable_writer_set_limits(writer, ts, max_update_index); + ret = reftable_writer_add_logs(writer, logs, logs_nr); if (ret < 0) goto done; @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "gettext.h" diff --git a/reftable/basics.c b/reftable/basics.c index 7d84a5d62d..fe2b83ff83 100644 --- a/reftable/basics.c +++ b/reftable/basics.c @@ -17,6 +17,8 @@ static void (*reftable_free_ptr)(void *); void *reftable_malloc(size_t sz) { + if (!sz) + return NULL; if (reftable_malloc_ptr) return (*reftable_malloc_ptr)(sz); return malloc(sz); @@ -24,6 +26,11 @@ void *reftable_malloc(size_t sz) void *reftable_realloc(void *p, size_t sz) { + if (!sz) { + reftable_free(p); + return NULL; + } + if (reftable_realloc_ptr) return (*reftable_realloc_ptr)(p, sz); return realloc(p, sz); @@ -117,11 +124,8 @@ int reftable_buf_add(struct reftable_buf *buf, const void *data, size_t len) size_t newlen = buf->len + len; if (newlen + 1 > buf->alloc) { - char *reallocated = buf->buf; - REFTABLE_ALLOC_GROW(reallocated, newlen + 1, buf->alloc); - if (!reallocated) + if (REFTABLE_ALLOC_GROW(buf->buf, newlen + 1, buf->alloc)) return REFTABLE_OUT_OF_MEMORY_ERROR; - buf->buf = reallocated; } memcpy(buf->buf + buf->len, data, len); @@ -226,11 +230,9 @@ char **parse_names(char *buf, int size) next = end; } if (p < next) { - char **names_grown = names; - REFTABLE_ALLOC_GROW(names_grown, names_len + 1, names_cap); - if (!names_grown) + if (REFTABLE_ALLOC_GROW(names, names_len + 1, + names_cap)) goto err; - names = names_grown; names[names_len] = reftable_strdup(p); if (!names[names_len++]) @@ -239,7 +241,8 @@ char **parse_names(char *buf, int size) p = next + 1; } - REFTABLE_REALLOC_ARRAY(names, names_len + 1); + if (REFTABLE_ALLOC_GROW(names, names_len + 1, names_cap)) + goto err; names[names_len] = NULL; return names; diff --git a/reftable/basics.h b/reftable/basics.h index 36beda2c25..4bf71b0954 100644 --- a/reftable/basics.h +++ b/reftable/basics.h @@ -120,15 +120,38 @@ char *reftable_strdup(const char *str); #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) + +static inline void *reftable_alloc_grow(void *p, size_t nelem, size_t elsize, + size_t *allocp) +{ + void *new_p; + size_t alloc = *allocp * 2 + 1; + if (alloc < nelem) + alloc = nelem; + new_p = reftable_realloc(p, st_mult(elsize, alloc)); + if (!new_p) + return p; + *allocp = alloc; + return new_p; +} + +#define REFTABLE_ALLOC_GROW(x, nr, alloc) ( \ + (nr) > (alloc) && ( \ + (x) = reftable_alloc_grow((x), (nr), sizeof(*(x)), &(alloc)), \ + (nr) > (alloc) \ + ) \ +) + +#define REFTABLE_ALLOC_GROW_OR_NULL(x, nr, alloc) do { \ + size_t reftable_alloc_grow_or_null_alloc = alloc; \ + if (REFTABLE_ALLOC_GROW((x), (nr), reftable_alloc_grow_or_null_alloc)) { \ + REFTABLE_FREE_AND_NULL(x); \ + alloc = 0; \ + } else { \ + alloc = reftable_alloc_grow_or_null_alloc; \ + } \ +} while (0) + #define REFTABLE_FREE_AND_NULL(p) do { reftable_free(p); (p) = NULL; } while (0) #ifndef REFTABLE_ALLOW_BANNED_ALLOCATORS diff --git a/reftable/block.c b/reftable/block.c index 0198078485..9858bbc7c5 100644 --- a/reftable/block.c +++ b/reftable/block.c @@ -53,7 +53,8 @@ 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) { - REFTABLE_ALLOC_GROW(w->restarts, w->restart_len + 1, w->restart_cap); + REFTABLE_ALLOC_GROW_OR_NULL(w->restarts, w->restart_len + 1, + w->restart_cap); if (!w->restarts) return REFTABLE_OUT_OF_MEMORY_ERROR; w->restarts[w->restart_len++] = w->next; @@ -176,7 +177,8 @@ int block_writer_finish(struct block_writer *w) * is guaranteed to return `Z_STREAM_END`. */ compressed_len = deflateBound(w->zstream, src_len); - REFTABLE_ALLOC_GROW(w->compressed, compressed_len, w->compressed_cap); + REFTABLE_ALLOC_GROW_OR_NULL(w->compressed, compressed_len, + w->compressed_cap); if (!w->compressed) { ret = REFTABLE_OUT_OF_MEMORY_ERROR; return ret; @@ -235,8 +237,8 @@ int block_reader_init(struct block_reader *br, struct reftable_block *block, uLong src_len = block->len - block_header_skip; /* Log blocks specify the *uncompressed* size in their header. */ - REFTABLE_ALLOC_GROW(br->uncompressed_data, sz, - br->uncompressed_cap); + REFTABLE_ALLOC_GROW_OR_NULL(br->uncompressed_data, sz, + br->uncompressed_cap); if (!br->uncompressed_data) { err = REFTABLE_OUT_OF_MEMORY_ERROR; goto done; diff --git a/reftable/merged.c b/reftable/merged.c index bb0836e344..e72b39e178 100644 --- a/reftable/merged.c +++ b/reftable/merged.c @@ -240,14 +240,16 @@ int merged_table_init_iter(struct reftable_merged_table *mt, struct reftable_iterator *it, uint8_t typ) { - struct merged_subiter *subiters; + struct merged_subiter *subiters = NULL; struct merged_iter *mi = NULL; int ret; - REFTABLE_CALLOC_ARRAY(subiters, mt->readers_len); - if (!subiters) { - ret = REFTABLE_OUT_OF_MEMORY_ERROR; - goto out; + if (mt->readers_len) { + REFTABLE_CALLOC_ARRAY(subiters, mt->readers_len); + if (!subiters) { + ret = REFTABLE_OUT_OF_MEMORY_ERROR; + goto out; + } } for (size_t i = 0; i < mt->readers_len; i++) { diff --git a/reftable/pq.c b/reftable/pq.c index 6ee1164dd3..5591e875e1 100644 --- a/reftable/pq.c +++ b/reftable/pq.c @@ -49,7 +49,7 @@ int merged_iter_pqueue_add(struct merged_iter_pqueue *pq, const struct pq_entry { size_t i = 0; - REFTABLE_ALLOC_GROW(pq->heap, pq->len + 1, pq->cap); + REFTABLE_ALLOC_GROW_OR_NULL(pq->heap, pq->len + 1, pq->cap); if (!pq->heap) return REFTABLE_OUT_OF_MEMORY_ERROR; pq->heap[pq->len++] = *e; diff --git a/reftable/record.c b/reftable/record.c index fb5652ed57..04429d23fe 100644 --- a/reftable/record.c +++ b/reftable/record.c @@ -246,8 +246,8 @@ static int reftable_ref_record_copy_from(void *rec, const void *src_rec, if (src->refname) { size_t refname_len = strlen(src->refname); - REFTABLE_ALLOC_GROW(ref->refname, refname_len + 1, - ref->refname_cap); + REFTABLE_ALLOC_GROW_OR_NULL(ref->refname, refname_len + 1, + ref->refname_cap); if (!ref->refname) { err = REFTABLE_OUT_OF_MEMORY_ERROR; goto out; @@ -385,7 +385,7 @@ static int reftable_ref_record_decode(void *rec, struct reftable_buf key, SWAP(r->refname, refname); SWAP(r->refname_cap, refname_cap); - REFTABLE_ALLOC_GROW(r->refname, key.len + 1, r->refname_cap); + REFTABLE_ALLOC_GROW_OR_NULL(r->refname, key.len + 1, r->refname_cap); if (!r->refname) { err = REFTABLE_OUT_OF_MEMORY_ERROR; goto done; @@ -839,7 +839,7 @@ static int reftable_log_record_decode(void *rec, struct reftable_buf key, if (key.len <= 9 || key.buf[key.len - 9] != 0) return REFTABLE_FORMAT_ERROR; - REFTABLE_ALLOC_GROW(r->refname, key.len - 8, r->refname_cap); + REFTABLE_ALLOC_GROW_OR_NULL(r->refname, key.len - 8, r->refname_cap); if (!r->refname) { err = REFTABLE_OUT_OF_MEMORY_ERROR; goto done; @@ -947,8 +947,8 @@ static int reftable_log_record_decode(void *rec, struct reftable_buf key, } string_view_consume(&in, n); - REFTABLE_ALLOC_GROW(r->value.update.message, scratch->len + 1, - r->value.update.message_cap); + REFTABLE_ALLOC_GROW_OR_NULL(r->value.update.message, scratch->len + 1, + r->value.update.message_cap); if (!r->value.update.message) { err = REFTABLE_OUT_OF_MEMORY_ERROR; goto done; diff --git a/reftable/stack.c b/reftable/stack.c index 59fd695a12..531660a49f 100644 --- a/reftable/stack.c +++ b/reftable/stack.c @@ -270,9 +270,9 @@ static int reftable_stack_reload_once(struct reftable_stack *st, int reuse_open) { size_t cur_len = !st->merged ? 0 : st->merged->readers_len; - struct reftable_reader **cur; + struct reftable_reader **cur = NULL; struct reftable_reader **reused = NULL; - struct reftable_reader **new_readers; + struct reftable_reader **new_readers = NULL; size_t reused_len = 0, reused_alloc = 0, names_len; size_t new_readers_len = 0; struct reftable_merged_table *new_merged = NULL; @@ -280,18 +280,22 @@ static int reftable_stack_reload_once(struct reftable_stack *st, int err = 0; size_t i; - cur = stack_copy_readers(st, cur_len); - if (!cur) { - err = REFTABLE_OUT_OF_MEMORY_ERROR; - goto done; + if (cur_len) { + cur = stack_copy_readers(st, cur_len); + if (!cur) { + err = REFTABLE_OUT_OF_MEMORY_ERROR; + goto done; + } } names_len = names_length(names); - new_readers = reftable_calloc(names_len, sizeof(*new_readers)); - if (!new_readers) { - err = REFTABLE_OUT_OF_MEMORY_ERROR; - goto done; + if (names_len) { + new_readers = reftable_calloc(names_len, sizeof(*new_readers)); + if (!new_readers) { + err = REFTABLE_OUT_OF_MEMORY_ERROR; + goto done; + } } while (*names) { @@ -313,7 +317,9 @@ static int reftable_stack_reload_once(struct reftable_stack *st, * thus need to keep them alive here, which we * do by bumping their refcount. */ - REFTABLE_ALLOC_GROW(reused, reused_len + 1, reused_alloc); + REFTABLE_ALLOC_GROW_OR_NULL(reused, + reused_len + 1, + reused_alloc); if (!reused) { err = REFTABLE_OUT_OF_MEMORY_ERROR; goto done; @@ -945,8 +951,8 @@ int reftable_addition_add(struct reftable_addition *add, if (err < 0) goto done; - REFTABLE_ALLOC_GROW(add->new_tables, add->new_tables_len + 1, - add->new_tables_cap); + REFTABLE_ALLOC_GROW_OR_NULL(add->new_tables, add->new_tables_len + 1, + add->new_tables_cap); if (!add->new_tables) { err = REFTABLE_OUT_OF_MEMORY_ERROR; goto done; @@ -1627,6 +1633,9 @@ int reftable_stack_auto_compact(struct reftable_stack *st) struct segment seg; uint64_t *sizes; + if (st->merged->readers_len < 2) + return 0; + sizes = stack_table_sizes_for_compaction(st); if (!sizes) return REFTABLE_OUT_OF_MEMORY_ERROR; diff --git a/reftable/system.h b/reftable/system.h index 7d5f803eeb..5274eca1d0 100644 --- a/reftable/system.h +++ b/reftable/system.h @@ -11,6 +11,8 @@ https://developers.google.com/open-source/licenses/bsd /* This header glues the reftable library to the rest of Git */ +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "git-compat-util.h" /* diff --git a/reftable/writer.c b/reftable/writer.c index 9efeab13e1..740c98038e 100644 --- a/reftable/writer.c +++ b/reftable/writer.c @@ -254,7 +254,8 @@ static int writer_index_hash(struct reftable_writer *w, struct reftable_buf *has if (key->offset_len > 0 && key->offsets[key->offset_len - 1] == off) return 0; - REFTABLE_ALLOC_GROW(key->offsets, key->offset_len + 1, key->offset_cap); + REFTABLE_ALLOC_GROW_OR_NULL(key->offsets, key->offset_len + 1, + key->offset_cap); if (!key->offsets) return REFTABLE_OUT_OF_MEMORY_ERROR; key->offsets[key->offset_len++] = off; @@ -425,6 +426,18 @@ int reftable_writer_add_log(struct reftable_writer *w, if (log->value_type == REFTABLE_LOG_DELETION) return reftable_writer_add_log_verbatim(w, log); + /* + * Verify only the upper limit of the update_index. Each reflog entry + * is tied to a specific update_index. Entries in the reflog can be + * replaced by adding a new entry with the same update_index, + * effectively canceling the old one. + * + * Consequently, reflog updates may include update_index values lower + * than the writer's min_update_index. + */ + if (log->update_index > w->max_update_index) + return REFTABLE_API_ERROR; + if (!log->refname) return REFTABLE_API_ERROR; @@ -808,7 +821,7 @@ static int writer_flush_nonempty_block(struct reftable_writer *w) * Note that this also applies when flushing index blocks, in which * case we will end up with a multi-level index. */ - REFTABLE_ALLOC_GROW(w->index, w->index_len + 1, w->index_cap); + REFTABLE_ALLOC_GROW_OR_NULL(w->index, w->index_len + 1, w->index_cap); if (!w->index) return REFTABLE_OUT_OF_MEMORY_ERROR; diff --git a/remote-curl.c b/remote-curl.c index 9a71e04301..a24e3a8b9a 100644 --- a/remote-curl.c +++ b/remote-curl.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "git-curl-compat.h" @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "abspath.h" @@ -514,6 +515,24 @@ static int handle_config(const char *key, const char *value, } else if (!strcmp(subkey, "serveroption")) { return parse_transport_option(key, value, &remote->server_options); + } else if (!strcmp(subkey, "followremotehead")) { + const char *no_warn_branch; + if (!strcmp(value, "never")) + remote->follow_remote_head = FOLLOW_REMOTE_NEVER; + else if (!strcmp(value, "create")) + remote->follow_remote_head = FOLLOW_REMOTE_CREATE; + else if (!strcmp(value, "warn")) { + remote->follow_remote_head = FOLLOW_REMOTE_WARN; + remote->no_warn_branch = NULL; + } else if (skip_prefix(value, "warn-if-not-", &no_warn_branch)) { + remote->follow_remote_head = FOLLOW_REMOTE_WARN; + remote->no_warn_branch = no_warn_branch; + } else if (!strcmp(value, "always")) { + remote->follow_remote_head = FOLLOW_REMOTE_ALWAYS; + } else { + warning(_("unrecognized followRemoteHEAD value '%s' ignored"), + value); + } } return 0; } @@ -2854,9 +2873,9 @@ void apply_push_cas(struct push_cas_option *cas, struct remote_state *remote_state_new(void) { - struct remote_state *r = xmalloc(sizeof(*r)); + struct remote_state *r; - memset(r, 0, sizeof(*r)); + CALLOC_ARRAY(r, 1); hashmap_init(&r->remotes_hash, remotes_hash_cmp, NULL, 0); hashmap_init(&r->branches_hash, branches_hash_cmp, NULL, 0); @@ -59,6 +59,13 @@ struct remote_state { void remote_state_clear(struct remote_state *remote_state); struct remote_state *remote_state_new(void); + enum follow_remote_head_settings { + FOLLOW_REMOTE_NEVER = -1, + FOLLOW_REMOTE_CREATE = 0, + FOLLOW_REMOTE_WARN = 1, + FOLLOW_REMOTE_ALWAYS = 2, + }; + struct remote { struct hashmap_entry ent; @@ -107,6 +114,9 @@ struct remote { char *http_proxy_authmethod; struct string_list server_options; + + enum follow_remote_head_settings follow_remote_head; + const char *no_warn_branch; }; /** @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "abspath.h" diff --git a/resolve-undo.c b/resolve-undo.c index 8c9911affb..b5a9dfb4ac 100644 --- a/resolve-undo.c +++ b/resolve-undo.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "dir.h" diff --git a/revision.c b/revision.c index 57ca521c55..474fa1e767 100644 --- a/revision.c +++ b/revision.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "config.h" diff --git a/run-command.c b/run-command.c index 94f2f3079f..402138b8b5 100644 --- a/run-command.c +++ b/run-command.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "run-command.h" @@ -379,7 +379,7 @@ static int delete_enlistment(struct strbuf *enlistment) offset = offset_1st_component(enlistment->buf); path_sep = find_last_dir_sep(enlistment->buf + offset); strbuf_add(&parent, enlistment->buf, - path_sep ? path_sep - enlistment->buf : offset); + path_sep ? (size_t) (path_sep - enlistment->buf) : offset); if (chdir(parent.buf) < 0) { int res = error_errno(_("could not switch to '%s'"), parent.buf); strbuf_release(&parent); @@ -654,7 +654,7 @@ static int cmd_reconfigure(int argc, const char **argv) NULL }; struct string_list scalar_repos = STRING_LIST_INIT_DUP; - int i, res = 0; + int res = 0; struct strbuf commondir = STRBUF_INIT, gitdir = STRBUF_INIT; argc = parse_options(argc, argv, NULL, options, @@ -672,7 +672,7 @@ static int cmd_reconfigure(int argc, const char **argv) git_config(get_scalar_repos, &scalar_repos); - for (i = 0; i < scalar_repos.nr; i++) { + for (size_t i = 0; i < scalar_repos.nr; i++) { int succeeded = 0; struct repository *old_repo, r = { NULL }; const char *dir = scalar_repos.items[i].string; diff --git a/send-pack.c b/send-pack.c index 6677c44e8a..7e83213683 100644 --- a/send-pack.c +++ b/send-pack.c @@ -72,7 +72,6 @@ static int pack_objects(int fd, struct ref *refs, struct oid_array *advertised, */ struct child_process po = CHILD_PROCESS_INIT; FILE *po_in; - int i; int rc; trace2_region_enter("send_pack", "pack_objects", the_repository); @@ -104,9 +103,9 @@ static int pack_objects(int fd, struct ref *refs, struct oid_array *advertised, * parameters by writing to the pipe. */ po_in = xfdopen(po.in, "w"); - for (i = 0; i < advertised->nr; i++) + for (size_t i = 0; i < advertised->nr; i++) feed_object(&advertised->oid[i], po_in, 1); - for (i = 0; i < negotiated->nr; i++) + for (size_t i = 0; i < negotiated->nr; i++) feed_object(&negotiated->oid[i], po_in, 1); while (refs) { diff --git a/sequencer.c b/sequencer.c index 459066e43b..407ee4e90f 100644 --- a/sequencer.c +++ b/sequencer.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "abspath.h" @@ -163,12 +163,11 @@ void protocol_v2_advertise_capabilities(void) { struct strbuf capability = STRBUF_INIT; struct strbuf value = STRBUF_INIT; - int i; /* serve by default supports v2 */ packet_write_fmt(1, "version 2\n"); - for (i = 0; i < ARRAY_SIZE(capabilities); i++) { + for (size_t i = 0; i < ARRAY_SIZE(capabilities); i++) { struct protocol_capability *c = &capabilities[i]; if (c->advertise(the_repository, &value)) { @@ -194,12 +193,10 @@ void protocol_v2_advertise_capabilities(void) static struct protocol_capability *get_capability(const char *key, const char **value) { - int i; - if (!key) return NULL; - for (i = 0; i < ARRAY_SIZE(capabilities); i++) { + for (size_t i = 0; i < ARRAY_SIZE(capabilities); i++) { struct protocol_capability *c = &capabilities[i]; const char *out; if (!skip_prefix(key, c->name, &out)) diff --git a/server-info.c b/server-info.c index c5af4cd98a..ef2f3f4b5c 100644 --- a/server-info.c +++ b/server-info.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "dir.h" @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "abspath.h" @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "hex.h" diff --git a/shared.mak b/shared.mak index 29bebd30d8..1a99848a95 100644 --- a/shared.mak +++ b/shared.mak @@ -116,3 +116,14 @@ endef define libpath_template -L$(1) $(if $(filter-out -L,$(CC_LD_DYNPATH)),$(CC_LD_DYNPATH)$(1)) endef + +# Populate build information into a file via GIT-VERSION-GEN. Requires the +# absolute path to the root source directory as well as input and output files +# as arguments, in that order. +define version_gen +GIT_BUILT_FROM_COMMIT="$(GIT_BUILT_FROM_COMMIT)" \ +GIT_DATE="$(GIT_DATE)" \ +GIT_USER_AGENT="$(GIT_USER_AGENT)" \ +GIT_VERSION="$(GIT_VERSION_OVERRIDE)" \ +$(SHELL_PATH) "$(1)/GIT-VERSION-GEN" "$(1)" "$(2)" "$(3)" +endef diff --git a/sideband.c b/sideband.c index 02805573fa..251e9615ed 100644 --- a/sideband.c +++ b/sideband.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "color.h" diff --git a/sparse-index.c b/sparse-index.c index 2107840bfc..5634abafaa 100644 --- a/sparse-index.c +++ b/sparse-index.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "environment.h" diff --git a/split-index.c b/split-index.c index cfbc773e6c..4c74c4adda 100644 --- a/split-index.c +++ b/split-index.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "gettext.h" @@ -1,3 +1,5 @@ +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "git-compat-util.h" #include "gettext.h" #include "hex-ll.h" diff --git a/string-list.c b/string-list.c index 954569f381..bf061fec56 100644 --- a/string-list.c +++ b/string-list.c @@ -1,3 +1,5 @@ +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "git-compat-util.h" #include "string-list.h" @@ -130,8 +130,7 @@ void strvec_split(struct strvec *array, const char *to_split) void strvec_clear(struct strvec *array) { if (array->v != empty_strvec) { - int i; - for (i = 0; i < array->nr; i++) + for (size_t i = 0; i < array->nr; i++) free((char *)array->v[i]); free(array->v); } diff --git a/submodule-config.c b/submodule-config.c index 9c8c37b259..a25059ed7f 100644 --- a/submodule-config.c +++ b/submodule-config.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "dir.h" diff --git a/submodule.c b/submodule.c index 7ec564854d..b361076c5b 100644 --- a/submodule.c +++ b/submodule.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "abspath.h" @@ -1489,14 +1490,13 @@ struct fetch_task { */ static const struct submodule *get_non_gitmodules_submodule(const char *path) { - struct submodule *ret = NULL; + struct submodule *ret; const char *name = default_name_or_path(path); if (!name) return NULL; - ret = xmalloc(sizeof(*ret)); - memset(ret, 0, sizeof(*ret)); + CALLOC_ARRAY(ret, 1); ret->path = name; ret->name = name; @@ -1536,8 +1536,9 @@ static struct fetch_task *fetch_task_create(struct submodule_parallel_fetch *spf const char *path, const struct object_id *treeish_name) { - struct fetch_task *task = xmalloc(sizeof(*task)); - memset(task, 0, sizeof(*task)); + struct fetch_task *task; + + CALLOC_ARRAY(task, 1); if (validate_submodule_path(path) < 0) exit(128); diff --git a/symlinks.c b/symlinks.c index b29e340c2d..9cc090d42c 100644 --- a/symlinks.c +++ b/symlinks.c @@ -1,3 +1,5 @@ +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "git-compat-util.h" #include "gettext.h" #include "setup.h" diff --git a/t/.gitignore b/t/.gitignore index 91cf5772fe..3e6b0f2cc5 100644 --- a/t/.gitignore +++ b/t/.gitignore @@ -2,4 +2,5 @@ /test-results /.prove /chainlinttmp +/mesontmp /out/ diff --git a/t/Makefile b/t/Makefile index 131ffd778f..daa5fcae86 100644 --- a/t/Makefile +++ b/t/Makefile @@ -59,7 +59,7 @@ CHAINLINTSUPPRESS = GIT_TEST_EXT_CHAIN_LINT=0 && export GIT_TEST_EXT_CHAIN_LINT all:: $(DEFAULT_TEST_TARGET) -test: pre-clean check-chainlint $(TEST_LINT) +test: pre-clean check-chainlint check-meson $(TEST_LINT) $(CHAINLINTSUPPRESS) $(MAKE) aggregate-results-and-cleanup failed: @@ -103,6 +103,7 @@ clean-except-prove-cache: clean-chainlint clean: clean-except-prove-cache $(RM) -r '$(TEST_RESULTS_DIRECTORY_SQ)' + $(RM) -r mesontmp $(RM) .prove clean-chainlint: @@ -114,6 +115,23 @@ check-chainlint: { $(CHAINLINT) --emit-all '$(CHAINLINTTMP_SQ)'/tests >'$(CHAINLINTTMP_SQ)'/actual || true; } && \ diff -u '$(CHAINLINTTMP_SQ)'/expect '$(CHAINLINTTMP_SQ)'/actual +check-meson: + @# awk acts up when trying to match single quotes, so we use \047 instead. + @mkdir -p mesontmp && \ + printf "%s\n" \ + "integration_tests t[0-9][0-9][0-9][0-9]-*.sh" \ + "unit_test_programs unit-tests/t-*.c" \ + "clar_test_suites unit-tests/u-*.c" | \ + while read -r variable pattern; do \ + awk "/^$$variable = \[\$$/ {flag=1 ; next } /^]$$/ { flag=0 } flag { gsub(/^ \047/, \"\"); gsub(/\047,\$$/, \"\"); print }" meson.build >mesontmp/meson.txt && \ + ls $$pattern >mesontmp/actual.txt && \ + if ! cmp mesontmp/meson.txt mesontmp/actual.txt; then \ + echo "Meson tests differ from actual tests:"; \ + diff -u mesontmp/meson.txt mesontmp/actual.txt; \ + exit 1; \ + fi; \ + done + test-lint: test-lint-duplicates test-lint-executable test-lint-shell-syntax \ test-lint-filenames ifneq ($(GIT_TEST_CHAIN_LINT),0) diff --git a/t/helper/test-bloom.c b/t/helper/test-bloom.c index 97541daf71..14e075c1a1 100644 --- a/t/helper/test-bloom.c +++ b/t/helper/test-bloom.c @@ -11,30 +11,25 @@ static struct bloom_filter_settings settings = DEFAULT_BLOOM_FILTER_SETTINGS; static void add_string_to_filter(const char *data, struct bloom_filter *filter) { struct bloom_key key; - int i; fill_bloom_key(data, strlen(data), &key, &settings); printf("Hashes:"); - for (i = 0; i < settings.num_hashes; i++){ + for (size_t i = 0; i < settings.num_hashes; i++) printf("0x%08x|", key.hashes[i]); - } printf("\n"); add_key_to_filter(&key, filter, &settings); clear_bloom_key(&key); } static void print_bloom_filter(struct bloom_filter *filter) { - int i; - if (!filter) { printf("No filter.\n"); return; } printf("Filter_Length:%d\n", (int)filter->len); printf("Filter_Data:"); - for (i = 0; i < filter->len; i++) { + for (size_t i = 0; i < filter->len; i++) printf("%02x|", filter->data[i]); - } printf("\n"); } diff --git a/t/helper/test-cache-tree.c b/t/helper/test-cache-tree.c index 5cdef3ebef..3ae45cec3b 100644 --- a/t/helper/test-cache-tree.c +++ b/t/helper/test-cache-tree.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "test-tool.h" #include "gettext.h" diff --git a/t/helper/test-config.c b/t/helper/test-config.c index 33247f0e92..75e028ab2a 100644 --- a/t/helper/test-config.c +++ b/t/helper/test-config.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "test-tool.h" #include "config.h" diff --git a/t/helper/test-csprng.c b/t/helper/test-csprng.c index 65d14973c5..a4a0aca617 100644 --- a/t/helper/test-csprng.c +++ b/t/helper/test-csprng.c @@ -1,7 +1,6 @@ #include "test-tool.h" #include "git-compat-util.h" - int cmd__csprng(int argc, const char **argv) { unsigned long count; @@ -12,7 +11,7 @@ int cmd__csprng(int argc, const char **argv) return 2; } - count = (argc == 2) ? strtoul(argv[1], NULL, 0) : -1L; + count = (argc == 2) ? strtoul(argv[1], NULL, 0) : ULONG_MAX; while (count) { unsigned long chunk = count < sizeof(buf) ? count : sizeof(buf); diff --git a/t/helper/test-drop-caches.c b/t/helper/test-drop-caches.c index 73e551cfc2..7055d94354 100644 --- a/t/helper/test-drop-caches.c +++ b/t/helper/test-drop-caches.c @@ -1,3 +1,5 @@ +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "test-tool.h" #include "git-compat-util.h" diff --git a/t/helper/test-dump-fsmonitor.c b/t/helper/test-dump-fsmonitor.c index 1b7f37a84f..efd017ca35 100644 --- a/t/helper/test-dump-fsmonitor.c +++ b/t/helper/test-dump-fsmonitor.c @@ -8,7 +8,6 @@ int cmd__dump_fsmonitor(int ac UNUSED, const char **av UNUSED) { struct index_state *istate = the_repository->index; - int i; setup_git_directory(); if (do_read_index(istate, the_repository->index_file, 0) < 0) @@ -19,7 +18,7 @@ int cmd__dump_fsmonitor(int ac UNUSED, const char **av UNUSED) } printf("fsmonitor last update %s\n", istate->fsmonitor_last_update); - for (i = 0; i < istate->cache_nr; i++) + for (size_t i = 0; i < istate->cache_nr; i++) printf((istate->cache[i]->ce_flags & CE_FSMONITOR_VALID) ? "+" : "-"); return 0; diff --git a/t/helper/test-dump-split-index.c b/t/helper/test-dump-split-index.c index a6720faf9c..f855a3862c 100644 --- a/t/helper/test-dump-split-index.c +++ b/t/helper/test-dump-split-index.c @@ -16,7 +16,6 @@ static void show_bit(size_t pos, void *data UNUSED) int cmd__dump_split_index(int ac UNUSED, const char **av) { struct split_index *si; - int i; setup_git_directory(); @@ -28,7 +27,7 @@ int cmd__dump_split_index(int ac UNUSED, const char **av) return 0; } printf("base %s\n", oid_to_hex(&si->base_oid)); - for (i = 0; i < the_repository->index->cache_nr; i++) { + for (size_t i = 0; i < the_repository->index->cache_nr; i++) { struct cache_entry *ce = the_repository->index->cache[i]; printf("%06o %s %d\t%s\n", ce->ce_mode, oid_to_hex(&ce->oid), ce_stage(ce), ce->name); diff --git a/t/helper/test-dump-untracked-cache.c b/t/helper/test-dump-untracked-cache.c index b2e70837a9..01a109496b 100644 --- a/t/helper/test-dump-untracked-cache.c +++ b/t/helper/test-dump-untracked-cache.c @@ -23,7 +23,7 @@ static int compare_dir(const void *a_, const void *b_) static void dump(struct untracked_cache_dir *ucd, struct strbuf *base) { - int i, len; + int len; QSORT(ucd->untracked, ucd->untracked_nr, compare_untracked); QSORT(ucd->dirs, ucd->dirs_nr, compare_dir); len = base->len; @@ -37,9 +37,9 @@ static void dump(struct untracked_cache_dir *ucd, struct strbuf *base) if (ucd->valid) fputs(" valid", stdout); printf("\n"); - for (i = 0; i < ucd->untracked_nr; i++) + for (size_t i = 0; i < ucd->untracked_nr; i++) printf("%s\n", ucd->untracked[i]); - for (i = 0; i < ucd->dirs_nr; i++) + for (size_t i = 0; i < ucd->dirs_nr; i++) dump(ucd->dirs[i], base); strbuf_setlen(base, len); } diff --git a/t/helper/test-genrandom.c b/t/helper/test-genrandom.c index 99b8dc1e2d..51b67f2f87 100644 --- a/t/helper/test-genrandom.c +++ b/t/helper/test-genrandom.c @@ -22,7 +22,7 @@ int cmd__genrandom(int argc, const char **argv) next = next * 11 + *c; } while (*c++); - count = (argc == 3) ? strtoul(argv[2], NULL, 0) : -1L; + count = (argc == 3) ? strtoul(argv[2], NULL, 0) : ULONG_MAX; while (count--) { next = next * 1103515245 + 12345; diff --git a/t/helper/test-genzeros.c b/t/helper/test-genzeros.c index 47af843b68..b895436a32 100644 --- a/t/helper/test-genzeros.c +++ b/t/helper/test-genzeros.c @@ -1,3 +1,5 @@ +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "test-tool.h" #include "git-compat-util.h" diff --git a/t/helper/test-hash-speed.c b/t/helper/test-hash-speed.c index 7de822af51..80df1aae66 100644 --- a/t/helper/test-hash-speed.c +++ b/t/helper/test-hash-speed.c @@ -16,12 +16,11 @@ int cmd__hash_speed(int ac, const char **av) unsigned char hash[GIT_MAX_RAWSZ]; clock_t initial, start, end; unsigned bufsizes[] = { 64, 256, 1024, 8192, 16384 }; - int i; void *p; const struct git_hash_algo *algo = NULL; if (ac == 2) { - for (i = 1; i < GIT_HASH_NALGOS; i++) { + for (size_t i = 1; i < GIT_HASH_NALGOS; i++) { if (!strcmp(av[1], hash_algos[i].name)) { algo = &hash_algos[i]; break; @@ -36,7 +35,7 @@ int cmd__hash_speed(int ac, const char **av) printf("algo: %s\n", algo->name); - for (i = 0; i < ARRAY_SIZE(bufsizes); i++) { + for (size_t i = 0; i < ARRAY_SIZE(bufsizes); i++) { unsigned long j, kb; double kb_per_sec; p = xcalloc(1, bufsizes[i]); diff --git a/t/helper/test-mergesort.c b/t/helper/test-mergesort.c index 328bfe2977..791e128793 100644 --- a/t/helper/test-mergesort.c +++ b/t/helper/test-mergesort.c @@ -1,3 +1,5 @@ +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "test-tool.h" #include "mem-pool.h" #include "mergesort.h" diff --git a/t/helper/test-parse-options.c b/t/helper/test-parse-options.c index 5da359486c..bfe45ec68b 100644 --- a/t/helper/test-parse-options.c +++ b/t/helper/test-parse-options.c @@ -174,7 +174,6 @@ int cmd__parse_options(int argc, const char **argv) OPT_ALIAS('Z', "alias-target", "alias-source"), OPT_END(), }; - int i; int ret = 0; trace2_cmd_name("_parse_"); @@ -198,10 +197,10 @@ int cmd__parse_options(int argc, const char **argv) show(&expect, &ret, "dry run: %s", dry_run ? "yes" : "no"); show(&expect, &ret, "file: %s", file ? file : "(not set)"); - for (i = 0; i < list.nr; i++) + for (size_t i = 0; i < list.nr; i++) show(&expect, &ret, "list: %s", list.items[i].string); - for (i = 0; i < argc; i++) + for (int i = 0; i < argc; i++) show(&expect, &ret, "arg %02d: %s", i, argv[i]); expect.strdup_strings = 1; diff --git a/t/helper/test-path-utils.c b/t/helper/test-path-utils.c index 3129aa28fd..72ac8d1b1b 100644 --- a/t/helper/test-path-utils.c +++ b/t/helper/test-path-utils.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "test-tool.h" #include "abspath.h" diff --git a/t/helper/test-reach.c b/t/helper/test-reach.c index 84deee604a..01cf77ae65 100644 --- a/t/helper/test-reach.c +++ b/t/helper/test-reach.c @@ -13,7 +13,6 @@ static void print_sorted_commit_ids(struct commit_list *list) { - int i; struct string_list s = STRING_LIST_INIT_DUP; while (list) { @@ -23,7 +22,7 @@ static void print_sorted_commit_ids(struct commit_list *list) string_list_sort(&s); - for (i = 0; i < s.nr; i++) + for (size_t i = 0; i < s.nr; i++) printf("%s\n", s.items[i].string); string_list_clear(&s, 0); diff --git a/t/helper/test-ref-store.c b/t/helper/test-ref-store.c index 240f6fc29d..1cc05f043a 100644 --- a/t/helper/test-ref-store.c +++ b/t/helper/test-ref-store.c @@ -24,14 +24,13 @@ struct flag_definition { static unsigned int parse_flags(const char *str, struct flag_definition *defs) { struct string_list masks = STRING_LIST_INIT_DUP; - int i = 0; unsigned int result = 0; if (!strcmp(str, "0")) return 0; string_list_split(&masks, str, ',', 64); - for (; i < masks.nr; i++) { + for (size_t i = 0; i < masks.nr; i++) { const char *name = masks.items[i].string; struct flag_definition *def = defs; int found = 0; diff --git a/t/helper/test-run-command.c b/t/helper/test-run-command.c index 61eb1175fe..3719f23cc2 100644 --- a/t/helper/test-run-command.c +++ b/t/helper/test-run-command.c @@ -8,6 +8,8 @@ * published by the Free Software Foundation. */ +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "test-tool.h" #include "run-command.h" #include "strvec.h" diff --git a/t/helper/test-string-list.c b/t/helper/test-string-list.c index e2aad611d1..6f10c5a435 100644 --- a/t/helper/test-string-list.c +++ b/t/helper/test-string-list.c @@ -1,3 +1,5 @@ +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "test-tool.h" #include "strbuf.h" #include "string-list.h" diff --git a/t/helper/test-tool.c b/t/helper/test-tool.c index 1ebb69a5dc..4a7aa993ba 100644 --- a/t/helper/test-tool.c +++ b/t/helper/test-tool.c @@ -101,7 +101,6 @@ static NORETURN void die_usage(void) int cmd_main(int argc, const char **argv) { - int i; const char *working_directory = NULL; struct option options[] = { OPT_STRING('C', NULL, &working_directory, "directory", @@ -120,7 +119,7 @@ int cmd_main(int argc, const char **argv) if (working_directory && chdir(working_directory) < 0) die("Could not cd to '%s'", working_directory); - for (i = 0; i < ARRAY_SIZE(cmds); i++) { + for (size_t i = 0; i < ARRAY_SIZE(cmds); i++) { if (!strcmp(cmds[i].name, argv[1])) { argv++; argc--; diff --git a/t/helper/test-trace2.c b/t/helper/test-trace2.c index c588c273ce..415df078c1 100644 --- a/t/helper/test-trace2.c +++ b/t/helper/test-trace2.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "test-tool.h" #include "strvec.h" diff --git a/t/lib-gitweb.sh b/t/lib-gitweb.sh index 7f9808ec20..a6e3dd11b3 100644 --- a/t/lib-gitweb.sh +++ b/t/lib-gitweb.sh @@ -105,6 +105,11 @@ if ! test_have_prereq PERL; then test_done fi +if ! test_have_prereq GITWEB; then + skip_all='skipping gitweb tests, gitweb not available' + test_done +fi + perl -MEncode -e '$e="";decode_utf8($e, Encode::FB_CROAK)' >/dev/null 2>&1 || { skip_all='skipping gitweb tests, perl version is too old' test_done diff --git a/t/meson.build b/t/meson.build index 13fe854ba0..602ebfe6a2 100644 --- a/t/meson.build +++ b/t/meson.build @@ -1,6 +1,6 @@ clar_test_suites = [ - 'unit-tests/ctype.c', - 'unit-tests/strvec.c', + 'unit-tests/u-ctype.c', + 'unit-tests/u-strvec.c', ] clar_sources = [ @@ -1092,6 +1092,42 @@ integration_tests = [ 't9903-bash-prompt.sh', ] +# Sanity check that we are not missing any tests present in 't/'. This check +# only runs once at configure time and is thus best-effort, only. It is +# sufficient to catch missing test suites in our CI though. +foreach glob, tests : { + 't[0-9][0-9][0-9][0-9]-*.sh': integration_tests, + 'unit-tests/t-*.c': unit_test_programs, + 'unit-tests/u-*.c': clar_test_suites, +} + actual_tests = run_command(shell, '-c', 'ls ' + glob, + check: true, + env: script_environment, + ).stdout().strip().split('\n') + + if tests != actual_tests + missing_tests = [ ] + foreach actual_test : actual_tests + if actual_test not in tests + missing_tests += actual_test + endif + endforeach + if missing_tests.length() > 0 + error('Test files found, but not configured:\n\n - ' + '\n - '.join(missing_tests)) + endif + + superfluous_tests = [ ] + foreach integration_test : tests + if integration_test not in actual_tests + superfluous_tests += integration_test + endif + endforeach + if superfluous_tests.length() > 0 + error('Test files configured, but not found:\n\n - ' + '\n - '.join(superfluous_tests)) + endif + endif +endforeach + # GIT_BUILD_DIR needs to be Unix-style without drive prefixes as it get added # to the PATH variable. And given that drive prefixes contain a colon we'd # otherwise end up with a broken PATH if we didn't convert it. diff --git a/t/t1460-refs-migrate.sh b/t/t1460-refs-migrate.sh index 1bfff3a7af..f59bc4860f 100755 --- a/t/t1460-refs-migrate.sh +++ b/t/t1460-refs-migrate.sh @@ -7,23 +7,44 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME . ./test-lib.sh +# Migrate the provided repository from one format to the other and +# verify that the references and logs are migrated over correctly. +# Usage: test_migration <repo> <format> <skip_reflog_verify> +# <repo> is the relative path to the repo to be migrated. +# <format> is the ref format to be migrated to. +# <skip_reflog_verify> (true or false) whether to skip reflog verification. test_migration () { - git -C "$1" for-each-ref --include-root-refs \ + repo=$1 && + format=$2 && + skip_reflog_verify=${3:-false} && + git -C "$repo" for-each-ref --include-root-refs \ --format='%(refname) %(objectname) %(symref)' >expect && - git -C "$1" refs migrate --ref-format="$2" && - git -C "$1" for-each-ref --include-root-refs \ + if ! $skip_reflog_verify + then + git -C "$repo" reflog --all >expect_logs && + git -C "$repo" reflog list >expect_log_list + fi && + + git -C "$repo" refs migrate --ref-format="$2" && + + git -C "$repo" for-each-ref --include-root-refs \ --format='%(refname) %(objectname) %(symref)' >actual && test_cmp expect actual && + if ! $skip_reflog_verify + then + git -C "$repo" reflog --all >actual_logs && + git -C "$repo" reflog list >actual_log_list && + test_cmp expect_logs actual_logs && + test_cmp expect_log_list actual_log_list + fi && - git -C "$1" rev-parse --show-ref-format >actual && - echo "$2" >expect && + git -C "$repo" rev-parse --show-ref-format >actual && + echo "$format" >expect && test_cmp expect actual } test_expect_success 'setup' ' - rm -rf .git && - # The migration does not yet support reflogs. - git config --global core.logAllRefUpdates false + rm -rf .git ' test_expect_success "superfluous arguments" ' @@ -78,19 +99,6 @@ do test_cmp expect err ' - test_expect_success "$from_format -> $to_format: migration with reflog fails" ' - test_when_finished "rm -rf repo" && - git init --ref-format=$from_format repo && - test_config -C repo core.logAllRefUpdates true && - test_commit -C repo logged && - test_must_fail git -C repo refs migrate \ - --ref-format=$to_format 2>err && - cat >expect <<-EOF && - error: migrating reflogs is not supported yet - EOF - test_cmp expect err - ' - test_expect_success "$from_format -> $to_format: migration with worktree fails" ' test_when_finished "rm -rf repo" && git init --ref-format=$from_format repo && @@ -141,7 +149,7 @@ do test_commit -C repo initial && test-tool -C repo ref-store main update-ref "" refs/heads/broken \ "$(test_oid 001)" "$ZERO_OID" REF_SKIP_CREATE_REFLOG,REF_SKIP_OID_VERIFICATION && - test_migration repo "$to_format" && + test_migration repo "$to_format" true && test_oid 001 >expect && git -C repo rev-parse refs/heads/broken >actual && test_cmp expect actual @@ -195,6 +203,27 @@ do git -C repo rev-parse --show-ref-format >actual && test_cmp expect actual ' + + test_expect_success "$from_format -> $to_format: reflogs of symrefs with target deleted" ' + test_when_finished "rm -rf repo" && + git init --ref-format=$from_format repo && + test_commit -C repo initial && + git -C repo branch branch-1 HEAD && + git -C repo symbolic-ref refs/heads/symref refs/heads/branch-1 && + cat >input <<-EOF && + delete refs/heads/branch-1 + EOF + git -C repo update-ref --stdin <input && + test_migration repo "$to_format" + ' + + test_expect_success "$from_format -> $to_format: reflogs order is retained" ' + test_when_finished "rm -rf repo" && + git init --ref-format=$from_format repo && + test_commit --date "100005000 +0700" --no-tag -C repo initial && + test_commit --date "100003000 +0700" --no-tag -C repo second && + test_migration repo "$to_format" + ' done done diff --git a/t/t3206-range-diff.sh b/t/t3206-range-diff.sh index d2ca43d6aa..e091df6d01 100755 --- a/t/t3206-range-diff.sh +++ b/t/t3206-range-diff.sh @@ -908,4 +908,20 @@ test_expect_success 'submodule changes are shown irrespective of diff.submodule' test_cmp expect actual ' +test_expect_success '--diff-merges' ' + renamed_oid=$(git rev-parse --short renamed-file) && + tree=$(git merge-tree unmodified renamed-file) && + clean=$(git commit-tree -m merge -p unmodified -p renamed-file $tree) && + clean_oid=$(git rev-parse --short $clean) && + conflict=$(git commit-tree -m merge -p unmodified -p renamed-file^ $tree) && + conflict_oid=$(git rev-parse --short $conflict) && + + git range-diff --diff-merges=1 $clean...$conflict >actual && + cat >expect <<-EOF && + 1: $renamed_oid < -: ------- s/12/B/ + 2: $clean_oid = 1: $conflict_oid merge + EOF + test_cmp expect actual +' + test_done diff --git a/t/t4069-remerge-diff.sh b/t/t4069-remerge-diff.sh index ca8f999cab..c6c94aef14 100755 --- a/t/t4069-remerge-diff.sh +++ b/t/t4069-remerge-diff.sh @@ -352,4 +352,11 @@ test_expect_success 'remerge-diff turns off history simplification' ' test_cmp expect actual ' +test_expect_success 'remerge-diff with --reverse' ' + git log -1 --remerge-diff --oneline ab_resolution^ >expect && + git log -1 --remerge-diff --oneline ab_resolution >>expect && + git log -2 --remerge-diff --oneline ab_resolution --reverse >actual && + test_cmp expect actual +' + test_done diff --git a/t/t4207-log-decoration-colors.sh b/t/t4207-log-decoration-colors.sh index 0614511656..2e83cc820a 100755 --- a/t/t4207-log-decoration-colors.sh +++ b/t/t4207-log-decoration-colors.sh @@ -58,7 +58,8 @@ ${c_reset}${c_tag}tag: ${c_reset}${c_tag}v1.0${c_reset}${c_commit}, \ ${c_reset}${c_tag}tag: ${c_reset}${c_tag}B${c_reset}${c_commit})${c_reset} B ${c_commit}COMMIT_ID${c_reset}${c_commit} (${c_reset}\ ${c_tag}tag: ${c_reset}${c_tag}A1${c_reset}${c_commit}, \ -${c_reset}${c_remoteBranch}other/main${c_reset}${c_commit})${c_reset} A1 +${c_reset}${c_remoteBranch}other/main${c_reset}${c_commit}, \ +${c_reset}${c_remoteBranch}other/HEAD${c_reset}${c_commit})${c_reset} A1 ${c_commit}COMMIT_ID${c_reset}${c_commit} (${c_reset}\ ${c_stash}refs/stash${c_reset}${c_commit})${c_reset} On main: Changes to A.t ${c_commit}COMMIT_ID${c_reset}${c_commit} (${c_reset}\ diff --git a/t/t5300-pack-object.sh b/t/t5300-pack-object.sh index 53dc3cbf90..d1d6248558 100755 --- a/t/t5300-pack-object.sh +++ b/t/t5300-pack-object.sh @@ -525,6 +525,24 @@ test_expect_success 'index-pack --strict <pack> works in non-repo' ' test_path_is_file foo.idx ' +test_expect_success SHA1 'show-index works OK outside a repository' ' + nongit git show-index <foo.idx +' + +for hash in sha1 sha256 +do + test_expect_success 'show-index works OK outside a repository with hash algo passed in via --object-format' ' + test_when_finished "rm -rf explicit-hash-$hash" && + git init --object-format=$hash explicit-hash-$hash && + test_commit -C explicit-hash-$hash one && + git -C explicit-hash-$hash rev-parse one >in && + git -C explicit-hash-$hash pack-objects explicit-hash-$hash <in && + idx=$(echo explicit-hash-$hash/explicit-hash-$hash*.idx) && + nongit git show-index --object-format=$hash <"$idx" >actual && + test_line_count = 1 actual + ' +done + test_expect_success !PTHREADS,!FAIL_PREREQS \ 'index-pack --threads=N or pack.threads=N warns when no pthreads' ' test_must_fail git index-pack --threads=2 2>err && diff --git a/t/t5505-remote.sh b/t/t5505-remote.sh index 08424e878e..519f7973e3 100755 --- a/t/t5505-remote.sh +++ b/t/t5505-remote.sh @@ -2,6 +2,9 @@ test_description='git remote porcelain-ish' +GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main +export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME + . ./test-lib.sh setup_repository () { @@ -70,7 +73,7 @@ test_expect_success 'add another remote' ' cd test && git remote add -f second ../two && tokens_match "origin second" "$(git remote)" && - check_tracking_branch second main side another && + check_tracking_branch second main side another HEAD && git for-each-ref "--format=%(refname)" refs/remotes | sed -e "/^refs\/remotes\/origin\//d" \ -e "/^refs\/remotes\/second\//d" >actual && @@ -428,16 +431,90 @@ test_expect_success 'set-head --auto' ' ) ' +test_expect_success REFFILES 'set-head --auto failure' ' + test_when_finished "rm -f test/.git/refs/remotes/origin/HEAD.lock" && + ( + cd test && + touch .git/refs/remotes/origin/HEAD.lock && + test_must_fail git remote set-head --auto origin 2>err && + tail -n1 err >output && + echo "error: Could not set up refs/remotes/origin/HEAD" >expect && + test_cmp expect output + ) +' + +test_expect_success 'set-head --auto detects creation' ' + ( + cd test && + git update-ref --no-deref -d refs/remotes/origin/HEAD && + git remote set-head --auto origin >output && + echo "${SQ}origin/HEAD${SQ} is now created and points to ${SQ}main${SQ}" >expect && + test_cmp expect output + ) +' + +test_expect_success 'set-head --auto to update a non symbolic ref' ' + ( + cd test && + git update-ref --no-deref -d refs/remotes/origin/HEAD && + git update-ref refs/remotes/origin/HEAD HEAD && + HEAD=$(git log --pretty="%H") && + git remote set-head --auto origin >output && + echo "${SQ}origin/HEAD${SQ} was detached at ${SQ}${HEAD}${SQ} and now points to ${SQ}main${SQ}" >expect && + test_cmp expect output + ) +' + +test_expect_success 'set-head --auto detects no change' ' + ( + cd test && + git remote set-head --auto origin >output && + echo "${SQ}origin/HEAD${SQ} is unchanged and points to ${SQ}main${SQ}" >expect && + test_cmp expect output + ) +' + +test_expect_success 'set-head --auto detects change' ' + ( + cd test && + git symbolic-ref refs/remotes/origin/HEAD refs/remotes/origin/ahead && + git remote set-head --auto origin >output && + echo "${SQ}origin/HEAD${SQ} has changed from ${SQ}ahead${SQ} and now points to ${SQ}main${SQ}" >expect && + test_cmp expect output + ) +' + +test_expect_success 'set-head --auto detects strange ref' ' + ( + cd test && + git symbolic-ref refs/remotes/origin/HEAD refs/heads/main && + git remote set-head --auto origin >output && + echo "${SQ}origin/HEAD${SQ} used to point to ${SQ}refs/heads/main${SQ} (which is not a remote branch), but now points to ${SQ}main${SQ}" >expect && + test_cmp expect output + ) +' + test_expect_success 'set-head --auto has no problem w/multiple HEADs' ' ( cd test && git fetch two "refs/heads/*:refs/remotes/two/*" && git remote set-head --auto two >output 2>&1 && - echo "two/HEAD set to main" >expect && + echo "${SQ}two/HEAD${SQ} is unchanged and points to ${SQ}main${SQ}" >expect && test_cmp expect output ) ' +test_expect_success 'set-head changes followRemoteHEAD always to warn' ' + ( + cd test && + git config set remote.origin.followRemoteHEAD "always" && + git remote set-head --auto origin && + git config get remote.origin.followRemoteHEAD >actual && + echo "warn" >expect && + test_cmp expect actual + ) +' + cat >test/expect <<\EOF refs/remotes/origin/side2 EOF @@ -452,6 +529,16 @@ test_expect_success 'set-head explicit' ' ) ' +test_expect_success 'set-head --auto reports change' ' + ( + cd test && + git remote set-head origin side2 && + git remote set-head --auto origin >output 2>&1 && + echo "${SQ}origin/HEAD${SQ} has changed from ${SQ}side2${SQ} and now points to ${SQ}main${SQ}" >expect && + test_cmp expect output + ) +' + cat >test/expect <<EOF Pruning origin URL: $(pwd)/one @@ -492,6 +579,16 @@ test_expect_success 'add --mirror && prune' ' ) ' +test_expect_success 'add --mirror setting HEAD' ' + mkdir headmirror && + ( + cd headmirror && + git init --bare -b notmain && + git remote add --mirror -f origin ../one && + test "$(git symbolic-ref HEAD)" = "refs/heads/main" + ) +' + test_expect_success 'add --mirror=fetch' ' mkdir mirror-fetch && git init -b main mirror-fetch/parent && @@ -711,8 +808,10 @@ test_expect_success 'reject --no-no-tags' ' ' cat >one/expect <<\EOF + apis/HEAD -> apis/main apis/main apis/side + drosophila/HEAD -> drosophila/main drosophila/another drosophila/main drosophila/side @@ -730,11 +829,14 @@ test_expect_success 'update' ' ' cat >one/expect <<\EOF + drosophila/HEAD -> drosophila/main drosophila/another drosophila/main drosophila/side + manduca/HEAD -> manduca/main manduca/main manduca/side + megaloprepus/HEAD -> megaloprepus/main megaloprepus/main megaloprepus/side EOF @@ -742,7 +844,7 @@ EOF test_expect_success 'update with arguments' ' ( cd one && - for b in $(git branch -r) + for b in $(git branch -r | grep -v HEAD) do git branch -r -d $b || exit 1 done && @@ -774,10 +876,13 @@ test_expect_success 'update --prune' ' ' cat >one/expect <<-\EOF + apis/HEAD -> apis/main apis/main apis/side + manduca/HEAD -> manduca/main manduca/main manduca/side + megaloprepus/HEAD -> megaloprepus/main megaloprepus/main megaloprepus/side EOF @@ -785,7 +890,7 @@ EOF test_expect_success 'update default' ' ( cd one && - for b in $(git branch -r) + for b in $(git branch -r | grep -v HEAD) do git branch -r -d $b || exit 1 done && @@ -797,6 +902,7 @@ test_expect_success 'update default' ' ' cat >one/expect <<\EOF + drosophila/HEAD -> drosophila/main drosophila/another drosophila/main drosophila/side @@ -805,7 +911,7 @@ EOF test_expect_success 'update default (overridden, with funny whitespace)' ' ( cd one && - for b in $(git branch -r) + for b in $(git branch -r | grep -v HEAD) do git branch -r -d $b || exit 1 done && @@ -819,7 +925,7 @@ test_expect_success 'update default (overridden, with funny whitespace)' ' test_expect_success 'update (with remotes.default defined)' ' ( cd one && - for b in $(git branch -r) + for b in $(git branch -r | grep -v HEAD) do git branch -r -d $b || exit 1 done && diff --git a/t/t5510-fetch.sh b/t/t5510-fetch.sh index 3b3991ab86..2d9587059f 100755 --- a/t/t5510-fetch.sh +++ b/t/t5510-fetch.sh @@ -74,6 +74,168 @@ test_expect_success "fetch test for-merge" ' cut -f -2 .git/FETCH_HEAD >actual && test_cmp expected actual' +test_expect_success "fetch test remote HEAD" ' + cd "$D" && + cd two && + git fetch && + git rev-parse --verify refs/remotes/origin/HEAD && + git rev-parse --verify refs/remotes/origin/main && + head=$(git rev-parse refs/remotes/origin/HEAD) && + branch=$(git rev-parse refs/remotes/origin/main) && + test "z$head" = "z$branch"' + +test_expect_success "fetch test remote HEAD change" ' + cd "$D" && + cd two && + git switch -c other && + git push -u origin other && + git rev-parse --verify refs/remotes/origin/HEAD && + git rev-parse --verify refs/remotes/origin/main && + git rev-parse --verify refs/remotes/origin/other && + git remote set-head origin other && + git fetch && + head=$(git rev-parse refs/remotes/origin/HEAD) && + branch=$(git rev-parse refs/remotes/origin/other) && + test "z$head" = "z$branch"' + +test_expect_success "fetch test followRemoteHEAD never" ' + test_when_finished "git config unset remote.origin.followRemoteHEAD" && + ( + cd "$D" && + cd two && + git update-ref --no-deref -d refs/remotes/origin/HEAD && + git config set remote.origin.followRemoteHEAD "never" && + git fetch && + test_must_fail git rev-parse --verify refs/remotes/origin/HEAD + ) +' + +test_expect_success "fetch test followRemoteHEAD warn no change" ' + test_when_finished "git config unset remote.origin.followRemoteHEAD" && + ( + cd "$D" && + cd two && + git rev-parse --verify refs/remotes/origin/other && + git remote set-head origin other && + git rev-parse --verify refs/remotes/origin/HEAD && + git rev-parse --verify refs/remotes/origin/main && + git config set remote.origin.followRemoteHEAD "warn" && + git fetch >output && + echo "${SQ}HEAD${SQ} at ${SQ}origin${SQ} is ${SQ}main${SQ}," \ + "but we have ${SQ}other${SQ} locally." >expect && + test_cmp expect output && + head=$(git rev-parse refs/remotes/origin/HEAD) && + branch=$(git rev-parse refs/remotes/origin/other) && + test "z$head" = "z$branch" + ) +' + +test_expect_success "fetch test followRemoteHEAD warn create" ' + test_when_finished "git config unset remote.origin.followRemoteHEAD" && + ( + cd "$D" && + cd two && + git update-ref --no-deref -d refs/remotes/origin/HEAD && + git config set remote.origin.followRemoteHEAD "warn" && + git rev-parse --verify refs/remotes/origin/main && + output=$(git fetch) && + test "z" = "z$output" && + head=$(git rev-parse refs/remotes/origin/HEAD) && + branch=$(git rev-parse refs/remotes/origin/main) && + test "z$head" = "z$branch" + ) +' + +test_expect_success "fetch test followRemoteHEAD warn detached" ' + test_when_finished "git config unset remote.origin.followRemoteHEAD" && + ( + cd "$D" && + cd two && + git update-ref --no-deref -d refs/remotes/origin/HEAD && + git update-ref refs/remotes/origin/HEAD HEAD && + HEAD=$(git log --pretty="%H") && + git config set remote.origin.followRemoteHEAD "warn" && + git fetch >output && + echo "${SQ}HEAD${SQ} at ${SQ}origin${SQ} is ${SQ}main${SQ}," \ + "but we have a detached HEAD pointing to" \ + "${SQ}${HEAD}${SQ} locally." >expect && + test_cmp expect output + ) +' + +test_expect_success "fetch test followRemoteHEAD warn quiet" ' + test_when_finished "git config unset remote.origin.followRemoteHEAD" && + ( + cd "$D" && + cd two && + git rev-parse --verify refs/remotes/origin/other && + git remote set-head origin other && + git rev-parse --verify refs/remotes/origin/HEAD && + git rev-parse --verify refs/remotes/origin/main && + git config set remote.origin.followRemoteHEAD "warn" && + output=$(git fetch --quiet) && + test "z" = "z$output" && + head=$(git rev-parse refs/remotes/origin/HEAD) && + branch=$(git rev-parse refs/remotes/origin/other) && + test "z$head" = "z$branch" + ) +' + +test_expect_success "fetch test followRemoteHEAD warn-if-not-branch branch is same" ' + test_when_finished "git config unset remote.origin.followRemoteHEAD" && + ( + cd "$D" && + cd two && + git rev-parse --verify refs/remotes/origin/other && + git remote set-head origin other && + git rev-parse --verify refs/remotes/origin/HEAD && + git rev-parse --verify refs/remotes/origin/main && + git config set remote.origin.followRemoteHEAD "warn-if-not-main" && + actual=$(git fetch) && + test "z" = "z$actual" && + head=$(git rev-parse refs/remotes/origin/HEAD) && + branch=$(git rev-parse refs/remotes/origin/other) && + test "z$head" = "z$branch" + ) +' + +test_expect_success "fetch test followRemoteHEAD warn-if-not-branch branch is different" ' + test_when_finished "git config unset remote.origin.followRemoteHEAD" && + ( + cd "$D" && + cd two && + git rev-parse --verify refs/remotes/origin/other && + git remote set-head origin other && + git rev-parse --verify refs/remotes/origin/HEAD && + git rev-parse --verify refs/remotes/origin/main && + git config set remote.origin.followRemoteHEAD "warn-if-not-some/different-branch" && + git fetch >actual && + echo "${SQ}HEAD${SQ} at ${SQ}origin${SQ} is ${SQ}main${SQ}," \ + "but we have ${SQ}other${SQ} locally." >expect && + test_cmp expect actual && + head=$(git rev-parse refs/remotes/origin/HEAD) && + branch=$(git rev-parse refs/remotes/origin/other) && + test "z$head" = "z$branch" + ) +' + +test_expect_success "fetch test followRemoteHEAD always" ' + test_when_finished "git config unset remote.origin.followRemoteHEAD" && + ( + cd "$D" && + cd two && + git rev-parse --verify refs/remotes/origin/other && + git remote set-head origin other && + git rev-parse --verify refs/remotes/origin/HEAD && + git rev-parse --verify refs/remotes/origin/main && + git config set remote.origin.followRemoteHEAD "always" && + git fetch && + head=$(git rev-parse refs/remotes/origin/HEAD) && + branch=$(git rev-parse refs/remotes/origin/main) && + test "z$head" = "z$branch" + ) +' + test_expect_success 'fetch --prune on its own works as expected' ' cd "$D" && git clone . prune && @@ -164,6 +326,23 @@ test_expect_success 'fetch --prune --tags with refspec prunes based on refspec' git rev-parse sometag ' +test_expect_success 'fetch --tags gets tags even without a configured remote' ' + REMOTE="$(pwd)/test_tag_1" && + git init test_tag_1 && + ( + cd test_tag_1 && + test_commit foo + ) && + git init test_tag_2 && + ( + cd test_tag_2 && + git fetch --tags "file://$REMOTE" && + echo "foo" >expect && + git tag >actual && + test_cmp expect actual + ) +' + test_expect_success REFFILES 'fetch --prune fails to delete branches' ' cd "$D" && git clone . prune-fail && diff --git a/t/t5512-ls-remote.sh b/t/t5512-ls-remote.sh index 3a67992a7d..5930f55186 100755 --- a/t/t5512-ls-remote.sh +++ b/t/t5512-ls-remote.sh @@ -292,6 +292,8 @@ test_expect_success 'ls-remote with filtered symref (refname)' ' cat >expect <<-EOF && ref: refs/heads/main HEAD $rev HEAD + ref: refs/remotes/origin/main refs/remotes/origin/HEAD + $rev refs/remotes/origin/HEAD EOF git ls-remote --symref . HEAD >actual && test_cmp expect actual diff --git a/t/t5514-fetch-multiple.sh b/t/t5514-fetch-multiple.sh index 25772c85c5..523aff6268 100755 --- a/t/t5514-fetch-multiple.sh +++ b/t/t5514-fetch-multiple.sh @@ -44,14 +44,17 @@ test_expect_success setup ' ' cat > test/expect << EOF + one/HEAD -> one/main one/main one/side origin/HEAD -> origin/main origin/main origin/side + three/HEAD -> three/main three/another three/main three/side + two/HEAD -> two/main two/another two/main two/side @@ -96,6 +99,7 @@ cat > expect << EOF origin/HEAD -> origin/main origin/main origin/side + three/HEAD -> three/main three/another three/main three/side @@ -111,8 +115,10 @@ test_expect_success 'git fetch --multiple (but only one remote)' ' ' cat > expect << EOF + one/HEAD -> one/main one/main one/side + two/HEAD -> two/main two/another two/main two/side @@ -140,7 +146,7 @@ test_expect_success 'git fetch --multiple (bad remote names)' ' test_expect_success 'git fetch --all (skipFetchAll)' ' (cd test4 && - for b in $(git branch -r) + for b in $(git branch -r | grep -v HEAD) do git branch -r -d $b || exit 1 done && @@ -152,11 +158,14 @@ test_expect_success 'git fetch --all (skipFetchAll)' ' ' cat > expect << EOF + one/HEAD -> one/main one/main one/side + three/HEAD -> three/main three/another three/main three/side + two/HEAD -> two/main two/another two/main two/side @@ -164,7 +173,7 @@ EOF test_expect_success 'git fetch --multiple (ignoring skipFetchAll)' ' (cd test4 && - for b in $(git branch -r) + for b in $(git branch -r | grep -v HEAD) do git branch -r -d $b || exit 1 done && @@ -220,14 +229,17 @@ test_expect_success 'git fetch --multiple --jobs=0 picks a default' ' create_fetch_all_expect () { cat >expect <<-\EOF + one/HEAD -> one/main one/main one/side origin/HEAD -> origin/main origin/main origin/side + three/HEAD -> three/main three/another three/main three/side + two/HEAD -> two/main two/another two/main two/side @@ -264,6 +276,7 @@ test_expect_success 'git fetch (fetch all remotes with fetch.all = true)' ' create_fetch_one_expect () { cat >expect <<-\EOF + one/HEAD -> one/main one/main one/side origin/HEAD -> origin/main diff --git a/t/t5516-fetch-push.sh b/t/t5516-fetch-push.sh index 9d693eb57f..041d7d806f 100755 --- a/t/t5516-fetch-push.sh +++ b/t/t5516-fetch-push.sh @@ -1394,7 +1394,8 @@ test_expect_success 'fetch follows tags by default' ' git tag -m "annotated" tag && git for-each-ref >tmp1 && sed -n "p; s|refs/heads/main$|refs/remotes/origin/main|p" tmp1 | - sort -k 3 >../expect + sed -n "p; s|refs/heads/main$|refs/remotes/origin/HEAD|p" | + sort -k 4 >../expect ) && test_when_finished "rm -rf dst" && git init dst && diff --git a/t/t5527-fetch-odd-refs.sh b/t/t5527-fetch-odd-refs.sh index e2770e4541..0de8eb5b6f 100755 --- a/t/t5527-fetch-odd-refs.sh +++ b/t/t5527-fetch-odd-refs.sh @@ -51,7 +51,8 @@ test_expect_success LONG_REF 'fetch handles extremely long refname' ' long main EOF - git for-each-ref --format="%(subject)" refs/remotes/long >actual && + git for-each-ref --format="%(subject)" refs/remotes/long \ + --exclude=refs/remotes/long/HEAD >actual && test_cmp expect actual ' diff --git a/t/t6020-bundle-misc.sh b/t/t6020-bundle-misc.sh index 5d444bfe20..4ce62feaa2 100755 --- a/t/t6020-bundle-misc.sh +++ b/t/t6020-bundle-misc.sh @@ -504,6 +504,50 @@ test_expect_success 'unfiltered bundle with --objects' ' test_cmp expect actual ' +test_expect_success 'full bundle upto annotated tag' ' + git bundle create v2.bdl \ + v2 && + + git bundle verify v2.bdl | + make_user_friendly_and_stable_output >actual && + + format_and_save_expect <<-EOF && + The bundle contains this ref: + <TAG-2> refs/tags/v2 + The bundle records a complete history. + $HASH_MESSAGE + EOF + test_cmp expect actual +' + +test_expect_success 'clone from full bundle upto annotated tag' ' + git clone --mirror v2.bdl tag-clone.git && + git -C tag-clone.git show-ref | + make_user_friendly_and_stable_output >actual && + cat >expect <<-\EOF && + <TAG-2> refs/tags/v2 + EOF + test_cmp expect actual +' + +test_expect_success 'incremental bundle between two annotated tags' ' + git bundle create v1-v2.bdl \ + v1..v2 && + + git bundle verify v1-v2.bdl | + make_user_friendly_and_stable_output >actual && + + format_and_save_expect <<-EOF && + The bundle contains this ref: + <TAG-2> refs/tags/v2 + The bundle requires these 2 refs: + <COMMIT-E> Z + <COMMIT-B> Z + $HASH_MESSAGE + EOF + test_cmp expect actual +' + for filter in "blob:none" "tree:0" "tree:1" "blob:limit=100" do test_expect_success "filtered bundle: $filter" ' diff --git a/t/t7611-merge-abort.sh b/t/t7611-merge-abort.sh index d6975ca48d..1a251485e1 100755 --- a/t/t7611-merge-abort.sh +++ b/t/t7611-merge-abort.sh @@ -54,13 +54,13 @@ test_expect_success 'fails without MERGE_HEAD (unstarted merge)' ' ' test_expect_success 'fails without MERGE_HEAD (unstarted merge): .git/MERGE_HEAD sanity' ' - test ! -f .git/MERGE_HEAD && + test_path_is_missing .git/MERGE_HEAD && test "$pre_merge_head" = "$(git rev-parse HEAD)" ' test_expect_success 'fails without MERGE_HEAD (completed merge)' ' git merge clean_branch && - test ! -f .git/MERGE_HEAD && + test_path_is_missing .git/MERGE_HEAD && # Merge successfully completed post_merge_head="$(git rev-parse HEAD)" && test_must_fail git merge --abort 2>output && @@ -68,7 +68,7 @@ test_expect_success 'fails without MERGE_HEAD (completed merge)' ' ' test_expect_success 'fails without MERGE_HEAD (completed merge): .git/MERGE_HEAD sanity' ' - test ! -f .git/MERGE_HEAD && + test_path_is_missing .git/MERGE_HEAD && test "$post_merge_head" = "$(git rev-parse HEAD)" ' @@ -79,10 +79,10 @@ test_expect_success 'Forget previous merge' ' test_expect_success 'Abort after --no-commit' ' # Redo merge, but stop before creating merge commit git merge --no-commit clean_branch && - test -f .git/MERGE_HEAD && + test_path_is_file .git/MERGE_HEAD && # Abort non-conflicting merge git merge --abort && - test ! -f .git/MERGE_HEAD && + test_path_is_missing .git/MERGE_HEAD && test "$pre_merge_head" = "$(git rev-parse HEAD)" && test -z "$(git diff)" && test -z "$(git diff --staged)" @@ -91,10 +91,10 @@ test_expect_success 'Abort after --no-commit' ' test_expect_success 'Abort after conflicts' ' # Create conflicting merge test_must_fail git merge conflict_branch && - test -f .git/MERGE_HEAD && + test_path_is_file .git/MERGE_HEAD && # Abort conflicting merge git merge --abort && - test ! -f .git/MERGE_HEAD && + test_path_is_missing .git/MERGE_HEAD && test "$pre_merge_head" = "$(git rev-parse HEAD)" && test -z "$(git diff)" && test -z "$(git diff --staged)" @@ -105,7 +105,7 @@ test_expect_success 'Clean merge with dirty index fails' ' git add foo && git diff --staged > expect && test_must_fail git merge clean_branch && - test ! -f .git/MERGE_HEAD && + test_path_is_missing .git/MERGE_HEAD && test "$pre_merge_head" = "$(git rev-parse HEAD)" && test -z "$(git diff)" && git diff --staged > actual && @@ -114,7 +114,7 @@ test_expect_success 'Clean merge with dirty index fails' ' test_expect_success 'Conflicting merge with dirty index fails' ' test_must_fail git merge conflict_branch && - test ! -f .git/MERGE_HEAD && + test_path_is_missing .git/MERGE_HEAD && test "$pre_merge_head" = "$(git rev-parse HEAD)" && test -z "$(git diff)" && git diff --staged > actual && @@ -129,10 +129,10 @@ test_expect_success 'Reset index (but preserve worktree changes)' ' test_expect_success 'Abort clean merge with non-conflicting dirty worktree' ' git merge --no-commit clean_branch && - test -f .git/MERGE_HEAD && + test_path_is_file .git/MERGE_HEAD && # Abort merge git merge --abort && - test ! -f .git/MERGE_HEAD && + test_path_is_missing .git/MERGE_HEAD && test "$pre_merge_head" = "$(git rev-parse HEAD)" && test -z "$(git diff --staged)" && git diff > actual && @@ -141,10 +141,10 @@ test_expect_success 'Abort clean merge with non-conflicting dirty worktree' ' test_expect_success 'Abort conflicting merge with non-conflicting dirty worktree' ' test_must_fail git merge conflict_branch && - test -f .git/MERGE_HEAD && + test_path_is_file .git/MERGE_HEAD && # Abort merge git merge --abort && - test ! -f .git/MERGE_HEAD && + test_path_is_missing .git/MERGE_HEAD && test "$pre_merge_head" = "$(git rev-parse HEAD)" && test -z "$(git diff --staged)" && git diff > actual && @@ -159,7 +159,7 @@ test_expect_success 'Fail clean merge with conflicting dirty worktree' ' echo xyzzy >> bar && git diff > expect && test_must_fail git merge --no-commit clean_branch && - test ! -f .git/MERGE_HEAD && + test_path_is_missing .git/MERGE_HEAD && test "$pre_merge_head" = "$(git rev-parse HEAD)" && test -z "$(git diff --staged)" && git diff > actual && @@ -168,7 +168,7 @@ test_expect_success 'Fail clean merge with conflicting dirty worktree' ' test_expect_success 'Fail conflicting merge with conflicting dirty worktree' ' test_must_fail git merge conflict_branch && - test ! -f .git/MERGE_HEAD && + test_path_is_missing .git/MERGE_HEAD && test "$pre_merge_head" = "$(git rev-parse HEAD)" && test -z "$(git diff --staged)" && git diff > actual && @@ -183,7 +183,7 @@ test_expect_success 'Fail clean merge with matching dirty worktree' ' echo bart > bar && git diff > expect && test_must_fail git merge --no-commit clean_branch && - test ! -f .git/MERGE_HEAD && + test_path_is_missing .git/MERGE_HEAD && test "$pre_merge_head" = "$(git rev-parse HEAD)" && test -z "$(git diff --staged)" && git diff > actual && @@ -194,7 +194,7 @@ test_expect_success 'Fail conflicting merge with matching dirty worktree' ' echo barf > bar && git diff > expect && test_must_fail git merge conflict_branch && - test ! -f .git/MERGE_HEAD && + test_path_is_missing .git/MERGE_HEAD && test "$pre_merge_head" = "$(git rev-parse HEAD)" && test -z "$(git diff --staged)" && git diff > actual && diff --git a/t/t7900-maintenance.sh b/t/t7900-maintenance.sh index 0ce4ba1cbe..1909aed95e 100755 --- a/t/t7900-maintenance.sh +++ b/t/t7900-maintenance.sh @@ -328,7 +328,8 @@ test_expect_success 'incremental-repack task' ' # Delete refs that have not been repacked in these packs. git for-each-ref --format="delete %(refname)" \ - refs/prefetch refs/tags refs/remotes >refs && + refs/prefetch refs/tags refs/remotes \ + --exclude=refs/remotes/*/HEAD >refs && git update-ref --stdin <refs && # Replace the object directory with this pack layout. diff --git a/t/t9210-scalar.sh b/t/t9210-scalar.sh index 027235d61a..a81662713e 100755 --- a/t/t9210-scalar.sh +++ b/t/t9210-scalar.sh @@ -150,7 +150,8 @@ test_expect_success 'scalar clone' ' "$(pwd)" && git for-each-ref --format="%(refname)" refs/remotes/origin/ >actual && - echo "refs/remotes/origin/parallel" >expect && + echo "refs/remotes/origin/HEAD" >>expect && + echo "refs/remotes/origin/parallel" >>expect && test_cmp expect actual && test_path_is_missing 1/2 && @@ -219,7 +220,7 @@ test_expect_success 'scalar reconfigure --all with includeIf.onbranch' ' done ' - test_expect_success 'scalar reconfigure --all with detached HEADs' ' +test_expect_success 'scalar reconfigure --all with detached HEADs' ' repos="two three four" && for num in $repos do diff --git a/t/t9211-scalar-clone.sh b/t/t9211-scalar-clone.sh index 7869f45ee6..01f71910f5 100755 --- a/t/t9211-scalar-clone.sh +++ b/t/t9211-scalar-clone.sh @@ -31,7 +31,7 @@ test_expect_success 'set up repository to clone' ' ) ' -cleanup_clone () { +cleanup_clone() { rm -rf "$1" } @@ -127,7 +127,7 @@ test_expect_success '--single-branch clones HEAD only' ' ( cd $enlistment/src && git for-each-ref refs/remotes/origin >out && - test_line_count = 1 out && + test_line_count = 2 out && grep "refs/remotes/origin/base" out ) && @@ -141,7 +141,7 @@ test_expect_success '--no-single-branch clones all branches' ' ( cd $enlistment/src && git for-each-ref refs/remotes/origin >out && - test_line_count = 2 out && + test_line_count = 3 out && grep "refs/remotes/origin/base" out && grep "refs/remotes/origin/parallel" out ) && diff --git a/t/t9835-git-p4-metadata-encoding-python2.sh b/t/t9835-git-p4-metadata-encoding-python2.sh index 036bf79c66..6116f806f6 100755 --- a/t/t9835-git-p4-metadata-encoding-python2.sh +++ b/t/t9835-git-p4-metadata-encoding-python2.sh @@ -8,29 +8,29 @@ failing, and produces maximally sane output in git.' . ./lib-git-p4.sh -python_target_version='2' - ############################### ## SECTION REPEATED IN t9836 ## ############################### -# Please note: this test calls "git-p4.py" rather than "git-p4", because the -# latter references a specific path so we can't easily force it to run under -# the python version we need to. - -python_major_version=$(python -V 2>&1 | cut -c 8) -python_target_binary=$(which python$python_target_version) -if ! test "$python_major_version" = "$python_target_version" && test "$python_target_binary" +# These tests are specific to Python 2. Write a custom script that executes +# git-p4 directly with the Python 2 interpreter to ensure that we use that +# version even if Git was compiled with Python 3. +python_target_binary=$(which python2) +if test -n "$python_target_binary" then mkdir temp_python - PATH="$(pwd)/temp_python:$PATH" && export PATH - ln -s $python_target_binary temp_python/python + PATH="$(pwd)/temp_python:$PATH" + export PATH + + write_script temp_python/git-p4-python2 <<-EOF + exec "$python_target_binary" "$(git --exec-path)/git-p4" "\$@" + EOF fi -python_major_version=$(python -V 2>&1 | cut -c 8) -if ! test "$python_major_version" = "$python_target_version" +git p4-python2 >err +if ! grep 'valid commands' err then - skip_all="skipping python$python_target_version-specific git p4 tests; python$python_target_version not available" + skip_all="skipping python2 git p4 tests; python2 not available" test_done fi @@ -81,14 +81,14 @@ test_expect_success 'init depot' ' test_expect_success 'clone non-utf8 repo with strict encoding' ' test_when_finished cleanup_git && test_when_finished remove_user_cache && - test_must_fail git -c git-p4.metadataDecodingStrategy=strict p4.py clone --dest="$git" //depot@all 2>err && + test_must_fail git -c git-p4.metadataDecodingStrategy=strict p4-python2 clone --dest="$git" //depot@all 2>err && grep "Decoding perforce metadata failed!" err ' test_expect_success 'check utf-8 contents with passthrough strategy' ' test_when_finished cleanup_git && test_when_finished remove_user_cache && - git -c git-p4.metadataDecodingStrategy=passthrough p4.py clone --dest="$git" //depot@all && + git -c git-p4.metadataDecodingStrategy=passthrough p4-python2 clone --dest="$git" //depot@all && ( cd "$git" && git log >actual && @@ -100,7 +100,7 @@ test_expect_success 'check utf-8 contents with passthrough strategy' ' test_expect_success 'check latin-1 contents corrupted in git with passthrough strategy' ' test_when_finished cleanup_git && test_when_finished remove_user_cache && - git -c git-p4.metadataDecodingStrategy=passthrough p4.py clone --dest="$git" //depot@all && + git -c git-p4.metadataDecodingStrategy=passthrough p4-python2 clone --dest="$git" //depot@all && ( cd "$git" && git log >actual && @@ -114,7 +114,7 @@ test_expect_success 'check latin-1 contents corrupted in git with passthrough st test_expect_success 'check utf-8 contents with fallback strategy' ' test_when_finished cleanup_git && test_when_finished remove_user_cache && - git -c git-p4.metadataDecodingStrategy=fallback p4.py clone --dest="$git" //depot@all && + git -c git-p4.metadataDecodingStrategy=fallback p4-python2 clone --dest="$git" //depot@all && ( cd "$git" && git log >actual && @@ -126,7 +126,7 @@ test_expect_success 'check utf-8 contents with fallback strategy' ' test_expect_success 'check latin-1 contents with fallback strategy' ' test_when_finished cleanup_git && test_when_finished remove_user_cache && - git -c git-p4.metadataDecodingStrategy=fallback p4.py clone --dest="$git" //depot@all && + git -c git-p4.metadataDecodingStrategy=fallback p4-python2 clone --dest="$git" //depot@all && ( cd "$git" && git log >actual && @@ -138,7 +138,7 @@ test_expect_success 'check latin-1 contents with fallback strategy' ' test_expect_success 'check cp-1252 contents with fallback strategy' ' test_when_finished cleanup_git && test_when_finished remove_user_cache && - git -c git-p4.metadataDecodingStrategy=fallback p4.py clone --dest="$git" //depot@all && + git -c git-p4.metadataDecodingStrategy=fallback p4-python2 clone --dest="$git" //depot@all && ( cd "$git" && git log >actual && @@ -150,7 +150,7 @@ test_expect_success 'check cp-1252 contents with fallback strategy' ' test_expect_success 'check cp850 contents parsed with correct fallback' ' test_when_finished cleanup_git && test_when_finished remove_user_cache && - git -c git-p4.metadataDecodingStrategy=fallback -c git-p4.metadataFallbackEncoding=cp850 p4.py clone --dest="$git" //depot@all && + git -c git-p4.metadataDecodingStrategy=fallback -c git-p4.metadataFallbackEncoding=cp850 p4-python2 clone --dest="$git" //depot@all && ( cd "$git" && git log >actual && @@ -162,7 +162,7 @@ test_expect_success 'check cp850 contents parsed with correct fallback' ' test_expect_success 'check cp850-only contents escaped when cp1252 is fallback' ' test_when_finished cleanup_git && test_when_finished remove_user_cache && - git -c git-p4.metadataDecodingStrategy=fallback p4.py clone --dest="$git" //depot@all && + git -c git-p4.metadataDecodingStrategy=fallback p4-python2 clone --dest="$git" //depot@all && ( cd "$git" && git log >actual && @@ -174,7 +174,7 @@ test_expect_success 'check cp850-only contents escaped when cp1252 is fallback' test_expect_success 'check cp-1252 contents on later sync after clone with fallback strategy' ' test_when_finished cleanup_git && test_when_finished remove_user_cache && - git -c git-p4.metadataDecodingStrategy=fallback p4.py clone --dest="$git" //depot@all && + git -c git-p4.metadataDecodingStrategy=fallback p4-python2 clone --dest="$git" //depot@all && ( cd "$cli" && P4USER=cp1252_author && @@ -186,7 +186,7 @@ test_expect_success 'check cp-1252 contents on later sync after clone with fallb ( cd "$git" && - git p4.py sync --branch=master && + git p4-python2 sync --branch=master && git log p4/master >actual && grep "sÅ“me more cp-1252 tæxt" actual && @@ -201,7 +201,7 @@ test_expect_success 'check cp-1252 contents on later sync after clone with fallb test_expect_success 'passthrough (latin-1 contents corrupted in git) is the default with python2' ' test_when_finished cleanup_git && test_when_finished remove_user_cache && - git -c git-p4.metadataDecodingStrategy=passthrough p4.py clone --dest="$git" //depot@all && + git -c git-p4.metadataDecodingStrategy=passthrough p4-python2 clone --dest="$git" //depot@all && ( cd "$git" && git log >actual && diff --git a/t/t9836-git-p4-metadata-encoding-python3.sh b/t/t9836-git-p4-metadata-encoding-python3.sh index 63350dc4b5..5e5217a66b 100755 --- a/t/t9836-git-p4-metadata-encoding-python3.sh +++ b/t/t9836-git-p4-metadata-encoding-python3.sh @@ -8,29 +8,29 @@ failing, and produces maximally sane output in git.' . ./lib-git-p4.sh -python_target_version='3' - ############################### ## SECTION REPEATED IN t9835 ## ############################### -# Please note: this test calls "git-p4.py" rather than "git-p4", because the -# latter references a specific path so we can't easily force it to run under -# the python version we need to. - -python_major_version=$(python -V 2>&1 | cut -c 8) -python_target_binary=$(which python$python_target_version) -if ! test "$python_major_version" = "$python_target_version" && test "$python_target_binary" +# These tests are specific to Python 3. Write a custom script that executes +# git-p4 directly with the Python 3 interpreter to ensure that we use that +# version even if Git was compiled with Python 2. +python_target_binary=$(which python3) +if test -n "$python_target_binary" then mkdir temp_python - PATH="$(pwd)/temp_python:$PATH" && export PATH - ln -s $python_target_binary temp_python/python + PATH="$(pwd)/temp_python:$PATH" + export PATH + + write_script temp_python/git-p4-python3 <<-EOF + exec "$python_target_binary" "$(git --exec-path)/git-p4" "\$@" + EOF fi -python_major_version=$(python -V 2>&1 | cut -c 8) -if ! test "$python_major_version" = "$python_target_version" +git p4-python3 >err +if ! grep 'valid commands' err then - skip_all="skipping python$python_target_version-specific git p4 tests; python$python_target_version not available" + skip_all="skipping python3 git p4 tests; python3 not available" test_done fi @@ -81,14 +81,14 @@ test_expect_success 'init depot' ' test_expect_success 'clone non-utf8 repo with strict encoding' ' test_when_finished cleanup_git && test_when_finished remove_user_cache && - test_must_fail git -c git-p4.metadataDecodingStrategy=strict p4.py clone --dest="$git" //depot@all 2>err && + test_must_fail git -c git-p4.metadataDecodingStrategy=strict p4-python3 clone --dest="$git" //depot@all 2>err && grep "Decoding perforce metadata failed!" err ' test_expect_success 'check utf-8 contents with passthrough strategy' ' test_when_finished cleanup_git && test_when_finished remove_user_cache && - git -c git-p4.metadataDecodingStrategy=passthrough p4.py clone --dest="$git" //depot@all && + git -c git-p4.metadataDecodingStrategy=passthrough p4-python3 clone --dest="$git" //depot@all && ( cd "$git" && git log >actual && @@ -100,7 +100,7 @@ test_expect_success 'check utf-8 contents with passthrough strategy' ' test_expect_success 'check latin-1 contents corrupted in git with passthrough strategy' ' test_when_finished cleanup_git && test_when_finished remove_user_cache && - git -c git-p4.metadataDecodingStrategy=passthrough p4.py clone --dest="$git" //depot@all && + git -c git-p4.metadataDecodingStrategy=passthrough p4-python3 clone --dest="$git" //depot@all && ( cd "$git" && git log >actual && @@ -114,7 +114,7 @@ test_expect_success 'check latin-1 contents corrupted in git with passthrough st test_expect_success 'check utf-8 contents with fallback strategy' ' test_when_finished cleanup_git && test_when_finished remove_user_cache && - git -c git-p4.metadataDecodingStrategy=fallback p4.py clone --dest="$git" //depot@all && + git -c git-p4.metadataDecodingStrategy=fallback p4-python3 clone --dest="$git" //depot@all && ( cd "$git" && git log >actual && @@ -126,7 +126,7 @@ test_expect_success 'check utf-8 contents with fallback strategy' ' test_expect_success 'check latin-1 contents with fallback strategy' ' test_when_finished cleanup_git && test_when_finished remove_user_cache && - git -c git-p4.metadataDecodingStrategy=fallback p4.py clone --dest="$git" //depot@all && + git -c git-p4.metadataDecodingStrategy=fallback p4-python3 clone --dest="$git" //depot@all && ( cd "$git" && git log >actual && @@ -138,7 +138,7 @@ test_expect_success 'check latin-1 contents with fallback strategy' ' test_expect_success 'check cp-1252 contents with fallback strategy' ' test_when_finished cleanup_git && test_when_finished remove_user_cache && - git -c git-p4.metadataDecodingStrategy=fallback p4.py clone --dest="$git" //depot@all && + git -c git-p4.metadataDecodingStrategy=fallback p4-python3 clone --dest="$git" //depot@all && ( cd "$git" && git log >actual && @@ -150,7 +150,7 @@ test_expect_success 'check cp-1252 contents with fallback strategy' ' test_expect_success 'check cp850 contents parsed with correct fallback' ' test_when_finished cleanup_git && test_when_finished remove_user_cache && - git -c git-p4.metadataDecodingStrategy=fallback -c git-p4.metadataFallbackEncoding=cp850 p4.py clone --dest="$git" //depot@all && + git -c git-p4.metadataDecodingStrategy=fallback -c git-p4.metadataFallbackEncoding=cp850 p4-python3 clone --dest="$git" //depot@all && ( cd "$git" && git log >actual && @@ -162,7 +162,7 @@ test_expect_success 'check cp850 contents parsed with correct fallback' ' test_expect_success 'check cp850-only contents escaped when cp1252 is fallback' ' test_when_finished cleanup_git && test_when_finished remove_user_cache && - git -c git-p4.metadataDecodingStrategy=fallback p4.py clone --dest="$git" //depot@all && + git -c git-p4.metadataDecodingStrategy=fallback p4-python3 clone --dest="$git" //depot@all && ( cd "$git" && git log >actual && @@ -174,7 +174,7 @@ test_expect_success 'check cp850-only contents escaped when cp1252 is fallback' test_expect_success 'check cp-1252 contents on later sync after clone with fallback strategy' ' test_when_finished cleanup_git && test_when_finished remove_user_cache && - git -c git-p4.metadataDecodingStrategy=fallback p4.py clone --dest="$git" //depot@all && + git -c git-p4.metadataDecodingStrategy=fallback p4-python3 clone --dest="$git" //depot@all && ( cd "$cli" && P4USER=cp1252_author && @@ -186,7 +186,7 @@ test_expect_success 'check cp-1252 contents on later sync after clone with fallb ( cd "$git" && - git p4.py sync --branch=master && + git p4-python3 sync --branch=master && git log p4/master >actual && grep "sÅ“me more cp-1252 tæxt" actual && @@ -202,7 +202,7 @@ test_expect_success 'check cp-1252 contents on later sync after clone with fallb test_expect_success 'fallback (both utf-8 and cp-1252 contents handled) is the default with python3' ' test_when_finished cleanup_git && test_when_finished remove_user_cache && - git p4.py clone --dest="$git" //depot@all && + git p4-python3 clone --dest="$git" //depot@all && ( cd "$git" && git log >actual && diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh index 932d5ad759..51bd750837 100755 --- a/t/t9902-completion.sh +++ b/t/t9902-completion.sh @@ -657,6 +657,7 @@ test_expect_success '__git_refs - simple' ' HEAD main matching-branch + other/HEAD other/branch-in-other other/main-in-other matching-tag @@ -672,6 +673,7 @@ test_expect_success '__git_refs - full refs' ' cat >expected <<-EOF && refs/heads/main refs/heads/matching-branch + refs/remotes/other/HEAD refs/remotes/other/branch-in-other refs/remotes/other/main-in-other refs/tags/matching-tag @@ -728,6 +730,7 @@ test_expect_success '__git_refs - remote on local file system - full refs' ' test_expect_success '__git_refs - configured remote' ' cat >expected <<-EOF && HEAD + HEAD branch-in-other main-in-other EOF @@ -755,6 +758,7 @@ test_expect_success '__git_refs - configured remote - full refs' ' test_expect_success '__git_refs - configured remote - repo given on the command line' ' cat >expected <<-EOF && HEAD + HEAD branch-in-other main-in-other EOF @@ -786,6 +790,7 @@ test_expect_success '__git_refs - configured remote - full refs - repo given on test_expect_success '__git_refs - configured remote - remote name matches a directory' ' cat >expected <<-EOF && HEAD + HEAD branch-in-other main-in-other EOF @@ -874,12 +879,14 @@ test_expect_success '__git_refs - unique remote branches for git checkout DWIMer HEAD main matching-branch + other/HEAD other/ambiguous other/branch-in-other other/main-in-other remote/ambiguous remote/branch-in-remote matching-tag + HEAD branch-in-other branch-in-remote main-in-other @@ -903,6 +910,7 @@ test_expect_success '__git_refs - after --opt=' ' HEAD main matching-branch + other/HEAD other/branch-in-other other/main-in-other matching-tag @@ -918,6 +926,7 @@ test_expect_success '__git_refs - after --opt= - full refs' ' cat >expected <<-EOF && refs/heads/main refs/heads/matching-branch + refs/remotes/other/HEAD refs/remotes/other/branch-in-other refs/remotes/other/main-in-other refs/tags/matching-tag @@ -934,6 +943,7 @@ test_expect_success '__git refs - excluding refs' ' ^HEAD ^main ^matching-branch + ^other/HEAD ^other/branch-in-other ^other/main-in-other ^matching-tag @@ -949,6 +959,7 @@ test_expect_success '__git refs - excluding full refs' ' cat >expected <<-EOF && ^refs/heads/main ^refs/heads/matching-branch + ^refs/remotes/other/HEAD ^refs/remotes/other/branch-in-other ^refs/remotes/other/main-in-other ^refs/tags/matching-tag @@ -974,6 +985,7 @@ test_expect_success '__git_refs - do not filter refs unless told so' ' main matching-branch matching/branch + other/HEAD other/branch-in-other other/main-in-other other/matching/branch-in-other @@ -1094,6 +1106,7 @@ test_expect_success '__git_complete_refs - simple' ' HEAD Z main Z matching-branch Z + other/HEAD Z other/branch-in-other Z other/main-in-other Z matching-tag Z @@ -1122,6 +1135,7 @@ test_expect_success '__git_complete_refs - matching' ' test_expect_success '__git_complete_refs - remote' ' sed -e "s/Z$//" >expected <<-EOF && HEAD Z + HEAD Z branch-in-other Z main-in-other Z EOF @@ -1138,9 +1152,11 @@ test_expect_success '__git_complete_refs - track' ' HEAD Z main Z matching-branch Z + other/HEAD Z other/branch-in-other Z other/main-in-other Z matching-tag Z + HEAD Z branch-in-other Z main-in-other Z EOF @@ -1183,6 +1199,7 @@ test_expect_success '__git_complete_refs - suffix' ' HEAD. main. matching-branch. + other/HEAD. other/branch-in-other. other/main-in-other. matching-tag. @@ -1198,6 +1215,7 @@ test_expect_success '__git_complete_refs - suffix' ' test_expect_success '__git_complete_fetch_refspecs - simple' ' sed -e "s/Z$//" >expected <<-EOF && HEAD:HEAD Z + HEAD:HEAD Z branch-in-other:branch-in-other Z main-in-other:main-in-other Z EOF @@ -1224,6 +1242,7 @@ test_expect_success '__git_complete_fetch_refspecs - matching' ' test_expect_success '__git_complete_fetch_refspecs - prefix' ' sed -e "s/Z$//" >expected <<-EOF && +HEAD:HEAD Z + +HEAD:HEAD Z +branch-in-other:branch-in-other Z +main-in-other:main-in-other Z EOF @@ -1288,6 +1307,7 @@ test_expect_success '__git_complete_worktree_paths with -C' ' test_expect_success 'git switch - with no options, complete local branches and unique remote branch names for DWIM logic' ' test_completion "git switch " <<-\EOF + HEAD Z branch-in-other Z main Z main-in-other Z @@ -1434,11 +1454,13 @@ test_expect_success 'git-bisect - existing view subcommand is recognized and ena test_expect_success 'git checkout - completes refs and unique remote branches for DWIM' ' test_completion "git checkout " <<-\EOF HEAD Z + HEAD Z branch-in-other Z main Z main-in-other Z matching-branch Z matching-tag Z + other/HEAD Z other/branch-in-other Z other/main-in-other Z EOF @@ -1460,6 +1482,7 @@ test_expect_success 'git switch - with GIT_COMPLETION_CHECKOUT_NO_GUESS=1, compl test_expect_success 'git switch - --guess overrides GIT_COMPLETION_CHECKOUT_NO_GUESS=1, complete local branches and unique remote names for DWIM logic' ' GIT_COMPLETION_CHECKOUT_NO_GUESS=1 test_completion "git switch --guess " <<-\EOF + HEAD Z branch-in-other Z main Z main-in-other Z @@ -1469,6 +1492,7 @@ test_expect_success 'git switch - --guess overrides GIT_COMPLETION_CHECKOUT_NO_G test_expect_success 'git switch - a later --guess overrides previous --no-guess, complete local and remote unique branches for DWIM' ' test_completion "git switch --no-guess --guess " <<-\EOF + HEAD Z branch-in-other Z main Z main-in-other Z @@ -1489,6 +1513,7 @@ test_expect_success 'git checkout - with GIT_COMPLETION_NO_GUESS=1 only complete main Z matching-branch Z matching-tag Z + other/HEAD Z other/branch-in-other Z other/main-in-other Z EOF @@ -1497,11 +1522,13 @@ test_expect_success 'git checkout - with GIT_COMPLETION_NO_GUESS=1 only complete test_expect_success 'git checkout - --guess overrides GIT_COMPLETION_NO_GUESS=1, complete refs and unique remote branches for DWIM' ' GIT_COMPLETION_CHECKOUT_NO_GUESS=1 test_completion "git checkout --guess " <<-\EOF HEAD Z + HEAD Z branch-in-other Z main Z main-in-other Z matching-branch Z matching-tag Z + other/HEAD Z other/branch-in-other Z other/main-in-other Z EOF @@ -1513,6 +1540,7 @@ test_expect_success 'git checkout - with --no-guess, only completes refs' ' main Z matching-branch Z matching-tag Z + other/HEAD Z other/branch-in-other Z other/main-in-other Z EOF @@ -1521,11 +1549,13 @@ test_expect_success 'git checkout - with --no-guess, only completes refs' ' test_expect_success 'git checkout - a later --guess overrides previous --no-guess, complete refs and unique remote branches for DWIM' ' test_completion "git checkout --no-guess --guess " <<-\EOF HEAD Z + HEAD Z branch-in-other Z main Z main-in-other Z matching-branch Z matching-tag Z + other/HEAD Z other/branch-in-other Z other/main-in-other Z EOF @@ -1537,6 +1567,7 @@ test_expect_success 'git checkout - a later --no-guess overrides previous --gues main Z matching-branch Z matching-tag Z + other/HEAD Z other/branch-in-other Z other/main-in-other Z EOF @@ -1549,6 +1580,7 @@ test_expect_success 'git checkout - with checkout.guess = false, only completes main Z matching-branch Z matching-tag Z + other/HEAD Z other/branch-in-other Z other/main-in-other Z EOF @@ -1558,11 +1590,13 @@ test_expect_success 'git checkout - with checkout.guess = true, completes refs a test_config checkout.guess true && test_completion "git checkout " <<-\EOF HEAD Z + HEAD Z branch-in-other Z main Z main-in-other Z matching-branch Z matching-tag Z + other/HEAD Z other/branch-in-other Z other/main-in-other Z EOF @@ -1572,11 +1606,13 @@ test_expect_success 'git checkout - a later --guess overrides previous checkout. test_config checkout.guess false && test_completion "git checkout --guess " <<-\EOF HEAD Z + HEAD Z branch-in-other Z main Z main-in-other Z matching-branch Z matching-tag Z + other/HEAD Z other/branch-in-other Z other/main-in-other Z EOF @@ -1589,6 +1625,7 @@ test_expect_success 'git checkout - a later --no-guess overrides previous checko main Z matching-branch Z matching-tag Z + other/HEAD Z other/branch-in-other Z other/main-in-other Z EOF @@ -1600,6 +1637,7 @@ test_expect_success 'git switch - with --detach, complete all references' ' main Z matching-branch Z matching-tag Z + other/HEAD Z other/branch-in-other Z other/main-in-other Z EOF @@ -1611,6 +1649,7 @@ test_expect_success 'git checkout - with --detach, complete only references' ' main Z matching-branch Z matching-tag Z + other/HEAD Z other/branch-in-other Z other/main-in-other Z EOF @@ -1782,6 +1821,7 @@ test_expect_success 'git switch - with -d, complete all references' ' main Z matching-branch Z matching-tag Z + other/HEAD Z other/branch-in-other Z other/main-in-other Z EOF @@ -1793,6 +1833,7 @@ test_expect_success 'git checkout - with -d, complete only references' ' main Z matching-branch Z matching-tag Z + other/HEAD Z other/branch-in-other Z other/main-in-other Z EOF @@ -1800,10 +1841,12 @@ test_expect_success 'git checkout - with -d, complete only references' ' test_expect_success 'git switch - with --track, complete only remote branches' ' test_completion "git switch --track " <<-\EOF && + other/HEAD Z other/branch-in-other Z other/main-in-other Z EOF test_completion "git switch -t " <<-\EOF + other/HEAD Z other/branch-in-other Z other/main-in-other Z EOF @@ -1811,10 +1854,12 @@ test_expect_success 'git switch - with --track, complete only remote branches' ' test_expect_success 'git checkout - with --track, complete only remote branches' ' test_completion "git checkout --track " <<-\EOF && + other/HEAD Z other/branch-in-other Z other/main-in-other Z EOF test_completion "git checkout -t " <<-\EOF + other/HEAD Z other/branch-in-other Z other/main-in-other Z EOF @@ -1833,6 +1878,7 @@ test_expect_success 'git checkout - with --no-track, complete only local referen main Z matching-branch Z matching-tag Z + other/HEAD Z other/branch-in-other Z other/main-in-other Z EOF @@ -1844,6 +1890,7 @@ test_expect_success 'git switch - with -c, complete all references' ' main Z matching-branch Z matching-tag Z + other/HEAD Z other/branch-in-other Z other/main-in-other Z EOF @@ -1855,6 +1902,7 @@ test_expect_success 'git switch - with -C, complete all references' ' main Z matching-branch Z matching-tag Z + other/HEAD Z other/branch-in-other Z other/main-in-other Z EOF @@ -1866,6 +1914,7 @@ test_expect_success 'git switch - with -c and --track, complete all references' main Z matching-branch Z matching-tag Z + other/HEAD Z other/branch-in-other Z other/main-in-other Z EOF @@ -1877,6 +1926,7 @@ test_expect_success 'git switch - with -C and --track, complete all references' main Z matching-branch Z matching-tag Z + other/HEAD Z other/branch-in-other Z other/main-in-other Z EOF @@ -1888,6 +1938,7 @@ test_expect_success 'git switch - with -c and --no-track, complete all reference main Z matching-branch Z matching-tag Z + other/HEAD Z other/branch-in-other Z other/main-in-other Z EOF @@ -1899,6 +1950,7 @@ test_expect_success 'git switch - with -C and --no-track, complete all reference main Z matching-branch Z matching-tag Z + other/HEAD Z other/branch-in-other Z other/main-in-other Z EOF @@ -1910,6 +1962,7 @@ test_expect_success 'git checkout - with -b, complete all references' ' main Z matching-branch Z matching-tag Z + other/HEAD Z other/branch-in-other Z other/main-in-other Z EOF @@ -1921,6 +1974,7 @@ test_expect_success 'git checkout - with -B, complete all references' ' main Z matching-branch Z matching-tag Z + other/HEAD Z other/branch-in-other Z other/main-in-other Z EOF @@ -1932,6 +1986,7 @@ test_expect_success 'git checkout - with -b and --track, complete all references main Z matching-branch Z matching-tag Z + other/HEAD Z other/branch-in-other Z other/main-in-other Z EOF @@ -1943,6 +1998,7 @@ test_expect_success 'git checkout - with -B and --track, complete all references main Z matching-branch Z matching-tag Z + other/HEAD Z other/branch-in-other Z other/main-in-other Z EOF @@ -1954,6 +2010,7 @@ test_expect_success 'git checkout - with -b and --no-track, complete all referen main Z matching-branch Z matching-tag Z + other/HEAD Z other/branch-in-other Z other/main-in-other Z EOF @@ -1965,6 +2022,7 @@ test_expect_success 'git checkout - with -B and --no-track, complete all referen main Z matching-branch Z matching-tag Z + other/HEAD Z other/branch-in-other Z other/main-in-other Z EOF @@ -1972,6 +2030,7 @@ test_expect_success 'git checkout - with -B and --no-track, complete all referen test_expect_success 'git switch - for -c, complete local branches and unique remote branches' ' test_completion "git switch -c " <<-\EOF + HEAD Z branch-in-other Z main Z main-in-other Z @@ -1981,6 +2040,7 @@ test_expect_success 'git switch - for -c, complete local branches and unique rem test_expect_success 'git switch - for -C, complete local branches and unique remote branches' ' test_completion "git switch -C " <<-\EOF + HEAD Z branch-in-other Z main Z main-in-other Z @@ -2018,6 +2078,7 @@ test_expect_success 'git switch - for -C with --no-track, complete local branche test_expect_success 'git checkout - for -b, complete local branches and unique remote branches' ' test_completion "git checkout -b " <<-\EOF + HEAD Z branch-in-other Z main Z main-in-other Z @@ -2027,6 +2088,7 @@ test_expect_success 'git checkout - for -b, complete local branches and unique r test_expect_success 'git checkout - for -B, complete local branches and unique remote branches' ' test_completion "git checkout -B " <<-\EOF + HEAD Z branch-in-other Z main Z main-in-other Z @@ -2064,6 +2126,7 @@ test_expect_success 'git checkout - for -B with --no-track, complete local branc test_expect_success 'git switch - with --orphan completes local branch names and unique remote branch names' ' test_completion "git switch --orphan " <<-\EOF + HEAD Z branch-in-other Z main Z main-in-other Z @@ -2079,6 +2142,7 @@ test_expect_success 'git switch - --orphan with branch already provided complete test_expect_success 'git checkout - with --orphan completes local branch names and unique remote branch names' ' test_completion "git checkout --orphan " <<-\EOF + HEAD Z branch-in-other Z main Z main-in-other Z @@ -2092,6 +2156,7 @@ test_expect_success 'git checkout - --orphan with branch already provided comple main Z matching-branch Z matching-tag Z + other/HEAD Z other/branch-in-other Z other/main-in-other Z EOF diff --git a/t/test-lib.sh b/t/test-lib.sh index 62dfcc4aaf..d1f62adbf8 100644 --- a/t/test-lib.sh +++ b/t/test-lib.sh @@ -80,6 +80,7 @@ prepend_var ASAN_OPTIONS : detect_leaks=0 export ASAN_OPTIONS prepend_var LSAN_OPTIONS : $GIT_SAN_OPTIONS +prepend_var LSAN_OPTIONS : exitcode=0 prepend_var LSAN_OPTIONS : fast_unwind_on_malloc=0 export LSAN_OPTIONS @@ -331,7 +332,7 @@ TEST_RESULTS_BASE="$TEST_RESULTS_DIR/$TEST_NAME$TEST_STRESS_JOB_SFX" TEST_RESULTS_SAN_FILE_PFX=trace TEST_RESULTS_SAN_DIR_SFX=leak TEST_RESULTS_SAN_FILE= -TEST_RESULTS_SAN_DIR="$TEST_RESULTS_DIR/$TEST_NAME.$TEST_RESULTS_SAN_DIR_SFX" +TEST_RESULTS_SAN_DIR="$TEST_RESULTS_BASE.$TEST_RESULTS_SAN_DIR_SFX" TRASH_DIRECTORY="trash directory.$TEST_NAME$TEST_STRESS_JOB_SFX" test -n "$root" && TRASH_DIRECTORY="$root/$TRASH_DIRECTORY" case "$TRASH_DIRECTORY" in @@ -339,17 +340,6 @@ case "$TRASH_DIRECTORY" in *) TRASH_DIRECTORY="$TEST_OUTPUT_DIRECTORY/$TRASH_DIRECTORY" ;; esac -# Utility functions using $TEST_RESULTS_* variables -nr_san_dir_leaks_ () { - # stderr piped to /dev/null because the directory may have - # been "rmdir"'d already. - find "$TEST_RESULTS_SAN_DIR" \ - -type f \ - -name "$TEST_RESULTS_SAN_FILE_PFX.*" 2>/dev/null | - xargs grep -lv "Unable to get registers from thread" | - wc -l -} - # If --stress was passed, run this test repeatedly in several parallel loops. if test "$GIT_TEST_STRESS_STARTED" = "done" then @@ -1180,8 +1170,15 @@ test_atexit_handler () { } check_test_results_san_file_empty_ () { - test -z "$TEST_RESULTS_SAN_FILE" || - test "$(nr_san_dir_leaks_)" = 0 + test -z "$TEST_RESULTS_SAN_FILE" && return 0 + + # stderr piped to /dev/null because the directory may have + # been "rmdir"'d already. + ! find "$TEST_RESULTS_SAN_DIR" \ + -type f \ + -name "$TEST_RESULTS_SAN_FILE_PFX.*" 2>/dev/null | + xargs grep ^DEDUP_TOKEN | + grep -qv sanitizer::GetThreadStackTopAndBottom } check_test_results_san_file_ () { @@ -1687,6 +1684,7 @@ esac ( COLUMNS=1 && test $COLUMNS = 1 ) && test_set_prereq COLUMNS_CAN_BE_1 test -z "$NO_CURL" && test_set_prereq LIBCURL +test -z "$NO_GITWEB" && test_set_prereq GITWEB test -z "$NO_ICONV" && test_set_prereq ICONV test -z "$NO_PERL" && test_set_prereq PERL test -z "$NO_PTHREADS" && test_set_prereq PTHREADS diff --git a/t/unit-tests/generate-clar-decls.sh b/t/unit-tests/generate-clar-decls.sh index 688e0885f4..3b315c64b3 100755 --- a/t/unit-tests/generate-clar-decls.sh +++ b/t/unit-tests/generate-clar-decls.sh @@ -11,6 +11,9 @@ shift for suite in "$@" do - sed -ne "s/^\(void test_$(basename "${suite%.c}")__[a-zA-Z_0-9][a-zA-Z_0-9]*(void)\)$/extern \1;/p" "$suite" || + suite_name=$(basename "$suite") + suite_name=${suite_name%.c} + suite_name=${suite_name#u-} + sed -ne "s/^\(void test_${suite_name}__[a-zA-Z_0-9][a-zA-Z_0-9]*(void)\)$/extern \1;/p" "$suite" || exit 1 done >"$OUTPUT" diff --git a/t/unit-tests/lib-reftable.c b/t/unit-tests/lib-reftable.c index d795dfb7c9..8a69612266 100644 --- a/t/unit-tests/lib-reftable.c +++ b/t/unit-tests/lib-reftable.c @@ -1,3 +1,5 @@ +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "lib-reftable.h" #include "test-lib.h" #include "reftable/constants.h" diff --git a/t/unit-tests/t-example-decorate.c b/t/unit-tests/t-example-decorate.c index 8bf0709c41..bfc776e223 100644 --- a/t/unit-tests/t-example-decorate.c +++ b/t/unit-tests/t-example-decorate.c @@ -42,9 +42,9 @@ static void t_lookup(struct test_vars *vars) static void t_loop(struct test_vars *vars) { - int i, objects_noticed = 0; + int objects_noticed = 0; - for (i = 0; i < vars->n.size; i++) { + for (size_t i = 0; i < vars->n.size; i++) { if (vars->n.entries[i].base) objects_noticed++; } diff --git a/t/unit-tests/t-prio-queue.c b/t/unit-tests/t-prio-queue.c index fe6ae37935..a053635000 100644 --- a/t/unit-tests/t-prio-queue.c +++ b/t/unit-tests/t-prio-queue.c @@ -25,7 +25,7 @@ static void test_prio_queue(int *input, size_t input_size, struct prio_queue pq = { intcmp }; int j = 0; - for (int i = 0; i < input_size; i++) { + for (size_t i = 0; i < input_size; i++) { void *peek, *get; switch(input[i]) { case GET: diff --git a/t/unit-tests/t-reftable-basics.c b/t/unit-tests/t-reftable-basics.c index 65d50df091..990dc1a244 100644 --- a/t/unit-tests/t-reftable-basics.c +++ b/t/unit-tests/t-reftable-basics.c @@ -20,6 +20,11 @@ static int integer_needle_lesseq(size_t i, void *_args) return args->needle <= args->haystack[i]; } +static void *realloc_stub(void *p UNUSED, size_t size UNUSED) +{ + return NULL; +} + int cmd_main(int argc UNUSED, const char *argv[] UNUSED) { if_test ("binary search with binsearch works") { @@ -141,5 +146,56 @@ int cmd_main(int argc UNUSED, const char *argv[] UNUSED) check_int(in, ==, out); } + if_test ("REFTABLE_ALLOC_GROW works") { + int *arr = NULL, *old_arr; + size_t alloc = 0, old_alloc; + + check(!REFTABLE_ALLOC_GROW(arr, 1, alloc)); + check(arr != NULL); + check_uint(alloc, >=, 1); + arr[0] = 42; + + old_alloc = alloc; + old_arr = arr; + reftable_set_alloc(malloc, realloc_stub, free); + check(REFTABLE_ALLOC_GROW(arr, old_alloc + 1, alloc)); + check(arr == old_arr); + check_uint(alloc, ==, old_alloc); + + old_alloc = alloc; + reftable_set_alloc(malloc, realloc, free); + check(!REFTABLE_ALLOC_GROW(arr, old_alloc + 1, alloc)); + check(arr != NULL); + check_uint(alloc, >, old_alloc); + arr[alloc - 1] = 42; + + reftable_free(arr); + } + + if_test ("REFTABLE_ALLOC_GROW_OR_NULL works") { + int *arr = NULL; + size_t alloc = 0, old_alloc; + + REFTABLE_ALLOC_GROW_OR_NULL(arr, 1, alloc); + check(arr != NULL); + check_uint(alloc, >=, 1); + arr[0] = 42; + + old_alloc = alloc; + REFTABLE_ALLOC_GROW_OR_NULL(arr, old_alloc + 1, alloc); + check(arr != NULL); + check_uint(alloc, >, old_alloc); + arr[alloc - 1] = 42; + + old_alloc = alloc; + reftable_set_alloc(malloc, realloc_stub, free); + REFTABLE_ALLOC_GROW_OR_NULL(arr, old_alloc + 1, alloc); + check(arr == NULL); + check_uint(alloc, ==, 0); + reftable_set_alloc(malloc, realloc, free); + + reftable_free(arr); + } + return test_done(); } diff --git a/t/unit-tests/t-reftable-merged.c b/t/unit-tests/t-reftable-merged.c index a12bd0e1a3..60836f80d6 100644 --- a/t/unit-tests/t-reftable-merged.c +++ b/t/unit-tests/t-reftable-merged.c @@ -178,7 +178,7 @@ static void t_merged_refs(void) if (err > 0) break; - REFTABLE_ALLOC_GROW(out, len + 1, cap); + check(!REFTABLE_ALLOC_GROW(out, len + 1, cap)); out[len++] = ref; } reftable_iterator_destroy(&it); @@ -459,7 +459,7 @@ static void t_merged_logs(void) if (err > 0) break; - REFTABLE_ALLOC_GROW(out, len + 1, cap); + check(!REFTABLE_ALLOC_GROW(out, len + 1, cap)); out[len++] = log; } reftable_iterator_destroy(&it); diff --git a/t/unit-tests/t-reftable-readwrite.c b/t/unit-tests/t-reftable-readwrite.c index 91c881aedf..6b75a419b9 100644 --- a/t/unit-tests/t-reftable-readwrite.c +++ b/t/unit-tests/t-reftable-readwrite.c @@ -6,6 +6,8 @@ license that can be found in the LICENSE file or at https://developers.google.com/open-source/licenses/bsd */ +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "test-lib.h" #include "lib-reftable.h" #include "reftable/basics.h" @@ -91,7 +93,7 @@ static void t_log_buffer_size(void) int i; struct reftable_log_record log = { .refname = (char *) "refs/heads/master", - .update_index = 0xa, + .update_index = update_index, .value_type = REFTABLE_LOG_UPDATE, .value = { .update = { .name = (char *) "Han-Wen Nienhuys", @@ -128,7 +130,7 @@ static void t_log_overflow(void) int err; struct reftable_log_record log = { .refname = (char *) "refs/heads/master", - .update_index = 0xa, + .update_index = update_index, .value_type = REFTABLE_LOG_UPDATE, .value = { .update = { @@ -152,6 +154,48 @@ static void t_log_overflow(void) reftable_buf_release(&buf); } +static void t_log_write_limits(void) +{ + struct reftable_write_options opts = { 0 }; + struct reftable_buf buf = REFTABLE_BUF_INIT; + struct reftable_writer *w = t_reftable_strbuf_writer(&buf, &opts); + struct reftable_log_record log = { + .refname = (char *)"refs/head/master", + .update_index = 0, + .value_type = REFTABLE_LOG_UPDATE, + .value = { + .update = { + .old_hash = { 1 }, + .new_hash = { 2 }, + .name = (char *)"Han-Wen Nienhuys", + .email = (char *)"hanwen@google.com", + .tz_offset = 100, + .time = 0x5e430672, + }, + }, + }; + int err; + + reftable_writer_set_limits(w, 1, 1); + + /* write with update_index (0) below set limits (1, 1) */ + err = reftable_writer_add_log(w, &log); + check_int(err, ==, 0); + + /* write with update_index (1) in the set limits (1, 1) */ + log.update_index = 1; + err = reftable_writer_add_log(w, &log); + check_int(err, ==, 0); + + /* write with update_index (3) above set limits (1, 1) */ + log.update_index = 3; + err = reftable_writer_add_log(w, &log); + check_int(err, ==, REFTABLE_API_ERROR); + + reftable_writer_free(w); + reftable_buf_release(&buf); +} + static void t_log_write_read(void) { struct reftable_write_options opts = { @@ -918,6 +962,7 @@ int cmd_main(int argc UNUSED, const char *argv[] UNUSED) TEST(t_corrupt_table_empty(), "read-write on an empty table"); TEST(t_log_buffer_size(), "buffer extension for log compression"); TEST(t_log_overflow(), "log overflow returns expected error"); + TEST(t_log_write_limits(), "writer limits for writing log records"); TEST(t_log_write_read(), "read-write on log records"); TEST(t_log_zlib_corruption(), "reading corrupted log record returns expected error"); TEST(t_table_read_api(), "read on a table"); diff --git a/t/unit-tests/t-reftable-stack.c b/t/unit-tests/t-reftable-stack.c index b2f6c1c37e..aeec195b2b 100644 --- a/t/unit-tests/t-reftable-stack.c +++ b/t/unit-tests/t-reftable-stack.c @@ -6,6 +6,8 @@ license that can be found in the LICENSE file or at https://developers.google.com/open-source/licenses/bsd */ +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "test-lib.h" #include "lib-reftable.h" #include "dir.h" @@ -773,8 +775,12 @@ static void t_reftable_stack_tombstone(void) } logs[i].refname = xstrdup(buf); - /* update_index is part of the key. */ - logs[i].update_index = 42; + /* + * update_index is part of the key so should be constant. + * The value itself should be less than the writer's upper + * limit. + */ + logs[i].update_index = 1; if (i % 2 == 0) { logs[i].value_type = REFTABLE_LOG_UPDATE; t_reftable_set_hash(logs[i].value.update.new_hash, i, diff --git a/t/unit-tests/t-trailer.c b/t/unit-tests/t-trailer.c index e1c6ad7461..184593e73d 100644 --- a/t/unit-tests/t-trailer.c +++ b/t/unit-tests/t-trailer.c @@ -1,3 +1,5 @@ +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "test-lib.h" #include "trailer.h" diff --git a/t/unit-tests/test-lib.c b/t/unit-tests/test-lib.c index fa1f95965c..87e1f5c201 100644 --- a/t/unit-tests/test-lib.c +++ b/t/unit-tests/test-lib.c @@ -1,3 +1,5 @@ +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "test-lib.h" enum result { diff --git a/t/unit-tests/ctype.c b/t/unit-tests/u-ctype.c index 32e65867cd..32e65867cd 100644 --- a/t/unit-tests/ctype.c +++ b/t/unit-tests/u-ctype.c diff --git a/t/unit-tests/strvec.c b/t/unit-tests/u-strvec.c index e66b7bbfae..e66b7bbfae 100644 --- a/t/unit-tests/strvec.c +++ b/t/unit-tests/u-strvec.c diff --git a/t/unit-tests/unit-test.c b/t/unit-tests/unit-test.c index a474cdcfd3..fa8818842a 100644 --- a/t/unit-tests/unit-test.c +++ b/t/unit-tests/unit-test.c @@ -18,8 +18,25 @@ int cmd_main(int argc, const char **argv) N_("immediately exit upon the first failed test")), OPT_STRING_LIST('r', "run", &run_args, N_("suite[::test]"), N_("run only test suite or individual test <suite[::test]>")), - OPT_STRING_LIST('x', "exclude", &exclude_args, N_("suite"), + OPT_STRING_LIST(0, "exclude", &exclude_args, N_("suite"), N_("exclude test suite <suite>")), + /* + * Compatibility wrappers so that we don't have to filter + * options understood by integration tests. + */ + OPT_NOOP_NOARG('d', "debug"), + OPT_NOOP_NOARG(0, "github-workflow-markup"), + OPT_NOOP_NOARG(0, "no-bin-wrappers"), + OPT_NOOP_ARG(0, "root"), + OPT_NOOP_ARG(0, "stress"), + OPT_NOOP_NOARG(0, "tee"), + OPT_NOOP_NOARG(0, "with-dashes"), + OPT_NOOP_ARG(0, "valgrind"), + OPT_NOOP_ARG(0, "valgrind-only"), + OPT_NOOP_NOARG('v', "verbose"), + OPT_NOOP_NOARG('V', "verbose-log"), + OPT_NOOP_ARG(0, "verbose-only"), + OPT_NOOP_NOARG('x', NULL), OPT_END(), }; struct strvec args = STRVEC_INIT; @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "environment.h" diff --git a/tmp-objdir.c b/tmp-objdir.c index 9da0071cba..659fcdcc29 100644 --- a/tmp-objdir.c +++ b/tmp-objdir.c @@ -237,7 +237,6 @@ static int migrate_paths(struct strbuf *src, struct strbuf *dst, { size_t src_len = src->len, dst_len = dst->len; struct string_list paths = STRING_LIST_INIT_DUP; - int i; int ret = 0; if (read_dir_paths(&paths, src->buf) < 0) @@ -245,7 +244,7 @@ static int migrate_paths(struct strbuf *src, struct strbuf *dst, paths.cmp = pack_copy_cmp; string_list_sort(&paths); - for (i = 0; i < paths.nr; i++) { + for (size_t i = 0; i < paths.nr; i++) { const char *name = paths.items[i].string; enum finalize_object_file_flags flags_copy = flags; @@ -22,6 +22,7 @@ */ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "abspath.h" @@ -1,3 +1,5 @@ +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "git-compat-util.h" #include "config.h" #include "repository.h" diff --git a/trace2/tr2_sysenv.c b/trace2/tr2_sysenv.c index 048cdd5438..01379c5cad 100644 --- a/trace2/tr2_sysenv.c +++ b/trace2/tr2_sysenv.c @@ -1,3 +1,5 @@ +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "git-compat-util.h" #include "config.h" #include "dir.h" diff --git a/trace2/tr2_tgt_event.c b/trace2/tr2_tgt_event.c index 45b0850a5e..69ee40449f 100644 --- a/trace2/tr2_tgt_event.c +++ b/trace2/tr2_tgt_event.c @@ -1,3 +1,5 @@ +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "git-compat-util.h" #include "config.h" #include "json-writer.h" diff --git a/trace2/tr2_tgt_perf.c b/trace2/tr2_tgt_perf.c index a6f9a8a193..298ae27f9d 100644 --- a/trace2/tr2_tgt_perf.c +++ b/trace2/tr2_tgt_perf.c @@ -1,3 +1,5 @@ +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "git-compat-util.h" #include "config.h" #include "repository.h" @@ -522,7 +522,6 @@ static int git_trailer_config(const char *conf_key, const char *value, struct conf_info *conf; char *name = NULL; enum trailer_info_type type; - int i; if (!skip_prefix(conf_key, "trailer.", &trailer_item)) return 0; @@ -532,7 +531,7 @@ static int git_trailer_config(const char *conf_key, const char *value, return 0; variable_name++; - for (i = 0; i < ARRAY_SIZE(trailer_config_items); i++) { + for (size_t i = 0; i < ARRAY_SIZE(trailer_config_items); i++) { if (strcmp(trailer_config_items[i].name, variable_name)) continue; name = xstrndup(trailer_item, variable_name - trailer_item - 1); diff --git a/transport-helper.c b/transport-helper.c index bc27653cde..d457b42550 100644 --- a/transport-helper.c +++ b/transport-helper.c @@ -313,9 +313,9 @@ static int string_list_set_helper_option(struct helper_data *data, struct string_list *list) { struct strbuf buf = STRBUF_INIT; - int i, ret = 0; + int ret = 0; - for (i = 0; i < list->nr; i++) { + for (size_t i = 0; i < list->nr; i++) { strbuf_addf(&buf, "option %s ", name); quote_c_style(list->items[i].string, &buf, NULL, 0); strbuf_addch(&buf, '\n'); @@ -333,7 +333,7 @@ static int set_helper_option(struct transport *transport, { struct helper_data *data = transport->data; struct strbuf buf = STRBUF_INIT; - int i, ret, is_bool = 0; + int ret, is_bool = 0; get_helper(transport); @@ -344,12 +344,12 @@ static int set_helper_option(struct transport *transport, return string_list_set_helper_option(data, name, (struct string_list *)value); - for (i = 0; i < ARRAY_SIZE(unsupported_options); i++) { + for (size_t i = 0; i < ARRAY_SIZE(unsupported_options); i++) { if (!strcmp(name, unsupported_options[i])) return 1; } - for (i = 0; i < ARRAY_SIZE(boolean_options); i++) { + for (size_t i = 0; i < ARRAY_SIZE(boolean_options); i++) { if (!strcmp(name, boolean_options[i])) { is_bool = 1; break; @@ -481,7 +481,6 @@ static int get_exporter(struct transport *transport, { struct helper_data *data = transport->data; struct child_process *helper = get_helper(transport); - int i; child_process_init(fastexport); @@ -497,7 +496,7 @@ static int get_exporter(struct transport *transport, if (data->import_marks) strvec_pushf(&fastexport->args, "--import-marks=%s", data->import_marks); - for (i = 0; i < revlist_args->nr; i++) + for (size_t i = 0; i < revlist_args->nr; i++) strvec_push(&fastexport->args, revlist_args->items[i].string); fastexport->git_cmd = 1; diff --git a/transport.c b/transport.c index 6966df51a8..10d820c333 100644 --- a/transport.c +++ b/transport.c @@ -48,7 +48,6 @@ static int transport_color_config(void) "color.transport.rejected" }, *key = "color.transport"; char *value; - int i; static int initialized; if (initialized) @@ -61,7 +60,7 @@ static int transport_color_config(void) if (!want_color_stderr(transport_use_color)) return 0; - for (i = 0; i < ARRAY_SIZE(keys); i++) + for (size_t i = 0; i < ARRAY_SIZE(keys); i++) if (!git_config_get_string(keys[i], &value)) { if (!value) return config_error_nonbool(keys[i]); @@ -154,14 +153,13 @@ static struct ref *get_refs_from_bundle(struct transport *transport, { struct bundle_transport_data *data = transport->data; struct ref *result = NULL; - int i; if (for_push) return NULL; get_refs_from_bundle_inner(transport); - for (i = 0; i < data->header.references.nr; i++) { + for (size_t i = 0; i < data->header.references.nr; i++) { struct string_list_item *e = data->header.references.items + i; const char *name = e->string; struct ref *ref = alloc_ref(name); @@ -1303,11 +1301,9 @@ void transport_set_verbosity(struct transport *transport, int verbosity, static void die_with_unpushed_submodules(struct string_list *needs_pushing) { - int i; - fprintf(stderr, _("The following submodule paths contain changes that can\n" "not be found on any remote:\n")); - for (i = 0; i < needs_pushing->nr; i++) + for (size_t i = 0; i < needs_pushing->nr; i++) fprintf(stderr, " %s\n", needs_pushing->items[i].string); fprintf(stderr, _("\nPlease try\n\n" " git push --recurse-submodules=on-demand\n\n" @@ -1623,9 +1619,8 @@ int transport_get_remote_bundle_uri(struct transport *transport) void transport_unlock_pack(struct transport *transport, unsigned int flags) { int in_signal_handler = !!(flags & TRANSPORT_UNLOCK_PACK_IN_SIGNAL_HANDLER); - int i; - for (i = 0; i < transport->pack_lockfiles.nr; i++) + for (size_t i = 0; i < transport->pack_lockfiles.nr; i++) if (in_signal_handler) unlink(transport->pack_lockfiles.items[i].string); else diff --git a/tree-diff.c b/tree-diff.c index 5eab8af631..d9237ffd9b 100644 --- a/tree-diff.c +++ b/tree-diff.c @@ -3,6 +3,7 @@ */ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "diff.h" diff --git a/unix-socket.c b/unix-socket.c index 79800d8063..483c9c448c 100644 --- a/unix-socket.c +++ b/unix-socket.c @@ -1,3 +1,5 @@ +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "git-compat-util.h" #include "strbuf.h" #include "unix-socket.h" diff --git a/unpack-trees.c b/unpack-trees.c index e10a9d1209..b3be5d542f 100644 --- a/unpack-trees.c +++ b/unpack-trees.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "advice.h" diff --git a/upload-pack.c b/upload-pack.c index 43006c0614..728b2477fc 100644 --- a/upload-pack.c +++ b/upload-pack.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "config.h" diff --git a/urlmatch.c b/urlmatch.c index 1d0254abac..eea8300489 100644 --- a/urlmatch.c +++ b/urlmatch.c @@ -1,3 +1,5 @@ +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "git-compat-util.h" #include "gettext.h" #include "hex-ll.h" @@ -3,6 +3,7 @@ * * Copyright (C) Linus Torvalds, 2005 */ + #include "git-compat-util.h" #include "gettext.h" #include "trace2.h" @@ -189,7 +190,7 @@ void NORETURN die(const char *err, ...) static const char *fmt_with_err(char *buf, int n, const char *fmt) { char str_error[256], *err; - int i, j; + size_t i, j; err = strerror(errno); for (i = j = 0; err[i] && j < sizeof(str_error) - 1; ) { diff --git a/userdiff.c b/userdiff.c index d43d8360d1..340c4eb4f7 100644 --- a/userdiff.c +++ b/userdiff.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "config.h" @@ -1,3 +1,5 @@ +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "git-compat-util.h" #include "strbuf.h" #include "utf8.h" @@ -25,11 +25,10 @@ const char *git_user_agent_sanitized(void) if (!agent) { struct strbuf buf = STRBUF_INIT; - int i; strbuf_addstr(&buf, git_user_agent()); strbuf_trim(&buf); - for (i = 0; i < buf.len; i++) { + for (size_t i = 0; i < buf.len; i++) { if (buf.buf[i] <= 32 || buf.buf[i] >= 127) buf.buf[i] = '.'; } diff --git a/versioncmp.c b/versioncmp.c index e3b2a6e330..b6eebdb989 100644 --- a/versioncmp.c +++ b/versioncmp.c @@ -77,11 +77,10 @@ static int swap_prereleases(const char *s1, int off, int *diff) { - int i; struct suffix_match match1 = { -1, off, -1 }; struct suffix_match match2 = { -1, off, -1 }; - for (i = 0; i < prereleases->nr; i++) { + for (size_t i = 0; i < prereleases->nr; i++) { const char *suffix = prereleases->items[i].string; int start, suffix_len = strlen(suffix); if (suffix_len < off) diff --git a/worktree.c b/worktree.c index af68b24f9d..248bbb39d4 100644 --- a/worktree.c +++ b/worktree.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "abspath.h" @@ -1,6 +1,9 @@ /* * Various trivial helper wrappers around standard functions */ + +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "git-compat-util.h" #include "abspath.h" #include "parse.h" @@ -3,6 +3,9 @@ * * Copyright (c) 2007 Junio C Hamano */ + +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "git-compat-util.h" #include "attr.h" #include "strbuf.h" diff --git a/wt-status.c b/wt-status.c index 6a8c05d1cf..3ee9181764 100644 --- a/wt-status.c +++ b/wt-status.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "advice.h" diff --git a/xdiff-interface.c b/xdiff-interface.c index d5dc88661e..3bd61f26e9 100644 --- a/xdiff-interface.c +++ b/xdiff-interface.c @@ -1,4 +1,5 @@ #define USE_THE_REPOSITORY_VARIABLE +#define DISABLE_SIGN_COMPARE_WARNINGS #include "git-compat-util.h" #include "gettext.h" diff --git a/xdiff/xdiffi.c b/xdiff/xdiffi.c index 344c2dfc3e..4685ba6137 100644 --- a/xdiff/xdiffi.c +++ b/xdiff/xdiffi.c @@ -19,6 +19,7 @@ * Davide Libenzi <davidel@xmailserver.org> * */ +#define DISABLE_SIGN_COMPARE_WARNINGS #include "xinclude.h" diff --git a/xdiff/xinclude.h b/xdiff/xinclude.h index a4285ac0eb..7e56542526 100644 --- a/xdiff/xinclude.h +++ b/xdiff/xinclude.h @@ -23,6 +23,8 @@ #if !defined(XINCLUDE_H) #define XINCLUDE_H +#define DISABLE_SIGN_COMPARE_WARNINGS + #include "git-compat-util.h" #include "xmacros.h" #include "xdiff.h" |
