7849872 | Junio C Hamano | 26 October 2016, 20:14:50 UTC | Merge branch 'tg/add-chmod+x-fix' A hot-fix for a test added by a recent topic that went to both 'master' and 'maint' already. * tg/add-chmod+x-fix: t3700: fix broken test under !SANITY | 26 October 2016, 20:14:50 UTC |
7425fe1 | Junio C Hamano | 26 October 2016, 20:14:49 UTC | Merge branch 'bw/submodule-branch-dot-doc' Recent git allows submodule.<name>.branch to use a special token "." instead of the branch name; the documentation has been updated to describe it. * bw/submodule-branch-dot-doc: submodules doc: update documentation for "." used for submodule branches | 26 October 2016, 20:14:49 UTC |
9b009ce | Junio C Hamano | 26 October 2016, 20:14:48 UTC | Merge branch 'pb/test-parse-options-expect' Test clean-up. * pb/test-parse-options-expect: t0040: convert all possible tests to use `test-parse-options --expect` | 26 October 2016, 20:14:49 UTC |
4d417fa | Junio C Hamano | 26 October 2016, 20:14:48 UTC | Merge branch 'jk/tighten-alloc' Protect our code from over-eager compilers. * jk/tighten-alloc: inline xalloc_flex() into FLEXPTR_ALLOC_MEM avoid pointer arithmetic involving NULL in FLEX_ALLOC_MEM | 26 October 2016, 20:14:48 UTC |
a5ed267 | Junio C Hamano | 26 October 2016, 20:14:47 UTC | Merge branch 'va/i18n' More i18n. * va/i18n: i18n: diff: mark warnings for translation i18n: credential-cache--daemon: mark advice for translation i18n: convert mark error messages for translation i18n: apply: mark error message for translation i18n: apply: mark error messages for translation i18n: apply: mark info messages for translation i18n: apply: mark plural string for translation | 26 October 2016, 20:14:47 UTC |
9fcd144 | Junio C Hamano | 26 October 2016, 20:14:47 UTC | Merge branch 'jk/fetch-quick-tag-following' When fetching from a remote that has many tags that are irrelevant to branches we are following, we used to waste way too many cycles when checking if the object pointed at by a tag (that we are not going to fetch!) exists in our repository too carefully. * jk/fetch-quick-tag-following: fetch: use "quick" has_sha1_file for tag following | 26 October 2016, 20:14:47 UTC |
92657ea | Junio C Hamano | 26 October 2016, 20:14:46 UTC | Merge branch 'jk/merge-base-fork-point-without-reflog' "git rebase" immediately after "git clone" failed to find the fork point from the upstream. * jk/merge-base-fork-point-without-reflog: merge-base: handle --fork-point without reflog | 26 October 2016, 20:14:47 UTC |
caabffa | Junio C Hamano | 26 October 2016, 20:14:46 UTC | Merge branch 'jk/ambiguous-short-object-names' A test fixup to recently graduated topic. * jk/ambiguous-short-object-names: t1512: become resilient to GETTEXT_POISON build | 26 October 2016, 20:14:46 UTC |
03513c8 | Junio C Hamano | 26 October 2016, 20:14:46 UTC | Merge branch 'jk/upload-pack-use-prio-queue' Code clean-up and performance improvement to reduce use of timestamp-ordered commit-list by replacing it with a priority queue. * jk/upload-pack-use-prio-queue: upload-pack: use priority queue in reachable() check | 26 October 2016, 20:14:46 UTC |
5b94187 | Junio C Hamano | 26 October 2016, 20:14:45 UTC | Merge branch 'ab/gitweb-abbrev-links' In addition to purely abbreviated commit object names, "gitweb" learned to turn "git describe" output (e.g. v2.9.3-599-g2376d31787) into clickable links in its output. * ab/gitweb-abbrev-links: gitweb: link to "git describe"'d commits in log messages gitweb: link to 7-char+ SHA-1s, not only 8-char+ gitweb: fix a typo in a comment | 26 October 2016, 20:14:46 UTC |
8e83d05 | Junio C Hamano | 26 October 2016, 20:14:45 UTC | Merge branch 'dk/worktree-dup-checkout-with-bare-is-ok' In a worktree connected to a repository elsewhere, created via "git worktree", "git checkout" attempts to protect users from confusion by refusing to check out a branch that is already checked out in another worktree. However, this also prevented checking out a branch, which is designated as the primary branch of a bare reopsitory, in a worktree that is connected to the bare repository. The check has been corrected to allow it. * dk/worktree-dup-checkout-with-bare-is-ok: worktree: allow the main brach of a bare repository to be checked out | 26 October 2016, 20:14:45 UTC |
56d268b | Junio C Hamano | 26 October 2016, 20:14:45 UTC | Merge branch 'mg/gpg-richer-status' The GPG verification status shown in "%G?" pretty format specifier was not rich enough to differentiate a signature made by an expired key, a signature made by a revoked key, etc. New output letters have been assigned to express them. * mg/gpg-richer-status: gpg-interface: use more status letters | 26 October 2016, 20:14:45 UTC |
a039738 | Junio C Hamano | 26 October 2016, 20:14:45 UTC | Merge branch 'jc/cocci-xstrdup-or-null' Code cleanup. * jc/cocci-xstrdup-or-null: cocci: refactor common patterns to use xstrdup_or_null() | 26 October 2016, 20:14:45 UTC |
bfe800c | Junio C Hamano | 26 October 2016, 20:14:45 UTC | Merge branch 'mm/credential-libsecret' A new credential helper that talks via "libsecret" with implementations of XDG Secret Service API has been added to contrib/credential/. * mm/credential-libsecret: contrib: add credential helper for libsecret | 26 October 2016, 20:14:45 UTC |
1c2b1f7 | Junio C Hamano | 26 October 2016, 20:14:44 UTC | Merge branch 'bw/ls-files-recurse-submodules' "git ls-files" learned "--recurse-submodules" option that can be used to get a listing of tracked files across submodules (i.e. this only works with "--cached" option, not for listing untracked or ignored files). This would be a useful tool to sit on the upstream side of a pipe that is read with xargs to work on all working tree files from the top-level superproject. * bw/ls-files-recurse-submodules: ls-files: add pathspec matching for submodules ls-files: pass through safe options for --recurse-submodules ls-files: optionally recurse into submodules git: make super-prefix option | 26 October 2016, 20:14:44 UTC |
2bee56b | Junio C Hamano | 26 October 2016, 20:14:44 UTC | Merge branch 'js/libify-require-clean-work-tree' The require_clean_work_tree() helper was recreated in C when "git pull" was rewritten from shell; the helper is now made available to other callers in preparation for upcoming "rebase -i" work. * js/libify-require-clean-work-tree: wt-status: begin error messages with lower-case wt-status: teach has_{unstaged,uncommitted}_changes() about submodules wt-status: export also the has_un{staged,committed}_changes() functions wt-status: make the require_clean_work_tree() function reusable pull: make code more similar to the shell script again pull: drop confusing prefix parameter of die_on_unclean_work_tree() | 26 October 2016, 20:14:44 UTC |
e5272d3 | Junio C Hamano | 26 October 2016, 20:14:43 UTC | Merge branch 'jc/ws-error-highlight' "git diff/log --ws-error-highlight=<kind>" lacked the corresponding configuration variable to set it by default. * jc/ws-error-highlight: diff: introduce diff.wsErrorHighlight option diff.c: move ws-error-highlight parsing helpers up diff.c: refactor parse_ws_error_highlight() t4015: split out the "setup" part of ws-error-highlight test | 26 October 2016, 20:14:43 UTC |
c334eff | Junio C Hamano | 26 October 2016, 20:14:42 UTC | Merge branch 'jc/diff-unique-abbrev-comments' A bit more comments in a tricky code. * jc/diff-unique-abbrev-comments: diff_unique_abbrev(): document its assumption and limitation | 26 October 2016, 20:14:42 UTC |
76e368c | Junio C Hamano | 10 October 2016, 17:41:51 UTC | t3700: fix broken test under !SANITY An "add --chmod=+x" test recently added by 610d55af0f ("add: modify already added files when --chmod is given", 2016-09-14) used "xfoo3" as a test file. The paths xfoo[1-3] were used by earlier tests for symbolic links but they were expected to have been removed by the time the execution reached this new test. The removal with "git reset --hard" however happened in a pair of earlier tests, both of which are protected by POSIXPERM,SANITY prerequisites. Platforms and test environments that lacked these would have seen xfoo3 as a leftover symbolic link that points at somewhere else at this point of the sequence, and the chmod test would have given a wrong result. Signed-off-by: Junio C Hamano <gitster@pobox.com> | 20 October 2016, 16:19:05 UTC |
15ef780 | Brandon Williams | 19 October 2016, 20:42:54 UTC | submodules doc: update documentation for "." used for submodule branches 4d7bc52b17 ("submodule update: allow '.' for branch value", 2016-08-03) adopted from Gerrit a feature to set "." as a special value of "submodule.<name>.branch" in .gitmodules file to indicate that the tracking branch in the submodule should be the same as the current branch in the superproject. Update the documentation to describe this. Signed-off-by: Brandon Williams <bmwill@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 19 October 2016, 21:58:53 UTC |
db42497 | Vasco Almeida | 17 October 2016, 13:15:29 UTC | i18n: diff: mark warnings for translation Mark rename_limit_warning and degrade_cc_to_c_warning and rename_limit_warning for translation. Signed-off-by: Vasco Almeida <vascomalmeida@sapo.pt> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 17 October 2016, 21:51:48 UTC |
af64f20 | Vasco Almeida | 17 October 2016, 13:15:28 UTC | i18n: credential-cache--daemon: mark advice for translation Mark permissions_advice for translation. Signed-off-by: Vasco Almeida <vascomalmeida@sapo.pt> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 17 October 2016, 21:51:47 UTC |
87cb784 | Vasco Almeida | 17 October 2016, 13:15:27 UTC | i18n: convert mark error messages for translation Mark error messages about CRLF for translation. Update test to reflect changes. Signed-off-by: Vasco Almeida <vascomalmeida@sapo.pt> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 17 October 2016, 21:51:45 UTC |
f25dfb5 | Vasco Almeida | 17 October 2016, 13:15:26 UTC | i18n: apply: mark error message for translation Update test to reflect changes. Signed-off-by: Vasco Almeida <vascomalmeida@sapo.pt> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 17 October 2016, 21:51:42 UTC |
86009f3 | Pranit Bauva | 15 October 2016, 12:28:13 UTC | t0040: convert all possible tests to use `test-parse-options --expect` Use "test-parse-options --expect" to rewrite the tests to avoid checking the whole variable dump by just testing what is required. This commit is a follow-up to 8ca65aebad ("t0040: convert a few tests to use test-parse-options --expect", 2016-05-06). Signed-off-by: Pranit Bauva <pranit.bauva@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 17 October 2016, 21:45:01 UTC |
0ac52a3 | René Scharfe | 16 October 2016, 10:06:02 UTC | inline xalloc_flex() into FLEXPTR_ALLOC_MEM Allocate and copy directly in FLEXPTR_ALLOC_MEM and remove the now unused helper function xalloc_flex(). The resulting code is shorter and the offset arithmetic is a bit simpler. Suggested-by: Jeff King <peff@peff.net> Signed-off-by: Rene Scharfe <l.s.r@web.de> Reviewed-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 17 October 2016, 21:42:56 UTC |
e945178 | René Scharfe | 15 October 2016, 16:23:11 UTC | avoid pointer arithmetic involving NULL in FLEX_ALLOC_MEM Calculating offsets involving a NULL pointer is undefined. It works in practice (for now?), but we should not rely on it. Allocate first and then simply refer to the flexible array member by its name instead of performing pointer arithmetic up front. The resulting code is slightly shorter, easier to read and doesn't rely on undefined behaviour. NB: The cast to a (non-const) void pointer is necessary to keep support for flexible array members declared as const. Signed-off-by: Rene Scharfe <l.s.r@web.de> Reviewed-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 17 October 2016, 21:42:31 UTC |
6598894 | Junio C Hamano | 17 October 2016, 20:52:26 UTC | Sync with maint * maint: l10n: de.po: translate 260 new messages l10n: de.po: fix translation of autostash l10n: ru.po: update Russian translation | 17 October 2016, 20:52:26 UTC |
23415c2 | Junio C Hamano | 17 October 2016, 20:27:38 UTC | Merge tag 'l10n-2.10.0-rnd2.4' of git://github.com/git-l10n/git-po into maint l10n-2.10.0-rnd2.4 * tag 'l10n-2.10.0-rnd2.4' of git://github.com/git-l10n/git-po: l10n: de.po: translate 260 new messages l10n: de.po: fix translation of autostash l10n: ru.po: update Russian translation | 17 October 2016, 20:27:38 UTC |
7202657 | Junio C Hamano | 17 October 2016, 20:26:27 UTC | Tenth batch for 2.11 Signed-off-by: Junio C Hamano <gitster@pobox.com> | 17 October 2016, 20:26:27 UTC |
1494482 | Junio C Hamano | 17 October 2016, 20:25:23 UTC | Merge branch 'sb/submodule-config-doc-drop-path' The "submodule.<name>.path" stored in .gitmodules is never copied to .git/config and such a key in .git/config has no meaning, but the documentation described it and submodule.<name>.url next to each other as if both belong to .git/config. This has been fixed. * sb/submodule-config-doc-drop-path: documentation: improve submodule.<name>.{url, path} description | 17 October 2016, 20:25:24 UTC |
c4e0d01 | Junio C Hamano | 17 October 2016, 20:25:23 UTC | Merge branch 'rs/pretty-format-color-doc-fix' * rs/pretty-format-color-doc-fix: pretty: fix document link for color specification | 17 October 2016, 20:25:23 UTC |
ad0e959 | Junio C Hamano | 17 October 2016, 20:25:22 UTC | Merge branch 'js/reset-usage' * js/reset-usage: reset: fix usage | 17 October 2016, 20:25:22 UTC |
5b4c45a | Junio C Hamano | 17 October 2016, 20:25:21 UTC | Merge branch 'da/mergetool-diff-order' "git mergetool" learned to honor "-O<orderfile>" to control the order of paths to present to the end user. * da/mergetool-diff-order: mergetool: honor -O<orderfile> mergetool: honor diff.orderFile mergetool: move main program flow into a main() function mergetool: add copyright | 17 October 2016, 20:25:21 UTC |
69e6544 | Junio C Hamano | 17 October 2016, 20:25:21 UTC | Merge branch 'rs/cocci' Code cleanup. * rs/cocci: use strbuf_add_unique_abbrev() for adding short hashes, part 3 remove unnecessary NULL check before free(3) | 17 October 2016, 20:25:21 UTC |
9424bf2 | Junio C Hamano | 17 October 2016, 20:25:21 UTC | Merge branch 'js/regexec-buf' * js/regexec-buf: configure.ac: improve description of NO_REGEX test | 17 October 2016, 20:25:21 UTC |
f7300cb | Junio C Hamano | 17 October 2016, 20:25:20 UTC | Merge branch 'jk/ref-symlink-loop' A stray symbolic link in $GIT_DIR/refs/ directory could make name resolution loop forever, which has been corrected. * jk/ref-symlink-loop: files_read_raw_ref: prevent infinite retry loops in general files_read_raw_ref: avoid infinite loop on broken symlinks | 17 October 2016, 20:25:20 UTC |
25ab004 | Junio C Hamano | 17 October 2016, 20:25:20 UTC | Merge branch 'jk/quarantine-received-objects' In order for the receiving end of "git push" to inspect the received history and decide to reject the push, the objects sent from the sending end need to be made available to the hook and the mechanism for the connectivity check, and this was done traditionally by storing the objects in the receiving repository and letting "git gc" to expire it. Instead, store the newly received objects in a temporary area, and make them available by reusing the alternate object store mechanism to them only while we decide if we accept the check, and once we decide, either migrate them to the repository or purge them immediately. * jk/quarantine-received-objects: tmp-objdir: do not migrate files starting with '.' tmp-objdir: put quarantine information in the environment receive-pack: quarantine objects until pre-receive accepts tmp-objdir: introduce API for temporary object directories check_connected: accept an env argument | 17 October 2016, 20:25:20 UTC |
dec0401 | Junio C Hamano | 17 October 2016, 20:25:19 UTC | Merge branch 'jk/alt-odb-cleanup' Codepaths involved in interacting alternate object store have been cleaned up. * jk/alt-odb-cleanup: alternates: use fspathcmp to detect duplicates sha1_file: always allow relative paths to alternates count-objects: report alternates via verbose mode fill_sha1_file: write into a strbuf alternates: store scratch buffer as strbuf fill_sha1_file: write "boring" characters alternates: use a separate scratch space alternates: encapsulate alt->base munging alternates: provide helper for allocating alternate alternates: provide helper for adding to alternates list link_alt_odb_entry: refactor string handling link_alt_odb_entry: handle normalize_path errors t5613: clarify "too deep" recursion tests t5613: do not chdir in main process t5613: whitespace/style cleanups t5613: use test_must_fail t5613: drop test_valid_repo function t5613: drop reachable_via function | 17 October 2016, 20:25:20 UTC |
af9a70c | Junio C Hamano | 17 October 2016, 20:25:19 UTC | Merge branch 'nd/commit-p-doc' Documentation for "git commit" was updated to clarify that "commit -p <paths>" adds to the current contents of the index to come up with what to commit. * nd/commit-p-doc: git-commit.txt: clarify --patch mode with pathspec | 17 October 2016, 20:25:19 UTC |
630e05c | Junio C Hamano | 17 October 2016, 20:25:18 UTC | Merge branch 'jk/clone-copy-alternates-fix' "git clone" of a local repository can be done at the filesystem level, but the codepath did not check errors while copying and adjusting the file that lists alternate object stores. * jk/clone-copy-alternates-fix: clone: detect errors in normalize_path_copy | 17 October 2016, 20:25:18 UTC |
c6400bf | Junio C Hamano | 17 October 2016, 20:25:18 UTC | Merge branch 'dt/http-empty-auth' http.emptyauth configuration is a way to allow an empty username to pass when attempting to authenticate using mechanisms like Kerberos. We took an unspecified (NULL) username and sent ":" (i.e. no username, no password) to CURLOPT_USERPWD, but did not do the same when the username is explicitly set to an empty string. * dt/http-empty-auth: http: http.emptyauth should allow empty (not just NULL) usernames | 17 October 2016, 20:25:18 UTC |
4dc2ce9 | Jiang Xin | 16 October 2016, 12:11:41 UTC | Merge branch 'russian-l10n' of https://github.com/DJm00n/git-po-ru * 'russian-l10n' of https://github.com/DJm00n/git-po-ru: l10n: ru.po: update Russian translation | 16 October 2016, 12:11:41 UTC |
cf5c725 | Ævar Arnfjörð Bjarmason | 06 October 2016, 09:11:35 UTC | gitweb: link to "git describe"'d commits in log messages Change the log formatting function to know about "git describe" output such as "v2.8.0-4-g867ad08", in addition to just plain "867ad08". There are still many valid refnames that we don't link to e.g. v2.10.0-rc1~2^2~1 is also a valid way to refer to v2.8.0-4-g867ad08, but I'm not supporting that with this commit, similarly it's trivially possible to create some refnames like "æ/var-gf6727b0" or which won't be picked up by this regex. There's surely room for improvement here, but I just wanted to address the very common case of sticking "git describe" output into commit messages without trying to link to all possible refnames, that's going to be a rather futile exercise given that this is free text, and it would be prohibitively expensive to look up whether the references in question exist in our repository. There was on-list discussion about how we could do better than this patch. Junio suggested to update parse_commits() to call a new "gitweb--helper" command which would pass each of the revision candidates through "rev-parse --verify --quiet". That would cut down on our false positives (e.g. we'll link to "deadbeef"), and also allow us to be more aggressive in selecting candidate revisions. That may be too expensive to work in practice, or it may not. Investigating that would be a good follow-up to this patch. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Acked-by: Jakub Narębski <jnareb@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 14 October 2016, 20:22:55 UTC |
8059966 | Ævar Arnfjörð Bjarmason | 06 October 2016, 09:11:34 UTC | gitweb: link to 7-char+ SHA-1s, not only 8-char+ Change the minimum length of an abbreviated object identifier in the commit message gitweb tries to turn into link from 8 hexchars to 7. This arbitrary minimum length of 8 was introduced in bfe2191 ("gitweb: SHA-1 in commit log message links to "object" view", 2006-12-10), but the default abbreviation length is 7, and has been for a long time. It's still possible to reference SHA-1s down to 4 characters in length, see v1.7.4-1-gdce9648's MINIMUM_ABBREV, but I can't see how to make git actually produce that, so I doubt anyone is putting that into log messages in practice, but people definitely do put 7 character SHA-1s into log messages. I think it's fairly dubious to link to things matching [0-9a-fA-F] here as opposed to just [0-9a-f], that dates back to the initial version of gitweb from 161332a ("first working version", 2005-08-07). Git will accept all-caps SHA-1s, but didn't ever produce them as far as I can tell. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Acked-by: Jakub Narębski <jnareb@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 14 October 2016, 20:22:51 UTC |
26547bf | Ævar Arnfjörð Bjarmason | 06 October 2016, 09:11:33 UTC | gitweb: fix a typo in a comment Change a typo'd MIME type in a comment. The Content-Type is application/xhtml+xml, not application/xhtm+xml. Fixes up code originally added in 53c4031 ("gitweb: Strip non-printable characters from syntax highlighter output", 2011-09-16). Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Acked-by: Jakub Narębski <jnareb@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 14 October 2016, 20:22:31 UTC |
5827a03 | Jeff King | 13 October 2016, 16:53:44 UTC | fetch: use "quick" has_sha1_file for tag following When we auto-follow tags in a fetch, we look at all of the tags advertised by the remote and fetch ones where we don't already have the tag, but we do have the object it peels to. This involves a lot of calls to has_sha1_file(), some of which we can reasonably expect to fail. Since 45e8a74 (has_sha1_file: re-check pack directory before giving up, 2013-08-30), this may cause many calls to reprepare_packed_git(), which is potentially expensive. This has gone unnoticed for several years because it requires a fairly unique setup to matter: 1. You need to have a lot of packs on the client side to make reprepare_packed_git() expensive (the most expensive part is finding duplicates in an unsorted list, which is currently quadratic). 2. You need a large number of tag refs on the server side that are candidates for auto-following (i.e., that the client doesn't have). Each one triggers a re-read of the pack directory. 3. Under normal circumstances, the client would auto-follow those tags and after one large fetch, (2) would no longer be true. But if those tags point to history which is disconnected from what the client otherwise fetches, then it will never auto-follow, and those candidates will impact it on every fetch. So when all three are true, each fetch pays an extra O(nr_tags * nr_packs^2) cost, mostly in string comparisons on the pack names. This was exacerbated by 47bf4b0 (prepare_packed_git_one: refactor duplicate-pack check, 2014-06-30) which uses a slightly more expensive string check, under the assumption that the duplicate check doesn't happen very often (and it shouldn't; the real problem here is how often we are calling reprepare_packed_git()). This patch teaches fetch to use HAS_SHA1_QUICK to sacrifice accuracy for speed, in cases where we might be racy with a simultaneous repack. This is similar to the fix in 0eeb077 (index-pack: avoid excessive re-reading of pack directory, 2015-06-09). As with that case, it's OK for has_sha1_file() occasionally say "no I don't have it" when we do, because the worst case is not a corruption, but simply that we may fail to auto-follow a tag that points to it. Here are results from the included perf script, which sets up a situation similar to the one described above: Test HEAD^ HEAD ---------------------------------------------------------- 5550.4: fetch 11.21(10.42+0.78) 0.08(0.04+0.02) -99.3% Reported-by: Vegard Nossum <vegard.nossum@oracle.com> Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 14 October 2016, 18:31:32 UTC |
d1d42bf | Vasco Almeida | 14 October 2016, 11:43:37 UTC | i18n: apply: mark error messages for translation Mark error messages for translation passed to error() and die() functions. Signed-off-by: Vasco Almeida <vascomalmeida@sapo.pt> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 14 October 2016, 17:53:58 UTC |
5886637 | Vasco Almeida | 14 October 2016, 11:43:36 UTC | i18n: apply: mark info messages for translation Mark messages for translation printed to stderr. Signed-off-by: Vasco Almeida <vascomalmeida@sapo.pt> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 14 October 2016, 17:53:51 UTC |
965d5c8 | Vasco Almeida | 14 October 2016, 11:43:35 UTC | i18n: apply: mark plural string for translation Mark plural string for translation using Q_(). Signed-off-by: Vasco Almeida <vascomalmeida@sapo.pt> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 14 October 2016, 17:53:49 UTC |
171c646 | Dennis Kaarsemaker | 12 October 2016, 16:41:07 UTC | worktree: allow the main brach of a bare repository to be checked out In bare repositories, get_worktrees() still returns the main repository, so git worktree list can show it. ignore it in find_shared_symref so we can still check out the main branch. Signed-off-by: Dennis Kaarsemaker <dennis@kaarsemaker.net> Acked-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 14 October 2016, 16:58:58 UTC |
4f21454 | Jeff King | 12 October 2016, 20:10:40 UTC | merge-base: handle --fork-point without reflog The --fork-point option looks in the reflog to try to find where a derived branch forked from a base branch. However, if the reflog for the base branch is totally empty (as it commonly is right after cloning, which does not write a reflog entry), then our for_each_reflog call will not find any entries, and we will come up with no merge base, even though there may be one with the current tip of the base. We can fix this by just adding the current tip to our list of collected entries. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 12 October 2016, 21:30:16 UTC |
13092a9 | Junio C Hamano | 12 October 2016, 18:20:23 UTC | cocci: refactor common patterns to use xstrdup_or_null() d64ea0f83b ("git-compat-util: add xstrdup_or_null helper", 2015-01-12) added a handy wrapper that allows us to get a duplicate of a string or NULL if the original is NULL, but a handful of codepath predate its introduction or just weren't aware of it. Signed-off-by: Junio C Hamano <gitster@pobox.com> | 12 October 2016, 18:22:10 UTC |
661a180 | Michael J Gruber | 12 October 2016, 13:04:15 UTC | gpg-interface: use more status letters According to gpg2's doc/DETAILS: For each signature only one of the codes GOODSIG, BADSIG, EXPSIG, EXPKEYSIG, REVKEYSIG or ERRSIG will be emitted. gpg1 ("classic") behaves the same (although doc/DETAILS differs). Currently, we parse gpg's status output for GOODSIG, BADSIG and trust information and translate that into status codes G, B, U, N for the %G? format specifier. git-verify-* returns success in the GOODSIG case only. This is somewhat in disagreement with gpg, which considers the first 5 of the 6 above as VALIDSIG, but we err on the very safe side. Introduce additional status codes E, X, Y, R for ERRSIG, EXPSIG, EXPKEYSIG, and REVKEYSIG so that a user of %G? gets more information about the absence of a 'G' on first glance. Requested-by: Alex <agrambot@gmail.com> Signed-off-by: Michael J Gruber <git@drmicha.warpmail.net> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 12 October 2016, 17:41:59 UTC |
3bb4644 | Vasco Almeida | 12 October 2016, 12:25:33 UTC | t1512: become resilient to GETTEXT_POISON build The concerned message was marked for translation by 0c99171 ("get_short_sha1: mark ambiguity error for translation", 2016-09-26). Signed-off-by: Vasco Almeida <vascomalmeida@sapo.pt> Acked-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 12 October 2016, 17:39:01 UTC |
6fcf786 | Ralf Thielow | 12 October 2016, 16:31:13 UTC | l10n: de.po: translate 260 new messages Translate 260 new message came from git.pot updates in 9fa976f (l10n: git.pot: v2.10.0 round 1 (248 new, 56 removed)) and 5bd166d (l10n: git.pot: v2.10.0 round 2 (12 new, 44 removed)). Signed-off-by: Ralf Thielow <ralf.thielow@gmail.com> Acked-by: Matthias Rüster <matthias.ruester@gmail.com> | 12 October 2016, 16:31:13 UTC |
3cdd5d1 | Junio C Hamano | 11 October 2016, 21:55:48 UTC | Sync with maint * maint: Start preparing for 2.10.2 | 11 October 2016, 21:55:48 UTC |
5411b10 | Jeff King | 11 October 2016, 21:20:16 UTC | upload-pack: use priority queue in reachable() check Like a lot of old commit-traversal code, this keeps a commit_list in commit-date order, and and inserts parents into the list. This means each insertion is potentially linear, and the whole thing is quadratic (though the exact runtime depends on the relationship between the commit dates and the parent topology). These days we have a priority queue, which can do the same thing with a much better worst-case time. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 11 October 2016, 21:27:56 UTC |
74eeaf7 | Junio C Hamano | 11 October 2016, 21:24:02 UTC | Start preparing for 2.10.2 Signed-off-by: Junio C Hamano <gitster@pobox.com> | 11 October 2016, 21:24:02 UTC |
6823506 | Junio C Hamano | 11 October 2016, 21:21:35 UTC | Merge branch 'jk/verify-packfile-gently' into maint A low-level function verify_packfile() was meant to show errors that were detected without dying itself, but under some conditions it didn't and died instead, which has been fixed. * jk/verify-packfile-gently: verify_packfile: check pack validity before accessing data | 11 October 2016, 21:21:36 UTC |
fdb70b1 | Junio C Hamano | 11 October 2016, 21:21:17 UTC | Merge branch 'jc/worktree-config' into maint "git worktree", even though it used the default_abbrev setting that ought to be affected by core.abbrev configuration variable, ignored the variable setting. The command has been taught to read the default set of configuration variables to correct this. * jc/worktree-config: worktree: honor configuration variables | 11 October 2016, 21:21:17 UTC |
f7f0a87 | Junio C Hamano | 11 October 2016, 21:21:03 UTC | Merge branch 'jc/verify-loose-object-header' into maint Codepaths that read from an on-disk loose object were too loose in validating what they are reading is a proper object file and sometimes read past the data they read from the disk, which has been corrected. H/t to Gustavo Grieco for reporting. * jc/verify-loose-object-header: unpack_sha1_header(): detect malformed object header streaming: make sure to notice corrupt object | 11 October 2016, 21:21:03 UTC |
0bc409d | Junio C Hamano | 11 October 2016, 21:20:37 UTC | Merge branch 'rs/git-gui-use-modern-git-merge-syntax' into maint The original command line syntax for "git merge", which was "git merge <msg> HEAD <parent>...", has been deprecated for quite some time, and "git gui" was the last in-tree user of the syntax. This is finally fixed, so that we can move forward with the deprecation. * rs/git-gui-use-modern-git-merge-syntax: git-gui: stop using deprecated merge syntax | 11 October 2016, 21:20:37 UTC |
e1eb84c | Junio C Hamano | 11 October 2016, 21:20:31 UTC | Merge branch 'kd/mailinfo-quoted-string' into maint An author name, that spelled a backslash-quoted double quote in the human readable part "My \"double quoted\" name", was not unquoted correctly while applying a patch from a piece of e-mail. * kd/mailinfo-quoted-string: mailinfo: unescape quoted-pair in header fields t5100-mailinfo: replace common path prefix with variable | 11 October 2016, 21:20:32 UTC |
54a9f14 | Junio C Hamano | 11 October 2016, 21:20:05 UTC | Merge branch 'pb/rev-list-reverse-with-count' into maint Doc update to clarify what "log -3 --reverse" does. * pb/rev-list-reverse-with-count: rev-list-options: clarify the usage of --reverse | 11 October 2016, 21:20:06 UTC |
9534df9 | Junio C Hamano | 11 October 2016, 21:19:52 UTC | Merge branch 'jc/blame-abbrev' into maint Almost everybody uses DEFAULT_ABBREV to refer to the default setting for the abbreviation, but "git blame" peeked into underlying variable bypassing the macro for no good reason. * jc/blame-abbrev: blame: use DEFAULT_ABBREV macro | 11 October 2016, 21:19:52 UTC |
18fd96f | Junio C Hamano | 11 October 2016, 21:19:03 UTC | Merge branch 'jk/graph-padding-fix' into maint The "graph" API used in "git log --graph" miscounted the number of output columns consumed so far when drawing a padding line, which has been fixed; this did not affect any existing code as nobody tried to write anything after the padding on such a line, though. * jk/graph-padding-fix: graph: fix extra spaces in graph_padding_line | 11 October 2016, 21:19:03 UTC |
1f253d8 | Junio C Hamano | 11 October 2016, 21:18:57 UTC | Merge branch 'sg/ref-filter-parse-optim' into maint The code that parses the format parameter of for-each-ref command has seen a micro-optimization. * sg/ref-filter-parse-optim: ref-filter: strip format option after a field name only once while parsing | 11 October 2016, 21:18:57 UTC |
a813b19 | Junio C Hamano | 11 October 2016, 21:18:32 UTC | Merge branch 'rs/copy-array' into maint Code cleanup. * rs/copy-array: use COPY_ARRAY add COPY_ARRAY | 11 October 2016, 21:18:32 UTC |
f7e2e59 | Junio C Hamano | 11 October 2016, 21:17:52 UTC | Merge branch 'dt/mailinfo' into maint * dt/mailinfo: add David Turner's Two Sigma address | 11 October 2016, 21:17:52 UTC |
87d1353 | Mantas Mikulėnas | 09 October 2016, 12:34:17 UTC | contrib: add credential helper for libsecret This is based on the existing gnome-keyring helper, but instead of libgnome-keyring (which was specific to GNOME and is deprecated), it uses libsecret which can support other implementations of XDG Secret Service API. Passes t0303-credential-external.sh. Signed-off-by: Mantas Mikulėnas <grawity@gmail.com> Reviewed-by: Dennis Kaarsemaker <dennis@kaarsemaker.net> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 11 October 2016, 20:14:51 UTC |
641c900 | Johannes Schindelin | 11 October 2016, 16:09:03 UTC | reset: fix usage The <tree-ish> parameter is actually optional (see man page). Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 11 October 2016, 19:27:39 UTC |
30cfe72 | René Scharfe | 11 October 2016, 03:41:14 UTC | pretty: fix document link for color specification Helped-by: Jeff King <peff@peff.net> Signed-off-by: Rene Scharfe <l.s.r@web.de> Reviewed-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 11 October 2016, 17:07:09 UTC |
654311b | David Aguilar | 08 October 2016, 00:01:30 UTC | mergetool: honor -O<orderfile> Teach mergetool to pass "-O<orderfile>" down to `git diff` when specified on the command-line. Helped-by: Johannes Sixt <j6t@kdbg.org> Signed-off-by: David Aguilar <davvid@gmail.com> Reviewed-by: Johannes Sixt <j6t@kdbg.org> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 11 October 2016, 17:04:31 UTC |
57937f7 | David Aguilar | 07 October 2016, 23:58:05 UTC | mergetool: honor diff.orderFile Teach mergetool to get the list of files to edit via `diff` so that we gain support for diff.orderFile. Suggested-by: Luis Gutierrez <luisgutz@gmail.com> Helped-by: Johannes Sixt <j6t@kdbg.org> Signed-off-by: David Aguilar <davvid@gmail.com> Reviewed-by: Johannes Sixt <j6t@kdbg.org> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 11 October 2016, 17:04:27 UTC |
08221e3 | David Aguilar | 07 October 2016, 23:58:04 UTC | mergetool: move main program flow into a main() function Make it easier to follow the program's flow by isolating all logic into functions. Isolate the main execution code path into a single unit instead of having prompt_after_failed_merge() interrupt it partyway through. The use of a main() function is borrowing a convention from C, Python, Perl, and many other languages. This helps readers more familiar with other languages understand the purpose of each function when diving into the codebase with fresh eyes. Signed-off-by: David Aguilar <davvid@gmail.com> Reviewed-by: Johannes Sixt <j6t@kdbg.org> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 11 October 2016, 17:04:23 UTC |
8827b3a | David Aguilar | 07 October 2016, 23:58:03 UTC | mergetool: add copyright Signed-off-by: David Aguilar <davvid@gmail.com> Reviewed-by: Johannes Sixt <j6t@kdbg.org> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 11 October 2016, 17:04:10 UTC |
7271016 | Stefan Beller | 10 October 2016, 19:36:41 UTC | documentation: improve submodule.<name>.{url, path} description Unlike the url variable a user cannot override the the path variable, as it is part of the content together with the gitlink at the given path. To avoid confusion do not mention the .path variable in the config section and rely on the documentation provided in gitmodules[5]. Enhance the description of submodule.<name>.url and mention its two use cases separately. Signed-off-by: Stefan Beller <sbeller@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 11 October 2016, 17:03:36 UTC |
842a516 | Jakub Narębski | 07 October 2016, 11:30:52 UTC | configure.ac: improve description of NO_REGEX test The commit 2f8952250a ("regex: add regexec_buf() that can work on a non NUL-terminated string", 2016-09-21) changed description of NO_REGEX build config variable to be more neutral, and actually say that it is about support for REG_STARTEND. Change description in configure.ac to match. Change also the test message and variable name to match. The test just checks that REG_STARTEND is #defined. Issue-found-by: Ramsay Jones <ramsay@ramsayjones.plus.com> Signed-off-by: Jakub Narębski <jnareb@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 10 October 2016, 23:15:15 UTC |
8a36cd8 | Junio C Hamano | 10 October 2016, 21:09:12 UTC | Ninth batch for 2.11 Signed-off-by: Junio C Hamano <gitster@pobox.com> | 10 October 2016, 21:09:12 UTC |
1172e16 | Junio C Hamano | 10 October 2016, 21:03:51 UTC | Merge branch 'jc/blame-reverse' It is a common mistake to say "git blame --reverse OLD path", expecting that the command line is dwimmed as if asking how lines in path in an old revision OLD have survived up to the current commit. * jc/blame-reverse: blame: dwim "blame --reverse OLD" as "blame --reverse OLD.." blame: improve diagnosis for "--reverse NEW" | 10 October 2016, 21:03:51 UTC |
a460ea4 | Junio C Hamano | 10 October 2016, 21:03:50 UTC | Merge branch 'nd/shallow-deepen' The existing "git fetch --depth=<n>" option was hard to use correctly when making the history of an existing shallow clone deeper. A new option, "--deepen=<n>", has been added to make this easier to use. "git clone" also learned "--shallow-since=<date>" and "--shallow-exclude=<tag>" options to make it easier to specify "I am interested only in the recent N months worth of history" and "Give me only the history since that version". * nd/shallow-deepen: (27 commits) fetch, upload-pack: --deepen=N extends shallow boundary by N commits upload-pack: add get_reachable_list() upload-pack: split check_unreachable() in two, prep for get_reachable_list() t5500, t5539: tests for shallow depth excluding a ref clone: define shallow clone boundary with --shallow-exclude fetch: define shallow boundary with --shallow-exclude upload-pack: support define shallow boundary by excluding revisions refs: add expand_ref() t5500, t5539: tests for shallow depth since a specific date clone: define shallow clone boundary based on time with --shallow-since fetch: define shallow boundary with --shallow-since upload-pack: add deepen-since to cut shallow repos based on time shallow.c: implement a generic shallow boundary finder based on rev-list fetch-pack: use a separate flag for fetch in deepening mode fetch-pack.c: mark strings for translating fetch-pack: use a common function for verbose printing fetch-pack: use skip_prefix() instead of starts_with() upload-pack: move rev-list code out of check_non_tip() upload-pack: make check_non_tip() clean things up on error upload-pack: tighten number parsing at "deepen" lines ... | 10 October 2016, 21:03:50 UTC |
a229a30 | Junio C Hamano | 10 October 2016, 21:03:49 UTC | Merge branch 'cp/completion-negative-refs' The command-line completion script (in contrib/) learned to complete "git cmd ^mas<HT>" to complete the negative end of reference to "git cmd ^master". * cp/completion-negative-refs: completion: support excluding refs | 10 October 2016, 21:03:49 UTC |
667c6d5 | Junio C Hamano | 10 October 2016, 21:03:48 UTC | Merge branch 'dp/autoconf-curl-ssl' The ./configure script generated from configure.ac was taught how to detect support of SSL by libcurl better. * dp/autoconf-curl-ssl: ./configure.ac: detect SSL in libcurl using curl-config | 10 October 2016, 21:03:48 UTC |
6d6321a | Junio C Hamano | 10 October 2016, 21:03:47 UTC | Merge branch 'ak/curl-imap-send-explicit-scheme' When we started cURL to talk to imap server when a new enough version of cURL library is available, we forgot to explicitly add imap(s):// before the destination. To some folks, that didn't work and the library tried to make HTTP(s) requests instead. * ak/curl-imap-send-explicit-scheme: imap-send: Tell cURL to use imap:// or imaps:// | 10 October 2016, 21:03:48 UTC |
e6e24c9 | Junio C Hamano | 10 October 2016, 21:03:46 UTC | Merge branch 'jk/pack-objects-optim-mru' "git pack-objects" in a repository with many packfiles used to spend a lot of time looking for/at objects in them; the accesses to the packfiles are now optimized by checking the most-recently-used packfile first. * jk/pack-objects-optim-mru: pack-objects: use mru list when iterating over packs pack-objects: break delta cycles before delta-search phase sha1_file: make packed_object_info public provide an initializer for "struct object_info" | 10 October 2016, 21:03:47 UTC |
b8688ad | Junio C Hamano | 10 October 2016, 21:03:46 UTC | Merge branch 'rs/qsort' We call "qsort(array, nelem, sizeof(array[0]), fn)", and most of the time third parameter is redundant. A new QSORT() macro lets us omit it. * rs/qsort: show-branch: use QSORT use QSORT, part 2 coccicheck: use --all-includes by default remove unnecessary check before QSORT use QSORT add QSORT | 10 October 2016, 21:03:46 UTC |
62fe0eb | Jeff King | 03 October 2016, 20:49:22 UTC | tmp-objdir: do not migrate files starting with '.' This avoids "." and "..", as we already do, but also leaves room for index-pack to store extra data in the quarantine area (e.g., for passing back any analysis to be read by the pre-receive hook). Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 10 October 2016, 20:54:02 UTC |
e34c2e0 | Jeff King | 03 October 2016, 20:49:18 UTC | tmp-objdir: put quarantine information in the environment The presence of the GIT_QUARANTINE_PATH variable lets any called programs know that they're operating in a temporary object directory (and where that directory is). Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 10 October 2016, 20:54:02 UTC |
722ff7f | Jeff King | 03 October 2016, 20:49:14 UTC | receive-pack: quarantine objects until pre-receive accepts When a client pushes objects to us, index-pack checks the objects themselves and then installs them into place. If we then reject the push due to a pre-receive hook, we cannot just delete the packfile; other processes may be depending on it. We have to do a normal reachability check at this point via `git gc`. But such objects may hang around for weeks due to the gc.pruneExpire grace period. And worse, during that time they may be exploded from the pack into inefficient loose objects. Instead, this patch teaches receive-pack to put the new objects into a "quarantine" temporary directory. We make these objects available to the connectivity check and to the pre-receive hook, and then install them into place only if it is successful (and otherwise remove them as tempfiles). Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 10 October 2016, 20:54:02 UTC |
2564d99 | Jeff King | 03 October 2016, 20:49:11 UTC | tmp-objdir: introduce API for temporary object directories Once objects are added to the object database by a process, they cannot easily be deleted, as we don't know what other processes may have started referencing them. We have to clean them up with git-gc, which will apply the usual reachability and grace-period checks. This patch provides an alternative: it helps callers create a temporary directory inside the object directory, and a temporary environment which can be passed to sub-programs to ask them to write there (the original object directory remains accessible as an alternate of the temporary one). See tmp-objdir.h for details on the API. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 10 October 2016, 20:54:02 UTC |
526f108 | Jeff King | 03 October 2016, 20:49:08 UTC | check_connected: accept an env argument This lets callers influence the environment seen by rev-list, which will be useful when we start providing quarantined objects. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 10 October 2016, 20:54:02 UTC |
ea0fc3b | Jeff King | 03 October 2016, 20:36:26 UTC | alternates: use fspathcmp to detect duplicates On a case-insensitive filesystem, we should realize that "a/objects" and "A/objects" are the same path. We already use fspathcmp() to check against the main object directory, but until recently we couldn't use it for comparing against other alternates (because their paths were not NUL-terminated strings). But now we can, so let's do so. Note that we also need to adjust count-objects to load the config, so that it can see the setting of core.ignorecase (this is required by the test, but is also a general bugfix for users of count-objects). Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 10 October 2016, 20:52:37 UTC |
087b6d5 | Jeff King | 03 October 2016, 20:36:22 UTC | sha1_file: always allow relative paths to alternates We recursively expand alternates repositories, so that if A borrows from B which borrows from C, A can see all objects. For the root object database, we allow relative paths, so A can point to B as "../B/objects". However, we currently do not allow relative paths when recursing, so B must use an absolute path to reach C. That is an ancient protection from c2f493a (Transitively read alternatives, 2006-05-07) that tries to avoid adding the same alternate through two different paths. Since 5bdf0a8 (sha1_file: normalize alt_odb path before comparing and storing, 2011-09-07), we use a normalized absolute path for each alt_odb entry. This means that in most cases the protection is no longer necessary; we will detect the duplicate no matter how we got there (but see below). And it's a good idea to get rid of it, as it creates an unnecessary complication when setting up recursive alternates (B has to know that A is going to borrow from it and make sure to use an absolute path). Note that our normalization doesn't actually look at the filesystem, so it can still be fooled by crossing symbolic links. But that's also true of absolute paths, so it's not a good reason to disallow only relative paths (it's potentially a reason to switch to real_path(), but that's a separate and non-trivial change). We adjust the test script here to demonstrate that this now works, and add new tests to show that the normalization does indeed suppress duplicates. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 10 October 2016, 20:52:37 UTC |
5fe849d | Jeff King | 03 October 2016, 20:36:18 UTC | count-objects: report alternates via verbose mode There's no way to get the list of alternates that git computes internally; our tests only infer it based on which objects are available. In addition to testing, knowing this list may be helpful for somebody debugging their alternates setup. Let's add it to the "count-objects -v" output. We could give it a separate flag, but there's not really any need. "count-objects -v" is already a debugging catch-all for the object database, its output is easily extensible to new data items, and printing the alternates is not expensive (we already had to find them to count the objects). Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 10 October 2016, 20:52:37 UTC |
f7b7774 | Jeff King | 03 October 2016, 20:36:09 UTC | fill_sha1_file: write into a strbuf It's currently the responsibility of the caller to give fill_sha1_file() enough bytes to write into, leading them to manually compute the required lengths. Instead, let's just write into a strbuf so that it's impossible to get this wrong. The alt_odb caller already has a strbuf, so this makes things strictly simpler. The other caller, sha1_file_name(), uses a static PATH_MAX buffer and dies when it would overflow. We can convert this to a static strbuf, which means our allocation cost is amortized (and as a bonus, we no longer have to worry about PATH_MAX being too short for normal use). This does introduce some small overhead in fill_sha1_file(), as each strbuf_addchar() will check whether it needs to grow. However, between the optimization in fec501d (strbuf_addch: avoid calling strbuf_grow, 2015-04-16) and the fact that this is not generally called in a tight loop (after all, the next step is typically to access the file!) this probably doesn't matter. And even if it did, the right place to micro-optimize is inside fill_sha1_file(), by calling a single strbuf_grow() there. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 10 October 2016, 20:52:37 UTC |
38dbe5f | Jeff King | 03 October 2016, 20:36:04 UTC | alternates: store scratch buffer as strbuf We pre-size the scratch buffer to hold a loose object filename of the form "xx/yyyy...", which leads to allocation code that is hard to verify. We have to use some magic numbers during the initial allocation, and then writers must blindly assume that the buffer is big enough. Using a strbuf makes it more clear that we cannot overflow. Unfortunately, we do still need some magic numbers to grow our strbuf before calling fill_sha1_path(), but the strbuf growth is much closer to the point of use. This makes it easier to see that it's correct, and opens the possibility of pushing it even further down if fill_sha1_path() learns to work on strbufs. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 10 October 2016, 20:52:36 UTC |
afbba2f | Jeff King | 03 October 2016, 20:35:55 UTC | fill_sha1_file: write "boring" characters This function forms a sha1 as "xx/yyyy...", but skips over the slot for the slash rather than writing it, leaving it to the caller to do so. It also does not bother to put in a trailing NUL, even though every caller would want it (we're forming a path which by definition is not a directory, so the only thing to do with it is feed it to a system call). Let's make the lives of our callers easier by just writing out the internal "/" and the NUL. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 10 October 2016, 20:52:36 UTC |
597f913 | Jeff King | 03 October 2016, 20:35:51 UTC | alternates: use a separate scratch space The alternate_object_database struct uses a single buffer both for storing the path to the alternate, and as a scratch buffer for forming object names. This is efficient (since otherwise we'd end up storing the path twice), but it makes life hard for callers who just want to know the path to the alternate. They have to remember to stop reading after "alt->name - alt->base" bytes, and to subtract one for the trailing '/'. It would be much simpler if they could simply access a NUL-terminated path string. We could encapsulate this in a function which puts a NUL in the scratch buffer and returns the string, but that opens up questions about the lifetime of the result. The first time another caller uses the alternate, the scratch buffer may get other data tacked onto it. Let's instead just store the root path separately from the scratch buffer. There aren't enough alternates being stored for the duplicated data to matter for performance, and this keeps things simple and safe for the callers. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 10 October 2016, 20:52:36 UTC |
29ec6af | Jeff King | 03 October 2016, 20:35:43 UTC | alternates: encapsulate alt->base munging The alternate_object_database struct holds a path to the alternate objects, but we also use that buffer as scratch space for forming loose object filenames. Let's pull that logic into a helper function so that we can more easily modify it. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com> | 10 October 2016, 20:52:36 UTC |