]> git.ipfire.org Git - thirdparty/git.git/commitdiff
What's cooking (2023/10 #01)
authorJunio C Hamano <gitster@pobox.com>
Mon, 2 Oct 2023 22:27:42 +0000 (15:27 -0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 2 Oct 2023 22:27:42 +0000 (15:27 -0700)
whats-cooking.txt

index ed86cf999ce8290f61f5cff5d2d08c8e4eec4296..6447ae76dcb697dfb095e2e4da85d077977a8db6 100644 (file)
@@ -1,10 +1,10 @@
 To: git@vger.kernel.org
-Subject: What's cooking in git.git (Sep 2023, #09; Thu, 28)
-X-master-at: bcb6cae2966cc407ca1afc77413b3ef11103c175
-X-next-at: bb76f4660628719c052ba326e360fb0c84258b3c
+Subject: What's cooking in git.git (Oct 2023, #01; Mon, 2)
+X-master-at: d0e8084c65cbf949038ae4cc344ac2c2efd77415
+X-next-at: 2d36e41d1a24beaf57bc0d7146d2b0ae93a5d61b
 Bcc: lwn@lwn.net, gitster@pobox.com
 
-What's cooking in git.git (Sep 2023, #09; Thu, 28)
+What's cooking in git.git (Oct 2023, #01; Mon, 2)
 --------------------------------------------------
 
 Here are the topics that have been cooking in my tree.  Commits
@@ -45,9 +45,175 @@ Release tarballs are available at:
 
        https://www.kernel.org/pub/software/scm/git/
 
+--------------------------------------------------
+[Graduated to 'master']
+
+* ds/stat-name-width-configuration (2023-09-18) 1 commit
+  (merged to 'next' on 2023-09-22 at dbf5bd96e8)
+ + diff --stat: add config option to limit filename width
+
+ "git diff" learned diff.statNameWidth configuration variable, to
+ give the default width for the name part in the "--stat" output.
+ source: <87badb12f040d1c66cd9b89074d3de5015a45983.1694446743.git.dsimic@manjaro.org>
+
+
+* hy/doc-show-is-like-log-not-diff-tree (2023-09-20) 1 commit
+  (merged to 'next' on 2023-09-22 at 5492c03eae)
+ + show doc: redirect user to git log manual instead of git diff-tree
+
+ Doc update.
+ source: <20230920132731.1259-1-hanyang.tony@bytedance.com>
+
+
+* jc/alias-completion (2023-09-20) 1 commit
+  (merged to 'next' on 2023-09-22 at 1d069e900b)
+ + completion: loosen and document the requirement around completing alias
+
+ The command line completion script (in contrib/) can be told to
+ complete aliases by including ": git <cmd> ;" in the alias to tell
+ it that the alias should be completed similar to how "git <cmd>" is
+ completed.  The parsing code for the alias as been loosened to
+ allow ';' without an extra space before it.
+ cf. <owlyjzssjro2.fsf@fine.c.googlers.com>
+ source: <xmqqy1h08zsp.fsf_-_@gitster.g>
+
+
+* jc/unresolve-removal (2023-07-31) 7 commits
+  (merged to 'next' on 2023-09-25 at 0563c8d8a1)
+ + checkout: allow "checkout -m path" to unmerge removed paths
+ + checkout/restore: add basic tests for --merge
+ + checkout/restore: refuse unmerging paths unless checking out of the index
+ + update-index: remove stale fallback code for "--unresolve"
+ + update-index: use unmerge_index_entry() to support removal
+ + resolve-undo: allow resurrecting conflicted state that resolved to deletion
+ + update-index: do not read HEAD and MERGE_HEAD unconditionally
+ (this branch is used by jc/rerere-cleanup.)
+
+ "checkout --merge -- path" and "update-index --unresolve path" did
+ not resurrect conflicted state that was resolved to remove path,
+ but now they do.
+ source: <20230731224409.4181277-1-gitster@pobox.com>
+
+
+* jk/fsmonitor-unused-parameter (2023-09-18) 8 commits
+  (merged to 'next' on 2023-09-19 at bd06505f9e)
+ + run-command: mark unused parameters in start_bg_wait callbacks
+ + fsmonitor: mark unused hashmap callback parameters
+ + fsmonitor/darwin: mark unused parameters in system callback
+ + fsmonitor: mark unused parameters in stub functions
+ + fsmonitor/win32: mark unused parameter in fsm_os__incompatible()
+ + fsmonitor: mark some maybe-unused parameters
+ + fsmonitor/win32: drop unused parameters
+ + fsmonitor: prefer repo_git_path() to git_pathdup()
+
+ Unused parameters in fsmonitor related code paths have been marked
+ as such.
+ source: <20230918222908.GA2659096@coredump.intra.peff.net>
+
+
+* jk/test-pass-ubsan-options-to-http-test (2023-09-21) 1 commit
+  (merged to 'next' on 2023-09-22 at bbe2f75937)
+ + test-lib: set UBSAN_OPTIONS to match ASan
+
+ UBSAN options were not propagated through the test framework to git
+ run via the httpd, unlike ASAN options, which has been corrected.
+ source: <20230921041825.GA2814583@coredump.intra.peff.net>
+
+
+* js/doc-status-with-submodules-mark-up-fix (2023-09-22) 1 commit
+  (merged to 'next' on 2023-09-25 at 7ed318fc91)
+ + Documentation/git-status: add missing line breaks
+
+ Docfix.
+ source: <pull.1590.git.1695392082207.gitgitgadget@gmail.com>
+
+
+* kh/range-diff-notes (2023-09-19) 1 commit
+  (merged to 'next' on 2023-09-22 at ac04978b4b)
+ + range-diff: treat notes like `log`
+
+ "git range-diff --notes=foo" compared "log --notes=foo --notes" of
+ the two ranges, instead of using just the specified notes tree.
+ source: <6e114271a2e7d2323193bd58bb307f60101942ce.1695154855.git.code@khaugsbakk.name>
+
+
+* ml/git-gui-exec-path-fix (2023-09-18) 3 commits
+  (merged to 'next' on 2023-09-19 at 0565b0b14b)
+ + Merge git-gui into ml/git-gui-exec-path-fix
+ + git-gui - use git-hook, honor core.hooksPath
+ + git-gui - re-enable use of hook scripts
+
+ Fix recent regression in Git-GUI that fails to run hook scripts at
+ all.
+
+
+* ob/am-msgfix (2023-09-21) 1 commit
+  (merged to 'next' on 2023-09-22 at 7f7589a06a)
+ + am: fix error message in parse_opt_show_current_patch()
+
+ The parameters to generate an error message have been corrected.
+ source: <20230921110727.789156-1-oswald.buddenhagen@gmx.de>
+
 --------------------------------------------------
 [New Topics]
 
+* cw/prelim-cleanup (2023-09-29) 4 commits
+ - parse: separate out parsing functions from config.h
+ - config: correct bad boolean env value error message
+ - wrapper: reduce scope of remove_or_warn()
+ - hex-ll: separate out non-hash-algo functions
+
+ Shuffle some bits across headers and sources to prepare for
+ libification effort.
+
+ Will merge to 'next'.
+ source: <cover.1696021277.git.jonathantanmy@google.com>
+
+
+* ds/init-diffstat-width (2023-09-29) 1 commit
+ - diff --stat: set the width defaults in a helper function
+
+ Code clean-up.
+
+ Will merge to 'next'.
+ source: <d45d1dac1a20699e370905b88b6fd0ec296751e7.1695441501.git.dsimic@manjaro.org>
+
+
+* ar/diff-index-merge-base-fix (2023-10-02) 1 commit
+ - diff: fix --merge-base with annotated tags
+
+ source: <20231001151845.3621551-1-hi@alyssa.is>
+
+--------------------------------------------------
+[Stalled]
+
+* tk/cherry-pick-sequence-requires-clean-worktree (2023-06-01) 1 commit
+ - cherry-pick: refuse cherry-pick sequence if index is dirty
+
+ "git cherry-pick A" that replays a single commit stopped before
+ clobbering local modification, but "git cherry-pick A..B" did not,
+ which has been corrected.
+
+ Expecting a reroll.
+ cf. <999f12b2-38d6-f446-e763-4985116ad37d@gmail.com>
+ source: <pull.1535.v2.git.1685264889088.gitgitgadget@gmail.com>
+
+
+* jc/diff-cached-fsmonitor-fix (2023-09-15) 3 commits
+ - diff-lib: fix check_removed() when fsmonitor is active
+ - Merge branch 'jc/fake-lstat' into jc/diff-cached-fsmonitor-fix
+ - Merge branch 'js/diff-cached-fsmonitor-fix' into jc/diff-cached-fsmonitor-fix
+ (this branch uses jc/fake-lstat.)
+
+ The optimization based on fsmonitor in the "diff --cached"
+ codepath is resurrected with the "fake-lstat" introduced earlier.
+
+ It is unknown if the optimization is worth resurrecting, but in case...
+ source: <xmqqr0n0h0tw.fsf@gitster.g>
+
+--------------------------------------------------
+[Cooking]
+
 * bb/unicode-width-table-15 (2023-09-25) 1 commit
   (merged to 'next' on 2023-09-28 at bb76f46606)
  + unicode: update the width tables to Unicode 15.1
@@ -60,13 +226,14 @@ Release tarballs are available at:
 
 
 * eb/limit-bulk-checkin-to-blobs (2023-09-26) 1 commit
- - bulk-checkin: only support blobs in index_bulk_checkin
+  (merged to 'next' on 2023-10-02 at 89c9c95966)
+ + bulk-checkin: only support blobs in index_bulk_checkin
 
  The "streaming" interface used for bulk-checkin codepath has been
  narrowed to take only blob objects for now, with no real loss of
  functionality.
 
- Will merge to 'next'.
+ Will merge to 'master'.
  source: <87msx99b9o.fsf_-_@gmail.froward.int.ebiederm.org>
 
 
@@ -110,43 +277,43 @@ Release tarballs are available at:
  source: <pull.1563.v4.git.1695709372.gitgitgadget@gmail.com>
 
 
-* eb/hash-transition (2023-09-27) 30 commits
- - t1016-compatObjectFormat: Add tests to verify the conversion between objects
- - t1006: Test oid compatibility with cat-file
- - t1006: Rename sha1 to oid
- - test-lib: Compute the compatibility hash so tests may use it
- - builtin/ls-tree: Let the oid determine the output algorithm
- - object-file: Handle compat objects in check_object_signature
+* eb/hash-transition (2023-10-02) 30 commits
+ - t1016-compatObjectFormat: add tests to verify the conversion between objects
+ - t1006: test oid compatibility with cat-file
+ - t1006: rename sha1 to oid
+ - test-lib: compute the compatibility hash so tests may use it
+ - builtin/ls-tree: let the oid determine the output algorithm
+ - object-file: handle compat objects in check_object_signature
  - tree-walk: init_tree_desc take an oid to get the hash algorithm
- - builtin/cat-file: Let the oid determine the output algorithm
- - rev-parse: Add an --output-object-format parameter
- - repository: Implement extensions.compatObjectFormat
- - object-file: Update object_info_extended to reencode objects
- - object-file-convert: Convert commits that embed signed tags
+ - builtin/cat-file: let the oid determine the output algorithm
+ - rev-parse: add an --output-object-format parameter
+ - repository: implement extensions.compatObjectFormat
+ - object-file: update object_info_extended to reencode objects
+ - object-file-convert: convert commits that embed signed tags
  - object-file-convert: convert commit objects when writing
- - object-file-convert: Don't leak when converting tag objects
+ - object-file-convert: don't leak when converting tag objects
  - object-file-convert: convert tag objects when writing
  - object-file-convert: add a function to convert trees between algorithms
- - object: Factor out parse_mode out of fast-import and tree-walk into in object.h
+ - object: factor out parse_mode out of fast-import and tree-walk into in object.h
  - cache: add a function to read an OID of a specific algorithm
  - tag: sign both hashes
- - commit: Export add_header_signature to support handling signatures on tags
- - commit: Convert mergetag before computing the signature of a commit
+ - commit: export add_header_signature to support handling signatures on tags
+ - commit: convert mergetag before computing the signature of a commit
  - commit: write commits for both hashes
- - object-file: Add a compat_oid_in parameter to write_object_file_flags
- - object-file: Update the loose object map when writing loose objects
- - loose: Compatibilty short name support
+ - object-file: add a compat_oid_in parameter to write_object_file_flags
+ - object-file: update the loose object map when writing loose objects
+ - loose: compatibilty short name support
  - loose: add a mapping between SHA-1 and SHA-256 for loose objects
  - repository: add a compatibility hash algorithm
- - object-names: Support input of oids in any supported hash
- - oid-array: Teach oid-array to handle multiple kinds of oids
- - object-file-convert: Stubs for converting from one object format to another
+ - object-names: support input of oids in any supported hash
+ - oid-array: teach oid-array to handle multiple kinds of oids
+ - object-file-convert: stubs for converting from one object format to another
 
  Teach a repository to work with both SHA-1 and SHA-256 hash algorithms.
 
  Breaks a few CI jobs when merged to 'seen'.
  cf. <xmqqbkdmjbkp.fsf@gitster.g>
- source: <87jzsbjt0a.fsf@gmail.froward.int.ebiederm.org>
+ source: <878r8l929e.fsf@gmail.froward.int.ebiederm.org>
 
 
 * xz/commit-title-soft-limit-doc (2023-09-28) 1 commit
@@ -158,35 +325,6 @@ Release tarballs are available at:
  Will merge to 'master'.
  source: <pull.1580.git.git.1695895155985.gitgitgadget@gmail.com>
 
---------------------------------------------------
-[Stalled]
-
-* tk/cherry-pick-sequence-requires-clean-worktree (2023-06-01) 1 commit
- - cherry-pick: refuse cherry-pick sequence if index is dirty
-
- "git cherry-pick A" that replays a single commit stopped before
- clobbering local modification, but "git cherry-pick A..B" did not,
- which has been corrected.
-
- Expecting a reroll.
- cf. <999f12b2-38d6-f446-e763-4985116ad37d@gmail.com>
- source: <pull.1535.v2.git.1685264889088.gitgitgadget@gmail.com>
-
-
-* jc/diff-cached-fsmonitor-fix (2023-09-15) 3 commits
- - diff-lib: fix check_removed() when fsmonitor is active
- - Merge branch 'jc/fake-lstat' into jc/diff-cached-fsmonitor-fix
- - Merge branch 'js/diff-cached-fsmonitor-fix' into jc/diff-cached-fsmonitor-fix
- (this branch uses jc/fake-lstat.)
-
- The optimization based on fsmonitor in the "diff --cached"
- codepath is resurrected with the "fake-lstat" introduced earlier.
-
- It is unknown if the optimization is worth resurrecting, but in case...
- source: <xmqqr0n0h0tw.fsf@gitster.g>
-
---------------------------------------------------
-[Cooking]
 
 * jx/remote-archive-over-smart-http (2023-09-25) 3 commits
  - archive: support remote archive from stateless transport
@@ -239,59 +377,14 @@ Release tarballs are available at:
 
 
 * ty/merge-tree-strategy-options (2023-09-25) 1 commit
- - merge-tree: add -X strategy option
+  (merged to 'next' on 2023-09-29 at aa65b54416)
+ + merge-tree: add -X strategy option
 
  "git merge-tree" learned to take strategy backend specific options
  via the "-X" option, like "git merge" does.
 
- Will merge to 'next'.
- source: <pull.1565.v6.git.1695522222723.gitgitgadget@gmail.com>
-
-
-* hy/doc-show-is-like-log-not-diff-tree (2023-09-20) 1 commit
-  (merged to 'next' on 2023-09-22 at 5492c03eae)
- + show doc: redirect user to git log manual instead of git diff-tree
-
- Doc update.
-
- Will merge to 'master'.
- source: <20230920132731.1259-1-hanyang.tony@bytedance.com>
-
-
-* jc/alias-completion (2023-09-20) 1 commit
-  (merged to 'next' on 2023-09-22 at 1d069e900b)
- + completion: loosen and document the requirement around completing alias
-
- The command line completion script (in contrib/) can be told to
- complete aliases by including ": git <cmd> ;" in the alias to tell
- it that the alias should be completed similar to how "git <cmd>" is
- completed.  The parsing code for the alias as been loosened to
- allow ';' without an extra space before it.
-
- Will merge to 'master'.
- cf. <owlyjzssjro2.fsf@fine.c.googlers.com>
- source: <xmqqy1h08zsp.fsf_-_@gitster.g>
-
-
-* jk/test-pass-ubsan-options-to-http-test (2023-09-21) 1 commit
-  (merged to 'next' on 2023-09-22 at bbe2f75937)
- + test-lib: set UBSAN_OPTIONS to match ASan
-
- UBSAN options were not propagated through the test framework to git
- run via the httpd, unlike ASAN options, which has been corrected.
-
  Will merge to 'master'.
- source: <20230921041825.GA2814583@coredump.intra.peff.net>
-
-
-* ob/am-msgfix (2023-09-21) 1 commit
-  (merged to 'next' on 2023-09-22 at 7f7589a06a)
- + am: fix error message in parse_opt_show_current_patch()
-
- The parameters to generate an error message have been corrected.
-
- Will merge to 'master'.
- source: <20230921110727.789156-1-oswald.buddenhagen@gmx.de>
+ source: <pull.1565.v6.git.1695522222723.gitgitgadget@gmail.com>
 
 
 * js/ci-coverity (2023-09-25) 7 commits
@@ -309,16 +402,6 @@ Release tarballs are available at:
  source: <pull.1588.v2.git.1695642662.gitgitgadget@gmail.com>
 
 
-* js/doc-status-with-submodules-mark-up-fix (2023-09-22) 1 commit
-  (merged to 'next' on 2023-09-25 at 7ed318fc91)
- + Documentation/git-status: add missing line breaks
-
- Docfix.
-
- Will merge to 'master'.
- source: <pull.1590.git.1695392082207.gitgitgadget@gmail.com>
-
-
 * js/config-parse (2023-09-21) 5 commits
  - config-parse: split library out of config.[c|h]
  - config.c: accept config_parse_options in git_config_from_stdin
@@ -331,47 +414,6 @@ Release tarballs are available at:
  source: <cover.1695330852.git.steadmon@google.com>
 
 
-* ml/git-gui-exec-path-fix (2023-09-18) 3 commits
-  (merged to 'next' on 2023-09-19 at 0565b0b14b)
- + Merge git-gui into ml/git-gui-exec-path-fix
- + git-gui - use git-hook, honor core.hooksPath
- + git-gui - re-enable use of hook scripts
-
- Fix recent regression in Git-GUI that fails to run hook scripts at
- all.
-
- Will merge to 'master'.
-
-
-* ds/stat-name-width-configuration (2023-09-18) 1 commit
-  (merged to 'next' on 2023-09-22 at dbf5bd96e8)
- + diff --stat: add config option to limit filename width
-
- "git diff" learned diff.statNameWidth configuration variable, to
- give the default width for the name part in the "--stat" output.
-
- Will merge to 'master'.
- source: <87badb12f040d1c66cd9b89074d3de5015a45983.1694446743.git.dsimic@manjaro.org>
-
-
-* jk/fsmonitor-unused-parameter (2023-09-18) 8 commits
-  (merged to 'next' on 2023-09-19 at bd06505f9e)
- + run-command: mark unused parameters in start_bg_wait callbacks
- + fsmonitor: mark unused hashmap callback parameters
- + fsmonitor/darwin: mark unused parameters in system callback
- + fsmonitor: mark unused parameters in stub functions
- + fsmonitor/win32: mark unused parameter in fsm_os__incompatible()
- + fsmonitor: mark some maybe-unused parameters
- + fsmonitor/win32: drop unused parameters
- + fsmonitor: prefer repo_git_path() to git_pathdup()
-
- Unused parameters in fsmonitor related code paths have been marked
- as such.
-
- Will merge to 'master'.
- source: <20230918222908.GA2659096@coredump.intra.peff.net>
-
-
 * jc/fake-lstat (2023-09-15) 1 commit
  - cache: add fake_lstat()
  (this branch is used by jc/diff-cached-fsmonitor-fix.)
@@ -395,17 +437,6 @@ Release tarballs are available at:
  source: <20230920104507.21664-1-karthik.188@gmail.com>
 
 
-* kh/range-diff-notes (2023-09-19) 1 commit
-  (merged to 'next' on 2023-09-22 at ac04978b4b)
- + range-diff: treat notes like `log`
-
- "git range-diff --notes=foo" compared "log --notes=foo --notes" of
- the two ranges, instead of using just the specified notes tree.
-
- Will merge to 'master'.
- source: <6e114271a2e7d2323193bd58bb307f60101942ce.1695154855.git.code@khaugsbakk.name>
-
-
 * rs/parse-options-value-int (2023-09-18) 2 commits
  - parse-options: use and require int pointer for OPT_CMDMODE
  - parse-options: add int value pointer to struct option
@@ -428,8 +459,7 @@ Release tarballs are available at:
  source: <20230909125446.142715-1-sorganov@gmail.com>
 
 
-* cc/repack-sift-filtered-objects-to-separate-pack (2023-09-25) 10 commits
- - SQUASH??? t0080 is already taken
+* cc/repack-sift-filtered-objects-to-separate-pack (2023-10-02) 9 commits
  - gc: add `gc.repackFilterTo` config option
  - repack: implement `--filter-to` for storing filtered out objects
  - gc: add `gc.repackFilter` config option
@@ -443,8 +473,9 @@ Release tarballs are available at:
  "git repack" machinery learns to pay attention to the "--filter="
  option.
 
- Looking better.
- source: <20230925152517.803579-1-christian.couder@gmail.com>
+ Will merge to 'next'.
+ cf. <ZRsknb4NxNHTR21E@nand.local>
+ source: <20231002165504.1325153-1-christian.couder@gmail.com>
 
 
 * pw/rebase-sigint (2023-09-07) 1 commit
@@ -462,23 +493,6 @@ Release tarballs are available at:
  source: <pull.1581.git.1694080982621.gitgitgadget@gmail.com>
 
 
-* cw/git-std-lib (2023-09-11) 7 commits
- - SQUASH???
- - git-std-lib: add test file to call git-std-lib.a functions
- - git-std-lib: introduce git standard library
- - parse: create new library for parsing strings and env values
- - config: correct bad boolean env value error message
- - wrapper: remove dependency to Git-specific internal file
- - hex-ll: split out functionality from hex
-
- Another libification effort.
-
- Needs more work.
- cf. <xmqqy1hfrk6p.fsf@gitster.g>
- cf. <20230915183927.1597414-1-jonathantanmy@google.com>
- source: <20230908174134.1026823-1-calvinwan@google.com>
-
-
 * cc/git-replay (2023-09-07) 15 commits
  - replay: stop assuming replayed branches do not diverge
  - replay: add --contained to rebase contained branches
@@ -585,31 +599,11 @@ Release tarballs are available at:
  - rerere: try_merge() should use LL_MERGE_ERROR when it means an error
  - rerere: fix comment on handle_file() helper
  - rerere: simplify check_one_conflict() helper function
- (this branch uses jc/unresolve-removal.)
 
  Code clean-up.
 
  Not ready to be reviewed yet.
- source: <20230731224409.4181277-1-gitster@pobox.com>
-
-
-* jc/unresolve-removal (2023-07-31) 7 commits
-  (merged to 'next' on 2023-09-25 at 0563c8d8a1)
- + checkout: allow "checkout -m path" to unmerge removed paths
- + checkout/restore: add basic tests for --merge
- + checkout/restore: refuse unmerging paths unless checking out of the index
- + update-index: remove stale fallback code for "--unresolve"
- + update-index: use unmerge_index_entry() to support removal
- + resolve-undo: allow resurrecting conflicted state that resolved to deletion
- + update-index: do not read HEAD and MERGE_HEAD unconditionally
- (this branch is used by jc/rerere-cleanup.)
-
- "checkout --merge -- path" and "update-index --unresolve path" did
- not resurrect conflicted state that was resolved to remove path,
- but now they do.
-
- Will merge to 'master'.
- source: <20230731224409.4181277-1-gitster@pobox.com>
+ source: <20230824205456.1231371-1-gitster@pobox.com>
 
 
 * rj/status-bisect-while-rebase (2023-08-01) 1 commit
@@ -632,3 +626,20 @@ Release tarballs are available at:
 
  Superseded by the js/ci-coverity topic.
  source: <b23951c569660e1891a7fb3ad2c2ea1952897bd7.1695332105.git.me@ttaylorr.com>
+
+
+* cw/git-std-lib (2023-09-11) 7 commits
+ . SQUASH???
+ . git-std-lib: add test file to call git-std-lib.a functions
+ . git-std-lib: introduce git standard library
+ . parse: create new library for parsing strings and env values
+ . config: correct bad boolean env value error message
+ . wrapper: remove dependency to Git-specific internal file
+ . hex-ll: split out functionality from hex
+
+ Another libification effort.
+
+ Superseded by the cw/prelim-cleanup topic.
+ cf. <xmqqy1hfrk6p.fsf@gitster.g>
+ cf. <20230915183927.1597414-1-jonathantanmy@google.com>
+ source: <20230908174134.1026823-1-calvinwan@google.com>