summaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2022-04-11Merge tag 'v2.35.2'Junio C Hamano14-12/+272
2022-04-11i18n: fix some badly formatted i18n stringsJean-Noël Avila2-5/+4
String in submodule--helper is not correctly formatting placeholders. The string in git-send-email is partial. Signed-off-by: Jean-Noël Avila <jn.avila@free.fr> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-04-11tests: make SANITIZE=address imply TEST_NO_MALLOC_CHECKPhillip Wood2-3/+7
As the address sanitizer checks for a superset of the issues detected by setting MALLOC_CHECK_ (which tries to detect things like double frees and off-by-one errors) there is no need to set the latter when compiling with -fsanitize=address. This fixes a regression introduced by 131b94a10a ("test-lib.sh: Use GLIBC_TUNABLES instead of MALLOC_CHECK_ on glibc >= 2.34", 2022-03-04) which causes all the tests to fail with the message ASan runtime does not come first in initial library list; you should either link runtime to your application or manually preload it with LD_PRELOAD. when git is compiled with SANITIZE=address on systems with glibc >= 2.34. I have tested SANITIZE=leak and SANITIZE=undefined and they do not suffer from this regression so the fix in this patch should be sufficient. Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-04-11t7812: test PCRE2 whitespace bugRené Scharfe1-0/+10
Check if git grep works around the PCRE2 big fixed by their e0c6029 (Fix inifinite loop when a single byte newline is searched in JIT., 2020-05-29), which affects version 10.35 and earlier. Searching for leading whitespace also triggers the endless loop. Set a one-second alarm to abort in case we do get hit by the bug, to avoid having to wait forever for the test result. Reported-by: SZEDER Gábor <szeder.dev@gmail.com> Signed-off-by: René Scharfe <l.s.r@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-04-11Merge branch 'fr_2.36_rnd1' of github.com:jnavila/gitJiang Xin1-3969/+4717
* 'fr_2.36_rnd1' of github.com:jnavila/git: l10n: fr: v2.36 round 1
2022-04-11Merge branch 'fz/po-zh_CN' of github.com:fangyi-zhou/git-poJiang Xin2-3937/+4706
* 'fz/po-zh_CN' of github.com:fangyi-zhou/git-po: l10n: zh_CN v2.36.0 round 1 l10n: Update zh_CN repo link
2022-04-09l10n: fr: v2.36 round 1Jean-Noël Avila1-3969/+4717
Signed-off-by: Jean-Noël Avila <jn.avila@free.fr>
2022-04-08Git 2.36-rc1v2.36.0-rc1Junio C Hamano1-1/+1
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-04-08Merge branch 'ld/sparse-index-bash-completion'Junio C Hamano1-9/+26
Test regression fix. * ld/sparse-index-bash-completion: t9902: split test to run on appropriate systems
2022-04-08Merge branch 'tl/ls-tree-oid-only'Junio C Hamano1-2/+2
Docfix. * tl/ls-tree-oid-only: ls-tree doc: document interaction with submodules
2022-04-08t9902: split test to run on appropriate systemsAdam Dinwoodie1-9/+26
The "FUNNYNAMES" test prerequisite passes on Cygwin, as the Cygwin file system interface has a workaround for the underlying operating system's lack of support for tabs, newlines or quotes. However, it does not add support for backslash, which is treated as a directory separator, meaning one of the tests added by 48803821b1 ("completion: handle unusual characters for sparse-checkout", 2022-02-07) will fail on Cygwin. To avoid this failure while still getting maximal test coverage, split that test into two: test handling of paths that include tabs on anything that has the FUNNYNAMES prerequisite, but skip testing handling of paths that include backslashes unless both FUNNYNAMES is set and the system is not Cygwin. It might be nice to have more granularity than "FUNNYNAMES" and its sibling "FUNNIERNAMES" provide, so that tests could be run based on specific individual characters supported by the file system being tested, but that seems like it would make the prerequisite checks in this area much more verbose for very little gain. Signed-off-by: Adam Dinwoodie <adam@dinwoodie.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-04-08convert: clarify line ending conversion warningAlex Henrie2-10/+10
The warning about converting line endings is extremely confusing. Its two sentences each use the word "will" without specifying a timeframe, which makes it sound like both sentences are referring to the same timeframe. On top of that, it uses the term "original line endings" without saying whether "original" means LF or CRLF. Rephrase the warning to be clear about when the line endings will be changed and what they will be changed to. On a platform whose native line endings are not CRLF (e.g. Linux), the "git add" step in the following sequence triggers the warning in question: $ git config core.autocrlf true $ echo 'Hello world!' >hello.txt $ git add hello.txt warning: LF will be replaced by CRLF in hello.txt The file will have its original line endings in your working directory Signed-off-by: Alex Henrie <alexhenrie24@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-04-08ls-tree doc: document interaction with submodulesÆvar Arnfjörð Bjarmason1-2/+2
The ls-tree documentation had never been updated after it learned to interact with submodules to explicitly mention them. The initial support was added in f35a6d3bce7 (Teach core object handling functions about gitlinks, 2007-04-09). E.g. the discussion of --long added in f35a6d3bce7 (Teach core object handling functions about gitlinks, 2007-04-09) didn't explicitly mention them. But this documentation added in 455923e0a15 (ls-tree: introduce "--format" option, 2022-03-23) had no such excuse, and was actively misleading by providing an exhaustive but incomplete list of object types we'd emit. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-04-08contrib/vscode/: debugging with VS Code and gdbCOGONI Guillaume2-2/+5
The externalConsole=true setting is broken for many users (launching the debugger with such setting results in VS Code waiting forever without actually starting the debugger). Also, this setting is a matter of user preference, and is arguably better set in a "launch" section in the user-wide settings.json than hardcoded in our script. Remove the line to use VS Code's default, or the user's setting. Add useful links in contrib/vscode/README.md to help the user to configure VS Code and how to use the debugging feature. Helped-by: Matthieu Moy <Matthieu.Moy@univ-lyon1.fr> Helped-by: Derrick Stolee <derrickstolee@github.com> Co-authored-by: BRESSAT Jonathan <git.jonathan.bressat@gmail.com> Signed-off-by: COGONI Guillaume <cogoni.guillaume@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-04-08l10n: zh_CN v2.36.0 round 1Fangyi Zhou1-3935/+4704
Reviewed-by: 依云 <lilydjwg@gmail.com> Signed-off-by: Fangyi Zhou <me@fangyi.io>
2022-04-08l10n: Update zh_CN repo linkFangyi Zhou2-2/+2
Signed-off-by: Fangyi Zhou <me@fangyi.io>
2022-04-07Merge branch 'jc/cat-file-batch-commands'Junio C Hamano1-1/+1
Doc fix. * jc/cat-file-batch-commands: Documentation: add --batch-command to cat-file synopsis
2022-04-07Documentation: add --batch-command to cat-file synopsisÆvar Arnfjörð Bjarmason1-1/+1
440c705ea63 (cat-file: add --batch-command mode, 2022-02-18) added the new option and operating mode without listing it to the synopsis section. Fix it. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-04-07Merge branch 'tz/doc-litdd-fixes'Junio C Hamano4-11/+11
Documentation markup fix. * tz/doc-litdd-fixes: doc: replace "--" with {litdd} in credential-cache/fsmonitor
2022-04-07Merge branch 'js/apply-partial-clone-filters-recursively'Junio C Hamano1-1/+1
Typofix * js/apply-partial-clone-filters-recursively: submodule-helper: fix usage string
2022-04-07Merge branch 'tl/ls-tree-oid-only'Junio C Hamano1-1/+1
* tl/ls-tree-oid-only: git-ls-tree.txt: fix the name of "%(objectsize:padded)"
2022-04-07git-ls-tree.txt: fix the name of "%(objectsize:padded)"Martin Ågren1-1/+1
Commit 455923e0a1 ("ls-tree: introduce "--format" option", 2022-03-23) introduced `--format` and the various placeholders it can take, such as %(objectname) and %(objectsize). At some point when that patch was being developed, those placeholders had shorter names, e.g., %(name) and %(size), which can be seen in the commit message of 455923e0a1. One instance of "%(size:padded)" also managed to enter the documentation in the final version of the patch. Correct it to "%(objectsize:padded)". Signed-off-by: Martin Ågren <martin.agren@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-04-07submodule-helper: fix usage stringFangyi Zhou1-1/+1
The missing space at the end of the line makes the closing square bracket sticking to the dash in the next line Found during localisation v2.36.0 round 1 Signed-off-by: Fangyi Zhou <me@fangyi.io> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-04-07l10n: po-id for 2.36 (round 1)Bagas Sanjaya1-4206/+5075
Update following components: * add-interactive.c * branch.c * config.c * help.c * merge-ort-wrappers.c * builtin/bisect--helper.c * builtin/branch.c * builtin/cat-file.c * builtin/checkout.c * builtin/clone.c * builtin/config.c * builtin/reflog.c * builtin/remote.c * builtin/sparse-checkout.c * builtin/submodule--helper.c * builtin/unpack-objects.c Translate following new components: * connect.c * connected.c * date.c * hook.c * files-backend.c * ident.c * merge-ort.c * merge-recursive.c * refs.c * refspec.c * revision.c * symlinks.c * worktree.c * builtin/notes.c * builtin/multi-pack-index.c * builtin/commit.c * builtin/merge-base.c Signed-off-by: Bagas Sanjaya <bagasdotme@gmail.com>
2022-04-06doc: replace "--" with {litdd} in credential-cache/fsmonitorTodd Zullinger4-11/+11
Asciidoc renders `--` as em-dash. This is not appropriate for command names. It also breaks linkgit links to these commands. Fix git-credential-cache--daemon and git-fsmonitor--daemon. The latter was added 3248486920 (fsmonitor: document builtin fsmonitor, 2022-03-25) and included several links. A check for broken links in the HTML docs turned this up. Manually inspecting the other Documentation/git-*--*.txt files turned up the issue in git-credential-cache--daemon. While here, quote `git credential-cache--daemon` in the synopsis to match the vast majority of our other documentation. Signed-off-by: Todd Zullinger <tmz@pobox.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-04-06Merge branch 'tl/ls-tree-oid-only'Junio C Hamano1-1/+1
"git ls-tree" learns "--oid-only" option, similar to "--name-only", and more generalized "--format" option. source: <cover.1648026472.git.dyroneteng@gmail.com> * tl/ls-tree-oid-only: ls-tree: `-l` should not imply recursive listing
2022-04-06Merge branch 'bc/csprng-mktemps'Junio C Hamano3-1/+6
Build fix. * bc/csprng-mktemps: git-compat-util: really support openssl as a source of entropy
2022-04-06Merge branch 'ns/core-fsyncmethod'Junio C Hamano1-1/+1
A couple of fix-up to a topic that is now in 'master'. source: <pull.1193.git.1648663716891.gitgitgadget@gmail.com> * ns/core-fsyncmethod: configure.ac: fix HAVE_SYNC_FILE_RANGE definition
2022-04-06Merge branch 'ab/make-optim-noop'Junio C Hamano2-2/+2
A micro fix to a topic earlier merged to 'master' source: <patch-1.1-05949221e3f-20220319T002715Z-avarab@gmail.com> * ab/make-optim-noop: contrib/scalar: fix 'all' target in Makefile Documentation/Makefile: fix "make info" regression in dad9cd7d518
2022-04-06blame: report correct number of lines in progress when using rangesEdmundo Carmona Antoranz2-1/+45
When using ranges, use the range sizes as the limit for progress instead of the size of the full file. Before: $ git blame --progress builtin/blame.c > /dev/null Blaming lines: 100% (1210/1210), done. $ git blame --progress -L 100,120 -L 200,300 builtin/blame.c > /dev/null Blaming lines: 10% (122/1210), done. $ After: $ ./git blame --progress builtin/blame.c > /dev/null Blaming lines: 100% (1210/1210), done. $ ./git blame --progress -L 100,120 -L 200,300 builtin/blame.c > /dev/null Blaming lines: 100% (122/122), done. $ Signed-off-by: Edmundo Carmona Antoranz <eantoranz@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-04-06t/perf: add iteration setup mechanism to perf-libNeeraj Singh6-34/+74
Tests that affect the repo in stateful ways are easier to write if we can run setup steps outside of the measured portion of perf iteration. This change adds a "--setup 'setup-script'" parameter to test_perf. To make invocations easier to understand, I also moved the prerequisites to a new --prereq parameter. The setup facility will be used in the upcoming perf tests for batch mode, but it already helps in some existing tests, like t5302 and t7820. Signed-off-by: Neeraj Singh <neerajsi@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-04-06core.fsyncmethod: performance tests for batch modeNeeraj Singh1-0/+82
Add basic performance tests for git commands that can add data to the object database. We cover: * git add * git stash * git update-index (via git stash) * git unpack-objects * git commit --all We cover all currently available fsync methods as well. Signed-off-by: Neeraj Singh <neerajsi@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-04-06core.fsyncmethod: tests for batch modeNeeraj Singh4-14/+109
Add test cases to exercise batch mode for: * 'git add' * 'git stash' * 'git update-index' * 'git unpack-objects' These tests ensure that the added data winds up in the object database. In this change we introduce a new test helper lib-unique-files.sh. The goal of this library is to create a tree of files that have different oids from any other files that may have been created in the current test repo. This helps us avoid missing validation of an object being added due to it already being in the repo. Signed-off-by: Neeraj Singh <neerajsi@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-04-06test-lib-functions: add parsing helpers for ls-files and ls-treeNeeraj Singh2-47/+54
Several tests use awk to parse OIDs from the output of 'git ls-files --stage' and 'git ls-tree'. Introduce helpers to centralize these uses of awk. Update t5317-pack-objects-filter-objects.sh to use the new ls-files helper so that it has some usages to review. Other updates are left for the future. Signed-off-by: Neeraj Singh <neerajsi@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-04-06core.fsync: use batch mode and sync loose objects by default on WindowsNeeraj Singh4-1/+10
Git for Windows has defaulted to core.fsyncObjectFiles=true since September 2017. We turn on syncing of loose object files with batch mode in upstream Git so that we can get broad coverage of the new code upstream. We don't actually do fsyncs in the most of the test suite, since GIT_TEST_FSYNC is set to 0. However, we do exercise all of the surrounding batch mode code since GIT_TEST_FSYNC merely makes the maybe_fsync wrapper always appear to succeed. Signed-off-by: Neeraj Singh <neerajsi@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-04-06unpack-objects: use the bulk-checkin infrastructureNeeraj Singh1-0/+3
The unpack-objects functionality is used by fetch, push, and fast-import to turn the transfered data into object database entries when there are fewer objects than the 'unpacklimit' setting. By enabling an odb-transaction when unpacking objects, we can take advantage of batched fsyncs. Here are some performance numbers to justify batch mode for unpack-objects, collected on a WSL2 Ubuntu VM. Fsync Mode | Time for 90 objects (ms) ------------------------------------- Off | 170 On,fsync | 760 On,batch | 230 Note that the default unpackLimit is 100 objects, so there's a 3x benefit in the worst case. The non-batch mode fsync scales linearly with the number of objects, so there are significant benefits even with smaller numbers of objects. Signed-off-by: Neeraj Singh <neerajsi@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-04-06update-index: use the bulk-checkin infrastructureNeeraj Singh1-0/+20
The update-index functionality is used internally by 'git stash push' to setup the internal stashed commit. This change enables odb-transactions for update-index infrastructure to speed up adding new objects to the object database by leveraging the batch fsync functionality. There is some risk with this change, since under batch fsync, the object files will be in a tmp-objdir until update-index is complete, so callers using the --stdin option will not see them until update-index is done. This risk is mitigated by flushing the ODB transaction prior to reporting any verbose output so that objects will be visible to callers that are synchronizing with update-index by snooping its output. Signed-off-by: Neeraj Singh <neerajsi@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-04-06builtin/add: add ODB transaction around add_files_to_cacheNeeraj Singh1-0/+9
The add_files_to_cache function is invoked internally by builtin/commit.c and builtin/checkout.c for their flags that stage modified files before doing the larger operation. These commands can benefit from batched fsyncing. Signed-off-by: Neeraj Singh <neerajsi@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-04-06cache-tree: use ODB transaction around writing a treeNeeraj Singh1-0/+3
Take advantage of the odb transaction infrastructure around writing the cached tree to the object database. Signed-off-by: Neeraj Singh <neerajsi@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-04-06core.fsyncmethod: batched disk flushes for loose-objectsNeeraj Singh6-2/+97
When adding many objects to a repo with `core.fsync=loose-object`, the cost of fsync'ing each object file can become prohibitive. One major source of the cost of fsync is the implied flush of the hardware writeback cache within the disk drive. This commit introduces a new `core.fsyncMethod=batch` option that batches up hardware flushes. It hooks into the bulk-checkin odb-transaction functionality, takes advantage of tmp-objdir, and uses the writeout-only support code. When the new mode is enabled, we do the following for each new object: 1a. Create the object in a tmp-objdir. 2a. Issue a pagecache writeback request and wait for it to complete. At the end of the entire transaction when unplugging bulk checkin: 1b. Issue an fsync against a dummy file to flush the log and hardware writeback cache, which should by now have seen the tmp-objdir writes. 2b. Rename all of the tmp-objdir files to their final names. 3b. When updating the index and/or refs, we assume that Git will issue another fsync internal to that operation. This is not the default today, but the user now has the option of syncing the index and there is a separate patch series to implement syncing of refs. On a filesystem with a singular journal that is updated during name operations (e.g. create, link, rename, etc), such as NTFS, HFS+, or XFS we would expect the fsync to trigger a journal writeout so that this sequence is enough to ensure that the user's data is durable by the time the git command returns. This sequence also ensures that no object files appear in the main object store unless they are fsync-durable. Batch mode is only enabled if core.fsync includes loose-objects. If the legacy core.fsyncObjectFiles setting is enabled, but core.fsync does not include loose-objects, we will use file-by-file fsyncing. In step (1a) of the sequence, the tmp-objdir is created lazily to avoid work if no loose objects are ever added to the ODB. We use a tmp-objdir to maintain the invariant that no loose-objects are visible in the main ODB unless they are properly fsync-durable. This is important since future ODB operations that try to create an object with specific contents will silently drop the new data if an object with the target hash exists without checking that the loose-object contents match the hash. Only a full git-fsck would restore the ODB to a functional state where dataloss doesn't occur. In step (1b) of the sequence, we issue a fsync against a dummy file created specifically for the purpose. This method has a little higher cost than using one of the input object files, but makes adding new callers of this mechanism easier, since we don't need to figure out which object file is "last" or risk sharing violations by caching the fd of the last object file. _Performance numbers_: Linux - Hyper-V VM running Kernel 5.11 (Ubuntu 20.04) on a fast SSD. Mac - macOS 11.5.1 running on a Mac mini on a 1TB Apple SSD. Windows - Same host as Linux, a preview version of Windows 11. Adding 500 files to the repo with 'git add' Times reported in seconds. object file syncing | Linux | Mac | Windows --------------------|-------|-------|-------- disabled | 0.06 | 0.35 | 0.61 fsync | 1.88 | 11.18 | 2.47 batch | 0.15 | 0.41 | 1.53 Signed-off-by: Neeraj Singh <neerajsi@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-04-06bulk-checkin: rebrand plug/unplug APIs as 'odb transactions'Neeraj Singh3-12/+41
Make it clearer in the naming and documentation of the plug_bulk_checkin and unplug_bulk_checkin APIs that they can be thought of as a "transaction" to optimize operations on the object database. These transactions may be nested so that subsystems like the cache-tree writing code can optimize their operations without caring whether the top-level code has a transaction active. Add a flush_odb_transaction API that will be used in update-index to make objects visible even if a transaction is active. The flush call may also be useful in future cases if we hold a transaction active around calling hooks. Signed-off-by: Neeraj Singh <neerajsi@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-04-06bulk-checkin: rename 'state' variable and separate 'plugged' booleanNeeraj Singh1-16/+17
This commit prepares for adding batch-fsync to the bulk-checkin infrastructure. The bulk-checkin infrastructure is currently used to batch up addition of large blobs to a packfile. When a blob is larger than big_file_threshold, we unconditionally add it to a pack. If bulk checkins are 'plugged', we allow multiple large blobs to be added to a single pack until we reach the packfile size limit; otherwise, we simply make a new packfile for each large blob. The 'unplug' call tells us when the series of blob additions is done so that we can finish the packfiles and make their objects available to subsequent operations. Stated another way, bulk-checkin allows callers to define a transaction that adds multiple objects to the object database, where the object database can optimize its internal operations within the transaction boundary. Batched fsync will fit into bulk-checkin by taking advantage of the plug/unplug functionality to determine the appropriate time to fsync and make newly-added objects available in the primary object database. * Rename 'state' variable to 'bulk_checkin_packfile', since we will later be adding 'bulk_fsync_objdir'. This also makes the variable easier to find in the debugger, since the name is more unique. * Rename finish_bulk_checkin to flush_bulk_checkin_packfile and call it unconditionally from unplug_bulk_checkin. Internally it will conditionally do a flush if there's any work to do. * Move the 'plugged' data member of 'bulk_checkin_state' into a separate static variable. Doing this avoids resetting the variable in finish_bulk_checkin when zeroing the 'bulk_checkin_state'. As-is, we seem to unintentionally disable the plugging functionality the first time a new packfile must be created due to packfile size limits. While disabling the plugging state only results in suboptimal behavior for the current code, it would be fatal for the bulk-fsync functionality later in this patch series. The net effect of these changes is to make a clear separation between the portion of the bulk-checkin infrastructure that is related to the packfile (nearly all of it at present) and the part that is related to other future optimizations of the ODB. Signed-off-by: Neeraj Singh <neerajsi@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-04-06Merge branch 'ns/core-fsyncmethod' into ns/batch-fsyncJunio C Hamano26-60/+444
* ns/core-fsyncmethod: configure.ac: fix HAVE_SYNC_FILE_RANGE definition core.fsyncmethod: correctly camel-case warning message core.fsync: fix incorrect expression for default configuration core.fsync: documentation and user-friendly aggregate options core.fsync: new option to harden the index core.fsync: add configuration parsing core.fsync: introduce granular fsync control infrastructure core.fsyncmethod: add writeout-only mode wrapper: make inclusion of Windows csprng header tightly scoped
2022-04-06git-p4: preserve utf8 BOM when importing from p4 to gitTao Klerks2-0/+44
Perforce has a file type "utf8" which represents a text file with explicit BOM. utf8-encoded files *without* BOM are stored as regular file type "text". The "utf8" file type behaves like text in all but one important way: it is stored, internally, without the leading 3 BOM bytes. git-p4 has historically imported utf8-with-BOM files (files stored, in Perforce, as type "utf8") the same way as regular text files - losing the BOM in the process. Under most circumstances this issue has little functional impact, as most systems consider the BOM to be optional and redundant, but this *is* a correctness failure, and can have lead to practical issues for example when BOMs are explicitly included in test files, for example in a file encoding test suite. Fix the handling of utf8-with-BOM files when importing changes from p4 to git, and introduce a test that checks it is working correctly. Signed-off-by: Tao Klerks <tao@klerks.biz> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-04-06git-p4: support explicit sync of arbitrary existing git-p4 refsTao Klerks3-14/+133
With the --branch argument of the "sync" subcommand, git-p4 enables you to import a perforce branch/path to an arbitrary git ref, using a full ref path, or to refs/remotes/p4/* or refs/heads/p4/*, depending on --import-local, using a short ref name. However, when you later want to explicitly sync such a given ref to pick up subsequent p4 changes, it only works if the ref was placed in the p4 path *and* has only one path component (no "/"). This limitation results from a bad assumption in the existing-branch sync logic, and also means you cannot individually sync branches detected by --detect-branches, as these also get a "/" in their names. Fix "git p4 sync --branch", when called with an existing ref, so that it works correctly regardless of whether the ref is in the p4 path or not, and (in the case of refs in the p4 path) regardless of whether it has a "/" in its short name or not. Also add tests to validate that these branch-specific syncs work as expected. Signed-off-by: Tao Klerks <tao@klerks.biz> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-04-06contrib/scalar: fix 'all' target in MakefileVictoria Dye1-1/+1
Add extra ':' to second 'all' target definition to allow 'scalar' to build. Without this fix, the 'all:' and 'all::' targets together cause a build failure when 'scalar' build is enabled with 'INCLUDE_SCALAR': Makefile:14: *** target file `all' has both : and :: entries. Stop. Signed-off-by: Victoria Dye <vdye@github.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-04-06Documentation/Makefile: fix "make info" regression in dad9cd7d518Ævar Arnfjörð Bjarmason1-1/+1
Fix a regression in my dad9cd7d518 (Makefile: move ".SUFFIXES" rule to shared.mak, 2022-03-03). As explained in the GNU make documentation for the $* variable, available at: info make --index-search='$*' This rule relied on ".texi" being in the default list of suffixes, as seen at: make -f/dev/null -p | grep -v -e ^# -e ^$|grep -F .SUFFIXES The documentation explains what was going on here: In an explicit rule, there is no stem; so '$*' cannot be determined in that way. Instead, if the target name ends with a recognized suffix (*note Old-Fashioned Suffix Rules: Suffix Rules.), '$*' is set to the target name minus the suffix. For example, if the target name is 'foo.c', then '$*' is set to 'foo', since '.c' is a suffix. GNU 'make' does this bizarre thing only for compatibility with other implementations of 'make'. You should generally avoid using '$*' except in implicit rules or static pattern rules. If the target name in an explicit rule does not end with a recognized suffix, '$*' is set to the empty string for that rule. I.e. this rule added back in 5cefc33bffd (Documentation: add gitman.info target, 2007-12-10) was resolving gitman.texi from gitman.info. We can instead just use the more obvious $< variable referring to the prerequisite. This was the only use of $* in our Makefiles in an explicit rule, the three remaining ones are all implicit rules, and therefore didn't depend on the ".SUFFIXES" list. Reported-by: Adam Dinwoodie <adam@dinwoodie.org> Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Tested-by: Adam Dinwoodie <adam@dinwoodie.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-04-06apply.c: remove unnecessary includeGarrit Franke1-1/+0
Remove include "lockfile.h" from builtin/apply.c, which is orphaned since 6d058c88264 (apply: move lockfile into `apply_state`, 2017-10-05) Signed-off-by: Garrit Franke <garrit@slashdev.space> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-04-06serve.c: remove unnecessary includeGarrit Franke1-1/+0
Remove include "strvec.h" from serve.c, which is orphaned since f0a35c9ce52 (serve: drop "keys" strvec, 2021-09-15) Signed-off-by: Garrit Franke <garrit@slashdev.space> Signed-off-by: Junio C Hamano <gitster@pobox.com>
2022-04-06configure.ac: fix HAVE_SYNC_FILE_RANGE definitionAdam Dinwoodie1-1/+1
If sync_file_range is not available when building the configure script, there is a cosmetic bug when running that script reporting "HAVE_SYNC_FILE_RANGE: command not found". Remove that error message by defining HAVE_SYNC_FILE_RANGE to an empty string, rather than generating a script where that appears as a bare command. Signed-off-by: Adam Dinwoodie <adam@dinwoodie.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>