From: Junio C Hamano Date: Mon, 16 Jan 2017 01:40:59 +0000 (-0800) Subject: What's cooking (2017/01 #02) X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=aa3afa0b4ab4f07e6b36f0712fd58229735afddc;p=thirdparty%2Fgit.git What's cooking (2017/01 #02) --- diff --git a/whats-cooking.txt b/whats-cooking.txt index 4dc92cbf57..70bd2fcb6a 100644 --- a/whats-cooking.txt +++ b/whats-cooking.txt @@ -1,10 +1,10 @@ To: git@vger.kernel.org Bcc: lwn@lwn.net -Subject: What's cooking in git.git (Jan 2017, #01; Tue, 10) +Subject: What's cooking in git.git (Jan 2017, #02; Sun, 15) X-master-at: d7dffce1cebde29a0c4b309a79e4345450bf352a -X-next-at: 087da7b7c1bc403d36120b5e97c342e00ebbf16a +X-next-at: 8553c6e5137d7fde1cda49817bcc035d3ce35aeb -What's cooking in git.git (Jan 2017, #01; Tue, 10) +What's cooking in git.git (Jan 2017, #02; Sun, 15) -------------------------------------------------- Here are the topics that have been cooking. Commits prefixed with @@ -18,7 +18,63 @@ of the repositories listed at http://git-blame.blogspot.com/p/git-public-repositories.html -------------------------------------------------- -[Graduated to "master"] +[New Topics] + +* bw/read-blob-data-does-not-modify-index-state (2017-01-11) 1 commit + - index: improve constness for reading blob data + + Code clean-up. + + Will merge to 'next'. + + +* ep/commit-static-buf-cleanup (2017-01-13) 2 commits + - builtin/commit.c: switch to xstrfmt(), instead of snprintf() + - builtin/commit.c: remove the PATH_MAX limitation via dynamic allocation + + Code clean-up. + + Expecting a reroll. + The tip one would instead be done with strbuf. + cf. + + +* jk/grep-e-could-be-extended-beyond-posix (2017-01-11) 1 commit + - t7810: avoid assumption about invalid regex syntax + + Tighten a test to avoid mistaking an extended ERE regexp engine as + a PRE regexp engine. + + Will merge to 'next'. + + +* jk/vreport-sanitize (2017-01-11) 2 commits + - vreport: sanitize ASCII control chars + - Revert "vreportf: avoid intermediate buffer" + + An error message with an ASCII control character like '\r' in it + can alter the message to hide its early part, which is problematic + when a remote side gives such an error message that the local side + will relay with a "remote: " prefix. + + Will merge to 'next'. + + +* sb/unpack-trees-super-prefix (2017-01-12) 5 commits + - SQUASH + - unpack-trees: support super-prefix option + - t1001: modernize style + - t1000: modernize style + - read-tree: use OPT_BOOL instead of OPT_SET_INT + + "git read-tree" and its underlying unpack_trees() machinery learned + to report problematic paths prefixed with the --super-prefix option. + + Expecting a reroll. + The first three are in good shape. The last one needs a better + explanation and possibly an update to its test. + cf. + * bw/grep-recurse-submodules (2016-12-22) 12 commits (merged to 'next' on 2016-12-22 at 1ede815b8d) @@ -37,142 +93,206 @@ of the repositories listed at + real_path: resolve symlinks by hand (this branch is tangled with bw/realpath-wo-chdir.) - "git grep" learns to optionally recurse into submodules. + "git grep" has been taught to optionally recurse into submodules. + + Will merge to 'master'. + + +* sb/submodule-config-tests (2017-01-12) 2 commits + - t7411: test lookup of uninitialized submodules + - t7411: quote URLs + + Will merge to 'next'. -* dt/smart-http-detect-server-going-away (2016-11-18) 2 commits - (merged to 'next' on 2016-12-05 at 3ea70d01af) - + upload-pack: optionally allow fetching any sha1 - + remote-curl: don't hang when a server dies before any output +* sb/submodule-doc (2017-01-12) 3 commits + - submodules: add a background story + - submodule update documentation: don't repeat ourselves + - submodule documentation: add options to the subcommand - Originally merged to 'next' on 2016-11-21 + Needs review. - When the http server gives an incomplete response to a smart-http - rpc call, it could lead to client waiting for a full response that - will never come. Teach the client side to notice this condition - and abort the transfer. - An improvement counterproposal has failed. - cf. <20161114194049.mktpsvgdhex2f4zv@sigill.intra.peff.net> +* sb/submodule-embed-gitdir (2017-01-12) 1 commit + - submodule absorbgitdirs: mention in docstring help + Help-text fix. -* jc/abbrev-autoscale-config (2016-12-22) 1 commit - (merged to 'next' on 2016-12-27 at 631e4200e2) - + config.abbrev: document the new default that auto-scales + Will merge to 'next'. - Recent update to the default abbreviation length that auto-scales - lacked documentation update, which has been corrected. +* sb/submodule-init (2017-01-12) 1 commit + - submodule update --init: display correct path from submodule -* jc/compression-config (2016-11-15) 1 commit - (merged to 'next' on 2016-12-05 at 323769ca07) - + compression: unify pack.compression configuration parsing + Error message fix. - Originally merged to 'next' on 2016-11-23 + Will merge to 'next'. - Compression setting for producing packfiles were spread across - three codepaths, one of which did not honor any configuration. - Unify these so that all of them honor core.compression and - pack.compression variables the same way. +* vn/diff-ihc-config (2017-01-12) 1 commit + - diff: add interhunk context config option -* jc/git-open-cloexec (2016-11-02) 3 commits - (merged to 'next' on 2016-12-27 at 487682eb6e) - + sha1_file: stop opening files with O_NOATIME - + git_open_cloexec(): use fcntl(2) w/ FD_CLOEXEC fallback - + git_open(): untangle possible NOATIME and CLOEXEC interactions + "git diff" learned diff.interHunkContext configuration variable + that gives the default value for its --inter-hunk-context option. - The codeflow of setting NOATIME and CLOEXEC on file descriptors Git - opens has been simplified. - We may want to drop the tip one, but we'll see. + Will merge to 'next'. -* jc/latin-1 (2016-09-26) 2 commits - (merged to 'next' on 2016-12-05 at fb549caa12) - + utf8: accept "latin-1" as ISO-8859-1 - + utf8: refactor code to decide fallback encoding +* ad/bisect-terms (2017-01-13) 1 commit + - Documentation/bisect: improve on (bad|new) and (good|bad) - Originally merged to 'next' on 2016-09-28 + Documentation fix. - Some platforms no longer understand "latin-1" that is still seen in - the wild in e-mail headers; replace them with "iso-8859-1" that is - more widely known when conversion fails from/to it. + Will merge to 'next'. -* jc/retire-compaction-heuristics (2016-12-23) 1 commit - (merged to 'next' on 2016-12-27 at c69c2f50cf) - + diff: retire "compaction" heuristics +* bw/attr (2017-01-15) 27 commits + - attr: reformat git_attr_set_direction() function + - attr: push the bare repo check into read_attr() + - attr: store attribute stacks in hashmap + - attr: tighten const correctness with git_attr and match_attr + - attr: remove maybe-real, maybe-macro from git_attr + - attr: eliminate global check_all_attr array + - attr: use hashmap for attribute dictionary + - attr: change validity check for attribute names to use positive logic + - attr: pass struct attr_check to collect_some_attrs + - attr: retire git_check_attrs() API + - attr: convert git_check_attrs() callers to use the new API + - attr: convert git_all_attrs() to use "struct attr_check" + - attr: (re)introduce git_check_attr() and struct attr_check + - attr: rename function and struct related to checking attributes + - attr.c: outline the future plans by heavily commenting + - Documentation/gitattributes.txt: fix a typo + - attr.c: add push_stack() helper + - attr: support quoting pathname patterns in C style + - attr.c: plug small leak in parse_attr_line() + - attr.c: tighten constness around "git_attr" structure + - attr.c: simplify macroexpand_one() + - attr.c: mark where #if DEBUG ends more clearly + - attr.c: complete a sentence in a comment + - attr.c: explain the lack of attr-name syntax check in parse_attr() + - attr.c: update a stale comment on "struct match_attr" + - attr.c: use strchrnul() to scan for one line + - commit.c: use strchrnul() to scan for one line - "git diff" and its family had two experimental heuristics to shift - the contents of a hunk to make the patch easier to read. One of - them turns out to be better than the other, so leave only the - "--indent-heuristic" option and remove the other one. + The gitattributes machinery is being taught to work better in a + multi-threaded environment. + Needs review. -* jt/fetch-no-redundant-tag-fetch-map (2016-11-11) 1 commit - (merged to 'next' on 2016-12-05 at 432f9469a7) - + fetch: do not redundantly calculate tag refmap - Originally merged to 'next' on 2016-11-16 +* jk/loose-object-fsck (2017-01-15) 6 commits + - fsck: detect trailing garbage in all object types + - fsck: parse loose object paths directly + - sha1_file: add read_loose_object() function + - t1450: test fsck of packed objects + - sha1_file: fix error message for alternate objects + - t1450: refactor loose-object removal - Code cleanup to avoid using redundant refspecs while fetching with - the --tags option. + "git fsck" inspects loose objects more carefully now. + Needs review. -* mh/fast-import-notes-fix-new (2016-12-20) 1 commit - (merged to 'next' on 2016-12-27 at b63805e6f6) - + fast-import: properly fanout notes when tree is imported - "git fast-import" sometimes mishandled while rebalancing notes - tree, which has been fixed. +* rh/diff-orderfile-doc (2017-01-15) 2 commits + - diff: document the format of the -O (diff.orderFile) file + - diff: document behavior of relative diff.orderFile + Documentation fix. -* mm/gc-safety-doc (2016-11-16) 1 commit - (merged to 'next' on 2016-12-05 at 031ecc1886) - + git-gc.txt: expand discussion of races with other processes + Will merge to 'next'. - Originally merged to 'next' on 2016-11-17 - Doc update. +* sb/cd-then-git-can-be-written-as-git-c (2017-01-13) 1 commit + - lib-submodule-update.sh: reduce use of subshell by using "git -C" + Test clean-up. -* mm/push-social-engineering-attack-doc (2016-11-14) 1 commit - (merged to 'next' on 2016-12-05 at 9a2b5bd1a9) - + doc: mention transfer data leaks in more places + Will merge to 'next'. - Originally merged to 'next' on 2016-11-16 - Doc update on fetching and pushing. +* vn/xdiff-func-context (2017-01-15) 1 commit + - xdiff -W: relax end-of-file function detection + "git diff -W" has been taught to handle the case where a new + function is added at the end of the file better. -* nd/config-misc-fixes (2016-12-22) 3 commits - (merged to 'next' on 2016-12-27 at 6be64a8671) - + config.c: handle lock file in error case in git_config_rename_... - + config.c: rename label unlock_and_out - + config.c: handle error case for fstat() calls + Will hold. + An follow-up change to go back from the line that matches the + funcline to show comments before the function definition is still + being discussed. - Leakage of lockfiles in the config subsystem has been fixed. +* ws/request-pull-code-cleanup (2017-01-15) 1 commit + - request-pull: drop old USAGE stuff -* sb/submodule-embed-gitdir (2016-12-27) 7 commits - (merged to 'next' on 2016-12-27 at 2b43c15479) - + worktree: initialize return value for submodule_uses_worktrees - (merged to 'next' on 2016-12-21 at e6cdbcf013) - + submodule: add absorb-git-dir function - + move connect_work_tree_and_git_dir to dir.h - + worktree: check if a submodule uses worktrees - + test-lib-functions.sh: teach test_commit -C - + submodule helper: support super prefix - + submodule: use absolute path for computing relative path connecting - (this branch is used by sb/submodule-rm-absorb.) + Code clean-up. - A new submodule helper "git submodule embedgitdirs" to make it - easier to move embedded .git/ directory for submodules in a - superproject to .git/modules/ (and point the latter with the former - that is turned into a "gitdir:" file) has been added. + Will merge to 'next'. -------------------------------------------------- -[New Topics] +[Stalled] + +* jk/nofollow-attr-ignore (2016-11-02) 5 commits + . exclude: do not respect symlinks for in-tree .gitignore + . attr: do not respect symlinks for in-tree .gitattributes + . exclude: convert "check_index" into a flags field + . attr: convert "macro_ok" into a flags field + . add open_nofollow() helper + + As we do not follow symbolic links when reading control files like + .gitignore and .gitattributes from the index, match the behaviour + and not follow symbolic links when reading them from the working + tree. This also tightens security a bit by not leaking contents of + an unrelated file in the error messages when it is pointed at by + one of these files that is a symbolic link. + + Perhaps we want to cover .gitmodules too with the same mechanism? + + Ejected for now. + + +* jc/bundle (2016-03-03) 6 commits + - index-pack: --clone-bundle option + - Merge branch 'jc/index-pack' into jc/bundle + - bundle v3: the beginning + - bundle: keep a copy of bundle file name in the in-core bundle header + - bundle: plug resource leak + - bundle doc: 'verify' is not about verifying the bundle + + The beginning of "split bundle", which could be one of the + ingredients to allow "git clone" traffic off of the core server + network to CDN. + + While I think it would make it easier for people to experiment and + build on if the topic is merged to 'next', I am at the same time a + bit reluctant to merge an unproven new topic that introduces a new + file format, which we may end up having to support til the end of + time. It is likely that to support a "prime clone from CDN", it + would need a lot more than just "these are the heads and the pack + data is over there", so this may not be sufficient. + + Will discard. + + +* jc/diff-b-m (2015-02-23) 5 commits + . WIPWIP + . WIP: diff-b-m + - diffcore-rename: allow easier debugging + - diffcore-rename.c: add locate_rename_src() + - diffcore-break: allow debugging + + "git diff -B -M" produced incorrect patch when the postimage of a + completely rewritten file is similar to the preimage of a removed + file; such a resulting file must not be expressed as a rename from + other place. + + The fix in this patch is broken, unfortunately. + + Will discard. + +-------------------------------------------------- +[Cooking] * ls/p4-retry-thrice (2016-12-29) 1 commit (merged to 'next' on 2017-01-10 at c733e27410) @@ -260,7 +380,9 @@ of the repositories listed at Will merge to 'master'. -* js/asciidoctor-tweaks (2017-01-07) 1 commit +* js/asciidoctor-tweaks (2017-01-13) 2 commits + (merged to 'next' on 2017-01-15 at 8553c6e513) + + asciidoctor: fix user-manual to be built by `asciidoctor` (merged to 'next' on 2017-01-10 at 087da7b7c1) + giteveryday: unbreak rendering with AsciiDoctor @@ -280,7 +402,11 @@ of the repositories listed at Will merge to 'master'. -* sb/remove-gitview (2017-01-07) 1 commit +* sb/remove-gitview (2017-01-13) 4 commits + (merged to 'next' on 2017-01-15 at 7c9eae479e) + + doc: git-gui browser does not default to HEAD + + doc: gitk: add the upstream repo location + + doc: gitk: remove gitview reference (merged to 'next' on 2017-01-10 at dcb3abd146) + contrib: remove gitview @@ -370,67 +496,6 @@ of the repositories listed at Will merge to 'master'. --------------------------------------------------- -[Stalled] - -* jk/nofollow-attr-ignore (2016-11-02) 5 commits - - exclude: do not respect symlinks for in-tree .gitignore - - attr: do not respect symlinks for in-tree .gitattributes - - exclude: convert "check_index" into a flags field - - attr: convert "macro_ok" into a flags field - - add open_nofollow() helper - - As we do not follow symbolic links when reading control files like - .gitignore and .gitattributes from the index, match the behaviour - and not follow symbolic links when reading them from the working - tree. This also tightens security a bit by not leaking contents of - an unrelated file in the error messages when it is pointed at by - one of these files that is a symbolic link. - - Perhaps we want to cover .gitmodules too with the same mechanism? - - -* jc/bundle (2016-03-03) 6 commits - - index-pack: --clone-bundle option - - Merge branch 'jc/index-pack' into jc/bundle - - bundle v3: the beginning - - bundle: keep a copy of bundle file name in the in-core bundle header - - bundle: plug resource leak - - bundle doc: 'verify' is not about verifying the bundle - - The beginning of "split bundle", which could be one of the - ingredients to allow "git clone" traffic off of the core server - network to CDN. - - While I think it would make it easier for people to experiment and - build on if the topic is merged to 'next', I am at the same time a - bit reluctant to merge an unproven new topic that introduces a new - file format, which we may end up having to support til the end of - time. It is likely that to support a "prime clone from CDN", it - would need a lot more than just "these are the heads and the pack - data is over there", so this may not be sufficient. - - Will discard. - - -* jc/diff-b-m (2015-02-23) 5 commits - . WIPWIP - . WIP: diff-b-m - - diffcore-rename: allow easier debugging - - diffcore-rename.c: add locate_rename_src() - - diffcore-break: allow debugging - - "git diff -B -M" produced incorrect patch when the postimage of a - completely rewritten file is similar to the preimage of a removed - file; such a resulting file must not be expressed as a rename from - other place. - - The fix in this patch is broken, unfortunately. - - Will discard. - --------------------------------------------------- -[Cooking] * nd/worktree-move (2017-01-09) 6 commits - worktree remove: new command @@ -755,55 +820,9 @@ of the repositories listed at cf. <20161007210721.20437-1-santiago@nyu.edu> -* sb/attr (2016-11-11) 35 commits - . completion: clone can initialize specific submodules - . clone: add --init-submodule= switch - . submodule update: add `--init-default-path` switch - . pathspec: allow escaped query values - . pathspec: allow querying for attributes - . pathspec: move prefix check out of the inner loop - . pathspec: move long magic parsing out of prefix_pathspec - - Documentation: fix a typo - - attr: keep attr stack for each check - - attr: convert to new threadsafe API - - attr: make git_check_attr_counted static - - attr.c: outline the future plans by heavily commenting - - attr.c: always pass check[] to collect_some_attrs() - - attr.c: introduce empty_attr_check_elems() - - attr.c: correct ugly hack for git_all_attrs() - - attr.c: rename a local variable check - - attr.c: pass struct git_attr_check down the callchain - - attr.c: add push_stack() helper - - attr: support quoting pathname patterns in C style - - attr: expose validity check for attribute names - - attr: add counted string version of git_check_attr() - - attr: retire git_check_attrs() API - - attr: convert git_check_attrs() callers to use the new API - - attr: convert git_all_attrs() to use "struct git_attr_check" - - attr: (re)introduce git_check_attr() and struct git_attr_check - - attr: rename function and struct related to checking attributes - - attr.c: plug small leak in parse_attr_line() - - attr.c: tighten constness around "git_attr" structure - - attr.c: simplify macroexpand_one() - - attr.c: mark where #if DEBUG ends more clearly - - attr.c: complete a sentence in a comment - - attr.c: explain the lack of attr-name syntax check in parse_attr() - - attr.c: update a stale comment on "struct match_attr" - - attr.c: use strchrnul() to scan for one line - - commit.c: use strchrnul() to scan for one line - - The attributes API has been updated so that it can later be - optimized using the knowledge of which attributes are queried. - Building on top of the updated API, the pathspec machinery learned - to select only paths with given attributes set. - - The parts near the tip about pathspec would need to work better - with bw/pathspec-cleanup topic and has been dropped for now. - - -* sg/fix-versioncmp-with-common-suffix (2016-12-08) 8 commits +* sg/fix-versioncmp-with-common-suffix (2017-01-12) 8 commits - versioncmp: generalize version sort suffix reordering - - squash! versioncmp: use earliest-longest contained suffix to determine sorting order + - versioncmp: factor out helper for suffix matching - versioncmp: use earliest-longest contained suffix to determine sorting order - versioncmp: cope with common part overlapping with prerelease suffix - versioncmp: pass full tagnames to swap_prereleases() @@ -816,8 +835,7 @@ of the repositories listed at same release were present (e.g. when 2.0, 2.0-beta1, and 2.0-beta2 are there and the code needs to compare 2.0-beta1 and 2.0-beta2). - Will merge to 'next' after squashing. - cf. <20161208142401.1329-1-szeder.dev@gmail.com> + Will merge to 'next'. * jc/merge-drop-old-syntax (2015-04-29) 1 commit @@ -835,92 +853,46 @@ of the repositories listed at -------------------------------------------------- [Discarded] -* rs/unpack-trees-reduce-file-scope-global (2016-12-31) 1 commit - . unpack-trees: move checkout state into check_updates - - Code cleanup. - - Superseded by sb/unpack-trees-cleanup - - -* jc/reset-unmerge (2016-10-24) 1 commit - . reset: --unmerge - - After "git add" is run prematurely during a conflict resolution, - "git diff" can no longer be used as a way to sanity check by - looking at the combined diff. "git reset" learned a new - "--unmerge" option to recover from this situation. - - This may not be needed, given that update-index has a similar - option. - - -* jc/merge-base-fp-only (2016-10-19) 8 commits - . merge-base: fp experiment - . merge: allow to use only the fp-only merge bases - . merge-base: limit the output to bases that are on first-parent chain - . merge-base: mark bases that are on first-parent chain - . merge-base: expose get_merge_bases_many_0() a bit more - . merge-base: stop moving commits around in remove_redundant() - . sha1_name: remove ONELINE_SEEN bit - . commit: simplify fastpath of merge-base - - An experiment of merge-base that ignores common ancestors that are - not on the first parent chain. - - The whole premise feels wrong. - - -* tb/convert-stream-check (2016-10-27) 2 commits - . convert.c: stream and fast search for binary - . read-cache: factor out get_sha1_from_index() helper - - End-of-line conversion sometimes needs to see if the current blob - in the index has NULs and CRs to base its decision. We used to - always get a full statistics over the blob, but in many cases we - can return early when we have seen "enough" (e.g. if we see a - single NUL, the blob will be handled as binary). The codepaths - have been optimized by using streaming interface. - - Retracted. - cf. <20161102071646.GA5094@tb-raspi> - - -* mh/connect (2016-06-06) 10 commits - . connect: [host:port] is legacy for ssh - . connect: move ssh command line preparation to a separate function - . connect: actively reject git:// urls with a user part - . connect: change the --diag-url output to separate user and host - . connect: make parse_connect_url() return the user part of the url as a separate value - . connect: group CONNECT_DIAG_URL handling code - . connect: make parse_connect_url() return separated host and port - . connect: re-derive a host:port string from the separate host and port variables - . connect: call get_host_and_port() earlier - . connect: document why we sometimes call get_port after get_host_and_port - - Rewrite Git-URL parsing routine (hopefully) without changing any - behaviour. - - It has been months without any support. - - -* ec/annotate-deleted (2015-11-20) 1 commit - . annotate: skip checking working tree if a revision is provided - - Usability fix for annotate-specific " " syntax with deleted - files. - - Has been waiting for a review for too long without seeing anything. - - -* dk/gc-more-wo-pack (2016-01-13) 4 commits - . gc: clean garbage .bitmap files from pack dir - . t5304: ensure non-garbage files are not deleted - . t5304: test .bitmap garbage files - . prepare_packed_git(): find more garbage +* sb/attr (2016-11-11) 35 commits + . completion: clone can initialize specific submodules + . clone: add --init-submodule= switch + . submodule update: add `--init-default-path` switch + . pathspec: allow escaped query values + . pathspec: allow querying for attributes + . pathspec: move prefix check out of the inner loop + . pathspec: move long magic parsing out of prefix_pathspec + . Documentation: fix a typo + . attr: keep attr stack for each check + . attr: convert to new threadsafe API + . attr: make git_check_attr_counted static + . attr.c: outline the future plans by heavily commenting + . attr.c: always pass check[] to collect_some_attrs() + . attr.c: introduce empty_attr_check_elems() + . attr.c: correct ugly hack for git_all_attrs() + . attr.c: rename a local variable check + . attr.c: pass struct git_attr_check down the callchain + . attr.c: add push_stack() helper + . attr: support quoting pathname patterns in C style + . attr: expose validity check for attribute names + . attr: add counted string version of git_check_attr() + . attr: retire git_check_attrs() API + . attr: convert git_check_attrs() callers to use the new API + . attr: convert git_all_attrs() to use "struct git_attr_check" + . attr: (re)introduce git_check_attr() and struct git_attr_check + . attr: rename function and struct related to checking attributes + . attr.c: plug small leak in parse_attr_line() + . attr.c: tighten constness around "git_attr" structure + . attr.c: simplify macroexpand_one() + . attr.c: mark where #if DEBUG ends more clearly + . attr.c: complete a sentence in a comment + . attr.c: explain the lack of attr-name syntax check in parse_attr() + . attr.c: update a stale comment on "struct match_attr" + . attr.c: use strchrnul() to scan for one line + . commit.c: use strchrnul() to scan for one line - Follow-on to dk/gc-idx-wo-pack topic, to clean up stale - .bitmap and .keep files. + The attributes API has been updated so that it can later be + optimized using the knowledge of which attributes are queried. + Building on top of the updated API, the pathspec machinery learned + to select only paths with given attributes set. - Has been waiting for a reroll for too long. - cf. + Superseded by bw/attr topic.